index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  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. @tree-load="treeLoad"
  14. @search-change="searchChange"
  15. @search-reset="resetChange"
  16. @size-change="dataList"
  17. @current-change="dataList"
  18. @selection-change="selectionChange"
  19. :span-method="spanMethod"
  20. >
  21. <template #orderCode="{ row }">
  22. <el-text v-if="row.orderCode">{{ row.orderCode }}</el-text>
  23. <div
  24. style="width: 100%; height: 100%; display: flex"
  25. v-if="!row.orderCode && row.operationDetails"
  26. >
  27. <div
  28. style="width: 120px; height: 100%"
  29. v-for="item in row.operationDetails"
  30. >
  31. <el-progress
  32. :text-inside="true"
  33. :stroke-width="35"
  34. :font-color="'#ff0000'"
  35. :percentage="(item.completeNum / row.workOrderNum) * 100"
  36. status="success"
  37. >{{ item.operationName }}(完成{{ item.completeNum }})
  38. </el-progress>
  39. </div>
  40. </div>
  41. <el-tag
  42. v-if="row.workOrderCode === '-' && row.stockNum > 0"
  43. type="primary"
  44. >库存数量:{{ row.stockNum }}</el-tag
  45. >
  46. <el-tag
  47. v-if="row.workOrderCode === '-' && row.stockNum === '0'"
  48. type="danger"
  49. >库存数量:{{ row.stockNum }}</el-tag
  50. >
  51. <el-tag v-if="row.workOrderCode === '-'" type="danger"
  52. >锁定数量:{{ row.freezeNum }}</el-tag
  53. >
  54. </template>
  55. <template #menu="{ size, row, index }">
  56. <el-button type="primary" link size="small" @click="handleEdit(row, 0)"
  57. ><i-ep-edit />{{
  58. row.materialState === "0"
  59. ? "发起准备"
  60. : row.materialState === "1"
  61. ? "编辑准备"
  62. : "详情"
  63. }}
  64. </el-button>
  65. <el-button
  66. type="primary"
  67. link
  68. v-if="row.materialState !== '2' && row.isFeedback === '0'"
  69. size="small"
  70. @click="feedBack(row, 0)"
  71. ><i-ep-select />缺料反馈
  72. </el-button>
  73. <!-- <el-button
  74. type="primary"
  75. link
  76. v-if="row.deviceState === '0' || row.bom === '-' || row.craftFile === '-' || row.materialState === '0'"
  77. size="small"
  78. @click="handleRefresh(row.workOrderCode)"
  79. ><i-ep-edit />刷新
  80. </el-button>-->
  81. </template>
  82. </avue-crud>
  83. <el-dialog
  84. v-model="dialog.visible"
  85. :title="dialog.title"
  86. width="80%"
  87. @close="dialog.visible = false"
  88. >
  89. <work-order-page queryType="1" @orderInfo="orderInfo" />
  90. </el-dialog>
  91. <el-dialog
  92. v-model="dialog1.visible"
  93. title="生产准备"
  94. width="80%"
  95. @close="dialog1.visible = false"
  96. >
  97. <el-form ref="dataFormRef" :model="form" label-width="90px">
  98. <el-row :gutter="24">
  99. <el-col :span="8">
  100. <el-form-item label="工单编码" prop="workOrderCode">
  101. <el-input v-model="form.workOrderCode" disabled />
  102. </el-form-item>
  103. </el-col>
  104. <el-col :span="8">
  105. <el-form-item label="订单编码" prop="orderCode">
  106. <el-input v-model="form.orderCode" disabled />
  107. </el-form-item>
  108. </el-col>
  109. <el-col :span="8">
  110. <el-form-item label="订单名称" prop="orderName">
  111. <el-input v-model="form.orderName" disabled />
  112. </el-form-item>
  113. </el-col>
  114. </el-row>
  115. <el-row :gutter="24">
  116. <el-col :span="8">
  117. <el-form-item label="物料编码" prop="materialCode">
  118. <el-input v-model="form.materialCode" disabled />
  119. </el-form-item>
  120. </el-col>
  121. <el-col :span="8">
  122. <el-form-item label="物料名称" prop="materialName">
  123. <el-input v-model="form.materialName" disabled />
  124. </el-form-item>
  125. </el-col>
  126. <el-col :span="8">
  127. <el-form-item label="物料型号" prop="materialModel">
  128. <el-input v-model="form.materialModel" disabled />
  129. </el-form-item>
  130. </el-col>
  131. </el-row>
  132. <el-row :gutter="24">
  133. <el-col :span="24">
  134. <el-form-item label="工单数量" prop="workOrderNum">
  135. <el-input v-model="form.workOrderNum" disabled />
  136. </el-form-item>
  137. </el-col>
  138. </el-row>
  139. <el-row :gutter="8" v-for="(item, index) in templates">
  140. <el-col :span="8">
  141. <el-form-item :label="templates[index].str">
  142. <el-switch
  143. @change="changeItem(templates[index])"
  144. class="mb-2"
  145. v-model="templates[index].state"
  146. style="
  147. --el-switch-on-color: #13ce66;
  148. --el-switch-off-color: #ff4949;
  149. "
  150. active-text="完成"
  151. inactive-text="未完成"
  152. :disabled="
  153. form.materialState === '0' ||
  154. (form.materialState === '1' &&
  155. userStore.user.username !== templates[index].userName) ||
  156. form.materialState === '2'
  157. "
  158. active-value="1"
  159. inactive-value="0"
  160. />
  161. </el-form-item>
  162. </el-col>
  163. <el-col :span="10">
  164. <el-form-item label="准备人员">
  165. <el-select
  166. v-model="templates[index].userName"
  167. placeholder="准备人员"
  168. size="large"
  169. :disabled="
  170. form.materialState === '1' || form.materialState === '2'
  171. "
  172. filterable
  173. style="width: 240px"
  174. >
  175. <el-option
  176. v-for="item in userList"
  177. :key="item.userName"
  178. :label="item.nickName"
  179. :value="item.userName"
  180. />
  181. </el-select>
  182. </el-form-item>
  183. </el-col>
  184. <el-col :span="6">
  185. <el-form-item label="完成时间" v-if="templates[index].time">
  186. {{ templates[index].time }}
  187. </el-form-item>
  188. </el-col>
  189. </el-row>
  190. </el-form>
  191. <template #footer>
  192. <div class="dialog-footer">
  193. <el-button
  194. type="primary"
  195. v-if="form.materialState !== '2'"
  196. @click="onSubmit"
  197. >{{ form.materialState === "0" ? "发起准备" : "提交" }}</el-button
  198. >
  199. <el-button @click="dialog1.visible = false">取 消</el-button>
  200. </div>
  201. </template>
  202. </el-dialog>
  203. <el-dialog
  204. v-model="dialog2.visible"
  205. :title="dialog2.title"
  206. width="80%"
  207. @close="dialog2.visible = false"
  208. >
  209. <el-form ref="formRef" :model="form" label-width="90px">
  210. <el-row :gutter="24">
  211. <el-col :span="8">
  212. <el-form-item label="工单编码" prop="workOrderCode">
  213. <el-input v-model="form.workOrderCode" disabled />
  214. </el-form-item>
  215. </el-col>
  216. <el-col :span="8">
  217. <el-form-item label="订单编码" prop="orderCode">
  218. <el-input v-model="form.orderCode" disabled />
  219. </el-form-item>
  220. </el-col>
  221. <el-col :span="8">
  222. <el-form-item label="订单名称" prop="orderName">
  223. <el-input v-model="form.orderName" disabled />
  224. </el-form-item>
  225. </el-col>
  226. </el-row>
  227. <el-row :gutter="24">
  228. <el-col :span="8">
  229. <el-form-item label="物料编码" prop="materialCode">
  230. <el-input v-model="form.materialCode" disabled />
  231. </el-form-item>
  232. </el-col>
  233. <el-col :span="8">
  234. <el-form-item label="物料名称" prop="materialName">
  235. <el-input v-model="form.materialName" disabled />
  236. </el-form-item>
  237. </el-col>
  238. <el-col :span="8">
  239. <el-form-item label="物料型号" prop="materialModel">
  240. <el-input v-model="form.materialModel" disabled />
  241. </el-form-item>
  242. </el-col>
  243. </el-row>
  244. <el-row :gutter="24">
  245. <el-col :span="24">
  246. <el-form-item label="工单数量" prop="workOrderNum">
  247. <el-input v-model="form.workOrderNum" disabled />
  248. </el-form-item>
  249. </el-col>
  250. </el-row>
  251. <el-row :gutter="24">
  252. <el-col :span="12">
  253. <el-form-item label="负责人" prop="manager">
  254. <el-select v-model="form.manager" placeholder="负责人" filterable>
  255. <el-option
  256. v-for="item in userList"
  257. :key="item.userName"
  258. :label="item.nickName"
  259. :value="item.userName"
  260. />
  261. </el-select>
  262. </el-form-item>
  263. </el-col>
  264. <el-col :span="12">
  265. <el-form-item label="报警接收人" prop="alarmManager">
  266. <el-select
  267. v-model="form.alarmManager"
  268. placeholder="报警接收人"
  269. filterable
  270. >
  271. <el-option
  272. v-for="item in userList"
  273. :key="item.userName"
  274. :label="item.nickName"
  275. :value="item.userName"
  276. />
  277. </el-select>
  278. </el-form-item>
  279. </el-col>
  280. </el-row>
  281. <el-table :data="dataTable" :gutter="24">
  282. <el-table-column prop="materialCode" label="物料编码" width="180" />
  283. <el-table-column prop="materialName" label="物料名称" width="180" />
  284. <el-table-column prop="materialModel" label="规格" width="180" />
  285. <el-table-column prop="materialNum" label="数量" width="180">
  286. <template #default="{ scope, row }">
  287. <el-input-number
  288. v-model="row.materialNum"
  289. :precision="2"
  290. min="0.01"
  291. controls-position="right"
  292. ></el-input-number>
  293. </template>
  294. </el-table-column>
  295. <el-table-column fixed="right" label="操作">
  296. <template #default="scope">
  297. <el-button
  298. link
  299. type="danger"
  300. size="small"
  301. @click="delRow(scope.$index)"
  302. >
  303. 删除
  304. </el-button>
  305. </template>
  306. </el-table-column>
  307. </el-table>
  308. </el-form>
  309. <template #footer>
  310. <div class="dialog-footer">
  311. <el-button type="primary" @click="submitData">确 定</el-button>
  312. <el-button @click="dialog2.visible = false">取 消</el-button>
  313. </div>
  314. </template>
  315. </el-dialog>
  316. </div>
  317. </template>
  318. <script setup>
  319. import { ref, getCurrentInstance } from "vue";
  320. import { useCrud } from "@/hooks/userCrud";
  321. import {
  322. addShortage,
  323. bomMaterial,
  324. prepareCheckInfo,
  325. refreshPrepareCheckInfo,
  326. } from "@/api/order";
  327. import { queryChildrenInfo } from "@/api/process";
  328. import { useCommonStoreHook,useDictionaryStore, useUserStore } from "@/store";
  329. import { queryDictDataByType } from "@/api/system/dict";
  330. import { getUserList } from "@/api/system/user";
  331. import { ElMessage } from "element-plus";
  332. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  333. const router = useRouter();
  334. const test = () => {
  335. isShowTable.value = true;
  336. tableType.value = tableType.value == 1 ? 2 : 1;
  337. };
  338. const { dicts } = useDictionaryStore();
  339. const userStore = useUserStore();
  340. const dataTable = ref([]);
  341. const feedBack = (row, index) => {
  342. dialog2.visible = true;
  343. form.value = row;
  344. queryUserList();
  345. bomMaterial(row.workOrderCode).then((data) => {
  346. dataTable.value = data.data;
  347. });
  348. };
  349. const dialog2 = reactive({
  350. title: "缺料反馈",
  351. visible: false,
  352. });
  353. const submitData = () => {
  354. form.value.itemList = dataTable.value;
  355. form.value.prepareId = form.value.id;
  356. addShortage(form.value).then((data) => {
  357. if (data.code === "200") {
  358. dialog2.visible = false;
  359. dataList();
  360. ElMessage.success("操作成功!");
  361. } else {
  362. ElMessage.error(data.message);
  363. }
  364. });
  365. };
  366. const userList = ref([]);
  367. const templates = ref([]);
  368. // 传入一个url,后面不带/
  369. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  370. useCrud({
  371. src: "/api/v1/plan/prepare",
  372. });
  373. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  374. Methords; //增删改查
  375. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  376. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  377. const changeItem = (item) => {
  378. let time = "";
  379. if (item.state === "1") {
  380. let dateIn = new Date();
  381. let y = dateIn.getFullYear();
  382. let m = dateIn.getMonth() + 1;
  383. let d = dateIn.getDate();
  384. let h = dateIn.getHours();
  385. let mm = dateIn.getMinutes();
  386. let s = dateIn.getSeconds();
  387. time =
  388. y +
  389. (m < 10 ? "-0" : "-") +
  390. m +
  391. (d < 10 ? "-0" : "-") +
  392. d +
  393. " " +
  394. (h < 10 ? "0" : "") +
  395. h +
  396. (mm < 10 ? ":0" : ":") +
  397. mm +
  398. (s < 10 ? ":0" : ":") +
  399. s;
  400. }
  401. item.time = time;
  402. };
  403. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  404. const dialog = reactive({
  405. title: "订单选择",
  406. visible: false,
  407. });
  408. const dialog1 = reactive({
  409. title: "生产准备",
  410. visible: false,
  411. });
  412. const onSubmit = (done, loading) => {
  413. let has = false;
  414. for (let i = 0; i < templates.value.length; i++) {
  415. if (!templates.value[i].userName) {
  416. has = true;
  417. break;
  418. }
  419. }
  420. if (has) {
  421. ElMessage.error("请将所有准备人员进行选择");
  422. return;
  423. }
  424. form.value.materialStr = JSON.stringify(templates.value);
  425. if (form.value.materialState === "0") {
  426. form.value.materialState = "1";
  427. }
  428. updateRow(done, loading);
  429. dialog1.visible = false;
  430. };
  431. const merginState = ref(false);
  432. const spanMethod = ({ row, column, rowIndex, columnIndex }) => {
  433. if (row.hasParent) {
  434. if (columnIndex === 6) {
  435. merginState.value = true;
  436. return [1, 11];
  437. } else if (columnIndex > 6 && merginState) {
  438. return [0, 0];
  439. }
  440. } else {
  441. merginState.value = false;
  442. }
  443. /*if (rowIndex % 2 === 0) {
  444. if (columnIndex === 0) {
  445. return [1, 2]
  446. } else if (columnIndex === 1) {
  447. return [0, 0]
  448. }
  449. }*/
  450. };
  451. const checkInfo = (code) => {
  452. prepareCheckInfo(code).then((data) => {
  453. form.value.deviceStr = data.data.deviceStr;
  454. form.value.deviceState = data.data.deviceState;
  455. form.value.materialState = data.data.materialState;
  456. form.value.materialStr = data.data.materialStr;
  457. });
  458. };
  459. const treeLoad = (tree, treeNode, resolve) => {
  460. queryChildrenInfo(tree.workOrderCode).then((data) => {
  461. resolve(data.data);
  462. });
  463. };
  464. const handleEdit = (row, index) => {
  465. dialog1.visible = true;
  466. form.value = row;
  467. templates.value = [];
  468. templates.value = JSON.parse(row.materialStr);
  469. };
  470. const handleRefresh = (code) => {
  471. refreshPrepareCheckInfo(code).then((data) => {
  472. if (data.code === "200") {
  473. ElMessage.success("刷新成功");
  474. dataList();
  475. } else {
  476. ElMessage.error(data.msg);
  477. }
  478. });
  479. };
  480. const orderInfo = (value) => {
  481. form.value.workOrderCode = value.workOrderCode;
  482. form.value.orderCode = value.orderCode;
  483. form.value.orderName = value.orderName;
  484. form.value.materialCode = value.materialCode;
  485. form.value.materialName = value.materialName;
  486. form.value.materialModel = value.materialModel;
  487. dialog.visible = false;
  488. };
  489. // 设置表格列或者其他自定义的option
  490. option.value = Object.assign(option.value, {
  491. delBtn: false,
  492. selection: false,
  493. editBtn: false,
  494. tree: true,
  495. viewBtn: false,
  496. lazy: true,
  497. menuWidth: 180,
  498. rowKey: "workOrderCode",
  499. defaultExpandedKeys: [],
  500. addBtn: false,
  501. dialogWidth: "45%", // 设置编辑弹窗的宽度为50%
  502. column: [
  503. {
  504. label: "工单号",
  505. prop: "workOrderCode",
  506. search: true,
  507. minWidth: 120,
  508. editDisabled: true,
  509. rules: [
  510. {
  511. required: true,
  512. message: "工单号不能为空",
  513. trigger: "trigger",
  514. },
  515. ] /*,
  516. click: ({ value, column }) => {
  517. if (column.boxType) {
  518. dialog.visible = true;
  519. }
  520. },
  521. change: ({ value, column }) => {
  522. if (value) {
  523. checkInfo(value);
  524. }
  525. },*/,
  526. },
  527. {
  528. label: "物料编码",
  529. prop: "materialCode",
  530. search: true,
  531. width: 130,
  532. overHidden: true,
  533. disabled: true,
  534. rules: [
  535. {
  536. required: true,
  537. message: "产品编码不能为空",
  538. trigger: "trigger",
  539. },
  540. ],
  541. },
  542. {
  543. label: "产品名称",
  544. prop: "materialName",
  545. disabled: true,
  546. width: 140,
  547. overHidden: true,
  548. search: true,
  549. rules: [
  550. {
  551. required: true,
  552. message: "产品名称不能为空",
  553. trigger: "trigger",
  554. },
  555. ],
  556. },
  557. {
  558. label: "产品规格",
  559. prop: "materialModel",
  560. disabled: true,
  561. search: true,
  562. width: 140,
  563. overHidden: true,
  564. rules: [
  565. {
  566. required: true,
  567. message: "产品规格不能为空",
  568. trigger: "trigger",
  569. },
  570. ],
  571. },
  572. {
  573. label: "数量",
  574. prop: "workOrderNum",
  575. disabled: true,
  576. width: 80,
  577. overHidden: true,
  578. },
  579. {
  580. label: "订单编号",
  581. prop: "orderCode",
  582. search: true,
  583. width: 130,
  584. overHidden: true,
  585. disabled: true,
  586. rules: [
  587. {
  588. required: true,
  589. message: "订单编号不能为空",
  590. trigger: "trigger",
  591. },
  592. ],
  593. },
  594. {
  595. label: "计划名称",
  596. prop: "orderName",
  597. search: true,
  598. disabled: true,
  599. width: 140,
  600. overHidden: true,
  601. rules: [
  602. {
  603. required: true,
  604. message: "计划名称不能为空",
  605. trigger: "trigger",
  606. },
  607. ],
  608. },
  609. /*{
  610. label: "文件资料",
  611. width: 350,
  612. overHidden: true,
  613. prop: "craftFile",
  614. addDisplay: false,
  615. viewDisplay: false,
  616. editDisplay: false,
  617. html: true,
  618. formatter: (val) => {
  619. if (val.craftFile !== '-') {
  620. return '<b class="el-tag el-tag--success el-tag--light">'+val.craftFile+'</b>';
  621. }
  622. return '<b class="el-tag el-tag--danger el-tag--light">-</b>';
  623. },
  624. },
  625. {
  626. label: "工艺BOM",
  627. width: 90,
  628. overHidden: true,
  629. prop: "bom",
  630. viewDisplay: false,
  631. addDisplay: false,
  632. editDisplay: false,
  633. html: true,
  634. formatter: (val) => {
  635. if (val.bom !== '-') {
  636. return '<b class="el-tag el-tag--success el-tag--light">'+val.bom+'</b>';
  637. }
  638. return '<b class="el-tag el-tag--danger el-tag--light">-</b>';
  639. },
  640. },
  641. {
  642. label: "工艺路线",
  643. width: 160,
  644. overHidden: true,
  645. viewDisplay: false,
  646. addDisplay: false,
  647. editDisplay: false,
  648. prop: "routeId",
  649. html: true,
  650. formatter: (val) => {
  651. if (val.routeId !== '-') {
  652. return '<b class="el-tag el-tag--success el-tag--light">'+val.routeId+'</b>';
  653. }
  654. return '<b class="el-tag el-tag--danger el-tag--light">-</b>';
  655. },
  656. },
  657. {
  658. label: "设备状况",
  659. prop: "deviceStr",
  660. disabled: true,
  661. width: 200,
  662. overHidden: true,
  663. html: true,
  664. formatter: (val) => {
  665. if (val.deviceState === '1') {
  666. return '<b class="el-tag el-tag--success el-tag--light">已齐套</b>';
  667. }
  668. return '<b class="el-tag el-tag--danger el-tag--light">'+val.deviceStr+'</b>';
  669. },
  670. },
  671. {
  672. label: "物料状态",
  673. prop: 'materialStr',
  674. disabled: true,
  675. width: 200,
  676. overHidden: true,
  677. span: 24,
  678. html: true,
  679. formatter: (val) => {
  680. if (val.materialState === '1') {
  681. return '<b class="el-tag el-tag--success el-tag--light">已齐套</b>';
  682. }
  683. return '<b class="el-tag el-tag--danger el-tag--light">'+val.materialStr+'</b>';
  684. },
  685. },*/
  686. ],
  687. });
  688. const queryUserList = () => {
  689. getUserList({}).then((data) => {
  690. userList.value = data.data;
  691. });
  692. };
  693. const delRow = (index) => {
  694. dataTable.value.splice(index, 1);
  695. };
  696. onMounted(() => {
  697. form.value.routeId = "1";
  698. form.value.materialState = 1;
  699. let url = window.location.href;
  700. if (url.includes("workOrderCode")) {
  701. search.value.workOrderCode = url.substring(
  702. url.indexOf("workOrderCode") + 14
  703. );
  704. }
  705. queryDictDataByType("prepare_template").then((res) => {
  706. if (res.data) {
  707. //templates.value = res.data
  708. res.data.forEach((item) => {
  709. option.value.column.push({
  710. label: item.dictLabel,
  711. prop: item.dictValue,
  712. width: 100,
  713. slot: true,
  714. display: false,
  715. html: true,
  716. formatter: (val) => {
  717. let state = "-1";
  718. if (val.materialStr) {
  719. let list = JSON.parse(val.materialStr);
  720. let obj = list.find((option) => option.name === item.dictValue);
  721. if (obj) {
  722. state = obj.state;
  723. }
  724. }
  725. if (state === "1") {
  726. return '<b class="el-tag el-tag--success el-tag--light">已完成</b>';
  727. } else if (state === "0") {
  728. return '<b class="el-tag el-tag--danger el-tag--light">未完成</b>';
  729. }
  730. return '<b class="el-tag el-tag--warrning el-tag--light">未配置</b>';
  731. },
  732. });
  733. });
  734. }
  735. option.value.column.push({
  736. label: "创建时间",
  737. prop: "created",
  738. width: 200,
  739. display: false,
  740. });
  741. option.value.column.push({
  742. label: "创建人",
  743. width: 200,
  744. type: "select",
  745. dicData: dicts.user_name_list,
  746. props: {"label": "dictLabel","value":"dictValue"},
  747. prop: "creator",
  748. display: false,
  749. });
  750. });
  751. queryUserList();
  752. dataList();
  753. });
  754. </script>
  755. <style scoped>
  756. :deep(.el-progress-bar__innerText) {
  757. color: #737674;
  758. display: inline-block;
  759. font-size: 12px;
  760. margin: 0 5px;
  761. vertical-align: middle;
  762. }
  763. </style>