|
|
@@ -0,0 +1,1055 @@
|
|
|
+<template>
|
|
|
+ <div class="index_box">
|
|
|
+ <el-drawer
|
|
|
+ title=""
|
|
|
+ :visible.sync="drawer"
|
|
|
+ :before-close="handleClose"
|
|
|
+ :custom-class="isFullscreen ? 'not-fullscreen' : 'is-fullscreen'"
|
|
|
+ :with-header="false"
|
|
|
+ :append-to-body="true"
|
|
|
+ >
|
|
|
+ <div>
|
|
|
+ <div>
|
|
|
+ <div class="seek-list" style="background-color: #157a2c">
|
|
|
+ <!-- <div>
|
|
|
+ <el-input
|
|
|
+ style="width: 180px; margin-right: 5px"
|
|
|
+ clearable
|
|
|
+ v-model="keyWord"
|
|
|
+ placeholder="请输入关键字"
|
|
|
+ @clear="handleSearch"
|
|
|
+ />
|
|
|
+
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="primary"
|
|
|
+ style="margin: 0 5px"
|
|
|
+ @click="handleSearch"
|
|
|
+ >查询</el-button
|
|
|
+ >
|
|
|
+
|
|
|
+ <template>
|
|
|
+ <el-popover
|
|
|
+ placement="top-start"
|
|
|
+ width="200"
|
|
|
+ trigger="hover"
|
|
|
+ content="支持工单编码,产品编码,产品名称,产品规格,牌号,型号,批次号查询。"
|
|
|
+ >
|
|
|
+ <i
|
|
|
+ class="el-icon-question"
|
|
|
+ slot="reference"
|
|
|
+ style="color: #40a9ff; font-size: 14px"
|
|
|
+ ></i> </el-popover
|
|
|
+ ></template>
|
|
|
+ </div> -->
|
|
|
+ <div
|
|
|
+ style="
|
|
|
+ width: 100%;
|
|
|
+ color: #fff;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <div>
|
|
|
+ <b style="margin-right: 50px; font-size: 16px"
|
|
|
+ >当前工序:{{ title }}</b
|
|
|
+ >
|
|
|
+ <b style="font-size: 16px">下道工序:{{ title1 }}</b>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <b style="font-weight: blod; font-size: 16px">
|
|
|
+ 操作员:{{ info.name }}
|
|
|
+ </b>
|
|
|
+
|
|
|
+ <div class="rx-ec">
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-full-screen"
|
|
|
+ type="text"
|
|
|
+ style="color: #fff; font-size: 16px"
|
|
|
+ @click="handleFull"
|
|
|
+ >{{ isFullscreen ? '全屏' : '缩小' }}</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-circle-close"
|
|
|
+ type="text"
|
|
|
+ style="color: #fff; font-size: 16px"
|
|
|
+ @click="handleClose"
|
|
|
+ >关闭</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="drawer_content">
|
|
|
+ <div class="taskTitle"
|
|
|
+ >工艺路线:{{ workOrderInfo.produceRoutingName }}</div
|
|
|
+ >
|
|
|
+ <el-steps :active="activeIndex" space="20px" align-center>
|
|
|
+ <el-step
|
|
|
+ v-for="(item, index) in routeList"
|
|
|
+ :key="index"
|
|
|
+ :title="item.taskTypeName"
|
|
|
+ @click.native="handIdx(index, item)"
|
|
|
+ :description="desIndex == index ? '此处' : ''"
|
|
|
+ :class="desIndex == index ? 'active' : ''"
|
|
|
+ ></el-step>
|
|
|
+ </el-steps>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <ele-split-layout
|
|
|
+ space="0px"
|
|
|
+ width="26%"
|
|
|
+ :resizable="true"
|
|
|
+ :min-size="200"
|
|
|
+ :max-size="-200"
|
|
|
+ :left-style="{
|
|
|
+ overflow: 'hidden',
|
|
|
+ width: '100%'
|
|
|
+ }"
|
|
|
+ :right-style="{ overflow: 'hidden' }"
|
|
|
+ :responsive="false"
|
|
|
+ style="height: calc(100vh - 230px)"
|
|
|
+ >
|
|
|
+ <!-- 左侧 工单列表 -->
|
|
|
+ <div class="left_main">
|
|
|
+ <div class="top">
|
|
|
+ <Info :workOrderInfo="workOrderInfo"></Info>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- //详细信息 -->
|
|
|
+ <template v-slot:content>
|
|
|
+ <div class="right_main">
|
|
|
+ <!-- 领料 -->
|
|
|
+ <!-- <div v-if="operationType == 'pick'"> -->
|
|
|
+ <div v-if="operationType == 'pick'">
|
|
|
+ <pickDetails
|
|
|
+ ref="pickListRef"
|
|
|
+ :workTaskId="workTaskId"
|
|
|
+ :taskId="taskObj.id"
|
|
|
+ @pickAdd="pickAdd"
|
|
|
+ ></pickDetails>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="operationType == 'feed'">
|
|
|
+ <!-- 投料 -->
|
|
|
+ <feeding
|
|
|
+ :workListIds="workListIds"
|
|
|
+ :feedNeedEquipment="feedNeedEquipment"
|
|
|
+ @feedSuccess="feedSuccess"
|
|
|
+ ></feeding>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="operationType == 'job'">
|
|
|
+ <!-- // 报工列表 入库 -->
|
|
|
+
|
|
|
+ <warehousing
|
|
|
+ v-if="taskObj.id == -1"
|
|
|
+ :workListIds="workListIds"
|
|
|
+ ref="wareRef"
|
|
|
+ @warehouseSuccess="warehouseSuccess"
|
|
|
+ ></warehousing>
|
|
|
+
|
|
|
+ <!-- // 设备 入库 -->
|
|
|
+ <!-- 普通报工 -->
|
|
|
+ <!-- <jobBooking
|
|
|
+ v-else
|
|
|
+ :workListIds="workListIds"
|
|
|
+ ref="jobRef"
|
|
|
+ :reportNeedFeed="reportNeedFeed"
|
|
|
+ ></jobBooking> -->
|
|
|
+
|
|
|
+ <jobBooking
|
|
|
+ v-else
|
|
|
+ :workListIds="workListIds"
|
|
|
+ ref="jobRef"
|
|
|
+ :reportNeedFeed="reportNeedFeed"
|
|
|
+ @jobSuccess="jobSuccess"
|
|
|
+ ></jobBooking>
|
|
|
+
|
|
|
+ <!-- <workPlan
|
|
|
+ style="width: 100%"
|
|
|
+ v-else
|
|
|
+ :workListIds="workListIds"
|
|
|
+ ref="jobRef"
|
|
|
+ :reportNeedFeed="reportNeedFeed"
|
|
|
+ >
|
|
|
+ </workPlan> -->
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 工步 -->
|
|
|
+ <div v-if="operationType == 'workStep'"> </div>
|
|
|
+ <!-- 质检工序 -->
|
|
|
+
|
|
|
+ <div v-if="operationType == 'inspection'">
|
|
|
+ <inspection
|
|
|
+ :workListIds="workListIds"
|
|
|
+ ref="inspectionRef"
|
|
|
+ ></inspection>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 委外 -->
|
|
|
+ <div
|
|
|
+ v-if="operationType == 'Outsourcing' && isType == '3'"
|
|
|
+ class="right_main_box"
|
|
|
+ >
|
|
|
+ <outsourcing
|
|
|
+ :outsourceFormVal="outsourceForm"
|
|
|
+ @changePlugIn="changePlugIn"
|
|
|
+ v-if="isStep"
|
|
|
+ ></outsourcing>
|
|
|
+
|
|
|
+ <!-- -->
|
|
|
+ <outsourceList
|
|
|
+ :outsourceFormVal="outObj"
|
|
|
+ @closeForm="closeForm"
|
|
|
+ @outScucc="outScucc"
|
|
|
+ v-else
|
|
|
+ ></outsourceList>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </ele-split-layout>
|
|
|
+
|
|
|
+ <footBtn
|
|
|
+ @footBtn="footBtn"
|
|
|
+ :type="type"
|
|
|
+ :singleReportInspection="singleReportInspection"
|
|
|
+ style="background: rgba(223, 250, 222, 0.6); padding: 10px"
|
|
|
+ ></footBtn>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!--领料弹框 -->
|
|
|
+ <picking
|
|
|
+ v-if="pickingShow"
|
|
|
+ @close="pickingClose"
|
|
|
+ :workListIds="workListIds"
|
|
|
+ ></picking>
|
|
|
+
|
|
|
+ <!-- 工艺文件 -->
|
|
|
+ <wokePopup ref="wokePopupRef"></wokePopup>
|
|
|
+ <!-- 检验报工 -->
|
|
|
+ <workPlan ref="jobRefs"> </workPlan>
|
|
|
+ <!-- <workes ref="jobRefs"> </workes> -->
|
|
|
+
|
|
|
+ <!-- :workListIds="workListIds" :taskId="taskObj.id" -->
|
|
|
+ <!-- 工步 -->
|
|
|
+ <workStep ref="workStepRef" />
|
|
|
+ <!-- 任务 -->
|
|
|
+ <TaskDialog ref="taskDialogRef" />
|
|
|
+
|
|
|
+ <!-- 异常 -->
|
|
|
+ <createError ref="createErrorRef" />
|
|
|
+ </el-drawer>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import Info from './info.vue';
|
|
|
+ import TaskDialog from '@/views/produce/components/taskDialog/index.vue';
|
|
|
+ import Search from '@/views/produce/components/search.vue';
|
|
|
+ import footBtn from '@/views/produce/components/footBtn.vue';
|
|
|
+ // import produceOrder from './components/produceOrder.vue';
|
|
|
+ import produceOrder from '@/views/produce/components/new_produceOrder.vue';
|
|
|
+ import productionResource from '@/views/produce/components/productionResource/index.vue';
|
|
|
+ import outsourcing from '@/views/produce/components/outsourcing/index.vue';
|
|
|
+ import picking from '@/views/produce/components/picking/index.vue';
|
|
|
+ import wokePopup from '@/views/produce/components/picking/wokePopup.vue';
|
|
|
+ import inspection from '@/views/produce/components/inspection/newIndex.vue';
|
|
|
+ // import inspection from './components/inspection/index.vue';
|
|
|
+
|
|
|
+ import pickDetails from '@/views/produce/components/picking/details.vue';
|
|
|
+ import AssetTree from '@/components/AssetTree/joobIndex.vue';
|
|
|
+ import feeding from '@/views/produce/components/feeding/index.vue';
|
|
|
+
|
|
|
+ import jobBooking from '@/views/produce/components/jobBooking/index.vue';
|
|
|
+ import workPlan from '@/views/produce/components/workPlan/index.vue';
|
|
|
+ // import workes from './components/workPlan/components/work.vue';
|
|
|
+ import warehousing from '@/views/produce/components/warehousing/index.vue';
|
|
|
+ import outsourceList from '@/views/produce/components/outsourcing/outsourceList.vue';
|
|
|
+ import workStep from '@/views/produce/components/workStep/index.vue';
|
|
|
+ import createError from '@/views/produce/components/createError.vue';
|
|
|
+ import { parameterGetByCode } from '@/api/system/dictionary-data';
|
|
|
+ import {
|
|
|
+ getByTaskId,
|
|
|
+ pcCheckOutsource,
|
|
|
+ getTaskInstanceById,
|
|
|
+ checkOutsourceMaterial,
|
|
|
+ listTask,
|
|
|
+ factoryworkstationPage,
|
|
|
+ nextTask
|
|
|
+ } from '@/api/produce/index';
|
|
|
+ import { getTaskInstanceList } from '@/api/produce/job';
|
|
|
+ import { workorderInfo } from '@/api/produceOrder/index.js';
|
|
|
+
|
|
|
+ export default {
|
|
|
+ components: {
|
|
|
+ Search,
|
|
|
+ footBtn,
|
|
|
+ wokePopup,
|
|
|
+ produceOrder,
|
|
|
+ productionResource,
|
|
|
+ outsourcing,
|
|
|
+ picking,
|
|
|
+ pickDetails,
|
|
|
+ outsourceList,
|
|
|
+ feeding,
|
|
|
+ AssetTree,
|
|
|
+ jobBooking,
|
|
|
+ inspection,
|
|
|
+ warehousing,
|
|
|
+ workStep,
|
|
|
+ workPlan,
|
|
|
+ TaskDialog,
|
|
|
+ createError,
|
|
|
+ Info
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ name: '',
|
|
|
+ activeName: '0',
|
|
|
+ taskName: '',
|
|
|
+ keyWord: '', //搜索
|
|
|
+ title: '',
|
|
|
+ type: '',
|
|
|
+ loading: false,
|
|
|
+ operationType: null,
|
|
|
+ popupType: '', // 弹窗
|
|
|
+ workListIds: [],
|
|
|
+ factoryworkstationList: [],
|
|
|
+ title1: '',
|
|
|
+ arr: [],
|
|
|
+ arrTow: [],
|
|
|
+ produceTaskList: [],
|
|
|
+ isType: '',
|
|
|
+ isStep: true,
|
|
|
+ outsourceForm: {},
|
|
|
+ outObj: {},
|
|
|
+ pickingShow: false,
|
|
|
+ wokePopup: false,
|
|
|
+ workOrderInfo: {},
|
|
|
+ routeList: [],
|
|
|
+ activeIndex: 0,
|
|
|
+ desIndex: 0,
|
|
|
+ drawer: false,
|
|
|
+ workData: {},
|
|
|
+ isFullscreen: false,
|
|
|
+ routeObj: {
|
|
|
+ id: null
|
|
|
+ },
|
|
|
+ BomObj: {},
|
|
|
+ defaultProps: {
|
|
|
+ children: 'children',
|
|
|
+ label: 'newName'
|
|
|
+ },
|
|
|
+ defaultPropsTow: {
|
|
|
+ children: 'children',
|
|
|
+ label: 'name',
|
|
|
+ value: 'code'
|
|
|
+ },
|
|
|
+ feedNeedEquipment: 0, //投料是否要添加生产设备1是0否
|
|
|
+ reportNeedFeed: 0, //生产质检是否需要处置再报工1是0否
|
|
|
+ singleReportInspection: null, //获取选中的工单是单个还是批量
|
|
|
+ workTaskId: null, //选中的工单工序id
|
|
|
+ workStepQueryParam: {
|
|
|
+ taskId: null,
|
|
|
+ workOrderId: null,
|
|
|
+ bomCategoryId: null
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
+
|
|
|
+ computed: {
|
|
|
+ taskObj() {
|
|
|
+ return this.$store.state.user.taskObj;
|
|
|
+ },
|
|
|
+ info() {
|
|
|
+ return this.$store.state.user.info;
|
|
|
+ },
|
|
|
+ rightShow() {
|
|
|
+ return (type) => {};
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ created() {
|
|
|
+ this.init();
|
|
|
+
|
|
|
+ this.getTaskList();
|
|
|
+ this.getFactoryworkstationPageList();
|
|
|
+
|
|
|
+ this.operationType = null;
|
|
|
+ this.workListIds = [];
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ tabClickValue() {
|
|
|
+ this.name = '';
|
|
|
+ this.seekInput();
|
|
|
+ },
|
|
|
+ // 前端筛选
|
|
|
+ seekInput() {
|
|
|
+ // console.log(activeName);
|
|
|
+
|
|
|
+ if (this.activeName == '0') {
|
|
|
+ if (!this.name) return (this.produceTaskList = this.arr);
|
|
|
+ this.produceTaskList = this.produceTaskList.filter((item) => {
|
|
|
+ return item.name.indexOf(this.name) > -1;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ if (!this.name) return (this.factoryworkstationList = this.arrTow);
|
|
|
+ this.factoryworkstationList = this.factoryworkstationList.filter(
|
|
|
+ (item) => {
|
|
|
+ return item.name.indexOf(this.name) > -1;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 折叠悬浮中样式调整
|
|
|
+ init() {
|
|
|
+ this.$store.dispatch('theme/setCollapse', true);
|
|
|
+ },
|
|
|
+ async getTaskName(value) {
|
|
|
+ let res = await nextTask({
|
|
|
+ taskId: this.taskObj.id,
|
|
|
+ workOrderIds: [value.id]
|
|
|
+ });
|
|
|
+
|
|
|
+ const title1 = res.data.map((item) => item.taskTypeName).toString();
|
|
|
+ this.title1 = title1 ? title1 : '';
|
|
|
+ },
|
|
|
+ handleSearch() {
|
|
|
+ let obj = {
|
|
|
+ keyWord: this.keyWord,
|
|
|
+ taskName: this.taskName
|
|
|
+ };
|
|
|
+ this.$refs.produceOrder.handleSearch(obj);
|
|
|
+ //handleSearch(this.code);
|
|
|
+ },
|
|
|
+
|
|
|
+ handleNodeClickNew(info) {
|
|
|
+ // this.current = info;
|
|
|
+
|
|
|
+ let current = { id: info.id };
|
|
|
+
|
|
|
+ this.$store.commit('user/currentObj', current);
|
|
|
+ },
|
|
|
+ setRootId(id) {
|
|
|
+ this.rootId = id;
|
|
|
+ },
|
|
|
+ // 点击工序
|
|
|
+ // handleNodeClick(data) {
|
|
|
+ // this.feedNeedEquipment = data.feedNeedEquipment;
|
|
|
+ // this.reportNeedFeed = data.reportNeedFeed;
|
|
|
+
|
|
|
+ // let obj = {
|
|
|
+ // 1: `${data.workCenterName}-${data.name}(普通工序)`,
|
|
|
+ // 3: `${data.workCenterName}-${data.name}(质检工序)`,
|
|
|
+ // 4: `${data.workCenterName}-${data.name}(包装工序)`,
|
|
|
+ // 5: `${data.workCenterName}-${data.name}(入库工序)`,
|
|
|
+ // 6: `${data.workCenterName}-${data.name}(质检工序)`
|
|
|
+ // };
|
|
|
+
|
|
|
+ // this.title = obj[data.type] || '';
|
|
|
+ // this.type = data.type;
|
|
|
+ // let taskObj = {};
|
|
|
+ // taskObj = this.routeList.find((item) => item.taskId === data.taskId);
|
|
|
+ // console.log(taskObj, 'taskObj');
|
|
|
+ // this.$store.commit('user/setTaskObj', taskObj);
|
|
|
+ // },
|
|
|
+
|
|
|
+ handleChoose(val) {
|
|
|
+ console.log(val);
|
|
|
+ },
|
|
|
+
|
|
|
+ handleFull() {
|
|
|
+ this.isFullscreen = !this.isFullscreen;
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
+
|
|
|
+ // 获取工序列表
|
|
|
+ getTaskList() {
|
|
|
+ listTask().then((res) => {
|
|
|
+ res.map((v) => {
|
|
|
+ v.newName = `${v.workCenterName}-${v.name}`;
|
|
|
+ });
|
|
|
+ this.produceTaskList = res;
|
|
|
+ this.arr = JSON.parse(JSON.stringify(this.produceTaskList));
|
|
|
+ //默认选择第一个工序
|
|
|
+ // if (this.produceTaskList?.length) {
|
|
|
+ // this.$store.commit('user/setTaskObj', this.produceTaskList[0]);
|
|
|
+ // this.$nextTick(() => {
|
|
|
+ // this.$refs.taskListRef.setCurrentKey(this.produceTaskList[0].id);
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // newName
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 获取工位
|
|
|
+ getFactoryworkstationPageList() {
|
|
|
+ factoryworkstationPage({ pageNum: 1, size: 99999999 }).then((res) => {
|
|
|
+ this.factoryworkstationList = res.list;
|
|
|
+
|
|
|
+ this.arrTow = JSON.parse(JSON.stringify(this.factoryworkstationList));
|
|
|
+
|
|
|
+ // newName
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ closeForm() {
|
|
|
+ this.isStep = true;
|
|
|
+ },
|
|
|
+ outScucc() {
|
|
|
+ this.operationType = null;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 切换组件
|
|
|
+ async changePlugIn(e) {
|
|
|
+ this.outObj = e;
|
|
|
+
|
|
|
+ let req = {
|
|
|
+ taskId: e.taskId,
|
|
|
+ taskIds: e.taskIds,
|
|
|
+ workOrderId: e.workOrderId,
|
|
|
+ quantity: e.formedNumLast
|
|
|
+ };
|
|
|
+ const res = await checkOutsourceMaterial(req);
|
|
|
+
|
|
|
+ this.outObj = { ...res.data, ...this.outsourceForm, ...this.outObj };
|
|
|
+
|
|
|
+ this.isStep = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ pickingWokeClose() {
|
|
|
+ this.wokePopup = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ open(row) {
|
|
|
+ this.workOrderInfo = row;
|
|
|
+ console.log(row, 'workOrderInfo');
|
|
|
+ this.routeObj.id = this.workOrderInfo.id;
|
|
|
+ this.getTaskFn();
|
|
|
+ this.drawer = true;
|
|
|
+ this.getOrderData();
|
|
|
+ },
|
|
|
+
|
|
|
+ async getOrderData() {
|
|
|
+ await workorderInfo(this.workOrderInfo.id).then((res) => {
|
|
|
+ this.workOrderInfo = res;
|
|
|
+ this.workStepQueryParam.taskId = this.workOrderInfo.taskId;
|
|
|
+ this.workStepQueryParam.workOrderId = this.workOrderInfo.id;
|
|
|
+ this.workStepQueryParam.bomCategoryId =
|
|
|
+ this.workOrderInfo.bomCategoryId;
|
|
|
+ this.singleReportInspection = this.workOrderInfo.singleReport;
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ handleClose() {
|
|
|
+ this.drawer = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ feedSuccess() {
|
|
|
+ this.getOrderData();
|
|
|
+ this.getTaskFn();
|
|
|
+ },
|
|
|
+
|
|
|
+ jobSuccess() {
|
|
|
+ this.getOrderData();
|
|
|
+ this.getTaskFn();
|
|
|
+ },
|
|
|
+
|
|
|
+ warehouseSuccess() {
|
|
|
+ this.getOrderData();
|
|
|
+ this.getTaskFn();
|
|
|
+ },
|
|
|
+
|
|
|
+ async getTaskFn() {
|
|
|
+ await getTaskInstanceList(this.workOrderInfo.id).then((res) => {
|
|
|
+ this.routeList = res;
|
|
|
+
|
|
|
+ console.log(this.routeList, 'routeList');
|
|
|
+ console.log(this.workOrderInfo, 'this.workOrderInfo');
|
|
|
+
|
|
|
+ // 使用findIndex方法查找
|
|
|
+ const index = this.routeList.findIndex(
|
|
|
+ (item) => Number(item.taskId) == Number(this.workOrderInfo.taskId)
|
|
|
+ );
|
|
|
+
|
|
|
+ this.desIndex = index;
|
|
|
+ console.log(this.routeList, '888888');
|
|
|
+ this.newId = this.routeList[this.desIndex].taskId || '';
|
|
|
+
|
|
|
+ if (this.workOrderInfo.taskId != -2) {
|
|
|
+ this.curTaskObj = JSON.parse(JSON.stringify(this.routeObj));
|
|
|
+ } else {
|
|
|
+ this.curTaskObj = JSON.parse(JSON.stringify(this.routeList[0]));
|
|
|
+ this.desIndex = 0;
|
|
|
+ }
|
|
|
+ this.activeIndex = index;
|
|
|
+ this.workData = this.workOrderInfo;
|
|
|
+ this.handIdx(this.activeIndex, this.routeList[index]);
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ async getCodeData(req) {
|
|
|
+ await parameterGetByCode({ code: 'enable_quality_plus' }).then(
|
|
|
+ (res) => {
|
|
|
+ if (res.value == '1') {
|
|
|
+ this.$refs.jobRefs.open(req);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
+
|
|
|
+ footBtn(t) {
|
|
|
+ // this.operationType = t;
|
|
|
+ // 新增判断 *** 出现弹窗的时候不然右边数据消失
|
|
|
+ if ((t == 'work' || t == 'workStep', t === 'task')) {
|
|
|
+ this.popupType = t;
|
|
|
+ } else {
|
|
|
+ this.operationType = t;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (
|
|
|
+ Object.keys(this.$store.state.user.taskObj).length === 0 &&
|
|
|
+ this.$store.state.user.taskObj.constructor === Object
|
|
|
+ ) {
|
|
|
+ this.$message.warning('请选择工序');
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (['pick', 'feed', 'job', 'work', 'workStep', 'task'].includes(t)) {
|
|
|
+ if (this.workListIds.length == 0) {
|
|
|
+ this.$message.warning('请选择工单列表');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // console.log('按钮被点击了.....', t);
|
|
|
+ if (t === 'job') {
|
|
|
+ let req = {
|
|
|
+ taskId: this.taskObj.id,
|
|
|
+ workOrderId: this.workListIds[0],
|
|
|
+ data: [this.workOrderInfo]
|
|
|
+ };
|
|
|
+
|
|
|
+ // console.log(this.workData.list, 'this.workListIds');
|
|
|
+ // console.log(this.taskObj.type, 'this.taskObj');
|
|
|
+
|
|
|
+ if (
|
|
|
+ this.taskObj.type == 2 ||
|
|
|
+ this.taskObj.type == 3 ||
|
|
|
+ this.taskObj.type == 6
|
|
|
+ ) {
|
|
|
+ // this.$refs.jobRefs.open(req);
|
|
|
+ this.getCodeData(req);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (t == 'pick') {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.pickListRef.getList(this.workListIds);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 工步
|
|
|
+ if (t === 'workStep') {
|
|
|
+ if (this.workListIds.length > 1) {
|
|
|
+ return this.$message.warning('工步只能选择一个工单!');
|
|
|
+ }
|
|
|
+ this.$refs.workStepRef.open(this.workStepQueryParam);
|
|
|
+ // let req = {
|
|
|
+ // taskId: this.taskObj.id,
|
|
|
+ // workOrderId: this.workListIds[0]
|
|
|
+ // };
|
|
|
+
|
|
|
+ // this.$refs.wokePopupRef.open(req);
|
|
|
+ }
|
|
|
+ if (t === 'task') {
|
|
|
+ if (this.workListIds.length > 1) {
|
|
|
+ return this.$message.warning('任务只能选择一个工单!');
|
|
|
+ }
|
|
|
+ this.$refs.taskDialogRef.open(
|
|
|
+ this.workStepQueryParam,
|
|
|
+ this.workOrderInfo
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ if (t === 'error') {
|
|
|
+ if (this.workListIds.length > 1) {
|
|
|
+ return this.$message.warning('异常只能选择一个工单!');
|
|
|
+ }
|
|
|
+ // console.log(this.workListIds, 'this.workListIds');
|
|
|
+ this.$refs.createErrorRef.open('add', this.workOrderInfo);
|
|
|
+ }
|
|
|
+ // 工艺路线 *** 修改 判断只能选择一个
|
|
|
+ // if (t === 'work') {
|
|
|
+ // let req = {
|
|
|
+ // taskId: this.taskObj.id,
|
|
|
+ // workOrderId: this.workListIds[0]
|
|
|
+ // };
|
|
|
+
|
|
|
+ // this.$refs.wokePopupRef.open(req);
|
|
|
+ // }
|
|
|
+ if (t === 'work') {
|
|
|
+ if (this.workListIds.length > 1) {
|
|
|
+ return this.$message.warning('工艺文件只能选择一个工单!');
|
|
|
+ }
|
|
|
+ let req = {
|
|
|
+ taskId: this.taskObj.id,
|
|
|
+ workOrderId: this.workListIds[0]
|
|
|
+ };
|
|
|
+
|
|
|
+ this.$refs.wokePopupRef.open(req);
|
|
|
+ }
|
|
|
+ if (t == 'feed') {
|
|
|
+ }
|
|
|
+
|
|
|
+ // 委外
|
|
|
+ if (t == 'Outsourcing') {
|
|
|
+ if (this.workListIds.length > 1) {
|
|
|
+ return this.$message.warning('委外工序只能选择一个工单!');
|
|
|
+ } else if (this.workListIds.length < 1)
|
|
|
+ return this.$message.warning('请选择工单!');
|
|
|
+ else {
|
|
|
+ // /
|
|
|
+ this.handOutsource(this.workListIds[0]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ handIdx(index, item) {
|
|
|
+ if (item.count > 0 || index == this.desIndex) {
|
|
|
+ this.taskId = item.taskId;
|
|
|
+ } else {
|
|
|
+ this.$message.info('还未执行到此工序');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.curTaskObj = JSON.parse(JSON.stringify(item));
|
|
|
+
|
|
|
+ console.log(item, 'item');
|
|
|
+
|
|
|
+ this.feedNeedEquipment = item.feedNeedEquipment;
|
|
|
+ this.reportNeedFeed = item.reportNeedFeed;
|
|
|
+
|
|
|
+ let obj = {
|
|
|
+ 1: `${item.taskTypeName}(普通工序)`,
|
|
|
+ 3: `${item.taskTypeName}(质检工序)`,
|
|
|
+ 4: `${item.taskTypeName}(包装工序)`,
|
|
|
+ 5: `${item.taskTypeName}(入库工序)`,
|
|
|
+ 6: `${item.taskTypeName}(质检工序)`
|
|
|
+ };
|
|
|
+
|
|
|
+ this.title = obj[item.type] || '';
|
|
|
+ this.type = item.type;
|
|
|
+ let taskObj = {};
|
|
|
+ taskObj = this.routeList.find((e) => e.taskId === item.taskId);
|
|
|
+ taskObj.id = taskObj.sourceTaskId;
|
|
|
+ taskObj.isOrderListData = true;
|
|
|
+ this.$store.commit('user/setTaskObj', taskObj);
|
|
|
+ this.workListIds = [this.workOrderInfo.id];
|
|
|
+
|
|
|
+ // if (item.taskId == -2) {
|
|
|
+ // this.$message.info('完结状态不能点击');
|
|
|
+ // return;
|
|
|
+ // } else {
|
|
|
+ // this.desIndex = index;
|
|
|
+ // this.newId = this.routeList[this.desIndex].taskId || '';
|
|
|
+ // this.getTaskName(this.workOrderInfo);
|
|
|
+ // }
|
|
|
+ if (item.taskId != -2) {
|
|
|
+ this.desIndex = index;
|
|
|
+ this.newId = this.routeList[this.desIndex].taskId || '';
|
|
|
+ this.getTaskName(this.workOrderInfo);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ handOutsource(workOrderId) {
|
|
|
+ // return
|
|
|
+ let param = {
|
|
|
+ taskId: this.taskObj.id,
|
|
|
+ workOrderId: workOrderId
|
|
|
+ };
|
|
|
+ pcCheckOutsource(param).then((res) => {
|
|
|
+ this.outsourceForm = {
|
|
|
+ ...res.data
|
|
|
+ };
|
|
|
+
|
|
|
+ console.log(this.taskObj, 'this.outsourceForm');
|
|
|
+ this.outsourceForm.name = this.taskObj.taskTypeName + '委外';
|
|
|
+
|
|
|
+ if (res.data.outsource) {
|
|
|
+ this.isType = '3';
|
|
|
+ this.getTaskInstanceByIdFn(workOrderId);
|
|
|
+ } else {
|
|
|
+ return this.$message.warning('此工序不能委外');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ //获取工单列表
|
|
|
+ getTaskInstanceByIdFn(workOrderId) {
|
|
|
+ getTaskInstanceById(workOrderId).then((res) => {
|
|
|
+ let { data } = res;
|
|
|
+ if (data.length) {
|
|
|
+ data = data.filter(
|
|
|
+ (item) => item.taskId != -2 && item.taskId != -1
|
|
|
+ );
|
|
|
+ let arr = data.findIndex(
|
|
|
+ (item) => item.sourceTaskId == this.taskObj.id
|
|
|
+ );
|
|
|
+ if (arr != -1) {
|
|
|
+ data.splice(0, arr);
|
|
|
+ }
|
|
|
+ this.$set(this.outsourceForm, 'newStepsList', data);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ pickAdd() {
|
|
|
+ this.pickingShow = true;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 关闭领料弹窗
|
|
|
+
|
|
|
+ pickingClose(val) {
|
|
|
+ if (val) {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.pickListRef.getList(this.workListIds);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ this.pickingShow = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ rowClick(row, taskId) {
|
|
|
+ if (taskId) {
|
|
|
+ let params = {
|
|
|
+ categoryId: row.categoryId,
|
|
|
+ taskId: taskId
|
|
|
+ };
|
|
|
+ getByTaskId(params).then((res) => {
|
|
|
+ this.BomObj = res.data;
|
|
|
+ this.$forceUpdate();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ mounted() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ const targetElements =
|
|
|
+ document.getElementsByClassName('ele-admin-tabs');
|
|
|
+
|
|
|
+ if (targetElements.length > 0) {
|
|
|
+ // 遍历所有具有 'ele-admin-tabs' 类的元素
|
|
|
+ Array.from(targetElements).forEach((element) => {
|
|
|
+ // 对每个元素添加 'new-ele-admin-tabs' 类
|
|
|
+ element.classList.add('new-ele-admin-tabs');
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ destroyed() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ const targetElements =
|
|
|
+ document.getElementsByClassName('ele-admin-tabs');
|
|
|
+ if (targetElements.length > 0) {
|
|
|
+ Array.from(targetElements).forEach((element) => {
|
|
|
+ element.classList.remove('new-ele-admin-tabs');
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ };
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+ // .content_box {
|
|
|
+ // display: flex;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // .content_box_tab {
|
|
|
+ // width: 220px;
|
|
|
+ // padding: 5px;
|
|
|
+ // height: 100vh;
|
|
|
+ // background-color: #fff;
|
|
|
+ // overflow-y: auto;
|
|
|
+ // border: 1px solid blue;
|
|
|
+ // }
|
|
|
+
|
|
|
+ .footBtn {
|
|
|
+ position: absolute;
|
|
|
+ bottom: 20px;
|
|
|
+ left: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .new-ele-admin-tabs {
|
|
|
+ display: none !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c_title {
|
|
|
+ color: #157a2c;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tableZ_box {
|
|
|
+ border: 1px solid #e3e5e5;
|
|
|
+ margin: 6px 0;
|
|
|
+
|
|
|
+ &:last-child {
|
|
|
+ border-bottom: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .row {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col {
|
|
|
+ width: calc(100% / 5);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ min-width: 200px;
|
|
|
+ min-height: 32px;
|
|
|
+ border-bottom: 1px solid #e3e5e5;
|
|
|
+ border-right: 1px solid #e3e5e5;
|
|
|
+
|
|
|
+ &:last-child {
|
|
|
+ border-right: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .name {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 4px;
|
|
|
+ width: 80px;
|
|
|
+ height: 100%;
|
|
|
+ background-color: #d0e4d5;
|
|
|
+ color: #000;
|
|
|
+ }
|
|
|
+
|
|
|
+ .content {
|
|
|
+ padding: 4px 6px;
|
|
|
+ color: #000;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .pd6 {
|
|
|
+ padding: 0 6px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|
|
|
+<style lang="scss" scoped>
|
|
|
+ .seek-list {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 10px 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .right_main_box {
|
|
|
+ background-color: #fff;
|
|
|
+ height: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ }
|
|
|
+
|
|
|
+ .index_box {
|
|
|
+ padding: 10px;
|
|
|
+ padding-bottom: 0;
|
|
|
+ width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ min-width: 1280px !important;
|
|
|
+ height: calc(100vh - 60px);
|
|
|
+ // overflow-x: auto;
|
|
|
+ /* 当内容超出宽度时,允许水平滚动 */
|
|
|
+ white-space: nowrap;
|
|
|
+ /* 防止内部文本换行,确保所有内容都在一行显示 */
|
|
|
+ scrollbar-width: thin;
|
|
|
+ /* 设置滚动条宽度(浏览器兼容性可能有所不同) */
|
|
|
+ scrollbar-color: #40a9ff transparent;
|
|
|
+ /* 设置滚动条颜色和轨道颜色(同样,浏览器兼容性) */
|
|
|
+ }
|
|
|
+
|
|
|
+ .main {
|
|
|
+ width: 100%;
|
|
|
+ min-width: 1280px;
|
|
|
+
|
|
|
+ // height: calc(100vh - 242px);
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ }
|
|
|
+
|
|
|
+ .left_main {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: space-around;
|
|
|
+ // min-width: 640px;
|
|
|
+
|
|
|
+ .top {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ overflow: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ // .bottom {
|
|
|
+ // width: 100%;
|
|
|
+ // min-height: calc((100vh - 70px - 50px - 80px - 20px) / 2);
|
|
|
+ // overflow: hidden;
|
|
|
+ // }
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-tabs__item.is-active {
|
|
|
+ background-color: #dffade;
|
|
|
+ /* 蓝色背景 */
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .is-active {
|
|
|
+ color: #dffade;
|
|
|
+ }
|
|
|
+
|
|
|
+ .right_main {
|
|
|
+ width: 100%;
|
|
|
+ padding-bottom: 12px;
|
|
|
+ height: calc((100vh - 230px));
|
|
|
+ background: #f0f3f3;
|
|
|
+ border: 1px solid rgb(207, 215, 207);
|
|
|
+ }
|
|
|
+
|
|
|
+ .drawer_content {
|
|
|
+ margin: 5px 20px;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ .taskTitle {
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ align-items: center;
|
|
|
+ flex-direction: row;
|
|
|
+ justify-content: center;
|
|
|
+ font-size: 18px;
|
|
|
+ color: green;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .is-fullscreen {
|
|
|
+ width: 100vw !important;
|
|
|
+ height: 100vh !important;
|
|
|
+ overflow: hidden !important; /* 隐藏滚动条 */
|
|
|
+ }
|
|
|
+ ::v-deep .not-fullscreen {
|
|
|
+ width: calc(100vw - 230px) !important;
|
|
|
+ height: 100vh !important;
|
|
|
+ overflow: hidden !important; /* 隐藏滚动条 */
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .active .is-text {
|
|
|
+ background: #ffa929; /* 背景色 */
|
|
|
+ border-color: #ffa929;
|
|
|
+ color: #ffffff; /* 图标文字颜色 */
|
|
|
+ }
|
|
|
+</style>
|