IotMaintainDetail.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <template>
  2. <ContentWrap v-loading="formLoading">
  3. <el-form
  4. ref="formRef"
  5. :model="formData"
  6. :rules="formRules"
  7. v-loading="formLoading"
  8. style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
  9. label-width="130px"
  10. >
  11. <div class="base-expandable-content">
  12. <el-row>
  13. <el-col :span="6">
  14. <el-form-item label="设备" prop="deviceName">
  15. <el-select
  16. disabled
  17. v-model="formData.deviceName"
  18. />
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="6">
  22. <el-form-item label="状态" prop="status">
  23. <el-select v-model="formData.status" clearable disabled>
  24. <el-option
  25. v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_STATUS)"
  26. :key="dict.value"
  27. :label="dict.label"
  28. :value="dict.value"
  29. />
  30. </el-select>
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="6">
  34. <el-form-item label="维修类型" prop="type">
  35. <el-select disabled v-model="formData.type" clearable>
  36. <el-option
  37. v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_TYPE)"
  38. :key="dict.value"
  39. :label="dict.label"
  40. :value="dict.value"
  41. />
  42. </el-select>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="6">
  46. <el-form-item label="是否停机" prop="ifStop">
  47. <el-select v-model="formData.ifStop" clearable disabled>
  48. <el-option
  49. v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
  50. :key="dict.value"
  51. :label="dict.label"
  52. :value="dict.value"
  53. />
  54. </el-select>
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="6">
  58. <el-form-item label="故障时间" prop="failureTime">
  59. <el-date-picker
  60. disabled
  61. style="width: 150%"
  62. v-model="formData.failureTime"
  63. type="date"
  64. value-format="x"
  65. />
  66. </el-form-item>
  67. </el-col>
  68. <el-col :span="6">
  69. <el-form-item label="维修开始时间" prop="maintainStartTime">
  70. <el-date-picker
  71. disabled
  72. style="width: 150%"
  73. v-model="formData.maintainStartTime"
  74. type="date"
  75. value-format="x"
  76. />
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="6">
  80. <el-form-item label="维修负责人" prop="maintainPerson">
  81. <el-select v-model="formData.maintainPerson" filterable clearable style="width: 100%" disabled>
  82. <el-option
  83. v-for="item in deptUsers"
  84. :key="item.id"
  85. :label="item.nickname"
  86. :value="item.id"
  87. />
  88. </el-select>
  89. </el-form-item>
  90. </el-col>
  91. <el-col :span="6">
  92. <el-form-item label="故障影响" prop="failureInfluence">
  93. <el-input v-model="formData.failureInfluence" disabled/>
  94. </el-form-item>
  95. </el-col>
  96. <el-col :span="6">
  97. <el-form-item label="故障系统" prop="failureSystem">
  98. <el-input v-model="formData.failureSystem" disabled/>
  99. </el-form-item>
  100. </el-col>
  101. <el-col :span="6">
  102. <el-form-item label="维修结束时间" prop="maintainEndTime">
  103. <el-date-picker
  104. disabled
  105. style="width: 150%"
  106. v-model="formData.maintainEndTime"
  107. type="date"
  108. value-format="x"
  109. />
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="6">
  113. <el-form-item label="图片" prop="pic" >
  114. <UploadImg v-model="formData.pic" :disabled="true" height="55px" />
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="6">
  118. <el-form-item label="故障描述" prop="description">
  119. <el-input type="textarea" v-model="formData.description" disabled />
  120. </el-form-item>
  121. </el-col>
  122. <el-col :span="6">
  123. <el-form-item label="维修描述" prop="maintainDescription">
  124. <el-input type="textarea" v-model="formData.maintainDescription" disabled/>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="6">
  128. <el-form-item label="解决办法" prop="solution">
  129. <el-input type="textarea" v-model="formData.solution" disabled />
  130. </el-form-item>
  131. </el-col>
  132. <el-col :span="12">
  133. <el-form-item label="备注" prop="remark">
  134. <el-input v-model="formData.remark" type="textarea" disabled/>
  135. </el-form-item>
  136. </el-col>
  137. </el-row>
  138. </div>
  139. </el-form>
  140. </ContentWrap>
  141. <ContentWrap>
  142. <!-- 列表 -->
  143. <ContentWrap>
  144. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  145. <el-table-column label="物料编码" align="center" prop="code" />
  146. <el-table-column label="物料名称" align="center" prop="name" />
  147. <el-table-column label="单位" align="center" prop="unit" />
  148. <el-table-column label="单价" align="center" prop="price" />
  149. <el-table-column label="消耗数量" align="center" prop="depleteCount">
  150. <!-- <template #default="scope">-->
  151. <!-- <el-input v-model="scope.row.depleteCount" disabled/>-->
  152. <!-- </template>-->
  153. </el-table-column>
  154. <el-table-column label="总库存数量" align="center" prop="totalCount" />
  155. <el-table-column label="备注" align="center" prop="remark">
  156. <!-- <template #default="scope">-->
  157. <!-- <el-input v-model="scope.row.remark" />-->
  158. <!-- </template>-->
  159. </el-table-column>
  160. <el-table-column label="物料来源" align="center" prop="sourceType" />
  161. </el-table>
  162. </ContentWrap>
  163. </ContentWrap>
  164. <ContentWrap>
  165. <el-form>
  166. <el-form-item style="float: right">
  167. <el-button type="info" @click="close">取 消</el-button>
  168. </el-form-item>
  169. </el-form>
  170. </ContentWrap>
  171. </template>
  172. <script setup lang="ts">
  173. import {DICT_TYPE, getBoolDictOptions, getStrDictOptions} from '@/utils/dict'
  174. import * as UserApi from '@/api/system/user'
  175. import { ref } from 'vue'
  176. import {IotMaintainMaterialApi, IotMaintainMaterialVO} from '@/api/pms/maintain/material'
  177. import { useTagsViewStore } from '@/store/modules/tagsView'
  178. import {IotMaintainApi} from "@/api/pms/maintain";
  179. /** 维修工单 表单 */
  180. defineOptions({ name: 'IotMaintain' })
  181. const { t } = useI18n() // 国际化
  182. const message = useMessage() // 消息弹窗
  183. const { delView } = useTagsViewStore() // 视图操作
  184. const { currentRoute, push } = useRouter()
  185. const deptUsers = ref<UserApi.UserVO[]>([]) // 用户列表
  186. const dialogTitle = ref('') // 弹窗的标题
  187. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  188. const deviceLabel = ref('') // 表单的类型:create - 新增;update - 修改
  189. const drawerVisible = ref<boolean>(false)
  190. const showDrawer = ref()
  191. const list = ref<IotMaintainMaterialVO[]>([]) // 列表的数据
  192. const { params, name } = useRoute() // 查询参数
  193. const id = params.id
  194. const formData = ref({
  195. id: undefined,
  196. failureCode: undefined,
  197. failureName: undefined,
  198. deviceId: undefined,
  199. status: undefined,
  200. type: undefined,
  201. ifStop: undefined,
  202. failureTime: undefined,
  203. failureInfluence: undefined,
  204. failureSystem: undefined,
  205. description: undefined,
  206. pic: undefined,
  207. solution: undefined,
  208. maintainStartTime: undefined,
  209. maintainEndTime: undefined,
  210. remark: undefined,
  211. deviceName: undefined,
  212. processInstanceId: undefined,
  213. auditStatus: undefined,
  214. deptId: undefined,
  215. maintainPerson: undefined,
  216. maintainDescription: undefined
  217. })
  218. const formRules = reactive({
  219. deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
  220. failureCode: [{ required: true, message: '故障编码不能为空', trigger: 'blur' }],
  221. type: [{ required: true, message: '维修类型不能为空', trigger: 'blur' }],
  222. ifStop: [{ required: true, message: '是否停机不能为空', trigger: 'blur' }],
  223. failureName: [{ required: true, message: '故障名称不能为空', trigger: 'blur' }],
  224. failureTime: [{ required: true, message: '故障时间不能为空', trigger: 'blur' }],
  225. maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
  226. maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
  227. maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
  228. deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }],
  229. status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
  230. })
  231. const formRef = ref() // 表单 Ref
  232. const close = () => {
  233. delView(unref(currentRoute))
  234. push({
  235. name: 'IotMaintain',
  236. query: {
  237. date: new Date().getTime()
  238. }
  239. })
  240. }
  241. /** 提交表单 */
  242. onMounted(async () => {
  243. await IotMaintainApi.getIotMaintain(id).then((res) => {
  244. formData.value = res
  245. list.value = res.maintainMaterialDOS
  246. UserApi.getUser(formData.value.maintainPerson).then((res) => {
  247. formData.value.maintainPerson = res.nickname;
  248. })
  249. IotMaintainMaterialApi.getMaterialsByDeviceId()
  250. })
  251. })
  252. </script>