<template>
|
<div class="process viewWrap">
|
<h2>生产流程管理</h2>
|
<ProductList ref="productList"></ProductList>
|
<!-- 搜索功能区 -->
|
<div class="wrap">
|
<div class="searchWrap">
|
<div class="searchItem">
|
<span class="searchTitle">产品</span>
|
<el-select v-model="proId" ref="productList1" @focus="onShowProductList1" placeholder="请选择" style="width:220px;" clearable>
|
<el-option v-for="(item, index) in selectData" :key="index" :label="`${item.name} / ${item.type}`" :value="item.id">
|
</el-option>
|
</el-select>
|
</div>
|
<div class="searchButton">
|
<el-button type="primary" @click="onGetSearchData">查询</el-button>
|
<el-button @click="onClearSearchData">清空</el-button>
|
</div>
|
</div>
|
</div>
|
|
<!-- 数据功能按钮区 -->
|
<el-button type="primary" icon="el-icon-plus" style="width: 100px; margin-top: 20px;"
|
@click="handleFormDataAdd">添加</el-button>
|
|
<!-- 数据表格区 -->
|
<el-table stripe :data="tableData" height="0" style="margin-top: 20px;">
|
<el-table-column type="index" label="序号"> </el-table-column>
|
<el-table-column prop="name" label="名称"> </el-table-column>
|
<el-table-column prop="proName" label="产品"> </el-table-column>
|
<el-table-column prop="proType" label="型号"> </el-table-column>
|
<el-table-column prop="creatorName" label="创建人"> </el-table-column>
|
<el-table-column prop="dt" label="创建时间"> </el-table-column>
|
<el-table-column prop="remark" label="说明"> </el-table-column>
|
<el-table-column label="操作" width="100">
|
<template slot-scope="scope">
|
<el-button icon="el-icon-edit" @click.native.prevent="handleFormDataEdit(scope.row)" type="text" size="small">
|
编辑
|
</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
|
<!-- 分页组件 -->
|
<el-pagination style="margin-top: 20px;" @size-change="onGetTableData" @current-change="onGetTableData"
|
:current-page.sync="pageCurr" :page-size.sync="pageSize" :page-sizes="[10, 20, 50, 100]"
|
layout="total, sizes, prev, pager, next, jumper" :total="total">
|
</el-pagination>
|
|
<!-- 表单 -->
|
<el-dialog :title="dialogTitle" :visible.sync="showFromData" width="1200px" :before-close="handleFormDataClose">
|
<el-row>
|
<el-col :span="8" style="border-right: 1px solid #eee; min-height: 560px;">
|
<h3 style="text-align: center; margin-bottom: 20px;">基础信息</h3>
|
<el-form :model="formData" :rules="formRules" ref="formData" label-width="60px">
|
<el-form-item label="ID" prop="id" style="display: none;">
|
<el-input style="width:160px" v-model="formData.id" disabled></el-input>
|
</el-form-item>
|
<el-form-item label="产品" prop="proId">
|
<el-select v-model="formData.proId" ref="productList2" @focus="onShowProductList2" placeholder="请选择" style="width:220px;" clearable>
|
<el-option v-for="(item, index) in selectData" :key="index" :label="`${item.name} / ${item.type}`" :value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="名称" prop="name">
|
<el-input style="width:220px" v-model="formData.name" clearable></el-input>
|
</el-form-item>
|
<el-form-item label="说明" prop="remark">
|
<el-input style="width:220px" v-model="formData.remark" clearable></el-input>
|
</el-form-item>
|
</el-form>
|
</el-col>
|
<el-col :span="8">
|
<h3 style="text-align: center; margin-bottom: 20px;">流程节点</h3>
|
<!-- 流程图 -->
|
<div class="stepsBox">
|
<div class="start-steps">
|
<button class="start-btn">开始</button>
|
</div>
|
<div class="other-steps">
|
<div class="drap-box">
|
<vuedraggable v-model="formData.nodes" class="draggable" chosenClass="chosen" animation="500"
|
@choose="onChooseStepBox">
|
<div class="steps-box" v-for="(item, index) in formData.nodes" :key="index">
|
<div class="steps-btn">
|
<input v-model="item.content" type="text" placeholder="请输入" />
|
</div>
|
<div class="stepsAdd stepsAdd-before" @click="addStepBox(index)">
|
+
|
</div>
|
<div class="stepsAdd stepsAdd-after" @click="addStepBox(index + 1)">
|
+
|
</div>
|
<div class="sb-close" @click.stop="delStepBox(index)">
|
-
|
</div>
|
<div class="stepsIndex">{{ item.sort + 1 }}</div>
|
</div>
|
</vuedraggable>
|
</div>
|
</div>
|
<div class="end-steps">
|
<button class="end-btn">结束</button>
|
<div class="stepsAdd stepsAdd-end" @click="addStepBox(formData.nodes.length)">
|
+
|
</div>
|
</div>
|
</div>
|
<!-- 流程图 -->
|
</el-col>
|
<el-col :span="8" style="border-left: 1px solid #eee; height: 100%; min-height: 560px; position: relative;">
|
<h3 style="text-align: center; margin-bottom: 20px;">节点信息</h3>
|
<transition name="nodeAnimate">
|
<el-empty v-if="!chooseNode" class="poa" description="请选择节点编辑详细信息"></el-empty>
|
<el-form label-width="150px" class="poa" ref="nodeFormData" :rules="nodeFormRules" v-if="chooseNode">
|
<el-form-item label="ID" style="display: none;">
|
<el-input style="width:220px" disabled></el-input>
|
</el-form-item>
|
<el-form-item label="节点作业内容" prop="content">
|
<el-input style="width:220px" v-model="chooseNode.content" clearable></el-input>
|
</el-form-item>
|
<el-form-item label="生产开始" prop="isStart">
|
<el-select v-model="chooseNode.isStart" placeholder="请选择" style="width:220px;" clearable>
|
<el-option label="是" :value="true" />
|
<el-option label="否" :value="false" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="生产结束" prop="isEnd">
|
<el-select v-model="chooseNode.isEnd" placeholder="请选择" style="width:220px;" clearable>
|
<el-option label="是" :value="true" />
|
<el-option label="否" :value="false" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="是否记录设备周期" prop="isRecord">
|
<el-select v-model="chooseNode.isRecord" placeholder="请选择" style="width:220px;" clearable>
|
<el-option label="是" :value="true" />
|
<el-option label="否" :value="false" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="记录设备周期内容" prop="deviceCycleContent" v-show="chooseNode.isRecord">
|
<el-input style="width:220px" v-model="chooseNode.deviceCycleContent" clearable></el-input>
|
</el-form-item>
|
<el-form-item label="作业指导书">
|
<!-- <div v-if="chooseNode.instruction">
|
<el-link type="primary" icon="el-icon-download" :href="chooseNode.instruction.webUrl" target="_blank"
|
:underline="false" style="margin:0 20px;">点击下载</el-link>
|
<el-link type="primary" icon="el-icon-delete" @click.stop="handleDeleteInstruction"
|
:underline="false">删除</el-link>
|
</div>
|
<el-upload v-else action="base/webFile/upDocument" :headers="headers" :show-file-list="false"
|
:on-success="handleUploadSuccess">
|
<el-button icon="el-icon-upload" type="text" size="small">
|
上传文件
|
</el-button>
|
</el-upload> -->
|
<el-upload action="base/webFile/upPhoto" accept=".jpg, .jpeg, .png" :headers="headers" :show-file-list="false"
|
:on-success="handleUploadSuccess">
|
<img v-if="chooseNode.instruction" :src="chooseNode.instruction.webUrl"
|
style="max-width: 220px; max-height: 125px;" />
|
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
</el-upload>
|
</el-form-item>
|
<el-form-item label="物料清单">
|
<div v-if="chooseNode.bill">
|
<p>{{ chooseNode.bill.orgName }}.{{ chooseNode.bill.extName }}</p>
|
<el-link type="primary" icon="el-icon-download" :href="chooseNode.bill.webUrl" target="_blank"
|
:underline="false">点击下载</el-link>
|
<el-link type="primary" style="margin-left:20px;" icon="el-icon-delete" @click.stop="handleDeleteBill"
|
:underline="false">删除</el-link>
|
</div>
|
<el-upload v-else action="base/webFile/upDocument" accept=".xlsx" :headers="headers" :show-file-list="false"
|
:on-success="handleUploadBillSuccess">
|
<el-button icon="el-icon-upload" type="text" size="small">
|
上传文件
|
</el-button>
|
</el-upload>
|
</el-form-item>
|
<el-form-item label="备注" prop="remark">
|
<el-input style="width:220px" v-model="chooseNode.remark" clearable></el-input>
|
</el-form-item>
|
</el-form>
|
</transition>
|
</el-col>
|
</el-row>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="handleFormDataClose">取 消</el-button>
|
<el-button type="primary" @click="handleFormDataSubmit">确 定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
</template>
|
|
<style lang="less" scoped>
|
.process {
|
padding: 20px;
|
}
|
|
.stepsBox {
|
position: relative;
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
z-index: 999;
|
|
.draggable {
|
display: flex;
|
flex-direction: column;
|
flex-wrap: wrap;
|
}
|
|
.stepsAdd {
|
text-align: center;
|
position: absolute;
|
border-radius: 100%;
|
width: 20px;
|
height: 20px;
|
line-height: 20px;
|
margin-top: -9px;
|
background-color: #409eff;
|
color: #fff;
|
z-index: 1;
|
cursor: pointer;
|
}
|
|
.start-steps,
|
.end-steps {
|
width: 90px;
|
position: relative;
|
padding: 0 0 20px 0;
|
}
|
|
.end-steps {
|
box-sizing: border-box;
|
position: relative;
|
padding: 20px 0 0 0;
|
|
.stepsAdd {
|
top: -5.5px;
|
left: 50% - 10px;
|
}
|
}
|
|
.end-steps::before {
|
content: "";
|
position: absolute;
|
top: -20px;
|
left: 50%;
|
width: 1px;
|
height: 40px;
|
background: #c0c4cc;
|
}
|
|
.end-steps::after {
|
position: absolute;
|
content: "";
|
width: 0;
|
height: 0;
|
border-width: 5px;
|
border-style: dashed solid;
|
top: 15px;
|
left: 50% - 4px;
|
border-color: #c0c4cc transparent transparent transparent;
|
}
|
|
.other-steps {
|
position: relative;
|
display: flex;
|
flex-wrap: wrap;
|
|
.steps-box {
|
text-align: center;
|
color: #333;
|
font-size: 12px;
|
cursor: pointer;
|
padding: 20px 0;
|
line-height: 50px;
|
position: relative;
|
}
|
|
.steps-box::before {
|
content: "";
|
position: absolute;
|
top: -20px;
|
left: 50%;
|
width: 1px;
|
height: 40px;
|
background: #c0c4cc;
|
}
|
|
.steps-btn {
|
box-sizing: border-box;
|
position: relative;
|
border-radius: 4px;
|
border: 1px solid #409eff;
|
background: #409eff;
|
|
input {
|
text-align: center;
|
width: 100px;
|
border: none;
|
outline: 0;
|
padding: 0 5px;
|
font-size: 14px;
|
font-weight: 500px;
|
line-height: 48px;
|
background: #409eff;
|
color: #fff;
|
}
|
}
|
|
.steps-btn::before {
|
position: absolute;
|
content: "";
|
width: 0;
|
height: 0;
|
border-width: 5px;
|
border-style: dashed solid;
|
top: -6px;
|
left: 50% - 4px;
|
border-color: #c0c4cc transparent transparent transparent;
|
}
|
}
|
|
.drap-box {
|
display: flex;
|
flex-wrap: wrap;
|
}
|
|
.stepsAdd-before {
|
display: none;
|
top: -5.5px;
|
left: 50% - 8.5px;
|
z-index: 2;
|
}
|
|
.stepsAdd-after {
|
display: none;
|
bottom: -5.5px;
|
left: 50% - 8.5px;
|
z-index: 2;
|
}
|
|
.stepsAdd-end {
|
display: block;
|
font-size: 12px !important;
|
left: 50% - 11px !important;
|
}
|
|
.sb-close {
|
display: none;
|
width: 16px;
|
height: 16px;
|
border-radius: 16px;
|
color: #fff;
|
text-align: center;
|
position: absolute;
|
color: #fff;
|
background: #f56c6c;
|
font-size: 16px;
|
border-radius: 50%;
|
top: 13px;
|
right: -7px;
|
line-height: 12px;
|
}
|
|
.stepsIndex {
|
position: absolute;
|
top: 10px;
|
left: -10px;
|
width: 20px;
|
height: 20px;
|
line-height: 20px;
|
font-weight: 500;
|
text-align: center;
|
background-color: #b0b0b0;
|
color: #fff;
|
border-radius: 50%;
|
}
|
|
.end-steps:hover {
|
.stepsAdd-after {
|
display: block;
|
}
|
}
|
|
.steps-box:hover {
|
.stepsAdd-before {
|
display: block;
|
}
|
|
.stepsAdd-after {
|
display: block;
|
}
|
|
.sb-close {
|
display: block;
|
}
|
}
|
|
.start-btn,
|
.end-btn {
|
width: 90px;
|
height: 40px;
|
border-radius: 20px;
|
text-align: center;
|
line-height: 40px;
|
font-size: 12px;
|
cursor: pointer;
|
}
|
|
.start-btn {
|
border: 1px solid #67c23a;
|
color: #fff;
|
background: #67c23a;
|
}
|
|
.end-btn {
|
border: 1px solid #f56c6c;
|
color: #fff;
|
background: #f56c6c;
|
}
|
}
|
|
.nodeAnimate-enter-active {
|
animation: fadeInLeft 0.5s;
|
}
|
|
.nodeAnimate-leave-active {
|
animation: zoomOutRight 0.5s;
|
}
|
|
.poa {
|
position: absolute;
|
width: 100%;
|
}
|
</style>
|
|
<script>
|
import vuedraggable from "vuedraggable";
|
import ProductList from '@/components/ProductList'
|
|
export default {
|
name: "process",
|
components: { vuedraggable, ProductList },
|
data() {
|
return {
|
proId: null,
|
pageSize: 10,
|
pageCurr: 1,
|
total: 0,
|
tableData: [],
|
showFromData: false,
|
dialogTitle: null,
|
headers: {
|
token: localStorage.getItem("token"),
|
},
|
formData: {
|
id: null,
|
proId: null,
|
name: null,
|
remark: null,
|
nodes: [],
|
},
|
formRules: {
|
proId: [{ required: true, message: "必填项", trigger: "blur" }],
|
name: [{ required: true, message: "必填项", trigger: "blur" }],
|
},
|
nodeFormRules: {
|
content: [{ required: true, message: "必填项", trigger: "clear" }],
|
isStart: [{ required: true, message: "必填项", trigger: "clear" }],
|
isEnd: [{ required: true, message: "必填项", trigger: "clear" }],
|
isRecord: [{ required: true, message: "必填项", trigger: "clear" }],
|
},
|
selectData: [],
|
chooseNode: null,
|
};
|
},
|
watch: {
|
"formData.nodes": {
|
handler(newVal, oldVal) {
|
if (newVal.length) {
|
newVal.forEach((item, index) => {
|
item.sort = index;
|
});
|
}
|
},
|
deep: true,
|
},
|
},
|
computed: {},
|
mounted() {
|
this.onGetTableData();
|
this.onGetSelectData();
|
},
|
methods: {
|
// 执行条件查询
|
onGetSearchData: function () {
|
this.pageCurr = 1;
|
this.onGetTableData();
|
},
|
// 清空查询条件
|
onClearSearchData: function () {
|
this.proId = null;
|
this.pageCurr = 1;
|
this.onGetTableData();
|
},
|
// 获取表格数据
|
onGetTableData: function () {
|
var that = this;
|
var data = {
|
proId: this.proId,
|
pageSize: this.pageSize,
|
pageCurr: this.pageCurr,
|
};
|
that
|
.$axiosAdmin({
|
method: "post",
|
url: "production/process/some",
|
data: JSON.stringify(data),
|
})
|
.then((res) => {
|
if (res.success == true) {
|
that.tableData = res.content.obj;
|
that.total = res.content.itemTotal;
|
} else {
|
that.$alert(res.content, "提示", {
|
confirmButtonText: "确定",
|
});
|
}
|
})
|
.catch((err) => {
|
console.log(err);
|
});
|
},
|
// 删除确认
|
handleDelete(row) {
|
this.$confirm(`此操作将删除该不合格原因 , 是否继续?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
this.onDelete(row);
|
})
|
.catch(() => {
|
this.$message({
|
type: "info",
|
message: "已取消",
|
});
|
});
|
},
|
// 执行删除
|
onDelete: function (row) {
|
var that = this;
|
var params = {
|
id: row.id,
|
};
|
that
|
.$axiosAdmin({
|
method: "get",
|
url: "production/process/delete",
|
params: params,
|
})
|
.then((res) => {
|
if (res.success == true) {
|
that.$message({
|
type: "success",
|
message: "已成功",
|
});
|
} else {
|
that.$alert(res.content, "提示", {
|
confirmButtonText: "确定",
|
});
|
}
|
that.onGetTableData();
|
})
|
.catch((err) => {
|
console.log(err);
|
});
|
},
|
// 添加
|
handleFormDataAdd: function () {
|
this.dialogTitle = "添加生产流程";
|
this.onGetSelectData();
|
|
this.formData.id = null;
|
this.formData.proId = null;
|
this.formData.name = null;
|
this.formData.remark = null;
|
this.formData.nodes = [];
|
this.chooseNode = null;
|
this.showFromData = true;
|
},
|
// 关闭
|
handleFormDataClose: function () {
|
this.formData.id = null;
|
this.formData.proId = null;
|
this.formData.name = null;
|
this.formData.remark = null;
|
this.formData.nodes = [];
|
this.chooseNode = null;
|
this.showFromData = false;
|
setTimeout(() => {
|
this.$refs["formData"].resetFields();
|
}, 1000);
|
this.onGetTableData();
|
},
|
// 编辑
|
handleFormDataEdit: function (row) {
|
this.dialogTitle = "编辑生产流程";
|
this.onGetSelectData();
|
this.formData.id = row.id;
|
this.formData.proId = row.proId;
|
this.formData.name = row.name;
|
this.formData.remark = row.remark;
|
this.formData.nodes = row.nodes;
|
this.chooseNode = null;
|
this.showFromData = true;
|
},
|
// 提交数据确认
|
handleFormDataSubmit: function () {
|
this.$confirm(`此操作将保存并更新数据, 是否继续?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
this.onFormDataSubmit();
|
})
|
.catch(() => {
|
this.$message({
|
type: "info",
|
message: "已取消",
|
});
|
});
|
},
|
// 提交数据
|
onFormDataSubmit: function () {
|
var that = this;
|
var url, data;
|
if (this.formData.id) {
|
url = "production/process/update";
|
data = {
|
id: this.formData.id,
|
proId: this.formData.proId,
|
name: this.formData.name,
|
remark: this.formData.remark,
|
nodes: this.formData.nodes,
|
};
|
} else {
|
url = "production/process/save";
|
data = {
|
proId: this.formData.proId,
|
name: this.formData.name,
|
remark: this.formData.remark,
|
nodes: this.formData.nodes,
|
};
|
}
|
that
|
.$axiosAdmin({
|
method: "post",
|
url: url,
|
data: JSON.stringify(data),
|
})
|
.then((res) => {
|
if (res.success == true) {
|
that.$message({
|
type: "success",
|
message: "已成功",
|
});
|
that.handleFormDataClose();
|
that.onGetTableData();
|
} else {
|
that.$alert(res.content, "提示", {
|
confirmButtonText: "确定",
|
});
|
}
|
})
|
.catch((err) => {
|
console.log(err);
|
});
|
},
|
// 状态变更确认
|
handleDisabled(row) {
|
this.$confirm(`此操作将变更 ${row.name} 的状态, 是否继续?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
this.onDisabled(row);
|
})
|
.catch(() => {
|
this.onGetTableData();
|
this.$message({
|
type: "info",
|
message: "已取消",
|
});
|
});
|
},
|
// 执行状态变更
|
onDisabled: function (row) {
|
var that = this;
|
var data = {
|
id: row.id,
|
disabled: row.disabled,
|
};
|
that
|
.$axiosAdmin({
|
method: "post",
|
url: "production/process/disabled",
|
data: JSON.stringify(data),
|
})
|
.then((res) => {
|
if (res.success == true) {
|
that.$message({
|
type: "success",
|
message: "已成功",
|
});
|
} else {
|
that.$alert(res.content, "提示", {
|
confirmButtonText: "确定",
|
});
|
}
|
that.onGetTableData();
|
})
|
.catch((err) => {
|
console.log(err);
|
that.onGetTableData();
|
});
|
},
|
// 获取产品数据
|
onGetSelectData: function () {
|
var that = this;
|
that
|
.$axiosAdmin({
|
method: "get",
|
url: "platform/product/all",
|
})
|
.then((res) => {
|
if (res.success == true) {
|
this.selectData = res.content;
|
} else {
|
that.$alert(res.content, "提示", {
|
confirmButtonText: "确定",
|
});
|
}
|
})
|
.catch((err) => {
|
console.log(err);
|
});
|
},
|
// 添加节点
|
addStepBox: function (index) {
|
this.formData.nodes.splice(index, 0, {
|
sort: null,
|
content: null,
|
isStart: false,
|
isEnd: false,
|
isRecord: false,
|
deviceCycleContent: null,
|
remark: null,
|
instruction: null,
|
});
|
},
|
// 删除节点
|
delStepBox: function (index) {
|
console.log("delStepBox", index);
|
this.$confirm(`此操作将删除此节点, 是否继续?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
this.formData.nodes.splice(index, 1);
|
this.chooseNode = null;
|
})
|
.catch(() => {
|
this.$message({
|
type: "info",
|
message: "已取消",
|
});
|
});
|
},
|
// 选中节点
|
onChooseStepBox: function (e) {
|
this.chooseNode = null;
|
setTimeout(() => {
|
this.chooseNode = this.formData.nodes[e.oldIndex];
|
}, 100);
|
},
|
// 上传作业指导书
|
handleUploadSuccess: function (res, file) {
|
if (res.success) {
|
this.chooseNode.instruction = {
|
fileId: res.content.id,
|
extName: res.content.extName,
|
orgName: res.content.orgName,
|
webUrl: res.content.webPath,
|
// deleted: false,
|
};
|
} else {
|
that.$alert(res.content, "提示", {
|
confirmButtonText: "确定",
|
});
|
}
|
},
|
// 上传物料清单
|
handleUploadBillSuccess: function (res, file) {
|
if (res.success) {
|
this.chooseNode.bill = {
|
fileId: res.content.id,
|
extName: res.content.extName,
|
orgName: res.content.orgName,
|
webUrl: res.content.webPath,
|
// deleted: false,
|
};
|
} else {
|
that.$alert(res.content, "提示", {
|
confirmButtonText: "确定",
|
});
|
}
|
},
|
// 删除作业指导书
|
handleDeleteInstruction: function () {
|
this.$confirm(`此操作将删除此节点的作业指导书, 是否继续?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
this.chooseNode.instruction = null;
|
})
|
.catch(() => {
|
this.$message({
|
type: "info",
|
message: "已取消",
|
});
|
});
|
},
|
// 删除物料清单
|
handleDeleteBill: function () {
|
this.$confirm(`此操作将删除此节点的物料清单, 是否继续?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
this.chooseNode.bill = null;
|
})
|
.catch(() => {
|
this.$message({
|
type: "info",
|
message: "已取消",
|
});
|
});
|
},
|
onShowProductList1: function () {
|
this.$refs.productList1.blur()
|
this.$refs.productList.show((res) => {
|
if (!res) return;
|
this.proId = res.id
|
})
|
},
|
onShowProductList2: function () {
|
this.$refs.productList2.blur()
|
this.$refs.productList.show((res) => {
|
if (!res) return;
|
this.formData.proId = res.id
|
})
|
},
|
},
|
};
|
</script>
|