detail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. <template>
  2. <view class="page fault">
  3. <scroll-view scroll-y="true" class="detail view">
  4. <view class="form-content">
  5. <uni-forms
  6. ref="faultFormRef"
  7. labelWidth="140px"
  8. :modelValue="maintain"
  9. :rules="maintainRules"
  10. >
  11. <!-- 设备 -->
  12. <uni-forms-item
  13. class="form-item"
  14. :label="$t('maintenanceWorkOrder.equipment')"
  15. name="deviceName"
  16. :required="false"
  17. >
  18. <uni-easyinput
  19. style="text-align: right"
  20. :inputBorder="false"
  21. :clearable="false"
  22. :styles="{ disableColor: '#fff' }"
  23. :placeholder="' '"
  24. :disabled="true"
  25. v-model="maintain.deviceName"
  26. />
  27. </uni-forms-item>
  28. <!-- 是否解决 -->
  29. <uni-forms-item
  30. class="form-item"
  31. :label="$t('workOrder.isSolved')"
  32. name="ifDeal"
  33. :required="false"
  34. >
  35. <uni-data-select
  36. :clear="false"
  37. :placeholder="' '"
  38. :disabled="true"
  39. v-model="maintain.ifDeal"
  40. :localdata="yesOrNoRange"
  41. >
  42. </uni-data-select>
  43. </uni-forms-item>
  44. <!-- 是否协助 -->
  45. <uni-forms-item
  46. class="form-item"
  47. :label="$t('workOrder.isHelp')"
  48. name="needHelp"
  49. :required="false"
  50. >
  51. <uni-data-select
  52. :clear="false"
  53. :placeholder="' '"
  54. :disabled="true"
  55. v-model="maintain.needHelp"
  56. :localdata="yesOrNoRange"
  57. >
  58. </uni-data-select>
  59. </uni-forms-item>
  60. <!-- 故障系统 -->
  61. <uni-forms-item
  62. class="form-item"
  63. :label="$t('fault.faultSystem')"
  64. name="failureSystem"
  65. :required="false"
  66. >
  67. <uni-easyinput
  68. style="text-align: right"
  69. :inputBorder="false"
  70. :clearable="false"
  71. :styles="{ disableColor: '#fff' }"
  72. v-model="maintain.failureSystem"
  73. :placeholder="' '"
  74. :disabled="true"
  75. />
  76. </uni-forms-item>
  77. <!-- 故障时间 -->
  78. <uni-forms-item
  79. class="form-item"
  80. :label="$t('fault.faultTime')"
  81. name="failureTime"
  82. :required="false"
  83. >
  84. <uni-datetime-picker
  85. type="datetime"
  86. :border="false"
  87. returnType="timestamp"
  88. :placeholder="' '"
  89. :disabled="true"
  90. :style="{
  91. color: maintain.failureTime ? '#333' : '#999',
  92. 'font-size': maintain.failureTime
  93. ? '14px !important'
  94. : 'inherit !important',
  95. }"
  96. :end="dateMax"
  97. v-model="maintain.failureTime"
  98. >
  99. </uni-datetime-picker>
  100. </uni-forms-item>
  101. <!-- 故障解决时间 是否解决为是,是否协助为否时需要填写-->
  102. <uni-forms-item
  103. class="form-item"
  104. :label="$t('fault.faultResolutionTime')"
  105. name="dealTime"
  106. :required="false"
  107. v-if="maintain.ifDeal"
  108. >
  109. <!-- :end="dateMax" -->
  110. <uni-datetime-picker
  111. type="datetime"
  112. :border="false"
  113. returnType="timestamp"
  114. :placeholder="' '"
  115. :disabled="true"
  116. :style="{
  117. color: maintain.dealTime ? '#333' : '#999',
  118. 'font-size': maintain.dealTime
  119. ? '14px !important'
  120. : 'inherit !important',
  121. }"
  122. :end="dateMax"
  123. v-model="maintain.dealTime"
  124. >
  125. </uni-datetime-picker>
  126. </uni-forms-item>
  127. <!-- 审批人 是否解决为否 时需要选择 -->
  128. <uni-forms-item
  129. class="form-item"
  130. :label="$t('workOrder.approver')"
  131. name="approvalId"
  132. :required="false"
  133. v-if="maintain.ifDeal == 0"
  134. >
  135. <uni-data-select
  136. :clear="false"
  137. :disabled="true"
  138. v-model="maintain.approvalId"
  139. :localdata="approvalList"
  140. :placeholder="' '"
  141. >
  142. </uni-data-select>
  143. </uni-forms-item>
  144. <!-- 是否停机 -->
  145. <uni-forms-item
  146. class="form-item"
  147. :label="$t('equipmentMaintenance.isStop')"
  148. name="ifStop"
  149. :required="false"
  150. >
  151. <uni-data-select
  152. :clear="false"
  153. :placeholder="' '"
  154. :disabled="true"
  155. v-model="maintain.ifStop"
  156. :localdata="yesOrNoRange"
  157. >
  158. </uni-data-select>
  159. </uni-forms-item>
  160. <!-- 图片 -->
  161. <uni-forms-item
  162. class="form-item"
  163. :label="$t('general.picture')"
  164. name="picList"
  165. :required="false"
  166. >
  167. <uni-file-picker
  168. file-mediatype="image"
  169. mode="grid"
  170. :auto-upload="false"
  171. :limit="1"
  172. :readonly="true"
  173. :imageStyles="{ border: false }"
  174. :value="maintain.picList"
  175. @select="upload"
  176. >
  177. <template #default>
  178. <view
  179. class="flex-col align-center justify-center"
  180. style="width: 60px; height: 60px; background-color: #f4f4f4"
  181. >
  182. <uni-icons type="plusempty" color="#ACACAC" size="12" />
  183. </view>
  184. </template>
  185. </uni-file-picker>
  186. </uni-forms-item>
  187. <!-- 故障影响 -->
  188. <uni-forms-item
  189. class="form-item"
  190. :label="$t('fault.faultImpact')"
  191. name="failureInfluence"
  192. :required="false"
  193. >
  194. <uni-easyinput
  195. style="text-align: right"
  196. :inputBorder="false"
  197. :clearable="false"
  198. :styles="{ disableColor: '#fff' }"
  199. v-model="maintain.failureInfluence"
  200. :placeholder="' '"
  201. :disabled="true"
  202. />
  203. </uni-forms-item>
  204. <!-- 解决办法 是否解决为是,是否协助为否时需要填写 -->
  205. <uni-forms-item
  206. class="form-item"
  207. :label="$t('fault.solution')"
  208. :required="false"
  209. name="solution"
  210. v-if="maintain.ifDeal"
  211. >
  212. <uni-easyinput
  213. style="text-align: right"
  214. type="textarea"
  215. :autoHeight="true"
  216. :inputBorder="false"
  217. :clearable="false"
  218. :styles="{ disableColor: '#fff' }"
  219. v-model="maintain.solution"
  220. :placeholder="' '"
  221. :disabled="true"
  222. />
  223. </uni-forms-item>
  224. <!-- 故障描述 -->
  225. <uni-forms-item
  226. class="form-item"
  227. :label="$t('fault.description')"
  228. :required="false"
  229. name="description"
  230. >
  231. <uni-easyinput
  232. style="text-align: right"
  233. type="textarea"
  234. :autoHeight="true"
  235. :inputBorder="false"
  236. :clearable="false"
  237. :styles="{ disableColor: '#fff' }"
  238. v-model="maintain.description"
  239. :placeholder="' '"
  240. :disabled="true"
  241. />
  242. </uni-forms-item>
  243. <!-- 备注 -->
  244. <uni-forms-item
  245. class="form-item"
  246. :label="$t('operation.remark')"
  247. :required="false"
  248. name="remark"
  249. >
  250. <uni-easyinput
  251. style="text-align: right"
  252. type="textarea"
  253. :autoHeight="true"
  254. :inputBorder="false"
  255. :clearable="false"
  256. :styles="{ disableColor: '#fff' }"
  257. v-model="maintain.remark"
  258. :placeholder="' '"
  259. :disabled="true"
  260. />
  261. </uni-forms-item>
  262. </uni-forms>
  263. </view>
  264. </scroll-view>
  265. </view>
  266. </template>
  267. <script setup>
  268. import { onLoad, onReady, onBackPress } from "@dcloudio/uni-app";
  269. import {
  270. reactive,
  271. ref,
  272. watch,
  273. computed,
  274. watchEffect,
  275. onMounted,
  276. onBeforeUnmount,
  277. nextTick,
  278. getCurrentInstance,
  279. } from "vue";
  280. import { getFaultDetail, getFailureApprovalList } from "@/api/fault.js";
  281. import dayjs from "dayjs";
  282. import { uploadFile } from "@/api";
  283. import { useDataDictStore } from "@/store/modules/dataDict";
  284. const { getDataDictList } = useDataDictStore();
  285. // 引用全局变量$t
  286. const { appContext } = getCurrentInstance();
  287. const t = appContext.config.globalProperties.$t;
  288. // 维修类型
  289. const typeRange = ref([
  290. {
  291. value: "in",
  292. text: t("maintenanceWorkOrder.maintenanceTypeIn"),
  293. },
  294. {
  295. value: "out",
  296. text: t("maintenanceWorkOrder.maintenanceTypeOut"),
  297. },
  298. ]);
  299. //
  300. const yesOrNoRange = ref([
  301. {
  302. value: 1,
  303. text: t("operation.yes"),
  304. },
  305. {
  306. value: 0,
  307. text: t("operation.no"),
  308. },
  309. ]);
  310. // 获取当前时间
  311. const now = dayjs().format("YYYY-MM-DD HH:mm:ss");
  312. const dateMax = ref(now);
  313. //故障详情
  314. const maintain = ref({
  315. deviceId: "",
  316. deviceName: "",
  317. picList: [], //用于上传照片 提交时删除
  318. });
  319. // 获取故障详情
  320. const getFaultDetailData = async (id) => {
  321. await getFaultDetail({
  322. id: id,
  323. })
  324. .then((res) => {
  325. console.log("getFaultDetailData", res.data);
  326. maintain.value = res.data;
  327. // ifDeal,needHelp, isStop从true/false转换为1/0
  328. maintain.value.ifDeal = maintain.value.ifDeal ? 1 : 0;
  329. maintain.value.needHelp = maintain.value.needHelp ? 1 : 0;
  330. maintain.value.isStop = maintain.value.isStop ? 1 : 0;
  331. maintain.value.picList = res.data.pic
  332. ? [
  333. {
  334. url: res.data.pic,
  335. },
  336. ]
  337. : [];
  338. // 如果存在审批人,则获取审批人信息
  339. if (data.approvalId) {
  340. getApprovalList();
  341. }
  342. })
  343. .catch((err) => {});
  344. };
  345. // 审批人列表
  346. const approvalList = ref([]);
  347. const getApprovalList = async () => {
  348. const res = await getFailureApprovalList();
  349. approvalList.value = res.data.map((item) => ({
  350. value: item.id,
  351. text: item.nickname,
  352. }));
  353. };
  354. // 上传图片
  355. const upload = async (event) => {
  356. for (const path of event.tempFilePaths) {
  357. maintain.value.pic = (await uploadFile(path)).data;
  358. }
  359. };
  360. onMounted(() => {
  361. // 监听子页面提交的事件
  362. console.log("onMounted");
  363. // uni.$on('multiple-devide-submit', (data) => {
  364. // console.log('接收到子页面数据:', data);
  365. // selectedDevices.value = data
  366. // onDeviceBomList()
  367. // });
  368. });
  369. onBeforeUnmount(() => {
  370. // 移除监听
  371. console.log("onBeforeUnmount");
  372. // uni.$off('multiple-devide-submit');
  373. });
  374. onLoad((option) => {
  375. console.log("onLoad", option);
  376. getFaultDetailData(option.id);
  377. });
  378. onReady(() => {
  379. // 设置自定义表单校验规则,必须在节点渲染完毕后执行
  380. // this.$refs.customForm.setRules(this.customRules)
  381. });
  382. onBackPress((options) => {
  383. // options.from 值为 'navigateBack' 时,表示返回是由 uni.navigateBack() 方法调用触发的
  384. // options.from 值为 'navigator' 时,表示返回是由导航栏返回按钮或物理返回键触发的
  385. console.log("返回触发来源:", options.from);
  386. });
  387. </script>
  388. <style lang="scss" scoped>
  389. @import "@/style/work-order-detail.scss";
  390. :deep(.is-disabled) {
  391. color: #333;
  392. }
  393. </style>