修改备件信息

This commit is contained in:
龙运模 2024-10-30 17:46:45 +08:00
parent 1be8d2fbcf
commit ee057050d1
7 changed files with 469 additions and 52 deletions

View File

@ -398,6 +398,13 @@ export default {
return await http.post(this.url, params);
}
},
userCompanyField:{
url: `${config.API_URL}/user.company.field.list`,
name: "用户公司下拉选择",
post: async function (params) {
return await http.post(this.url, params);
}
},
export:{
url: `${config.API_URL}/user.export`,
name: "用户列表导出",
@ -419,7 +426,6 @@ export default {
return await http.post(this.url,params,{'Content-Type': 'multipart/form-data'});
}
},
generateRegistration:{
url: `${config.API_URL}/generate.registration.challenge`,
name: "passKey 创建",
@ -434,7 +440,6 @@ export default {
return await http.post(this.url, params);
}
},
generateAuthentication:{
url: `${config.API_URL}/generate.authentication.challenge`,
name: "passKey登录生成",
@ -580,6 +585,42 @@ export default {
return await http.post(this.url, params);
},
},
},
spareInfo:{
list: {
url: `${config.API_URL}/spare.parts.info.list`,
name: "备件信息列表",
get: async function (params) {
return await http.post(this.url, params);
},
},
add:{
url: `${config.API_URL}/spare.parts.info.add`,
name: "新增备件信息",
post: async function (params) {
return await http.post(this.url, params);
},
},
info:{
url: `${config.API_URL}/spare.parts.info.detail`,
name: "备件信息明细",
post: async function (params) {
return await http.post(this.url, params);
},
},
delete:{
url: `${config.API_URL}/spare.parts.info.delete`,
name: "删除备件信息",
post: async function (params) {
return await http.post(this.url, params);
},
},
field:{
url: `${config.API_URL}/spare.parts.info.field.list`,
name: "备件信息检索",
post: async function (params) {
return await http.post(this.url, params);
},
},
}
};

View File

@ -11,7 +11,7 @@ export const eventBus = {
$emit(eventName, ...args) {
const listeners = this.listeners[eventName];
if (listeners) {
if (listeners && listeners.length>0) {
listeners.forEach((listener) => listener(...args));
}
},

View File

@ -1,26 +1,81 @@
<template>
<div></div>
<el-container class="mainBox mainHeaderNoBorderPadding">
<el-header>
<div class="left-panel">
<el-button type="primary" :size="size" icon="el-icon-plus" @click="add">新增备件信息</el-button>
<el-button type="primary" :size="size" plain>批量导入</el-button>
<el-button type="danger" :size="size" plain @click="batch_del" :disabled="selection.length==0?true:false">删除</el-button>
</div>
<div class="right-panel">
</div>
</el-header>
<el-main class="nopadding">
<div class="searchMain searchMainNoTop">
<scSearch ref="scSearch" :searchList="searchList" @fetchSelectData="getSelectData"></scSearch>
<div class="searchItem searchBtn">
<el-button :size="size" :icon="searchShow?'el-icon-ArrowUpBold':'el-icon-ArrowDownBold'" @click="searchShowClick">{{searchShow?'收起':'更多'}}</el-button>
<el-button :size="size" type="primary" icon="el-icon-search" @click="upSearch">查询</el-button>
<el-button :size="size" type="info" icon="el-icon-RefreshRight">重置</el-button>
</div>
</div>
<scTable ref="table" :apiObj="list.apiObj" row-key="id" @selection-change="selectionChange" stripe :size="size">
<el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column>
<el-table-column label="操作" fixed="right" align="center" width="150">
<template #default="scope">
<el-dropdown>
<el-button class="noBorderBtn" icon="el-icon-more" :size="size"></el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="table_show(scope.row, 'see')" icon="sc-icon-See">查看详情</el-dropdown-item>
<el-dropdown-item @click="table_edit(scope.row, 'edit')" icon="sc-icon-Edit">编辑</el-dropdown-item>
<el-dropdown-item divided @click="table_del(scope.row, 'delete')" icon="sc-icon-Delete">删除</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<infoSave v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></infoSave>
</template>
<script>
import infoSave from "../infoSave"
export default {
name: "info",
components:{
infoSave
},
data(){
return{
size:'small',
setMap:{
status:[]
},
dialog: {
save: false,
permission: false
},
list:{
apiObj: this.$API.system.spare.list,
apiObj: this.$API.system.spareInfo.list,
column:[]
},
selection: [],
searchList:[
{name:'创建日期',type:'date',code:'created_at',show:true},
{name:'ERP编号',type:'text',code:['sn'],placeholder:"请输入备件SN",show:true},
{name:'供应商',type:'text',code:['receive_city'],placeholder:"请输入收获城市",isOpen:true,show:false},
{name:'名称',type:'date',code:'receive_date',show:true},
{name:'制造商型号',type:'text',code:['final_status'],placeholder:"请输入最终状态",isOpen:true,show:false},
{name:'规格',type:'text',code:['order_number'],placeholder:"请输入单号",isOpen:true,show:false},
{name:'创建人',type:'text',code:['warehouse'],placeholder:"请输入库房",isOpen:true,show:false},
{name:'关键字',type:'text',code:['remark','erp_pn'],keyword:true,show:true},
],
searchShow:false,
params: {
keyword: null
}
@ -30,52 +85,70 @@ export default {
},
methods:{
searchShowClick(){
this.searchShow = !this.searchShow;
this.searchList.forEach(item=>{
if(item.isOpen){
item.show = this.searchShow
}
})
},
getSelectData(){
},
//
add(){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open()
this.$refs.saveDialog.open('add');
})
},
//
table_edit(row){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('edit').setData(row)
this.$refs.saveDialog.open('edit').setData(row);
})
},
//
table_show(row){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('show').setData(row)
this.$refs.saveDialog.open('show').setData(row);
})
},
//
permission(){
this.dialog.permission = true
this.$nextTick(() => {
this.$refs.permissionDialog.open()
this.$refs.permissionDialog.open();
})
},
//
async table_del(row){
const reqData = {id: row.id};
const res = await this.$API.demo.post.post(reqData);
const reqData = {ids: [row.id]};
const res = await this.$API.system.spareInfo.delete.post(reqData);
if(res.code == 200){
this.$refs.table.refresh()
this.$message.success("删除成功")
this.$refs.table.refresh();
this.$message.success("删除成功");
}
},
//
async batch_del(){
this.$confirm(`确定删除选中的 ${this.selection.length} 项吗?`, '提示', {
type: 'warning'
}).then(() => {
}).then(async () => {
const loading = this.$loading();
this.$refs.table.refresh()
const params = {
ids:this.selection.map(em=>em.id)
}
const res = await this.$API.system.spareInfo.delete.post(params);
loading.close();
if(res.code == 200){
this.$refs.table.refresh();
this.$message.success("操作成功")
}
}).catch(() => {
})
@ -86,7 +159,7 @@ export default {
},
//
changeSwitch(val, row){
row.status = row.status == '1'?'0':'1'
row.status = row.status === '1'?'0':'1'
row.$switch_status = true;
setTimeout(()=>{
delete row.$switch_status;
@ -96,7 +169,7 @@ export default {
},
//
upSearch(){
this.$refs.table.refresh();
},
//
@ -106,11 +179,11 @@ export default {
}else if(mode=='edit'){
this.$refs.table.refresh()
}
}
},
}
}
</script>
<style scoped lang="scss">
.mainBox{padding: 0;}
</style>

View File

@ -4,7 +4,7 @@
<div class="left-panel">
<el-button type="primary" :size="size" icon="el-icon-plus" @click="add">新增备件</el-button>
<el-button type="primary" :size="size" plain>批量导入</el-button>
<el-button type="danger" :size="size" plain>删除</el-button>
<el-button type="danger" :size="size" plain @click="batch_del" :disabled="selection.length==0?true:false">删除</el-button>
</div>
<div class="right-panel">
@ -21,6 +21,7 @@
</div>
</div>
<scTable ref="table" :apiObj="list.apiObj" row-key="id" @selection-change="selectionChange" stripe :size="size">
<el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column>
<el-table-column label="操作" fixed="right" align="center" width="150">
<template #default="scope">
@ -29,8 +30,8 @@
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="table_show(scope.row, 'see')" icon="sc-icon-See">查看详情</el-dropdown-item>
<el-dropdown-item @click="table_edit(scope.row, 'edit')" icon="sc-icon-Edit">编辑</el-dropdown-item>
<el-dropdown-item @click="table_del(scope.row, 'delete')" icon="sc-icon-Delete">删除</el-dropdown-item>
<el-dropdown-item @click="table_edit(scope.row, 'edit')" icon="sc-icon-Edit">编辑备件</el-dropdown-item>
<el-dropdown-item divided @click="table_del(scope.row, 'delete')" icon="sc-icon-Delete">删除备件</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
@ -39,11 +40,17 @@
</scTable>
</el-main>
</el-container>
<librarySave v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></librarySave>
</template>
<script>
import librarySave from "../librarySave";
export default {
name: "library",
components:{
librarySave
},
data(){
return{
size:'small',
@ -52,7 +59,6 @@ export default {
},
dialog: {
save: false,
permission: false
},
list:{
apiObj: this.$API.system.spare.list,
@ -60,15 +66,15 @@ export default {
},
selection: [],
searchList:[
{name:'创建日期',type:'date',code:'activation_date',show:true},
{name:'备件SN',type:'text',code:['mobile'],placeholder:"请输入备件SN",show:true},
{name:'收获城市',type:'text',code:['address'],placeholder:"请输入收获城市",isOpen:true,show:false},
{name:'收日期',type:'date',code:'activation_date',show:true},
{name:'最终状态',type:'text',code:['owner'],placeholder:"请输入最终状态",isOpen:true,show:false},
{name:'单号',type:'text',code:['owner'],placeholder:"请输入单号",isOpen:true,show:false},
{name:'库房',type:'text',code:['owner'],placeholder:"请输入库房",isOpen:true,show:false},
{name:'FW',type:'text',code:['owner'],placeholder:"请输入FW",isOpen:true,show:false},
{name:'到货类型',type:'text',code:['owner'],placeholder:"请输入到货类型",isOpen:true,show:false},
{name:'创建日期',type:'date',code:'created_at',show:true},
{name:'备件SN',type:'text',code:['sn'],placeholder:"请输入备件SN",show:true},
{name:'收获城市',type:'text',code:['receive_city'],placeholder:"请输入收获城市",isOpen:true,show:false},
{name:'收日期',type:'date',code:'receive_date',show:true},
{name:'最终状态',type:'text',code:['final_status'],placeholder:"请输入最终状态",isOpen:true,show:false},
{name:'单号',type:'text',code:['order_number'],placeholder:"请输入单号",isOpen:true,show:false},
{name:'库房',type:'text',code:['warehouse'],placeholder:"请输入库房",isOpen:true,show:false},
{name:'FW',type:'text',code:['fw'],placeholder:"请输入FW",isOpen:true,show:false},
{name:'到货类型',type:'text',code:['delivery_type'],placeholder:"请输入到货类型",isOpen:true,show:false},
{name:'关键字',type:'text',code:['remark','erp_pn'],keyword:true,show:true},
],
searchShow:false,
@ -97,48 +103,54 @@ export default {
add(){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open()
this.$refs.saveDialog.open('add');
})
},
//
table_edit(row){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('edit').setData(row)
this.$refs.saveDialog.open('edit').setData(row);
})
},
//
table_show(row){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('show').setData(row)
this.$refs.saveDialog.open('show').setData(row);
})
},
//
permission(){
this.dialog.permission = true
this.$nextTick(() => {
this.$refs.permissionDialog.open()
this.$refs.permissionDialog.open();
})
},
//
async table_del(row){
const reqData = {id: row.id};
const res = await this.$API.demo.post.post(reqData);
const reqData = {ids: [row.id]};
const res = await this.$API.system.spare.delete.post(reqData);
if(res.code == 200){
this.$refs.table.refresh()
this.$message.success("删除成功")
this.$refs.table.refresh();
this.$message.success("删除成功");
}
},
//
async batch_del(){
this.$confirm(`确定删除选中的 ${this.selection.length} 项吗?`, '提示', {
type: 'warning'
}).then(() => {
}).then(async () => {
const loading = this.$loading();
this.$refs.table.refresh()
const params = {
ids:this.selection.map(em=>em.id)
}
const res = await this.$API.system.spare.delete.post(params);
loading.close();
if(res.code == 200){
this.$refs.table.refresh();
this.$message.success("操作成功")
}
}).catch(() => {
})
@ -149,7 +161,7 @@ export default {
},
//
changeSwitch(val, row){
row.status = row.status == '1'?'0':'1'
row.status = row.status === '1'?'0':'1'
row.$switch_status = true;
setTimeout(()=>{
delete row.$switch_status;
@ -169,7 +181,8 @@ export default {
}else if(mode=='edit'){
this.$refs.table.refresh()
}
}
},
}
}
</script>

View File

@ -0,0 +1,123 @@
<template>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="500" draggable destroy-on-close @closed="$emit('closed')">
<el-form class="form" :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="100px" label-position="right">
<el-form-item label="ERP编号" prop="erp_pn">
<el-input type="text" v-model="form.erp_pn" placeholder="请填写ERP编号" clearable></el-input>
</el-form-item>
<el-form-item label="供应商" prop="vendor">
<el-input type="text" v-model="form.vendor" placeholder="请填写供应商" clearable></el-input>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input type="text" v-model="form.name" placeholder="请填写名称" clearable></el-input>
</el-form-item>
<el-form-item label="制造商型号" prop="mpn">
<el-input type="text" v-model="form.mpn" placeholder="请填写制造商型号" clearable></el-input>
</el-form-item>
<el-form-item label="规格" prop="specification">
<el-input type="textarea" v-model="form.specification" :row="2" placeholder="请填写规格" clearable></el-input>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="visible=false" > </el-button>
<el-button v-if="mode!='show'" type="primary" :loading="isSave" @click="submit()"> </el-button>
</template>
</el-dialog>
</template>
<script>
export default {
name: "infoSave",
emits: ['success', 'closed'],
data() {
return {
mode: "add",
titleMap: {
add: '新增备件信息',
edit: '编辑备件信息',
show: '查看'
},
visible: false,
isSave: false,
//
form: {
id:"",
erp_pn:"",
vendor:"",
name:"",
mpn:"",
specification: "",
},
//
rules: {
erp_pn: [
{required: true, message: 'ERP编号不能为空'}
],
vendor: [
{required: true, message: '供应商不能为空'}
],
name:[
{required: true, message: '名称不能为空'}
],
mpn: [
{required: true, message: '制造商型号不能为空'}
],
specification: [
{required: true, message: '规格不能为空'}
],
},
}
},
mounted() {
},
methods: {
//
open(mode='add'){
this.mode = mode;
this.visible = true;
return this
},
//
submit(){
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSave = true;
const res = await this.$API.system.spareInfo.add.post(this.form);
this.isSave = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode)
this.visible = false;
this.$message.success("操作成功")
}
}else{
return false;
}
})
},
//
async setData(data) {
let params = {
id: data.id
}
const res = await this.$API.system.spareInfo.info.post(params);
if (res.code == 200) {
// this.form = res.data;
this.form.id= res.data.id;
this.form.erp_pn= res.data.erp_pn;
this.form.vendor= res.data.vendor;
this.form.name= res.data.name;
this.form.mpn= res.data.mpn;
this.form.specification= res.data.specification;
}
}
}
}
</script>
<style scoped lang="scss">
.form{
::v-deep .input{width: 100%;}
}
</style>

View File

@ -0,0 +1,150 @@
<template>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="500" draggable destroy-on-close @closed="$emit('closed')">
<el-form class="form" :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="100px" label-position="right">
<el-form-item label="备件SN" prop="sn">
<el-input type="text" v-model="form.sn" placeholder="请填写物料编码" clearable></el-input>
</el-form-item>
<el-form-item label="工厂PN" prop="erp_pn">
<el-input type="text" v-model="form.erp_pn" placeholder="请填写工厂PN" clearable></el-input>
</el-form-item>
<el-form-item label="收货城市" prop="receive_city">
<el-input type="text" v-model="form.receive_city" placeholder="请填写收货城市" clearable></el-input>
</el-form-item>
<el-form-item label="收货日期" prop="receive_date">
<el-date-picker class="input" type="date" v-model="form.receive_date" value-format="YYYY-MM-DD" placeholder="请选择收货日期"></el-date-picker>
</el-form-item>
<el-form-item label="到货类型" prop="arrival_type">
<el-input type="text" v-model="form.arrival_type" placeholder="请填写到货类型" clearable></el-input>
</el-form-item>
<el-form-item label="单号" prop="order_number">
<el-input type="text" :disabled="mode=='edit'?true:false" v-model="form.order_number" placeholder="请填写单号" clearable></el-input>
</el-form-item>
<el-form-item label="库房" prop="warehouse">
<el-input type="text" v-model="form.warehouse" placeholder="请填写库房" clearable></el-input>
</el-form-item>
<el-form-item label="FW" prop="fw">
<el-input type="text" v-model="form.fw" placeholder="请填写FW" clearable></el-input>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input type="textarea" v-model="form.remarks" :row="2" placeholder="请填写备注" clearable></el-input>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="visible=false" > </el-button>
<el-button v-if="mode!='show'" type="primary" :loading="isSave" @click="submit()"> </el-button>
</template>
</el-dialog>
</template>
<script>
export default {
name:"librarySave",
emits: ['success', 'closed'],
data() {
return {
mode: "add",
titleMap: {
add: '新增备件',
edit: '编辑备件',
show: '查看'
},
visible: false,
isSave: false,
//
form: {
id:"",
sn: "",
erp_pn:"",
receive_city:"",
receive_date:"",
arrival_type:"",
warehouse: "",
fw:"",
remarks: "",
},
//
rules: {
sn:[
{required: true, message: 'SN不能为空'}
],
erp_pn: [
{required: true, message: '工厂PN不能为空'}
],
receive_city: [
{required: true, message: '收货城市不能为空'}
],
receive_date:[
{required: true, message: '收货日期不能为空'}
],
arrival_type: [
{required: true, message: '到货类型不能为空'}
],
warehouse: [
{required: true, message: '库房不能为空'}
],
order_number:[
{required: true, message: '单号不能为空'}
],
fw: [
{required: true, message: 'FW不能为空'}
],
},
}
},
mounted() {
},
methods: {
//
open(mode='add'){
this.mode = mode;
this.visible = true;
return this
},
//
submit(){
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSave = true;
const res = await this.$API.system.spare.add.post(this.form);
this.isSave = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode)
this.visible = false;
this.$message.success("操作成功")
}
}else{
return false;
}
})
},
//
async setData(data) {
let params = {
id: data.id
}
const res = await this.$API.system.spare.info.post(params);
if (res.code == 200) {
// this.form = res.data;
this.form.id= res.data.id;
this.form.sn= res.data.sn;
this.form.erp_pn= res.data.erp_pn;
this.form.receive_city= res.data.receive_city;
this.form.receive_date= res.data.receive_date;
this.form.arrival_type= res.data.arrival_type;
this.form.warehouse= res.data.warehouse;
this.form.fw= res.data.fw;
this.form.remarks= res.data.remarks;
}
}
}
}
</script>
<style scoped lang="scss">
.form{
::v-deep .input{width: 100%;}
}
</style>

View File

@ -29,7 +29,9 @@
<el-input v-model="form.login_name" placeholder="请填写登录账号" disabled clearable></el-input>
</el-form-item>
<el-form-item label="公司名称" prop="company_full_name">
<el-input v-model="form.company_full_name" placeholder="请填写公司名称" disabled clearable></el-input>
<el-select v-model="form.company_full_name" placeholder="请填写公司名称" clearable>
<el-option v-for="(item,index) in companyList" :key="index" :label="item.full_name" :value="item.full_name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="审核意见" prop="opinion">
<el-input v-model="form.opinion" type="textarea" :row="2" placeholder="请填写审核意见" clearable></el-input>
@ -58,6 +60,8 @@ export default {
visible: false,
passLoading:false,
isSave: false,
companyList:[],
//
form: {
id:"",
@ -80,9 +84,22 @@ export default {
}
},
mounted() {
this.getCompanyList();
},
methods: {
async getCompanyList() {
let params = {
field:"full_name",
id:{
operator:"in",
value:[]
}
}
const res = await this.$API.system.user.userCompanyField.post(params);
if(res.code == 200){
this.companyList = res.data;
}
},
//
open(mode='add'){
this.mode = mode;
@ -121,7 +138,7 @@ export default {
this.form.login_name = data.login_name;
this.form.name = data.name;
this.form.avatar = data.avatar && data.avatar!==""?data.avatar:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png';
this.form.company_full_name = data.company_info?data.company_info.full_name:''
this.form.company_full_name = data.company_info?data.company_info.full_name:'';
}
}
}