workReport.vue 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060
  1. <template>
  2. <div class="index_box">
  3. <el-drawer
  4. title=""
  5. :visible.sync="drawer"
  6. :before-close="handleClose"
  7. :custom-class="isFullscreen ? 'not-fullscreen' : 'is-fullscreen'"
  8. :with-header="false"
  9. :append-to-body="true"
  10. >
  11. <div>
  12. <div>
  13. <div class="seek-list" style="background-color: #157a2c">
  14. <!-- <div>
  15. <el-input
  16. style="width: 180px; margin-right: 5px"
  17. clearable
  18. v-model="keyWord"
  19. placeholder="请输入关键字"
  20. @clear="handleSearch"
  21. />
  22. <el-button
  23. size="mini"
  24. type="primary"
  25. style="margin: 0 5px"
  26. @click="handleSearch"
  27. >查询</el-button
  28. >
  29. <template>
  30. <el-popover
  31. placement="top-start"
  32. width="200"
  33. trigger="hover"
  34. content="支持工单编码,产品编码,产品名称,产品规格,牌号,型号,批次号查询。"
  35. >
  36. <i
  37. class="el-icon-question"
  38. slot="reference"
  39. style="color: #40a9ff; font-size: 14px"
  40. ></i> </el-popover
  41. ></template>
  42. </div> -->
  43. <div
  44. style="
  45. width: 100%;
  46. color: #fff;
  47. display: flex;
  48. justify-content: space-between;
  49. "
  50. >
  51. <div>
  52. <b style="margin-right: 50px; font-size: 14px"
  53. >当前工序:{{ title }}</b
  54. >
  55. <b style="font-size: 14px">下道工序:{{ title1 }}</b>
  56. </div>
  57. <b style="font-weight: blod; font-size: 14px">
  58. 操作员:{{ info.name }}
  59. </b>
  60. <div class="rx-ec">
  61. <el-button
  62. icon="el-icon-full-screen"
  63. type="text"
  64. style="color: #fff; font-size: 14px"
  65. @click="handleFull"
  66. >{{ isFullscreen ? '全屏' : '缩小' }}</el-button
  67. >
  68. <el-button
  69. icon="el-icon-circle-close"
  70. type="text"
  71. style="color: #fff; font-size: 14px"
  72. @click="handleClose"
  73. >关闭</el-button
  74. >
  75. </div>
  76. </div>
  77. </div>
  78. <div class="drawer_content">
  79. <div class="taskTitle"
  80. >工艺路线:{{ workOrderInfo.produceRoutingName }}</div
  81. >
  82. <el-steps :active="activeIndex" space="20px" align-center>
  83. <el-step
  84. v-for="(item, index) in routeList"
  85. :key="index"
  86. :title="item.taskTypeName"
  87. @click.native="handIdx(index, item)"
  88. :description="desIndex == index ? '此处' : ''"
  89. :class="desIndex == index ? 'active' : ''"
  90. ></el-step>
  91. </el-steps>
  92. </div>
  93. <ele-split-layout
  94. space="0px"
  95. width="26%"
  96. :resizable="true"
  97. :min-size="200"
  98. :max-size="-200"
  99. :left-style="{
  100. overflow: 'hidden',
  101. width: '100%'
  102. }"
  103. :right-style="{ overflow: 'hidden' }"
  104. :responsive="false"
  105. style="height: calc(100vh - 230px)"
  106. >
  107. <!-- 左侧 工单列表 -->
  108. <div class="left_main">
  109. <div class="top">
  110. <Info :workOrderInfo="workOrderInfo"></Info>
  111. </div>
  112. </div>
  113. <!-- //详细信息 -->
  114. <template v-slot:content>
  115. <div class="right_main">
  116. <!-- 领料 -->
  117. <!-- <div v-if="operationType == 'pick'"> -->
  118. <div v-if="operationType == 'pick'">
  119. <pickDetails
  120. ref="pickListRef"
  121. :workTaskId="workTaskId"
  122. :taskId="taskObj.id"
  123. @pickAdd="pickAdd"
  124. ></pickDetails>
  125. </div>
  126. <div v-if="operationType == 'feed'">
  127. <!-- 投料 -->
  128. <feeding
  129. :workListIds="workListIds"
  130. :feedNeedEquipment="feedNeedEquipment"
  131. @feedSuccess="feedSuccess"
  132. ></feeding>
  133. </div>
  134. <div v-if="operationType == 'job'">
  135. <!-- // 报工列表 入库 -->
  136. <warehousing
  137. v-if="taskObj.id == -1"
  138. :workListIds="workListIds"
  139. ref="wareRef"
  140. @warehouseSuccess="warehouseSuccess"
  141. ></warehousing>
  142. <!-- // 设备 入库 -->
  143. <!-- 普通报工 -->
  144. <!-- <jobBooking
  145. v-else
  146. :workListIds="workListIds"
  147. ref="jobRef"
  148. :reportNeedFeed="reportNeedFeed"
  149. ></jobBooking> -->
  150. <jobBooking
  151. v-else
  152. :workListIds="workListIds"
  153. ref="jobRef"
  154. :reportNeedFeed="reportNeedFeed"
  155. @jobSuccess="jobSuccess"
  156. ></jobBooking>
  157. <!-- <workPlan
  158. style="width: 100%"
  159. v-else
  160. :workListIds="workListIds"
  161. ref="jobRef"
  162. :reportNeedFeed="reportNeedFeed"
  163. >
  164. </workPlan> -->
  165. </div>
  166. <!-- 工步 -->
  167. <div v-if="operationType == 'workStep'"> </div>
  168. <!-- 质检工序 -->
  169. <div v-if="operationType == 'inspection'">
  170. <inspection
  171. :workListIds="workListIds"
  172. ref="inspectionRef"
  173. ></inspection>
  174. </div>
  175. <!-- 委外 -->
  176. <div
  177. v-if="operationType == 'Outsourcing' && isType == '3'"
  178. class="right_main_box"
  179. >
  180. <outsourcing
  181. :outsourceFormVal="outsourceForm"
  182. @changePlugIn="changePlugIn"
  183. v-if="isStep"
  184. ></outsourcing>
  185. <!-- -->
  186. <outsourceList
  187. :outsourceFormVal="outObj"
  188. @closeForm="closeForm"
  189. @outScucc="outScucc"
  190. v-else
  191. ></outsourceList>
  192. </div>
  193. </div>
  194. </template>
  195. </ele-split-layout>
  196. <footBtn
  197. @footBtn="footBtn"
  198. :type="type"
  199. :singleReportInspection="singleReportInspection"
  200. style="background: rgba(223, 250, 222, 0.6); padding: 10px"
  201. ></footBtn>
  202. </div>
  203. </div>
  204. <!--领料弹框 -->
  205. <picking
  206. v-if="pickingShow"
  207. @close="pickingClose"
  208. :workListIds="workListIds"
  209. ></picking>
  210. <!-- 工艺文件 -->
  211. <wokePopup ref="wokePopupRef"></wokePopup>
  212. <!-- 检验报工 -->
  213. <workPlan ref="jobRefs"> </workPlan>
  214. <!-- <workes ref="jobRefs"> </workes> -->
  215. <!-- :workListIds="workListIds" :taskId="taskObj.id" -->
  216. <!-- 工步 -->
  217. <workStep ref="workStepRef" />
  218. <!-- 任务 -->
  219. <TaskDialog ref="taskDialogRef" />
  220. <!-- 异常 -->
  221. <createError ref="createErrorRef" />
  222. </el-drawer>
  223. </div>
  224. </template>
  225. <script>
  226. import Info from './info.vue';
  227. import TaskDialog from '@/views/produce/components/taskDialog/index.vue';
  228. import Search from '@/views/produce/components/search.vue';
  229. import footBtn from '@/views/produce/components/footBtn.vue';
  230. // import produceOrder from './components/produceOrder.vue';
  231. import produceOrder from '@/views/produce/components/new_produceOrder.vue';
  232. import productionResource from '@/views/produce/components/productionResource/index.vue';
  233. import outsourcing from '@/views/produce/components/outsourcing/index.vue';
  234. import picking from '@/views/produce/components/picking/index.vue';
  235. import wokePopup from '@/views/produce/components/picking/wokePopup.vue';
  236. import inspection from '@/views/produce/components/inspection/newIndex.vue';
  237. // import inspection from './components/inspection/index.vue';
  238. import pickDetails from '@/views/produce/components/picking/details.vue';
  239. import AssetTree from '@/components/AssetTree/joobIndex.vue';
  240. import feeding from '@/views/produce/components/feeding/index.vue';
  241. import jobBooking from '@/views/produce/components/jobBooking/index.vue';
  242. import workPlan from '@/views/produce/components/workPlan/index.vue';
  243. // import workes from './components/workPlan/components/work.vue';
  244. import warehousing from '@/views/produce/components/warehousing/index.vue';
  245. import outsourceList from '@/views/produce/components/outsourcing/outsourceList.vue';
  246. import workStep from '@/views/produce/components/workStep/index.vue';
  247. import createError from '@/views/produce/components/createError.vue';
  248. import { parameterGetByCode } from '@/api/system/dictionary-data';
  249. import {
  250. getByTaskId,
  251. pcCheckOutsource,
  252. getTaskInstanceById,
  253. checkOutsourceMaterial,
  254. listTask,
  255. factoryworkstationPage,
  256. nextTask
  257. } from '@/api/produce/index';
  258. import { getTaskInstanceList } from '@/api/produce/job';
  259. import { workorderInfo } from '@/api/produceOrder/index.js';
  260. export default {
  261. components: {
  262. Search,
  263. footBtn,
  264. wokePopup,
  265. produceOrder,
  266. productionResource,
  267. outsourcing,
  268. picking,
  269. pickDetails,
  270. outsourceList,
  271. feeding,
  272. AssetTree,
  273. jobBooking,
  274. inspection,
  275. warehousing,
  276. workStep,
  277. workPlan,
  278. TaskDialog,
  279. createError,
  280. Info
  281. },
  282. data() {
  283. return {
  284. name: '',
  285. activeName: '0',
  286. taskName: '',
  287. keyWord: '', //搜索
  288. title: '',
  289. type: '',
  290. loading: false,
  291. operationType: null,
  292. popupType: '', // 弹窗
  293. workListIds: [],
  294. factoryworkstationList: [],
  295. title1: '',
  296. arr: [],
  297. arrTow: [],
  298. produceTaskList: [],
  299. isType: '',
  300. isStep: true,
  301. outsourceForm: {},
  302. outObj: {},
  303. pickingShow: false,
  304. wokePopup: false,
  305. workOrderInfo: {},
  306. routeList: [],
  307. activeIndex: 0,
  308. desIndex: 0,
  309. drawer: false,
  310. workData: {},
  311. isFullscreen: false,
  312. routeObj: {
  313. id: null
  314. },
  315. BomObj: {},
  316. defaultProps: {
  317. children: 'children',
  318. label: 'newName'
  319. },
  320. defaultPropsTow: {
  321. children: 'children',
  322. label: 'name',
  323. value: 'code'
  324. },
  325. feedNeedEquipment: 0, //投料是否要添加生产设备1是0否
  326. reportNeedFeed: 0, //生产质检是否需要处置再报工1是0否
  327. singleReportInspection: null, //获取选中的工单是单个还是批量
  328. workTaskId: null, //选中的工单工序id
  329. workStepQueryParam: {
  330. taskId: null,
  331. workOrderId: null,
  332. bomCategoryId: null
  333. }
  334. };
  335. },
  336. computed: {
  337. taskObj() {
  338. return this.$store.state.user.taskObj;
  339. },
  340. info() {
  341. return this.$store.state.user.info;
  342. },
  343. rightShow() {
  344. return (type) => {};
  345. }
  346. },
  347. created() {
  348. this.init();
  349. this.getTaskList();
  350. this.getFactoryworkstationPageList();
  351. this.operationType = null;
  352. this.workListIds = [];
  353. },
  354. methods: {
  355. tabClickValue() {
  356. this.name = '';
  357. this.seekInput();
  358. },
  359. // 前端筛选
  360. seekInput() {
  361. // console.log(activeName);
  362. if (this.activeName == '0') {
  363. if (!this.name) return (this.produceTaskList = this.arr);
  364. this.produceTaskList = this.produceTaskList.filter((item) => {
  365. return item.name.indexOf(this.name) > -1;
  366. });
  367. } else {
  368. if (!this.name) return (this.factoryworkstationList = this.arrTow);
  369. this.factoryworkstationList = this.factoryworkstationList.filter(
  370. (item) => {
  371. return item.name.indexOf(this.name) > -1;
  372. }
  373. );
  374. }
  375. },
  376. // 折叠悬浮中样式调整
  377. init() {
  378. this.$store.dispatch('theme/setCollapse', true);
  379. },
  380. async getTaskName(value) {
  381. let res = await nextTask({
  382. taskId: this.taskObj.id,
  383. workOrderIds: [value.id]
  384. });
  385. const title1 = res.data.map((item) => item.taskTypeName).toString();
  386. this.title1 = title1 ? title1 : '';
  387. },
  388. handleSearch() {
  389. let obj = {
  390. keyWord: this.keyWord,
  391. taskName: this.taskName
  392. };
  393. this.$refs.produceOrder.handleSearch(obj);
  394. //handleSearch(this.code);
  395. },
  396. handleNodeClickNew(info) {
  397. // this.current = info;
  398. let current = { id: info.id };
  399. this.$store.commit('user/currentObj', current);
  400. },
  401. setRootId(id) {
  402. this.rootId = id;
  403. },
  404. // 点击工序
  405. // handleNodeClick(data) {
  406. // this.feedNeedEquipment = data.feedNeedEquipment;
  407. // this.reportNeedFeed = data.reportNeedFeed;
  408. // let obj = {
  409. // 1: `${data.workCenterName}-${data.name}(普通工序)`,
  410. // 3: `${data.workCenterName}-${data.name}(质检工序)`,
  411. // 4: `${data.workCenterName}-${data.name}(包装工序)`,
  412. // 5: `${data.workCenterName}-${data.name}(入库工序)`,
  413. // 6: `${data.workCenterName}-${data.name}(质检工序)`
  414. // };
  415. // this.title = obj[data.type] || '';
  416. // this.type = data.type;
  417. // let taskObj = {};
  418. // taskObj = this.routeList.find((item) => item.taskId === data.taskId);
  419. // console.log(taskObj, 'taskObj');
  420. // this.$store.commit('user/setTaskObj', taskObj);
  421. // },
  422. handleChoose(val) {
  423. console.log(val);
  424. },
  425. handleFull() {
  426. this.isFullscreen = !this.isFullscreen;
  427. this.$forceUpdate();
  428. },
  429. // 获取工序列表
  430. getTaskList() {
  431. listTask().then((res) => {
  432. res.map((v) => {
  433. v.newName = `${v.workCenterName}-${v.name}`;
  434. });
  435. this.produceTaskList = res;
  436. this.arr = JSON.parse(JSON.stringify(this.produceTaskList));
  437. //默认选择第一个工序
  438. // if (this.produceTaskList?.length) {
  439. // this.$store.commit('user/setTaskObj', this.produceTaskList[0]);
  440. // this.$nextTick(() => {
  441. // this.$refs.taskListRef.setCurrentKey(this.produceTaskList[0].id);
  442. // });
  443. // }
  444. // newName
  445. });
  446. },
  447. // 获取工位
  448. getFactoryworkstationPageList() {
  449. factoryworkstationPage({ pageNum: 1, size: 99999999 }).then((res) => {
  450. this.factoryworkstationList = res.list;
  451. this.arrTow = JSON.parse(JSON.stringify(this.factoryworkstationList));
  452. // newName
  453. });
  454. },
  455. closeForm() {
  456. this.isStep = true;
  457. },
  458. outScucc() {
  459. this.operationType = null;
  460. },
  461. // 切换组件
  462. async changePlugIn(e) {
  463. this.outObj = e;
  464. let req = {
  465. taskId: e.taskId,
  466. taskIds: e.taskIds,
  467. workOrderId: e.workOrderId,
  468. quantity: e.formedNumLast
  469. };
  470. const res = await checkOutsourceMaterial(req);
  471. this.outObj = { ...res.data, ...this.outsourceForm, ...this.outObj };
  472. this.isStep = false;
  473. },
  474. pickingWokeClose() {
  475. this.wokePopup = false;
  476. },
  477. open(row) {
  478. this.workOrderInfo = row;
  479. console.log(row, 'workOrderInfo');
  480. this.routeObj.id = this.workOrderInfo.id;
  481. this.getTaskFn();
  482. this.drawer = true;
  483. this.getOrderData();
  484. },
  485. async getOrderData() {
  486. await workorderInfo(this.workOrderInfo.id).then((res) => {
  487. this.workOrderInfo = res;
  488. this.workStepQueryParam.taskId = this.workOrderInfo.taskId;
  489. this.workStepQueryParam.workOrderId = this.workOrderInfo.id;
  490. this.workStepQueryParam.bomCategoryId =
  491. this.workOrderInfo.bomCategoryId;
  492. this.singleReportInspection = this.workOrderInfo.singleReport;
  493. });
  494. },
  495. handleClose() {
  496. this.drawer = false;
  497. },
  498. feedSuccess() {
  499. this.getOrderData();
  500. this.getTaskFn();
  501. },
  502. jobSuccess() {
  503. this.getOrderData();
  504. this.getTaskFn();
  505. },
  506. warehouseSuccess() {
  507. this.getOrderData();
  508. this.getTaskFn();
  509. },
  510. async getTaskFn() {
  511. await getTaskInstanceList(this.workOrderInfo.id).then((res) => {
  512. this.routeList = res;
  513. console.log(this.routeList, 'routeList');
  514. console.log(this.workOrderInfo, 'this.workOrderInfo');
  515. // 使用findIndex方法查找
  516. const index = this.routeList.findIndex(
  517. (item) => Number(item.taskId) == Number(this.workOrderInfo.taskId)
  518. );
  519. this.desIndex = index;
  520. console.log(this.routeList, '888888');
  521. this.newId = this.routeList[this.desIndex].taskId || '';
  522. if (this.workOrderInfo.taskId != -2) {
  523. this.curTaskObj = JSON.parse(JSON.stringify(this.routeObj));
  524. } else {
  525. this.curTaskObj = JSON.parse(JSON.stringify(this.routeList[0]));
  526. this.desIndex = 0;
  527. }
  528. this.activeIndex = index;
  529. this.workData = this.workOrderInfo;
  530. this.handIdx(this.activeIndex, this.routeList[index]);
  531. });
  532. },
  533. async getCodeData(req) {
  534. await parameterGetByCode({ code: 'enable_quality_plus' }).then(
  535. (res) => {
  536. if (res.value == '1') {
  537. this.$refs.jobRefs.open(req);
  538. }
  539. }
  540. );
  541. },
  542. footBtn(t) {
  543. // this.operationType = t;
  544. // 新增判断 *** 出现弹窗的时候不然右边数据消失
  545. if ((t == 'work' || t == 'workStep', t === 'task')) {
  546. this.popupType = t;
  547. } else {
  548. this.operationType = t;
  549. }
  550. if (
  551. Object.keys(this.$store.state.user.taskObj).length === 0 &&
  552. this.$store.state.user.taskObj.constructor === Object
  553. ) {
  554. this.$message.warning('请选择工序');
  555. return true;
  556. }
  557. if (['pick', 'feed', 'job', 'work', 'workStep', 'task'].includes(t)) {
  558. if (this.workListIds.length == 0) {
  559. this.$message.warning('请选择工单列表');
  560. return false;
  561. }
  562. }
  563. // console.log('按钮被点击了.....', t);
  564. if (t === 'job') {
  565. let req = {
  566. taskId: this.taskObj.id,
  567. workOrderId: this.workListIds[0],
  568. data: [this.workOrderInfo]
  569. };
  570. // console.log(this.workData.list, 'this.workListIds');
  571. // console.log(this.taskObj.type, 'this.taskObj');
  572. if (
  573. this.taskObj.type == 2 ||
  574. this.taskObj.type == 3 ||
  575. this.taskObj.type == 6
  576. ) {
  577. // this.$refs.jobRefs.open(req);
  578. this.getCodeData(req);
  579. }
  580. }
  581. if (t == 'pick') {
  582. this.$nextTick(() => {
  583. this.$refs.pickListRef.getList(this.workListIds);
  584. });
  585. }
  586. // 工步
  587. if (t === 'workStep') {
  588. if (this.workListIds.length > 1) {
  589. return this.$message.warning('工步只能选择一个工单!');
  590. }
  591. this.$refs.workStepRef.open(this.workStepQueryParam);
  592. // let req = {
  593. // taskId: this.taskObj.id,
  594. // workOrderId: this.workListIds[0]
  595. // };
  596. // this.$refs.wokePopupRef.open(req);
  597. }
  598. if (t === 'task') {
  599. if (this.workListIds.length > 1) {
  600. return this.$message.warning('任务只能选择一个工单!');
  601. }
  602. this.$refs.taskDialogRef.open(
  603. this.workStepQueryParam,
  604. this.workOrderInfo
  605. );
  606. }
  607. if (t === 'error') {
  608. if (this.workListIds.length > 1) {
  609. return this.$message.warning('异常只能选择一个工单!');
  610. }
  611. // console.log(this.workListIds, 'this.workListIds');
  612. this.$refs.createErrorRef.open('add', this.workOrderInfo);
  613. }
  614. // 工艺路线 *** 修改 判断只能选择一个
  615. // if (t === 'work') {
  616. // let req = {
  617. // taskId: this.taskObj.id,
  618. // workOrderId: this.workListIds[0]
  619. // };
  620. // this.$refs.wokePopupRef.open(req);
  621. // }
  622. if (t === 'work') {
  623. if (this.workListIds.length > 1) {
  624. return this.$message.warning('工艺文件只能选择一个工单!');
  625. }
  626. let req = {
  627. taskId: this.taskObj.id,
  628. workOrderId: this.workListIds[0]
  629. };
  630. this.$refs.wokePopupRef.open(req);
  631. }
  632. if (t == 'feed') {
  633. }
  634. // 委外
  635. if (t == 'Outsourcing') {
  636. if (this.workListIds.length > 1) {
  637. return this.$message.warning('委外工序只能选择一个工单!');
  638. } else if (this.workListIds.length < 1)
  639. return this.$message.warning('请选择工单!');
  640. else {
  641. // /
  642. this.handOutsource(this.workListIds[0]);
  643. }
  644. }
  645. },
  646. handIdx(index, item) {
  647. if (item.count > 0 || index == this.desIndex) {
  648. this.taskId = item.taskId;
  649. } else {
  650. this.$message.info('还未执行到此工序');
  651. return;
  652. }
  653. this.curTaskObj = JSON.parse(JSON.stringify(item));
  654. console.log(item, 'item');
  655. this.feedNeedEquipment = item.feedNeedEquipment;
  656. this.reportNeedFeed = item.reportNeedFeed;
  657. let obj = {
  658. 1: `${item.taskTypeName}(普通工序)`,
  659. 3: `${item.taskTypeName}(质检工序)`,
  660. 4: `${item.taskTypeName}(包装工序)`,
  661. 5: `${item.taskTypeName}(入库工序)`,
  662. 6: `${item.taskTypeName}(质检工序)`
  663. };
  664. this.title = obj[item.type] || '';
  665. this.type = item.type;
  666. let taskObj = {};
  667. taskObj = this.routeList.find((e) => e.taskId === item.taskId);
  668. taskObj.id = taskObj.sourceTaskId;
  669. taskObj.isOrderListData = true;
  670. this.$store.commit('user/setTaskObj', taskObj);
  671. this.workListIds = [this.workOrderInfo.id];
  672. // if (item.taskId == -2) {
  673. // this.$message.info('完结状态不能点击');
  674. // return;
  675. // } else {
  676. // this.desIndex = index;
  677. // this.newId = this.routeList[this.desIndex].taskId || '';
  678. // this.getTaskName(this.workOrderInfo);
  679. // }
  680. if (item.taskId != -2) {
  681. this.desIndex = index;
  682. this.newId = this.routeList[this.desIndex].taskId || '';
  683. this.getTaskName(this.workOrderInfo);
  684. }
  685. },
  686. handOutsource(workOrderId) {
  687. // return
  688. let param = {
  689. taskId: this.taskObj.id,
  690. workOrderId: workOrderId
  691. };
  692. pcCheckOutsource(param).then((res) => {
  693. this.outsourceForm = {
  694. ...res.data
  695. };
  696. console.log(this.taskObj, 'this.outsourceForm');
  697. this.outsourceForm.name = this.taskObj.taskTypeName + '委外';
  698. if (res.data.outsource) {
  699. this.isType = '3';
  700. this.getTaskInstanceByIdFn(workOrderId);
  701. } else {
  702. return this.$message.warning('此工序不能委外');
  703. }
  704. });
  705. },
  706. //获取工单列表
  707. getTaskInstanceByIdFn(workOrderId) {
  708. getTaskInstanceById(workOrderId).then((res) => {
  709. let { data } = res;
  710. if (data.length) {
  711. data = data.filter(
  712. (item) => item.taskId != -2 && item.taskId != -1
  713. );
  714. let arr = data.findIndex(
  715. (item) => item.sourceTaskId == this.taskObj.id
  716. );
  717. if (arr != -1) {
  718. data.splice(0, arr);
  719. }
  720. this.$set(this.outsourceForm, 'newStepsList', data);
  721. }
  722. });
  723. },
  724. pickAdd() {
  725. this.pickingShow = true;
  726. },
  727. // 关闭领料弹窗
  728. pickingClose(val) {
  729. if (val) {
  730. this.$nextTick(() => {
  731. this.$refs.pickListRef.getList(this.workListIds);
  732. });
  733. }
  734. this.pickingShow = false;
  735. },
  736. rowClick(row, taskId) {
  737. if (taskId) {
  738. let params = {
  739. categoryId: row.categoryId,
  740. taskId: taskId
  741. };
  742. getByTaskId(params).then((res) => {
  743. this.BomObj = res.data;
  744. this.$forceUpdate();
  745. });
  746. }
  747. }
  748. },
  749. mounted() {
  750. this.$nextTick(() => {
  751. const targetElements =
  752. document.getElementsByClassName('ele-admin-tabs');
  753. if (targetElements.length > 0) {
  754. // 遍历所有具有 'ele-admin-tabs' 类的元素
  755. Array.from(targetElements).forEach((element) => {
  756. // 对每个元素添加 'new-ele-admin-tabs' 类
  757. element.classList.add('new-ele-admin-tabs');
  758. });
  759. }
  760. });
  761. },
  762. destroyed() {
  763. this.$nextTick(() => {
  764. const targetElements =
  765. document.getElementsByClassName('ele-admin-tabs');
  766. if (targetElements.length > 0) {
  767. Array.from(targetElements).forEach((element) => {
  768. element.classList.remove('new-ele-admin-tabs');
  769. });
  770. }
  771. });
  772. }
  773. };
  774. </script>
  775. <style lang="scss" scoped>
  776. // .content_box {
  777. // display: flex;
  778. // }
  779. // .content_box_tab {
  780. // width: 220px;
  781. // padding: 5px;
  782. // height: 100vh;
  783. // background-color: #fff;
  784. // overflow-y: auto;
  785. // border: 1px solid blue;
  786. // }
  787. .footBtn {
  788. position: absolute;
  789. bottom: 20px;
  790. left: 0;
  791. }
  792. .new-ele-admin-tabs {
  793. display: none !important;
  794. }
  795. .c_title {
  796. color: #157a2c;
  797. font-size: 16px;
  798. font-weight: bold;
  799. }
  800. .tableZ_box {
  801. border: 1px solid #e3e5e5;
  802. margin: 6px 0;
  803. &:last-child {
  804. border-bottom: none;
  805. }
  806. .row {
  807. width: 100%;
  808. display: flex;
  809. }
  810. .col {
  811. width: calc(100% / 5);
  812. display: flex;
  813. align-items: center;
  814. min-width: 200px;
  815. min-height: 32px;
  816. border-bottom: 1px solid #e3e5e5;
  817. border-right: 1px solid #e3e5e5;
  818. &:last-child {
  819. border-right: none;
  820. }
  821. .name {
  822. display: flex;
  823. align-items: center;
  824. padding: 4px;
  825. width: 80px;
  826. height: 100%;
  827. background-color: #d0e4d5;
  828. color: #000;
  829. }
  830. .content {
  831. padding: 4px 6px;
  832. color: #000;
  833. }
  834. }
  835. .pd6 {
  836. padding: 0 6px;
  837. }
  838. }
  839. </style>
  840. <style lang="scss" scoped>
  841. .seek-list {
  842. display: flex;
  843. height: 42px;
  844. justify-content: space-between;
  845. align-items: center;
  846. padding: 10px 10px;
  847. }
  848. .right_main_box {
  849. background-color: #fff;
  850. height: 100%;
  851. box-sizing: border-box;
  852. }
  853. .index_box {
  854. padding: 10px;
  855. padding-bottom: 0;
  856. width: 100%;
  857. box-sizing: border-box;
  858. min-width: 1280px !important;
  859. height: calc(100vh - 60px);
  860. // overflow-x: auto;
  861. /* 当内容超出宽度时,允许水平滚动 */
  862. white-space: nowrap;
  863. /* 防止内部文本换行,确保所有内容都在一行显示 */
  864. scrollbar-width: thin;
  865. /* 设置滚动条宽度(浏览器兼容性可能有所不同) */
  866. scrollbar-color: #40a9ff transparent;
  867. /* 设置滚动条颜色和轨道颜色(同样,浏览器兼容性) */
  868. }
  869. .main {
  870. width: 100%;
  871. min-width: 1280px;
  872. height: calc(100vh - 234px);
  873. display: flex;
  874. justify-content: space-between;
  875. }
  876. .left_main {
  877. width: 100%;
  878. height: 100%;
  879. display: flex;
  880. flex-direction: column;
  881. justify-content: space-around;
  882. // min-width: 640px;
  883. .top {
  884. width: 100%;
  885. height: 100%;
  886. overflow: auto;
  887. }
  888. // .bottom {
  889. // width: 100%;
  890. // min-height: calc((100vh - 70px - 50px - 80px - 20px) / 2);
  891. // overflow: hidden;
  892. // }
  893. }
  894. ::v-deep .el-tabs__item.is-active {
  895. background-color: #dffade;
  896. /* 蓝色背景 */
  897. color: #333;
  898. }
  899. ::v-deep .is-active {
  900. color: #dffade;
  901. }
  902. .right_main {
  903. width: 100%;
  904. padding-bottom: 12px;
  905. height: calc((100vh - 234px));
  906. background: #f0f3f3;
  907. border: 1px solid rgb(207, 215, 207);
  908. }
  909. .drawer_content {
  910. margin: 5px 10px;
  911. box-sizing: border-box;
  912. .taskTitle {
  913. display: flex;
  914. width: 100%;
  915. align-items: center;
  916. flex-direction: row;
  917. justify-content: center;
  918. font-size: 16px;
  919. color: green;
  920. margin-bottom: 5px;
  921. font-weight: bold;
  922. }
  923. }
  924. ::v-deep .is-fullscreen {
  925. width: 100vw !important;
  926. height: 100vh !important;
  927. overflow: hidden !important; /* 隐藏滚动条 */
  928. }
  929. ::v-deep .not-fullscreen {
  930. width: calc(100vw - 230px) !important;
  931. height: 100vh !important;
  932. overflow: hidden !important; /* 隐藏滚动条 */
  933. }
  934. ::v-deep .active .is-text {
  935. background: #ffa929; /* 背景色 */
  936. border-color: #ffa929;
  937. color: #ffffff; /* 图标文字颜色 */
  938. }
  939. ::v-deep .el-step__title {
  940. line-height: 30px;
  941. }
  942. </style>