Commit b28b0770 authored by 赵汉亭's avatar 赵汉亭

Merge branch 'dev' of http://git.local.topsunit.com/mes/mes-ui into dev

parents ea3d74b7 6ce827a7
FROM nginx
MAINTAINER xin.lu
VOLUME /tmp
ENV LANG en_US.UTF-8
RUN echo "server { \
listen 80; \
client_max_body_size 50M; \
location /stage-api/ { \
proxy_pass http://192.168.3.91:8080/; \
proxy_redirect off; \
proxy_set_header Host mes-ui; \
proxy_set_header X-Real-IP \$remote_addr; \
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; \
} \
#解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \
location / { \
root /var/mes/mes-ui/; \
index index.html index.htm; \
if (!-e \$request_filename) { \
rewrite ^(.*)\$ /index.html?s=\$1 last; \
break; \
} \
} \
access_log /var/log/nginx/access.log ; \
} " > /etc/nginx/conf.d/default.conf \
&& mkdir -p /var/mes \
&& mkdir -p /var/mes/mes-ui
ADD dist/ /var/mes/mes-ui/
EXPOSE 80
EXPOSE 443
import request from '@/utils/request'
// 查询样品制作单列表
export function listPrototypeMake(query) {
return request({
url: '/mes/pro/prototypeMake/list',
method: 'get',
params: query
})
}
// 查询样品制作单详细
export function getPrototypeMake(prototypeMakeId) {
return request({
url: '/mes/pro/prototypeMake/' + prototypeMakeId,
method: 'get'
})
}
// 新增样品制作单
export function addPrototypeMake(data) {
return request({
url: '/mes/pro/prototypeMake',
method: 'post',
data: data
})
}
// 修改样品制作单
export function updatePrototypeMake(data) {
return request({
url: '/mes/pro/prototypeMake',
method: 'put',
data: data
})
}
// 删除样品制作单
export function delPrototypeMake(prototypeMakeId) {
return request({
url: '/mes/pro/prototypeMake/' + prototypeMakeId,
method: 'delete'
})
}
import request from '@/utils/request'
// 查询样品制作BOM列表
export function listPrototypeMakeBom(query) {
return request({
url: '/mes/pro/prototypeMakeBom/list',
method: 'get',
params: query
})
}
// 查询样品制作BOM详细
export function getPrototypeMakeBom(bomItemId) {
return request({
url: '/mes/pro/prototypeMakeBom/' + bomItemId,
method: 'get'
})
}
// 新增样品制作BOM
export function addPrototypeMakeBom(data) {
return request({
url: '/mes/pro/prototypeMakeBom',
method: 'post',
data: data
})
}
// 修改样品制作BOM
export function updatePrototypeMakeBom(data) {
return request({
url: '/mes/pro/prototypeMakeBom',
method: 'put',
data: data
})
}
// 删除样品制作BOM
export function delPrototypeMakeBom(bomItemId) {
return request({
url: '/mes/pro/prototypeMakeBom/' + bomItemId,
method: 'delete'
})
}
import request from '@/utils/request'
// 查询样品制作工序列表
export function listPrototypeMakeProcess(query) {
return request({
url: '/mes/pro/prototypeMakeProcess/list',
method: 'get',
params: query
})
}
// 查询样品制作工序详细
export function getPrototypeMakeProcess(prototypeMakeProcessId) {
return request({
url: '/mes/pro/prototypeMakeProcess/' + prototypeMakeProcessId,
method: 'get'
})
}
// 新增样品制作工序
export function addPrototypeMakeProcess(data) {
return request({
url: '/mes/pro/prototypeMakeProcess',
method: 'post',
data: data
})
}
// 修改样品制作工序
export function updatePrototypeMakeProcess(data) {
return request({
url: '/mes/pro/prototypeMakeProcess',
method: 'put',
data: data
})
}
// 删除样品制作工序
export function delPrototypeMakeProcess(prototypeMakeProcessId) {
return request({
url: '/mes/pro/prototypeMakeProcess/' + prototypeMakeProcessId,
method: 'delete'
})
}
import request from '@/utils/request'
// 查询样品制作工序物料列表
export function listPrototypeMakeProcessItem(query) {
return request({
url: '/mes/pro/prototypeMakeProcessItem/list',
method: 'get',
params: query
})
}
// 查询样品制作工序物料详细
export function getPrototypeMakeProcessItem(prototypeMakeProcessItemId) {
return request({
url: '/mes/pro/prototypeMakeProcessItem/' + prototypeMakeProcessItemId,
method: 'get'
})
}
// 新增样品制作工序物料
export function addPrototypeMakeProcessItem(data) {
return request({
url: '/mes/pro/prototypeMakeProcessItem',
method: 'post',
data: data
})
}
// 修改样品制作工序物料
export function updatePrototypeMakeProcessItem(data) {
return request({
url: '/mes/pro/prototypeMakeProcessItem',
method: 'put',
data: data
})
}
// 删除样品制作工序物料
export function delPrototypeMakeProcessItem(prototypeMakeProcessItemId) {
return request({
url: '/mes/pro/prototypeMakeProcessItem/' + prototypeMakeProcessItemId,
method: 'delete'
})
}
...@@ -126,7 +126,7 @@ export const loadView = (view) => { ...@@ -126,7 +126,7 @@ export const loadView = (view) => {
return (resolve) => require([`@/views/${view}`], resolve) return (resolve) => require([`@/views/${view}`], resolve)
} else { } else {
// 使用 import 实现生产环境的路由懒加载 // 使用 import 实现生产环境的路由懒加载
return () => import(`@/views/${view}`) return (resolve) => require([`@/views/${view}`], resolve)
} }
} }
......
<template>
<div class="process-prod">
<!-- 设置物料弹窗 -->
<el-dialog
:visible.sync="showProcessProd"
width="800px"
:before-close="beforeClose"
append-to-body
title="设置物料"
>
<el-row :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-row>
<el-table :data="tableData">
<el-table-column label="物料名称" prop="itemName" align="center" />
<el-table-column label="单位" prop="unitOfMeasure" align="center" />
<el-table-column label="数量" prop="quantity" align="center" />
<el-table-column label="备注" prop="remark" align="center" />
<el-table-column label="操作" align="center" width="150">
<template slot-scope="{ row, $index }">
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="updateRow(row, $index)"
>修改</el-button
>
<el-button
type="text"
icon="el-icon-delete"
size="small"
@click="deleteRow($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<div slot="footer">
<el-button type="primary" size="small" @click="cancleConnect"
>关闭</el-button
>
</div>
</el-dialog>
<!-- 选择Bom物料 -->
<el-dialog
:visible.sync="showFlag"
title="选择Bom物料"
width="800px"
append-to-body
>
<el-table
:data="bomList"
@current-change="handleRowChange"
@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="物料名称" prop="itemName" />
<el-table-column label="单位" prop="unitOfMeasure" />
<el-table-column label="用料比例" prop="quantity" />
</el-table>
<div slot="footer">
<el-button @click="configmSelect">确认</el-button>
<el-button @click="showFlag = false">取消</el-button>
</div>
</el-dialog>
<!-- 编辑物料关联信息 -->
<el-dialog
:visible.sync="editConnectVisible"
width="400px"
title="编辑物料关联信息"
>
<el-form :model="form" inline size="small" label-width="80px">
<el-form-item label="物料名称">
<el-input disabled v-model="form.itemName"></el-input>
</el-form-item>
<el-form-item label="单位">
<el-input disabled v-model="form.unitOfMeasure"></el-input>
</el-form-item>
<el-form-item label="数量">
<el-input type="number" v-model="form.quantity"></el-input>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" :rows="3"></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button type="primary" size="small" @click="submitEditConnect"
>确认</el-button
>
<el-button size="small" @click="editConnectVisible = false"
>取消</el-button
>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
props: {
bomList: {
type: Array,
default: () => [],
},
process: {
type: Object,
default: () => ({}),
},
},
data() {
return {
form: {
itemName: "",
unitOfMeasure: "",
quantity: "",
remark: "",
},
currentRowIdx: undefined,
tableData: [],
selectedItemId: undefined,
selectedRows: null,
showFlag: false,
showProcessProd: false,
editConnectVisible: false,
};
},
computed: {
title () {
return '设置' + this.process.itemName + '物料'
}
},
watch: {
process: {
handler(val) {
this.tableData = val.processItemList;
},
deep: true,
},
},
methods: {
handleRowChange(row) {
if (row) {
this.selectedRows = row;
}
},
handleRowDbClick(row) {
if (row) {
this.selectedRows = row;
this.tableData.unshift(this.selectedRows);
this.showFlag = false;
}
},
/**新增按钮 */
handleAdd() {
this.showFlag = true;
},
/**确认选择关联的Bom */
configmSelect() {
if (this.selectedItemId == null || this.selectedItemId == 0) {
return;
}
this.tableData.unshift({
...this.selectedRows,
processId: this.process.processId,
});
this.showFlag = false;
},
/**编辑 */
updateRow(row, idx) {
this.resetForm();
Object.assign(this.form, row);
this.currentRowIdx = idx;
this.editConnectVisible = true;
},
deleteRow(index) {
this.tableData.splice(index, 1);
},
cancleConnect() {
this.$emit("updateItem", this.tableData);
this.showProcessProd = false;
},
beforeClose(done) {
// 更新父组件的processItemList
this.$emit("updateItem", this.tableData);
done();
},
/**重置表单 */
resetForm() {
this.form = {
itemName: "",
unitOfMeasure: "",
quantity: "",
remark: "",
};
},
/** 提交编辑关联信息 */
submitEditConnect() {
this.tableData.splice(this.currentRowIdx, 1, this.form);
this.editConnectVisible = false;
},
},
};
</script>
<style>
.process-prod {
padding: 0 20px;
}
</style>
<template>
<div>
<el-row :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="danger"
plain
icon="el-icon-delete"
size="mini"
@click="handleDelete"
>删除</el-button
>
</el-col>
</el-row>
<el-table :data="tableData" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column
label="物料名称"
align="center"
prop="itemName"
width="120"
/>
<el-table-column
label="组件数量"
align="center"
prop="quantity"
width="120"
/>
<el-table-column
label="计量单位"
align="center"
prop="unitOfMeasure"
width="120"
/>
<el-table-column
label="报废百分比"
align="center"
prop="scrapPercentage"
width="120"
/>
<el-table-column
label="替代组"
align="center"
prop="alternativeGroup"
width="120"
/>
<el-table-column
label="替代优先级"
align="center"
prop="alternativePriorities"
width="120"
/>
<el-table-column
label="策略"
align="center"
prop="alternativeStrategy"
width="120"
/>
<el-table-column
label="使用概率"
align="center"
prop="alternativeProbability"
width="120"
/>
<el-table-column
label="BOM行备注"
align="center"
prop="bomItemRemark"
min-width="120"
/>
<el-table-column
label="物料备注"
align="center"
prop="itemRemark"
min-width="120"
/>
<el-table-column label="操作" align="center" width="120">
<template slot-scope="{ row, $index }">
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="updateRow(row, $index)"
>修改</el-button
>
<el-button
type="text"
icon="el-icon-delete"
size="small"
@click="deleteRow($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-dialog :visible.sync="showFlag" width="700px" title="添加BOM">
<el-form
ref="form"
:model="form"
:rules="rules"
inline
label-width="100px"
size="small"
>
<el-row>
<el-col :span="24">
<el-form-item label="产品" prop="itemId">
<el-input
v-model="form.itemName"
readonly
placeholder="请选择产品"
>
<el-button
slot="append"
icon="el-icon-search"
@click="$refs['ItemSelectRef'].showFlag = true"
></el-button>
</el-input>
<ItemSelect ref="ItemSelectRef" @onSelected="onItemSelect" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="组件数量" prop="quantity">
<el-input
type="number"
v-model="form.quantity"
placeholder="请输入组件数量"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计量单位" prop="unitOfMeasure">
<el-input
v-model="form.unitOfMeasure"
placeholder="请输入计量单位"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报废百分比" prop="scrapPercentage">
<el-input
v-model="form.scrapPercentage"
placeholder="请输入报废百分比"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="替代组" prop="alternativeGroup">
<el-input
v-model="form.alternativeGroup"
placeholder="请输入替代组"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="替代优先级" prop="alternativePriorities">
<el-input
v-model="form.alternativePriorities"
placeholder="请输入替代优先级"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="策略" prop="alternativeStrategy">
<el-input
v-model="form.alternativeStrategy"
placeholder="请输入策略"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="使用概率" prop="alternativeProbability">
<el-input
v-model="form.alternativeProbability"
placeholder="请输入使用概率"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="BOM行备注" prop="bomItemRemark">
<el-input
v-model="form.bomItemRemark"
placeholder="请输入BOM行备注"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料备注" prop="itemRemark">
<el-input
v-model="form.itemRemark"
placeholder="请输入物料备注"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer">
<el-button type="primary" @click="submitForm">确定</el-button>
<el-button type="default" @click="showFlag = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import ItemBomSelect from "@/components/itemBomSelect/single.vue";
import ItemSelect from "@/components/itemSelect/single.vue";
export default {
components: { ItemBomSelect, ItemSelect },
inject: ["mode"],
data() {
return {
/**弹窗状态 */
showFlag: false,
/**表格数据 */
tableData: [],
/**表单规则 */
rules: {},
/**多选 */
selection: [],
optType: 'add',
/**表单初始化数据 */
form: {
quantity: "",
itemName: "",
itemId: "",
unitOfMeasure: "",
scrapPercentage: "",
alternativeGroup: "",
alternativePriorities: "",
alternativeStrategy: "",
alternativeProbability: "",
bomItemRemark: "",
itemRemark: "",
},
currentRowIdx: undefined
};
},
created() {},
methods: {
/**多选 */
handleSelectionChange(val) {
this.selection = val;
},
/**删除操作 */
handleDelete() {},
/**添加操作 */
handleAdd() {
this.resetForm();
this.showFlag = true;
this.optType = 'add'
},
/**更新行 */
updateRow(row, idx) {
Object.assign(this.form, row);
this.currentRowIdx = idx
this.optType = 'edit'
this.showFlag = true;
},
/**删除行 */
deleteRow(index) {
this.tableData.splice(index, 1);
},
onItemBomSelect(row) {
// if (row != undefined && row != null) {
// this.tableData.unshift({...row})
// }
},
onItemSelect(row) {
if (row != undefined && row != null) {
this.form.itemId = row.itemId;
this.form.itemName = row.itemName;
this.form.unit = row.unitOfMeasure;
}
},
/**表单提交 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.optType == 'add') {
this.tableData.unshift({ ...this.form });
} else {
this.tableData.splice(this.currentRowIdx, 1, this.form)
}
this.showFlag = false;
}
});
},
/**重置表单 */
resetForm() {
this.form = {
itemName: "",
itemId: "",
quantity: "",
unitOfMeasure: "",
scrapPercentage: "",
alternativeGroup: "",
alternativePriorities: "",
alternativeStrategy: "",
alternativeProbability: "",
bomItemRemark: "",
itemRemark: "",
};
},
/**获取组件数据 */
getComData() {
return this.tableData;
},
},
};
</script>
<style></style>
<template>
<div>
<el-table :data="tableData">
<el-table-column label="工序名称" prop="processName" align="center" />
<el-table-column label="工序编码" prop="processCode" align="center" />
<el-table-column
label="与下一道工序关系"
prop="linkType"
align="center"
/>
<el-table-column label="工作站" prop="workstationId" align="center" />
<el-table-column label="甘特图显示颜色" prop="colorCode" align="center" />
<el-table-column label="操作" align="center" width="150">
<template slot-scope="{ row, $index }">
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="openSetProd(row, $index)"
>
设置物料
</el-button>
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="updateRow(row, $index)"
>修改</el-button
>
</template>
</el-table-column>
</el-table>
<ProcessProd
:process="currentRow"
:bomList="bomList"
ref="ProcessProdRef"
@updateItem="updateItem"
/>
<el-dialog
v-dialogDrag
:visible.sync="showFlag"
width="800px"
title="添加工序"
>
<el-form
ref="form"
:model="form"
:rules="rules"
inline
label-width="100px"
size="small"
>
<el-row>
<el-col :span="12">
<el-form-item label="组件数量" prop="quantity">
<el-input
type="number"
v-model="form.quantity"
placeholder="请输入组件数量"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计量单位" prop="unitOfMeasure">
<el-input
v-model="form.unitOfMeasure"
placeholder="请输入计量单位"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报废百分比" prop="scrapPercentage">
<el-input
v-model="form.scrapPercentage"
placeholder="请输入报废百分比"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="替代组" prop="alternativeGroup">
<el-input
v-model="form.alternativeGroup"
placeholder="请输入替代组"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="替代优先级" prop="alternativePriorities">
<el-input
v-model="form.alternativePriorities"
placeholder="请输入替代优先级"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="策略" prop="alternativeStrategy">
<el-input
v-model="form.alternativeStrategy"
placeholder="请输入策略"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="使用概率" prop="alternativeProbability">
<el-input
v-model="form.alternativeProbability"
placeholder="请输入使用概率"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="BOM行备注" prop="bomItemRemark">
<el-input
v-model="form.bomItemRemark"
placeholder="请输入BOM行备注"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料备注" prop="itemRemark">
<el-input
v-model="form.itemRemark"
placeholder="请输入物料备注"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer">
<el-button type="primary" @click="submitForm">确定</el-button>
<el-button type="default" @click="showFlag = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import ItemBomSelect from "@/components/itemBomSelect/single.vue";
import ProcessProd from "./ProcessProd.vue";
export default {
components: { ItemBomSelect, ProcessProd },
props: {
bomList: {
type: Array,
default: () => [],
},
},
data() {
return {
/**弹窗状态 */
showFlag: false,
/**表格数据 */
tableData: [],
/**表单规则 */
rules: {},
/**表单初始化数据 */
form: {
quantity: "",
unitOfMeasure: "",
scrapPercentage: "",
alternativeGroup: "",
alternativePriorities: "",
alternativeStrategy: "",
alternativeProbability: "",
bomItemRemark: "",
itemRemark: "",
},
currentRow: {},
currentRowIndex: undefined,
};
},
methods: {
setList(rows) {
this.tableData = rows.map(item => {
item.processItemList = []
return item
});
},
/** 更新工序的物料信息 */
updateItem(items) {
this.tableData[this.currentRowIndex].processItemList = items;
},
openSetProd(row, idx) {
this.currentRow = row;
this.currentRowIndex = idx;
this.$refs["ProcessProdRef"].showProcessProd = true;
},
/**更新行 */
updateRow(row, idx) {
Object.assign(this.form, row);
this.currentRowIndex = idx;
this.showFlag = true;
},
/**表单提交 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.showFlag = false;
}
});
},
getComData() {
return this.tableData;
},
/**重置表单 */
resetForm() {
this.form = {
quantity: "",
unitOfMeasure: "",
scrapPercentage: "",
alternativeGroup: "",
alternativePriorities: "",
alternativeStrategy: "",
alternativeProbability: "",
bomItemRemark: "",
itemRemark: "",
};
},
},
};
</script>
<style></style>
This diff is collapsed.
<template>
<div class="form-page">
<PageTitle>
{{ pageTitle }}
<template slot="buttons" v-if="mode == 'apply'">
<el-button size="mini" @click="resetForm">重置</el-button>
<el-button size="mini" type="primary" @click="saveForm">提交</el-button>
</template>
</PageTitle>
<PageWrapper>
<el-form
:model="form"
ref="form"
size="small"
:inline="true"
label-width="8em"
>
<el-row>
<el-col :md="8" :xs="12">
<el-form-item label="申请单编码" prop="prototypeRequestCode">
<el-input
disabled
v-model="form.prototypeRequestCode"
placeholder="自动生成"
></el-input>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12" style="height: 50.5px">
<el-form-item label="产品" prop="itemId">
<el-input
v-model="form.itemName"
readonly
placeholder="请选择产品"
>
<el-button
slot="append"
icon="el-icon-search"
@click="$refs['ItemSelectRef'].showFlag = true"
></el-button>
</el-input>
<ItemSelect ref="ItemSelectRef" @onSelected="onItemSelect" />
</el-form-item>
</el-col>
<el-col :md="8" :xs="12" style="height: 50.5px">
<el-form-item label="工艺路线" prop="routeId">
<el-input
v-model="form.routeName"
readonly
placeholder="请选择工艺路线"
>
<el-button
slot="append"
icon="el-icon-search"
@click="$refs['RoutesProcessSelectRef'].showFlag = true"
></el-button>
</el-input>
<RoutesProcessSelect
ref="RoutesProcessSelectRef"
@onSelected="onRoutesProcessSelect"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :md="8" :xs="12">
<el-form-item label="简称" prop="abbreviation">
<el-input
v-model="form.abbreviation"
placeholder="请输入简称"
></el-input>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="样品英文名" prop="enName">
<el-input
v-model="form.enName"
placeholder="请输入样品英文名称"
></el-input>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="样品数量" prop="num">
<el-input v-model="form.num" placeholder="请输入样品数量">
<template slot="suffix">{{ form.unit }}</template>
</el-input>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="打样形式" prop="type">
<el-input
v-model="form.type"
placeholder="请选择打样形式"
></el-input>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="分配方式" prop="modality">
<el-input
v-model="form.modality"
placeholder="请选择分配方式"
></el-input>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="表面处理" prop="surfaceTreatment">
<el-input
v-model="form.surfaceTreatment"
placeholder="请输入表面处理"
></el-input>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="NG原因" prop="ngReason">
<el-input
v-model="form.ngReason"
placeholder="请输入NG原因"
></el-input>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="计划完成日期" prop="plannedFinishDate">
<el-date-picker
value-format="yyyy-MM-dd"
v-model="form.plannedFinishDate"
placeholder="请输入计划完成日期"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="版面需求时间" prop="plannedLayoutDate">
<el-date-picker
value-format="yyyy-MM-dd"
v-model="form.plannedLayoutDate"
placeholder="请输入版面需求时间"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :md="8" :xs="12">
<el-form-item label="测试标准" prop="testStandard">
<el-input
v-model="form.testStandard"
placeholder="测试标准"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :md="8" :xs="12">
<el-form-item label="备注" prop="remark">
<el-input
type="textarea"
:rows="3"
v-model="form.remark"
placeholder="备注"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-tabs type="border-card" @tab-click="tabClick">
<el-tab-pane label="BOM">
<ProogingBom ref="ProogingBomRef" />
</el-tab-pane>
<el-tab-pane label="工艺">
<ProogingProcess ref="ProogingProcessRef" :bomList="bomList" />
</el-tab-pane>
</el-tabs>
</PageWrapper>
</div>
</template>
<script>
import { genCode } from "@/api/system/autocode/rule";
import ProogingBom from "./components/ProogingBom.vue";
import ProogingProcess from "./components/ProogingProcess.vue";
import ItemSelect from "@/components/itemSelect/single.vue";
import RoutesProcessSelect from "@/components/routesProcessSelect/index.vue";
import { listRouteprocess } from "@/api/mes/pro/routeprocess";
import { Loading } from "element-ui";
import { addPrototypeRequest } from "@/api/mes/pro/prototypeRequest";
export default {
components: { ProogingBom, ProogingProcess, ItemSelect, RoutesProcessSelect },
dicts: [],
provide() {
return {
mode: this.mode,
};
},
data() {
return {
bomList: [],
// 表单参数
form: {
prototypeRequestCode: "",
itemId: "",
itemName: "",
unit: "",
routeId: "",
routeName: "",
abbreviation: "",
enName: "",
num: "",
type: "",
modality: "",
surfaceTreatment: "",
ngReason: "",
plannedFinishDate: "",
plannedLayoutDate: "",
testStandard: "",
remark: "",
},
rules: {},
};
},
computed: {
scrollHeight() {
return "calc(100vh - 73px - 83px)";
},
mode() {
return this.$route.path.split("/").at(-1);
},
pageTitle() {
const titles = {
edit: "打样单修改",
info: "打样单查看",
apply: "打样单申请",
};
return titles[this.mode];
},
},
created() {
genCode("PROTOTYPE_REQUEST_CODE").then((response) => {
this.form.prototypeRequestCode = response;
});
},
methods: {
/** 点击tab 获取bom的数据,将参数传递给后面的组件 */
tabClick(val) {
if (val.index != 0) {
this.bomList = this.$refs["ProogingBomRef"].getComData();
}
},
onItemSelect(row) {
if (row != undefined && row != null) {
this.form.itemId = row.itemId;
this.form.itemName = row.itemName;
this.form.unit = row.unitOfMeasure;
}
},
onRoutesProcessSelect(row) {
if (row != undefined && row != null) {
this.form.routeId = row.routeId;
this.form.routeName = row.routeName;
const params = {
pageNum: 1,
pageSize: 1000,
routeId: row.routeId,
};
listRouteprocess(params).then(({ rows }) => {
this.$refs["ProogingProcessRef"].setList(rows);
});
}
},
/**提交 */
saveForm() {
const bomList = this.$refs.ProogingBomRef.getComData();
const processList = this.$refs.ProogingProcessRef.getComData();
const params = {
...this.form,
bomList,
processList,
};
console.log("params", params);
const loadingInstance = Loading.service({ fullscreen: true });
addPrototypeRequest(params)
.then((res) => {
loadingInstance.close();
this.$modal.msgSuccess("提交成功!");
})
.catch(() => {
loadingInstance.close();
});
},
/**重置表单 */
resetForm() {
this.form = {
prototypeRequestCode: "",
itemId: "",
itemName: "",
routeId: "",
abbreviation: "",
enName: "",
num: "",
type: "",
modality: "",
surfaceTreatment: "",
ngReason: "",
plannedFinishDate: "",
plannedLayoutDate: "",
testStandard: "",
remark: "",
};
},
},
};
</script>
<style lang="scss" scoped></style>
This diff is collapsed.
This diff is collapsed.
<template>
<div class="process-prod">
<!-- 设置物料弹窗 -->
<el-dialog
:visible.sync="showProcessProd"
width="800px"
:before-close="beforeClose"
append-to-body
title="设置物料"
>
<el-row :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-row>
<el-table :data="tableData">
<el-table-column label="物料名称" prop="itemName" align="center" />
<el-table-column label="单位" prop="unitOfMeasure" align="center" />
<el-table-column label="数量" prop="quantity" align="center" />
<el-table-column label="备注" prop="remark" align="center" />
<el-table-column label="操作" align="center" width="150">
<template slot-scope="{ row, $index }">
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="updateRow(row, $index)"
>修改</el-button
>
<el-button
type="text"
icon="el-icon-delete"
size="small"
@click="deleteRow($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<div slot="footer">
<el-button type="primary" size="small" @click="cancleConnect"
>关闭</el-button
>
</div>
</el-dialog>
<!-- 选择Bom物料 -->
<el-dialog
:visible.sync="showFlag"
title="选择Bom物料"
width="800px"
append-to-body
>
<el-table
:data="bomList"
@current-change="handleRowChange"
@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="物料名称" prop="itemName" />
<el-table-column label="单位" prop="unitOfMeasure" />
<el-table-column label="用料比例" prop="quantity" />
</el-table>
<div slot="footer">
<el-button @click="configmSelect">确认</el-button>
<el-button @click="showFlag = false">取消</el-button>
</div>
</el-dialog>
<!-- 编辑物料关联信息 -->
<el-dialog
:visible.sync="editConnectVisible"
width="400px"
title="编辑物料关联信息"
>
<el-form :model="form" inline size="small" label-width="80px">
<el-form-item label="物料名称">
<el-input disabled v-model="form.itemName"></el-input>
</el-form-item>
<el-form-item label="单位">
<el-input disabled v-model="form.unitOfMeasure"></el-input>
</el-form-item>
<el-form-item label="数量">
<el-input type="number" v-model="form.quantity"></el-input>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" :rows="3"></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button type="primary" size="small" @click="submitEditConnect"
>确认</el-button
>
<el-button size="small" @click="editConnectVisible = false"
>取消</el-button
>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
props: {
bomList: {
type: Array,
default: () => [],
},
process: {
type: Object,
default: () => ({}),
},
},
data() {
return {
form: {
itemName: "",
unitOfMeasure: "",
quantity: "",
remark: "",
},
currentRowIdx: undefined,
tableData: [],
selectedItemId: undefined,
selectedRows: null,
showFlag: false,
showProcessProd: false,
editConnectVisible: false,
};
},
computed: {
title () {
return '设置' + this.process.itemName + '物料'
}
},
watch: {
process: {
handler(val) {
this.tableData = val.processItemList;
},
deep: true,
},
},
methods: {
handleRowChange(row) {
if (row) {
this.selectedRows = row;
}
},
handleRowDbClick(row) {
if (row) {
this.selectedRows = row;
this.tableData.unshift(this.selectedRows);
this.showFlag = false;
}
},
/**新增按钮 */
handleAdd() {
this.showFlag = true;
},
/**确认选择关联的Bom */
configmSelect() {
if (this.selectedItemId == null || this.selectedItemId == 0) {
return;
}
this.tableData.unshift({
...this.selectedRows,
processId: this.process.processId,
});
this.showFlag = false;
},
/**编辑 */
updateRow(row, idx) {
this.resetForm();
Object.assign(this.form, row);
this.currentRowIdx = idx;
this.editConnectVisible = true;
},
deleteRow(index) {
this.tableData.splice(index, 1);
},
cancleConnect() {
this.$emit("updateItem", this.tableData);
this.showProcessProd = false;
},
beforeClose(done) {
// 更新父组件的processItemList
this.$emit("updateItem", this.tableData);
done();
},
/**重置表单 */
resetForm() {
this.form = {
itemName: "",
unitOfMeasure: "",
quantity: "",
remark: "",
};
},
/** 提交编辑关联信息 */
submitEditConnect() {
this.tableData.splice(this.currentRowIdx, 1, this.form);
this.editConnectVisible = false;
},
},
};
</script>
<style>
.process-prod {
padding: 0 20px;
}
</style>
<template>
<div>
<el-row :gutter="10" class="mb8" v-if="mode != 'info'">
<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="danger"
plain
icon="el-icon-delete"
size="mini"
@click="handleDelete"
>删除</el-button
>
</el-col>
</el-row>
<el-table :data="tableData" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column
label="物料名称"
align="center"
prop="itemName"
width="120"
/>
<el-table-column
label="组件数量"
align="center"
prop="quantity"
width="120"
/>
<el-table-column
label="计量单位"
align="center"
prop="unitOfMeasure"
width="120"
/>
<el-table-column
label="报废百分比"
align="center"
prop="scrapPercentage"
width="120"
/>
<el-table-column
label="替代组"
align="center"
prop="alternativeGroup"
width="120"
/>
<el-table-column
label="替代优先级"
align="center"
prop="alternativePriorities"
width="120"
/>
<el-table-column
label="策略"
align="center"
prop="alternativeStrategy"
width="120"
/>
<el-table-column
label="使用概率"
align="center"
prop="alternativeProbability"
width="120"
/>
<el-table-column
label="BOM行备注"
align="center"
prop="bomItemRemark"
min-width="120"
/>
<el-table-column
label="物料备注"
align="center"
prop="itemRemark"
min-width="120"
/>
<el-table-column
v-if="mode != 'info'"
label="操作"
align="center"
width="120"
>
<template slot-scope="{ row, $index }">
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="updateRow(row, $index)"
>修改</el-button
>
<el-button
type="text"
icon="el-icon-delete"
size="small"
@click="deleteRow($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-dialog :visible.sync="showFlag" width="700px" title="添加BOM">
<el-form
ref="form"
:model="form"
:rules="rules"
inline
label-width="100px"
size="small"
>
<el-row>
<el-col :span="24">
<el-form-item label="物料" prop="itemId">
<el-input
v-model="form.itemName"
readonly
placeholder="请选择物料"
>
<el-button
slot="append"
icon="el-icon-search"
@click="$refs['ItemSelectRef'].showFlag = true"
></el-button>
</el-input>
<ItemSelect ref="ItemSelectRef" @onSelected="onItemSelect" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="组件数量" prop="quantity">
<el-input
type="number"
v-model="form.quantity"
placeholder="请输入组件数量"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计量单位" prop="unitOfMeasure">
<el-input
v-model="form.unitOfMeasure"
placeholder="请输入计量单位"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报废百分比" prop="scrapPercentage">
<el-input
v-model="form.scrapPercentage"
placeholder="请输入报废百分比"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="替代组" prop="alternativeGroup">
<el-input
v-model="form.alternativeGroup"
placeholder="请输入替代组"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="替代优先级" prop="alternativePriorities">
<el-input
v-model="form.alternativePriorities"
placeholder="请输入替代优先级"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="策略" prop="alternativeStrategy">
<el-input
v-model="form.alternativeStrategy"
placeholder="请输入策略"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="使用概率" prop="alternativeProbability">
<el-input
v-model="form.alternativeProbability"
placeholder="请输入使用概率"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="BOM行备注" prop="bomItemRemark">
<el-input
v-model="form.bomItemRemark"
placeholder="请输入BOM行备注"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料备注" prop="itemRemark">
<el-input
v-model="form.itemRemark"
placeholder="请输入物料备注"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer">
<el-button type="primary" @click="submitForm">确定</el-button>
<el-button type="default" @click="showFlag = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import ItemBomSelect from "@/components/itemBomSelect/single.vue";
import ItemSelect from "@/components/itemSelect/single.vue";
export default {
components: { ItemBomSelect, ItemSelect },
inject: ["mode"],
data() {
return {
/**弹窗状态 */
showFlag: false,
/**表格数据 */
tableData: [],
/**表单规则 */
rules: {},
/**多选 */
selection: [],
optType: "add",
/**表单初始化数据 */
form: {
quantity: "",
itemName: "",
itemId: "",
unitOfMeasure: "",
scrapPercentage: "",
alternativeGroup: "",
alternativePriorities: "",
alternativeStrategy: "",
alternativeProbability: "",
bomItemRemark: "",
itemRemark: "",
},
currentRowIdx: undefined,
};
},
created() {},
methods: {
/**多选 */
handleSelectionChange(val) {
this.selection = val;
},
/**删除操作 */
handleDelete() {},
/**添加操作 */
handleAdd() {
this.resetForm();
this.showFlag = true;
this.optType = "add";
},
/**更新行 */
updateRow(row, idx) {
Object.assign(this.form, row);
this.currentRowIdx = idx;
this.optType = "edit";
this.showFlag = true;
},
/**删除行 */
deleteRow(index) {
this.tableData.splice(index, 1);
},
onItemBomSelect(row) {
// if (row != undefined && row != null) {
// this.tableData.unshift({...row})
// }
},
onItemSelect(row) {
if (row != undefined && row != null) {
this.form.itemId = row.itemId;
this.form.itemName = row.itemName;
this.form.unitOfMeasure = row.unitOfMeasure;
this.form.itemRemark = row.remark;
}
},
/**表单提交 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.optType == "add") {
this.tableData.unshift({ ...this.form });
} else {
this.tableData.splice(this.currentRowIdx, 1, this.form);
}
this.showFlag = false;
}
});
},
/**重置表单 */
resetForm() {
this.form = {
itemName: "",
itemId: "",
quantity: "",
unitOfMeasure: "",
scrapPercentage: "",
alternativeGroup: "",
alternativePriorities: "",
alternativeStrategy: "",
alternativeProbability: "",
bomItemRemark: "",
itemRemark: "",
};
},
/**重置组件状态 */
resetState() {
this.resetForm();
this.tableData = [];
},
/**获取组件数据 */
getComData() {
return this.tableData;
},
},
};
</script>
<style></style>
<template>
<div>
<el-table :data="tableData">
<el-table-column label="工序名称" prop="processName" align="center" />
<el-table-column label="工序编码" prop="processCode" align="center" />
<el-table-column
label="与下一道工序关系"
prop="linkType"
align="center"
/>
<el-table-column label="工作站" prop="workstationId" align="center" />
<el-table-column label="甘特图显示颜色" prop="colorCode" align="center" />
<el-table-column v-if="mode != 'info'" label="操作" align="center" width="150">
<template slot-scope="{ row, $index }">
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="openSetProd(row, $index)"
>
设置物料
</el-button>
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="updateRow(row, $index)"
>修改</el-button
>
</template>
</el-table-column>
</el-table>
<ProcessProd
:process="currentRow"
:bomList="bomList"
ref="ProcessProdRef"
@updateItem="updateItem"
/>
<el-dialog
v-dialogDrag
:visible.sync="showFlag"
width="800px"
title="添加工序"
>
<el-form
ref="form"
:model="form"
:rules="rules"
inline
label-width="100px"
size="small"
>
<el-row>
<el-col :span="12">
<el-form-item label="组件数量" prop="quantity">
<el-input
type="number"
v-model="form.quantity"
placeholder="请输入组件数量"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计量单位" prop="unitOfMeasure">
<el-input
v-model="form.unitOfMeasure"
placeholder="请输入计量单位"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报废百分比" prop="scrapPercentage">
<el-input
v-model="form.scrapPercentage"
placeholder="请输入报废百分比"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="替代组" prop="alternativeGroup">
<el-input
v-model="form.alternativeGroup"
placeholder="请输入替代组"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="替代优先级" prop="alternativePriorities">
<el-input
v-model="form.alternativePriorities"
placeholder="请输入替代优先级"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="策略" prop="alternativeStrategy">
<el-input
v-model="form.alternativeStrategy"
placeholder="请输入策略"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="使用概率" prop="alternativeProbability">
<el-input
v-model="form.alternativeProbability"
placeholder="请输入使用概率"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="BOM行备注" prop="bomItemRemark">
<el-input
v-model="form.bomItemRemark"
placeholder="请输入BOM行备注"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料备注" prop="itemRemark">
<el-input
v-model="form.itemRemark"
placeholder="请输入物料备注"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer">
<el-button type="primary" @click="submitForm">确定</el-button>
<el-button type="default" @click="showFlag = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import ItemBomSelect from "@/components/itemBomSelect/single.vue";
import ProcessProd from "./ProcessProd.vue";
export default {
components: { ItemBomSelect, ProcessProd },
inject: ['mode'],
props: {
bomList: {
type: Array,
default: () => [],
},
},
data() {
return {
/**弹窗状态 */
showFlag: false,
/**表格数据 */
tableData: [],
/**表单规则 */
rules: {},
/**表单初始化数据 */
form: {
quantity: "",
unitOfMeasure: "",
scrapPercentage: "",
alternativeGroup: "",
alternativePriorities: "",
alternativeStrategy: "",
alternativeProbability: "",
bomItemRemark: "",
itemRemark: "",
},
currentRow: {},
currentRowIndex: undefined,
};
},
methods: {
setList(rows) {
this.tableData = rows.map(item => {
item.processItemList = []
return item
});
},
/** 更新工序的物料信息 */
updateItem(items) {
this.tableData[this.currentRowIndex].processItemList = items;
},
openSetProd(row, idx) {
this.currentRow = row;
this.currentRowIndex = idx;
this.$refs["ProcessProdRef"].showProcessProd = true;
},
/**更新行 */
updateRow(row, idx) {
Object.assign(this.form, row);
this.currentRowIndex = idx;
this.showFlag = true;
},
/**表单提交 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.showFlag = false;
}
});
},
getComData() {
return this.tableData;
},
/**重置表单 */
resetForm() {
this.form = {
quantity: "",
unitOfMeasure: "",
scrapPercentage: "",
alternativeGroup: "",
alternativePriorities: "",
alternativeStrategy: "",
alternativeProbability: "",
bomItemRemark: "",
itemRemark: "",
};
},
/**重置组件状态 */
resetState() {
this.resetForm()
this.tableData = []
}
},
};
</script>
<style></style>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment