IotMainWorkOrderBomForm.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <template>
  2. <Dialog :title="dialogTitle" v-model="dialogVisible">
  3. <el-form
  4. ref="formRef"
  5. :model="formData"
  6. :rules="formRules"
  7. label-width="100px"
  8. v-loading="formLoading"
  9. >
  10. <el-form-item label="保养计划id" prop="planId">
  11. <el-input v-model="formData.planId" placeholder="请输入保养计划id" />
  12. </el-form-item>
  13. <el-form-item label="保养计划明细id" prop="planDetailId">
  14. <el-input v-model="formData.planDetailId" placeholder="请输入保养计划明细id" />
  15. </el-form-item>
  16. <el-form-item label="保养工单id" prop="workOrderId">
  17. <el-input v-model="formData.workOrderId" placeholder="请输入保养工单id" />
  18. </el-form-item>
  19. <el-form-item label="所属设备分类" prop="deviceCategoryId">
  20. <el-input v-model="formData.deviceCategoryId" placeholder="请输入所属设备分类" />
  21. </el-form-item>
  22. <el-form-item label="设备id" prop="deviceId">
  23. <el-input v-model="formData.deviceId" placeholder="请输入设备id" />
  24. </el-form-item>
  25. <el-form-item label="保养规则(量程 运行时间 自然日期) 可多选" prop="rule">
  26. <el-input v-model="formData.rule" placeholder="请输入保养规则(量程 运行时间 自然日期) 可多选" />
  27. </el-form-item>
  28. <el-form-item label="保养规则-里程(0启用 1停用)" prop="mileageRule">
  29. <el-input v-model="formData.mileageRule" placeholder="请输入保养规则-里程(0启用 1停用)" />
  30. </el-form-item>
  31. <el-form-item label="保养规则-自然日期(0启用 1停用)" prop="naturalDateRule">
  32. <el-input v-model="formData.naturalDateRule" placeholder="请输入保养规则-自然日期(0启用 1停用)" />
  33. </el-form-item>
  34. <el-form-item label="保养规则-运行时间(0启用 1停用)" prop="runningTimeRule">
  35. <el-input v-model="formData.runningTimeRule" placeholder="请输入保养规则-运行时间(0启用 1停用)" />
  36. </el-form-item>
  37. <el-form-item label="上次保养运行时长(小时)" prop="lastRunningTime">
  38. <el-date-picker
  39. v-model="formData.lastRunningTime"
  40. type="date"
  41. value-format="x"
  42. placeholder="选择上次保养运行时长(小时)"
  43. />
  44. </el-form-item>
  45. <el-form-item label="下次保养运行时长(小时)" prop="nextRunningTime">
  46. <el-date-picker
  47. v-model="formData.nextRunningTime"
  48. type="date"
  49. value-format="x"
  50. placeholder="选择下次保养运行时长(小时)"
  51. />
  52. </el-form-item>
  53. <el-form-item label="推迟运行时长(小时)" prop="delay duration">
  54. <el-input v-model="formData.delayDuration" placeholder="请输入推迟运行时长(小时)" />
  55. </el-form-item>
  56. <el-form-item label="上次保养运行公里数(千米)" prop="lastRunningKilometers">
  57. <el-input v-model="formData.lastRunningKilometers" placeholder="请输入上次保养运行公里数(千米)" />
  58. </el-form-item>
  59. <el-form-item label="下次保养运行公里数(千米)" prop="nextRunningKilometers">
  60. <el-input v-model="formData.nextRunningKilometers" placeholder="请输入下次保养运行公里数(千米)" />
  61. </el-form-item>
  62. <el-form-item label="推迟运行公里数(千米)" prop="delayKilomaters">
  63. <el-input v-model="formData.delayKilometers" placeholder="请输入推迟运行公里数(千米)" />
  64. </el-form-item>
  65. <el-form-item label="上次保养自然日期(天)" prop="lastNaturalDate">
  66. <el-date-picker
  67. v-model="formData.lastNaturalDate"
  68. type="date"
  69. value-format="x"
  70. placeholder="选择上次保养自然日期(天)"
  71. />
  72. </el-form-item>
  73. <el-form-item label="下次保养自然日期(天)" prop="nextNaturalDate">
  74. <el-date-picker
  75. v-model="formData.nextNaturalDate"
  76. type="date"
  77. value-format="x"
  78. placeholder="选择下次保养自然日期(天)"
  79. />
  80. </el-form-item>
  81. <el-form-item label="推迟自然日期(天)" prop="delayNaturalDate">
  82. <el-date-picker
  83. v-model="formData.delayNaturalDate"
  84. type="date"
  85. value-format="x"
  86. placeholder="选择推迟自然日期(天)"
  87. />
  88. </el-form-item>
  89. <el-form-item label="推迟原因" prop="delayReason">
  90. <el-input v-model="formData.delayReason" placeholder="请输入推迟原因" />
  91. </el-form-item>
  92. <el-form-item label="上次保养日期" prop="lastMainDate">
  93. <el-date-picker
  94. v-model="formData.lastMainDate"
  95. type="date"
  96. value-format="x"
  97. placeholder="选择上次保养日期"
  98. />
  99. </el-form-item>
  100. <el-form-item label="时间周期(小时)" prop="timePeriod">
  101. <el-input v-model="formData.timePeriod" placeholder="请输入时间周期(小时)" />
  102. </el-form-item>
  103. <el-form-item label="时间周期-提前量(小时)" prop="timePeriodLead">
  104. <el-input v-model="formData.timePeriodLead" placeholder="请输入时间周期-提前量(小时)" />
  105. </el-form-item>
  106. <el-form-item label="公里数周期(千米)" prop="kilometerCycle">
  107. <el-input v-model="formData.kilometerCycle" placeholder="请输入公里数周期(千米)" />
  108. </el-form-item>
  109. <el-form-item label="公里数周期-提前量(千米)" prop="kiloCycleLead">
  110. <el-input v-model="formData.kiloCycleLead" placeholder="请输入公里数周期-提前量(千米)" />
  111. </el-form-item>
  112. <el-form-item label="自然日周期(天)" prop="naturalDatePeriod">
  113. <el-input v-model="formData.naturalDatePeriod" placeholder="请输入自然日周期(天)" />
  114. </el-form-item>
  115. <el-form-item label="自然日周期-提前量(天)" prop="naturalDatePeriodLead">
  116. <el-input v-model="formData.naturalDatePeriodLead" placeholder="请输入自然日周期-提前量(天)" />
  117. </el-form-item>
  118. <el-form-item label="BOM节点id" prop="bomNodeId">
  119. <el-input v-model="formData.bomNodeId" placeholder="请输入BOM节点id" />
  120. </el-form-item>
  121. <el-form-item label="BOM名称" prop="name">
  122. <el-input v-model="formData.name" placeholder="请输入BOM名称" />
  123. </el-form-item>
  124. <el-form-item label="BOM编码" prop="code">
  125. <el-input v-model="formData.code" placeholder="请输入BOM编码" />
  126. </el-form-item>
  127. <el-form-item label="父BOM id 顶级为0" prop="parentId">
  128. <el-input v-model="formData.parentId" placeholder="请输入父BOM id 顶级为0" />
  129. </el-form-item>
  130. <el-form-item label="子节点id 逗号分隔" prop="childIds">
  131. <el-input v-model="formData.childIds" placeholder="请输入子节点id 逗号分隔" />
  132. </el-form-item>
  133. <el-form-item label="层级" prop="level">
  134. <el-input v-model="formData.level" placeholder="请输入层级" />
  135. </el-form-item>
  136. <el-form-item label="是否叶子节点 0是 1否" prop="leafFlag">
  137. <el-input v-model="formData.leafFlag" placeholder="请输入是否叶子节点 0是 1否" />
  138. </el-form-item>
  139. <el-form-item label="显示顺序" prop="sort">
  140. <el-input v-model="formData.sort" placeholder="请输入显示顺序" />
  141. </el-form-item>
  142. <el-form-item label="1维修 2保养 维修+保养 (1,2)" prop="type">
  143. <el-select v-model="formData.type" placeholder="请选择1维修 2保养 维修+保养 (1,2)">
  144. <el-option label="请选择字典生成" value="" />
  145. </el-select>
  146. </el-form-item>
  147. <el-form-item label="保养类型(1临时保养 2计划保养)" prop="mainType">
  148. <el-select v-model="formData.mainType" placeholder="请选择保养类型(1临时保养 2计划保养)">
  149. <el-option label="请选择字典生成" value="" />
  150. </el-select>
  151. </el-form-item>
  152. <el-form-item label="状态 0启用 1停用" prop="status">
  153. <el-radio-group v-model="formData.status">
  154. <el-radio value="1">请选择字典生成</el-radio>
  155. </el-radio-group>
  156. </el-form-item>
  157. <el-form-item label="备注" prop="remark">
  158. <el-input v-model="formData.remark" placeholder="请输入备注" />
  159. </el-form-item>
  160. <el-form-item label="版本" prop="version">
  161. <el-input v-model="formData.version" placeholder="请输入版本" />
  162. </el-form-item>
  163. </el-form>
  164. <template #footer>
  165. <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
  166. <el-button @click="dialogVisible = false">取 消</el-button>
  167. </template>
  168. </Dialog>
  169. </template>
  170. <script setup lang="ts">
  171. import { IotMainWorkOrderBomApi, IotMainWorkOrderBomVO } from '@/api/pms/iotmainworkorderbom'
  172. /** PMS 保养计划明细BOM 表单 */
  173. defineOptions({ name: 'IotMainWorkOrderBomForm' })
  174. const { t } = useI18n() // 国际化
  175. const message = useMessage() // 消息弹窗
  176. const dialogVisible = ref(false) // 弹窗的是否展示
  177. const dialogTitle = ref('') // 弹窗的标题
  178. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  179. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  180. const formData = ref({
  181. id: undefined,
  182. planId: undefined,
  183. planDetailId: undefined,
  184. workOrderId: undefined,
  185. deviceCategoryId: undefined,
  186. deviceId: undefined,
  187. rule: undefined,
  188. mileageRule: undefined,
  189. naturalDateRule: undefined,
  190. runningTimeRule: undefined,
  191. lastRunningTime: undefined,
  192. nextRunningTime: undefined,
  193. delayDuration: undefined,
  194. lastRunningKilometers: undefined,
  195. nextRunningKilometers: undefined,
  196. delayKilometers: undefined,
  197. lastNaturalDate: undefined,
  198. nextNaturalDate: undefined,
  199. delayNaturalDate: undefined,
  200. delayReason: undefined,
  201. lastMainDate: undefined,
  202. timePeriod: undefined,
  203. timePeriodLead: undefined,
  204. kilometerCycle: undefined,
  205. kiloCycleLead: undefined,
  206. naturalDatePeriod: undefined,
  207. naturalDatePeriodLead: undefined,
  208. bomNodeId: undefined,
  209. name: undefined,
  210. code: undefined,
  211. parentId: undefined,
  212. childIds: undefined,
  213. level: undefined,
  214. leafFlag: undefined,
  215. sort: undefined,
  216. type: undefined,
  217. mainType: undefined,
  218. status: undefined,
  219. remark: undefined,
  220. version: undefined,
  221. })
  222. const formRules = reactive({
  223. })
  224. const formRef = ref() // 表单 Ref
  225. /** 打开弹窗 */
  226. const open = async (type: string, id?: number) => {
  227. dialogVisible.value = true
  228. dialogTitle.value = t('action.' + type)
  229. formType.value = type
  230. resetForm()
  231. // 修改时,设置数据
  232. if (id) {
  233. formLoading.value = true
  234. try {
  235. formData.value = await IotMainWorkOrderBomApi.getIotMainWorkOrderBom(id)
  236. } finally {
  237. formLoading.value = false
  238. }
  239. }
  240. }
  241. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  242. /** 提交表单 */
  243. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  244. const submitForm = async () => {
  245. // 校验表单
  246. await formRef.value.validate()
  247. // 提交请求
  248. formLoading.value = true
  249. try {
  250. const data = formData.value as unknown as IotMainWorkOrderBomVO
  251. if (formType.value === 'create') {
  252. await IotMainWorkOrderBomApi.createIotMainWorkOrderBom(data)
  253. message.success(t('common.createSuccess'))
  254. } else {
  255. await IotMainWorkOrderBomApi.updateIotMainWorkOrderBom(data)
  256. message.success(t('common.updateSuccess'))
  257. }
  258. dialogVisible.value = false
  259. // 发送操作成功的事件
  260. emit('success')
  261. } finally {
  262. formLoading.value = false
  263. }
  264. }
  265. /** 重置表单 */
  266. const resetForm = () => {
  267. formData.value = {
  268. id: undefined,
  269. planId: undefined,
  270. planDetailId: undefined,
  271. workOrderId: undefined,
  272. deviceCategoryId: undefined,
  273. deviceId: undefined,
  274. rule: undefined,
  275. mileageRule: undefined,
  276. naturalDateRule: undefined,
  277. runningTimeRule: undefined,
  278. lastRunningTime: undefined,
  279. nextRunningTime: undefined,
  280. delayDuration: undefined,
  281. lastRunningKilometers: undefined,
  282. nextRunningKilometers: undefined,
  283. delayKilometers: undefined,
  284. lastNaturalDate: undefined,
  285. nextNaturalDate: undefined,
  286. delayNaturalDate: undefined,
  287. delayReason: undefined,
  288. lastMainDate: undefined,
  289. timePeriod: undefined,
  290. timePeriodLead: undefined,
  291. kilometerCycle: undefined,
  292. kiloCycleLead: undefined,
  293. naturalDatePeriod: undefined,
  294. naturalDatePeriodLead: undefined,
  295. bomNodeId: undefined,
  296. name: undefined,
  297. code: undefined,
  298. parentId: undefined,
  299. childIds: undefined,
  300. level: undefined,
  301. leafFlag: undefined,
  302. sort: undefined,
  303. type: undefined,
  304. mainType: undefined,
  305. status: undefined,
  306. remark: undefined,
  307. version: undefined,
  308. }
  309. formRef.value?.resetFields()
  310. }
  311. </script>