setup.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <template>
  2. <div class="table_item">
  3. <s-table
  4. ref="tableRef"
  5. :columns="columns"
  6. :data="loadData"
  7. :row-key="(record) => record.id"
  8. bordered
  9. @resizeColumn="handleResizeColumn"
  10. >
  11. <template #operator>
  12. <!-- 搜索区域 -->
  13. <div class="table-search">
  14. <div class="table-search-form">
  15. <a-row :gutter="10">
  16. <a-form
  17. ref="searchFormRef"
  18. name="advanced_search"
  19. layout="inline"
  20. :label-col="{ style: { width: '70px', justifyContent: 'end' } }"
  21. :model="searchFormState"
  22. class="ant-advanced-search-form"
  23. >
  24. <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"
  25. ><a-form-item label="对象名称" name="name">
  26. <a-input v-model:value="searchFormState.name" placeholder="请输入对象名称" /> </a-form-item
  27. ></a-col>
  28. </a-form>
  29. </a-row>
  30. </div>
  31. <div class="table-search-buttons">
  32. <a-button type="primary" @click="tableRef.refresh(true)">查询</a-button>
  33. <a-button class="xn-mg08" @click="reset">重置</a-button>
  34. </div>
  35. </div>
  36. <!-- 其他操作区域 -->
  37. <div class="table-head-btn">
  38. <div class="btn-left">
  39. <a-button type="primary" @click="formRef.onOpen()">
  40. <template #icon><plus-outlined /></template>新增
  41. </a-button>
  42. </div>
  43. <!-- <div class="btn-right">
  44. <a-button class="xn-mg08">
  45. <template #icon><CloudUploadOutlined /> </template>导入
  46. </a-button>
  47. <a-button>
  48. <template #icon><download-outlined /></template>导出
  49. </a-button>
  50. </div> -->
  51. </div>
  52. </template>
  53. <template #bodyCell="{ column, record, index }">
  54. <!-- 序号 -->
  55. <template v-if="column.dataIndex === 'index'">{{ index + 1 }} </template>
  56. <template v-if="column.dataIndex === 'status'">
  57. <span>
  58. <a-tag :color="record.status == '1' ? '#87d068' : '#cd201f'">
  59. {{ record.status == '1' ? '正常' : '停用' }}
  60. </a-tag>
  61. </span>
  62. </template>
  63. <template v-if="column.dataIndex === 'sensorType'">
  64. {{ $TOOL.dictTypeData('SENSORTYPE', record.sensorType) }}
  65. </template>
  66. <template v-if="column.dataIndex === 'action'">
  67. <a-button type="link" size="small" @click="formRef.onOpen(record)">编辑</a-button>
  68. <a-popconfirm title="确定要删除吗?" @confirm="deleteData(record)">
  69. <a-button type="link" danger size="small">删除</a-button>
  70. </a-popconfirm>
  71. <a-button type="link" size="small" @click="leaveFor('/biz/location', record)">监测点配置</a-button>
  72. </template>
  73. </template>
  74. <!-- <template #expandedRowRender="{ record }">
  75. <a-tabs v-model:activeKey="record.activeKey" size="small" type="card">
  76. <a-tab-pane key="1" tab="基本信息">
  77. <div class="list">
  78. <a-descriptions bordered size="small">
  79. <a-descriptions-item label="对象名称" :span="2">{{ record.name }}</a-descriptions-item>
  80. <a-descriptions-item label="对象编号" :span="2">{{ record.dxcode }}</a-descriptions-item>
  81. <a-descriptions-item label="品牌">{{ record.pp }}</a-descriptions-item>
  82. <a-descriptions-item label="型号">{{ record.xh }}</a-descriptions-item>
  83. <a-descriptions-item label="类型">{{ record.type }}</a-descriptions-item>
  84. <a-descriptions-item label="使用状态">{{ record.syzt }}</a-descriptions-item>
  85. <a-descriptions-item label="报警状态">{{ record.bjzt }}</a-descriptions-item>
  86. <a-descriptions-item label="位置">{{ record.wz }}</a-descriptions-item>
  87. </a-descriptions>
  88. </div>
  89. </a-tab-pane>
  90. <a-tab-pane key="2" tab="冷链设备">
  91. <div class="list">
  92. <a-descriptions bordered size="small">
  93. <a-descriptions-item label="冷链编号" :span="2">{{ record.llcode }}</a-descriptions-item>
  94. <a-descriptions-item label="对应路数" :span="2">{{ record.dyls }}</a-descriptions-item>
  95. <a-descriptions-item label="所属中继" :span="2">{{ record.sszj }}</a-descriptions-item>
  96. </a-descriptions>
  97. </div>
  98. </a-tab-pane>
  99. <a-tab-pane key="3" tab="温湿度设定">
  100. <div class="list">
  101. <a-descriptions title="报警上下限" bordered size="small">
  102. <a-descriptions-item label="温度上限(℃)" :span="2">{{ record.wdsx }}</a-descriptions-item>
  103. <a-descriptions-item label="温度下限(℃)" :span="2">{{ record.wdxx }}</a-descriptions-item>
  104. <a-descriptions-item label="湿度上限(%)" :span="2">{{ record.sdsx }}</a-descriptions-item>
  105. <a-descriptions-item label="湿度下限(%)" :span="2">{{ record.sdxx }}</a-descriptions-item>
  106. </a-descriptions>
  107. <a-descriptions title="温湿度修正" bordered size="small">
  108. <a-descriptions-item label="温度(-10~10)(℃)" :span="2">{{ record.wdxz }}</a-descriptions-item>
  109. <a-descriptions-item label="湿度(-20~20)(%)" :span="2">{{ record.sdxz }}</a-descriptions-item>
  110. </a-descriptions>
  111. </div>
  112. </a-tab-pane>
  113. <a-tab-pane key="4" tab="报警信息">
  114. <div class="list">
  115. <a-descriptions title="对象信息" bordered size="small">
  116. <a-descriptions-item label="对象名称" :span="2">{{ record.name }}</a-descriptions-item>
  117. <a-descriptions-item label="监控点名称" :span="2">{{ record.jkd }}</a-descriptions-item>
  118. <a-descriptions-item label="报警级别" :span="2">{{ '1' }}</a-descriptions-item>
  119. <a-descriptions-item label="延时时间" :span="2">{{ '0' }}</a-descriptions-item>
  120. <a-descriptions-item label="报警频率" :span="2">{{ '1' }}</a-descriptions-item>
  121. <a-descriptions-item label="执行间隔" :span="2">{{ '10' }}</a-descriptions-item>
  122. <a-descriptions-item label="是否逐级报警" :span="2">{{ '否' }}</a-descriptions-item>
  123. <a-descriptions-item label="逐级报警时间间隔" :span="2">{{ '0' }}</a-descriptions-item>
  124. <a-descriptions-item label="允许报警开始时间" :span="2"></a-descriptions-item>
  125. <a-descriptions-item label="允许报警结束时间" :span="2"></a-descriptions-item>
  126. </a-descriptions>
  127. <a-descriptions title="短信报警" bordered size="small">
  128. <a-descriptions-item label="提醒人姓名" :span="2">{{ '欧阳天添' }}</a-descriptions-item>
  129. <a-descriptions-item label="接收电话" :span="2">{{ '13476548750' }}</a-descriptions-item>
  130. </a-descriptions>
  131. </div>
  132. </a-tab-pane>
  133. <a-tab-pane key="5" tab="温度记录">
  134. <div class="list">温度记录</div>
  135. </a-tab-pane>
  136. </a-tabs>
  137. </template> -->
  138. </s-table>
  139. <Form ref="formRef" @successful="tableRef.refresh(true)" />
  140. </div>
  141. </template>
  142. <script setup>
  143. import router from '@/router'
  144. import setupApi from '@/api/basicset/setupApi'
  145. import Form from './form.vue'
  146. const formRef = ref()
  147. const searchFormRef = ref()
  148. const searchFormState = ref({})
  149. const tableRef = ref()
  150. const columns = [
  151. {
  152. title: '序号',
  153. dataIndex: 'index',
  154. align: 'center',
  155. width: 50
  156. },
  157. {
  158. title: '对象名称',
  159. dataIndex: 'name',
  160. align: 'center',
  161. ellipsis: true,
  162. resizable: true
  163. },
  164. {
  165. title: '对象状态',
  166. dataIndex: 'status',
  167. align: 'center',
  168. ellipsis: true,
  169. resizable: true
  170. },
  171. {
  172. title: '监控位置区域',
  173. dataIndex: 'monitorPoint',
  174. align: 'center',
  175. ellipsis: true,
  176. resizable: true
  177. },
  178. {
  179. title: '操作',
  180. dataIndex: 'action',
  181. align: 'center',
  182. width: 200
  183. }
  184. ]
  185. // 可伸缩列
  186. const handleResizeColumn = (w, col) => {
  187. col.width = w
  188. }
  189. const loadData = (parameter) => {
  190. return setupApi.setupPage(Object.assign(parameter, searchFormState.value)).then((res) => {
  191. return res
  192. })
  193. }
  194. // 跳转到监测点界面
  195. const leaveFor = (url, record) => {
  196. router.push({
  197. path: url,
  198. query: {
  199. id: record.id
  200. }
  201. })
  202. }
  203. // 重置
  204. const reset = () => {
  205. searchFormRef.value.resetFields()
  206. tableRef.value.refresh(true)
  207. }
  208. // 删除
  209. const deleteData = (record) => {
  210. let params = [
  211. {
  212. id: record.id
  213. }
  214. ]
  215. setupApi.setupDelete(params).then(() => {
  216. tableRef.value.refresh(true)
  217. reset()
  218. })
  219. }
  220. </script>
  221. <style lang="less" scoped>
  222. .table_item {
  223. padding: 15px 20px;
  224. :deep(.ant-table-pagination-right) {
  225. justify-content: center !important;
  226. }
  227. }
  228. .list {
  229. width: 60%;
  230. padding: 10px 20px;
  231. border-radius: 10px;
  232. background-color: #ffffff;
  233. :deep(.ant-descriptions) {
  234. margin-bottom: 10px;
  235. }
  236. :deep(.ant-descriptions-header) {
  237. margin: 0;
  238. padding: 10px;
  239. border: 1px solid #f0f0f0;
  240. border-bottom: none;
  241. }
  242. }
  243. </style>