equipment.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <script lang="ts" setup>
  2. import { IotRyImproveDailyReportApi } from '@/api/pms/iotryimprovedailyreport'
  3. import { useTableComponents } from '@/components/ZmTable/useTableComponents'
  4. import dayjs from 'dayjs'
  5. import EquipmentForm from './components/equipment-form.vue'
  6. import { useUserStore } from '../../../store/modules/user.js'
  7. defineOptions({ name: 'IotRyEquipmentDailyReport' })
  8. interface ReportRow {
  9. id: number
  10. title: string
  11. createTime: number
  12. workLocation: string
  13. workPurpose: string
  14. relocationDays: number
  15. productionStatus: string
  16. nextPlan: string
  17. personnel: string
  18. auditStatus: 0 | 10 | 20 | 30 | 40
  19. }
  20. interface Query {
  21. deptId?: number
  22. pageNo: number
  23. pageSize: number
  24. createTime?: string[]
  25. }
  26. const deptId = useUserStore().getUser.deptId
  27. const loading = ref(false)
  28. const { ZmTable, ZmTableColumn } = useTableComponents<ReportRow>()
  29. const formRef = ref()
  30. const formVisible = ref(false)
  31. const total = ref(0)
  32. const query = ref<Query>({
  33. deptId: undefined,
  34. pageNo: 1,
  35. pageSize: 10,
  36. createTime: undefined
  37. })
  38. const reportRows = ref<ReportRow[]>([])
  39. async function loadList() {
  40. loading.value = true
  41. try {
  42. const data = await IotRyImproveDailyReportApi.getIotRyImproveDailyReportPage(query.value)
  43. reportRows.value = data.list || []
  44. total.value = data.total || 0
  45. } finally {
  46. loading.value = false
  47. }
  48. }
  49. function handleQuery() {
  50. query.value.pageNo = 1
  51. loadList()
  52. }
  53. function resetQuery() {
  54. query.value = {
  55. pageNo: 1,
  56. pageSize: 10,
  57. createTime: undefined
  58. }
  59. loadList()
  60. }
  61. function handleSizeChange(val: number) {
  62. query.value.pageSize = val
  63. handleQuery()
  64. }
  65. function handleCurrentChange(val: number) {
  66. query.value.pageNo = val
  67. loadList()
  68. }
  69. const auditStatusMap = {
  70. 0: { label: '未提交', type: 'info' },
  71. 10: { label: '审批中', type: 'warning' },
  72. 20: { label: '审核通过', type: 'success' },
  73. 30: { label: '审核不通过', type: 'danger' },
  74. 40: { label: '已取消', type: 'info' }
  75. } as const
  76. function getAuditStatus(status?: number) {
  77. return auditStatusMap[status as keyof typeof auditStatusMap] || auditStatusMap[0]
  78. }
  79. function handleOpenForm(
  80. type: 'create' | 'edit' | 'detail' | 'approval' | 'modify',
  81. row?: ReportRow
  82. ) {
  83. formRef.value?.handleOpenForm(type, row)
  84. }
  85. function reloadAfterCreate() {
  86. query.value.pageNo = 1
  87. return loadList()
  88. }
  89. watch(() => query.value.deptId, handleQuery)
  90. onMounted(() => {
  91. loadList()
  92. })
  93. </script>
  94. <template>
  95. <div
  96. class="grid grid-cols-[auto_1fr] grid-rows-[48px_1fr] gap-x-4 gap-y-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
  97. <DeptTreeSelect
  98. :top-id="158"
  99. :deptId="deptId"
  100. v-model="query.deptId"
  101. :show-title="false"
  102. class="row-span-2" />
  103. <el-form
  104. size="default"
  105. class="bg-white dark:bg-[#1d1e1f] rounded-lg shadow px-6 gap-8 flex items-center justify-between">
  106. <div class="flex items-center gap-8">
  107. <el-form-item label="汇报时间">
  108. <el-date-picker
  109. v-model="query.createTime"
  110. value-format="YYYY-MM-DD HH:mm:ss"
  111. type="daterange"
  112. start-placeholder="开始日期"
  113. end-placeholder="结束日期"
  114. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  115. class="!w-260px" />
  116. </el-form-item>
  117. </div>
  118. <el-form-item>
  119. <!-- <el-button
  120. type="primary"
  121. @click="handleOpenForm('create')"
  122. v-hasPermi="['pms:iot-ry-improve-daily-report:create']">
  123. <Icon icon="ep:plus" class="mr-5px" /> 新增
  124. </el-button> -->
  125. <el-button type="primary" @click="handleQuery">
  126. <Icon icon="ep:search" class="mr-5px" /> 搜索
  127. </el-button>
  128. <el-button @click="resetQuery"> <Icon icon="ep:refresh" class="mr-5px" /> 重置 </el-button>
  129. </el-form-item>
  130. </el-form>
  131. <div class="bg-white dark:bg-[#1d1e1f] shadow rounded-lg flex flex-col p-4 min-h-0">
  132. <div class="flex-1 relative">
  133. <el-auto-resizer class="absolute">
  134. <template #default="{ width, height }">
  135. <zm-table
  136. :data="reportRows"
  137. :loading="loading"
  138. :width="width"
  139. :max-height="height"
  140. :height="height"
  141. empty-text="暂无设备搬迁整改项目汇报"
  142. show-border>
  143. <zm-table-column type="index" label="序号" width="70" fixed="left" />
  144. <zm-table-column label="标题" prop="title" fixed="left" />
  145. <zm-table-column label="施工队伍" prop="deptName" />
  146. <zm-table-column label="汇报时间" prop="createTime">
  147. <template #default="{ row }">
  148. {{ dayjs(row.createTime).format('YYYY.MM.DD') }}
  149. </template>
  150. </zm-table-column>
  151. <zm-table-column label="工作地点" prop="workLocation" />
  152. <zm-table-column label="施工目的" prop="workPurpose" />
  153. <zm-table-column
  154. label="安全作业天数"
  155. prop="relocationDays"
  156. :real-value="(row) => row.relocationDays + '天'"
  157. cover-formatter />
  158. <zm-table-column label="施工动态" prop="productionStatus" />
  159. <zm-table-column label="下步计划" prop="nextPlan" />
  160. <zm-table-column label="人员情况" prop="personnel" />
  161. <zm-table-column label="审批状态" prop="auditStatus" width="120">
  162. <template #default="{ row }">
  163. <el-tag :type="getAuditStatus(row.auditStatus).type">
  164. {{ getAuditStatus(row.auditStatus).label }}
  165. </el-tag>
  166. </template>
  167. </zm-table-column>
  168. <zm-table-column label="操作" width="200" fixed="right" action>
  169. <template #default="{ row }">
  170. <el-button link type="primary" @click="handleOpenForm('detail', row)">
  171. 查看
  172. </el-button>
  173. <el-button
  174. link
  175. type="primary"
  176. @click="handleOpenForm('modify', row)"
  177. v-hasPermi="['pms:iot-ry-improve-daily-report:modify']">
  178. 修改
  179. </el-button>
  180. <el-button
  181. v-if="row.status === 0"
  182. link
  183. type="primary"
  184. @click="handleOpenForm('edit', row)"
  185. v-hasPermi="['pms:iot-ry-improve-daily-report:update']">
  186. 编辑
  187. </el-button>
  188. <el-button
  189. v-if="row.auditStatus === 10"
  190. link
  191. type="primary"
  192. @click="handleOpenForm('approval', row)"
  193. v-hasPermi="['pms:iot-ry-improve-daily-report:approval']">
  194. 审批
  195. </el-button>
  196. </template>
  197. </zm-table-column>
  198. </zm-table>
  199. </template>
  200. </el-auto-resizer>
  201. </div>
  202. <div class="mt-3 flex justify-end">
  203. <el-pagination
  204. v-model:current-page="query.pageNo"
  205. v-model:page-size="query.pageSize"
  206. :total="total"
  207. :page-sizes="[10, 20, 30, 50, 100]"
  208. layout="total, sizes, prev, pager, next, jumper"
  209. @size-change="handleSizeChange"
  210. @current-change="handleCurrentChange" />
  211. </div>
  212. </div>
  213. </div>
  214. <EquipmentForm
  215. ref="formRef"
  216. v-model:visible="formVisible"
  217. :load-list="loadList"
  218. :reload-after-create="reloadAfterCreate" />
  219. </template>
  220. <style scoped>
  221. :deep(.el-form-item) {
  222. margin-bottom: 0;
  223. }
  224. </style>