index.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. <script setup lang="ts">
  2. import { ref, computed } from "vue"
  3. import type { Header } from "@/components/Table/table-partials/models"
  4. import Rs from "@/core/services/RequestService"
  5. import type { VbFormItem } from "@/components/Forms/models"
  6. import DySelect from "@/components/select/DySelect.vue"
  7. import { ElSelect } from "element-plus"
  8. import { dialog } from "@/core/utils/message"
  9. import { useRouter } from "vue-router"
  10. const router = useRouter()
  11. const operate_status = ref<any>()
  12. const name = ref<string>("")
  13. const monitoring_type = ref<string>("")
  14. const catering_scale = ref<string>("")
  15. const catering_style = ref<string>("")
  16. const org_id = ref<string>("")
  17. const type = ref<string>("")
  18. const size = ref<any>("default")
  19. const table = ref()
  20. const query = () => {
  21. const params = {
  22. operate_status: operate_status.value,
  23. name: name.value,
  24. monitoring_type: monitoring_type.value,
  25. type: type.value,
  26. org_id: org_id.value,
  27. catering_scale: catering_scale.value,
  28. catering_style: catering_style.value,
  29. }
  30. const keys = Object.keys(params)
  31. keys.forEach((key) => {
  32. if (params[key] === "" || params[key] === null) {
  33. delete params[key]
  34. }
  35. })
  36. queryParams.value = Object.assign({}, params)
  37. }
  38. const cols = ref<Array<Header>>([
  39. {
  40. name: "商户名称",
  41. field: "name",
  42. width: 230,
  43. },
  44. {
  45. name: "区域",
  46. field: "org_name",
  47. width: 100,
  48. },
  49. {
  50. name: "菜系",
  51. field: "catering_style_name",
  52. },
  53. {
  54. name: "规模",
  55. field: "catering_scale_name",
  56. },
  57. {
  58. name: "商户类型",
  59. field: "type_name",
  60. },
  61. {
  62. name: "灶头数",
  63. field: "stove_num",
  64. },
  65. {
  66. name: "排口数",
  67. field: "outlet_num",
  68. },
  69. {
  70. name: "油烟设施数量",
  71. field: "facilities_num",
  72. },
  73. {
  74. name: "净化器数量",
  75. field: "purifier_num",
  76. },
  77. {
  78. name: "监测类型",
  79. field: "monitoring_type_name",
  80. },
  81. {
  82. name: "运营状态",
  83. field: "operate_status_name",
  84. },
  85. {
  86. name: "操作",
  87. field: "action",
  88. width: 300,
  89. },
  90. ])
  91. const queryParams = ref<any>({
  92. monitoring_type: "",
  93. name: "",
  94. operate_status: null,
  95. type: "",
  96. org_id: "",
  97. catering_scale: "",
  98. catering_style: "",
  99. })
  100. const reset = () => {
  101. monitoring_type.value = ""
  102. name.value = ""
  103. operate_status.value = null
  104. type.value = ""
  105. org_id.value = ""
  106. catering_scale.value = ""
  107. catering_style.value = ""
  108. queryParams.value = {
  109. monitoring_type: "",
  110. name: "",
  111. operate_status: "",
  112. type: "",
  113. org_id: "",
  114. catering_scale: "",
  115. catering_style: "",
  116. }
  117. }
  118. const dySearchSelectStyle = { width: "120px" }
  119. const statusOption = ref<Array<any>>([
  120. {
  121. value: 0,
  122. label: "营业",
  123. },
  124. {
  125. value: 1,
  126. label: "间休",
  127. },
  128. {
  129. value: 2,
  130. label: "停业",
  131. },
  132. ])
  133. //只放增改传到后台的共用参数,其余需要modal显示的参数另外定义
  134. const emptyData = {
  135. company_id: [] as any[],
  136. operate_status: 0,
  137. }
  138. const formData = ref<any>({
  139. company_id: 0,
  140. operate_status: 0,
  141. name: "",
  142. monitoring_type_name: "",
  143. facilities_num: 0,
  144. org_name: "",
  145. })
  146. const items: Array<VbFormItem> = [
  147. {
  148. field: "name",
  149. label: "企业名称:",
  150. required: false,
  151. component: "innerText",
  152. span: 24,
  153. },
  154. {
  155. field: "org_name",
  156. label: "企业地址:",
  157. required: false,
  158. component: "innerText",
  159. span: 24,
  160. },
  161. {
  162. field: "facilities_num",
  163. labelWidth: 90,
  164. label: "监测点数量:",
  165. component: "innerText",
  166. span: 24,
  167. },
  168. {
  169. field: "operate_status",
  170. label: "当前状态:",
  171. class: "w-100",
  172. component: ElSelect,
  173. span: 24,
  174. data: [
  175. {
  176. value: 0,
  177. label: "营业",
  178. },
  179. {
  180. value: 1,
  181. label: "间休",
  182. },
  183. {
  184. value: 2,
  185. label: "停业",
  186. },
  187. ],
  188. },
  189. ]
  190. const modal = ref<any>()
  191. //定义需要操作的类型
  192. const opreationType = ref<"A" | "U" | "D" | "BU">("A")
  193. const modalTitlePrefix = computed(() => {
  194. return opreationType.value == "A" ? "新增" : opreationType.value == "U" || opreationType.value == "BU" ? "编辑" : ""
  195. })
  196. function edit(row: any) {
  197. opreationType.value = "U"
  198. formData.value = Object.assign({}, row)
  199. modal.value.show()
  200. }
  201. const selectedItems = ref<Array<any>>([])
  202. function onSave() {
  203. dialog.confirm("确认更新商户状态?", "提交确认", (isConfirmed: any) => {
  204. if (isConfirmed.isConfirmed) {
  205. emptyData.company_id = [Number(formData.value.company_id)]
  206. emptyData.operate_status = Number(formData.value.operate_status)
  207. Rs.post("sys/company/updateCompanyStatus", { data: emptyData }).then(() => {
  208. table.value.search()
  209. })
  210. }
  211. })
  212. }
  213. const onItemsAllChange = (isChecked: boolean, rows: Array<any>) => {
  214. selectedItems.value = rows
  215. }
  216. const formatRemoteData = (data: any) => {
  217. return data.list
  218. }
  219. function contactMg(row: any) {
  220. console.log("---", row)
  221. router.push({
  222. path: "/server/busManage/contact",
  223. query: {
  224. name: row.name,
  225. id: row.company_id,
  226. back: 1,
  227. },
  228. })
  229. }
  230. function deviceMg(row: any) {
  231. router.push({
  232. path: "/server/busManage/device",
  233. query: {
  234. name: row.name,
  235. id: row.company_id,
  236. monitoring_type: row.monitoring_type,
  237. back: 1,
  238. },
  239. })
  240. }
  241. function delRow(row: any) {
  242. dialog.confirm(`确定删除商户${row.name}吗?`, "删除商户", (confirme: any) => {
  243. if (confirme.isConfirmed) {
  244. Rs.post("/sys/company/delByIds", { data: [row.id] }).then(() => {
  245. table.value.search()
  246. })
  247. }
  248. })
  249. }
  250. </script>
  251. <template>
  252. <!-- :fixed-column="true"
  253. :fixed-number="1"
  254. :fixed-right-number="1"
  255. :scroll="{ x: 1800 }" -->
  256. <VbDataTable
  257. ref="table"
  258. :header="cols"
  259. url="sys/company/selectForPage"
  260. method="post"
  261. :query-params="queryParams"
  262. :has-checkbox="true"
  263. :check-multiple="true"
  264. :fixed-column="true"
  265. :fixed-number="1"
  266. :fixed-right-number="1"
  267. :scroll="{ x: 1800 }"
  268. checkbox-field="company_id"
  269. v-model:selectedItems="selectedItems"
  270. @on-items-all-change="onItemsAllChange"
  271. >
  272. <template v-slot:table-tool>
  273. <el-form class="align-items-center" :inline="true" :label-width="80">
  274. <el-form-item class="mb-0 me-5 align-items-center form-width" label="商户名称">
  275. <el-input class="w-100" v-model="name" placeholder="请输入商户名称" :size="size" />
  276. </el-form-item>
  277. <el-form-item class="mb-0 me-5 align-items-center form-width" label="区域">
  278. <OrgSelectTree v-model:value="org_id" :size="size"></OrgSelectTree>
  279. </el-form-item>
  280. <el-form-item class="mb-0 me-5 align-items-center form-width" label="菜系">
  281. <DySelect
  282. class="w-100"
  283. v-model="catering_style"
  284. :style="dySearchSelectStyle"
  285. url="sys/dict/getList?code=000010001&key=temp"
  286. placeholder="请选择"
  287. :size="size"
  288. :formatRemoteData="formatRemoteData"
  289. ></DySelect>
  290. </el-form-item>
  291. <el-form-item class="mb-0 me-5 align-items-center form-width" label="营业规模">
  292. <DySelect
  293. class="w-100"
  294. v-model="catering_scale"
  295. :style="dySearchSelectStyle"
  296. url="sys/dict/getList?code=000090001&key=temp"
  297. placeholder="请选择"
  298. :size="size"
  299. :formatRemoteData="formatRemoteData"
  300. ></DySelect>
  301. </el-form-item>
  302. <el-form-item class="mb-0 me-5 align-items-center form-width" label="监测类型">
  303. <DySelect
  304. class="w-100"
  305. v-model="monitoring_type"
  306. :style="dySearchSelectStyle"
  307. url="sys/dict/getCompanyMonitoringType"
  308. placeholder="请选择"
  309. :size="size"
  310. ></DySelect>
  311. </el-form-item>
  312. <el-form-item class="mb-0 me-5 align-items-center form-width" label="运营状态">
  313. <DySelect
  314. v-model="operate_status"
  315. class="w-100"
  316. :style="dySearchSelectStyle"
  317. :staticOptions="statusOption"
  318. placeholder="请选择"
  319. :size="size"
  320. ></DySelect>
  321. </el-form-item>
  322. <el-form-item class="mb-0 me-5 align-items-center form-width" label="商户类型">
  323. <DySelect
  324. class="w-100"
  325. v-model="type"
  326. :style="dySearchSelectStyle"
  327. url="sys/dict/getList?code=000200000&key=temp"
  328. placeholder="请选择"
  329. :formatRemoteData="formatRemoteData"
  330. :size="size"
  331. ></DySelect>
  332. </el-form-item>
  333. <el-form-item class="mb-0 me-0 align-items-center form-width">
  334. <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="query">查询</el-button>
  335. <el-button class="ms-3 mt-0 btn btn-sm btn-default" @click="reset">重置</el-button>
  336. </el-form-item>
  337. </el-form>
  338. </template>
  339. <template #action="{ row }">
  340. <div class="text-danger text-center">
  341. <span class="table-action" @click="contactMg(row)">联系人管理</span>
  342. <span class="table-action" @click="deviceMg(row)">设施管理</span>
  343. <!-- <span class="table-action" @click="edit(row)">详情</span> -->
  344. <span class="table-action" @click="edit(row)">编辑</span>
  345. <span class="table-action" @click="delRow(row)">删除</span>
  346. </div>
  347. </template>
  348. </VbDataTable>
  349. <VbModal
  350. v-model:modal="modal"
  351. :form-data="formData"
  352. :form-items="items"
  353. backdrop="static"
  354. modal-dialog-style="width: 400px"
  355. :keyboard="false"
  356. :title-prefix="modalTitlePrefix"
  357. title="企业运营状态"
  358. form-label-width="90"
  359. modal-body-class="px-10"
  360. @confirm="onSave"
  361. ></VbModal>
  362. </template>
  363. <style scoped lang="scss">
  364. // ::v-deep .el-form-item__label {
  365. // width: 80px !important;
  366. // }
  367. .form-width {
  368. width: 300px;
  369. }
  370. </style>