traceabilityCom.vue~ 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <!-- 生产履历 -->
  2. <template>
  3. <div class="mainContentBox">
  4. <avue-crud
  5. ref="crudRef2"
  6. v-model:search="search"
  7. v-model="form"
  8. :data="data"
  9. :option="option"
  10. @row-update="updateRow"
  11. v-model:page="page"
  12. />
  13. <CommonTable
  14. ref="userRef"
  15. tableTitle="操作人选择"
  16. tableType="USERS"
  17. @selected-sure="onUserSelectedFinish"
  18. />
  19. </div>
  20. </template>
  21. <script setup>
  22. import { ref, getCurrentInstance } from "vue";
  23. import { useCrud } from "@/hooks/userCrud";
  24. import dictDataUtil from "@/common/configs/dictDataUtil";
  25. import ButtonPermKeys from "@/common/configs/buttonPermission";
  26. import {
  27. useCommonStoreHook,
  28. useDictionaryStore,
  29. useUserStoreHook,
  30. } from "@/store";
  31. // 数据字典相关
  32. const { dicts } = useDictionaryStore();
  33. const userStore = useUserStoreHook();
  34. // 传入一个url,后面不带/
  35. const {
  36. form,
  37. data,
  38. option,
  39. search,
  40. page,
  41. toDeleteIds,
  42. Methords,
  43. Utils,
  44. commonConfig,
  45. } = useCrud({
  46. src: "/api/v1/process/info",
  47. });
  48. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  49. Methords; //增删改查
  50. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  51. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  52. const onUserSelectedFinish = (selectedValue) => {
  53. form.value.operator = selectedValue.userName;
  54. };
  55. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  56. const userRef = ref(null);
  57. const refreshTra = (row) => {
  58. commonConfig.value.params = { seqNo: row.seqNo };
  59. dataList();
  60. };
  61. defineExpose({ refreshTra });
  62. onMounted(() => {
  63. if (userStore.user.userId === 10000) {
  64. option.value.menu = true;
  65. option.value.editBtn = true;
  66. }
  67. });
  68. option.value = Object.assign(option.value, {
  69. selection: false,
  70. border: true,
  71. index: false,
  72. expandLevel: 3,
  73. headerAlign: "center",
  74. align: "center",
  75. labelWidth: 100,
  76. addBtn: false,
  77. delBtn: false,
  78. menuWidth: 100,
  79. editBtn: false,
  80. viewBtn: false,
  81. menu: false,
  82. header: false,
  83. column: [
  84. {
  85. label: "生产过程id",
  86. prop: "id",
  87. display: false,
  88. hide: true,
  89. width: 120,
  90. },
  91. {
  92. label: "工序名称",
  93. prop: "operationName",
  94. editDisplay: false,
  95. width: 120,
  96. },
  97. {
  98. label: "工段",
  99. prop: "workSection",
  100. editDisplay: false,
  101. type: "select",
  102. dicData: dicts.workshop_section,
  103. props: {
  104. label: "dictLabel",
  105. value: "dictValue",
  106. },
  107. },
  108. {
  109. label: "状态",
  110. editDisplay: false,
  111. prop: "currentState",
  112. search: false,
  113. dicData: dicts.process_state,
  114. props: {
  115. label: "dictLabel",
  116. value: "dictValue",
  117. },
  118. },
  119. {
  120. label: "开始时间",
  121. prop: "realStartWhen",
  122. search: false,
  123. format: "YYYY-MM-DD HH:mm:ss",
  124. valueFormat: "YYYY-MM-DD HH:mm:ss",
  125. width: 160,
  126. type: "datetime",
  127. rules: [
  128. {
  129. validator: (rule, value, callback) => {
  130. if (value == null || form.value.realEndWhen == null) {
  131. callback();
  132. } else if (
  133. new Date(value).getTime() <=
  134. new Date(form.value.realEndWhen).getTime()
  135. ) {
  136. callback();
  137. } else {
  138. callback(new Error("开始时间应小于等于结束时间"));
  139. }
  140. },
  141. message: "开始时间应小于等于结束时间",
  142. required: true,
  143. trigger: "change",
  144. },
  145. ],
  146. },
  147. {
  148. label: "结束时间",
  149. prop: "realEndWhen",
  150. format: "YYYY-MM-DD HH:mm:ss",
  151. valueFormat: "YYYY-MM-DD HH:mm:ss",
  152. width: 160,
  153. type: "datetime",
  154. rules: [
  155. {
  156. validator: (rule, value, callback) => {
  157. if (value == null || form.value.realStartWhen == null) {
  158. callback();
  159. } else if (
  160. new Date(value).getTime() >=
  161. new Date(form.value.realStartWhen).getTime()
  162. ) {
  163. callback();
  164. } else {
  165. callback(new Error("\结束时间应大于等于结束时间"));
  166. }
  167. },
  168. required: true,
  169. message: "结束时间应大于等于开始时间",
  170. trigger: "change",
  171. },
  172. ],
  173. },
  174. {
  175. label: "操作人",
  176. prop: "operator",
  177. search: false,
  178. width: 100,
  179. overHidden: true,
  180. click: ({ value, column }) => {
  181. userRef.value.startSelect();
  182. },
  183. },
  184. {
  185. label: "工时(秒)",
  186. prop: "totalTime",
  187. editDisplay: false,
  188. search: false,
  189. },
  190. {
  191. label: "工步",
  192. prop: "operationSort",
  193. editDisplay: false,
  194. search: false,
  195. },
  196. ],
  197. });
  198. // const validateTimeEnd = (rule, value, callback) => {
  199. // if (value === "") {
  200. // callback(new Error("Please input the password again"));
  201. // } else if (value !== ruleForm.pass) {
  202. // callback(new Error("Two inputs don't match!"));
  203. // } else {
  204. // callback();
  205. // }
  206. // };
  207. </script>