|
|
@@ -0,0 +1,1386 @@
|
|
|
+<template>
|
|
|
+ <div class="ele-body">
|
|
|
+ <el-card shadow="never" v-loading="loading">
|
|
|
+ <seek-page :seekList="seekList" @search="search"></seek-page>
|
|
|
+ <!-- <el-tabs v-model="tabValue" type="card" @tab-click="handleTabClick"> -->
|
|
|
+ <!-- <el-tab-pane label="未完成工单" name="first"></el-tab-pane>
|
|
|
+ <el-tab-pane label="已完成工单" name="second"></el-tab-pane> -->
|
|
|
+ <!-- <el-tab-pane label="我的工单" name="1"></el-tab-pane>
|
|
|
+ <el-tab-pane label="生产中" name="5"></el-tab-pane>
|
|
|
+ <el-tab-pane label="待生产" name="4"></el-tab-pane>
|
|
|
+ <el-tab-pane label="已完成" name="6"></el-tab-pane>
|
|
|
+ <el-tab-pane label="已延期" name="7"></el-tab-pane>
|
|
|
+ <el-tab-pane label="已终止" name="10"></el-tab-pane>
|
|
|
+ </el-tabs> -->
|
|
|
+ <!-- 数据表格 -->
|
|
|
+ <!-- :cache-key="cacheKeyUrl" -->
|
|
|
+ <ele-pro-table
|
|
|
+ ref="table"
|
|
|
+ :key="activeName"
|
|
|
+ :initLoad="false"
|
|
|
+ :columns="columns"
|
|
|
+ :datasource="datasource"
|
|
|
+ row-key="code"
|
|
|
+ :selection.sync="selection"
|
|
|
+ @sort-change="onSortChange"
|
|
|
+ autoAmendPage
|
|
|
+ :parse-data="parseData"
|
|
|
+ @columns-change="handleColumnChange"
|
|
|
+ :cache-key="cacheKeyUrl"
|
|
|
+ :pageSize="20"
|
|
|
+ :height="tableHeight"
|
|
|
+ @fullscreen-change="fullscreenChange"
|
|
|
+ >
|
|
|
+ <template v-slot:toolbar>
|
|
|
+ <!-- <el-button type="success">新建</el-button> -->
|
|
|
+ <!-- <el-button type="success" @click="toPause()">暂停</el-button> -->
|
|
|
+ <!-- <el-button type="success" @click="toTermination()">终止</el-button> -->
|
|
|
+
|
|
|
+ <!-- <el-button type="primary">工单刷新</el-button> -->
|
|
|
+ <!-- <el-button type="success" @click="handlePicking">领料</el-button> -->
|
|
|
+ <!-- <el-button type="success" @click="toEnd()">批量完结</el-button> -->
|
|
|
+ <!-- <el-button type="success" @click="handleCreate">创建工单</el-button> -->
|
|
|
+ <!-- <el-button type="success">工单操作控制</el-button> -->
|
|
|
+
|
|
|
+ <!-- <el-button type="success" @click="allPrinting()"
|
|
|
+ >批量打印二维码</el-button
|
|
|
+ > -->
|
|
|
+
|
|
|
+ <!-- <el-button type="success" @click="cardPrinting()"
|
|
|
+ >工艺卡打印</el-button
|
|
|
+ > -->
|
|
|
+
|
|
|
+ <!-- <el-button type="success" @click="originCode()">朔源码</el-button> -->
|
|
|
+
|
|
|
+ <!-- <el-button v-if="tabValue == '6'" type="success" @click="batchRelease"
|
|
|
+ >批量放行</el-button
|
|
|
+ > -->
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:code="{ row }">
|
|
|
+ <el-link type="primary" :underline="false" @click="goDetail(row)">
|
|
|
+ {{ row.code }}
|
|
|
+ </el-link>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:QRcode="{ row }">
|
|
|
+ <el-link type="primary" :underline="false" @click="handleQRcode(row)"
|
|
|
+ >生成二维码
|
|
|
+ </el-link>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:apsWorkOrderCode="{ row }">
|
|
|
+ <label>{{ row.apsWorkOrderCode || '' }}</label>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:priority="{ row }">
|
|
|
+ <div style="display: flex">
|
|
|
+ <el-input
|
|
|
+ v-model="row.priority"
|
|
|
+ type="number"
|
|
|
+ size="mini"
|
|
|
+ :min="0"
|
|
|
+ :max="10"
|
|
|
+ @change="priorityChange(row)"
|
|
|
+ style="width: 80px"
|
|
|
+ ></el-input>
|
|
|
+ <el-popover
|
|
|
+ placement="right"
|
|
|
+ width="200"
|
|
|
+ trigger="hover"
|
|
|
+ content="数值越大优先级越高(0-3普通, 4-6优先, 7-10紧急)"
|
|
|
+ >
|
|
|
+ <div class="sort-wrap" slot="reference">
|
|
|
+ <i class="el-icon-caret-top" @click="sortTop(row)"></i>
|
|
|
+ <i class="el-icon-caret-bottom" @click="sortBottom(row)"></i>
|
|
|
+ </div>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:formingNum="{ row }">
|
|
|
+ <span> {{ row.formingNum }} </span>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:formingWeight="{ row }">
|
|
|
+ <span> {{ row.formingWeight }} {{ row.weightUnit }} </span>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:singleReport="{ row }">
|
|
|
+ <span v-if="row.singleReport == 0">批量报工</span>
|
|
|
+ <span v-if="row.singleReport == 1">单个报工</span>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:sourceType="{ row }">
|
|
|
+ <span v-if="row.sourceType == 1">生产计划</span>
|
|
|
+ <span v-if="row.sourceType == 2">临时生产计划</span>
|
|
|
+ <span v-if="row.sourceType == 3">受托转订单</span>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:workOrderType="{ row }">
|
|
|
+ <span v-if="row.workOrderType == 1">普通订单</span>
|
|
|
+ <span v-if="row.workOrderType == 2">临时订单</span>
|
|
|
+ <span v-if="row.workOrderType == 3">受托订单</span>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:entrustStatus="{ row }">
|
|
|
+ <div v-if="row.entrustStatus">
|
|
|
+ <span v-if="row.entrustStatus == 1">未请托</span>
|
|
|
+ <span v-if="row.entrustStatus == 2">请托中</span>
|
|
|
+ <span v-if="row.entrustStatus == 3">请托完成</span>
|
|
|
+ </div>
|
|
|
+ <span v-else>未请托</span>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:outsourceStatus="{ row }">
|
|
|
+ <div v-if="row.outsourceStatus">
|
|
|
+ <span v-if="row.outsourceStatus == 1">未委外</span>
|
|
|
+ <span v-if="row.outsourceStatus == 2">委外中</span>
|
|
|
+ <span v-if="row.outsourceStatus == 3">完成委外</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #taskName="{ row }">
|
|
|
+ <div v-if="taskNameMap[row.id]?.length" class="task-flow">
|
|
|
+ <template v-for="(item, index) in taskNameMap[row.id]">
|
|
|
+ <el-tag
|
|
|
+ :key="item.taskId"
|
|
|
+ size="mini"
|
|
|
+ effect="dark"
|
|
|
+ :type="getTaskTagTypeByStatus(item.flag)"
|
|
|
+ >
|
|
|
+ {{ item.taskTypeName }}
|
|
|
+ </el-tag>
|
|
|
+
|
|
|
+ <!-- 箭头 -->
|
|
|
+ <span
|
|
|
+ v-if="index < taskNameMap[row.id].length - 1"
|
|
|
+ class="task-arrow"
|
|
|
+ >
|
|
|
+ →
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ <span v-else>—</span>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:status="{ row }">
|
|
|
+ <span :class="{ 'ele-text-danger': row.status == 3 }">
|
|
|
+ {{ statusFormatter(row.status) }}
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ <!-- 操作列 -->
|
|
|
+ <template v-slot:action="{ row }">
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click="handelRouterTo(row)"
|
|
|
+ >
|
|
|
+ 详情
|
|
|
+ </el-link>
|
|
|
+ <!-- <template v-if="activeName == 'second'">
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ v-if="row.status == 6"
|
|
|
+ @click="toCancel(row)"
|
|
|
+ >
|
|
|
+ 取消完结
|
|
|
+ </el-link></template
|
|
|
+ > -->
|
|
|
+
|
|
|
+ <!-- <el-link
|
|
|
+ v-if="row.clientEnvironmentId == 21"
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click="routing(row)"
|
|
|
+ >
|
|
|
+ 更改工艺路线
|
|
|
+ </el-link> -->
|
|
|
+ <!-- <template>
|
|
|
+ <el-link type="primary" :underline="false" @click="toView(row)">
|
|
|
+ 序列号
|
|
|
+ </el-link></template
|
|
|
+ > -->
|
|
|
+ <!-- <template v-if="activeName != 'second'"> -->
|
|
|
+ <!-- <el-link
|
|
|
+ v-if="
|
|
|
+ (row.status == 4 || row.status == 5 || row.status == 7) &&
|
|
|
+ row.isSplit == 0
|
|
|
+ "
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click="handleOrderPublish(row)"
|
|
|
+ >
|
|
|
+ 报工
|
|
|
+ </el-link> -->
|
|
|
+ <!-- <el-link
|
|
|
+ v-if="
|
|
|
+ row.status == 4 && row.isSplit == 0 && clientEnvironmentId != 9
|
|
|
+ "
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click="toUnpack(row)"
|
|
|
+ >
|
|
|
+ 拆分
|
|
|
+ </el-link> -->
|
|
|
+ <!-- <el-link
|
|
|
+ v-if="row.status == 4 && row.isSplit == 0"
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click="toEnd(row)"
|
|
|
+ >
|
|
|
+ 完结
|
|
|
+ </el-link> -->
|
|
|
+ <!-- <el-link
|
|
|
+ v-if="dispatchBtn(row)"
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click="toReleaseOpen(row)"
|
|
|
+ >
|
|
|
+ 任务派单
|
|
|
+ </el-link> -->
|
|
|
+ <!-- </template> -->
|
|
|
+
|
|
|
+ <!-- <el-link
|
|
|
+ v-if="
|
|
|
+ tabValue == '6' &&
|
|
|
+ row.checklistStatus != 1 &&
|
|
|
+ row.checklistStatus != 2
|
|
|
+ "
|
|
|
+ type="primary"
|
|
|
+ @click="toRelease(row)"
|
|
|
+ >放行单</el-link
|
|
|
+ > -->
|
|
|
+ </template>
|
|
|
+ </ele-pro-table>
|
|
|
+ </el-card>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import {
|
|
|
+ getPage,
|
|
|
+ batchCompletion,
|
|
|
+ cancelCompletion,
|
|
|
+ updatePriority,
|
|
|
+ update,
|
|
|
+ getTaskIdByInstanceId,
|
|
|
+ updateStatusPause,
|
|
|
+ updateStatusTerminate,
|
|
|
+ getMyPage,
|
|
|
+ getTaskInstanceList
|
|
|
+ } from '@/api/mes/produceOrder/index.js';
|
|
|
+ import storageApi from '@/api/warehouseManagement';
|
|
|
+
|
|
|
+ import { debounce } from 'lodash';
|
|
|
+ import tableColumnsMixin from '@/mixins/tableColumnsMixin';
|
|
|
+
|
|
|
+ export default {
|
|
|
+ mixins: [tableColumnsMixin],
|
|
|
+ components: {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ activeName: 'first',
|
|
|
+ tabValue: '1',
|
|
|
+ id: '',
|
|
|
+ where: {},
|
|
|
+ // 加载状态
|
|
|
+ loading: false,
|
|
|
+ pageType: 'add',
|
|
|
+ dialogTitle: '',
|
|
|
+ isBindPlan: false,
|
|
|
+ statusOpt: {
|
|
|
+ first: [
|
|
|
+ { label: '所有状态', value: '5,4' },
|
|
|
+ { label: '待生产', value: '4' },
|
|
|
+ { label: '生产中', value: '5' }
|
|
|
+ // { label: '已延期', value: '7' }
|
|
|
+ ],
|
|
|
+ second: [{ label: '已完成', value: '6' }]
|
|
|
+ },
|
|
|
+ planType: [
|
|
|
+ { label: '所有计划类型', value: null },
|
|
|
+ { label: '内销计划', value: '1' },
|
|
|
+ { label: '外销计划', value: '2' },
|
|
|
+ { label: '预制计划', value: '3' }
|
|
|
+ ],
|
|
|
+ selection: [],
|
|
|
+ columns: [],
|
|
|
+ cacheKeyUrl: '7cc8e5d2-mes-produceOrder-todo',
|
|
|
+ columnsVersion: 0,
|
|
|
+ dispatchVisible: false,
|
|
|
+ dispatchRow: {},
|
|
|
+ tableHeight: 'calc(100vh - 375px)',
|
|
|
+ workDataList: [],
|
|
|
+ taskNameMap: {}
|
|
|
+ };
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ // 表格列配置
|
|
|
+ seekList() {
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ label: '关键字:',
|
|
|
+ value: 'keyWord',
|
|
|
+ type: 'input',
|
|
|
+ placeholder: ''
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '生产工单号:',
|
|
|
+ value: 'code',
|
|
|
+ type: 'input',
|
|
|
+ placeholder: '',
|
|
|
+ labelWidth: 100
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '生产订单号:',
|
|
|
+ value: 'apsWorkOrderCode',
|
|
|
+ type: 'input',
|
|
|
+ labelWidth: 100
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '计划编号:',
|
|
|
+ value: 'productionPlanCode',
|
|
|
+ type: 'input',
|
|
|
+ width: 240
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '计划类型:',
|
|
|
+ value: 'planType',
|
|
|
+ type: 'select',
|
|
|
+
|
|
|
+ placeholder: '',
|
|
|
+ width: 240,
|
|
|
+ // 加载状态
|
|
|
+ planList: this.planType
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '工艺路线',
|
|
|
+ value: 'produceRoutingName',
|
|
|
+ type: 'input',
|
|
|
+
|
|
|
+ placeholder: '',
|
|
|
+ width: 240
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '产品编码',
|
|
|
+ value: 'productCode',
|
|
|
+ type: 'input',
|
|
|
+
|
|
|
+ placeholder: '',
|
|
|
+ width: 240
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ label: '产品名称:',
|
|
|
+ value: 'productName',
|
|
|
+ type: 'input',
|
|
|
+
|
|
|
+ placeholder: '',
|
|
|
+ width: 240
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '牌号',
|
|
|
+ value: 'brandNo',
|
|
|
+ type: 'input',
|
|
|
+
|
|
|
+ placeholder: '',
|
|
|
+ width: 240
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '型号',
|
|
|
+ value: 'model',
|
|
|
+ type: 'input',
|
|
|
+
|
|
|
+ placeholder: '',
|
|
|
+ width: 240
|
|
|
+ },
|
|
|
+ // {
|
|
|
+ // label: "状态:",
|
|
|
+ // value: 'status',
|
|
|
+ // type: "select",
|
|
|
+
|
|
|
+ // placeholder: '',
|
|
|
+ // width: 240,
|
|
|
+ // // 加载状态
|
|
|
+ // planList: this.statusOpt.first
|
|
|
+ // },
|
|
|
+ // {
|
|
|
+ // label: '班组:',
|
|
|
+ // value: 'teamId',
|
|
|
+ // type: 'select',
|
|
|
+ // multiple: false, // 是否多选
|
|
|
+ // filterable: true, // 是否可搜索
|
|
|
+ // placeholder: '',
|
|
|
+ // width: 240,
|
|
|
+ // // 加载状态
|
|
|
+ // planList: this.statusOpt.first
|
|
|
+ // },
|
|
|
+ {
|
|
|
+ label: '创建时间:',
|
|
|
+ value: 'createTime',
|
|
|
+ type: 'date',
|
|
|
+ dateType: 'daterange',
|
|
|
+ placeholder: '',
|
|
|
+ width: 240,
|
|
|
+ // 加载状态
|
|
|
+ planList: this.statusOpt.first
|
|
|
+ }
|
|
|
+ ];
|
|
|
+ },
|
|
|
+ basicColumns() {
|
|
|
+ const num = this.columnsVersion;
|
|
|
+ const opt = {
|
|
|
+ first: [
|
|
|
+ // {
|
|
|
+ // prop: 'deliveryTime',
|
|
|
+ // label: '预测交货日期',
|
|
|
+ // align: 'center',
|
|
|
+ // showOverflowTooltip: true,
|
|
|
+ // minWidth: 110
|
|
|
+ // }
|
|
|
+ ],
|
|
|
+ second: [
|
|
|
+ {
|
|
|
+ prop: 'completeTime',
|
|
|
+ label: '完成时间',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'cycle',
|
|
|
+ label: '生产周期',
|
|
|
+ align: 'center'
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ };
|
|
|
+
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ width: 45,
|
|
|
+ type: 'selection',
|
|
|
+ columnKey: 'selection',
|
|
|
+ align: 'center',
|
|
|
+ fixed: 'left'
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ prop: 'batchNo',
|
|
|
+ label: '批次号',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 130,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ prop: 'lineNumber',
|
|
|
+ label: '行号',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 130,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ prop: 'code',
|
|
|
+ // slot: 'code',
|
|
|
+ label: '生产工单号',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 110,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ // {
|
|
|
+ // prop: 'originalCode',
|
|
|
+ // label: '原始工单号',
|
|
|
+ // align: 'center',
|
|
|
+ // minWidth: 110
|
|
|
+ // },
|
|
|
+
|
|
|
+ // {
|
|
|
+ // prop: 'QRcode',
|
|
|
+ // slot: 'QRcode',
|
|
|
+ // label: '二维码',
|
|
|
+ // align: 'center',
|
|
|
+ // minWidth: 110,
|
|
|
+ // showOverflowTooltip: true
|
|
|
+ // },
|
|
|
+ {
|
|
|
+ prop: 'apsWorkOrderCode',
|
|
|
+ label: '生产订单号',
|
|
|
+ slot: 'apsWorkOrderCode',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 110,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'sourceType',
|
|
|
+ label: '来源类型',
|
|
|
+ slot: 'sourceType',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 110,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'sourceCode',
|
|
|
+ label: '来源编码',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 110,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'workOrderType',
|
|
|
+ label: '订单类型',
|
|
|
+ slot: 'workOrderType',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 110,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'productionPlanCode',
|
|
|
+ label: '计划编号',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 110,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'planType',
|
|
|
+ label: '计划类型',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ formatter: (row) => {
|
|
|
+ const obj = this.planType.find((i) => i.value == row.planType);
|
|
|
+ return obj && obj.label;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'bomType',
|
|
|
+ label: '生产类型',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ width: 120,
|
|
|
+ formatter: (row) => {
|
|
|
+ if (row.bomType == 1) {
|
|
|
+ return '产品(PBOM)';
|
|
|
+ }
|
|
|
+ if (row.bomType == 2) {
|
|
|
+ return '加工(MBOM)';
|
|
|
+ }
|
|
|
+ if (row.bomType == 3) {
|
|
|
+ return '装配(ABOM)';
|
|
|
+ }
|
|
|
+ // if (row.bomType == 4) {
|
|
|
+ // return '装配(EBOM)';
|
|
|
+ // }
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'bomCategoryName',
|
|
|
+ label: 'BOM版本',
|
|
|
+ align: 'center',
|
|
|
+ width: 130,
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ formatter: (row) => {
|
|
|
+ if (row.bomCategoryName) {
|
|
|
+ return `${row.bomCategoryName} (V${row.bomCategoryVersions}.0)`;
|
|
|
+ }
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'produceRoutingName',
|
|
|
+ label: '工艺路线',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'productCode',
|
|
|
+ label: '编码',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'colorKey',
|
|
|
+ label: '颜色',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ prop: 'modelKey',
|
|
|
+ label: '机型',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'productName',
|
|
|
+ label: '名称',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'model',
|
|
|
+ label: '型号',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'specification',
|
|
|
+ label: '规格',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'productionCodes',
|
|
|
+ label: '生产编号',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 150,
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'brandNo',
|
|
|
+ label: '牌号',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'taskName',
|
|
|
+ slot: 'taskName',
|
|
|
+ label: '工序进度',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 280
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'singleReport',
|
|
|
+ slot: 'singleReport',
|
|
|
+ label: '报工类型',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'outsourceStatus',
|
|
|
+ label: '委外状态',
|
|
|
+ align: 'center',
|
|
|
+ slot: 'outsourceStatus',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'priority',
|
|
|
+ label: '优先级',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 120,
|
|
|
+ slot: 'priority',
|
|
|
+ sortable: 'custom'
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ prop: 'formingNum',
|
|
|
+ label: '要求生产数量',
|
|
|
+ align: 'center',
|
|
|
+ slot: 'formingNum',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'unit',
|
|
|
+ label: '单位',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'factoriesName',
|
|
|
+ label: '所属工厂',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'formingWeight',
|
|
|
+ label: '要求生产重量',
|
|
|
+ slot: 'formingWeight',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'formedNum',
|
|
|
+ label: '已生产数量',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'formedWeight',
|
|
|
+ label: '已生产重量',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'planStartTime',
|
|
|
+ label: '计划开始时间',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 150,
|
|
|
+ sortable: 'custom'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'planCompleteTime',
|
|
|
+ label: '计划结束时间',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 150,
|
|
|
+ sortable: 'custom'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'startTime',
|
|
|
+ label: '实际开始时间',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 150,
|
|
|
+ sortable: 'custom'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'completeTime',
|
|
|
+ label: '实际完成时间',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 150,
|
|
|
+ sortable: 'custom'
|
|
|
+ },
|
|
|
+ ...opt[this.activeName],
|
|
|
+ {
|
|
|
+ prop: 'createTime',
|
|
|
+ label: '创建时间',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 150,
|
|
|
+ sortable: 'custom'
|
|
|
+ },
|
|
|
+ // {
|
|
|
+ // prop: 'status',
|
|
|
+ // slot: 'status',
|
|
|
+ // label: '状态',
|
|
|
+ // align: 'center',
|
|
|
+ // formatter: (row) => {
|
|
|
+ // const obj = this.statusOpt[this.activeName].find(
|
|
|
+ // (i) => i.value == row.status
|
|
|
+ // );
|
|
|
+ // return obj && obj.label;
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ {
|
|
|
+ prop: 'deviceName',
|
|
|
+ slot: 'deviceName',
|
|
|
+ label: '设备名称',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'entrustStatus',
|
|
|
+ label: '请托状态',
|
|
|
+ align: 'center',
|
|
|
+ slot: 'entrustStatus',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'crewNames',
|
|
|
+ slot: 'crewNames',
|
|
|
+ label: '报工人员',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ prop: 'teamName',
|
|
|
+ label: '班组',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ }
|
|
|
+ ];
|
|
|
+ },
|
|
|
+ dispatchBtn() {
|
|
|
+ return (row) => {
|
|
|
+ if (Number(row.taskId) == NaN || Number(row.taskId) <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return !!row.taskId;
|
|
|
+ };
|
|
|
+ },
|
|
|
+ clientEnvironmentId() {
|
|
|
+ return this.$store.state.user.info.clientEnvironmentId;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ activeName: {
|
|
|
+ handler() {
|
|
|
+ if (this.activeName) {
|
|
|
+ this.where.status = this.statusOpt[this.activeName][0].value;
|
|
|
+ this.reload();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ immediate: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.getFieldModel();
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.reload();
|
|
|
+ },
|
|
|
+
|
|
|
+ methods: {
|
|
|
+ handelRouterTo(row) {
|
|
|
+ window.history.pushState(null, '', '/page-mes/produceOrder?businessId=' + row.id);
|
|
|
+ // this.$router.push(path);
|
|
|
+ },
|
|
|
+ //派单
|
|
|
+ toReleaseOpen(row) {
|
|
|
+ getTaskIdByInstanceId(row.taskId)
|
|
|
+ .then((res) => {
|
|
|
+ if (res) {
|
|
|
+ this.dispatchRow = { ...row };
|
|
|
+ this.dispatchRow.initialWeight = row.formingWeight
|
|
|
+ ? row.formingWeight + row.weightUnit
|
|
|
+ : '';
|
|
|
+ this.dispatchRow.taskInstanceId = res;
|
|
|
+ this.dispatchVisible = true;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.$message.error(err.message);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ search(e) {
|
|
|
+ if (Array.isArray(e.createTime) && e.createTime.length) {
|
|
|
+ e.createTimeStart = e.createTime[0];
|
|
|
+ e.createTimeEnd = e.createTime[1];
|
|
|
+ }
|
|
|
+ this.reload(e);
|
|
|
+ },
|
|
|
+
|
|
|
+ // 查看序列号
|
|
|
+ toView(row) {
|
|
|
+ this.$refs.xlhRef.open(row);
|
|
|
+ },
|
|
|
+
|
|
|
+ handlePicking() {
|
|
|
+ this.$router.push({
|
|
|
+ path: '/produceOrder/picking'
|
|
|
+ });
|
|
|
+ },
|
|
|
+ statusFormatter(status) {
|
|
|
+ const obj = this.statusOpt[this.activeName].find(
|
|
|
+ (i) => i.value == status
|
|
|
+ );
|
|
|
+
|
|
|
+ return obj && obj.label;
|
|
|
+ },
|
|
|
+
|
|
|
+ btnPrint() {
|
|
|
+ const url = this.$router.resolve({ path: '/print' }).href; // 获取目标URL路径的完整URL字符串
|
|
|
+ window.open(url, '_blank');
|
|
|
+ // this.$router.push({
|
|
|
+ // path: '/print'
|
|
|
+ // });
|
|
|
+ },
|
|
|
+
|
|
|
+ routing(row) {
|
|
|
+ this.id = row.id;
|
|
|
+
|
|
|
+ this.$refs.equipmentRef.open();
|
|
|
+ },
|
|
|
+ handleTabClick() {
|
|
|
+ if (this.tabValue == '6') {
|
|
|
+ this.activeName = 'second';
|
|
|
+ } else {
|
|
|
+ this.activeName = 'first';
|
|
|
+ }
|
|
|
+ this.reload();
|
|
|
+ },
|
|
|
+
|
|
|
+ async loadTaskNames(list) {
|
|
|
+ for (const row of list) {
|
|
|
+ try {
|
|
|
+ const res = await getTaskInstanceList(row.id);
|
|
|
+ const findIndex = res.findIndex(
|
|
|
+ (item) => item.taskId == row.taskId
|
|
|
+ );
|
|
|
+
|
|
|
+ const markedList = res.map((item, index) => {
|
|
|
+ let flag = 'after';
|
|
|
+
|
|
|
+ if (findIndex != -1) {
|
|
|
+ if (index < findIndex) {
|
|
|
+ flag = '4';
|
|
|
+ } else if (index === findIndex) {
|
|
|
+ flag = '3';
|
|
|
+ } else {
|
|
|
+ flag = '1';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ flag
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ this.$set(this.taskNameMap, row.id, markedList);
|
|
|
+
|
|
|
+ // this.$set(
|
|
|
+ // this.taskNameMap,
|
|
|
+ // row.taskId,
|
|
|
+ // res.list.map((i) => i.name)
|
|
|
+ // );
|
|
|
+ // console.log(res, '工序数据');
|
|
|
+ } catch (e) {
|
|
|
+ this.$set(this.taskNameMap, row.id, []);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.table?.doLayout?.();
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ getTaskTagTypeByStatus(status) {
|
|
|
+ return (
|
|
|
+ {
|
|
|
+ 1: 'info',
|
|
|
+ 2: 'primary',
|
|
|
+ 3: 'warning',
|
|
|
+ 4: 'success'
|
|
|
+ }[status] || ''
|
|
|
+ );
|
|
|
+ },
|
|
|
+
|
|
|
+ originCode() {
|
|
|
+ if (!this.selection.length) {
|
|
|
+ return this.$message.warning('请至少选择一条工单!');
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.selection.length > 1) {
|
|
|
+ return this.$message.warning('只能选择一条工单');
|
|
|
+ }
|
|
|
+
|
|
|
+ this.$refs.originCodeRef.open(this.selection[0].id);
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 表格数据源 */
|
|
|
+ async datasource({ page, limit, where, order }) {
|
|
|
+ console.log(this.tabValue, '888');
|
|
|
+ let statusList = this.tabValue == 1 ? [4, 5, 7] : [this.tabValue];
|
|
|
+
|
|
|
+ let params = {
|
|
|
+ ...where,
|
|
|
+ ...order,
|
|
|
+ queryTermination: this.tabValue == '10' ? 1 : 0,
|
|
|
+ pageNum: page,
|
|
|
+ size: limit,
|
|
|
+ ...this.sort
|
|
|
+ };
|
|
|
+
|
|
|
+ // 只有 tabValue == 1 才可能需要 workCenterIds 字段,可根据业务决定是否添加
|
|
|
+ if (this.tabValue == 1) {
|
|
|
+ params.workCenterIds = this.$store.state.user.info.workCenterIds;
|
|
|
+ }
|
|
|
+
|
|
|
+ const URL = this.tabValue == 1 ? getMyPage : getPage;
|
|
|
+
|
|
|
+ let res = await URL({ ...params, statusList });
|
|
|
+
|
|
|
+ this.loadTaskNames(res.list);
|
|
|
+
|
|
|
+ return res;
|
|
|
+ },
|
|
|
+
|
|
|
+ getWorkData() {
|
|
|
+ if (this.$refs.table.getData().length != 0) {
|
|
|
+ // const data = this.deep()
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ onSortChange(e) {
|
|
|
+ let sort = {
|
|
|
+ orderBy: e.order,
|
|
|
+ sortName: e.prop
|
|
|
+ };
|
|
|
+ this.sort = sort;
|
|
|
+ this.reload();
|
|
|
+ },
|
|
|
+ flattenArray(arr) {
|
|
|
+ var result = []; // 存放结果的数组
|
|
|
+ for (let i = 0; i < arr.length; i++) {
|
|
|
+ if (Array.isArray(arr[i].subWorkOrder)) {
|
|
|
+ let _arr = [];
|
|
|
+ _arr = _arr.concat(arr[i].subWorkOrder);
|
|
|
+ delete arr[i].subWorkOrder;
|
|
|
+ result.push(arr[i]);
|
|
|
+ result.push(..._arr);
|
|
|
+ } else {
|
|
|
+ result.push(arr[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 数据转为树形结构 */
|
|
|
+ parseData(data) {
|
|
|
+ return {
|
|
|
+ ...data,
|
|
|
+ list: this.$util.toTreeData({
|
|
|
+ data: data.list,
|
|
|
+ count: data.total,
|
|
|
+
|
|
|
+ idField: 'code',
|
|
|
+ parentIdField: 'originalCode'
|
|
|
+ })
|
|
|
+ };
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 数据转为树形结构 */
|
|
|
+
|
|
|
+ createSuccess() {
|
|
|
+ this.reload();
|
|
|
+ },
|
|
|
+ handleCreate() {
|
|
|
+ this.$refs.createRef.open(0);
|
|
|
+ },
|
|
|
+ // 发布工单
|
|
|
+ handleOrderPublish(row) {
|
|
|
+ this.$refs.workReport.open(row);
|
|
|
+ // this.$router.push({
|
|
|
+ // path: '/produce',
|
|
|
+ // query: {
|
|
|
+ // workOrderId: row.id
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // this.$router.push({
|
|
|
+ // path: '/produceOrder/workReport',
|
|
|
+ // query: {
|
|
|
+ // workOrderId: row.id
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ },
|
|
|
+
|
|
|
+ fullscreenChange(fullscreen) {
|
|
|
+ if (fullscreen) {
|
|
|
+ this.tableHeight = 'calc(100vh - 120px)';
|
|
|
+ } else {
|
|
|
+ this.tableHeight = 'calc(100vh - 375px)';
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ getFieldModel() {
|
|
|
+ storageApi.fieldModel({ fieldModel: 't_main_category' }).then((res) => {
|
|
|
+ const privateColumn = [
|
|
|
+ {
|
|
|
+ columnKey: 'action',
|
|
|
+ label: '操作',
|
|
|
+ width: 120,
|
|
|
+ align: 'center',
|
|
|
+ resizable: false,
|
|
|
+ fixed: 'right',
|
|
|
+ slot: 'action',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ }
|
|
|
+ ];
|
|
|
+
|
|
|
+ let newRes = res.map((m) => {
|
|
|
+ return {
|
|
|
+ prop: 'extField.' + m.prop,
|
|
|
+ label: m.label,
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ this.columns = [...this.basicColumns, ...newRes, ...privateColumn];
|
|
|
+ this.getTabColumns();
|
|
|
+ this.$forceUpdate();
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ toPause() {
|
|
|
+ if (!this.selection.length) {
|
|
|
+ return this.$message.warning('请至少选择一条工单!');
|
|
|
+ }
|
|
|
+
|
|
|
+ let ids = [];
|
|
|
+
|
|
|
+ this.selection.forEach((item) => {
|
|
|
+ ids.push(item.id);
|
|
|
+ });
|
|
|
+ this.$confirm(`是否要暂停工单?`, '提醒', {
|
|
|
+ confirmButtonText: '确认',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ updateStatusPause(ids).then((res) => {
|
|
|
+ this.$message.success('成功');
|
|
|
+ this.reload();
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+ },
|
|
|
+
|
|
|
+ toTermination() {
|
|
|
+ if (!this.selection.length) {
|
|
|
+ return this.$message.warning('请至少选择一条工单!');
|
|
|
+ }
|
|
|
+
|
|
|
+ let ids = [];
|
|
|
+
|
|
|
+ this.selection.forEach((item) => {
|
|
|
+ ids.push(item.id);
|
|
|
+ });
|
|
|
+ this.$confirm(`是否要终止工单?`, '提醒', {
|
|
|
+ confirmButtonText: '确认',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ updateStatusTerminate(ids).then((res) => {
|
|
|
+ this.$message.success('成功');
|
|
|
+ this.reload();
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+ },
|
|
|
+
|
|
|
+ // 完结与批量完结
|
|
|
+ toEnd(row) {
|
|
|
+ if (row) {
|
|
|
+ this.$confirm(`是否要完结工单【${row.code}】?`, '提醒', {
|
|
|
+ confirmButtonText: '确认',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ batchCompletion([row.id]).then((res) => {
|
|
|
+ this.$message.success('成功');
|
|
|
+ this.reload();
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+ } else {
|
|
|
+ if (!this.selection.length) {
|
|
|
+ return this.$message.warning('请至少选择一条工单!');
|
|
|
+ }
|
|
|
+ const ids = [];
|
|
|
+ this.selection.map((item) => {
|
|
|
+ ids.push(item.id);
|
|
|
+ });
|
|
|
+ const h = this.$createElement;
|
|
|
+ this.$msgbox({
|
|
|
+ title: '提醒',
|
|
|
+ message: h('p', null, [
|
|
|
+ h('span', null, '是否要完结 '),
|
|
|
+ h(
|
|
|
+ 'span',
|
|
|
+ { style: 'color: #70B603' },
|
|
|
+ `${this.selection.length}`
|
|
|
+ ),
|
|
|
+ h('span', null, ' 条工单?')
|
|
|
+ ]),
|
|
|
+ showCancelButton: true,
|
|
|
+ confirmButtonText: '确认',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ batchCompletion(ids).then((res) => {
|
|
|
+ this.$message.success('成功');
|
|
|
+ this.reload();
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 取消完结
|
|
|
+ toCancel(row) {
|
|
|
+ cancelCompletion([row.id]).then((res) => {
|
|
|
+ this.$message.success('成功');
|
|
|
+ this.reload();
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 拆分
|
|
|
+ toUnpack(row) {
|
|
|
+ this.$refs.unpackRef.open(row);
|
|
|
+ },
|
|
|
+ handleTabChange() {
|
|
|
+ this.$refs.searchRef.reset();
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 刷新表格 */
|
|
|
+ reload(where = {}) {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ where.statusList = (
|
|
|
+ where.status || this.statusOpt[this.activeName][0].value
|
|
|
+ ).split(',');
|
|
|
+ this.$refs.table.reload({ page: 1, where });
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 生产工单跳转
|
|
|
+ goDetail(row) {
|
|
|
+ this.$refs.detailsRef.open(row);
|
|
|
+ },
|
|
|
+ handleDelete({ id }) {
|
|
|
+ this.$confirm('确定删除当前数据?', '提示').then(async () => {
|
|
|
+ await del(id);
|
|
|
+ this.$message.success('删除成功!');
|
|
|
+ this.reload();
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ handleQRcode(row) {
|
|
|
+ console.log('clientEnvironmentId', this.clientEnvironmentId);
|
|
|
+ if (this.clientEnvironmentId == 2) {
|
|
|
+ this.$refs.printSrRef.open([row.id]);
|
|
|
+ } else if (this.clientEnvironmentId == 3) {
|
|
|
+ this.$refs.printTgRef.open([row.id]);
|
|
|
+ } else {
|
|
|
+ this.$refs.printRef.open([row.id]);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ allPrinting() {
|
|
|
+ let ids = this.findAllIds(this.selection);
|
|
|
+ if (this.clientEnvironmentId == 2) {
|
|
|
+ this.$refs.printSrRef.open(ids);
|
|
|
+ } else if (this.clientEnvironmentId == 3) {
|
|
|
+ this.$refs.printTgRef.open(ids);
|
|
|
+ } else {
|
|
|
+ this.$refs.printRef.open(ids);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 工艺卡打印
|
|
|
+ cardPrinting() {
|
|
|
+ if (this.selection.length < 1) {
|
|
|
+ return this.$message.warning('请选择一条工单!');
|
|
|
+ }
|
|
|
+ let ids = this.findAllIds(this.selection);
|
|
|
+ this.$refs.printCardRef.open(ids);
|
|
|
+ },
|
|
|
+
|
|
|
+ findAllIds(nodes) {
|
|
|
+ let ids = [];
|
|
|
+ nodes.forEach((node) => {
|
|
|
+ ids.push(node.id); // 添加当前节点的id
|
|
|
+ if (node.children && node.children.length > 0) {
|
|
|
+ // 递归调用自身来处理子节点
|
|
|
+ ids = ids.concat(this.findAllIds(node.children));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return ids;
|
|
|
+ },
|
|
|
+
|
|
|
+ choose(row) {
|
|
|
+ this.updateFn(row);
|
|
|
+ },
|
|
|
+
|
|
|
+ async updateFn(row) {
|
|
|
+ let req = {
|
|
|
+ id: this.id, //工艺路线id false
|
|
|
+ produceRoutingId: row[0].id, //工艺路线id false
|
|
|
+ produceRoutingName: row[0].name
|
|
|
+ };
|
|
|
+ const res = await update(req);
|
|
|
+ this.reload();
|
|
|
+ },
|
|
|
+
|
|
|
+ sortTop(row) {
|
|
|
+ row.priority = Number(row.priority) + 1;
|
|
|
+ this.priorityChange(row);
|
|
|
+ },
|
|
|
+ sortBottom(row) {
|
|
|
+ if (row.priority <= 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ row.priority = Number(row.priority) - 1;
|
|
|
+ this.priorityChange(row);
|
|
|
+ },
|
|
|
+
|
|
|
+ priorityChange(row) {
|
|
|
+ if (row.priority > 10) {
|
|
|
+ row.priority = 10; // 如果大于 10,则设置为 10
|
|
|
+ } else if (row.priority < 0) {
|
|
|
+ row.priority = 0; // 如果小于 0,则设置为 0
|
|
|
+ }
|
|
|
+
|
|
|
+ this.priorityFn(row);
|
|
|
+ },
|
|
|
+ priorityFn: debounce(function (row) {
|
|
|
+ let params = {
|
|
|
+ id: row.id,
|
|
|
+ priority: row.priority
|
|
|
+ };
|
|
|
+ updatePriority(params).then((res) => {});
|
|
|
+ }, 800),
|
|
|
+ // 批量放行
|
|
|
+ batchRelease() {
|
|
|
+ if (!this.selection.length) {
|
|
|
+ return this.$message.warning('请至少选择一条工单!');
|
|
|
+ }
|
|
|
+ console.log('this.selection', this.selection);
|
|
|
+
|
|
|
+ const productCode = this.selection[0].productCode;
|
|
|
+ const batchNo = this.selection[0].batchNo;
|
|
|
+ const isSame = this.selection.every(
|
|
|
+ (item) => item.productCode === productCode && item.batchNo === batchNo
|
|
|
+ );
|
|
|
+
|
|
|
+ const item = this.selection.find(
|
|
|
+ (item) => item.checklistStatus === 1 || item.checklistStatus === 2
|
|
|
+ );
|
|
|
+
|
|
|
+ if (item) {
|
|
|
+ this.$message.warning(
|
|
|
+ `工单【${item.code}】已生成或已完成放行单,不能重复放行`
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!isSame) {
|
|
|
+ this.$message.warning('请选择同产品同批次号工单发起批量放行');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 添加
|
|
|
+ this.$refs.checkAddRef?.open('add', '1', this.selection);
|
|
|
+ },
|
|
|
+ // 单个放行
|
|
|
+ toRelease(row) {
|
|
|
+ this.$refs.checkAddRef?.open('add', '1', [row]);
|
|
|
+ },
|
|
|
+ // 确定放行
|
|
|
+ checkAddConfirm(type, data) {
|
|
|
+ this.$refs.checkDetailsRef?.open(type, data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+ .task-flow {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .task-arrow {
|
|
|
+ margin: 0 6px;
|
|
|
+ color: #999;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+</style>
|