work-order-form.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. <template>
  2. <scroll-view scroll-y="true" class="work-order-form">
  3. <view class="form-content">
  4. <uni-forms
  5. ref="maintenanceFormRef"
  6. labelWidth="140px"
  7. err-show-type="toast"
  8. :model="formData"
  9. :rules="formDataRules"
  10. >
  11. <!-- 工单名称 -->
  12. <uni-forms-item
  13. class="form-item"
  14. :label="$t('workOrder.workOrderName')"
  15. name="name"
  16. :required="formItemRequired"
  17. >
  18. <uni-easyinput
  19. style="text-align: right"
  20. :inputBorder="false"
  21. :clearable="true"
  22. :disabled="formDisabled"
  23. :placeholder="fillInPlaceholder"
  24. :styles="{ disableColor: '#fff' }"
  25. v-model="formData.name"
  26. />
  27. </uni-forms-item>
  28. <!-- 工单编号 -->
  29. <uni-forms-item
  30. class="form-item"
  31. :label="$t('workOrder.workOrderNumber')"
  32. name="orderNumber"
  33. :required="false"
  34. v-if="formData.orderNumber"
  35. >
  36. <uni-easyinput
  37. style="text-align: right"
  38. :inputBorder="false"
  39. :clearable="true"
  40. :disabled="true"
  41. :placeholder="fillInPlaceholder"
  42. :styles="{ disableColor: 'transparent' }"
  43. v-model="formData.orderNumber"
  44. />
  45. </uni-forms-item>
  46. <!-- 保养类型 -->
  47. <uni-forms-item
  48. class="form-item"
  49. :label="$t('maintenanceWorkOrder.maintenanceType')"
  50. name="outsourcingFlag"
  51. :required="false"
  52. >
  53. <uni-data-select
  54. :clear="false"
  55. :disabled="formDisabled"
  56. :placeholder="selectPlaceholder"
  57. :localdata="outsourcingFlagRange"
  58. v-model="formData.outsourcingFlag"
  59. >
  60. </uni-data-select>
  61. </uni-forms-item>
  62. <!-- 填报人 -->
  63. <uni-forms-item
  64. class="form-item"
  65. :label="$t('maintenanceWorkOrder.applicant')"
  66. name="applicant"
  67. :required="formItemRequired"
  68. >
  69. <uni-easyinput
  70. style="text-align: right"
  71. :inputBorder="false"
  72. :clearable="true"
  73. :disabled="formDisabled"
  74. :placeholder="fillInPlaceholder"
  75. :styles="{ disableColor: '#fff' }"
  76. v-model="formData.applicant"
  77. />
  78. </uni-forms-item>
  79. <!-- 实际保养开始时间 -->
  80. <uni-forms-item
  81. class="form-item"
  82. :label="$t('maintenanceWorkOrder.actualMaintenanceStartTime')"
  83. name="actualStartTime"
  84. :required="formItemRequired"
  85. >
  86. <uni-datetime-picker
  87. type="datetime"
  88. returnType="timestamp"
  89. :end="dateMax"
  90. :border="false"
  91. :disabled="formDisabled"
  92. :placeholder="selectPlaceholder"
  93. :style="{
  94. color: formData.actualStartTime ? '#333' : '#999',
  95. 'font-size': formData.actualStartTime
  96. ? '14px !important'
  97. : 'inherit !important',
  98. }"
  99. v-model="formData.actualStartTime"
  100. >
  101. </uni-datetime-picker>
  102. </uni-forms-item>
  103. <!-- 实际保养结束时间 -->
  104. <uni-forms-item
  105. class="form-item"
  106. :label="$t('maintenanceWorkOrder.actualEndTime')"
  107. name="actualEndTime"
  108. :required="formItemRequired"
  109. >
  110. <uni-datetime-picker
  111. type="datetime"
  112. returnType="timestamp"
  113. :end="dateMax"
  114. :border="false"
  115. :disabled="formDisabled"
  116. :placeholder="selectPlaceholder"
  117. :style="{
  118. color: formData.actualEndTime ? '#333' : '#999',
  119. 'font-size': formData.actualEndTime
  120. ? '14px !important'
  121. : 'inherit !important',
  122. }"
  123. v-model="formData.actualEndTime"
  124. >
  125. </uni-datetime-picker>
  126. </uni-forms-item>
  127. <!-- 保养费用 -->
  128. <uni-forms-item
  129. class="form-item"
  130. :label="$t('maintenanceWorkOrder.maintenanceCost')"
  131. name="cost"
  132. :required="false"
  133. >
  134. <uni-easyinput
  135. type="digit"
  136. style="text-align: right"
  137. :styles="{ disableColor: 'transparent' }"
  138. :inputBorder="false"
  139. :clearable="true"
  140. :disabled="true"
  141. v-model="formData.cost"
  142. />
  143. </uni-forms-item>
  144. <!-- 其他费用 -->
  145. <uni-forms-item
  146. class="form-item"
  147. :label="$t('maintenanceWorkOrder.otherCost')"
  148. :required="false"
  149. name="otherCost"
  150. >
  151. <uni-easyinput
  152. type="digit"
  153. style="text-align: right"
  154. :styles="{ disableColor: '#fff' }"
  155. :inputBorder="false"
  156. :clearable="true"
  157. :disabled="formDisabled"
  158. :placeholder="fillInPlaceholder"
  159. v-model="formData.otherCost"
  160. />
  161. </uni-forms-item>
  162. <!-- 备注 -->
  163. <uni-forms-item
  164. class="form-item"
  165. :label="$t('operation.remark')"
  166. :required="false"
  167. name="remark"
  168. >
  169. <uni-easyinput
  170. type="textarea"
  171. :autoHeight="true"
  172. style="text-align: right"
  173. :styles="{ disableColor: '#fff' }"
  174. :inputBorder="false"
  175. :disabled="formDisabled"
  176. :placeholder="fillInPlaceholder"
  177. v-model="formData.remark"
  178. />
  179. </uni-forms-item>
  180. </uni-forms>
  181. </view>
  182. </scroll-view>
  183. </template>
  184. <script setup>
  185. import { onLoad, onReady, onBackPress } from "@dcloudio/uni-app";
  186. import { ref, reactive, computed, getCurrentInstance } from "vue";
  187. import dayjs from "dayjs";
  188. // --------------------------引用全局变量$t-------------------------------
  189. const { appContext } = getCurrentInstance();
  190. const t = appContext.config.globalProperties.$t;
  191. // --------------------------引用字典项-----------------------------------
  192. import { useDataDictStore } from "@/store/modules/dataDict";
  193. const { getIntDictOptions } = useDataDictStore();
  194. // 获取保养类型字典项
  195. const outsourcingFlagRange = getIntDictOptions(
  196. "pms_main_work_order_process_mode"
  197. ).map((item) => {
  198. return {
  199. ...item,
  200. text: item.label,
  201. };
  202. });
  203. console.log("🚀 ~ outsourcingFlagRange:", outsourcingFlagRange);
  204. // -------------------------接收父组件传递的参数---------------------------
  205. const props = defineProps({
  206. formData: {
  207. type: Object,
  208. default: () => {},
  209. },
  210. formDisabled: {
  211. type: Boolean,
  212. default: false,
  213. },
  214. });
  215. // -------------------------- 表单需要的数据 --------------------------
  216. // 获取当前时间
  217. const now = dayjs().format("YYYY-MM-DD HH:mm:ss");
  218. // 最大时间为当前时间
  219. const dateMax = ref(now);
  220. // 根据formDisabled动态返回表单placeholder - 填写
  221. const fillInPlaceholder = computed(() => {
  222. return props.formDisabled ? " " : t("operation.PleaseFillIn");
  223. });
  224. // 根据formDisabled动态返回表单placeholder - 选择
  225. const selectPlaceholder = computed(() => {
  226. return props.formDisabled ? " " : t("operation.PleaseSelect");
  227. });
  228. // 根据formDisabled动态返回表单required
  229. const formItemRequired = computed(() => {
  230. return props.formDisabled ? false : true;
  231. });
  232. // 表单实例
  233. const maintenanceFormRef = ref(null);
  234. // 表单校验规则
  235. const formDataRules = ref({
  236. name: {
  237. rules: [
  238. {
  239. required: true,
  240. errorMessage:
  241. t("operation.PleaseFillIn") + t("workOrder.workOrderName"),
  242. },
  243. ],
  244. },
  245. applicant: {
  246. rules: [
  247. {
  248. required: true,
  249. errorMessage:
  250. t("operation.PleaseFillIn") + t("maintenanceWorkOrder.applicant"),
  251. },
  252. ],
  253. },
  254. actualStartTime: {
  255. rules: [
  256. {
  257. required: true,
  258. errorMessage:
  259. t("operation.PleaseSelect") +
  260. t("maintenanceWorkOrder.actualMaintenanceStartTime"),
  261. },
  262. ],
  263. },
  264. actualEndTime: {
  265. rules: [
  266. {
  267. required: true,
  268. errorMessage:
  269. t("operation.PleaseSelect") + t("maintenanceWorkOrder.actualEndTime"),
  270. },
  271. ],
  272. },
  273. });
  274. // 表单校验方法
  275. const validate = async () => {
  276. // 调用uni-forms的validate方法进行校验
  277. return await maintenanceFormRef.value.validate();
  278. };
  279. // -------------------------- 暴露给父组件的外部方法 --------------------------
  280. defineExpose({
  281. validate,
  282. });
  283. // -------------------------- 事件派发 --------------------------
  284. const emit = defineEmits([""]);
  285. </script>
  286. <style lang="scss" scoped>
  287. @import "@/style/work-order-form.scss";
  288. </style>