index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. <template>
  2. <ContentWrap>
  3. <!-- 搜索工作栏 -->
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="100px"
  10. >
  11. <el-form-item label="工程号" prop="projectNo">
  12. <el-input
  13. v-model="queryParams.projectNo"
  14. placeholder="请输入工程号"
  15. clearable
  16. @keyup.enter="handleQuery"
  17. class="!w-240px"
  18. />
  19. </el-form-item>
  20. <!-- <el-form-item label="使用证编号 " prop="certificateNo">-->
  21. <!-- <el-input-->
  22. <!-- v-model="queryParams.certificateNo"-->
  23. <!-- placeholder="请输入使用证编号"-->
  24. <!-- clearable-->
  25. <!-- @keyup.enter="handleQuery"-->
  26. <!-- class="!w-240px"-->
  27. <!-- />-->
  28. <!-- </el-form-item>-->
  29. <el-form-item label="单位代码" prop="unitCode">
  30. <el-input
  31. v-model="queryParams.unitCode"
  32. placeholder="请输入单位代码"
  33. clearable
  34. @keyup.enter="handleQuery"
  35. class="!w-240px"
  36. />
  37. </el-form-item>
  38. <el-form-item label="使用单位" prop="unitName">
  39. <el-input
  40. v-model="queryParams.unitName"
  41. placeholder="请输入使用单位"
  42. clearable
  43. @keyup.enter="handleQuery"
  44. class="!w-240px"
  45. />
  46. </el-form-item>
  47. <el-form-item label="责任部门" prop="relationDept">
  48. <DeptSelect
  49. v-model="queryParams.relationDept"
  50. placeholder="请选择责任部门"
  51. clearable
  52. class="!w-240px"
  53. />
  54. </el-form-item>
  55. <!-- 区域 -->
  56. <el-form-item label="区域" prop="equipDistrict">
  57. <AreaSelect v-model="queryParams.equipDistrict"
  58. placeholder="请选择区域"
  59. class="!w-[240px]"
  60. multiple
  61. collapse-tags
  62. collapse-tags-tooltip
  63. :clearable="true"
  64. @clear="handleAreaClear"
  65. @change="handleAreaChange"
  66. />
  67. </el-form-item>
  68. <!-- 街道 -->
  69. <el-form-item label="街道" prop="equipStreet">
  70. <StreetSelect v-model="queryParams.equipStreet"
  71. :district-ids="queryParams.equipDistrict"
  72. placeholder="请选择街道"
  73. class="!w-[240px]"
  74. multiple
  75. collapse-tags
  76. collapse-tags-tooltip
  77. :clearable="true"
  78. @clear="handleStreetClear"
  79. @change="handleStreetChange"
  80. />
  81. </el-form-item>
  82. <!-- 管道类别 -->
  83. <el-form-item label="管道类别" prop="pipeCategory">
  84. <el-select v-model="queryParams.pipeCategory" multiple placeholder="请选择管道类别" clearable class="!w-[240px]">
  85. <el-option v-for="item in pipeTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
  86. </el-select>
  87. </el-form-item>
  88. <el-form-item label="使用状态" prop="useStatus">
  89. <el-select
  90. v-model="queryParams.useStatus"
  91. placeholder="请选择使用状态"
  92. multiple
  93. clearable
  94. class="!w-240px"
  95. >
  96. <el-option
  97. v-for="dict in getStrDictOptions(DICT_TYPE.PIPE_USE_STATUS)"
  98. :key="dict.value"
  99. :label="dict.label"
  100. :value="dict.value"
  101. />
  102. </el-select>
  103. </el-form-item>
  104. <el-form-item class="ml-25">
  105. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  106. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  107. <el-button
  108. type="primary"
  109. plain
  110. @click="openForm('create')"
  111. v-hasPermi="['pressure:pipe-equipment:create']"
  112. >
  113. <Icon icon="ep:plus" class="mr-5px" /> 新增管道
  114. </el-button>
  115. <!-- 复制管道 -->
  116. <!-- <el-button
  117. type="primary"
  118. plain
  119. @click="handleCopyPipe"
  120. >
  121. <Icon icon="ep:document-copy" class="mr-5px" /> 复制管道
  122. </el-button> -->
  123. <!-- 同步市局 -->
  124. <el-button
  125. type="primary"
  126. plain
  127. @click="handleSyncCity"
  128. >
  129. <Icon icon="ep:refresh" class="mr-5px" /> 同步市局
  130. </el-button>
  131. <el-button
  132. type="success"
  133. plain
  134. @click="handleExport"
  135. :loading="exportLoading"
  136. >
  137. <Icon icon="ep:download" class="mr-5px" /> 导出
  138. </el-button>
  139. </el-form-item>
  140. </el-form>
  141. </ContentWrap>
  142. <!-- 列表 -->
  143. <ContentWrap>
  144. <el-table v-loading="loading" :data="list" :stripe="true" border>
  145. <!-- 子表的列表 -->
  146. <el-table-column type="expand">
  147. <template #default="scope">
  148. <PipeEquipmentDetailList :pipe-equipment-id="scope.row.id" />
  149. </template>
  150. </el-table-column>
  151. <el-table-column label="区域" align="center" prop="equipDistrict" sortable >
  152. <template #default="scope">
  153. <div>{{ scope.row.equipDistrictName }}</div>
  154. </template>
  155. </el-table-column>
  156. <el-table-column label="街道" align="center" prop="equipStreet" sortable >
  157. <template #default="scope">
  158. <div>{{ scope.row.equipStreetName }}</div>
  159. </template>
  160. </el-table-column>
  161. <!-- 工程号 -->
  162. <el-table-column label="工程号" align="center" prop="projectNo" />
  163. <!-- 工程名称 -->
  164. <el-table-column label="工程名称" align="center" prop="projectName" />
  165. <!-- 使用证号 -->
  166. <el-table-column label="使用证号" align="center" prop="certificateNo" />
  167. <!-- 单位名称 -->
  168. <el-table-column label="单位名称" align="center" prop="unitName" sortable />
  169. <!-- 单位地址 -->
  170. <el-table-column label="管道使用地址" align="center" prop="pipeAddress" />
  171. <!-- 管道使用地址 -->
  172. <!-- <el-table-column label="管道使用地址" align="center" prop="pipeAddress" /> -->
  173. <!-- 管道类别 -->
  174. <el-table-column label="管道类别" align="center" prop="pipeCategory" sortable >
  175. <template #default="scope">
  176. {{ pipeTypeOptions.find(i => i.value == scope.row.pipeCategory)?.label }}
  177. </template>
  178. </el-table-column>
  179. <el-table-column label="使用状态" align="center" prop="useStatus" min-width="100" sortable>
  180. <template #default="scope">
  181. <dict-tag :type="DICT_TYPE.PIPE_USE_STATUS" :value="scope.row.useStatus" />
  182. </template>
  183. </el-table-column>
  184. <el-table-column label="操作" align="center" min-width="120px" fixed="right">
  185. <template #default="scope">
  186. <el-button
  187. link
  188. type="primary"
  189. @click="openForm('update', scope.row.id)"
  190. v-hasPermi="['pressure:pipe-equipment:update']"
  191. >
  192. 编辑
  193. </el-button>
  194. <!-- <el-button
  195. link
  196. type="danger"
  197. @click="handleDelete(scope.row.id)"
  198. v-hasPermi="['pressure:pipe-equipment:delete']"
  199. >
  200. 删除
  201. </el-button> -->
  202. <el-button
  203. link
  204. type="default"
  205. @click="handleModifyRecord(scope.row.id)"
  206. >
  207. 修改记录
  208. </el-button>
  209. </template>
  210. </el-table-column>
  211. </el-table>
  212. <!-- 分页 -->
  213. <Pagination
  214. :total="total"
  215. v-model:page="queryParams.pageNo"
  216. v-model:limit="queryParams.pageSize"
  217. @pagination="getList"
  218. />
  219. </ContentWrap>
  220. <!-- 修改记录弹窗 -->
  221. <PipeEquipmentOperationRecord ref="operationRecordRef" @success="getList" />
  222. </template>
  223. <script setup lang="ts">
  224. import { EquipPipeApi, EquipPipeVO } from '@/api/pressure2/equippipe'
  225. import PipeEquipmentDetailList from './components/PipeEquipmentDetailList.vue'
  226. import AreaSelect from '@/views/system/equipcontainer/components/AreaSelect.vue'
  227. import StreetSelect from '@/views/system/equipcontainer/components/StreetSelect.vue'
  228. import DeptSelect from "@/views/pressure2/equipboilerscheduling/components/DeptSelect.vue";
  229. import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
  230. import { dateFormatter2 } from '@/utils/formatTime'
  231. import download from '@/utils/download'
  232. import {useRoute, useRouter} from 'vue-router'
  233. import PipeEquipmentOperationRecord from './components/PipeEquipmentOperationRecord.vue'
  234. /** 容器管道设备 列表 */
  235. defineOptions({ name: 'PipeEquipment' })
  236. const message = useMessage() // 消息弹窗
  237. const { t } = useI18n() // 国际化
  238. const router = useRouter()
  239. const loading = ref(true) // 列表的加载中
  240. const list = ref<EquipPipeVO[]>([]) // 列表的数据
  241. const total = ref(0) // 列表的总页数
  242. const queryParams = reactive({
  243. pageNo: 1,
  244. pageSize: 10,
  245. unitCode: undefined,
  246. equipDistrict: undefined,
  247. equipStreet: undefined,
  248. certificateNo: undefined,
  249. unitName: undefined,
  250. projectNo: undefined,
  251. useProjectName: undefined,
  252. pipeCategory: undefined,
  253. useStatus: undefined,
  254. relationDept: undefined,
  255. })
  256. const queryFormRef = ref() // 搜索的表单
  257. const pipeTypeOptions = computed(() => getStrDictOptions(DICT_TYPE.PIPE_TYPE))
  258. const areaStreetMap = ref<Map<number, number[]>>(new Map())
  259. const handleAreaClear = () => {
  260. queryParams.equipDistrict = undefined
  261. areaStreetMap.value.clear()
  262. }
  263. const handleAreaChange = (areas: number[]) => {
  264. queryParams.equipStreet = undefined
  265. areaStreetMap.value.clear()
  266. return
  267. }
  268. const handleStreetClear = () => {
  269. areaStreetMap.value.clear()
  270. }
  271. const handleStreetChange = (streets: number[], areaId: number) => {
  272. if (queryParams.equipDistrict && areaId === queryParams.equipDistrict) {
  273. areaStreetMap.value.set(areaId, streets)
  274. }
  275. }
  276. /** 查询列表 */
  277. const getList = async () => {
  278. loading.value = true
  279. try {
  280. const data = await EquipPipeApi.getEquipPipePage(queryParams)
  281. list.value = data.list
  282. total.value = data.total
  283. } finally {
  284. loading.value = false
  285. }
  286. }
  287. /** 搜索按钮操作 */
  288. const handleQuery = () => {
  289. queryParams.pageNo = 1
  290. getList()
  291. }
  292. /** 重置按钮操作 */
  293. const resetQuery = () => {
  294. queryFormRef.value.resetFields()
  295. handleQuery()
  296. }
  297. /** 导出按钮操作 */
  298. const exportLoading = ref(false)
  299. const handleExport = async () => {
  300. exportLoading.value = true
  301. try {
  302. const data =await EquipPipeApi.exportEquipPipe(queryParams)
  303. download.excel(data, '管道设备.xls')
  304. } finally {
  305. exportLoading.value = false
  306. }
  307. }
  308. /** 添加/修改操作 */
  309. const openForm = (type: string, id?: number) => {
  310. const query: any = { type }
  311. if (id) {
  312. query.id = id
  313. }
  314. router.push({
  315. name: 'PipeEquipmentForm',
  316. query
  317. })
  318. }
  319. /** 删除按钮操作 */
  320. const handleDelete = async (id: string) => {
  321. try {
  322. // 删除的二次确认
  323. await message.delConfirm()
  324. // 发起删除
  325. await EquipPipeApi.deleteEquipPipe(id)
  326. message.success(t('common.delSuccess'))
  327. // 刷新列表
  328. await getList()
  329. } catch {}
  330. }
  331. /** 修改记录 */
  332. const operationRecordRef = ref()
  333. const handleModifyRecord = (id: string) => {
  334. operationRecordRef.value.open(id)
  335. }
  336. /** 复制管道 */
  337. const handleCopyPipe = () => {
  338. console.log('复制管道')
  339. }
  340. /** 同步市局 */
  341. const handleSyncCity = () => {
  342. console.log('同步市局')
  343. }
  344. const route = useRoute()
  345. watch(() => route.path, async () => {
  346. if (route.path === '/sbda/pipe-equipment') {
  347. await getList()
  348. }
  349. })
  350. /** 初始化 **/
  351. onMounted(() => {
  352. console.log(pipeTypeOptions)
  353. getList()
  354. })
  355. </script>