|
|
<template>
|
|
|
<div class="app-container">
|
|
|
<el-row v-if="optType != 'view'" :gutter="10" class="mb8">
|
|
|
<el-col :span="1.5">
|
|
|
<el-button
|
|
|
type="primary"
|
|
|
plain
|
|
|
icon="el-icon-plus"
|
|
|
size="mini"
|
|
|
@click="handleAdd"
|
|
|
>新增</el-button
|
|
|
>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
<el-button
|
|
|
type="success"
|
|
|
plain
|
|
|
icon="el-icon-edit"
|
|
|
size="mini"
|
|
|
:disabled="single"
|
|
|
@click="handleUpdate"
|
|
|
>修改</el-button
|
|
|
>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
<el-button
|
|
|
type="danger"
|
|
|
plain
|
|
|
icon="el-icon-delete"
|
|
|
size="mini"
|
|
|
:disabled="multiple"
|
|
|
@click="handleDelete"
|
|
|
>删除</el-button
|
|
|
>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
<el-button
|
|
|
type="warning"
|
|
|
plain
|
|
|
icon="el-icon-download"
|
|
|
size="mini"
|
|
|
@click="handleExport"
|
|
|
>导出</el-button
|
|
|
>
|
|
|
</el-col>
|
|
|
<right-toolbar
|
|
|
:showSearch.sync="showSearch"
|
|
|
@queryTable="getList"
|
|
|
></right-toolbar>
|
|
|
</el-row>
|
|
|
|
|
|
<el-table
|
|
|
v-loading="loading"
|
|
|
:data="recipecontentList"
|
|
|
@selection-change="handleSelectionChange"
|
|
|
>
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
<el-table-column label="顺序编号" align="center" prop="orderNum" />
|
|
|
<el-table-column
|
|
|
label="步骤说明"
|
|
|
width="300px"
|
|
|
align="center"
|
|
|
prop="contentText"
|
|
|
:show-overflow-tooltip="true"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
label="辅助设备"
|
|
|
align="center"
|
|
|
prop="device"
|
|
|
:show-overflow-tooltip="true"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
label="BOM材料"
|
|
|
align="center"
|
|
|
prop="material"
|
|
|
:show-overflow-tooltip="true"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
label="用量"
|
|
|
align="center"
|
|
|
prop="dosage"
|
|
|
:show-overflow-tooltip="true"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
label="单位"
|
|
|
align="center"
|
|
|
prop="unit"
|
|
|
:show-overflow-tooltip="true"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
label="安全用量"
|
|
|
align="center"
|
|
|
prop="safeDosage"
|
|
|
:show-overflow-tooltip="true"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
label="控制参数"
|
|
|
align="center"
|
|
|
prop="controlParameters"
|
|
|
:show-overflow-tooltip="true"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
label="备注"
|
|
|
align="center"
|
|
|
prop="remark"
|
|
|
:show-overflow-tooltip="true"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
label="操作"
|
|
|
width="100px"
|
|
|
v-if="optType != 'view'"
|
|
|
align="center"
|
|
|
class-name="small-padding fixed-width"
|
|
|
>
|
|
|
<template slot-scope="scope">
|
|
|
<el-button
|
|
|
size="mini"
|
|
|
type="text"
|
|
|
icon="el-icon-edit"
|
|
|
@click="handleUpdate(scope.row)"
|
|
|
>修改</el-button
|
|
|
>
|
|
|
<el-button
|
|
|
size="mini"
|
|
|
type="text"
|
|
|
icon="el-icon-delete"
|
|
|
@click="handleDelete(scope.row)"
|
|
|
>删除</el-button
|
|
|
>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
|
|
|
<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="960px" append-to-body>
|
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="顺序编号" prop="orderNum">
|
|
|
<el-input-number
|
|
|
:min="1"
|
|
|
v-model="form.orderNum"
|
|
|
placeholder="请输入顺序编号"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<!--
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="材料URL" prop="docUrl">
|
|
|
<el-input v-model="form.docUrl" placeholder="请输入材料URL" />
|
|
|
</el-form-item>
|
|
|
</el-col>-->
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="24">
|
|
|
<div class="tagbox">
|
|
|
<div class="tagboxlabel" style="font-weight: 600; color: #606266">
|
|
|
辅助设备
|
|
|
</div>
|
|
|
<div class="tag" style="" placeholder="请选择辅助设备">
|
|
|
<el-tag
|
|
|
:key="index"
|
|
|
class="tagitem"
|
|
|
v-for="(tag, index) in selectsubsidiaryListtag"
|
|
|
closable
|
|
|
:disable-transitions="false"
|
|
|
@close="handleClose(tag)"
|
|
|
>
|
|
|
{{ tag }}
|
|
|
</el-tag>
|
|
|
</div>
|
|
|
<el-button
|
|
|
slot="append"
|
|
|
class="button1"
|
|
|
@click="handleSelectEquipment"
|
|
|
icon="el-icon-search"
|
|
|
></el-button>
|
|
|
<ItemSelect
|
|
|
ref="itemSelect"
|
|
|
@onSelected="onItemSelectedEquipment"
|
|
|
>
|
|
|
</ItemSelect>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
<el-col :span="24">
|
|
|
<div class="tagbox">
|
|
|
<div class="tagboxlabel" style="font-weight: 600; color: #606266">
|
|
|
BOM材料
|
|
|
</div>
|
|
|
<div class="tag" style="" placeholder="请选择BOM材料">
|
|
|
<el-tag
|
|
|
:key="index"
|
|
|
class="tagitem"
|
|
|
v-for="(tag, index) in selectBOMListtag"
|
|
|
closable
|
|
|
:disable-transitions="false"
|
|
|
@close="handleCloseBOM(tag)"
|
|
|
>
|
|
|
{{ tag }}
|
|
|
</el-tag>
|
|
|
</div>
|
|
|
<el-button
|
|
|
slot="append"
|
|
|
class="button1"
|
|
|
@click="handleSelectBom"
|
|
|
icon="el-icon-search"
|
|
|
></el-button>
|
|
|
<ItemSelectBom
|
|
|
ref="itemSelectBom"
|
|
|
@onSelected="onItemSelectedBom"
|
|
|
></ItemSelectBom>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="用量" prop="dosage">
|
|
|
<el-input v-model="form.dosage" placeholder="请输入用量" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="单位" prop="unit">
|
|
|
<el-input v-model="form.unit" placeholder="请输入单位" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="控制参数" prop="controlParameters">
|
|
|
<el-input
|
|
|
v-model="form.controlParameters"
|
|
|
placeholder="请输入控制参数"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="安全用量" prop="safeDosage">
|
|
|
<el-input v-model="form.safeDosage" placeholder="安全设置" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="24">
|
|
|
<el-form-item label="步骤说明" prop="contentText">
|
|
|
<el-input
|
|
|
v-model="form.contentText"
|
|
|
type="textarea"
|
|
|
placeholder="请输入内容"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="24">
|
|
|
<el-form-item label="备注" prop="remark">
|
|
|
<el-input
|
|
|
v-model="form.remark"
|
|
|
type="textarea"
|
|
|
placeholder="请输入内容"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-form>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
|
<el-button @click="cancel">取 消</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import {
|
|
|
listProcesscontent,
|
|
|
getProcesscontent,
|
|
|
delProcesscontent,
|
|
|
addProcesscontent,
|
|
|
updateProcesscontent,
|
|
|
} from "@/api/technology/recipecontent";
|
|
|
import ItemSelect from "./single.vue";
|
|
|
import ItemSelectBom from "./singleBom.vue";
|
|
|
import { Message } from "element-ui";
|
|
|
|
|
|
export default {
|
|
|
name: "Processcontent",
|
|
|
components: { ItemSelect, ItemSelectBom },
|
|
|
data() {
|
|
|
return {
|
|
|
checkMaterial: null,
|
|
|
checkDevice: null,
|
|
|
// 遮罩层
|
|
|
loading: true,
|
|
|
// 选中数组
|
|
|
ids: [],
|
|
|
idsName: [],
|
|
|
// 非单个禁用
|
|
|
single: true,
|
|
|
// 非多个禁用
|
|
|
multiple: true,
|
|
|
// 显示搜索条件
|
|
|
showSearch: true,
|
|
|
// 总条数
|
|
|
total: 0,
|
|
|
// 生产工序内容表格数据
|
|
|
recipecontentList: [],
|
|
|
// 弹出层标题
|
|
|
title: "",
|
|
|
// 是否显示弹出层
|
|
|
open: false,
|
|
|
// 查询参数
|
|
|
queryParams: {
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
|
recipeId: this.recipeId,
|
|
|
orderNum: null,
|
|
|
contentText: null,
|
|
|
device: null,
|
|
|
material: null,
|
|
|
docUrl: null,
|
|
|
},
|
|
|
// 表单参数
|
|
|
form: {},
|
|
|
// 表单校验
|
|
|
rules: {
|
|
|
recipeId: [
|
|
|
{ required: true, message: "工序不能为空", trigger: "blur" },
|
|
|
],
|
|
|
},
|
|
|
// 新增-辅助设备选中listtag
|
|
|
selectsubsidiaryListtag: [],
|
|
|
selectBOMListtag: [],
|
|
|
};
|
|
|
},
|
|
|
props: {
|
|
|
recipeId: undefined,
|
|
|
optType: undefined,
|
|
|
},
|
|
|
created() {
|
|
|
this.getList();
|
|
|
},
|
|
|
methods: {
|
|
|
/** 查询生产工序内容列表 */
|
|
|
getList() {
|
|
|
this.loading = true;
|
|
|
listProcesscontent(this.queryParams).then((response) => {
|
|
|
this.recipecontentList = response.rows;
|
|
|
this.total = response.total;
|
|
|
this.loading = false;
|
|
|
});
|
|
|
},
|
|
|
// 取消按钮
|
|
|
cancel() {
|
|
|
this.open = false;
|
|
|
this.reset();
|
|
|
},
|
|
|
// 表单重置
|
|
|
reset() {
|
|
|
this.form = {
|
|
|
contentId: null,
|
|
|
recipeId: this.recipeId,
|
|
|
orderNum: null,
|
|
|
contentText: null,
|
|
|
device: null,
|
|
|
material: null,
|
|
|
docUrl: null,
|
|
|
remark: null,
|
|
|
createBy: null,
|
|
|
createTime: null,
|
|
|
updateBy: null,
|
|
|
updateTime: null,
|
|
|
};
|
|
|
this.resetForm("form");
|
|
|
},
|
|
|
/** 搜索按钮操作 */
|
|
|
handleQuery() {
|
|
|
this.queryParams.pageNum = 1;
|
|
|
this.getList();
|
|
|
},
|
|
|
/** 重置按钮操作 */
|
|
|
resetQuery() {
|
|
|
this.resetForm("queryForm");
|
|
|
this.handleQuery();
|
|
|
},
|
|
|
// 多选框选中数据
|
|
|
handleSelectionChange(selection) {
|
|
|
this.ids = selection.map((item) => item.contentId);
|
|
|
this.single = selection.length !== 1;
|
|
|
this.multiple = !selection.length;
|
|
|
},
|
|
|
/** 新增按钮操作 */
|
|
|
handleAdd() {
|
|
|
this.reset();
|
|
|
this.open = true;
|
|
|
this.title = "添加操作步骤";
|
|
|
},
|
|
|
/** 修改按钮操作 */
|
|
|
handleUpdate(row) {
|
|
|
this.reset();
|
|
|
const contentId = row.contentId || this.ids;
|
|
|
this.selectsubsidiaryListtag = [];
|
|
|
this.selectBOMListtag = [];
|
|
|
getProcesscontent(contentId).then((response) => {
|
|
|
this.form = response.data;
|
|
|
if (this.form.material != "" && this.form.material != null) {
|
|
|
this.selectBOMListtag = JSON.parse(
|
|
|
JSON.stringify(this.form.material.split(","))
|
|
|
);
|
|
|
}
|
|
|
if (this.form.device != "" && this.form.device != null) {
|
|
|
this.selectsubsidiaryListtag = JSON.parse(
|
|
|
JSON.stringify(this.form.device.split(","))
|
|
|
);
|
|
|
}
|
|
|
this.open = true;
|
|
|
this.title = "修改操作步骤";
|
|
|
});
|
|
|
},
|
|
|
/** 提交按钮 */
|
|
|
submitForm() {
|
|
|
// debugger
|
|
|
this.$refs["form"].validate((valid) => {
|
|
|
if (valid) {
|
|
|
if (this.form.contentId != null) {
|
|
|
updateProcesscontent(this.form).then((response) => {
|
|
|
this.$modal.msgSuccess("修改成功");
|
|
|
this.open = false;
|
|
|
this.getList();
|
|
|
});
|
|
|
} else {
|
|
|
addProcesscontent(this.form).then((response) => {
|
|
|
this.$modal.msgSuccess("新增成功");
|
|
|
this.open = false;
|
|
|
this.getList();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
// 新增—设备选择
|
|
|
handleClose(tag) {
|
|
|
this.selectsubsidiaryListtag.splice(
|
|
|
this.selectsubsidiaryListtag.indexOf(tag),
|
|
|
1
|
|
|
);
|
|
|
this.form.device = "";
|
|
|
var code = [];
|
|
|
this.selectsubsidiaryListtag.forEach((item) => {
|
|
|
if (item) {
|
|
|
code.push(item);
|
|
|
}
|
|
|
});
|
|
|
console.log(code, this.selectsubsidiaryListtag);
|
|
|
this.form.device = code.join(",");
|
|
|
},
|
|
|
// 新增—BOM选择
|
|
|
handleCloseBOM(tag) {
|
|
|
this.selectBOMListtag.splice(this.selectBOMListtag.indexOf(tag), 1);
|
|
|
this.form.material = "";
|
|
|
var code = [];
|
|
|
this.selectBOMListtag.forEach((item) => {
|
|
|
if (item) {
|
|
|
code.push(item);
|
|
|
}
|
|
|
});
|
|
|
console.log(code, this.selectBOMListtag);
|
|
|
this.form.material = code.join(",");
|
|
|
},
|
|
|
//新增 设备选择弹出框
|
|
|
onItemSelectedEquipment(obj) {
|
|
|
if (this.form.device == null || this.form.device == "") {
|
|
|
console.log("device是空,if获取的obj", obj);
|
|
|
console.log("device是空,if获取的device", this.form.device);
|
|
|
this.form.device = obj;
|
|
|
this.selectsubsidiaryListtag = obj.split(",");
|
|
|
} else {
|
|
|
if (obj != undefined && obj != null && obj != "") {
|
|
|
const a = obj.split(",");
|
|
|
console.log("切割的数组", obj.split(","));
|
|
|
a.forEach((item) => {
|
|
|
const b = this.form.device.split(",");
|
|
|
const size = b.length;
|
|
|
console.log("size", size, b[size - 1]);
|
|
|
const item1 = item + ",";
|
|
|
console.log("打印item1", item1);
|
|
|
this.checkDevice = this.form.device.search(item1) != -1;
|
|
|
console.log("check的值", this.checkDevice);
|
|
|
if (this.checkDevice == true || b[size - 1] == item) {
|
|
|
console.log("重复添加", true);
|
|
|
Message.warning("您已经添加过该设备,请勿重复添加!!!");
|
|
|
} else if (this.checkDevice == false) {
|
|
|
this.selectsubsidiaryListtag.push(item);
|
|
|
this.form.device = this.form.device + "," + item;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
|
|
|
//新增 BOM选择弹出框
|
|
|
onItemSelectedBom(obj) {
|
|
|
if (this.form.material == null || this.form.material == "") {
|
|
|
console.log("material是空,if获取的obj", obj);
|
|
|
console.log("material是空,if获取的material", this.form.material);
|
|
|
this.form.material = obj;
|
|
|
this.selectBOMListtag = obj.split(",");
|
|
|
} else {
|
|
|
if (obj != undefined && obj != null && obj != "") {
|
|
|
const a = obj.split(",");
|
|
|
const len = obj.split(",").length;
|
|
|
console.log("切割的数组", obj.split(","));
|
|
|
a.forEach((item) => {
|
|
|
this.checkMaterial = this.form.material.search(item) != -1;
|
|
|
console.log("check的值", this.check);
|
|
|
if (this.checkMaterial == true) {
|
|
|
console.log("重复添加", true);
|
|
|
Message.warning("您已经添加过该物料Bom,请勿重复添加!!!");
|
|
|
} else if (this.checkMaterial == false) {
|
|
|
this.selectBOMListtag.push(item);
|
|
|
this.form.material = this.form.material + "," + item;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
//新增 设备选择弹出框
|
|
|
handleSelectEquipment() {
|
|
|
this.$refs.itemSelect.showFlag = true;
|
|
|
},
|
|
|
// 新增 设备选择弹出框
|
|
|
handleSelectBom() {
|
|
|
this.$refs.itemSelectBom.showFlag = true;
|
|
|
},
|
|
|
/** 删除按钮操作 */
|
|
|
handleDelete(row) {
|
|
|
const contentIds = row.contentId || this.ids;
|
|
|
this.$modal
|
|
|
.confirm("是否确认删除操作步骤?")
|
|
|
.then(function () {
|
|
|
return delProcesscontent(contentIds);
|
|
|
})
|
|
|
.then(() => {
|
|
|
this.getList();
|
|
|
this.$modal.msgSuccess("删除成功");
|
|
|
})
|
|
|
.catch(() => {});
|
|
|
},
|
|
|
/** 导出按钮操作 */
|
|
|
handleExport() {
|
|
|
this.download(
|
|
|
"technology/pro/recipecontent/export",
|
|
|
{
|
|
|
...this.queryParams,
|
|
|
},
|
|
|
`recipecontent_${new Date().getTime()}.xlsx`
|
|
|
);
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
|
.tagbox {
|
|
|
display: flex;
|
|
|
/* overflow: scroll; */
|
|
|
position: relative;
|
|
|
width: 100%;
|
|
|
// padding-left: 26px;
|
|
|
margin-bottom: 15px;
|
|
|
.tagboxlabel {
|
|
|
width: 109px;
|
|
|
text-align: right;
|
|
|
vertical-align: middle;
|
|
|
font-size: 14px;
|
|
|
color: black;
|
|
|
line-height: 40px;
|
|
|
-webkit-box-sizing: border-box;
|
|
|
box-sizing: border-box;
|
|
|
margin-right: 15px;
|
|
|
}
|
|
|
.tag {
|
|
|
width: 82%;
|
|
|
border: 1px #dcdfe6 solid;
|
|
|
height: 70px;
|
|
|
padding: 5px 15px;
|
|
|
overflow-y: scroll;
|
|
|
.tagitem {
|
|
|
margin-left: 5px;
|
|
|
}
|
|
|
}
|
|
|
.button1 {
|
|
|
width: 57px;
|
|
|
height: 35px;
|
|
|
margin-left: 10px;
|
|
|
background: #f5f7fa;
|
|
|
}
|
|
|
}
|
|
|
div.tag:empty:before {
|
|
|
content: attr(placeholder);
|
|
|
color: #bbb;
|
|
|
}
|
|
|
</style> |