You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

908 lines
26 KiB
Vue

2 years ago
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="100px"
>
2 years ago
<el-form-item label="工序编码" prop="processCode">
<el-input
v-model="queryParams.processCode"
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="enableFlag">
<el-input
v-model="queryParams.enableFlag"
placeholder="请输入是否启用"
clearable
@keyup.enter.native="handleQuery"
/>
</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
>
2 years ago
</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="['mes:pro:process:add']"
>新增</el-button
>
2 years ago
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['mes:pro:process:edit']"
>修改</el-button
>
2 years ago
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['mes:pro:process:remove']"
>删除</el-button
>
2 years ago
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['mes:pro:process:export']"
>导出</el-button
>
2 years ago
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
2 years ago
</el-row>
<el-table
v-loading="loading"
:data="processList"
@selection-change="handleSelectionChange"
>
2 years ago
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="工序编码" align="center" prop="processCode">
2 years ago
<template slot-scope="scope">
<el-button
type="text"
@click="handleView(scope.row)"
v-hasPermi="['mes:pro:process:query']"
>{{ scope.row.processCode }}</el-button
>
2 years ago
</template>
</el-table-column>
<el-table-column
label="工序名称"
align="center"
prop="processName"
:show-overflow-tooltip="true"
/>
2 years ago
<el-table-column label="拆分&合并" align="center" prop="splitMerge">
<template slot-scope="scope">
<dict-tag
:options="dict.type.split_merge"
:value="scope.row.splitMerge"
/>
2 years ago
</template>
</el-table-column>
<el-table-column
label="工作中心"
align="center"
prop="workCenter"
:show-overflow-tooltip="true"
/>
<el-table-column
label="线体设备"
align="center"
prop="equipment"
:show-overflow-tooltip="true"
/>
<el-table-column
label="工作时长"
align="center"
prop="workTime"
:show-overflow-tooltip="true"
/>
2 years ago
<el-table-column label="是否启用" align="center" prop="enableFlag">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_yes_no"
:value="scope.row.enableFlag"
/>
2 years ago
</template>
</el-table-column>
<el-table-column
label="备注"
align="center"
prop="remark"
:show-overflow-tooltip="true"
/>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
2 years ago
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['pro:process:edit']"
>修改</el-button
>
2 years ago
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['pro:process:remove']"
>删除</el-button
>
2 years ago
</template>
</el-table-column>
</el-table>
2 years ago
2 years ago
<pagination
v-show="total > 0"
2 years ago
: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="100px">
2 years ago
<el-row>
<el-col :span="8">
<el-form-item label="工序编码" prop="processCode">
<el-input
v-model="form.processCode"
placeholder="请输入工序编码"
/>
2 years ago
</el-form-item>
</el-col>
<el-col :span="8">
2 years ago
<el-form-item label="工序名称" prop="processName">
<el-input
v-model="form.processName"
placeholder="请输入工序名称"
/>
2 years ago
</el-form-item>
</el-col>
<el-col :span="8">
2 years ago
<el-form-item label="是否启用" prop="enableFlag">
<el-radio-group
v-model="form.enableFlag"
disabled
v-if="optType == 'view'"
>
2 years ago
<el-radio
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}</el-radio
>
2 years ago
</el-radio-group>
<el-radio-group v-model="form.enableFlag" v-else>
<el-radio
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}</el-radio
>
2 years ago
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
2 years ago
<el-col :span="8">
<el-form-item label="拆分&合并" prop="splitMerge">
2 years ago
<el-select v-model="form.splitMerge" placeholder="请选择">
<el-option
v-for="dict in dict.type.split_merge"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
2 years ago
</el-form-item>
</el-col>
2 years ago
<!--
<el-col :span="8">
2 years ago
<el-form-item label="拆合值" prop="splitMergeNum">
2 years ago
<el-input v-model="form.splitMergeNum" placeholder="请输入拆分&合并数量" />
</el-form-item>
2 years ago
</el-col>-->
<el-col :span="8">
<el-form-item label="工作时间" prop="workTime">
<el-input-number
:min="0"
:step="1"
v-model="form.workTime"
placeholder="请输入工作时长"
/>
</el-form-item>
</el-col>
2 years ago
<el-col :span="8">
<el-form-item
label="工作中心"
prop="workCenter"
style="width: 310px"
>
<!-- <el-cascader
2 years ago
:show-all-levels="false"
:options="factoryOptions"
:props = "{checkStrictly: true , label:'factoryName',value:'factoryId',children:'children' }"
v-model="form.workCenter"
placeholder="请选择工作中心"
clearable
style="width:400px"
></el-cascader> -->
<template>
<el-select
v-model="form.workCenter"
filterable
placeholder="请选择"
@change="selectWorkCenter"
>
<el-option
v-for="item in options1"
:key="item.factoryCode"
:label="item.factoryName"
:value="item.factoryCode"
>
</el-option>
</el-select>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
2 years ago
<el-form-item label="可多单运行" prop="sync">
<el-radio-group
v-model="form.sync"
disabled
v-if="optType == 'view'"
>
2 years ago
<el-radio
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}</el-radio
>
2 years ago
</el-radio-group>
<el-radio-group v-model="form.sync" v-else>
<el-radio
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}</el-radio
>
2 years ago
</el-radio-group>
2 years ago
</el-form-item>
</el-col>
<el-col :span="16" style="display: none;">
<el-form-item label="线体设备" prop="equipment">
<el-input v-model="form.equipment" placeholder="请选择线体设备">
<el-button
slot="append"
@click="handleSelectEquipment"
icon="el-icon-search"
></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="16">
<div class="tagbox">
<div class="tagboxlabel">线体设备</div>
<div class="tag" style="">
<el-tag
:key="index"
class="tagitem"
v-for="(tag, index) in selectMaterielListtag"
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-row>
<!-- <el-row>
<el-col :span="8">
<el-form-item label="参数1温度" prop="param1">
<el-input v-model="form.param1" type="input" placeholder="请输入温度" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参数2湿度" prop="param2">
<el-input v-model="form.param2" type="input" placeholder="请输入湿度" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参数3" prop="param3">
<el-input v-model="form.param3" type="input" placeholder="请输入参数3" />
</el-form-item>
</el-col>
</el-row> -->
2 years ago
<el-row>
<el-col :span="24">
2 years ago
<el-form-item label="工序SOP" prop="fileList">
<FileUpload v-model="form.fileList" />
2 years ago
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工序说明" prop="attention">
<el-input
v-model="form.attention"
type="textarea"
placeholder="请输入内容"
/>
2 years ago
</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="请输入内容"
/>
2 years ago
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="center" v-if="form.processId != null"
>操作步骤</el-divider
>
<Processcontent
v-if="form.processId != null"
:optType="optType"
:processId="form.processId"
></Processcontent>
2 years ago
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="cancel" v-if="optType == 'view'"
>返回</el-button
>
2 years ago
<el-button type="primary" @click="submitForm" v-else> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
listProcess,
getProcess,
delProcess,
addProcess,
updateProcess,
listEquipment,
getEquipment,
listFactory,
getWorkCenterList,
} from "@/api/technology/process";
2 years ago
import Processcontent from "./content.vue";
import ItemSelect from "./single.vue";
import { Message } from "element-ui";
2 years ago
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
2 years ago
export default {
name: "Process",
dicts: ["sys_yes_no", "split_merge"],
components: { Processcontent, ItemSelect },
2 years ago
data() {
return {
workCenter: [],
options1: [],
2 years ago
// workCenter: { multiple: true,checkStrictly: true , label:'factoryName',value:'factoryId',children:'children' },
checkEquipment: null,
2 years ago
//自动生成编码
autoGenFlag: false,
2 years ago
optType: undefined,
// 遮罩层
loading: true,
// 选中数组
ids: [],
2 years ago
//最底层
ids1: [],
2 years ago
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
2 years ago
// 生产工序表格数据
processList: [],
equipmentList: [],
2 years ago
// 工厂模型树选项
factoryOptions: [],
2 years ago
// 弹出层标题
title: "",
boundTitle: "",
2 years ago
// 是否显示弹出层
open: false,
boundeEuipmentOpen: false,
equipmentTypeName: undefined,
2 years ago
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
processCode: null,
processName: null,
enableFlag: null,
2 years ago
// workCenter: null
// factoryCode: null
2 years ago
},
2 years ago
queryEquipmentParams: {
equipmentTypeName: null,
equipmentTypeCode: null,
equipmentName: null,
equipmentCode: null,
equipmentId: "",
processId: null,
2 years ago
pageNum: 1,
pageSize: 10,
},
2 years ago
// 表单参数
form: {},
// 表单校验
rules: {
processCode: [
{ required: true, message: "工序编码不能为空", trigger: "blur" },
2 years ago
],
processName: [
{ required: true, message: "工序名称不能为空", trigger: "blur" },
2 years ago
],
enableFlag: [
{ required: true, message: "是否启用不能为空", trigger: "blur" },
2 years ago
],
2 years ago
splitMerge: [
{ required: true, message: "拆分&合并不能为空", trigger: "blur" },
2 years ago
],
sync: [
{ required: true, message: "可多单运行不能为空", trigger: "blur" },
2 years ago
],
},
fileList: [],
equipmentId: "",
2 years ago
options: null,
// 新增-物料选中listtag
selectMaterielListtag: [],
2 years ago
};
},
created() {
this.getList();
2 years ago
this.getEquipmentList();
2 years ago
this.getTreeselect();
2 years ago
},
methods: {
selectWorkCenter() {
this.form.workshopCode = this.form.workCenter;
},
2 years ago
activated() {
this.useTypeKey += 1;
},
2 years ago
handleEquipmentSelectionChange(val) {
this.equipmentList = val;
},
2 years ago
//中山榄菊日化实业有限公司 A001
getTreeselect() {
listFactory().then((response) => {
this.factoryOptions = [];
const data = {
factoryId: 1,
factoryName: "中山榄菊日化实业有限公司",
children: [],
};
data.children = this.handleTree(response.data, "factoryId", "parentId");
this.factoryOptions.push(data);
});
},
2 years ago
2 years ago
/** 查询物料信息列表 */
getEquipmentList() {
this.loading = true;
listEquipment(this.queryEquipmentParams).then((response) => {
this.equipmentList = response.rows;
this.total = response.total;
this.loading = false;
});
},
2 years ago
// 筛选节点
// filterNode(value, data) {
// if (!value) return true;
// return data.label.indexOf(value) !== -1;
// },
2 years ago
// 节点单击事件
handleNodeClick(data) {
this.queryEquipmentParams.equipmentTypeCode = data.id;
this.handleEquipmentTypeQuery();
},
2 years ago
/** 搜索按钮操作 */
handleEquipmentTypeQuery() {
console.log(2);
this.getEquipmentList();
2 years ago
},
/** 搜索按钮操作 */
handleEquipmentQuery() {
this.queryEquipmentParams.pageNum = 1;
this.getEquipmentList();
console.log(this.form);
},
2 years ago
// 生成表头序号
indexMethod(index) {
return index + 1;
},
2 years ago
// 多选框选中数据
handleEquipmentSelectionChange(selection) {
this.ids = selection.map((item) => item.equipmentId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
2 years ago
2 years ago
/** 查询生产工序列表 */
getList() {
this.loading = true;
listProcess(this.queryParams).then((response) => {
2 years ago
this.processList = response.rows;
this.total = response.total;
this.loading = false;
});
},
2 years ago
2 years ago
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
2 years ago
// 取消按钮
equipmentCancel() {
this.boundeEuipmentOpen = false;
this.reset();
},
2 years ago
// 表单重置
reset() {
this.form = {
processCode: null,
processName: null,
2 years ago
attention: null,
enableFlag: "Y",
2 years ago
remark: null,
createBy: null,
createTime: null,
updateBy: null,
2 years ago
updateTime: null,
fileList: "",
equipmentTypeName: "",
equipmentId: null,
equipmentTypeName: null,
equipmentTypeCode: null,
equipmentName: null,
equipmentCode: null,
equipment: null,
2 years ago
};
this.autoGenFlag = false;
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
2 years ago
/** 重置按钮操作 */
resetEquipmentQuery() {
this.resetForm("queryForm");
this.handleEquipmentQuery();
},
2 years ago
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.processId);
this.ids1 = selection.map((item) => item.processId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
2 years ago
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
getWorkCenterList().then((response) => {
2 years ago
this.options1 = response.rows;
console.log(this.options1);
});
2 years ago
this.open = true;
this.title = "添加生产工序";
this.optType = "add";
this.selectMaterielListtag = [];
},
/** 绑定设备操作 */
handleBoundeEuipment() {
//this.reset();
this.boundeEuipmentOpen = true;
this.boundTitle = "绑定设备";
this.optType = "bound";
2 years ago
},
// 查询明细按钮操作
handleView(row) {
2 years ago
this.reset();
const processId = row.processId || this.ids;
getProcess(processId).then((response) => {
2 years ago
this.form = response.data;
this.open = true;
this.title = "查看工序信息";
this.optType = "view";
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.selectMaterielListtag = [];
const processId = row.processId || this.ids;
getWorkCenterList().then((response) => {
2 years ago
this.options1 = response.rows;
console.log(this.options1);
});
getProcess(processId).then((response) => {
2 years ago
this.form = response.data;
console.log(this.form);
if (this.form.equipment != "") {
this.selectMaterielListtag = JSON.parse(
JSON.stringify(this.form.equipment.split(","))
);
}
2 years ago
// this.form.workCenter = this.form.workCenter.split(',');
if (response.data.files != null) {
2 years ago
var newFiles = [];
response.data.files.forEach((item) => {
var newfile = {};
newfile.name = item.fileName;
newfile.url = item.fileAddress;
newFiles.push(newfile);
});
2 years ago
this.form.fileList = newFiles;
}
2 years ago
this.open = true;
this.title = "修改生产工序";
this.optType = "edit";
});
},
2 years ago
2 years ago
/** 提交按钮 */
submitForm() {
// console.log('workCENTER',this.form.workCenter);
// this.work = JSON.stringify(this.form.workCenter);
// this.form.workCenter = JSON.stringify(this.form.workCenter);
console.log(this.form);
this.$refs["form"].validate((valid) => {
2 years ago
if (valid) {
if (this.form.processId != null) {
updateProcess(this.form).then((response) => {
2 years ago
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addProcess(this.form).then((response) => {
2 years ago
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
2 years ago
2 years ago
/** 删除按钮操作 */
handleDelete(row) {
const processIds = row.processId || this.ids;
this.$modal
.confirm("是否确认删除生产工序?")
.then(function () {
return delProcess(processIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
2 years ago
},
/** 导出按钮操作 */
handleExport() {
this.download(
"technology/pro/process/export",
{
...this.queryParams,
},
`process_${new Date().getTime()}.xlsx`
);
2 years ago
},
2 years ago
// 对象转成指定字符串分隔
listToString(list, separator) {
let strs = "";
separator = separator || ",";
for (let i in list) {
strs += list[i].url + separator;
}
return strs != "" ? strs.substr(0, strs.length - 1) : "";
},
// 新增—删除标签
handleClose(tag) {
this.selectMaterielListtag.splice(
this.selectMaterielListtag.indexOf(tag),
1
);
this.form.equipment = "";
var code = [];
this.selectMaterielListtag.forEach((item) => {
if(item){
code.push(item)
}
});
console.log(code,this.selectMaterielListtag)
this.form.equipment = code.join(',');
},
//新增 设备选择弹出框
onItemSelectedEquipment(obj) {
if (this.form.equipment == null) {
console.log("equipment是空if获取的obj", obj);
console.log("device是空if获取的equipment", this.form.equipment);
this.form.equipment = obj;
this.selectMaterielListtag = obj.split(",");
} else {
if (obj != undefined && obj != null) {
const a = obj.split(",");
const len = obj.split(",").length;
console.log("切割的数组", obj.split(","));
a.forEach((item) => {
2 years ago
const b = this.form.equipment.split(',');
const size = b.length;
console.log("size",size,b[size-1])
2 years ago
const item1 = item+',';
console.log("打印item1",item1);
this.checkEquipment = this.form.equipment.search(item1) != -1;
2 years ago
if (this.checkEquipment == true ||b[size-1] == item) {
console.log("重复添加", true);
Message.warning("您已经添加过该设备,请勿重复添加!!!");
} else if (this.checkEquipment == false) {
this.selectMaterielListtag.push(item);
this.form.equipment = this.form.equipment + "," + item;
}
console.log("check的值", this.checkEquipment, item,this.form.equipment);
});
}
}
},
//新增 设备选择弹出框
handleSelectEquipment() {
this.$refs.itemSelect.showFlag = true;
},
2 years ago
},
// workCenterList(){
// console.log(查询workCenterList);
// getWorkCenterList().then(data => {
// this.options = data;
// });
// this.form.workCenter = this.options[0].factoryCode;
// },
2 years ago
};
</script>
<style lang="scss" scoped>
.tagbox {
display: flex;
/* overflow: scroll; */
position: relative;
width: 100%;
// padding-left: 26px;
margin-bottom: 15px;
.tagboxlabel {
width: 100px;
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: 12px;
}
.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;
}
}
</style>