index.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  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-left="{ size }">
  20. <el-button
  21. type="primary"
  22. icon="el-icon-plus"
  23. :size="size"
  24. @click="openDialog(0, null)"
  25. >新增</el-button
  26. >
  27. <el-button
  28. :disabled="toDeleteIds.length < 1"
  29. type="danger"
  30. icon="el-icon-delete"
  31. :size="size"
  32. @click="multipleDelete"
  33. >删除</el-button
  34. >
  35. </template>
  36. <template #menu="{ size, row, index }">
  37. <el-button type="primary" link size="small" @click="openDialog(1, row)"
  38. ><i-ep-view />查看</el-button
  39. >
  40. <el-button type="primary" link size="small" @click="openDialog(2, row)"
  41. ><i-ep-edit />{{ row.state === "0" ? "编辑" : "流程" }}</el-button
  42. >
  43. <el-button
  44. type="primary"
  45. v-if="row.state === '8'"
  46. link
  47. size="small"
  48. @click="openDialog1(row)"
  49. ><i-ep-position />导出物料信息</el-button
  50. >
  51. </template>
  52. </avue-crud>
  53. <el-dialog
  54. v-model="dialog1.visible"
  55. :title="dialog1.title"
  56. @close="dialog1.visible = false"
  57. width="90%"
  58. >
  59. <ExportInfo :excelRow />
  60. </el-dialog>
  61. <el-dialog
  62. v-model="dialog.visible"
  63. :title="dialog.title"
  64. width="75%"
  65. @close="dialog.visible = false"
  66. >
  67. <template #header="{ close, titleId, titleClass }">
  68. <el-button
  69. v-if="dialogType === 1"
  70. type="primary"
  71. @click="printPage"
  72. size="small"
  73. >打印</el-button
  74. >
  75. </template>
  76. <div style="width: 100%; height: 30px">
  77. <!-- <el-steps :active="1" finish-status="success">-->
  78. <el-steps
  79. :active="form.state === '8' ? 3 : form.state === '9' ? 2 : 1"
  80. finish-status="success"
  81. >
  82. <el-step :title="form.sendOrg" />
  83. <el-step title="运输中" />
  84. <el-step :title="form.applyOrg" />
  85. </el-steps>
  86. </div>
  87. <div class="card-container">
  88. <el-card style="width: 70%; margin-top: 30px" shadow="always">
  89. <div ref="toPrintRef">
  90. <el-row style="text-align: center">
  91. <el-col :span="24"
  92. ><el-text tag="b">零、部(组)件领用单</el-text></el-col
  93. >
  94. </el-row>
  95. <el-row>
  96. <el-col :span="14"></el-col>
  97. <el-col :span="5"
  98. ><el-text tag="p" v-if="form.applyCode">{{
  99. form.applyCode
  100. }}</el-text></el-col
  101. >
  102. <el-col :span="5"></el-col>
  103. </el-row>
  104. <el-row style="width: 100%; height: 30px"></el-row>
  105. <el-row>
  106. <el-col :span="2"><el-text tag="p">领用单位:</el-text></el-col>
  107. <el-col :span="6">
  108. <el-text tag="p" v-if="dialogType === 1 || form.state > 0">{{
  109. form.applyOrg
  110. }}</el-text>
  111. <el-input
  112. v-else
  113. size="small"
  114. style="width: 150px; padding-bottom: 5px"
  115. v-model="form.applyOrg"
  116. />
  117. </el-col>
  118. <el-col :span="2"><el-text tag="p">发件单位: </el-text></el-col>
  119. <el-col :span="6">
  120. <el-text tag="p" v-if="dialogType === 1 || form.state > 0"
  121. >{{ form.sendOrg }}
  122. </el-text>
  123. <el-input
  124. v-else
  125. size="small"
  126. style="width: 150px; padding-bottom: 5px"
  127. v-model="form.sendOrg"
  128. />
  129. </el-col>
  130. <el-col :span="2"><el-text tag="p">工单编号:</el-text></el-col>
  131. <el-col :span="6">
  132. <el-text tag="p" v-if="dialogType === 1 || form.state > 0">{{
  133. form.workOrderCode
  134. }}</el-text>
  135. <el-select
  136. v-else
  137. size="small"
  138. v-model="form.workOrderCode"
  139. placeholder="请选择工单号"
  140. clearable
  141. style="width: 150px; padding-bottom: 5px"
  142. filterable
  143. @change="changeOrder"
  144. >
  145. <el-option
  146. v-for="option in orderList"
  147. :key="option.workOrderCode"
  148. :label="option.workOrderCode"
  149. :value="option.workOrderCode"
  150. />
  151. </el-select>
  152. </el-col>
  153. </el-row>
  154. <el-table
  155. class="print-table"
  156. v-loading="loading"
  157. :data="tableDataList"
  158. border
  159. >
  160. <el-table-column label="序号" type="index" width="60" />
  161. <el-table-column label="工作令号" prop="workCode">
  162. <template v-slot="{ row }">
  163. <el-text v-if="dialogType === 1 || form.state > 0">{{
  164. row.workCode
  165. }}</el-text>
  166. <el-input v-else v-model="row.workCode" />
  167. </template>
  168. </el-table-column>
  169. <el-table-column label="零、部(组)件图号" prop="materialCode" />
  170. <el-table-column label="名称" prop="materialName" />
  171. <el-table-column label="数量" align="num">
  172. <template v-slot="{ row }">
  173. <el-text v-if="dialogType === 1 || form.state > 0">{{
  174. row.num
  175. }}</el-text>
  176. <el-input v-else v-model="row.num" type="number" />
  177. </template>
  178. </el-table-column>
  179. <el-table-column
  180. label="实际接收"
  181. align="receiveNum"
  182. v-if="form.state === '6' || form.state === '8'"
  183. >
  184. <template v-slot="{ row }">
  185. <el-text>{{ row.receiveNum }}</el-text>
  186. </template>
  187. </el-table-column>
  188. <el-table-column label="备注" align="remark">
  189. <template v-slot="{ row }">
  190. <el-text v-if="dialogType === 1 || form.state > 0">{{
  191. row.remark
  192. }}</el-text>
  193. <el-input v-else v-model="row.remark" />
  194. </template>
  195. </el-table-column>
  196. <el-table-column
  197. label="操作"
  198. align="remark"
  199. v-if="dialogType !== 1 && form.state === '0'"
  200. >
  201. <template v-slot="{ row, index }">
  202. <el-button
  203. type="danger"
  204. @click="minusItem(row)"
  205. icon="el-icon-minus"
  206. style="margin-left: 15px; width: 25px; height: 25px"
  207. circle
  208. />
  209. </template>
  210. </el-table-column>
  211. </el-table>
  212. <el-row>
  213. <el-col :span="2"><el-text tag="p">领用人:</el-text></el-col>
  214. <el-col :span="4"
  215. ><el-text tag="p">{{ form.applyUser }}</el-text></el-col
  216. >
  217. <el-col :span="2"><el-text tag="p">审核: </el-text></el-col>
  218. <el-col :span="4"
  219. ><el-text tag="p">{{ form.auditUser }} </el-text></el-col
  220. >
  221. <!-- <el-col :span="2" ><el-text tag="p">会签:</el-text></el-col>
  222. <el-col :span="4" ><el-text tag="p" >{{form.countersignUser}}</el-text></el-col>-->
  223. <el-col :span="2"><el-text tag="p">批准:</el-text></el-col>
  224. <el-col :span="4"
  225. ><el-text tag="p">{{ form.approveUser }}</el-text></el-col
  226. >
  227. </el-row>
  228. </div>
  229. </el-card>
  230. <el-card style="width: 28%; margin-top: 30px" shadow="always">
  231. <template #header>
  232. <div class="card-header">
  233. <span>领用流程</span>
  234. </div>
  235. <el-timeline style="max-width: 500px">
  236. <el-timeline-item center type="success" placement="top">
  237. <el-card>
  238. <h4>申请</h4>
  239. <el-form
  240. ref="maintenanceInfoForm2"
  241. size="small"
  242. :model="form"
  243. label-width="auto"
  244. style="max-width: 400px"
  245. >
  246. <el-form-item label="领用人员" prop="auditUser">
  247. <el-text
  248. tag="p"
  249. v-if="dialogType === 1 || form.state > 0"
  250. >{{ form.applyUser }}</el-text
  251. >
  252. <el-select
  253. v-else
  254. size="small"
  255. filterable
  256. v-model="form.applyUser"
  257. placeholder="请选择领用人员"
  258. clearable
  259. >
  260. <el-option
  261. v-for="option in userList"
  262. :key="option.userName"
  263. :label="option.nickName"
  264. :value="option.userName"
  265. />
  266. </el-select>
  267. </el-form-item>
  268. <el-form-item label="审核人员" v-if="form.state === '0'">
  269. <el-text
  270. tag="p"
  271. v-if="dialogType === 1 || form.state > 0"
  272. >{{ form.auditUser }}</el-text
  273. >
  274. <el-select
  275. v-else
  276. size="small"
  277. filterable
  278. v-model="form.auditUser"
  279. placeholder="请选择审核人员"
  280. clearable
  281. >
  282. <el-option
  283. v-for="option in userList"
  284. :key="option.userName"
  285. :label="option.nickName"
  286. :value="option.userName"
  287. />
  288. </el-select>
  289. </el-form-item>
  290. <el-form-item label="申请时间" v-if="form.state > 0">
  291. <el-text tag="p">{{ form.created }}</el-text>
  292. </el-form-item>
  293. <el-form-item
  294. style="margin-left: 28%"
  295. v-if="dialogType !== 1"
  296. >
  297. <el-button
  298. type="primary"
  299. @click="saveForm(1)"
  300. v-if="form.state === '0'"
  301. >申 请</el-button
  302. >
  303. <el-button
  304. type="success"
  305. @click="saveForm(0)"
  306. v-if="form.state === '0'"
  307. >保 存</el-button
  308. >
  309. </el-form-item>
  310. </el-form>
  311. </el-card>
  312. </el-timeline-item>
  313. <el-timeline-item
  314. center
  315. placement="top"
  316. :type="form.state > 1 ? 'success' : 'primary'"
  317. >
  318. <el-card>
  319. <h4>审核</h4>
  320. <el-form
  321. v-if="form.state >= 1"
  322. size="small"
  323. :model="form"
  324. label-width="auto"
  325. style="max-width: 400px"
  326. >
  327. <el-form-item label="审核人员" prop="auditUser">
  328. <el-text tag="p">{{ form.auditUser }}</el-text>
  329. </el-form-item>
  330. <el-form-item label="处理结果">
  331. <el-text
  332. tag="p"
  333. v-if="dialogType === 1 || form.state !== '1'"
  334. >{{
  335. form.state === "1"
  336. ? "待审核"
  337. : form.auditState === 0
  338. ? "通过"
  339. : "未通过"
  340. }}</el-text
  341. >
  342. <el-text
  343. tag="p"
  344. v-else-if="form.auditUser !== username"
  345. >{{
  346. form.auditState
  347. ? form.auditState === 0
  348. ? "通过"
  349. : "未通过"
  350. : "待审核"
  351. }}</el-text
  352. >
  353. <el-radio-group v-else v-model="form.auditState">
  354. <el-radio :value="0">通过</el-radio>
  355. <el-radio :value="1">不通过</el-radio>
  356. </el-radio-group>
  357. </el-form-item>
  358. <el-form-item
  359. label="审批人员"
  360. v-if="
  361. dialogType !== 1 &&
  362. form.state === '1' &&
  363. form.auditUser === username
  364. "
  365. >
  366. <el-select
  367. size="small"
  368. filterable
  369. v-model="form.approveUser"
  370. placeholder="请选择审批人员"
  371. clearable
  372. >
  373. <el-option
  374. v-for="option in userList"
  375. :key="option.userName"
  376. :label="option.nickName"
  377. :value="option.userName"
  378. />
  379. </el-select>
  380. </el-form-item>
  381. <el-form-item
  382. label="审核时间"
  383. v-if="form.audit && form.audit.time"
  384. >
  385. <el-text tag="p">{{ form.audit.time }}</el-text>
  386. </el-form-item>
  387. <el-form-item style="margin-left: 35%">
  388. <el-button
  389. type="primary"
  390. @click="saveForm(2)"
  391. v-if="
  392. dialogType !== 1 &&
  393. form.state === '1' &&
  394. form.auditUser === username
  395. "
  396. >审 核</el-button
  397. >
  398. </el-form-item>
  399. </el-form>
  400. </el-card>
  401. </el-timeline-item>
  402. <!-- <el-timeline-item center placement="top" :type="form.state > 3 ? 'success' : 'primary'">
  403. <el-card>
  404. <h4>会签</h4>
  405. <el-form v-if="form.state >= 3" size="small" :model="form" label-width="auto" style="max-width: 400px">
  406. <el-form-item v-for="item of form.countersign" label="会签人员:">
  407. <el-text tag="p" >{{item.user}}&#45;&#45;</el-text>
  408. <el-text tag="p" v-if="dialogType === 1 || item.user !== username">{{item.state === -1 ? '未审核' : item.state === 0 ? '通过' : '未通过'}}</el-text>
  409. <el-text tag="p" v-else-if="item.state !== -1 && item.user === username">{{item.state === 0 ? '通过' : '未通过'}}</el-text>
  410. <el-radio-group v-model="form.countersignState" v-if="dialogType !== 1 && item.state === -1 && item.user === username">
  411. <el-radio :value=0>通过</el-radio>
  412. <el-radio :value=1>不通过</el-radio>
  413. </el-radio-group>
  414. </el-form-item>
  415. <el-form-item label="批准人员" v-if="dialogType !== 1 && form.countersignOk && form.state === '3'">
  416. <el-select
  417. size="small"
  418. v-model="form.approveUser"
  419. placeholder="请选择批准人员"
  420. clearable >
  421. <el-option
  422. v-for="option in userList"
  423. :key="option.userName"
  424. :label="option.nickName"
  425. :value="option.userName" />
  426. </el-select>
  427. </el-form-item>
  428. <el-form-item label="通过时间" v-if="form.countersignInfo && form.countersignInfo.time">
  429. <el-text tag="p" >{{form.countersignInfo.time}}</el-text>
  430. </el-form-item>
  431. <el-form-item style="margin-left: 35%">
  432. <el-button type="primary" v-if="dialogType !== 1 && form.state === '3' && form.countersignUser.includes(username) && form.countersignBtn" @click="saveForm(3)">审 核</el-button>
  433. </el-form-item>
  434. </el-form>
  435. </el-card>
  436. </el-timeline-item>-->
  437. <el-timeline-item
  438. center
  439. placement="top"
  440. :type="form.state > 5 ? 'success' : 'primary'"
  441. >
  442. <el-card>
  443. <h4>批准</h4>
  444. <el-form
  445. v-if="form.state >= 5"
  446. size="small"
  447. :model="form"
  448. label-width="auto"
  449. style="max-width: 400px"
  450. >
  451. <el-form-item label="审批人" v-if="form.state > 5">
  452. <el-text tag="p">{{ form.approve.user }}</el-text>
  453. </el-form-item>
  454. <el-form-item label="审批结果">
  455. <el-text
  456. tag="p"
  457. v-if="dialogType === 1 || form.state > 5"
  458. >{{
  459. form.state === "5"
  460. ? "待审批"
  461. : form.state > 5
  462. ? "通过"
  463. : "未通过"
  464. }}</el-text
  465. >
  466. <el-text tag="p" v-else-if="form.approveUser !== username"
  467. >待审批</el-text
  468. >
  469. <el-radio-group v-else v-model="form.approveState">
  470. <el-radio :value="0">通过</el-radio>
  471. <el-radio :value="1">不通过</el-radio>
  472. </el-radio-group>
  473. </el-form-item>
  474. <el-form-item label="审批时间" v-if="form.state > 5">
  475. <el-text tag="p">{{ form.approve.time }}</el-text>
  476. </el-form-item>
  477. <el-form-item style="margin-left: 35%">
  478. <el-button
  479. type="primary"
  480. @click="saveForm(4)"
  481. v-if="
  482. dialogType !== 1 &&
  483. form.state === '5' &&
  484. form.approveUser === username
  485. "
  486. >审 核</el-button
  487. >
  488. </el-form-item>
  489. </el-form>
  490. </el-card>
  491. </el-timeline-item>
  492. </el-timeline>
  493. </template>
  494. </el-card>
  495. </div>
  496. </el-dialog>
  497. </div>
  498. </template>
  499. <script setup>
  500. import { useUserStoreHook } from "@/store/index";
  501. import { ref, getCurrentInstance } from "vue";
  502. import { html2CanvasPrint } from "@/utils/common";
  503. import { useCrud } from "@/hooks/userCrud";
  504. import dictDataUtil from "@/common/configs/dictDataUtil";
  505. import {
  506. queryApplyInfoDetails,
  507. queryWorkOrderList,
  508. saveApplyInfoDetails,
  509. auditApplyInfoDetails,
  510. } from "@/api/order";
  511. import { getUserList } from "@/api/system/user";
  512. import { useCommonStoreHook } from "@/store";
  513. import ExportInfo from "./exportInfo.vue";
  514. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  515. const test = () => {
  516. isShowTable.value = true;
  517. tableType.value = tableType.value == 1 ? 2 : 1;
  518. };
  519. // 1.定义ref
  520. const toPrintRef = ref(null);
  521. // 传入一个url,后面不带/
  522. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  523. useCrud({
  524. src: "/api/v1/plan/requisition",
  525. });
  526. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  527. Methords; //增删改查
  528. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  529. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  530. const { username } = useUserStoreHook().user;
  531. const minusItem = (row) => {
  532. tableDataList.value = tableDataList.value.filter(
  533. (item) => item.id !== row.id
  534. );
  535. };
  536. const changeOrder = (val) => {
  537. queryApplyInfoDetails({ workOrderCode: val }).then((data) => {
  538. tableDataList.value = data.data;
  539. });
  540. };
  541. const excelRow = ref(null);
  542. const openDialog1 = (row) => {
  543. dialog1.visible = true;
  544. excelRow.value = row;
  545. };
  546. const saveForm = (type) => {
  547. let state = type;
  548. let step = null;
  549. let nextUsers = "";
  550. if (type === 1 || type === 0) {
  551. if (tableDataList.value.length === 0) {
  552. ElMessage.error("当前没有申请的物料信息");
  553. return;
  554. }
  555. for (let item of tableDataList.value) {
  556. if (!item.workCode) {
  557. ElMessage.error("工作令号不能为空");
  558. return;
  559. }
  560. if (!item.num || item.num <= 0) {
  561. ElMessage.error("物料数量不正确");
  562. return;
  563. }
  564. }
  565. if (!form.value.applyUser) {
  566. ElMessage.error("领用人员不能为空");
  567. return;
  568. }
  569. if (!form.value.auditUser) {
  570. ElMessage.error("审核人员不能为空");
  571. return;
  572. }
  573. const params = {
  574. ...form.value,
  575. state: state,
  576. details: tableDataList.value,
  577. };
  578. saveApplyInfoDetails(params).then((data) => {
  579. if (data.code === "200") {
  580. ElMessage.success(data.msg);
  581. dialog.visible = false;
  582. dataList();
  583. } else {
  584. ElMessage.error(data.msg);
  585. }
  586. });
  587. return;
  588. }
  589. step = "audit";
  590. if (type === 2) {
  591. if (form.value.auditState != undefined) {
  592. if (form.value.auditState === 0 && !form.value.approveUser) {
  593. ElMessage.error("审批人员不能为空");
  594. return;
  595. }
  596. } else {
  597. if (!form.value.auditState) {
  598. ElMessage.error("请选择处理结果");
  599. return;
  600. }
  601. }
  602. nextUsers = form.value.approveUser;
  603. state = form.value.auditState;
  604. }
  605. /*if(type === 3){
  606. step = "countersign";
  607. if(!form.value.approveUser && form.value.countersignOk){
  608. ElMessage.error("请选择审批人员")
  609. return;
  610. }
  611. if(form.value.countersignState === undefined){
  612. ElMessage.error("请选择处理结果")
  613. return;
  614. }
  615. nextUsers = form.value.approveUser
  616. state = form.value.countersignState
  617. }*/
  618. if (type === 4) {
  619. step = "approve";
  620. if (form.value.approveState === undefined) {
  621. ElMessage.error("请选择处理结果");
  622. return;
  623. }
  624. state = form.value.approveState;
  625. }
  626. const params = {
  627. id: form.value.id,
  628. state: state,
  629. currentStep: step,
  630. nextUser: nextUsers,
  631. };
  632. auditApplyInfoDetails(params).then((data) => {
  633. if (data.code === "200") {
  634. ElMessage.success(data.msg);
  635. dialog.visible = false;
  636. dataList();
  637. } else {
  638. ElMessage.error(data.msg);
  639. }
  640. });
  641. };
  642. const loading = ref(false);
  643. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  644. const userList = ref([]);
  645. const orderList = ref([]);
  646. const dialogType = ref(false);
  647. const dialog = reactive({
  648. title: "领用单",
  649. visible: false,
  650. });
  651. const dialog1 = reactive({
  652. title: "物料信息配置(请使用谷歌浏览器实现)",
  653. visible: false,
  654. });
  655. const tableDataList = ref([]);
  656. const openDialog = (type, row) => {
  657. dialogType.value = type;
  658. tableDataList.value = [];
  659. form.value = {};
  660. form.value.sendOrg = "周转库";
  661. form.value.applyOrg = "制造中心";
  662. form.value.state = "0";
  663. if (type !== 0) {
  664. queryApplyInfoDetails({ applyCode: row.applyCode }).then((data) => {
  665. tableDataList.value = data.data;
  666. });
  667. form.value = row;
  668. }
  669. form.value.countersign = [];
  670. if (row && row.flowInfo) {
  671. let json = JSON.parse(row.flowInfo);
  672. let auditInfo = json.audit;
  673. if (auditInfo) {
  674. form.value.audit = auditInfo.info;
  675. form.value.auditState = form.value.audit.state;
  676. }
  677. if (row.countersignUser) {
  678. form.value.countersignUsers = row.countersignUser.split(",");
  679. }
  680. form.value.countersignBtn = false;
  681. if (json.countersign) {
  682. form.value.countersign = json.countersign.list;
  683. form.value.countersignInfo = json.countersign.info;
  684. //当断当前是否最后一个
  685. let isOk = true;
  686. for (let obj of form.value.countersign) {
  687. if (obj.state === -1 && obj.user === username) {
  688. form.value.countersignBtn = true;
  689. }
  690. if (obj.user !== username && obj.state === -1) {
  691. isOk = false;
  692. }
  693. }
  694. form.value.countersignOk = isOk;
  695. }
  696. if (json.approve) {
  697. form.value.approve = json.approve.info;
  698. }
  699. form.value.approveUser = row.approveUser;
  700. }
  701. dialog.visible = true;
  702. getUserList({}).then((data) => {
  703. userList.value = data.data;
  704. });
  705. };
  706. const printPage = () => {
  707. html2CanvasPrint(toPrintRef.value);
  708. };
  709. // 设置表格列或者其他自定义的option
  710. option.value = Object.assign(option.value, {
  711. delBtn: false,
  712. addBtn: false,
  713. editBtn: false,
  714. viewBtn: false,
  715. selection: true,
  716. column: [
  717. {
  718. label: "领用单号",
  719. prop: "applyCode",
  720. search: true,
  721. width: 150,
  722. overHidden: true,
  723. },
  724. {
  725. label: "工单单号",
  726. prop: "workOrderCode",
  727. search: true,
  728. width: 150,
  729. overHidden: true,
  730. },
  731. {
  732. label: "订单编号",
  733. prop: "orderCode",
  734. search: true,
  735. width: 150,
  736. overHidden: true,
  737. },
  738. {
  739. label: "领用单位",
  740. prop: "applyOrg",
  741. width: 150,
  742. overHidden: true,
  743. },
  744. {
  745. label: "发件单位",
  746. prop: "sendOrg",
  747. width: 150,
  748. overHidden: true,
  749. },
  750. {
  751. label: "领用人员",
  752. prop: "applyUser",
  753. width: 150,
  754. overHidden: true,
  755. search: true,
  756. },
  757. {
  758. label: "审核人员",
  759. prop: "auditUser",
  760. width: 150,
  761. overHidden: true,
  762. },
  763. /* {
  764. label: "会签人员",
  765. width: 150,
  766. overHidden: true,
  767. prop: "countersignUser",
  768. },*/
  769. {
  770. label: "审批人员",
  771. width: 150,
  772. overHidden: true,
  773. prop: "approveUser",
  774. },
  775. {
  776. label: "状态",
  777. prop: "state",
  778. width: 150,
  779. type: "select",
  780. dicUrl:
  781. dictDataUtil.request_url + dictDataUtil.TYPE_CODE.requisition_state,
  782. props: {
  783. label: "dictLabel", // 下拉菜单显示的字段
  784. value: "dictValue", // 下拉菜单值的字
  785. },
  786. },
  787. {
  788. label: "创建时间",
  789. prop: "created",
  790. width: 160,
  791. display: false,
  792. },
  793. ],
  794. });
  795. onMounted(() => {
  796. let url = window.location.href;
  797. if (url.includes("workOrderCode")) {
  798. search.value.workOrderCode = url.substring(
  799. url.indexOf("workOrderCode") + 14
  800. );
  801. }
  802. queryWorkOrderList({}).then((data) => {
  803. if (!data.data) {
  804. ElMessage.warning("请维护物料BOM");
  805. }
  806. orderList.value = data.data;
  807. });
  808. // console.log("crudRef", crudRef)
  809. dataList();
  810. });
  811. </script>
  812. <style scoped>
  813. :deep(.card-container .el-form-item) {
  814. display: flex;
  815. justify-content: center;
  816. align-items: center;
  817. height: 15px; /* 根据需要调整高度 */
  818. }
  819. :deep(.el-timeline-item) {
  820. padding-bottom: 0px;
  821. position: relative;
  822. }
  823. .card-container {
  824. display: flex;
  825. justify-content: space-around;
  826. }
  827. </style>