index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. <template>
  2. <div class="mainContentBox">
  3. <avue-crud
  4. ref="crudRef"
  5. v-model:search="search"
  6. v-model="form"
  7. :data="data"
  8. :option="option"
  9. v-model:page="page"
  10. @row-save="createRow"
  11. @row-update="updateRow"
  12. @row-del="deleteRow"
  13. @search-change="searchChange"
  14. @search-reset="resetChange"
  15. @size-change="dataList"
  16. @current-change="dataList"
  17. @selection-change="selectionChange"
  18. >
  19. <template #menu="{ size, row, index }">
  20. <!-- <el-button
  21. icon="el-icon-delete"
  22. text
  23. @click="deleteRow(row)"
  24. type="danger"
  25. :size="size">删除</el-button>-->
  26. <el-button
  27. icon="el-icon-edit"
  28. text
  29. v-if="row.state === '0'"
  30. @click="openDialog(1, row.id)"
  31. type="primary"
  32. :size="size"
  33. >审核</el-button
  34. >
  35. <el-button
  36. icon="el-icon-edit"
  37. text
  38. @click="openDialog(0, row.id)"
  39. type="primary"
  40. :size="size"
  41. >详情</el-button
  42. >
  43. </template>
  44. </avue-crud>
  45. <el-dialog
  46. v-model="dialog.visible"
  47. :title="dialog.title"
  48. width="950px"
  49. @close="dialog.visible = false"
  50. >
  51. <el-form ref="queryFormRef" label-width="100" :inline="true">
  52. <el-row :gutter="24">
  53. <el-col :lg="10" :xs="24">
  54. <el-form-item label="订单编码">
  55. <el-text>{{ form.orderCode }}</el-text>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :lg="6" :xs="24">
  59. <el-form-item label="订单名称">
  60. <el-text>{{ form.orderName }}</el-text>
  61. </el-form-item>
  62. </el-col>
  63. <el-col :lg="2" :xs="24">
  64. <el-form-item label="工单编码">
  65. <el-text>{{ form.workOrderCode }}</el-text>
  66. </el-form-item>
  67. </el-col>
  68. </el-row>
  69. <el-row :gutter="24">
  70. <el-col :lg="10" :xs="24">
  71. <el-form-item label="产品名称">
  72. <el-text>{{ form.materialName }}</el-text>
  73. </el-form-item>
  74. </el-col>
  75. <el-col :lg="6" :xs="24">
  76. <el-form-item label="产品编码">
  77. <el-text>{{ form.materialCode }}</el-text>
  78. </el-form-item>
  79. </el-col>
  80. <el-col :lg="2" :xs="24">
  81. <el-form-item label="产品数量">
  82. <el-text>{{ form.outNum }}</el-text>
  83. </el-form-item>
  84. </el-col>
  85. </el-row>
  86. <el-row :gutter="24">
  87. <el-col :lg="24" :xs="24">
  88. <el-form-item label=" ">
  89. <el-table
  90. border="true"
  91. class="gray-header-table"
  92. v-loading="loading"
  93. :data="form.details"
  94. highlight-current-row
  95. >
  96. <el-table-column
  97. label="流转卡号"
  98. align="left"
  99. width="350"
  100. prop="seqNo"
  101. />
  102. <el-table-column
  103. label="状态"
  104. width="250"
  105. align="left"
  106. prop="state"
  107. >
  108. <template #default="scope">
  109. <el-tag v-if="scope.row.state === 0" type="success"
  110. >合格</el-tag
  111. >
  112. <el-tag v-if="scope.row.state === 1" type="error"
  113. >不合格</el-tag
  114. >
  115. </template>
  116. </el-table-column>
  117. </el-table>
  118. </el-form-item>
  119. </el-col>
  120. </el-row>
  121. <el-row :gutter="24">
  122. <el-col :lg="24" :xs="24">
  123. <el-form-item label="委外工序">
  124. <el-text>{{ form.operationNames }}</el-text>
  125. </el-form-item>
  126. </el-col>
  127. </el-row>
  128. <el-row :gutter="24">
  129. <el-col :lg="24" :xs="24">
  130. <el-form-item label="委外供应商">
  131. <el-text>{{ form.manufacturers }}</el-text>
  132. </el-form-item>
  133. </el-col>
  134. </el-row>
  135. <el-row>
  136. <el-col :lg="24" :xs="24">
  137. <el-form-item label="备注">
  138. <el-text>{{ form.remark }}</el-text>
  139. </el-form-item>
  140. </el-col>
  141. </el-row>
  142. <el-row v-if="dialog.type === 1 && checkPerm('outsource:audit')">
  143. <el-col :lg="24" :xs="24">
  144. <el-form-item label="审核意见">
  145. <el-radio-group v-model="radio">
  146. <el-radio :value="0">通 过</el-radio>
  147. <el-radio :value="1">不通过</el-radio>
  148. </el-radio-group>
  149. </el-form-item>
  150. </el-col>
  151. </el-row>
  152. <el-row v-if="form.state !== '0'">
  153. <el-col :lg="8" :xs="24">
  154. <el-form-item label="审核人">
  155. <el-text>{{ form.auditUser }}</el-text>
  156. </el-form-item>
  157. </el-col>
  158. <el-col :lg="8" :xs="24">
  159. <el-form-item label="审核时间">
  160. <el-text>{{ form.auditTime }}</el-text>
  161. </el-form-item>
  162. </el-col>
  163. </el-row>
  164. <el-row v-if="form.state !== '0'">
  165. <el-col :lg="8" :xs="24">
  166. <el-form-item label="接收文件名">
  167. <el-text>{{ form.receiveFileName }}</el-text>
  168. </el-form-item>
  169. </el-col>
  170. <el-col :lg="8" :xs="24">
  171. <el-form-item label="">
  172. <el-button
  173. @click="downLoadFile(form.receiveFile)"
  174. text
  175. type="primary"
  176. >下载</el-button
  177. >
  178. </el-form-item>
  179. </el-col>
  180. </el-row>
  181. <el-row v-if="form.state !== '0'">
  182. <el-col :lg="8" :xs="24">
  183. <el-form-item label="委外结论">
  184. <el-text>{{ form.receiveRemark }}</el-text>
  185. </el-form-item>
  186. </el-col>
  187. </el-row>
  188. </el-form>
  189. <div
  190. class="dialog-footer"
  191. align="center"
  192. v-if="dialog.type === 1 && checkPerm('outsource:audit')"
  193. >
  194. <el-button @click="dialog.visible = false">取 消</el-button>
  195. <el-button type="primary" @click="audit">审 核</el-button>
  196. </div>
  197. </el-dialog>
  198. </div>
  199. </template>
  200. <script setup>
  201. import { ref, getCurrentInstance } from "vue";
  202. import { useCrud } from "@/hooks/userCrud";
  203. import { checkPerm } from "@/directive/permission";
  204. import ButtonPermKeys from "@/common/configs/buttonPermission";
  205. import { queryOutSourceDetails, updateOutSourceApply } from "@/api/process";
  206. import { useCommonStoreHook } from "@/store";
  207. import dictDataUtil from "@/common/configs/dictDataUtil";
  208. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  209. const downLoadFile = (path) => {
  210. location.href = import.meta.env.VITE_APP_UPLOAD_URL + path;
  211. };
  212. const test = () => {
  213. isShowTable.value = true;
  214. tableType.value = tableType.value == 1 ? 2 : 1;
  215. };
  216. const radio = ref(0);
  217. // 传入一个url,后面不带/
  218. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  219. useCrud({
  220. src: "/api/v1/process/outsource",
  221. });
  222. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  223. Methords; //增删改查
  224. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  225. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  226. const loading = ref(false);
  227. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  228. const dialog = reactive({
  229. title: "委外详情",
  230. visible: false,
  231. type: 0,
  232. });
  233. const openDialog = (type, id) => {
  234. dialog.title = type === 0 ? "委外详情" : "委外审核";
  235. queryOutSourceDetails(id).then((data) => {
  236. form.value = data.data;
  237. radio.value = 0;
  238. if (form.value) {
  239. if (form.value.state === "2") {
  240. radio.value = 1;
  241. }
  242. }
  243. dialog.visible = true;
  244. dialog.type = type;
  245. });
  246. };
  247. const audit = () => {
  248. form.value.state = radio.value === 0 ? 1 : 2;
  249. updateOutSourceApply(form.value).then((data) => {
  250. if (data.code === "200") {
  251. ElMessage.success("操作成功");
  252. dialog.visible = false;
  253. dataList();
  254. } else {
  255. ElMessage.error(data.msg);
  256. }
  257. });
  258. };
  259. // 设置表格列或者其他自定义的option
  260. option.value = Object.assign(option.value, {
  261. addBtn: false,
  262. editBtn: false,
  263. viewBtn: false,
  264. delBtn: false,
  265. selection: true,
  266. column: [
  267. {
  268. label: "计划编号",
  269. prop: "orderCode",
  270. width: 150,
  271. overHidden: true,
  272. search: true,
  273. },
  274. {
  275. label: "计划名称",
  276. prop: "orderName",
  277. width: 150,
  278. overHidden: true,
  279. },
  280. {
  281. label: "物料编码",
  282. prop: "materialCode",
  283. search: true,
  284. width: 150,
  285. overHidden: true,
  286. },
  287. {
  288. label: "物料名称",
  289. width: 150,
  290. overHidden: true,
  291. prop: "materialName",
  292. },
  293. {
  294. label: "工单数量",
  295. width: 120,
  296. overHidden: true,
  297. prop: "workOrderNum",
  298. },
  299. {
  300. label: "委外数量",
  301. width: 120,
  302. prop: "outNum",
  303. overHidden: true,
  304. },
  305. {
  306. label: "委外工序",
  307. width: 150,
  308. overHidden: true,
  309. prop: "operationNames",
  310. },
  311. {
  312. label: "委外厂商",
  313. prop: "manufacturers",
  314. width: 150,
  315. overHidden: true,
  316. },
  317. {
  318. label: "状态",
  319. prop: "state",
  320. type: "select",
  321. search: true,
  322. width: 90,
  323. dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.outsource_state,
  324. props: {
  325. label: "dictLabel",
  326. value: "dictValue",
  327. },
  328. },
  329. {
  330. label: "申请人",
  331. width: 120,
  332. overHidden: true,
  333. prop: "creator",
  334. },
  335. {
  336. label: "申请时间",
  337. width: 120,
  338. overHidden: true,
  339. prop: "created",
  340. },
  341. {
  342. label: "审核人",
  343. width: 120,
  344. overHidden: true,
  345. prop: "auditUser",
  346. },
  347. {
  348. label: "审核时间",
  349. width: 120,
  350. overHidden: true,
  351. prop: "auditTime",
  352. },
  353. {
  354. label: "接收人",
  355. width: 120,
  356. overHidden: true,
  357. prop: "receiveUser",
  358. },
  359. {
  360. label: "接收时间",
  361. width: 120,
  362. overHidden: true,
  363. prop: "receiveTime",
  364. },
  365. ],
  366. });
  367. onMounted(() => {
  368. // console.log("crudRef", crudRef)
  369. dataList();
  370. });
  371. </script>
  372. <style>
  373. /* 添加自定义类名以区分不同表格的样式 */
  374. .gray-header-table .el-table__header-wrapper {
  375. background-color: #f2f2f2; /* 灰色背景 */
  376. }
  377. </style>