修改BOM、预警管理

This commit is contained in:
龙运模 2024-12-02 20:56:41 +08:00
parent c77131aa5e
commit 9161fa358e
18 changed files with 324 additions and 229 deletions

14
src/api/model/early.js Normal file
View File

@ -0,0 +1,14 @@
import config from "@/config";
import http from "@/utils/request";
export default {
earlyWarn:{
list:{
url: `${config.API_URL}/spare.parts.water.level.warning.list`,
name: "备件水位预警管理列表",
get: async function (params) {
return await http.post(this.url, params);
},
}
}
};

View File

@ -39,6 +39,13 @@ export default {
post: async function (data) {
return await http.post(this.url, data);
},
},
free:{
url: `${config.API_URL}/mail.free.list`,
name: "获取邮件免蜜链接",
post: async function (data) {
return await http.post(this.url, data);
},
}
},
k3:{

View File

@ -130,7 +130,7 @@ export default {
.icon{width: 14px;height: 14px;margin-right: 4px;}
}
}
.exportPopover :deep(.el-progress-bar__innerText){
.exportPopover ::v-deep .el-progress-bar__innerText{
height: 100%;
display: flex;align-items: center;justify-content: flex-end;
font-size: 10px;

View File

@ -12,7 +12,6 @@
</div>
<div class="searchItem" v-if="item.type == 'select' && ((item.isOpen && item.show) || item.show)">
<label class="name">{{item.name}}</label>
<el-select class="input" :size="size" v-model="params[item.code]" @visible-change="getSelect(item,$event)" :placeholder="item.placeholder" filterable clearable>
<el-option v-for="em in item.data" :key="em" :label="em.label " :value="em[item.code[0]] || em.active_status"></el-option>
</el-select>

View File

@ -245,7 +245,7 @@
}
</script>
<style lang="scss">
<style lang="scss" scoped>
.badge{
display: flex;
align-items: center;
@ -421,7 +421,8 @@
background: #383838;
}
.el-popper.is-light>.el-popper__arrow::before{
background: #F5F7FA;
.el-popper.is-light ::v-deep .el-popper__arrow::before{
background: #F5F7FA !important;
}
</style>

View File

@ -2,43 +2,16 @@
<el-container class="mainBox mainBoxHeaderNoBorder">
<el-main class="nopadding">
<div class="searchMain">
<div class="searchItem">
<label class="name">时间</label>
<el-date-picker class="input" type="daterange" :size="size" v-model="params.keyword" :popper-options="{ placement: 'bottom-start' }" value-format="yyyy-MM-dd" start-placeholder="开始日期" end-placeholder="结束日期" clearable></el-date-picker>
</div>
<div class="searchItem">
<label class="name">工单号</label>
<el-input class="input" :size="size" v-model="params.keyword" placeholder="工单号" clearable></el-input>
</div>
<div class="searchItem">
<label class="name">维保供应商</label>
<el-select class="input" :size="size" v-model="params.keyword" placeholder="维保供应商" clearable>
<el-option v-for="item in setMap.status" :key="item" :label="item.name" :value="item.value"></el-option>
</el-select>
</div>
<div class="searchItem">
<label class="name">状态</label>
<el-select class="input" :size="size" v-model="params.keyword" placeholder="状态" clearable>
<el-option v-for="item in setMap.status" :key="item" :label="item.name" :value="item.value"></el-option>
</el-select>
</div>
<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="工单号" prop="order_sn" width="150"></el-table-column>
<el-table-column label="别名" prop="alias" width="200"></el-table-column>
<el-table-column label="排序" prop="sort" width="80"></el-table-column>
<el-table-column label="创建时间" prop="date" width="180"></el-table-column>
<el-table-column label="状态" prop="status" width="80">
<template #default="scope">
<el-switch v-model="scope.row.status" :size="size" @change="changeSwitch($event, scope.row)" :loading="scope.row.$switch_status" :active-value="true" :inactive-value="false"></el-switch>
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" min-width="150"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="150">
<template #default="scope">
<el-dropdown>
@ -69,25 +42,48 @@ export default {
data() {
return {
size:'small',
searchShow:false,
setMap:{
status:[]
},
dialog: {
save: false,
permission: false
},
list:{
apiObj: {},
apiObj: this.$API.early.earlyWarn.list,
column:[]
},
searchList:[
{name:'日期',type:'date',code:'created_at',show:true},
{name:'区域',type:'text',code:['region'],placeholder:"请选择区域",show:true},
{name:'部件类别',type:'text',code:['part_category'],placeholder:"请输入部件类别",show:true},
{name:'部件MPN',type:'text',code:['part_mpn'],placeholder:"请输入部件MPN",isOpen:true,show:false},
{name:'在保备件出货总量',type:'text',code:['total_protected_parts'],placeholder:"请输入在保备件出货总量",isOpen:true,show:false},
{name:'在保备件数量',type:'text',code:['protected_spares_quantity'],placeholder:"请输入在保备件数量",isOpen:true,show:false},
{name:'预估三个月用量',type:'text',code:['sn'],placeholder:"请输入预估三个月用量",isOpen:true,show:false},
{name:'风险等级',type:'text',code:['risk_level'],placeholder:"请输入风险等级",isOpen:true,show:false},
{name:'风险描述',type:'text',code:['risk_description'],placeholder:"请输入风险描述",isOpen:true,show:false},
{name:'治理计划',type:'text',code:['governance_plan'],placeholder:"请输入治理计划",isOpen:true,show:false},
{name:'关键字',type:'text',code:['fault_description'],keyword:true,show:true},
],
selection: [],
params: {
keyword: null
}
params: {}
}
},
methods: {
getSelectData(item){
let { params} = item; // data,
this.params = params;
},
searchShowClick(){
this.searchShow = !this.searchShow;
this.searchList.forEach(item=>{
if(item.isOpen){
item.show = this.searchShow
}
})
},
//
add(){
this.dialog.save = true
@ -154,7 +150,7 @@ export default {
},
//
upSearch(){
this.$refs.table.upData(this.params);
},
//

View File

@ -1,20 +1,15 @@
<template>
<el-popover
placement="bottom"
title=""
trigger="click"
content=""
width="300"
v-bind="$attrs"
:visible="show"
>
<template #reference>
<div class="customerPopover">
<div class="btnBox">
<slot></slot>
</template>
<template #default>
</div>
<div class="contentPopover" v-if="show">
<div class="bodyMain">
<span class="arrow"></span>
<div class="refreshBox">{{refreshDom}}</div>
</template>
</el-popover>
</div>
</div>
</div>
</template>
<script>
@ -58,6 +53,54 @@ export default {
}
</script>
<style scoped>
<style scoped lang="scss">
.exportPopover ::v-deep .el-progress-bar__innerText{
height: 100%;
display: flex;align-items: center;justify-content: flex-end;
font-size: 10px;
}
.customerPopover{
position: relative;
height: auto;
.btnBox{
margin-left: 12px;
}
.contentPopover{
width: 300px;
padding: 12px;
background: var(--el-bg-color-overlay);
border: 1px solid var(--el-border-color-light);
box-shadow: var(--el-box-shadow-light);
border-radius: 4px;
position: absolute;
top: 38px;
right: -10px;
z-index: 200;
}
.bodyMain{
position: relative;
.arrow{
position: absolute;
right: 0;
top: -18px;
width: 8px;height: 8px;z-index: 10;
}
.arrow:before{
position: absolute;
top: 0;
right: 0;
z-index: -1;
content: '';
width: 8px;
height: 8px;
transform:rotate(135deg);
border: 1px solid var(--el-border-color-light);
background: #fff;
border-bottom-left-radius:2px;
border-right-color:transparent;
border-top-color:transparent;
}
}
}
</style>

View File

@ -13,13 +13,17 @@
<span class="refreshEmail" v-auth="'mailSyncManual'" @click="manualClick"><el-icon size="16px" :class="refreshShow?'refreshEmailIcon':''"><sc-icon-Refresh/></el-icon></span>
</emailSync>
</el-header>
<el-header>
<el-button type="primary" plain :size="size" :loading="emailLinkLoading" @click="seeEmailLink">查看收件箱</el-button>
</el-header>
<el-main class="nopadding" v-loading="listLoading" element-loading-text="加载中...">
<el-scrollbar height="100%" ref="scrollbar" @scroll="onScroll">
<div class="emailMain" ref="emailMain">
<div class="itemBox" :class="[item.is_confirm==2?'part':item.is_confirm==1?'complete':'notStarted', emailId == item.id?'itemTrue':'']" v-for="item in confirmList" :key="item" @click="()=>{this.emailChange(item,true);}">
<div class="name text">{{item.from && item.from.email}}</div>
<div class="title text">{{item.subject}}</div>
<div class="msg text">{{item.text}}</div>
<div class="msg title text">{{item.text}}</div>
<div class="seeEmail text" @click.stop="seeEmailLinkDetail(item)">查看邮件</div>
<div class="date">{{item.sent_at}}</div>
<div class="total">
<el-badge class="badgeItem" :value="item.total_count" :max="99" color="#eeeeee"></el-badge>
@ -191,6 +195,7 @@ export default {
confirmList:[],
listMore:false,
listLoading:false,
emailLinkLoading:false,
listParams:{
page:1,
pageSize:30,
@ -284,11 +289,24 @@ export default {
return 'all-disabled'
}
},
async seeEmailLink() {
this.emailLinkLoading = true;
const res = await this.$API.setup.mail.free.post();
this.emailLinkLoading = false;
if (res.code == 200) {
window.open(res.data.link,'_blank');
}
},
async seeEmailLinkDetail(item) {
const res = await this.$API.setup.mail.free.post({message_id:item.message_id});
if (res.code == 200) {
window.open(res.data.link, '_blank');
}
},
async getEmailConfig() {
const res = await this.$API.setup.mail.configInfo.post();
if(res.code == 200){
this.is_auto_repair = res.data.is_auto_repair;
console.log(res.data)
}
},
async getData() {
@ -637,6 +655,7 @@ export default {
.name{margin-bottom: 10px;font-size: 14px;font-weight: 600;color: var(--el-color-dark);}
.title{margin-bottom: 6px;color: var(--el-text-color-regular)}
.msg{color: var(--el-text-color-placeholder);width: calc(100% - 40px);}
.seeEmail{color: var(--el-color-primary);cursor: pointer;}
.date{
position: absolute;right: 12px;top: 14px;z-index: 10;
color: var(--el-text-color-regular);
@ -663,6 +682,7 @@ export default {
.itemBox:hover{
padding-right: 10px;
cursor: pointer;
background: #EFF5FF;
}
.itemBox:hover .total{
right: 20px;

View File

@ -110,6 +110,10 @@ export default {
.pageRight ::v-deep .mainTable .el-table .el-table__inner-wrapper:before{
height: 0;
}
.mainMenu .el-menu-item.is-active:after{
background: none;
width: 0;
}
.pageBody{
height: 100%;

View File

@ -1,24 +1,5 @@
<template>
<div class="serveFooter">
<!-- <div class="footerView">-->
<!-- <div class="footer-left">-->
<!-- <div class="common-header-logo">-->
<!-- <img class="logo" src="https://dm-auto.oss-cn-shanghai.aliyuncs.com/xw_cloud/image/login_logo.png">-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="footer-right">-->
<!-- <div class="viewUl">-->
<!-- <div class="line"><span>个人中心</span></div>-->
<!-- <div class="line"><span>关于我们</span></div>-->
<!-- </div>-->
<!-- <div class="viewUl">-->
<!-- <div class="line"><span>服务支持</span></div>-->
<!-- <div class="line"><span>信息查询</span></div>-->
<!-- <div class="line"><span>自助服务</span></div>-->
<!-- <div class="line"><span>问题单</span></div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<div class="copyright">
<div class="viewUl">
<div class="line"><span>Copyright @2024象纬云科有限公司</span></div>
@ -48,6 +29,11 @@ export default {
border-top: 1px solid #f6f6f6;
background: #FFFFFF;
padding: 12px 0;
position: fixed;
bottom: 0;
left: 0;
z-index: 10;
width: 100%;
.footerView{
padding: 0 20px;
display: flex;

View File

@ -4,14 +4,14 @@
<el-main class="serveMain">
<div class="searchMain searchMainNoTop">
<div class="searchItem">
<div class="name">序列号</div> <el-input type="text" :size="size" placeholder="请输入序列号"></el-input>
<el-input class="textInput" type="text" placeholder="请输入序列号"></el-input>
</div>
<div class="searchItem searchBtn">
<el-button :size="size" type="primary" icon="el-icon-search" @click="upSearch">查询</el-button>
<el-button type="primary" icon="el-icon-search" @click="upSearch">查询</el-button>
</div>
</div>
<div class="mainTable">
<scTable height="100%" ref="table" :data="list.data" :column="list.column" stripe :size="size">
<scTable height="100%" ref="table" :data="list.data" :column="list.column" :size="size" hideDo>
<el-table-column type="index" label="序号"></el-table-column>
<template v-for="(item,index) in list.column" :key="index">
<el-table-column :label="item.label" :prop="item.prop" :width="item.width" show-overflow-tooltip></el-table-column>
@ -59,5 +59,6 @@ export default {
</script>
<style scoped lang="scss">
.searchMainNoTop{margin: 0 auto 20px auto;}
.textInput{width: 480px;}
</style>

View File

@ -4,14 +4,14 @@
<el-main class="serveMain">
<div class="searchMain searchMainNoTop">
<div class="searchItem">
<div class="name">序列号</div><el-input class="textInput" type="text" v-model="keyword" :size="size" clearable placeholder="请输入序列号"></el-input>
<el-input class="textInput" type="text" v-model="keyword" clearable placeholder="请输入序列号"></el-input>
</div>
<div class="searchItem searchBtn">
<el-button :size="size" type="primary" icon="el-icon-search" @click="upSearch">查询</el-button>
<el-button type="primary" icon="el-icon-search" @click="upSearch">查询</el-button>
</div>
</div>
<div class="mainTable">
<scTable class="serveTable" ref="table" :apiObj="list.apiObj" :column="list.column" :params="params" stripe :size="size">
<scTable class="serveTable" ref="table" :apiObj="list.apiObj" :column="list.column" :params="params" :size="size" hideDo>
<el-table-column type="index" label="序号"></el-table-column>
<template v-for="(item,index) in list.column" :key="index">
<el-table-column :label="item.label" :prop="item.prop" :width="item.width" show-overflow-tooltip>
@ -80,5 +80,6 @@ export default {
</script>
<style scoped lang="scss">
.textInput{width: 200px;}
.searchMainNoTop{margin: 0 auto 20px auto;}
.textInput{width: 480px;}
</style>

View File

@ -4,14 +4,14 @@
<el-main class="serveMain">
<div class="searchMain searchMainNoTop">
<div class="searchItem">
<div class="name">序列号</div> <el-input type="text" :size="size" placeholder="请输入序列号"></el-input>
<el-input class="textInput" type="text" placeholder="请输入序列号"></el-input>
</div>
<div class="searchItem searchBtn">
<el-button :size="size" type="primary" icon="el-icon-search" @click="upSearch">查询</el-button>
<el-button type="primary" icon="el-icon-search" @click="upSearch">查询</el-button>
</div>
</div>
<div class="mainTable">
<scTable height="100%" ref="table" :data="list.data" :column="list.column" stripe :size="size">
<scTable height="100%" ref="table" :data="list.data" :column="list.column" :size="size" hideDo>
<el-table-column type="index" label="序号"></el-table-column>
<template v-for="(item,index) in list.column" :key="index">
<el-table-column :label="item.label" :prop="item.prop" :width="item.width" show-overflow-tooltip></el-table-column>
@ -60,5 +60,6 @@ export default {
</script>
<style scoped lang="scss">
.searchMainNoTop{margin: 0 auto 20px auto;}
.textInput{width: 480px;}
</style>

View File

@ -96,6 +96,10 @@ export default {
.pageRight ::v-deep .mainTable .el-table .el-table__inner-wrapper:before{
height: 0;
}
.mainMenu .el-menu-item.is-active:after{
background: none;
width: 0;
}
.pageBody{
height: 100%;

View File

@ -37,6 +37,8 @@
</template>
<script>
import {eventBus} from "@/utils/eventBus";
export default {
name: "faq",
components:{
@ -66,17 +68,17 @@ export default {
},
mounted() {
this.getTypeList();
},
methods:{
table_show(row){
this.$router.push({
path: '/service/faq-info',
query: {
id: row.id,
name:row.name
async getTypeList() {
const res = await this.$API.customer.serviceTypeList.post();
if(res.code == 200){
this.setMap.typeList = res.data;
}
})
},
table_show(row){
eventBus.$emit('tagClose','/service/faq-info',{id:row.id,name:row.name});
},
table_del(row){
let params = {

View File

@ -3,7 +3,6 @@
<el-main class="nopadding">
<div class="searchMain">
<scSearch ref="scSearch" :searchList="searchList" @fetchSelectData="getSelectData"></scSearch>
<div class="searchItem searchBtn">
<el-button :size="size" type="primary" icon="el-icon-search" @click="upSearch">查询</el-button>
<el-button :size="size" type="info" icon="el-icon-RefreshRight" @click="reset">重置</el-button>
@ -12,6 +11,11 @@
<scTable ref="table" :apiObj="list.apiObj" :column="list.column" row-key="id" stripe :size="size" @selection-change="selectionChange">
<el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column>
<template #type="scope">
<span v-for="(item,index) in setMap.typeList" :key="index">
<span v-if="item.value == scope.row.type">{{item.label}}</span>
</span>
</template>
</scTable>
</el-main>
</el-container>
@ -23,9 +27,8 @@ export default {
data(){
return{
size:'small',
dialog: {
save: false,
show: false,
setMap:{
typeList:[]
},
list: {
apiObj: this.$API.customer.queryRecordList,
@ -36,25 +39,58 @@ export default {
searchShow:false,
searchList:[
{name:'查询时间',type:'date',code:'created_at',show: true},
{name:'查询类型',type:'select',data:[],code:'updated_at',show: true},
{name:'用户名',type:'text',code:'bom_version',placeholder:"请输入用户名",show:true},
{name:'关键字',type:'text',code:['bom_abbreviation'],keyword:true,show:true},
{name:'查询类型',type:'select',code:['type'],data:[],placeholder:"请选择类型", show: true},
{name:'查询内容',type:'text',code:'content',placeholder:"请输入内容",show:true},
{name:'用户名',type:'text',code:"creator_name",placeholder:"请输入用户名",show:true},
],
params: {},
}
},
mounted() {
this.getTypeList();
},
methods:{
async getTypeList() {
const res = await this.$API.customer.searchTypeList.post(this.params);
if (res.code == 200) {
this.setMap.typeList = res.data;
}
},
async getStatusList(data,params) {
const res = await this.$API.customer.searchTypeList.post(params);
if(res.code == 200){
if(res.data && res.data.length>0){
res.data.forEach(item=>{
item.type = item.value;
})
}
this.searchList.forEach(item=>{
if(item.code == data.code){
item.data = res.data;
}
})
}
},
getSelectData(item){
let {data,params} = item;
this.params = params;
let searchParams = this.$TOOL.objCopy(params);
searchParams.field = ""
if (typeof data.code === 'string') {
searchParams.field = data.code;
} else {
searchParams.field = data.code[0];
}
if(data.type == 'select' || data.type == 'multiple'){
if(data.code == 'type'){
this.getStatusList(data,params);
}
}
},
//
selectionChange(selection){
this.selection = selection;
},
getSelectData(item){
let {params} = item;
this.params = params;
},
upSearch(){
this.$refs.table.upData(this.params);
},

View File

@ -28,7 +28,7 @@
<el-button :size="size" type="info" icon="el-icon-RefreshRight" @click="reset">重置</el-button>
</div>
</div>
<scTable ref="table" :apiObj="list.apiObj" :column="list.column" row-key="id" stripe :size="size" @selection-change="selectionChange">
<scTable ref="table" :apiObj="list.apiObj" :column="list.column" :params="params" row-key="id" stripe :size="size" @selection-change="selectionChange">
<el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column>
<template #disable_status="scope">
@ -82,9 +82,9 @@ export default {
searchList:[
{name:'创建时间',type:'date',code:'created_at',show: true},
{name:'更新时间',type:'date',code:'updated_at',show: true},
{name:'BOM版本',type:'text',code:'bom_version',placeholder:"请输入BOM版本",show:true},
{name:'BOM版本',type:'select',code:['bom_version'],placeholder:"请输入BOM版本",show:true},
{name:'BOM简称',type:'text',code:'bom_abbreviation',placeholder:"请输入BOM简称",show:false},
{name:'BOM分类',type:'text',code:['bom_classification'],placeholder:"请输入BOM分类",isOpen:true,show:false},
{name:'BOM分类',type:'select',code:['bom_classification'],placeholder:"请输入BOM分类",isOpen:true,show:false},
{name:'BOM用途',type:'text',code:['bom_purpose'],placeholder:"请输入BOM用途",isOpen:true,show:false},
{name:'父项物料编码',type:'text',code:['parent_material_code'],placeholder:"请输入父项物料编码",isOpen:true,show:false},
{name:'父项物料名称',type:'text',code:['parent_material_name'],placeholder:"请输入父项物料名称",isOpen:true,show:false},
@ -119,9 +119,33 @@ export default {
}
})
},
getSelectData(item){
let {params} = item;
async getSelectData(item) {
let {data, params} = item;
this.params = params;
let searchParams = this.$TOOL.objCopy(params);
searchParams.field = ""
if (typeof data.code === 'string') {
searchParams.field = data.code;
} else {
searchParams.field = data.code[0];
}
if (data.type == 'select' || data.type == 'multiple') {
const res = await this.$API.setup.bom.field.post(searchParams);
if (res.code == 200) {
if (res.data && res.data.length > 0) {
res.data.forEach(item => {
item.label = item[data.code];
item.value = item.id;
item.id = item[data.code];
})
}
this.searchList.forEach(item => {
if (item.code == data.code) {
item.data = res.data;
}
})
}
}
},
//

View File

@ -1,51 +1,66 @@
<template>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="500" draggable destroy-on-close @closed="$emit('closed')">
<el-scrollbar max-height="500" style="padding: 0 20px;">
<el-form class="form" :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="100px" label-position="right">
<el-form-item label="BOM版本" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写登录账号" :disabled="mode!='add'?true:false" clearable></el-input>
<p class="el-form-item-msg" v-if="mode == 'edit'">账号信息用于登录系统不允许修改</p>
<el-form class="form" :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="110px" label-position="right">
<el-form-item label="BOM版本" prop="bom_version">
<el-input v-model="form.bom_version" placeholder="请填写BOM版本" clearable></el-input>
</el-form-item>
<el-form-item label="BOM简称" prop="password" v-if="mode == 'add'">
<el-input type="password" v-model="form.password" placeholder="请填写密码" clearable show-password></el-input>
<el-form-item label="BOM简称" prop="bom_abbreviation">
<el-input v-model="form.bom_abbreviation" placeholder="请填写BOM简称" clearable></el-input>
</el-form-item>
<el-form-item label="BOM分类" prop="company_full_name">
<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 label="BOM分类" prop="bom_classification">
<el-input v-model="form.bom_classification" placeholder="请填写BOM分类" clearable></el-input>
</el-form-item>
<el-form-item label="BOM用途" prop="mobile">
<el-input v-model="form.mobile" placeholder="请填写联系电话" clearable></el-input>
<el-form-item label="BOM用途" prop="bom_purpose">
<el-input v-model="form.bom_purpose" placeholder="请填写BOM用途" clearable></el-input>
</el-form-item>
<el-form-item label="父项物料编码" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="父项物料编码" prop="parent_material_code">
<el-input v-model="form.parent_material_code" placeholder="请填写父项物料编码" clearable></el-input>
</el-form-item>
<el-form-item label="父项物料民称" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="父项物料民称" prop="parent_material_name">
<el-input v-model="form.parent_material_name" placeholder="请填写父项物料民称" clearable></el-input>
</el-form-item>
<el-form-item label="父项物料单位" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="父项物料单位" prop="parent_material_unit">
<el-input v-model="form.parent_material_unit" placeholder="请填写父项物料单位" clearable></el-input>
</el-form-item>
<el-form-item label="子项物料编码" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="子项物料编码" prop="child_material_code">
<el-input v-model="form.child_material_code" placeholder="请填写子项物料编码" clearable></el-input>
</el-form-item>
<el-form-item label="子项物料民称" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="子项物料民称" prop="child_material_name">
<el-input v-model="form.child_material_name" placeholder="请填写子项物料民称" clearable></el-input>
</el-form-item>
<el-form-item label="子项物料单位" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="子项物料单位" prop="child_material_unit">
<el-input v-model="form.child_material_unit" placeholder="请填写子项物料单位" clearable></el-input>
</el-form-item>
<el-form-item label="次项" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="次项" prop="item_sequence">
<el-input v-model="form.item_sequence" placeholder="请填写次项" clearable></el-input>
</el-form-item>
<el-form-item label="子项类型" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="子项类型" prop="child_material_type">
<el-input v-model="form.child_material_type" placeholder="请填写子项类型" clearable></el-input>
</el-form-item>
<el-form-item label="用量分子" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="用量分子" prop="usage_numerator">
<el-input v-model="form.usage_numerator" placeholder="请填写用量分子" clearable></el-input>
</el-form-item>
<el-form-item label="用量分母" prop="email">
<el-input v-model="form.email" placeholder="请填写电子邮件" clearable></el-input>
<el-form-item label="用量分母" prop="usage_denominator">
<el-input v-model="form.usage_denominator" placeholder="请填写用量分母" clearable></el-input>
</el-form-item>
<el-form-item label="创建组织编码" prop="create_org_code">
<el-input v-model="form.create_org_code" placeholder="请填写创建组织编码" clearable></el-input>
</el-form-item>
<el-form-item label="创建组织名称" prop="create_org_name">
<el-input v-model="form.create_org_name" placeholder="请填写创建组织名称" clearable></el-input>
</el-form-item>
<el-form-item label="使用组织编码" prop="use_org_code">
<el-input v-model="form.use_org_code" placeholder="请填写使用组织编码" clearable></el-input>
</el-form-item>
<el-form-item label="使用组织名称" prop="use_org_name">
<el-input v-model="form.use_org_name" placeholder="请填写使用组织名称" clearable></el-input>
</el-form-item>
<el-form-item label="单据状态" prop="document_status">
<el-input v-model="form.document_status" placeholder="请填写单据状态" clearable></el-input>
</el-form-item>
<el-form-item label="禁用状态" prop="disable_status">
<el-input v-model="form.disable_status" placeholder="请填写禁用状态" clearable></el-input>
</el-form-item>
</el-form>
</el-scrollbar>
@ -72,92 +87,43 @@ export default {
//
form: {
id:"",
login_name: "",
name:"",
emp_id:"",
mobile:"",
email:"",
avatar: "",
password:"",
dept_id: "",
role_ids: [],
company_full_name:""
bom_version:"",
bom_abbreviation:"",
bom_classification:"",
bom_purpose:"",
parent_material_code:"",
parent_material_name:"",
parent_material_unit:"",
child_material_code:"",
child_material_name:"",
child_material_unit:"",
item_sequence:"",
child_material_type:"",
usage_numerator:"",
usage_denominator:"",
create_org_code:"",
create_org_name:"",
use_org_code:"",
use_org_name:"",
document_status:"",
disable_status:""
},
//
rules: {
avatar:[
{required: false, message: '请上传头像'}
],
login_name: [
{required: true, message: '请输入登录账号'}
],
name: [
{required: true, message: '请输入昵称'}
],
emp_id:[
{required: true, message: '请输入工号'}
],
mobile: [
{required: true, message: '请输入联系方式'}
],
email: [
{required: true, message: '请输入邮箱地址'}
],
password: [
{required: true, message: '请输入登录密码'},
{validator: (rule, value, callback) => {
if (this.form.password2 !== '') {
this.$refs.dialogForm.validateField('password2');
}
callback();
}}
],
password_cnf: [
{required: true, message: '请再次输入密码'},
{validator: (rule, value, callback) => {
if (value !== this.form.password) {
callback(new Error('两次输入密码不一致!'));
}else{
callback();
}
}}
],
dept_id: [
{required: false, message: '请选择所属分组'}
],
role_ids: [
{required: true, message: '请选择所属角色', trigger: 'change'}
]
},
companyList:[]
}
},
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;
this.visible = true;
return this
},
parentParams(item){
this.form.avatar = item;
},
//
submit(){
this.$refs.dialogForm.validate(async (valid) => {
@ -178,16 +144,6 @@ export default {
//
setData(data){
this.form.id = data.id
this.form.login_name = data.login_name
this.form.name = data.name
this.form.emp_id = data.emp_id
this.form.mobile = data.mobile
this.form.email = data.email
this.form.avatar = data.avatar
this.form.dept_id = data.dept_id
this.form.group = data.group
this.form.role_ids = data.user_roles && data.user_roles.role_ids?data.user_roles.role_ids:[]
this.form.company_full_name = data.company_info?data.company_info.full_name:''
}
}
}