feat:添加不合格项#coding720

This commit is contained in:
shijing 2024-12-18 11:25:23 +08:00
parent f231b2dc25
commit c3eaa07d73
6 changed files with 350 additions and 372 deletions

View File

@ -42,6 +42,43 @@ export default {
return await http.get(this.url, data);
},
},
defect:{
list: {
name: "质检项目",
req: async function (data) {
return await http.get(`${config.API_URL}/qm/defect/`, data);
},
},
item: {
name: "质检项目",
req: async function (id) {
return await http.get(`${config.API_URL}/qm/defect/${id}/`);
},
},
update: {
name: "更新",
req: async function (id, data) {
return await http.put(
`${config.API_URL}/qm/defect/${id}/`,
data
);
},
},
create: {
name: "创建",
req: async function (data) {
return await http.post(`${config.API_URL}/qm/defect/`, data);
},
},
delete: {
name: "删除",
req: async function (id) {
return await http.delete(
`${config.API_URL}/qm/defect/${id}/`
);
},
},
},
testitem: {
list: {
name: "质检项目",

View File

@ -1190,17 +1190,6 @@ const routes = [
},
component: "mtm/materials",
},
{
path: "/mtm/testItem",
name: "testItem",
meta: {
title: "检测项目",
// icon: "el-icon-postcard",
type: "menu",
perms: ["testitem"],
},
component: "mtm/testItem",
},
{
name: "process",
path: "/mtm/process",
@ -1671,6 +1660,16 @@ const routes = [
perms: ["qm"],
},
children: [
{
path: "/qm/defect",
name: "defect",
meta: {
title: "缺陷项",
type: "menu",
perms: ["defect"],
},
component: "qm/defect",
},
{
name: "testItem",
path: "/qm/testItem",

View File

@ -1,201 +0,0 @@
<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
icon="el-icon-plus"
@click="table_add"
v-auth="'material.create'"
></el-button>
</div>
<div class="right-panel">
<el-input
style="margin-right: 5px"
v-model="query.search"
placeholder="名称"
clearable
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id">
<el-table-column
label="#"
type="index"
width="50"
></el-table-column>
<el-table-column
label="名称"
prop="name"
min-width="100"
></el-table-column>
<el-table-column
label="字段类型"
prop="field_type"
min-width="100"
>
<template #default="scope">
<span>{{ type_[scope.row.field_type] }}</span>
</template>
</el-table-column>
<el-table-column label="检验类型">
<template #default="scope">
<span v-for="item in scope.row.tags" :key="item"
>{{ tags_[item] }}</span>
</template>
</el-table-column>
<el-table-column
label="物料系列标签"
prop="mcate_tags"
min-width="100"
></el-table-column>
<el-table-column
label="编号"
prop="number"
min-width="100"
></el-table-column>
<el-table-column
label="描述"
prop="description"
min-width="100"
></el-table-column>
<el-table-column
label="排序"
prop="sort"
min-width="60"
></el-table-column>
<el-table-column
label="操作"
fixed="right"
align="center"
width="140"
>
<template #default="scope">
<el-button
link
size="small"
@click="table_edit(scope.row)"
v-auth="'material.update'"
type="primary"
>编辑</el-button
>
<el-divider direction="vertical"></el-divider>
<el-popconfirm
title="确定删除吗?"
@confirm="roleDel(scope.row, scope.$index)"
>
<template #reference>
<el-button
link
size="small"
v-auth="'material.delete'"
type="danger"
>删除</el-button
>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<save-dialog
v-if="dialog.save"
ref="saveDialog"
@success="handleSaveSuccess"
@closed="dialog.save = false"
></save-dialog>
</template>
<script>
import saveDialog from "./testItem_form.vue";
export default {
name: "material",
components: {
saveDialog,
},
data() {
return {
apiObj: this.$API.qm.testitem.list,
search: {
keyword: null,
},
dialog: {
save: false,
},
query: {},
type_: {
"input-int":"整数",
"input-number":"小数",
"input-text":"文本",
"select":"单选",
"selects":"多选"
},
tags_:{
"first":"首件检验",
"prod":"成品检验",
"performance":"性能检验"
},
};
},
methods: {
handleChange(value) {
console.log(value);
console.log(this.form.belong_dept);
},
//
table_add() {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("add");
});
},
//
table_edit(row) {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("edit").setData(row);
});
},
//
async roleDel(row) {
var id = row.id;
var res = await this.$API.mtm.material.delete.req(id);
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
},
//
selectionChange(selection) {
this.selection = selection;
},
//
handleQuery() {
this.$refs.table.queryData(this.query);
},
//
handleSaveSuccess() {
this.$refs.table.refresh();
},
},
};
</script>
<style scoped>
.treeMain {
width: 100%;
height: 280px;
overflow: auto;
border: 1px solid #dcdfe6;
margin-bottom: 10px;
}
</style>

220
src/views/qm/defect.vue Normal file
View File

@ -0,0 +1,220 @@
<template>
<el-container>
<el-header>
<div class="left-panel">
<!-- v-auth="'defect.create'" -->
<el-button type="primary" icon="el-icon-plus" @click="defectAdd"></el-button>
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input v-model="query.search" placeholder="名称" clearable @keyup.enter="handleQuery"></el-input>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id" @selection-change="selectionChange" hidePagination>
<el-table-column label="#" type="index"></el-table-column>
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="标识" prop="code"></el-table-column>
<el-table-column label="分类" prop="cate">
<template #default="scope">
<el-tag type="success">{{ scope.row.cate}}</el-tag>
</template>
</el-table-column>
<el-table-column label="不合格分类" prop="okcate">
<template #default="scope">
<el-tag :type="typeCpmpute(scope.row.okcate)" effect="plain">{{ okcate_[scope.row.okcate] }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="140">
<template #default="scope">
<el-button link size="small" @click="defectEdit(scope.row, scope.$index)" v-auth="'role.update'" type="primary">编辑</el-button>
<el-divider direction="vertical"></el-divider>
<el-popconfirm title="确定删除吗?" @confirm="defectDel(scope.row, scope.$index)">
<template #reference>
<el-button link size="small" v-auth="'defect.delete'" type="danger">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<el-dialog :title="titleMap[type]" v-model="limitedVisible" :width="600">
<el-form :model="addForm" :rules="rules" ref="addForm" label-width="90px" label-position="left">
<el-form-item label="名称" prop="name">
<el-input v-model="addForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="标识" prop="code">
<el-input v-model="addForm.code" clearable></el-input>
</el-form-item>
<el-form-item label="分类" prop="cate">
<el-select style="width: 100%;"
v-model="addForm.cate"
placeholder="请选择">
<el-option v-for="item in cateOptions"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="不合格分类">
<el-select style="width: 100%;"
v-model="addForm.okcate"
placeholder="请选择">
<el-option v-for="item in options"
:key="item.id"
:label="item.label"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="limitedVisible=false" > </el-button>
<el-button v-if="type!=='show'" type="primary" :loading="isSaving" @click="submitHandle()"> </el-button>
</template>
</el-dialog>
</template>
<script>
const defaultForm = {
id:"",
name: "",
code: "",
cate: "尺寸",
okcate:10,
};
export default {
name: 'dept',
data() {
return {
apiObj: this.$API.qm.defect.list,
query: {
search:''
},
isSaving: false,
limitedVisible : false,
type: "add",
titleMap: {
add: '新增',
edit: '编辑',
show: '查看'
},
options: [
{id:10,label: '合格'},
{id:20,label: 'B类合格'},
{id:30,label: '不合格'},
],
cateOptions: ['尺寸', '外观','内质'],
okcate_: {
10: '合格',
20: 'B类合格',
30: '不合格',
},
//
addForm: defaultForm,
//
rules: {
name: [
{required: true, message: '请输入名称'}
],
code: [
{required: true, message: '请输入标识'}
],
cate: [
{required: true, message: '请输入分类'}
],
},
}
},
methods: {
typeCpmpute(cate){
if(cate==10){
return 'success'
}else if(cate==20){
return 'warning'
}else if(cate==30){
return 'danger'
}
},
//
defectAdd(){
this.type = "add";
//
this.addForm.id="";
this.addForm.name="";
this.addForm.code="";
this.addForm.cate="尺寸";
this.addForm.okcate=10;
this.limitedVisible = true;
//
this.$refs.addForm.clearValidate();
// this.addForm = Object.assign({}, defaultForm);
},
submitHandle(){
let that = this;
this.$refs.addForm.validate( (valid) => {
if (valid) {
this.isSaveing = true;
let res;
if(this.type==='add'){
this.$API.qm.defect.create.req(that.addForm).then(res=>{
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}).catch(e=>{this.isSaveing = false;})
}else{
this.$API.qm.defect.update.req(that.addForm.id,that.addForm).then(res=>{
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}).catch(e=>{this.isSaveing = false;})
}
}
})
},
//
defectEdit(row){
this.type='edit';
this.addForm.id=row.id;
this.addForm.name=row.name;
this.addForm.code=row.code;
this.addForm.cate=row.cate;
this.addForm.okcate=row.okcate;
this.limitedVisible = true;
},
//
async defectDel(row){
var id = row.id;
var res = await this.$API.qm.defect.delete.req(id);
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.$refs.table.refresh();
this.$message.success("删除成功")
}
},
//
selectionChange(selection){
this.selection = selection;
},
//
handleQuery(){
this.$refs.table.queryData(this.query)
},
//
handleSaveSuccess(data, type){
if(type=='add'){
this.$refs.table.refresh()
}else if(type=='edit'){
this.$refs.table.refresh()
}
}
}
}
</script>
<style scoped></style>

View File

@ -2,7 +2,7 @@
<el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" icon="el-icon-plus" @click="roleAdd" v-auth="'role.create'"></el-button>
<el-button type="primary" icon="el-icon-plus" @click="testitemAdd" v-auth="'role.create'"></el-button>
</div>
<div class="right-panel">
<div class="right-panel-search">
@ -12,13 +12,19 @@
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id" @selection-change="selectionChange" hidePagination>
<!-- <el-table-column type="selection" width="50"></el-table-column> -->
<scTable ref="table" :apiObj="apiObj" row-key="id" hidePagination>
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="类型" prop="field_type" min-width="100"></el-table-column>
<el-table-column label="描述" prop="description" min-width="100"></el-table-column>
<el-table-column label="物料系列标签" prop="mcate_tags">
<el-table-column label="检验类型" prop="field_type">
<template #default="scope">
<span v-for="(item,index) in scope.row.tags" :key="item">{{ tags_[item] }} <span v-if="index < scope.row.tags.length - 1"></span></span>
</template>
</el-table-column>
<el-table-column label="类型" prop="field_type">
<template #default="scope">{{ field_type_[scope.row.field_type] }}</template>
</el-table-column>
<el-table-column label="描述" prop="description"></el-table-column>
<el-table-column label="物料系列标签" prop="mcate_tags" v-if="base_code !== 'bxerp'">
<template #default="scope">
<span v-for="item in scope.row.mcate_tags" :key="item">{{ item }}</span>
</template>
@ -30,9 +36,9 @@
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="140">
<template #default="scope">
<el-button link size="small" @click="roleEdit(scope.row, scope.$index)" v-auth="'role.update'" type="primary">编辑</el-button>
<el-button link size="small" @click="testitemEdit(scope.row, scope.$index)" v-auth="'role.update'" type="primary">编辑</el-button>
<el-divider direction="vertical"></el-divider>
<el-popconfirm title="确定删除吗?" @confirm="roleDel(scope.row, scope.$index)">
<el-popconfirm title="确定删除吗?" @confirm="testitemDel(scope.row, scope.$index)">
<template #reference>
<el-button link size="small" v-auth="'role.delete'" type="danger">删除</el-button>
</template>
@ -42,72 +48,44 @@
</scTable>
</el-main>
</el-container>
<el-dialog :title="titleMap[type]" v-model="limitedVisible" :width="600">
<el-form :model="addForm" :rules="rules" ref="addForm" autocomplete =off label-width="100px" label-position="left">
<el-form-item label="名称" prop="name" auto>
<el-input v-model="addForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="标识">
<el-input v-model="addForm.code" clearable></el-input>
</el-form-item>
<el-form-item label="描述">
<el-input v-model="addForm.description" clearable></el-input>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="limitedVisible=false" > </el-button>
<el-button v-if="type!=='show'" type="primary" :loading="isSaving" @click="submitHandle()"> </el-button>
</template>
</el-dialog>
<save-dialog
v-if="saveVisible"
ref="saveDialog"
@success="handleSuccess"
@closed="saveVisible = false"
>
</save-dialog>
</template>
<script>
const defaultForm = {
id:"",
name: "",
code: "",
description: "",
perms:[],
};
import saveDialog from "./testItem_form.vue";
export default {
name: 'dept',
name: 'testitem',
components: { saveDialog },
data() {
return {
base_code: this.$TOOL.data.get('BASE_INFO').base.base_code,
apiObj: this.$API.qm.testitem.list,
selection: [],
checkList: [],
search: {
keyword: null
query: {
search:''
},
query: {},
isSaving: false,
limitedVisible : false,
checkStrictly:true,
saveVisible : false,
type: "add",
titleMap: {
add: '新增',
edit: '编辑',
show: '查看'
},
//
addForm: defaultForm,
//
rules: {
name: [
{required: true, message: '请输入角色名称'}
],
field_type_: {
"input-int":"整数",
"input-number":"小数",
"input-text":"文本",
"select":"单选",
"selects":"多选",
},
menu: {
list: [],
checked: [],
props: {
emitPath: false,
children: 'children',
// label: 'name',
/*label: (data)=>{
return data.meta.title
}*/
}
tags_:{
"first":"首件检验",
"prod":"成品检验",
"performance":"性能检验"
},
}
},
@ -115,50 +93,21 @@
},
methods: {
//
roleAdd(){
this.limitedVisible = true;
this.type = "add";
this.$nextTick(()=>{
this.$refs.menu.setCheckedKeys([])
})
this.addForm = Object.assign({}, defaultForm);
testitemAdd(){
this.saveVisible = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("add");
});
},
submitHandle(){
let that = this;
this.addForm.perms = this.menu.checked;
this.$refs.addForm.validate( (valid) => {
if (valid) {
this.isSaveing = true;
let res;
if(this.type==='add'){
this.$API.qm.testitem.create.req(that.addForm).then(res=>{
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}).catch(e=>{this.isSaveing = false;})
}else{
this.$API.qm.testitem.update.req(that.addForm.id,that.addForm).then(res=>{
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}).catch(e=>{this.isSaveing = false;})
}
}
})
},
//
roleEdit(row){
this.type='edit';
this.addForm.id=row.id;
this.addForm.name=row.name;
this.addForm.code=row.code;
this.addForm.description=row.description;
this.limitedVisible = true;
testitemEdit(row){
this.saveVisible = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("edit").setData(row);
});
},
//
async roleDel(row){
async testitemDel(row){
var id = row.id;
var res = await this.$API.qm.testitem.delete.req(id);
if(res.err_msg){
@ -168,21 +117,14 @@
this.$message.success("删除成功")
}
},
//
selectionChange(selection){
this.selection = selection;
},
//
handleQuery(){
this.$refs.table.queryData(this.query)
},
//
handleSaveSuccess(data, type){
if(type=='add'){
this.$refs.table.refresh()
}else if(type=='edit'){
this.$refs.table.refresh()
}
handleSuccess(data, type){
this.$refs.table.refresh()
this.$message.success("操作成功")
}
}
}

View File

@ -43,7 +43,25 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
</el-row>
<el-row>
<el-col :md="12" :sm="24">
<el-form-item label="编号">
<el-input
v-model="form.number"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="描述">
<el-input
v-model="form.description"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="检验类型">
<el-checkbox-group v-model="form.tags">
<el-checkbox
@ -54,7 +72,15 @@
</el-checkbox-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :md="12" :sm="24">
<el-form-item label="排序">
<el-input-number
v-model="form.sort"
clearable
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="24" v-if="mcateTagsOptions.length>0">
<el-form-item label="物料系列标签">
<el-checkbox-group v-model="form.mcate_tags">
<el-checkbox
@ -63,21 +89,6 @@
:label="item"
:value="item"/>
</el-checkbox-group>
<!-- <el-select
v-model="form.mcate_tags"
placeholder="物料系列标签"
clearable
multiple
style="width: 100%"
>
<el-option
v-for="item in mcateTagsOptions"
:key="item"
:label="item"
:value="item"
>
</el-option>
</el-select> -->
</el-form-item>
</el-col>
</el-row>
@ -103,39 +114,11 @@
</el-col>
<el-col :md="1" :sm="2">
<div style="text-align: center">
<el-button type="danger" icon="el-icon-remove" text @click="delComponent($index,'choices')">
</el-button>
<el-button type="danger" icon="el-icon-remove" text @click="delComponent($index,'choices')"></el-button>
</div>
</el-col>
</template>
</el-row>
<el-row>
<el-col :md="12" :sm="24">
<el-form-item label="编号">
<el-input
v-model="form.number"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="描述">
<el-input
v-model="form.description"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="排序">
<el-input-number
v-model="form.sort"
clearable
></el-input-number>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-main>
<el-footer>
@ -231,9 +214,8 @@ export default {
.req(that.form)
.then((res) => {
that.isSaveing = false;
that.$emit("success", that.form, that.mode);
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
})
.catch((res) => {
that.isSaveing = false;
@ -243,9 +225,8 @@ export default {
.req(that.form.id, that.form)
.then((res) => {
that.isSaveing = false;
that.$emit("success", that.form, that.mode);
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
})
.catch((res) => {
that.isSaveing = false;