Merge remote-tracking branch 'origin/master'

master
wws 1 year ago
commit d107b3fb38

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询生产工序列表
export function listProcess(query) {
return request({
url: '/mes/pro/recipe/list',
method: 'get',
params: query
})
}
// 查询所有有效生产工序
export function listAllProcess() {
return request({
url: '/mes/pro/recipe/listAll',
method: 'get'
})
}
// 查询生产工序详细
export function getProcess(recipeId) {
return request({
url: '/mes/pro/recipe/' + recipeId,
method: 'get'
})
}
// 新增生产工序
export function addProcess(data) {
return request({
url: '/mes/pro/recipe',
method: 'post',
data: data
})
}
// 修改生产工序
export function updateProcess(data) {
return request({
url: '/mes/pro/recipe',
method: 'put',
data: data
})
}
// 删除生产工序
export function delProcess(recipeId) {
return request({
url: '/mes/pro/recipe/' + recipeId,
method: 'delete'
})
}

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询生产工序内容列表
export function listProcesscontent(query) {
return request({
url: '/mes/pro/recipecontent/list',
method: 'get',
params: query
})
}
// 查询生产工序内容详细
export function getProcesscontent(contentId) {
return request({
url: '/mes/pro/recipecontent/' + contentId,
method: 'get'
})
}
// 新增生产工序内容
export function addProcesscontent(data) {
return request({
url: '/mes/pro/recipecontent',
method: 'post',
data: data
})
}
// 修改生产工序内容
export function updateProcesscontent(data) {
return request({
url: '/mes/pro/recipecontent',
method: 'put',
data: data
})
}
// 删除生产工序内容
export function delProcesscontent(contentId) {
return request({
url: '/mes/pro/recipecontent/' + contentId,
method: 'delete'
})
}

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询生产工单列表
export function listWorkorder(query) {
return request({
url: '/mes/pro/workorder/list',
method: 'get',
params: query
});
}
// 查询生产工单详细
export function getWorkorder(workorderId) {
return request({
url: '/mes/pro/workorder/' + workorderId,
method: 'get'
});
}
// 新增生产工单
export function addWorkorder(data) {
return request({
url: '/mes/pro/workorder',
method: 'post',
data: data
});
}
// 修改生产工单
export function updateWorkorder(data) {
return request({
url: '/mes/pro/workorder',
method: 'put',
data: data
});
}
// 删除生产工单
export function delWorkorder(workorderId) {
return request({
url: '/mes/pro/workorder/' + workorderId,
method: 'delete'
});
}
//下发生产工单
export function downWorkorder(workorderId) {
return request({
url: '/mes/pro/workorder/downWorkorder/' + workorderId,
method: 'post'
});
}

@ -0,0 +1,222 @@
<template>
<el-dialog title="物料产品选择"
v-if="showFlag"
:visible.sync="showFlag"
:modal= false
width="80%"
center
>
<el-row :gutter="20">
<!--分类数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="itemTypeName"
placeholder="请输入分类名称"
clearable
size="small"
prefix-icon="el-icon-search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="itemTypeOptions"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="tree"
default-expand-all
@node-click="handleNodeClick"
/>
</div>
</el-col>
<!--物料数据-->
<el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="物料编码" prop="itemCode">
<el-input
v-model="queryParams.itemCode"
placeholder="请输入物料编码"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料名称" prop="itemName">
<el-input
v-model="queryParams.itemName"
placeholder="请输入物料名称"
clearable
style="width: 240px"
@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>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="itemList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="物料编码" width = "120" align="center" key="itemCode" prop="itemCode" v-if="columns[0].visible" >
</el-table-column>
<el-table-column label="物料名称" min-width="120" align="left" key="itemName" prop="itemName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="规格型号" align="left" key="specification" prop="specification" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="单位" align="center" key="unitOfMeasure" prop="unitOfMeasure" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="物料/产品" align="center" key="itemOrProduct" prop="itemOrProduct" v-if="columns[4].visible" :show-overflow-tooltip="true" >
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_item_product" :value="scope.row.itemOrProduct"/>
</template>
</el-table-column>
<el-table-column label="所属分类" align="center" key="itemTypeName" prop="itemTypeName" v-if="columns[5].visible" width="120" />
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirmSelect"> </el-button>
<el-button @click="showFlag=false"> </el-button>
</div>
</el-dialog>
</template>
<script>
//import { listMdItem, getMdItem, delMdItem, addMdItem, updateMdItem} from "@/api/mes/md/mdItem";
//import { treeselect } from "@/api/mes/md/itemtype";
//import { listAllUnitmeasure} from "@/api/mes/md/unitmeasure";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "MdItemSelect",
dicts: ['sys_yes_no','mes_item_product'],
components: { Treeselect },
data() {
return {
showFlag:false,
//
ids: [],
selectedRows: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
itemList: null,
//
itemTypeOptions: undefined,
//
itemTypeName: undefined,
defaultProps: {
children: "children",
label: "label"
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
itemCode: undefined,
itemName: undefined,
itemTypeId: 0
},
//
columns: [
{ key: 0, label: `物料/产品编码`, visible: true },
{ key: 1, label: `物料/产品名称`, visible: true },
{ key: 2, label: `规格型号`, visible: true },
{ key: 3, label: `单位`, visible: true },
{ key: 4, label: `物料/产品`, visible: true },
{ key: 5, label: `物料分类`, visible: true },
{ key: 6, label: `创建时间`, visible: true }
]
};
},
watch: {
//
itemTypeName(val) {
this.$refs.tree.filter(val);
}
},
created() {
this.getList();
this.getTreeselect();
},
methods: {
/** 查询物料编码列表 */
getList() {
this.loading = true;
listMdItem(this.queryParams).then(response => {
this.itemList = response.rows;
this.total = response.total;
this.loading = false;
}
);
},
/** 查询分类下拉树结构 */
getTreeselect() {
treeselect().then(response => {
this.itemTypeOptions = response.data;
});
},
//
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
//
handleNodeClick(data) {
this.queryParams.itemTypeId = data.id;
this.handleQuery();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.itemId);
this.single = selection.length != 1;
this.multiple = !selection.length;
this.selectedRows = selection;
},
//
confirmSelect(){
if(this.ids ==[] || this.ids.length==0){
this.$notify({
title:'提示',
type:'warning',
message: '请至少选择一条数据!'
});
return;
}
this.$emit('onSelected',this.selectedRows);
this.showFlag = false;
}
}
};
</script>

@ -0,0 +1,238 @@
<template>
<el-dialog title="物料产品选择"
v-if="showFlag"
:visible.sync="showFlag"
:modal= false
width="80%"
center
>
<el-row :gutter="20">
<!--分类数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="itemTypeName"
placeholder="请输入分类名称"
clearable
size="small"
prefix-icon="el-icon-search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="itemTypeOptions"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="tree"
default-expand-all
@node-click="handleNodeClick"
/>
</div>
</el-col>
<!--物料数据-->
<el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="物料编码" prop="itemCode">
<el-input
v-model="queryParams.itemCode"
placeholder="请输入物料编码"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料名称" prop="itemName">
<el-input
v-model="queryParams.itemName"
placeholder="请输入物料名称"
clearable
style="width: 240px"
@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>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="itemList" @current-change="handleCurrent" @row-dblclick="handleRowDbClick">
<el-table-column width="50" align="center" >
<template v-slot="scope">
<el-radio v-model="selectedItemId" :label="scope.row.itemId" @change="handleRowChange(scope.row)">{{""}}</el-radio>
</template>
</el-table-column>
<el-table-column label="物料编码" width = "120" align="center" key="itemCode" prop="itemCode" v-if="columns[0].visible" >
</el-table-column>
<el-table-column label="物料名称" min-width="120" align="left" key="itemName" prop="itemName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="规格型号" align="left" key="specification" prop="specification" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="单位" align="center" key="unitOfMeasure" prop="unitOfMeasure" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="物料/产品" align="center" key="itemOrProduct" prop="itemOrProduct" v-if="columns[4].visible" :show-overflow-tooltip="true" >
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_item_product" :value="scope.row.itemOrProduct"/>
</template>
</el-table-column>
<el-table-column label="所属分类" align="center" key="itemTypeName" prop="itemTypeName" v-if="columns[5].visible" width="120" />
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirmSelect"> </el-button>
<el-button @click="showFlag=false"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { listMdItem, getMdItem, delMdItem, addMdItem, updateMdItem} from "@/api/mes/md/mdItem";
import { listAllUnitmeasure} from "@/api/mes/md/unitmeasure";
import {genCode} from "@/api/system/autocode/rule"
import { getToken } from "@/utils/auth";
import { treeselect } from "@/api/mes/md/itemtype";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "MdItemSingle",
dicts: ['sys_yes_no','mes_item_product'],
components: { Treeselect },
data() {
return {
showFlag:false,
//
selectedItemId: undefined,
selectedRows: undefined,
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
itemList: null,
//
itemTypeOptions: undefined,
//
itemTypeName: undefined,
defaultProps: {
children: "children",
label: "label"
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
itemCode: undefined,
itemName: undefined,
itemTypeId: 0
},
//
columns: [
{ key: 0, label: `物料/产品编码`, visible: true },
{ key: 1, label: `物料/产品名称`, visible: true },
{ key: 2, label: `规格型号`, visible: true },
{ key: 3, label: `单位`, visible: true },
{ key: 4, label: `物料/产品`, visible: true },
{ key: 5, label: `物料分类`, visible: true },
{ key: 6, label: `创建时间`, visible: true }
]
};
},
watch: {
//
itemTypeName(val) {
this.$refs.tree.filter(val);
}
},
created() {
this.getList();
this.getTreeselect();
},
methods: {
/** 查询物料编码列表 */
getList() {
this.loading = true;
listMdItem(this.queryParams).then(response => {
this.itemList = response.rows;
this.total = response.total;
this.loading = false;
}
);
},
/** 查询分类下拉树结构 */
getTreeselect() {
treeselect().then(response => {
this.itemTypeOptions = response.data;
});
},
//
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
//
handleNodeClick(data) {
this.queryParams.itemTypeId = data.id;
this.handleQuery();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
handleCurrent(row){
if(row){
this.selectedRows = row;
}
},
handleRowDbClick(row){
if(row){
this.selectedRows = row;
this.$emit('onSelected',this.selectedRows);
this.showFlag = false;
}
},
//
handleRowChange(row) {
debugger;
if(row){
this.selectedRows = row;
}
},
//
confirmSelect(){
if(this.selectedItemId ==null || this.selectedItemId==0){
this.$notify({
title:'提示',
type:'warning',
message: '请至少选择一条数据!'
});
return;
}
this.$emit('onSelected',this.selectedRows);
this.showFlag = false;
}
}
};
</script>

@ -0,0 +1,320 @@
<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="device" :show-overflow-tooltip="true"/>
<el-table-column label="单位" align="center" prop="material" :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="12">
<el-form-item label="辅助设备" prop="device">
<el-input v-model="form.device" placeholder="请输入辅助设备" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="BOM材料" prop="material">
<el-input v-model="form.material" placeholder="请输入辅助材料" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用量" prop="device">
<el-input v-model="form.device" placeholder="请输入用量" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" prop="material">
<el-input v-model="form.material" placeholder="请输入单位" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="控制参数" prop="device">
<el-input v-model="form.device" placeholder="请输入控制参数" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="安全设置" prop="material">
<el-input v-model="form.material" 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>
<ItemSelect ref="itemSelect" @onSelected="onItemSelected" > </ItemSelect>
</div>
</template>
<script>
import { listProcesscontent, getProcesscontent, delProcesscontent, addProcesscontent, updateProcesscontent } from "@/api/mes/pro/recipecontent";
import ItemSelect from "@/components/itemSelect/index.vue";
export default {
name: "Processcontent",
components: { ItemSelect },
data() {
return {
//
loading: true,
//
ids: [],
//
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" }
],
}
};
},
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
getProcesscontent(contentId).then(response => {
this.form = response.data;
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();
});
}
}
});
},
/** 删除按钮操作 */
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('mes/pro/recipecontent/export', {
...this.queryParams
}, `recipecontent_${new Date().getTime()}.xlsx`)
}
}
};
</script>

@ -0,0 +1,408 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="配方编码" prop="recipeCode">
<el-input
v-model="queryParams.recipeCode"
placeholder="请输入配方编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="配方名称" prop="recipeName">
<el-input
v-model="queryParams.recipeName"
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>
</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:recipe: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="['mes:pro:recipe: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="['mes:pro:recipe: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="['mes:pro:recipe:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="recipeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="配方编码" align="center" prop="recipeCode" >
<template slot-scope="scope">
<el-button
type="text"
@click="handleView(scope.row)"
v-hasPermi="['mes:pro:recipe:query']"
>{{scope.row.recipeCode}}</el-button>
</template>
</el-table-column>
<el-table-column label="配方名称" align="center" prop="recipeName" :show-overflow-tooltip="true"/>
<el-table-column label="版本" align="center" prop="version" :show-overflow-tooltip="true"/>
<el-table-column label="配方说明" align="center" prop="attention" :show-overflow-tooltip="true"/>
<el-table-column label="是否启用" align="center" prop="enableFlag">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.enableFlag"/>
</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">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['pro:recipe:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['pro:recipe:remove']"
>删除</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="100px">
<el-row>
<el-col :span="8">
<el-form-item label="配方编码" prop="recipeCode">
<el-input v-model="form.recipeCode" placeholder="请输入配方编码" />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="配方名称" prop="recipeName">
<el-input v-model="form.recipeName" placeholder="请输入配方名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否启用" prop="enableFlag">
<el-radio-group v-model="form.enableFlag" disabled v-if="optType=='view'">
<el-radio
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</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>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="版本" prop="version">
<el-input v-model="form.version" type="input" placeholder="请输入版本" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="配方SOP" prop="fileList">
<FileUpload v-model="form.fileList"/>
</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="请输入内容" />
</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>
<el-divider content-position="center" v-if="form.recipeId !=null"></el-divider>
<el-tabs type="border-card" v-if="form.recipeId != null">
<Processcontent v-if="form.recipeId !=null" :optType="optType" :recipeId="form.recipeId"></Processcontent>
</el-tabs>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="cancel" v-if="optType =='view'"></el-button>
<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 } from "@/api/mes/pro/recipe";
import Processcontent from "./content.vue";
export default {
name: "Process",
dicts: ['sys_yes_no','split_merge'],
components: {Processcontent},
data() {
return {
//
autoGenFlag:false,
optType: undefined,
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
recipeList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
recipeCode: null,
recipeName: null,
enableFlag: null,
},
//
form: {},
//
rules: {
recipeCode: [
{ required: true, message: "配方编码不能为空", trigger: "blur" }
],
recipeName: [
{ required: true, message: "配方名称不能为空", trigger: "blur" }
],
enableFlag: [
{ required: true, message: "是否启用不能为空", trigger: "blur" }
]
},
fileList:[]
};
},
created() {
this.getList();
},
methods: {
/** 查询生产配方列表 */
getList() {
this.loading = true;
listProcess(this.queryParams).then(response => {
this.recipeList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
recipeId: null,
recipeCode: null,
recipeName: null,
attention: null,
enableFlag: 'Y',
remark: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
fileList:''
};
this.autoGenFlag = false;
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.recipeId)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加生产配方";
this.optType = "add";
},
//
handleView(row){
this.reset();
const recipeId = row.recipeId || this.ids;
getProcess(recipeId).then(response => {
this.form = response.data;
this.open = true;
this.title = "查看配方信息";
this.optType = "view";
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const recipeId = row.recipeId || this.ids
getProcess(recipeId).then(response => {
this.form = response.data;
if(response.data.files != null){
var newFiles = [];
response.data.files.forEach(item =>{
var newfile = {};
newfile.name = item.fileName;
newfile.url = item.fileAddress;
newFiles.push(newfile);
})
this.form.fileList = newFiles;
}
this.open = true;
this.title = "修改生产配方";
this.optType = "edit";
});
},
/** 提交按钮 */
submitForm() {
if(Array.isArray(this.form.fileList)){
this.form.fileList = this.listToString(this.form.fileList);
}
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.recipeId != null) {
updateProcess(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addProcess(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const recipeIds = row.recipeId || this.ids;
this.$modal.confirm('是否确认删除生产配方?').then(function() {
return delProcess(recipeIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('mes/pro/recipe/export', {
...this.queryParams
}, `recipe_${new Date().getTime()}.xlsx`)
},
//
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) : '';
}
}
};
</script>

@ -0,0 +1,519 @@
<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="workorderCode">
<el-input
v-model="queryParams.workorderCode"
placeholder="请输入工单编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工单状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="工单状态"
clearable
style="width: 240px"
>
<el-option
v-for="dict in dict.type.workorder_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="订单编码" prop="orderCode">
<el-input
v-model="queryParams.orderCode"
placeholder="请输入订单编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="产品名称" prop="productName">
<el-input
v-model="queryParams.productName"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工艺编码" prop="routeCode">
<el-input
v-model="queryParams.routeCode"
placeholder="请输入工艺编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="产线编码" prop="prodLineCode">
<el-input
v-model="queryParams.prodLineCode"
placeholder="请输入产线编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="生产日期" prop="productDateArray">
<el-date-picker
v-model="queryParams.productDateArray"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="班次" prop="shiftId">
<el-input
v-model="queryParams.shiftId"
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>
</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:workorder:add']"
>上传SAP生产</el-button>
</el-col>-->
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-info"
size="mini"
:disabled="multiple&&multiple0"
@click="handleUpdateDown"
v-hasPermi="['mes:pro:workorder:edit']"
>下达工单</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['mes:pro:workorder: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="['mes:pro:workorder: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="['mes:pro:workorder:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="workorderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" >
</el-table-column>
<el-table-column label="工单ID" align="center" prop="workorderId" v-if="false"/>
<el-table-column label="子工单编码" align="center" prop="workorderCode" width="180"/>
<el-table-column label="工单名称" align="center" prop="workorderName" v-if="false"/>
<el-table-column label="订单id" align="center" prop="orderId" v-if="false"/>
<el-table-column label="子订单编码" align="center" prop="orderCode" width="160"/>
<el-table-column label="产品ID" align="center" prop="productId" v-if="false"/>
<el-table-column label="产品编号" align="center" prop="productCode" width="160"/>
<el-table-column label="产品名称" align="center" prop="productName" width="160"/>
<el-table-column label="规格型号" align="center" prop="productSpc" v-if="false"/>
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="已生产数量" align="center" prop="quantityProduced" width="100"/>
<el-table-column label="已拆分数量" align="center" prop="quantitySplit" width="100"/>
<el-table-column label="工艺编码" align="center" prop="routeCode" />
<el-table-column label="产线设备" align="center" prop="prodLineCode" />
<el-table-column label="工单生产日期" align="center" prop="productDate" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.productDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="班次" align="center" prop="shiftId" />
<el-table-column label="工单状态" align="center" prop="status" >
<template slot-scope="scope">
<dict-tag :options="dict.type.workorder_type" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="产品类型" align="center" prop="prodType" />
</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="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="工单编码" prop="workorderCode">
<el-input v-model="form.workorderCode" placeholder="请输入工单编码" />
</el-form-item>
<el-form-item label="工单名称" prop="workorderName">
<el-input v-model="form.workorderName" placeholder="请输入工单名称" />
</el-form-item>
<el-form-item label="订单id" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="订单编码" prop="orderCode">
<el-input v-model="form.orderCode" placeholder="请输入订单编码" />
</el-form-item>
<el-form-item label="产品ID" prop="productId">
<el-input v-model="form.productId" placeholder="请输入产品ID" />
</el-form-item>
<el-form-item label="产品编号" prop="productCode">
<el-input v-model="form.productCode" placeholder="请输入产品编号" />
</el-form-item>
<el-form-item label="产品名称" prop="productName">
<el-input v-model="form.productName" placeholder="请输入产品名称" />
</el-form-item>
<el-form-item label="规格型号" prop="productSpc">
<el-input v-model="form.productSpc" placeholder="请输入规格型号" />
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位" />
</el-form-item>
<el-form-item label="已生产数量" prop="quantityProduced">
<el-input v-model="form.quantityProduced" placeholder="请输入已生产数量" />
</el-form-item>
<el-form-item label="已拆分数量" prop="quantitySplit">
<el-input v-model="form.quantitySplit" placeholder="请输入已拆分数量" />
</el-form-item>
<el-form-item label="工艺id" prop="routeCode">
<el-input v-model="form.routeCode" placeholder="请输入工艺id" />
</el-form-item>
<el-form-item label="产线设备" prop="prodLineCode">
<el-input v-model="form.prodLineCode" placeholder="请输入产线设备" />
</el-form-item>
<el-form-item label="工单生产日期" prop="productDate">
<el-date-picker
v-model="form.productDate"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="班次" prop="shiftId">
<el-input v-model="form.shiftId" placeholder="请输入班次" />
</el-form-item>
<el-form-item label="父工单" prop="parentOrder">
<el-input v-model="form.parentOrder" placeholder="请输入父工单" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="预留字段1" prop="attr1">
<el-input v-model="form.attr1" placeholder="请输入预留字段1" />
</el-form-item>
<el-form-item label="预留字段2" prop="attr2">
<el-input v-model="form.attr2" placeholder="请输入预留字段2" />
</el-form-item>
<el-form-item label="预留字段3" prop="attr3">
<el-input v-model="form.attr3" placeholder="请输入预留字段3" />
</el-form-item>
<el-form-item label="预留字段4" prop="attr4">
<el-input v-model="form.attr4" placeholder="请输入预留字段4" />
</el-form-item>
<el-form-item label="${comment}" prop="factoryCode">
<el-input v-model="form.factoryCode" placeholder="请输入${comment}" />
</el-form-item>
<el-form-item label="是否为底层节点(1是0不是)" prop="isEnd">
<el-input v-model="form.isEnd" placeholder="请输入是否为底层节点(1是0不是)" />
</el-form-item>
</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 { listWorkorder, getWorkorder, delWorkorder,downWorkorder, addWorkorder, updateWorkorder } from "@/api/mes/pro/workorder";
import moment from 'moment';
export default {
name: "Workorder",
dicts: ['workorder_type'],
data() {
return {
//
loading: true,
//
ids: [],
cods:[],
//
single: true,
//
multiple: true,
//
statuses: [],
//
showSearch: true,
//
total: 0,
//
workorderList: [],
//
title: "",
//
open: false,
//
queryParams: {
productDateArray: [new Date(),new Date()],
pageNum: 1,
pageSize: 10,
workorderCode: null,
workorderName: null,
orderId: null,
orderCode: null,
productId: null,
productCode: null,
productName: null,
productSpc: null,
unit: null,
quantityProduced: null,
quantitySplit: null,
routeCode: null,
prodLineCode: null,
productDate: new Date(),
shiftId: null,
parentOrder: null,
ancestors: null,
status: 'w0',
attr1: null,
attr2: null,
attr3: null,
attr4: null,
prodType: null,
factoryCode: null,
isEnd: null
},
//
form: {},
//
rules: {
workorderCode: [
{ required: true, message: "工单编码不能为空", trigger: "blur" }
],
workorderName: [
{ required: true, message: "工单名称不能为空", trigger: "blur" }
],
orderId: [
{ required: true, message: "订单id不能为空", trigger: "blur" }
],
productCode: [
{ required: true, message: "产品编号不能为空", trigger: "blur" }
],
productName: [
{ required: true, message: "产品名称不能为空", trigger: "blur" }
],
unit: [
{ required: true, message: "单位不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询生产工单列表 */
getList() {
this.loading = true;
this.queryParams.isEnd = '1';//
if(this.queryParams.productDateArray!=null){
this.queryParams.productDateStart = moment(this.queryParams.productDateArray[0]).format('YYYY-MM-DD');
this.queryParams.productDateEnd = moment(this.queryParams.productDateArray[1]).format('YYYY-MM-DD');
}
listWorkorder(this.queryParams).then(response => {
this.workorderList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
workorderId: null,
workorderCode: null,
workorderName: null,
orderId: null,
orderCode: null,
productId: null,
productCode: null,
productName: null,
productSpc: null,
unit: null,
quantityProduced: null,
quantitySplit: null,
routeCode: null,
prodLineCode: null,
productDate: null,
shiftId: null,
parentOrder: null,
ancestors: null,
status: null,
remark: null,
attr1: null,
attr2: null,
attr3: null,
attr4: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
prodType: null,
factoryCode: null,
isEnd: 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.workorderId)
this.codes = selection.map(item => item.workorderCode)
this.single = selection.length!==1
this.multiple = !selection.length
this.statuses = selection.map(item => item.status)
},
/** 新增按钮操作 */
handleAdd() {
alert("待建设")
//this.reset();
//this.open = true;
//this.title = "";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const workorderId = row.workorderId || this.ids
getWorkorder(workorderId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改生产工单";
});
},
/**下达工单**/
handleUpdateDown(row) {
var statusesArray = this.statuses;
for(var i=0; i<statusesArray.length; i++) {
if(statusesArray[i]=='w1'){//
this.$modal.msgError("已经下达的订单不允许操作");
return
}
}
const workorderIds = row.workorderCode || this.codes;
this.$modal.confirm('是否确认下发生产工单编号为"' + workorderIds + '"的数据项?').then(function() {
return downWorkorder(workorderIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("下发成功");
}).catch(() => {});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.workorderId != null) {
updateWorkorder(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addWorkorder(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
var statusesArray = this.statuses;
for(var i=0; i<statusesArray.length; i++) {
if(statusesArray[i]=='w1'){//
this.$modal.msgError("已经下达的订单不允许操作");
return
}
}
const workorderIds = row.workorderId || this.ids;
const workorderCodes = row.workorderCode || this.codes;
this.$modal.confirm('是否确认删除生产工单编号为"' + workorderCodes + '"的数据项?').then(function() {
return delWorkorder(workorderIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('workorder/workorder/export', {
...this.queryParams
}, `workorder_${new Date().getTime()}.xlsx`)
}
}
};
</script>
Loading…
Cancel
Save