index.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <template>
  2. <div class="mainContentBox common-layout">
  3. <el-container>
  4. <el-aside width="600px" style="height: 800px">
  5. <avue-crud
  6. ref="crudRef"
  7. v-model:search="search"
  8. v-model="form"
  9. :data="data"
  10. :option="option"
  11. v-model:page="page"
  12. @cell-click="handleCellClick"
  13. @search-change="searchChange"
  14. @size-change="dataList"
  15. @current-change="dataList"
  16. >
  17. <template #seqNo="{ row }">
  18. <el-tag :type="chooseTagType(row.seqNo, 'css')">{{
  19. chooseTagType(row.seqNo, "text")
  20. }}</el-tag>
  21. {{ row.seqNo }}
  22. </template>
  23. </avue-crud>
  24. </el-aside>
  25. <el-container>
  26. <el-header style="height: 20%">
  27. <el-descriptions title="产品信息一览" border>
  28. <el-descriptions-item label="产品名称">{{
  29. productReviewInfo.materialName
  30. }}</el-descriptions-item>
  31. <el-descriptions-item label="流转卡号">{{
  32. productReviewInfo.seqNo
  33. }}</el-descriptions-item>
  34. <el-descriptions-item label="物料编号">{{
  35. productReviewInfo.materialCode
  36. }}</el-descriptions-item>
  37. <el-descriptions-item label="产品规格">{{
  38. productReviewInfo.materialModel
  39. }}</el-descriptions-item>
  40. <el-descriptions-item label="铭牌号">-</el-descriptions-item>
  41. <el-descriptions-item label="是否返工">
  42. <el-tag size="small">否</el-tag>
  43. </el-descriptions-item>
  44. <el-descriptions-item label="工单出站">{{
  45. productReviewInfo.outNum
  46. }}</el-descriptions-item>
  47. <el-descriptions-item label="交付日期">{{
  48. productReviewInfo.planStartEnd
  49. }}</el-descriptions-item>
  50. </el-descriptions>
  51. </el-header>
  52. <el-main>
  53. <el-tabs
  54. type="border-card"
  55. @tab-click="tabsEvent"
  56. v-model="defaultTabName"
  57. >
  58. <el-tab-pane name="traceabilityComRef" label="生产履历">
  59. <template #label>
  60. <span
  61. >生产履历
  62. <el-badge
  63. :value="tabCount.traceability"
  64. class="item"
  65. type="primary"
  66. />
  67. </span>
  68. </template>
  69. <TraceabilityCom ref="traceabilityComRef" />
  70. </el-tab-pane>
  71. <el-tab-pane name="materialsComRef" label="已采物料">
  72. <template #label>
  73. <span
  74. >已采物料
  75. <el-badge
  76. :value="tabCount.materials"
  77. class="item"
  78. type="primary"
  79. />
  80. </span>
  81. </template>
  82. <MaterialsCom ref="materialsComRef" />
  83. </el-tab-pane>
  84. <el-tab-pane name="recordComRef" label="记录项">
  85. <template #label>
  86. <span
  87. >记录项
  88. <el-badge
  89. :value="tabCount.record"
  90. class="item"
  91. type="primary"
  92. />
  93. </span>
  94. </template>
  95. <RecordCom ref="recordComRef"
  96. /></el-tab-pane>
  97. <el-tab-pane name="checkComRef" label="点检判定">
  98. <template #label>
  99. <span
  100. >点检判定
  101. <el-badge
  102. :value="tabCount.checks"
  103. class="item"
  104. type="primary"
  105. />
  106. </span>
  107. </template>
  108. <CheckCom ref="checkComRef" />
  109. </el-tab-pane>
  110. <el-tab-pane name="equitComRef" label="设备使用">
  111. <template #label>
  112. <span
  113. >设备使用
  114. <el-badge
  115. :value="tabCount.equit"
  116. class="item"
  117. type="primary"
  118. />
  119. </span>
  120. </template>
  121. <EquitCom ref="equitComRef"
  122. /></el-tab-pane>
  123. <el-tab-pane name="faultComRef" label="报故记录">
  124. <template #label>
  125. <span
  126. >报故记录
  127. <el-badge
  128. :value="tabCount.fault"
  129. class="item"
  130. type="primary"
  131. />
  132. </span>
  133. </template>
  134. <FaultCom ref="faultComRef" />
  135. </el-tab-pane>
  136. <!-- <el-tab-pane name="bugComRef" label="缺陷项">缺陷项</el-tab-pane>-->
  137. <el-tab-pane name="mediaComRef" label="图片采集"
  138. ><template #label>
  139. <span
  140. >图片采集
  141. <el-badge
  142. :value="tabCount.medias"
  143. class="item"
  144. type="primary"
  145. />
  146. </span>
  147. </template>
  148. <media-com ref="mediaComRef"
  149. /></el-tab-pane>
  150. </el-tabs>
  151. </el-main>
  152. </el-container>
  153. </el-container>
  154. </div>
  155. </template>
  156. <script setup>
  157. import { ref, getCurrentInstance } from "vue";
  158. import { useCrud } from "@/hooks/userCrud";
  159. import { traceabilityTabCount } from "@/api/process";
  160. import { getMaterialDetailsByseqNo, getOperationCompent } from "@/api/material";
  161. import TraceabilityCom from "@/views/pro/traceability/components/traceabilityCom.vue";
  162. import MaterialsCom from "@/views/pro/traceability/components/materialsCom.vue";
  163. import RecordCom from "@/views/pro/traceability/components/recordCom.vue";
  164. import CheckCom from "@/views/pro/traceability/components/checkCom.vue";
  165. import EquitCom from "@/views/pro/traceability/components/equitCom.vue";
  166. import FaultCom from "@/views/pro/traceability/components/faultCom.vue";
  167. import MediaCom from "./components/mediaCom.vue";
  168. // 传入一个url,后面不带/
  169. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  170. useCrud({
  171. src: "/api/v1/process/web/traceability",
  172. });
  173. const { dataList, createRow, updateRow, deleteRow, searchChange } = Methords; //增删改查
  174. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  175. const { checkBtnPerm } = Utils; //按钮权限等工具
  176. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  177. const traceabilityComRef = ref(null);
  178. const materialsComRef = ref(null);
  179. const recordComRef = ref(null);
  180. const checkComRef = ref(null);
  181. const equitComRef = ref(null);
  182. const faultComRef = ref(null);
  183. const mediaComRef = ref(null);
  184. let defaultTabName = ref("traceabilityComRef");
  185. //tab页组件
  186. const tabNameComRef = new Map([
  187. ["traceabilityComRef", traceabilityComRef],
  188. ["materialsComRef", materialsComRef],
  189. ["recordComRef", recordComRef],
  190. ["checkComRef", checkComRef],
  191. ["equitComRef", equitComRef],
  192. ["faultComRef", faultComRef],
  193. ["mediaComRef", mediaComRef],
  194. ]);
  195. let temRow = ref({});
  196. const tabsEvent = (pane, ev) => {
  197. defaultTabName.value = pane.props.name;
  198. if (temRow.value.seqNo) {
  199. tabNameComRef.get(pane.props.name)?.value.refreshTra(temRow.value);
  200. }
  201. };
  202. const chooseTagType = (row, type) => {
  203. let daynamicType = "";
  204. if (type == "text") {
  205. daynamicType = row.startsWith("DD")
  206. ? "订单"
  207. : row.startsWith("GD")
  208. ? "工单"
  209. : "流转卡号";
  210. } else {
  211. daynamicType = row.startsWith("DD")
  212. ? "success"
  213. : row.startsWith("GD")
  214. ? "warning"
  215. : "primary";
  216. }
  217. return daynamicType;
  218. };
  219. let productReviewInfo = reactive({
  220. materialName: "",
  221. seqNo: "",
  222. materialCode: "",
  223. materialModel: "",
  224. planStartEnd: "",
  225. workOrderCode: "",
  226. outNum: "",
  227. });
  228. let tabCount = reactive({
  229. traceability: "",
  230. materials: "",
  231. record: "",
  232. check: "",
  233. equit: "",
  234. fault: "",
  235. medias: "",
  236. });
  237. const handleCellClick = (row, column, event) => {
  238. //获取出单的数量
  239. if (data.value) {
  240. for (let topTree of data.value) {
  241. if (topTree) {
  242. for (let secondTree of topTree.children) {
  243. if (row.workOrderCode == secondTree.workOrderCode) {
  244. productReviewInfo.outNum = secondTree.children.length;
  245. }
  246. }
  247. }
  248. }
  249. }
  250. temRow.value = row;
  251. // 点击行时触发的逻辑
  252. if (!row.children && row.seqNo) {
  253. if (productReviewInfo.seqNo != row.seqNo) {
  254. //物料履历
  255. //traceabilityComRef.value.refreshTra(row);
  256. tabNameComRef.get(defaultTabName.value)?.value.refreshTra(temRow.value);
  257. }
  258. //每次点击都要获取tab页面的数量
  259. traceabilityTabCount({workOrderCode: row.workOrderCode, seqNo: row.seqNo }).then(({ data }) => {
  260. tabCount = Object.assign(tabCount, data);
  261. });
  262. if (row.workOrderCode == productReviewInfo.workOrderCode) {
  263. productReviewInfo.seqNo = row.seqNo;
  264. return;
  265. }
  266. //产品信息
  267. getMaterialDetailsByseqNo(row.workOrderCode,row.seqNo).then(({ data }) => {
  268. productReviewInfo = Object.assign(productReviewInfo, data);
  269. productReviewInfo.workOrderCode = row.workOrderCode;
  270. // productReviewInfo.outNum =
  271. });
  272. }
  273. };
  274. // 设置表格列或者其他自定义的option
  275. option.value = Object.assign(option.value, {
  276. // selection: true,
  277. excelBtn: true,
  278. border: true,
  279. index: false,
  280. expandLevel: 3,
  281. headerAlign: "center",
  282. align: "center",
  283. tree: true,
  284. labelWidth: 100,
  285. addBtn: false,
  286. menu: false,
  287. header: false,
  288. searchMenuSpan: 8,
  289. rowKey: "seqNo",
  290. rowParentKey: "seqNo",
  291. column: [
  292. {
  293. label: "Id",
  294. prop: "id",
  295. search: false,
  296. hide: true,
  297. },
  298. {
  299. label: "流转卡号",
  300. prop: "seqNo",
  301. search: true,
  302. searchLabelWidth: "100",
  303. searchSpan: 12,
  304. },
  305. {
  306. label: "数量",
  307. prop: "quantity",
  308. search: false,
  309. width: "100",
  310. },
  311. ],
  312. });
  313. onMounted(() => {
  314. dataList();
  315. });
  316. </script>