StatisticsForm.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <el-row :gutter="20">
  3. <el-col :span="4" :xs="24">
  4. <ContentWrap class="h-1/1">
  5. <DeptTree @node-click="handleDeptNodeClick" />
  6. </ContentWrap>
  7. </el-col>
  8. <el-col :span="20" :xs="24">
  9. <ContentWrap>
  10. <!-- 搜索工作栏 -->
  11. <el-form
  12. class="-mb-15px"
  13. :model="queryParams"
  14. ref="queryFormRef"
  15. :inline="true"
  16. label-width="68px"
  17. >
  18. <el-form-item label="查询条件" prop="orderName">
  19. <el-input
  20. v-model="queryParams.orderName"
  21. placeholder="请输入查询条件"
  22. clearable
  23. @keyup.enter="handleQuery"
  24. class="!w-240px"
  25. />
  26. </el-form-item>
  27. <el-form-item label="创建时间" prop="createTime">
  28. <el-date-picker
  29. v-model="queryParams.createTime"
  30. value-format="YYYY-MM-DD HH:mm:ss"
  31. type="daterange"
  32. start-placeholder="开始日期"
  33. end-placeholder="结束日期"
  34. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  35. class="!w-220px"
  36. />
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  40. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  41. <el-button
  42. type="success"
  43. plain
  44. @click="handleExport"
  45. :loading="exportLoading"
  46. v-hasPermi="['rq:iot-opeation-fill:export']"
  47. >
  48. <Icon icon="ep:download" class="mr-5px" /> 导出
  49. </el-button>
  50. </el-form-item>
  51. </el-form>
  52. </ContentWrap>
  53. <!-- 列表 -->
  54. <ContentWrap>
  55. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  56. <el-table-column :label="t('iotDevice.serial')" width="70" align="center">
  57. <template #default="scope">
  58. {{ scope.$index + 1 }}
  59. </template>
  60. </el-table-column>
  61. <el-table-column label="工单名称" align="center" prop="orderName" />
  62. <el-table-column label="所属组织" align="center" prop="deptName" />
  63. <el-table-column label="设备负责人" align="center" prop="nickname" />
  64. <el-table-column label="设备编号" align="center" prop="deviceCode" />
  65. <el-table-column label="设备名称" align="center" prop="deviceName" />
  66. <el-table-column label="是否填写" align="center" prop="isFill">
  67. <template #default="scope">
  68. <dict-tag :type="DICT_TYPE.OPERATION_FILL_DEVICE_STATUS" :value="scope.row.isFill" />
  69. </template>
  70. </el-table-column>
  71. <el-table-column
  72. label="创建时间"
  73. align="center"
  74. prop="createTime"
  75. :formatter="dateFormatter"
  76. width="180px"
  77. />
  78. </el-table>
  79. <Pagination
  80. :total="total"
  81. v-model:page="queryParams.pageNo"
  82. v-model:limit="queryParams.pageSize"
  83. @pagination="getList"
  84. />
  85. </ContentWrap>
  86. </el-col>
  87. </el-row>
  88. </template>
  89. <script setup lang="ts">
  90. import { dateFormatter } from '@/utils/formatTime'
  91. import download from '@/utils/download'
  92. import { IotOpeationFillApi, IotOpeationFillVO } from '@/api/pms/iotopeationfill'
  93. import IotOpeationFillForm from './IotOpeationFillForm.vue'
  94. import * as UserApi from "@/api/system/user";
  95. import {defaultProps,handleTree} from "@/utils/tree";
  96. import * as DeptApi from "@/api/system/dept";
  97. import * as PostApi from "@/api/system/post";
  98. import {onMounted, ref} from "vue";
  99. import {DeptTreeItem} from "@/api/system/dept";
  100. import DeptTree from "@/views/system/user/DeptTree.vue";
  101. import {useUserStore} from "@/store/modules/user";
  102. import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
  103. /** 运行记录填报 列表 */
  104. defineOptions({ name: 'StatisticsForm' })
  105. const deptList = ref<DeptTreeItem[]>([]) // 树形结构部门列表
  106. const message = useMessage() // 消息弹窗
  107. const { t } = useI18n() // 国际化
  108. const loading = ref(true) // 列表的加载中
  109. const list = ref<IotOpeationFillVO[]>([]) // 列表的数据
  110. const total = ref(0) // 列表的总页数
  111. const { params, name } = useRoute() // 查询参数
  112. const deptId = params.deptId;
  113. const isFill = params.isFill;
  114. const createTime = params.createTime;
  115. const dialogVisible = ref(false) // 弹窗的是否展示
  116. const dialogTitle = ref('') // 弹窗的标题
  117. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  118. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  119. const selectedDeptId = ref(null); // 通过store存储的部门id 由父组件传递过来
  120. const queryParams = reactive({
  121. pageNo: 1,
  122. pageSize: 10,
  123. deviceCode: undefined,
  124. deviceName: undefined,
  125. fillContent: undefined,
  126. deviceType: undefined,
  127. deviceComponent: undefined,
  128. deptId: undefined,
  129. orgName: undefined,
  130. proId: undefined,
  131. proName: undefined,
  132. teamId: undefined,
  133. teamName: undefined,
  134. dutyName: undefined,
  135. creDate: [],
  136. createTime: [],
  137. })
  138. const queryFormRef = ref() // 搜索的表单
  139. const exportLoading = ref(false) // 导出的加载中
  140. const handleDeptNodeClick = async (row) => {
  141. queryParams.deptId = row.id
  142. await getList()
  143. }
  144. /** 查询列表 */
  145. const getList = async () => {
  146. loading.value = true
  147. try {
  148. const data = await IotOpeationFillApi.getDeviceData(queryParams)
  149. list.value = data.list
  150. total.value = data.total
  151. } finally {
  152. loading.value = false
  153. }
  154. }
  155. /** 打开弹窗 */
  156. const open = async (type: string, id?: number) => {
  157. dialogVisible.value = true
  158. dialogTitle.value = type
  159. formType.value = type
  160. queryParams.deptId = id;
  161. // 修改时,设置数据
  162. if (id) {
  163. getList();
  164. }
  165. }
  166. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  167. /** 搜索按钮操作 */
  168. const handleQuery = () => {
  169. queryParams.pageNo = 1
  170. getList()
  171. }
  172. /** 重置按钮操作 */
  173. const resetQuery = () => {
  174. queryParams.deptId = useUserStore().getUser.deptId;
  175. queryParams.createTime = null
  176. queryFormRef.value.resetFields()
  177. handleQuery()
  178. }
  179. /** 添加/修改操作 */
  180. const formRef = ref()
  181. const openForm = (type: string, id?: number) => {
  182. formRef.value.open(type, id)
  183. }
  184. /** 删除按钮操作 */
  185. const handleDelete = async (id: number) => {
  186. try {
  187. // 删除的二次确认
  188. await message.delConfirm()
  189. // 发起删除
  190. await IotOpeationFillApi.deleteIotOpeationFill(id)
  191. message.success(t('common.delSuccess'))
  192. // 刷新列表
  193. await getList()
  194. } catch {}
  195. }
  196. /** 导出按钮操作 */
  197. const handleExport = async () => {
  198. try {
  199. // 导出的二次确认
  200. await message.exportConfirm()
  201. // 发起导出
  202. exportLoading.value = true
  203. const data = await IotOpeationFillApi.exportIotOpeationFill(queryParams)
  204. download.excel(data, '运行记录填报.xls')
  205. } catch {
  206. } finally {
  207. exportLoading.value = false
  208. }
  209. }
  210. /** 初始化 **/
  211. onMounted(async () => {
  212. if (deptId) {
  213. queryParams.deptId = deptId;
  214. }
  215. if (isFill == 2) {
  216. queryParams.isFill = null;
  217. } else {
  218. if (isFill) {
  219. queryParams.isFill = isFill;
  220. }
  221. }
  222. if(createTime){
  223. queryParams.createTime = createTime;
  224. }
  225. getList()
  226. deptList.value = handleTree(await DeptApi.getSimpleDeptList());
  227. })
  228. </script>