evoToK3Cloud-vue/src/views/system/route/index.vue
2024-11-18 09:01:40 +08:00

1062 lines
39 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<!-- <el-form-item label="工艺路线描述" prop="routeDescription">
<el-input
v-model="queryParams.routeDescription"
placeholder="请输入工艺路线描述"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料编码" prop="materialCode">
<el-input
v-model="queryParams.materialCode"
placeholder="请输入物料编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input
v-model="queryParams.materialName"
placeholder="请输入物料名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input
v-model="queryParams.unit"
placeholder="请输入单位"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工序号" prop="processNo">
<el-input
v-model="queryParams.processNo"
placeholder="请输入工序号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工作中心" prop="workCenter">
<el-input
v-model="queryParams.workCenter"
placeholder="请输入工作中心"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工序名称" prop="processName">
<el-input
v-model="queryParams.processName"
placeholder="请输入工序名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="原材料编码" prop="rawMaterialCode">
<el-input
v-model="queryParams.rawMaterialCode"
placeholder="请输入原材料编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="原材料名称" prop="rawMaterialName">
<el-input
v-model="queryParams.rawMaterialName"
placeholder="请输入原材料名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="金碟重量" prop="discWeight">
<el-input
v-model="queryParams.discWeight"
placeholder="请输入金碟重量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="金碟用量" prop="discUsage">
<el-input
v-model="queryParams.discUsage"
placeholder="请输入金碟用量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工序说明" prop="processDescription">
<el-input
v-model="queryParams.processDescription"
placeholder="请输入工序说明"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>-->
<el-form :model="queryParams">
<el-form-item label="项目令号" prop="routeDescription">
<el-select v-model="queryParams.routeDescription" filterable remote :remote-method="handleQuery1"
placeholder="请输入令号" clearable :loading="loading">
<el-option v-for="item in projectCodes" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- <el-form-item label="工序控制" prop="processControl">
<el-input v-model="queryParams.processControl" placeholder="请输入工序控制" clearable
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="活动时长" prop="activityDuration">
<el-input v-model="queryParams.activityDuration" placeholder="请输入活动时长" clearable
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="活动单位" prop="activityUnit">
<el-input v-model="queryParams.activityUnit" placeholder="请输入活动单位" clearable
@keyup.enter.native="handleQuery"/>
</el-form-item>-->
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:route:add']">新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:route:edit']">修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:route:remove']">删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:route:export']">导出
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport"
v-hasPermi="['system:details:import']">导入工艺
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="pushRouteBom"
v-hasPermi="['system:details:import']">推送工艺
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="updateProcessPlan"
v-hasPermi="['system:details:import']">更新计划时间
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="generatePDFs"
v-hasPermi="['system:details:import']">生成PDF
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-form :inline="true" :model="list" ref="ruleForm" size="mini" :rules="rules">
<el-table v-if="showtable" v-loading="loading" row-key="id" ref="tree" v-drag:[config]="routeList"
:tree-props="{ children: 'children' }" :data="routeList" stripe :row-class-name="tableRowClassName"
:cell-style="columnStyle" border max-height="680px" @cell-click="cellhand" :default-expand-all="true"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<!-- <el-table-column label="主键ID" align="center" prop="id" v-if="true"/>-->
<el-table-column label="操作" align="center">
<template slot-scope="props">
<!-- <el-button type="text" icon="el-icon-check" v-if="scope.row.id < 0" @click="onSaveChild()" /> -->
<!-- <fromed v-if="props.row.parentId" /> -->
<!-- {{props.row.materialCode}} -->
<el-button
v-if="props.row.parentId"
size="mini"
class="handle"
icon="el-icon el-icon-rank"/>
</template>
</el-table-column>
<!-- <el-table-column label="项目令号" align="center">
<template slot-scope="scope">
<router-link :to="'/route1/' + scope.row.routeDescription" type="primary" :underline="false">{{
scope.row.routeDescription }}</router-link>
</template>
</el-table-column> -->
<el-table-column label="物料编码" width="100" align="center" prop="materialCode"/>
<el-table-column label="名称" width="100" align="center" prop="materialName"/>
<el-table-column label="材质" width="80" align="center" prop="material"/>
<el-table-column label="单重" width="60" align="center" prop="discWeight"/>
<!--
<el-table-column label="材料BOM物料编码" width="220"align="center" prop="rawMaterialCode" />
<el-table-column label="材料BOM物料名称"width="220" align="center" prop="rawMaterialName" />
<el-table-column label="用量"width="60"align="center" prop="discUsage" />
<el-table-column label="单位"width="60" align="center" prop="bomUnit" />-->
<el-table-column label="工序号" width="60" align="center" prop="processNo"/>
<el-table-column label="工作中心" width="150" align="center" prop="workCenter">
<template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :prop="'list.' + scope.$index + '.key'">
<el-select v-model="queryParams.workCenter" placeholder="工作中心" clearable @keyup.enter.native="handleQuery2">
<el-option label="机一工段" value="机一工段"></el-option>
<el-option label="机二工段" value="机二工段"></el-option>
<el-option label="机三工段" value="机三工段"></el-option>
<el-option label="装一工段" value="装一工段"></el-option>
<el-option label="装二工段" value="装二工段"></el-option>
<el-option label="铆焊工段" value="铆焊工段"></el-option>
<el-option label="电钳工段" value="电钳工段"></el-option>
<el-option label="委外中心" value="委外中心"></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="工序名称" width="150" align="center" prop="processName">
<template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :prop="'list.' + scope.$index + '.key1'">
<el-select v-model="queryParams.processName" filterable remote :remote-method="handleQuery3"
placeholder="请输入工序名称" clearable :loading="loading" @change="handleProcessNameChange(scope)">
<el-option v-for="item in processName" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="工序说明" width="300" align="center" prop="processDescription">
<template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :prop="'list.' + scope.$index + '.key2'">
<el-input v-model="list.key2"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="工序控制" width="220" align="center" prop="processControl">
<template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :prop="'list.' + scope.$index + '.key3'">
<el-input v-model="list.key3"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="活动时长" align="center" prop="activityDuration"/>
<el-table-column label="活动单位" align="center" prop="activityUnit"/>
<el-table-column label="序开始时间" align="center" prop="xuStartTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.xuStartTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="序结束时间" align="center" prop="xuEndTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.xuEndTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="材料BOM单位" align="center" prop="bomUnit"/>
<el-table-column label="单台数量" align="center" prop="unitQuantity"/>
<el-table-column label="本批数量" align="center" prop="batchQuantity"/>
<el-table-column label="首批数量" align="center" prop="firstBatchQuantity"/>
<el-table-column label="计划开始时间" align="center" prop="planStartTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.planStartTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="计划结束时间" align="center" prop="planEndTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.planEndTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column class="maxWidth" label="操作" width="220" fixed="right" align="center"
class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button class="btn" size="mini" @click="onAddChild(scope)" v-if="!scope.row.parentId">
添加工艺
</el-button>
<el-button class="btn" size="mini" type="success" @click="onSave(scope)"
v-if="!scope.row.parentId && showParentSaveBtn === scope.row.id">
保存工艺
</el-button>
<el-button class="btn" size="mini" type="danger" @click="onDelete(scope)" v-if="scope.row.id < 0">
删除工艺
</el-button>
<el-button class="btn" size="mini" type="primary" @click="handleUpdate(scope.row)"
v-hasPermi="['system:route:edit']" v-if="scope.row.id > 0 && scope.row.parentId">修改
</el-button>
<el-button class="btn" size="mini" type="danger" @click="handleDelete(scope.row)"
v-hasPermi="['system:route:remove']" v-if="scope.row.id > 0">删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 添加或修改工艺路线对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="工艺路线描述" prop="routeDescription">
<el-input v-model="form.routeDescription" placeholder="请输入工艺路线描述"/>
</el-form-item>
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="form.materialCode" placeholder="请输入物料编码"/>
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="form.materialName" placeholder="请输入物料名称"/>
</el-form-item>
<el-form-item label="单位" prop="bomUnit">
<el-input v-model="form.bomUnit" placeholder="请输入单位"/>
</el-form-item>
<el-form-item label="工序号" prop="processNo">
<el-input v-model="form.processNo" placeholder="请输入工序号"/>
</el-form-item>
<el-form-item label="工作中心" prop="workCenter">
<el-input v-model="form.workCenter" placeholder="请输入工作中心"/>
</el-form-item>
<el-form-item label="工序名称" prop="processName">
<el-input v-model="form.processName" placeholder="请输入工序名称"/>
</el-form-item>
<el-form-item label="原材料编码" prop="rawMaterialCode">
<el-input v-model="form.rawMaterialCode" placeholder="请输入原材料编码"/>
</el-form-item>
<el-form-item label="原材料名称" prop="rawMaterialName">
<el-input v-model="form.rawMaterialName" placeholder="请输入原材料名称"/>
</el-form-item>
<el-form-item label="金碟重量" prop="discWeight">
<el-input v-model="form.discWeight" placeholder="请输入金碟重量"/>
</el-form-item>
<el-form-item label="金碟用量" prop="discUsage">
<el-input v-model="form.discUsage" placeholder="请输入金碟用量"/>
</el-form-item>
<el-form-item label="工序说明" prop="processDescription">
<el-input v-model="form.processDescription" type="textarea" placeholder="请输入内容"/>
</el-form-item>
<el-form-item label="工序控制" prop="processControl">
<el-input v-model="form.processControl" placeholder="请输入工序控制"/>
</el-form-item>
<el-form-item label="活动时长" prop="activityDuration">
<el-input v-model="form.activityDuration" placeholder="请输入活动时长"/>
</el-form-item>
<el-form-item label="活动单位" prop="activityUnit">
<el-input v-model="form.activityUnit" placeholder="请输入活动单位"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 导入导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport"/>
是否更新已经存在的物料数据
</div>
<span>仅允许导入xls、xlsx格式文件。</span>
<!-- <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
@click="importTemplate">下载模板
</el-link>-->
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
<el-drawer title="添加BOM" :visible.sync="BOMpop" :before-close="bomClose" :size="850">
<div style="padding: 20px;">
<el-table :data="bomList" stripe max-height="400px" border>
<el-table-column label="生产令号" width="100" align="center" prop="projectNumber"/>
<el-table-column label="物料编码" width="150" align="center" prop="materialCode"/>
<el-table-column label="物料名称" width="150" align="center" prop="materialName"/>
<el-table-column label="材质" width="70" align="center" prop="materialType"/>
<el-table-column label="用量" width="88" align="center" prop="quantity"/>
<el-table-column label="单位" width="88" align="center" prop="unit"/>
<el-table-column class="maxWidth" label="操作" width="150" fixed="right" align="center" class-name="small-padding fixed-width" />
</el-table>
<Bomfrom v-if="BOMpop" style="padding-top: 20px;"/>
</div>
</el-drawer>
</div>
</template>
<script>
import {
listRoute,
getRoute,
delRoute,
addRoute,
updateRoute,
getDistinctProjectCodes,
updateProcessPlan, generatePDFs
} from "@/api/system/route";
import upload from "svg-sprite-loader/examples/custom-runtime-generator/build/main";
import {getToken} from "../../../utils/auth";
import Fromed from './fromed'
import Bomfrom from './bomfrom'
// 引用拖动排序列表的js插件
import Sortable from 'sortablejs'
import {getProcessInfoList, pushRouteBom} from "../../../api/system/route";
export default {
name: "",
components: {
Fromed,
Bomfrom
},
props: {
showdel: {
type: Boolean,
default: true
},
obj: {
type: Object,
default() {
return {}
}
}
},
data() {
return {
showtable: true,
expand: true,
BOMpop: false,
bomList: [],
//expandRowKeys:[],
omdelData: '',
routeDescription: '', // 用于存储 productionOrderNo 的变量
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 显示父级的保存工艺按钮
showParentSaveBtn: null,
// 总条数
total: 0,
// 工艺路线表格数据
routeList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 100,
routeDescription: [],
materialCode: undefined,
materialName: undefined,
bomUnit: undefined,
processNo: undefined,
workCenter: undefined,
processName: undefined,
rawMaterialCode: undefined,
rawMaterialName: undefined,
discWeight: undefined,
discUsage: undefined,
processDescription: undefined,
processControl: undefined,
activityDuration: undefined,
activityUnit: undefined,
},
// 对应关系映射:工序名称 -> 工作中心
processToWorkCenterMap: {
// 铆焊工段
'数控火焰下料': '铆焊工段',
'数控激光下料': '铆焊工段',
'数控切管下料': '铆焊工段',
'水虎鱼剪折冲': '铆焊工段',
'锯床下料': '铆焊工段',
'抛丸': '铆焊工段',
'组焊': '铆焊工段',
'普车': '机一工段',
'普铣': '机一工段',
'龙门铣': '机一工段',
'立磨': '机一工段',
'平磨': '机一工段',
'钻床': '机一工段',
'数车': '机二工段',
'数控外圆磨': '机二工段',
'走芯机': '机二工段',
'双主轴': '机二工段',
'车铣复合': '机二工段',
'线切割': '机二工段',
'卧加63': '机三工段',
'5032龙门': '机三工段',
'3018龙门': '机三工段',
'2013龙门': '机三工段',
'立加1370': '机三工段',
'立加1177': '机三工段',
'立加850': '机三工段',
'数插5035': '机三工段',
'装配1': '装一工段',
'装配2': '装二工段',
'电装': '电钳工段',
'正火': '委外中心',
'回火': '委外中心',
'调质': '委外中心',
'真空调质': '委外中心',
'整体淬火': '委外中心',
'表面淬火': '委外中心',
'真空淬火': '委外中心',
'渗碳淬火': '委外中心',
'渗氮': '委外中心',
'碳氮共渗': '委外中心',
'制齿': '委外中心',
'电火花': '委外中心',
'插床': '委外中心',
'按图订制': '委外中心',
'磷化处理': '委外中心',
'发蓝处理': '委外中心',
'QPQ处理': '委外中心',
'镀锌': '委外中心',
'镀硬铬': '委外中心',
'镀锌镍合金': '委外中心',
'阳极氧化': '委外中心',
'达克罗': '委外中心',
'喷漆': '委外中心',
'喷塑': '委外中心',
'喷砂': '委外中心',
'喷砂底漆': '委外中心'
},
// 表单参数
form: {},
projectCodes: [], // 存储查询到的项目令号
processName:[],
activeRows: [], // 转换为列表的数据
config: {
elementSeletor: "tbody",
filter: ".filtered",
onEnd: (event, oldValue, newValue) => {
console.log(
"源数据",
oldValue.map((i) => i.date)
);
console.log(
"改变后的数据",
newValue.map((i) => i.date)
);
},
},
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: {Authorization: "Bearer " + getToken()},
// 上传的地址
url: process.env.VUE_APP_BASE_API + "/system/route/importData"
},
id: 0,//动态增加表格列的ID
list: {
key1: '',
key2: '',
key3: '',
key4: '',
key5: ''
},
// 表单校验
rules: {
id: [
{required: true, message: "主键ID不能为空", trigger: "blur"}
],
routeDescription: [
{required: true, message: "工艺路线描述不能为空", trigger: "blur"}
],
materialCode: [
{required: true, message: "物料编码不能为空", trigger: "blur"}
],
materialName: [
{required: true, message: "物料名称不能为空", trigger: "blur"}
],
bomUnit: [
{required: true, message: "单位不能为空", trigger: "blur"}
],
processNo: [
{required: true, message: "工序号不能为空", trigger: "blur"}
],
workCenter: [
{required: true, message: "工作中心不能为空", trigger: "blur"}
],
processName: [
{required: true, message: "工序名称不能为空", trigger: "blur"}
],
rawMaterialCode: [
{required: true, message: "原材料编码不能为空", trigger: "blur"}
],
rawMaterialName: [
{required: true, message: "原材料名称不能为空", trigger: "blur"}
],
discWeight: [
{required: true, message: "金碟重量不能为空", trigger: "blur"}
],
discUsage: [
{required: true, message: "金碟用量不能为空", trigger: "blur"}
],
processDescription: [
{required: true, message: "工序说明不能为空", trigger: "blur"}
],
processControl: [
{required: true, message: "工序控制不能为空", trigger: "blur"}
],
activityDuration: [
{required: true, message: "活动时长不能为空", trigger: "blur"}
],
activityUnit: [
{required: true, message: "活动单位不能为空", trigger: "blur"}
],
createBy: [
{required: true, message: "创建者不能为空", trigger: "blur"}
],
createTime: [
{required: true, message: "创建时间不能为空", trigger: "blur"}
],
updateTime: [
{required: true, message: "更新时间不能为空", trigger: "blur"}
],
key1: [
{required: true, message: "请选择工作中心", trigger: "blur"}
],
key2: [
{required: true, message: "请选择工序名称", trigger: "blur"}
],
key3: [
{required: true, message: "请输入工序说明", trigger: "blur"}
],
key4: [
{required: true, message: "请选择工序控制", trigger: "blur"}
],
key5: [
{required: true, message: "请输入活动时长", trigger: "blur"}
]
}
};
},
created() {
const productionOrderNo = this.$route.query.productionOrderNo;
if (productionOrderNo) {
this.queryParams.routeDescription = productionOrderNo;
} else {
}
this.getList();
},
watch: {
'$route.query.productionOrderNo': function (newVal) {
// 当路由参数 productionOrderNo 变化时,重新获取
this.setTotalWeight();
this.getList();
}
},
mounted() {
this.rowDrop();
},
methods: {
handleProcessNameChange(scope){
console.log(scope)
const selectedProcessName = scope.row.processName;
console.log(selectedProcessName)
if (this.processToWorkCenterMap[selectedProcessName]){
scope.row.workCenter = this.processToWorkCenterMap[selectedProcessName];
}else{
scope.row.workCenter = '';
}
},
handleQuery3(query) {
if (query === '') {
this.processName = [];
return;
}
// 开始加载
this.loading = true;
// 调用后端接口获取匹配的项目令号
getProcessInfoList(query).then((response) => {
// 加载完成
this.loading = false;
this.processName = response;
}).catch(() => {
this.loading = false; // 加载失败
this.processName = []; // 如果请求失败,清空选项
});
},
tableRowClassName({row, rowIndex}) {
if (!row.parentId) {
return "filtered";
}
return "";
},
// 添加子集
onAddChild(props) {
// 是否为父级,返回父级所在下标
var index = this.routeList.findIndex(item => item.id === props.row.id);
// -1为未检索到不为父级
if (index === -1) {
alert("刷新试试,为检索到此目录,可能不存在")
return;
}
var routeList = this.routeList[index].children;
var route = routeList.sort(function (a, b) {
return a.processNo - b.processNo
})[routeList.length - 1];
var processNo = !route ? 0 : route.processNo + 10;
routeList.push({id: --this.id, parentId: props.row.id, processNo: processNo, children: null});
this.showParentSaveBtn = props.row.id;
},
// 删除子集
onDelete(props) {
// 获取父级的所在下标
var index = this.routeList.findIndex(item => item.id === props.row.parentId);
// 获取子集的所在下标
var childrenIndex = this.routeList[index].children.findIndex(item => item.id === props.row.id);
// 找到子集并删除
this.routeList[index].children.splice(childrenIndex, 1);
// 修改其它子集的工序号
for (let i = 0; i < this.routeList[index].children.length; i++) {
// 修改子集中工序号
this.routeList[index].children[i].processNo = (i + 1) * 10;
}
},
cellhand(row, column) {
if (/单重|材料BOM物料编码|材料BOM物料名称|用量/.test(column.label)) {
this.BOMpop = true
}
},
bomClose() {
this.BOMpop = false
},
shouhide() {
this.showtable = false
setTimeout(() => {
this.showtable = true
this.expand = !this.expand
}, 0);
},
setTotalWeight() {
const totalWeight = this.$route.query.productionOrderNo;
if (totalWeight) {
this.queryParams.totalWeight = totalWeight;
}
},
/** 查询工艺路线列表 */
getList() {
this.loading = true;
listRoute(this.queryParams).then(response => {
this.routeList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 表单重置
reset() {
this.form = {
id: undefined,
routeDescription: undefined,
materialCode: undefined,
materialName: undefined,
bomUnit: undefined,
processNo: undefined,
workCenter: undefined,
processName: undefined,
rawMaterialCode: undefined,
rawMaterialName: undefined,
discWeight: undefined,
discUsage: undefined,
processDescription: undefined,
processControl: undefined,
activityDuration: undefined,
activityUnit: undefined,
createBy: undefined,
updateBy: undefined,
createTime: undefined,
updateTime: undefined
};
this.resetForm("form");
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "工艺导入";
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download('system/route/importTemplate', {}, `route_template_${new Date().getTime()}.xlsx`)
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>"
+ response.msg + "</div>", "导入结果", {dangerouslyUseHTMLString: true});
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
handleQuery1(query) {
if (query === '') {
this.projectCodes = []; // 如果没有输入任何关键字,清空选项
return;
}
// 开始加载
this.loading = true;
// 调用后端接口获取匹配的项目令号
getDistinctProjectCodes(query).then((response) => {
// 加载完成
this.loading = false;
this.projectCodes = response;
}).catch(() => {
this.loading = false; // 加载失败
this.projectCodes = []; // 如果请求失败,清空选项
});
},
//获取工序列表
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加工艺路线";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getRoute(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改工艺路线";
});
},
/**推送工艺 */
pushRouteBom(row) {
// 显示加载状态
this.loading = true;
// 调用 reset 方法,重置表单或状态
this.reset();
// 获取生产订单号
const rooteProdet = this.$route.query.productionOrderNo;
console.log(rooteProdet);
// 调用封装好的 API 方法
pushRouteBom(rooteProdet)
.then(response => {
// 假设后端返回的数据可以直接赋值给表单
this.form = response;
// 弹出成功消息
this.$modal.msgSuccess("推送成功");
// 调用方法更新列表
this.getList();
})
.catch(error => {
// 处理错误,弹出错误提示
this.$modal.msgError("推送失败,请重试!");
console.error('推送工艺失败:', error);
})
.finally(() => {
// 隐藏加载状态
this.loading = false;
});
},
/** 更新计划时间*/
updateProcessPlan(row) {
// 显示加载状态
this.loading = true;
// 调用 reset 方法,重置表单或状态
this.reset();
// 获取生产订单号
const rooteProdet = this.$route.query.productionOrderNo;
console.log(rooteProdet);
// 调用封装好的 API 方法
updateProcessPlan(rooteProdet)
.then(response => {
// 假设后端返回的数据可以直接赋值给表单
this.form = response;
// 弹出成功消息
this.$modal.msgSuccess("更新"+rooteProdet+"工序计划时间成功");
// 调用方法更新列表
this.getList();
})
.catch(error => {
// 处理错误,弹出错误提示
this.$modal.msgError("更新,请重试!");
console.error('更新工序计划失败:', error);
})
.finally(() => {
// 隐藏加载状态
this.loading = false;
});
},
/** 更新计划时间*/
generatePDFs(row) {
// 显示加载状态
this.loading = true;
// 调用 reset 方法,重置表单或状态
this.reset();
// 获取生产订单号
const rooteProdet = this.$route.query.productionOrderNo;
console.log(rooteProdet);
// 调用封装好的 API 方法
generatePDFs(rooteProdet)
.then(response => {
// 假设后端返回的数据可以直接赋值给表单
this.form = response;
// 弹出成功消息
this.$modal.msgSuccess("生成"+rooteProdet+"的PDF 成功 ");
// 调用方法更新列表
this.getList();
})
.catch(error => {
// 处理错误,弹出错误提示
this.$modal.msgError("更新,请重试!");
console.error('更新工序计划失败:', error);
})
.finally(() => {
// 隐藏加载状态
this.loading = false;
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateRoute(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addRoute(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除工艺路线编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delRoute(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/route/export', {
...this.queryParams
}, `route_${new Date().getTime()}.xlsx`)
}
}
};
</script>
<style>
.btn {
font-size: 12px;
padding: 7px 10px !important;
border-radius: 0;
}
.handle {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
font-size: 20px;
border: none;
background-color: #FAFAFA;
}
</style>