index.vue 27 KB

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