Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop
This commit is contained in:
commit
ced9543568
|
@ -298,11 +298,11 @@ export function testInit(data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//不合格半成品报废
|
//不合格半成品报废
|
||||||
export function scrap(id) {
|
export function scrap(id,data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/wpm/wproduct/${id}/scrap/`,
|
url: `/wpm/wproduct/${id}/scrap/`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,11 @@
|
||||||
@click="checkRecord(scope,'1')"
|
@click="checkRecord(scope,'1')"
|
||||||
>检验记录
|
>检验记录
|
||||||
</el-link>
|
</el-link>
|
||||||
|
<el-link
|
||||||
|
v-if="checkPermission(['warehouse_update'])"
|
||||||
|
@click="handleScrapbcp(scope)"
|
||||||
|
>报废
|
||||||
|
</el-link>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -53,6 +58,32 @@
|
||||||
:limit.sync="listQuery.page_size"
|
:limit.sync="listQuery.page_size"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<el-dialog title="半成品报废" :close-on-click-modal="false" :visible.sync="dialogFormVisiblebcp">
|
||||||
|
<el-form :model="formbcp">
|
||||||
|
<el-form-item label="甩片原因" :label-width="formLabelWidth">
|
||||||
|
<el-select
|
||||||
|
style="width: 80%"
|
||||||
|
v-model="formbcp.scrap_reason"
|
||||||
|
placeholder="请甩片原因"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in scrapreason"
|
||||||
|
:key="item.lable"
|
||||||
|
:label="item.lable"
|
||||||
|
:value="item.value"
|
||||||
|
>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="dialogFormVisiblebcp = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="scrapesubmit">确 定</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="复检半成品">
|
<el-tab-pane label="复检半成品">
|
||||||
|
@ -594,6 +625,7 @@
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
testitem: defaultetestitem,
|
testitem: defaultetestitem,
|
||||||
|
formbcp:{},
|
||||||
form: {remark: "", warehouse: ""},
|
form: {remark: "", warehouse: ""},
|
||||||
wproductList: {
|
wproductList: {
|
||||||
count: 0,
|
count: 0,
|
||||||
|
@ -659,6 +691,12 @@
|
||||||
label: "不合格",
|
label: "不合格",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
scrapreason: [
|
||||||
|
{ lable: "气泡", value: 10 },
|
||||||
|
{ lable: "破点", value: 20 },
|
||||||
|
{ lable: "划伤", value: 30 },
|
||||||
|
{ lable: "其他", value: 40 },
|
||||||
|
],
|
||||||
recordList: [],
|
recordList: [],
|
||||||
options: [],
|
options: [],
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
|
@ -674,6 +712,7 @@
|
||||||
page: 0,
|
page: 0,
|
||||||
},
|
},
|
||||||
recordVisible:false,
|
recordVisible:false,
|
||||||
|
dialogFormVisiblebcp:false,
|
||||||
innerIndex:null,
|
innerIndex:null,
|
||||||
origintest:null,
|
origintest:null,
|
||||||
mutipID: [],
|
mutipID: [],
|
||||||
|
@ -716,6 +755,25 @@
|
||||||
this.listLoading = false;
|
this.listLoading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
//待检半成品报废
|
||||||
|
handleScrapbcp(scope){
|
||||||
|
this.dialogFormVisiblebcp=true;
|
||||||
|
this.bcpbf=scope.row.id;
|
||||||
|
|
||||||
|
},
|
||||||
|
//确定报废半成品
|
||||||
|
scrapesubmit(){
|
||||||
|
|
||||||
|
console.log(this.formbcp);
|
||||||
|
scrap(this.bcpbf,this.formbcp).then((response) => {
|
||||||
|
if (response.data) {
|
||||||
|
this.$message.success("该半成品已报废!");
|
||||||
|
this.dialogFormVisiblebcp=false;
|
||||||
|
this.getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
},
|
||||||
//复检半成品列表
|
//复检半成品列表
|
||||||
getList2() {
|
getList2() {
|
||||||
this.listQuery2.act_state = 6;
|
this.listQuery2.act_state = 6;
|
||||||
|
|
|
@ -128,7 +128,7 @@ export default {
|
||||||
watch: {},
|
watch: {},
|
||||||
created() {
|
created() {
|
||||||
this.id = this.$route.params.id;
|
this.id = this.$route.params.id;
|
||||||
this. getProcessList()
|
this.getProcessList()
|
||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -147,19 +147,23 @@ handleoperation(scope)
|
||||||
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
getList(){
|
||||||
|
getoperationList(this.listQuery).then((response) => {
|
||||||
|
if (response.data) {
|
||||||
|
this.operationList = response.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
//选项卡切换
|
//选项卡切换
|
||||||
handleClick(tab) {
|
handleClick(tab) {
|
||||||
this.process = tab.name;
|
this.process = tab.name;
|
||||||
this.listQuery.step__process = tab.name;
|
this.listQuery.step__process = tab.name;
|
||||||
this.steps = [];
|
this.getList();
|
||||||
getoperationList(this.listQuery).then((response) => {
|
|
||||||
if (response.data) {
|
|
||||||
this.operationList = response.data;
|
|
||||||
}
|
|
||||||
this.listLoading = false;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
//操作记录删除
|
//操作记录删除
|
||||||
handleDelete(scope) {
|
handleDelete(scope) {
|
||||||
this.$confirm("确认该操作删除?", "警告", {
|
this.$confirm("确认该操作删除?", "警告", {
|
||||||
|
|
|
@ -20,18 +20,20 @@
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
|
|
||||||
<el-table-column label="任务编号">
|
<el-table-column label="任务编号">
|
||||||
<template slot-scope="scope">{{
|
<template slot-scope="scope">{{ scope.row.number }}</template>
|
||||||
scope.row.number
|
|
||||||
}}</template>
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="产品名称">
|
<el-table-column label="产品名称">
|
||||||
<template slot-scope="scope">{{ scope.row.product_.name }}</template>
|
<template slot-scope="scope">{{
|
||||||
|
scope.row.product_.name
|
||||||
|
}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="产品型号">
|
<el-table-column label="产品型号">
|
||||||
<template slot-scope="scope">{{ scope.row.product_.specification }}</template>
|
<template slot-scope="scope">{{
|
||||||
|
scope.row.product_.specification
|
||||||
|
}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="生产主产品" width="140">
|
<el-table-column label="生产主产品" width="140">
|
||||||
<template slot-scope="scope" >{{
|
<template slot-scope="scope">{{
|
||||||
scope.row.main_product_.name
|
scope.row.main_product_.name
|
||||||
}}</template>
|
}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -66,10 +68,8 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="状态">
|
<el-table-column label="状态">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
{{ state_[scope.row.state] }}</template
|
||||||
{{
|
>
|
||||||
state_[scope.row.state]
|
|
||||||
}}</template>
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="领料状态" width="100">
|
<el-table-column label="领料状态" width="100">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
@ -80,9 +80,7 @@
|
||||||
|
|
||||||
<el-table-column label="计划/生产/合格">
|
<el-table-column label="计划/生产/合格">
|
||||||
<template slot-scope="scope"
|
<template slot-scope="scope"
|
||||||
>{{
|
>{{ scope.row.main_count }}/{{ scope.row.main_count_real }}/{{
|
||||||
scope.row.main_count
|
|
||||||
}}/{{ scope.row.main_count_real }}/{{
|
|
||||||
scope.row.main_count_ok
|
scope.row.main_count_ok
|
||||||
}}</template
|
}}</template
|
||||||
>
|
>
|
||||||
|
@ -90,10 +88,16 @@
|
||||||
|
|
||||||
<el-table-column align="center" label="操作" width="130px">
|
<el-table-column align="center" label="操作" width="130px">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-link type="success" v-if="scope.row.is_picked==false" @click="handleNeed(scope)"
|
<el-link
|
||||||
|
type="success"
|
||||||
|
v-if="scope.row.is_picked == false"
|
||||||
|
@click="handleNeed(scope)"
|
||||||
>领料</el-link
|
>领料</el-link
|
||||||
>
|
>
|
||||||
<el-link type="success" v-if="scope.row.is_picked" @click="handleNeed(scope)"
|
<el-link
|
||||||
|
type="success"
|
||||||
|
v-if="scope.row.is_picked"
|
||||||
|
@click="handleNeed(scope)"
|
||||||
>继续领料</el-link
|
>继续领料</el-link
|
||||||
>
|
>
|
||||||
<el-link type="primary" @click="handlepick(scope)"
|
<el-link type="primary" @click="handlepick(scope)"
|
||||||
|
@ -111,7 +115,6 @@
|
||||||
/>
|
/>
|
||||||
<el-row :gutter="2">
|
<el-row :gutter="2">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
|
|
||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<div slot="header" class="clearfix">
|
<div slot="header" class="clearfix">
|
||||||
<span>半成品</span>
|
<span>半成品</span>
|
||||||
|
@ -132,6 +135,14 @@
|
||||||
style="float: right"
|
style="float: right"
|
||||||
>显示全部</el-button
|
>显示全部</el-button
|
||||||
>
|
>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
@click="handleScrapbcp()"
|
||||||
|
id="scrap"
|
||||||
|
style="float: right; display: none"
|
||||||
|
>报废</el-button
|
||||||
|
>
|
||||||
|
|
||||||
<el-table
|
<el-table
|
||||||
:data="wproductData"
|
:data="wproductData"
|
||||||
@selection-change="handleSelectionChange"
|
@selection-change="handleSelectionChange"
|
||||||
|
@ -144,7 +155,9 @@
|
||||||
<el-table-column type="selection" width="55"> </el-table-column>
|
<el-table-column type="selection" width="55"> </el-table-column>
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<el-table-column label="任务编号">
|
<el-table-column label="任务编号">
|
||||||
<template slot-scope="scope">{{ scope.row.subproduction_plan_.number}}</template>
|
<template slot-scope="scope">{{
|
||||||
|
scope.row.subproduction_plan_.number
|
||||||
|
}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="玻璃编号">
|
<el-table-column label="玻璃编号">
|
||||||
|
@ -168,14 +181,17 @@
|
||||||
}}</template>
|
}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
||||||
<el-table-column label="更新时间">
|
<el-table-column label="更新时间">
|
||||||
<template slot-scope="scope">{{
|
<template slot-scope="scope">{{
|
||||||
scope.row.update_time
|
scope.row.update_time
|
||||||
}}</template>
|
}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
|
@ -218,9 +234,39 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
<el-dialog title="领半成品" :close-on-click-modal="false" :visible.sync="dialogTableVisiblepick">
|
<el-dialog
|
||||||
|
title="半成品报废"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:visible.sync="dialogFormVisiblebcp"
|
||||||
|
>
|
||||||
|
<el-form :model="formbcp">
|
||||||
|
<el-form-item label="甩片原因" :label-width="formLabelWidth">
|
||||||
|
<el-select
|
||||||
|
style="width: 80%"
|
||||||
|
v-model="formbcp.scrap_reason"
|
||||||
|
placeholder="请选择仓库"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in scrapreason"
|
||||||
|
:key="item.lable"
|
||||||
|
:label="item.lable"
|
||||||
|
:value="item.value"
|
||||||
|
>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="dialogFormVisiblebcp = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="scrapesubmit">确 定</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<el-dialog
|
||||||
|
title="领半成品"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:visible.sync="dialogTableVisiblepick"
|
||||||
|
>
|
||||||
<el-table :data="bcplist" style="width: 100%">
|
<el-table :data="bcplist" style="width: 100%">
|
||||||
|
|
||||||
<el-table-column prop="material_.name" label="物料名称">
|
<el-table-column prop="material_.name" label="物料名称">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="material_.number" label="物料编号">
|
<el-table-column prop="material_.number" label="物料编号">
|
||||||
|
@ -229,37 +275,33 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="material_.unit" label="物料单位">
|
<el-table-column prop="material_.unit" label="物料单位">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="count" label="所需物料数量">
|
<el-table-column prop="count" label="所需物料数量"> </el-table-column>
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="count_real" label="已领物料数量">
|
<el-table-column prop="count_real" label="已领物料数量">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="count_pick" label="实际产出/消耗">
|
<el-table-column prop="count_pick" label="实际产出/消耗">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column align="center" label="操作">
|
||||||
align="center"
|
|
||||||
label="操作"
|
|
||||||
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
|
||||||
<el-link
|
<el-link
|
||||||
v-if="checkPermission(['material_update'])"
|
v-if="checkPermission(['material_update'])"
|
||||||
@click="handleReceive(scope)"
|
@click="handleReceive(scope)"
|
||||||
>领半成品</el-link >
|
>领半成品</el-link
|
||||||
|
>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
</el-table>
|
</el-table>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button @click="dialogTableVisiblepick = false">取 消</el-button>
|
<el-button @click="dialogTableVisiblepick = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="bcpllSubmit">确 定</el-button>
|
<el-button type="primary" @click="bcpllSubmit">确 定</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<el-dialog title="半成品列表" :close-on-click-modal="false" :visible.sync="dialogTableVisiblepicks">
|
<el-dialog
|
||||||
|
title="半成品列表"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:visible.sync="dialogTableVisiblepicks"
|
||||||
|
>
|
||||||
<el-table
|
<el-table
|
||||||
|
|
||||||
:data="wproductslist"
|
:data="wproductslist"
|
||||||
border
|
border
|
||||||
fit
|
fit
|
||||||
|
@ -275,35 +317,42 @@
|
||||||
<template slot-scope="scope">{{ scope.row.number }}</template>
|
<template slot-scope="scope">{{ scope.row.number }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
||||||
<el-table-column label="玻璃状态">
|
<el-table-column label="玻璃状态">
|
||||||
<template slot-scope="scope">{{ scope.row.material_.name }}</template>
|
<template slot-scope="scope">{{ scope.row.material_.name }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="所属子计划">
|
<el-table-column label="所属子计划">
|
||||||
<template slot-scope="scope">{{ scope.row.subproduction_plan }}</template>
|
<template slot-scope="scope">{{
|
||||||
|
scope.row.subproduction_plan
|
||||||
|
}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="备注">
|
<el-table-column label="备注">
|
||||||
<template slot-scope="scope">{{ scope.row.remark }}</template>
|
<template slot-scope="scope">{{ scope.row.remark }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</el-table>
|
</el-table>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button @click="dialogTableVisiblepicks = false">取 消</el-button>
|
<el-button @click="dialogTableVisiblepicks = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="wproductSubmit">确 定</el-button>
|
<el-button type="primary" @click="wproductSubmit">确 定</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<el-dialog
|
||||||
<el-dialog :visible.sync="dialogVisiblenw" :close-on-click-modal="false" width="80%" title="领料">
|
:visible.sync="dialogVisiblenw"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
width="80%"
|
||||||
|
title="领料"
|
||||||
|
>
|
||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<div slot="header" class="clearfix">
|
<div slot="header" class="clearfix">
|
||||||
<span>生产所需领料表</span>
|
<span>生产所需领料表</span>
|
||||||
</div>
|
</div>
|
||||||
<template>
|
<template>
|
||||||
<el-table :data="needwl" highlight-current-row height="300" style="width: 100%">
|
<el-table
|
||||||
|
:data="needwl"
|
||||||
|
highlight-current-row
|
||||||
|
height="300"
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
<el-table-column prop="material_.name" label="物料名称">
|
<el-table-column prop="material_.name" label="物料名称">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="material_.number" label="物料编号">
|
<el-table-column prop="material_.number" label="物料编号">
|
||||||
|
@ -330,17 +379,25 @@
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<template>
|
<template>
|
||||||
<el-table :data="havewl" highlight-current-row height="300" style="width: 100%" >
|
<el-table
|
||||||
|
:data="havewl"
|
||||||
|
highlight-current-row
|
||||||
|
height="300"
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
<el-table-column prop="batch" label="物料批次"> </el-table-column>
|
<el-table-column prop="batch" label="物料批次"> </el-table-column>
|
||||||
<el-table-column prop="material_.name" label="物料名称">
|
<el-table-column prop="material_.name" label="物料名称">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="warehouse_.name" label="物料所在仓库">
|
<el-table-column prop="warehouse_.name" label="物料所在仓库">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="count" label="物料总数量"> </el-table-column>
|
<el-table-column prop="count" label="物料总数量"> </el-table-column>
|
||||||
<el-table-column label="输入领料数量" width="140px" >
|
<el-table-column label="输入领料数量" width="140px">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-form :model="scope.row" v-if="scope.row.material_.type!=2" widht="100px">
|
<el-form
|
||||||
|
:model="scope.row"
|
||||||
|
v-if="scope.row.material_.type != 2"
|
||||||
|
widht="100px"
|
||||||
|
>
|
||||||
<el-form-item size="mini">
|
<el-form-item size="mini">
|
||||||
<el-input-number
|
<el-input-number
|
||||||
v-model="scope.row.pick_count"
|
v-model="scope.row.pick_count"
|
||||||
|
@ -362,8 +419,7 @@
|
||||||
<el-table-column align="center" label="操作" width="220px">
|
<el-table-column align="center" label="操作" width="220px">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-link
|
<el-link
|
||||||
v-if="scope.row.material_.type==2"
|
v-if="scope.row.material_.type == 2"
|
||||||
|
|
||||||
@click="handlewproduct(scope)"
|
@click="handlewproduct(scope)"
|
||||||
>选择半成品</el-link
|
>选择半成品</el-link
|
||||||
>
|
>
|
||||||
|
@ -373,9 +429,12 @@
|
||||||
</template>
|
</template>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog title="半成品列表" :close-on-click-modal="false" :visible.sync="dialogTableVisible">
|
<el-dialog
|
||||||
|
title="半成品列表"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:visible.sync="dialogTableVisible"
|
||||||
|
>
|
||||||
<el-table
|
<el-table
|
||||||
|
|
||||||
:data="iproductData"
|
:data="iproductData"
|
||||||
border
|
border
|
||||||
fit
|
fit
|
||||||
|
@ -398,16 +457,16 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="所在仓库">
|
<el-table-column label="所在仓库">
|
||||||
<template slot-scope="scope">{{ scope.row.warehouse_.name }}</template>
|
<template slot-scope="scope">{{
|
||||||
|
scope.row.warehouse_.name
|
||||||
|
}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
||||||
</el-table>
|
</el-table>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button @click="dialogTableVisible = false">取 消</el-button>
|
<el-button @click="dialogTableVisible = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="iproductsSubmit">确 定</el-button>
|
<el-button type="primary" @click="iproductsSubmit">确 定</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
:visible.sync="dialogVisiblework"
|
:visible.sync="dialogVisiblework"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
|
@ -436,7 +495,6 @@
|
||||||
<span>消耗物料表</span>
|
<span>消耗物料表</span>
|
||||||
|
|
||||||
<el-table :data="input" border style="width: 100%">
|
<el-table :data="input" border style="width: 100%">
|
||||||
|
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="subproduction_plan"
|
prop="subproduction_plan"
|
||||||
label="子计划编号"
|
label="子计划编号"
|
||||||
|
@ -651,6 +709,7 @@
|
||||||
<el-button type="primary" @click="submint()">确认</el-button>
|
<el-button type="primary" @click="submint()">确认</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
@ -665,10 +724,10 @@ import {
|
||||||
getsubplanList,
|
getsubplanList,
|
||||||
getpickhalfList,
|
getpickhalfList,
|
||||||
createpickhalf,
|
createpickhalf,
|
||||||
createOperation
|
createOperation,
|
||||||
} from "@/api/wpm";
|
} from "@/api/wpm";
|
||||||
import { getiproductList } from "@/api/inm";
|
import { getiproductList } from "@/api/inm";
|
||||||
import { createWork } from "@/api/wpm";
|
import { scrap } from "@/api/wpm";
|
||||||
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
|
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
|
||||||
const defaulteneed = {};
|
const defaulteneed = {};
|
||||||
export default {
|
export default {
|
||||||
|
@ -685,7 +744,7 @@ export default {
|
||||||
page: 1,
|
page: 1,
|
||||||
page_size: 20,
|
page_size: 20,
|
||||||
},
|
},
|
||||||
iproductData:"",
|
iproductData: "",
|
||||||
remark: "",
|
remark: "",
|
||||||
values: 0,
|
values: 0,
|
||||||
active: 0,
|
active: 0,
|
||||||
|
@ -702,8 +761,8 @@ export default {
|
||||||
40: "库存中",
|
40: "库存中",
|
||||||
50: "不合格",
|
50: "不合格",
|
||||||
60: "待成品检验",
|
60: "待成品检验",
|
||||||
8:"操作准备中",
|
8: "操作准备中",
|
||||||
26:"待夹层检验",
|
26: "待夹层检验",
|
||||||
},
|
},
|
||||||
state_: {
|
state_: {
|
||||||
0: "制定中",
|
0: "制定中",
|
||||||
|
@ -715,10 +774,10 @@ export default {
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
id: "",
|
id: "",
|
||||||
dialogTableVisible:false,
|
dialogTableVisible: false,
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
dialogTableVisiblepick:false,
|
dialogTableVisiblepick: false,
|
||||||
dialogTableVisiblepicks:false,
|
dialogTableVisiblepicks: false,
|
||||||
dialogType: "new",
|
dialogType: "new",
|
||||||
dialogVisiblework: false,
|
dialogVisiblework: false,
|
||||||
dialogVisiblenw: false,
|
dialogVisiblenw: false,
|
||||||
|
@ -748,9 +807,17 @@ export default {
|
||||||
from: [],
|
from: [],
|
||||||
Operation: {},
|
Operation: {},
|
||||||
wproductdata: {},
|
wproductdata: {},
|
||||||
workData:{},
|
workData: {},
|
||||||
bcplist:"",
|
bcplist: "",
|
||||||
wproductslist:"",
|
wproductslist: "",
|
||||||
|
formbcp: {},
|
||||||
|
dialogFormVisiblebcp: false,
|
||||||
|
scrapreason: [
|
||||||
|
{ lable: "气泡", value: 10 },
|
||||||
|
{ lable: "破点", value: 20 },
|
||||||
|
{ lable: "划伤", value: 30 },
|
||||||
|
{ lable: "其他", value: 40 },
|
||||||
|
],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
process: "",
|
process: "",
|
||||||
|
@ -766,12 +833,14 @@ export default {
|
||||||
handleClick(tab) {
|
handleClick(tab) {
|
||||||
this.process = tab.name;
|
this.process = tab.name;
|
||||||
this.listQuery.process = tab.name;
|
this.listQuery.process = tab.name;
|
||||||
|
if (tab.name == 1) {
|
||||||
|
document.getElementById("scrap").style.display = "block";
|
||||||
|
}
|
||||||
this.steps = [];
|
this.steps = [];
|
||||||
getsubplanList(this.listQuery).then((response) => {
|
getsubplanList(this.listQuery).then((response) => {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.subproductionplanList = response.data;
|
this.subproductionplanList = response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//子工序列表
|
//子工序列表
|
||||||
|
@ -780,7 +849,6 @@ export default {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.steps = response.data;
|
this.steps = response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
//车间物料表
|
//车间物料表
|
||||||
this.getwmaterialLists();
|
this.getwmaterialLists();
|
||||||
|
@ -789,8 +857,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
//车间物料
|
//车间物料
|
||||||
getwmaterialLists()
|
getwmaterialLists() {
|
||||||
{
|
|
||||||
getwmaterialList({
|
getwmaterialList({
|
||||||
subproduction_plan__process: this.process,
|
subproduction_plan__process: this.process,
|
||||||
page: 0,
|
page: 0,
|
||||||
|
@ -798,7 +865,25 @@ export default {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.wmaterialList = response.data;
|
this.wmaterialList = response.data;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
//待检半成品报废
|
||||||
|
handleScrapbcp() {
|
||||||
|
this.dialogFormVisiblebcp = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
//确定报废半成品
|
||||||
|
scrapesubmit() {
|
||||||
|
console.log(this.formbcp);
|
||||||
|
scrap(this.wpID, this.formbcp).then((response) => {
|
||||||
|
if (response.code==200) {
|
||||||
|
this.$message.success("该半成品已报废!");
|
||||||
|
this.dialogFormVisiblebcp = false;
|
||||||
|
// 半成品表
|
||||||
|
this.getwproductLists();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -816,9 +901,7 @@ export default {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.wmaterialList = response.data;
|
this.wmaterialList = response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
//大工序工序渲染
|
//大工序工序渲染
|
||||||
getProcessList() {
|
getProcessList() {
|
||||||
|
@ -826,7 +909,6 @@ export default {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.processOption = response.data;
|
this.processOption = response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -839,7 +921,6 @@ export default {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.subproductionplanList = response.data;
|
this.subproductionplanList = response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
//车间物料表
|
//车间物料表
|
||||||
this.getwmaterialLists();
|
this.getwmaterialLists();
|
||||||
|
@ -847,7 +928,6 @@ export default {
|
||||||
this.getwproductLists();
|
this.getwproductLists();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
//大工序下子工序产出的半成品
|
//大工序下子工序产出的半成品
|
||||||
getwproductLists() {
|
getwproductLists() {
|
||||||
this.wproductdata.page = 0;
|
this.wproductdata.page = 0;
|
||||||
|
@ -863,39 +943,35 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//调出该批次,该仓库的所有半成品
|
//调出该批次,该仓库的所有半成品
|
||||||
handlewproduct(scope){
|
handlewproduct(scope) {
|
||||||
|
|
||||||
this.dialogTableVisible = true;
|
this.dialogTableVisible = true;
|
||||||
this.pcId=scope.row.id;
|
this.pcId = scope.row.id;
|
||||||
getiproductList({page:0,material:scope.row.material,warehouse:scope.row.warehouse,batch:scope.row.batch}).then((response) => {
|
getiproductList({
|
||||||
|
page: 0,
|
||||||
|
material: scope.row.material,
|
||||||
|
warehouse: scope.row.warehouse,
|
||||||
|
batch: scope.row.batch,
|
||||||
|
}).then((response) => {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.iproductData= response.data;
|
this.iproductData = response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
//勾选半成品
|
//勾选半成品
|
||||||
handleSelectionChanges(val){
|
handleSelectionChanges(val) {
|
||||||
this.iproducts= [];
|
this.iproducts = [];
|
||||||
val.forEach((item) => {
|
val.forEach((item) => {
|
||||||
this.iproducts.push(item.id);
|
this.iproducts.push(item.id);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//提交半成品
|
//提交半成品
|
||||||
iproductsSubmit(){
|
iproductsSubmit() {
|
||||||
|
|
||||||
this.dialogTableVisible = false;
|
this.dialogTableVisible = false;
|
||||||
this.havewl.forEach((item) => {
|
this.havewl.forEach((item) => {
|
||||||
if(item.id== this.pcId)
|
if (item.id == this.pcId) {
|
||||||
{
|
item.iproducts = this.iproducts;
|
||||||
item.iproducts=this.iproducts;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
//领料
|
//领料
|
||||||
|
@ -915,10 +991,8 @@ export default {
|
||||||
handlePick() {
|
handlePick() {
|
||||||
this.pickData.subproduction_plan = this.id;
|
this.pickData.subproduction_plan = this.id;
|
||||||
|
|
||||||
|
|
||||||
this.pickData.picks = this.havewl;
|
this.pickData.picks = this.havewl;
|
||||||
|
|
||||||
|
|
||||||
createPick(this.pickData).then((res) => {
|
createPick(this.pickData).then((res) => {
|
||||||
if (res.code >= 200) {
|
if (res.code >= 200) {
|
||||||
this.dialogVisiblenw = false;
|
this.dialogVisiblenw = false;
|
||||||
|
@ -931,89 +1005,78 @@ export default {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//半成品
|
//半成品
|
||||||
getwproductList({page:0,step__process:this.process}).then((response) => {
|
getwproductList({ page: 0, step__process: this.process }).then(
|
||||||
|
(response) => {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.wproductData = response.data;
|
this.wproductData = response.data;
|
||||||
console.log( this.wproductData)
|
console.log(this.wproductData);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
//领半成品
|
//领半成品
|
||||||
handlepick(scope){
|
handlepick(scope) {
|
||||||
|
this.dialogTableVisiblepick = true;
|
||||||
this.dialogTableVisiblepick=true;
|
|
||||||
this.spid = scope.row.id;
|
this.spid = scope.row.id;
|
||||||
getpickhalfList(this.spid).then((res) => {
|
getpickhalfList(this.spid).then((res) => {
|
||||||
if (res.code >= 200) {
|
if (res.code >= 200) {
|
||||||
this.bcplist = res.data;
|
this.bcplist = res.data;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//根据半成品ID+检测状态调取未入库半成品
|
//根据半成品ID+检测状态调取未入库半成品
|
||||||
handleReceive(scope){
|
handleReceive(scope) {
|
||||||
this.dialogTableVisiblepicks=true;
|
this.dialogTableVisiblepicks = true;
|
||||||
this.bcpxlID=scope.row.id;
|
this.bcpxlID = scope.row.id;
|
||||||
getwproductList({material:scope.row.material,act_state:30,page:0}).then((res) => {
|
getwproductList({
|
||||||
|
material: scope.row.material,
|
||||||
|
act_state: 30,
|
||||||
|
page: 0,
|
||||||
|
}).then((res) => {
|
||||||
if (res.code >= 200) {
|
if (res.code >= 200) {
|
||||||
this.wproductslist = res.data;
|
this.wproductslist = res.data;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
handleSelectionChangess(val){
|
handleSelectionChangess(val) {
|
||||||
this.bcpproducts= [];
|
this.bcpproducts = [];
|
||||||
val.forEach((item) => {
|
val.forEach((item) => {
|
||||||
this.bcpproducts.push(item.id);
|
this.bcpproducts.push(item.id);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
wproductSubmit()
|
wproductSubmit() {
|
||||||
{
|
|
||||||
this.dialogTableVisiblepicks = false;
|
this.dialogTableVisiblepicks = false;
|
||||||
|
|
||||||
this.bcplist.forEach((item) => {
|
this.bcplist.forEach((item) => {
|
||||||
if(item.id == this.bcpxlID)
|
if (item.id == this.bcpxlID) {
|
||||||
{
|
item.iproducts = this.bcpproducts;
|
||||||
item.iproducts=this.bcpproducts;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
//提交领的半成品
|
||||||
},
|
bcpllSubmit() {
|
||||||
|
this.bcplists = []; //新的半成品表
|
||||||
|
|
||||||
//提交领的半成品
|
|
||||||
bcpllSubmit()
|
|
||||||
{
|
|
||||||
this.bcplists=[];//新的半成品表
|
|
||||||
this.bcplist.forEach((item) => {
|
this.bcplist.forEach((item) => {
|
||||||
|
|
||||||
this.bcplists.push({
|
this.bcplists.push({
|
||||||
"id":item.id,
|
id: item.id,
|
||||||
"wproducts": item.iproducts
|
wproducts: item.iproducts,
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
console.log(this.bcplists);
|
console.log(this.bcplists);
|
||||||
createpickhalf(this.spid,this.bcplists).then((res) => {
|
createpickhalf(this.spid, this.bcplists).then((res) => {
|
||||||
if (res.code >= 200) {
|
if (res.code >= 200) {
|
||||||
this.$message.success("半成品领料成功!");
|
this.$message.success("半成品领料成功!");
|
||||||
this.dialogTableVisiblepick=false;
|
this.dialogTableVisiblepick = false;
|
||||||
//车间物料表
|
//车间物料表
|
||||||
this.getwproductLists();
|
this.getwproductLists();
|
||||||
// 半成品表
|
// 半成品表
|
||||||
this.getwproductLists();
|
this.getwproductLists();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
prev() {
|
prev() {
|
||||||
--this.values;
|
--this.values;
|
||||||
if (this.values < 0) this.values = 0;
|
if (this.values < 0) this.values = 0;
|
||||||
|
@ -1039,8 +1102,7 @@ wproductSubmit()
|
||||||
createOperation(this.Operation).then((res) => {
|
createOperation(this.Operation).then((res) => {
|
||||||
if (res.code >= 200) {
|
if (res.code >= 200) {
|
||||||
this.$message.success("操作记录创建成功!");
|
this.$message.success("操作记录创建成功!");
|
||||||
this.$router.push({name: "operation", params: { id: item.id }, })
|
this.$router.push({ name: "operation", params: { id: item.id } });
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -1064,19 +1126,17 @@ wproductSubmit()
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.workData.step = this.step;
|
||||||
this.workData.step=this.step;
|
this.workData.wproducts = this.wproducts;
|
||||||
this.workData.wproducts=this.wproducts;
|
this.workData.input = this.input;
|
||||||
this.workData.input=this.input;
|
this.workData.output = this.output;
|
||||||
this.workData.output=this.output;
|
this.workData.forms = this.from;
|
||||||
this.workData.forms=this.from;
|
this.workData.remark = this.remark;
|
||||||
this.workData.remark=this.remark;
|
|
||||||
if (this.subproduction_plan != "") {
|
if (this.subproduction_plan != "") {
|
||||||
this.wproductdata.subproduction_plan = this.subproduction_plan;
|
this.wproductdata.subproduction_plan = this.subproduction_plan;
|
||||||
}
|
}
|
||||||
console.log(this.remark);
|
console.log(this.remark);
|
||||||
|
|
||||||
|
|
||||||
submitWork(this.workData).then((res) => {
|
submitWork(this.workData).then((res) => {
|
||||||
if (res.code >= 200) {
|
if (res.code >= 200) {
|
||||||
this.dialogVisiblework = false;
|
this.dialogVisiblework = false;
|
||||||
|
@ -1085,7 +1145,6 @@ wproductSubmit()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
|
@ -19,7 +19,7 @@ class Workflow(CommonAModel):
|
||||||
view_permission_check = models.BooleanField('查看权限校验', default=True, help_text='开启后,只允许工单的关联人(创建人、曾经的处理人)有权限查看工单')
|
view_permission_check = models.BooleanField('查看权限校验', default=True, help_text='开启后,只允许工单的关联人(创建人、曾经的处理人)有权限查看工单')
|
||||||
limit_expression = models.JSONField('限制表达式', default=dict, blank=True, help_text='限制周期({"period":24} 24小时), 限制次数({"count":1}在限制周期内只允许提交1次), 限制级别({"level":1} 针对(1单个用户 2全局)限制周期限制次数,默认特定用户);允许特定人员提交({"allow_persons":"zhangsan,lisi"}只允许张三提交工单,{"allow_depts":"1,2"}只允许部门id为1和2的用户提交工单,{"allow_roles":"1,2"}只允许角色id为1和2的用户提交工单)')
|
limit_expression = models.JSONField('限制表达式', default=dict, blank=True, help_text='限制周期({"period":24} 24小时), 限制次数({"count":1}在限制周期内只允许提交1次), 限制级别({"level":1} 针对(1单个用户 2全局)限制周期限制次数,默认特定用户);允许特定人员提交({"allow_persons":"zhangsan,lisi"}只允许张三提交工单,{"allow_depts":"1,2"}只允许部门id为1和2的用户提交工单,{"allow_roles":"1,2"}只允许角色id为1和2的用户提交工单)')
|
||||||
display_form_str = models.JSONField('展现表单字段', default=list, blank=True, help_text='默认"[]",用于用户只有对应工单查看权限时显示哪些字段,field_key的list的json,如["days","sn"],内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称')
|
display_form_str = models.JSONField('展现表单字段', default=list, blank=True, help_text='默认"[]",用于用户只有对应工单查看权限时显示哪些字段,field_key的list的json,如["days","sn"],内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称')
|
||||||
title_template = models.CharField('标题模板', max_length=50, default='你有一个待办工单:{title}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:你有一个待办工单:{title}')
|
title_template = models.CharField('标题模板', max_length=50, default='{title}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:你有一个待办工单:{title}')
|
||||||
content_template = models.CharField('内容模板', max_length=1000, default='标题:{title}, 创建时间:{create_time}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:标题:{title}, 创建时间:{create_time}')
|
content_template = models.CharField('内容模板', max_length=1000, default='标题:{title}, 创建时间:{create_time}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:标题:{title}, 创建时间:{create_time}')
|
||||||
|
|
||||||
class State(CommonAModel):
|
class State(CommonAModel):
|
||||||
|
|
|
@ -4,7 +4,9 @@ from apps.wpm.models import WProduct
|
||||||
|
|
||||||
|
|
||||||
class GetParticipants:
|
class GetParticipants:
|
||||||
|
"""
|
||||||
|
获取处理人脚本
|
||||||
|
"""
|
||||||
all_funcs = [
|
all_funcs = [
|
||||||
{'func':'get_create_by', 'name':'获取工单创建人'}
|
{'func':'get_create_by', 'name':'获取工单创建人'}
|
||||||
]
|
]
|
||||||
|
@ -20,8 +22,11 @@ class GetParticipants:
|
||||||
return participant
|
return participant
|
||||||
|
|
||||||
class HandleScripts:
|
class HandleScripts:
|
||||||
|
"""
|
||||||
|
任务处理脚本
|
||||||
|
"""
|
||||||
all_funcs = [
|
all_funcs = [
|
||||||
{'func': 'handle_wproduct', 'name':'处理不合格品'}
|
{'func': 'handle_something', 'name':'处理一些工作'}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,32 +47,11 @@ class HandleScripts:
|
||||||
return ticket
|
return ticket
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def handle_wproduct(cls, ticket:Ticket):
|
def handle_something(cls, ticket:Ticket):
|
||||||
"""处理不合格品"""
|
"""处理一些工作"""
|
||||||
# 任务处理
|
# 任务处理代码区
|
||||||
|
|
||||||
ticket_data = ticket.ticket_data
|
|
||||||
wt = ticket.wt_ticket
|
|
||||||
wp = wt.wproduct
|
|
||||||
if 'shenli2' in ticket_data and ticket_data['shenli2']:
|
|
||||||
wt.decision = ticket_data['shenli2']
|
|
||||||
if ticket_data['shenli2'] in ['返工', '返修']:
|
|
||||||
pass
|
|
||||||
elif ticket_data['shenli2'] in ['让步接收']:
|
|
||||||
wp.act_state = WProduct.WPR_ACT_STATE_OK
|
|
||||||
elif 'shenli1' in ticket_data and ticket_data['shenli1']:
|
|
||||||
wp.decision = ticket_data['shenli1']
|
|
||||||
if ticket_data['shenli1'] in ['返工', '返修']:
|
|
||||||
pass
|
|
||||||
elif ticket_data['shenli1'] in ['让步接收']:
|
|
||||||
wp.act_state = WProduct.WPR_ACT_STATE_OK
|
|
||||||
wt.save()
|
|
||||||
wp.save()
|
|
||||||
|
|
||||||
# 调用自动流转
|
# 调用自动流转
|
||||||
ticket = cls.to_next(ticket=ticket, by_task=True, script_str= 'handle_wproduct')
|
ticket = cls.to_next(ticket=ticket, by_task=True, script_str= 'handle_something')
|
||||||
if ticket.act_state == Ticket.TICKET_ACT_STATE_FINISH:
|
|
||||||
# 如果工单完成
|
|
||||||
wp.ticket = None
|
|
||||||
wp.save()
|
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ class TicketSimpleSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class TicketCreateSerializer(serializers.ModelSerializer):
|
class TicketCreateSerializer(serializers.ModelSerializer):
|
||||||
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), write_only=True)
|
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), write_only=True)
|
||||||
|
title = serializers.CharField(allow_blank=True, required=False)
|
||||||
class Meta:
|
class Meta:
|
||||||
model=Ticket
|
model=Ticket
|
||||||
fields=['title','workflow', 'ticket_data', 'transition']
|
fields=['title','workflow', 'ticket_data', 'transition']
|
||||||
|
|
|
@ -273,7 +273,7 @@ class WfService(object):
|
||||||
# 校验表单必填项目
|
# 校验表单必填项目
|
||||||
if transition.field_require_check or not created:
|
if transition.field_require_check or not created:
|
||||||
for key, value in ticket.state.state_fields.items():
|
for key, value in ticket.state.state_fields.items():
|
||||||
if value == State.STATE_FIELD_REQUIRED:
|
if int(value) == State.STATE_FIELD_REQUIRED:
|
||||||
if key not in new_ticket_data or not new_ticket_data[key]:
|
if key not in new_ticket_data or not new_ticket_data[key]:
|
||||||
raise APIException('字段{}必填'.format(key))
|
raise APIException('字段{}必填'.format(key))
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
|
||||||
工作流下的自定义字段
|
工作流下的自定义字段
|
||||||
"""
|
"""
|
||||||
wf = self.get_object()
|
wf = self.get_object()
|
||||||
serializer = self.serializer_class(instance=CustomField.objects.filter(workflow=wf), many=True)
|
serializer = self.serializer_class(instance=CustomField.objects.filter(workflow=wf, is_deleted=False).order_by('sort'), many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
@action(methods=['get'], detail=True, perms_map={'get':'workflow_init'})
|
@action(methods=['get'], detail=True, perms_map={'get':'workflow_init'})
|
||||||
|
@ -132,10 +132,10 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
return TicketDetailSerializer
|
return TicketDetailSerializer
|
||||||
return super().get_serializer_class()
|
return super().get_serializer_class()
|
||||||
|
|
||||||
def get_queryset(self):
|
def filter_queryset(self, queryset):
|
||||||
if self.action=='list' and (not self.request.query_params.get('category', None)):
|
if not self.request.query_params.get('category', None):
|
||||||
raise APIException('请指定查询分类')
|
raise APIException('请指定查询分类')
|
||||||
return super().get_queryset()
|
return super().filter_queryset(queryset)
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def create(self, request, *args, **kwargs):
|
def create(self, request, *args, **kwargs):
|
||||||
|
@ -154,11 +154,11 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
# 校验必填项
|
# 校验必填项
|
||||||
if transition.field_require_check:
|
if transition.field_require_check:
|
||||||
for key, value in start_state.state_fields.items():
|
for key, value in start_state.state_fields.items():
|
||||||
if value == State.STATE_FIELD_REQUIRED:
|
if int(value) == State.STATE_FIELD_REQUIRED:
|
||||||
if key not in ticket_data and not ticket_data[key]:
|
if key not in ticket_data and not ticket_data[key]:
|
||||||
raise APIException('字段{}必填'.format(key))
|
raise APIException('字段{}必填'.format(key))
|
||||||
save_ticket_data[key] = ticket_data[key]
|
save_ticket_data[key] = ticket_data[key]
|
||||||
elif value == State.STATE_FIELD_OPTIONAL:
|
elif int(value) == State.STATE_FIELD_OPTIONAL:
|
||||||
save_ticket_data[key] = ticket_data[key]
|
save_ticket_data[key] = ticket_data[key]
|
||||||
|
|
||||||
ticket = serializer.save(state=start_state,
|
ticket = serializer.save(state=start_state,
|
||||||
|
|
|
@ -4,4 +4,8 @@ class WpmConfig(AppConfig):
|
||||||
name = 'apps.wpm'
|
name = 'apps.wpm'
|
||||||
verbose_name = '车间生产'
|
verbose_name = '车间生产'
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
# 加载信号
|
||||||
|
import apps.wpm.signals
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.9 on 2021-12-21 08:19
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('wpm', '0036_auto_20211221_0923'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='wproduct',
|
||||||
|
name='scrap_reason',
|
||||||
|
field=models.IntegerField(blank=True, choices=[(10, '气泡'), (20, '破点'), (30, '划伤'), (40, '其他')], null=True, verbose_name='报废原因'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -94,6 +94,7 @@ class WprouctTicket(CommonAModel):
|
||||||
material = models.ForeignKey(Material, verbose_name='所在物料状态', on_delete=models.CASCADE)
|
material = models.ForeignKey(Material, verbose_name='所在物料状态', on_delete=models.CASCADE)
|
||||||
step = models.ForeignKey(Step, verbose_name='所在步骤', on_delete=models.CASCADE)
|
step = models.ForeignKey(Step, verbose_name='所在步骤', on_delete=models.CASCADE)
|
||||||
subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='所在子生产计划', on_delete=models.CASCADE)
|
subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='所在子生产计划', on_delete=models.CASCADE)
|
||||||
|
|
||||||
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', on_delete=models.CASCADE, related_name='wt_ticket')
|
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', on_delete=models.CASCADE, related_name='wt_ticket')
|
||||||
decision = models.CharField('最终决定', null=True, blank=True, max_length=100)
|
decision = models.CharField('最终决定', null=True, blank=True, max_length=100)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
from apps.qm.models import TestRecord
|
||||||
|
from apps.wf.models import Ticket
|
||||||
|
from django.dispatch import receiver
|
||||||
|
|
||||||
|
from apps.wpm.models import WProduct, WprouctTicket
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(post_save, sender=Ticket)
|
||||||
|
def handleTicket(sender, instance, created, **kwargs):
|
||||||
|
if instance.workflow.name == '不合格品审理单':
|
||||||
|
if created:
|
||||||
|
ticket_data = instance.ticket_data
|
||||||
|
"""
|
||||||
|
创建关联信息表
|
||||||
|
"""
|
||||||
|
obj = WprouctTicket()
|
||||||
|
wproduct = WProduct.objects.get(id=ticket_data['wproduct'])
|
||||||
|
obj.wproduct = wproduct
|
||||||
|
obj.number = wproduct.number
|
||||||
|
obj.material = wproduct.material
|
||||||
|
obj.step = wproduct.step
|
||||||
|
obj.subproduction_plan = wproduct.subproduction_plan
|
||||||
|
obj.ticket = instance
|
||||||
|
|
||||||
|
test_record = TestRecord.objects.filter(wproduct=wproduct, is_deleted=False, is_testok=False).order_by('-id').first()
|
||||||
|
obj.save()
|
||||||
|
|
||||||
|
# 工单绑定半成品
|
||||||
|
wproduct.ticket = instance
|
||||||
|
wproduct.save()
|
||||||
|
|
||||||
|
# 检验员
|
||||||
|
if not ticket_data.get('tester', None):
|
||||||
|
ticket_data['tester'] = test_record.create_by.id
|
||||||
|
instance.ticket_data = ticket_data
|
||||||
|
instance.save()
|
||||||
|
|
||||||
|
elif instance.act_state == Ticket.TICKET_ACT_STATE_FINISH:
|
||||||
|
"""
|
||||||
|
执行操作决定
|
||||||
|
"""
|
||||||
|
ticket_data = instance.ticket_data
|
||||||
|
wt = instance.wt_ticket
|
||||||
|
wp = wt.wproduct
|
||||||
|
if 'decision_1' in ticket_data and ticket_data['decision_1']:
|
||||||
|
wt.decision = ticket_data['decision_1']
|
||||||
|
if ticket_data['decision_1'] in ['返工', '返修']:
|
||||||
|
pass
|
||||||
|
elif ticket_data['decision_1'] in ['让步接收']:
|
||||||
|
wp.act_state = WProduct.WPR_ACT_STATE_OK
|
||||||
|
elif 'decision_2' in ticket_data and ticket_data['decision_2']:
|
||||||
|
wp.decision = ticket_data['decision_2']
|
||||||
|
if ticket_data['decision_2'] in ['返工', '返修']:
|
||||||
|
pass
|
||||||
|
elif ticket_data['decision_2'] in ['让步接收']:
|
||||||
|
wp.act_state = WProduct.WPR_ACT_STATE_OK
|
||||||
|
wt.save()
|
||||||
|
wp.save()
|
||||||
|
|
|
@ -339,10 +339,11 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
||||||
"""
|
"""
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
serializer = ScrapSerializer(data=request.data)
|
serializer = ScrapSerializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
vdata = serializer.validated_data
|
vdata = serializer.validated_data
|
||||||
if obj.act_state == WProduct.WPR_ACT_STATE_NOTOK:
|
if obj.act_state == WProduct.WPR_ACT_STATE_NOTOK:
|
||||||
pass
|
pass
|
||||||
elif obj.step.process == 1: # 如果是冷加工可直接报废
|
elif obj.step.process.id == 1: # 如果是冷加工可直接报废
|
||||||
if vdata.get('scrap_reason', None):
|
if vdata.get('scrap_reason', None):
|
||||||
obj.scrap_reason = vdata['scrap_reason']
|
obj.scrap_reason = vdata['scrap_reason']
|
||||||
else:
|
else:
|
||||||
|
@ -363,21 +364,29 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
||||||
# return WorkflowSimpleSerializer(instance=wfs, many=True).data
|
# return WorkflowSimpleSerializer(instance=wfs, many=True).data
|
||||||
|
|
||||||
@action(methods=['get'], detail=True, perms_map={'get':'*'})
|
@action(methods=['get'], detail=True, perms_map={'get':'*'})
|
||||||
def bhg_wf(self, request, pk=None):
|
def wf_bhg(self, request, pk=None):
|
||||||
"""
|
"""
|
||||||
发起不合格审理单
|
发起不合格审理单
|
||||||
"""
|
"""
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
if obj.act_state != WProduct.WPR_ACT_STATE_NOTOK:
|
if obj.act_state != WProduct.WPR_ACT_STATE_NOTOK:
|
||||||
raise exceptions.APIException('非检验不合格产品不可发起不合格审理')
|
raise exceptions.APIException('非检验不合格产品不可发起不合格审理')
|
||||||
ret = {
|
workflow = Workflow.objects.filter(name='不合格品审理单', is_deleted=False).first()
|
||||||
'sys_wproduct':obj.id,
|
if workflow:
|
||||||
'sys_name':obj.material.name,
|
exist_data = {
|
||||||
'sys_specification':obj.material.specification,
|
'wproduct':obj.id,
|
||||||
'sys_finder':request.user.id,
|
'wproduct_name':obj.material.name,
|
||||||
'sys_process':obj.step.process.id,
|
'wproduct_specification':obj.material.specification,
|
||||||
|
'finder':request.user.id,
|
||||||
|
'find_process':obj.step.process.id,
|
||||||
}
|
}
|
||||||
|
ret = {'workflow':workflow.id}
|
||||||
|
ret['exist_data'] = exist_data
|
||||||
return Response(ret)
|
return Response(ret)
|
||||||
|
else:
|
||||||
|
raise exceptions.APIException('未找到对应审批流程')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ class GenSignature(APIView):
|
||||||
cv2.imwrite(path,image)
|
cv2.imwrite(path,image)
|
||||||
return Response(request.data, status=status.HTTP_200_OK)
|
return Response(request.data, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
import time
|
||||||
class UpdateDevelop(APIView):
|
class UpdateDevelop(APIView):
|
||||||
"""
|
"""
|
||||||
更新开发服务器
|
更新开发服务器
|
||||||
|
@ -66,7 +66,9 @@ class UpdateDevelop(APIView):
|
||||||
# 奇怪的处理
|
# 奇怪的处理
|
||||||
os.chdir('/home/hberp/hb_server/vuedist')
|
os.chdir('/home/hberp/hb_server/vuedist')
|
||||||
os.popen('cp index.html indexbak')
|
os.popen('cp index.html indexbak')
|
||||||
|
time.sleep(1000)
|
||||||
os.popen('rm -rf index.html')
|
os.popen('rm -rf index.html')
|
||||||
|
time.sleep(1000)
|
||||||
os.popen('mv -f indexbak index.html')
|
os.popen('mv -f indexbak index.html')
|
||||||
# 打包前端
|
# 打包前端
|
||||||
# os.chdir('/home/hberp/hb_client')
|
# os.chdir('/home/hberp/hb_client')
|
||||||
|
|
Loading…
Reference in New Issue