work-order-form.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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.actualMaintenanceStartTime')"
  66. name="actualStartTime"
  67. :required="formItemRequired"
  68. >
  69. <uni-datetime-picker
  70. type="datetime"
  71. returnType="timestamp"
  72. :end="dateMax"
  73. :border="false"
  74. :disabled="formDisabled"
  75. :placeholder="selectPlaceholder"
  76. :style="{
  77. color: formData.actualStartTime ? '#333' : '#999',
  78. 'font-size': formData.actualStartTime
  79. ? '14px !important'
  80. : 'inherit !important',
  81. }"
  82. v-model="formData.actualStartTime"
  83. >
  84. </uni-datetime-picker>
  85. </uni-forms-item>
  86. <!-- 实际保养结束时间 -->
  87. <uni-forms-item
  88. class="form-item"
  89. :label="$t('maintenanceWorkOrder.actualEndTime')"
  90. name="actualEndTime"
  91. :required="formItemRequired"
  92. >
  93. <uni-datetime-picker
  94. type="datetime"
  95. returnType="timestamp"
  96. :end="dateMax"
  97. :border="false"
  98. :disabled="formDisabled"
  99. :placeholder="selectPlaceholder"
  100. :style="{
  101. color: formData.actualEndTime ? '#333' : '#999',
  102. 'font-size': formData.actualEndTime
  103. ? '14px !important'
  104. : 'inherit !important',
  105. }"
  106. v-model="formData.actualEndTime"
  107. >
  108. </uni-datetime-picker>
  109. </uni-forms-item>
  110. <!-- 保养费用 -->
  111. <uni-forms-item
  112. class="form-item"
  113. :label="$t('maintenanceWorkOrder.maintenanceCost')"
  114. name="cost"
  115. :required="false"
  116. >
  117. <uni-easyinput
  118. type="digit"
  119. style="text-align: right"
  120. :styles="{ disableColor: 'transparent' }"
  121. :inputBorder="false"
  122. :clearable="true"
  123. :disabled="true"
  124. v-model="formData.cost"
  125. />
  126. </uni-forms-item>
  127. <!-- 其他费用 -->
  128. <uni-forms-item
  129. class="form-item"
  130. :label="$t('maintenanceWorkOrder.otherCost')"
  131. :required="false"
  132. name="otherCost"
  133. >
  134. <uni-easyinput
  135. type="digit"
  136. style="text-align: right"
  137. :styles="{ disableColor: '#fff' }"
  138. :inputBorder="false"
  139. :clearable="true"
  140. :disabled="formDisabled"
  141. :placeholder="fillInPlaceholder"
  142. v-model="formData.otherCost"
  143. />
  144. </uni-forms-item>
  145. <!-- 备注 -->
  146. <uni-forms-item
  147. class="form-item"
  148. :label="$t('operation.remark')"
  149. :required="false"
  150. name="remark"
  151. >
  152. <uni-easyinput
  153. type="textarea"
  154. :autoHeight="true"
  155. style="text-align: right"
  156. :styles="{ disableColor: '#fff' }"
  157. :inputBorder="false"
  158. :disabled="formDisabled"
  159. :placeholder="fillInPlaceholder"
  160. v-model="formData.remark"
  161. />
  162. </uni-forms-item>
  163. </uni-forms>
  164. </view>
  165. </scroll-view>
  166. </template>
  167. <script setup>
  168. import { onLoad, onReady, onBackPress } from "@dcloudio/uni-app";
  169. import { ref, reactive, computed, getCurrentInstance } from "vue";
  170. import dayjs from "dayjs";
  171. // --------------------------引用全局变量$t-------------------------------
  172. const { appContext } = getCurrentInstance();
  173. const t = appContext.config.globalProperties.$t;
  174. // --------------------------引用字典项-----------------------------------
  175. import { useDataDictStore } from "@/store/modules/dataDict";
  176. const { getIntDictOptions } = useDataDictStore();
  177. // 获取保养类型字典项
  178. const outsourcingFlagRange = getIntDictOptions(
  179. "pms_main_work_order_process_mode"
  180. ).map((item) => {
  181. return {
  182. ...item,
  183. text: item.label,
  184. };
  185. });
  186. console.log("🚀 ~ outsourcingFlagRange:", outsourcingFlagRange);
  187. // -------------------------接收父组件传递的参数---------------------------
  188. const props = defineProps({
  189. formData: {
  190. type: Object,
  191. default: () => {},
  192. },
  193. formDisabled: {
  194. type: Boolean,
  195. default: false,
  196. },
  197. });
  198. // -------------------------- 表单需要的数据 --------------------------
  199. // 获取当前时间
  200. const now = dayjs().format("YYYY-MM-DD HH:mm:ss");
  201. // 最大时间为当前时间
  202. const dateMax = ref(now);
  203. // 根据formDisabled动态返回表单placeholder - 填写
  204. const fillInPlaceholder = computed(() => {
  205. return props.formDisabled ? " " : t("operation.PleaseFillIn");
  206. });
  207. // 根据formDisabled动态返回表单placeholder - 选择
  208. const selectPlaceholder = computed(() => {
  209. return props.formDisabled ? " " : t("operation.PleaseSelect");
  210. });
  211. // 根据formDisabled动态返回表单required
  212. const formItemRequired = computed(() => {
  213. return props.formDisabled ? false : true;
  214. });
  215. // 表单实例
  216. const maintenanceFormRef = ref(null);
  217. // 表单校验规则
  218. const formDataRules = ref({
  219. name: {
  220. rules: [
  221. {
  222. required: true,
  223. errorMessage:
  224. t("operation.PleaseFillIn") + t("workOrder.workOrderName"),
  225. },
  226. ],
  227. },
  228. actualStartTime: {
  229. rules: [
  230. {
  231. required: true,
  232. errorMessage:
  233. t("operation.PleaseSelect") +
  234. t("maintenanceWorkOrder.actualMaintenanceStartTime"),
  235. },
  236. ],
  237. },
  238. actualEndTime: {
  239. rules: [
  240. {
  241. required: true,
  242. errorMessage:
  243. t("operation.PleaseSelect") + t("maintenanceWorkOrder.actualEndTime"),
  244. },
  245. ],
  246. },
  247. });
  248. // 表单校验方法
  249. const validate = async () => {
  250. // 调用uni-forms的validate方法进行校验
  251. return await maintenanceFormRef.value.validate();
  252. };
  253. // -------------------------- 暴露给父组件的外部方法 --------------------------
  254. defineExpose({
  255. validate,
  256. });
  257. // -------------------------- 事件派发 --------------------------
  258. const emit = defineEmits([""]);
  259. </script>
  260. <style lang="scss" scoped>
  261. @import "@/style/work-order-form.scss";
  262. </style>