Browse Source

优化

master
陈裕财 4 years ago
parent
commit
f96b1cc7e7
  1. 115
      src/api/mdp/meta/item.js
  2. 35
      src/views/xm/core/xmMenu/XmMenuMng.vue
  3. 66
      src/views/xm/core/xmMenu/XmMenuMngBatch.vue

115
src/api/mdp/meta/item.js

@ -2,17 +2,118 @@ import axios from '@/utils/request'
import config from '@/common/config'
let base=config.getSysBasePath();
let base = config.getSysBasePath();
/**
* 数据项定义
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'主键 主键',itemCode:'代码',itemName:'名称',remark:'备注',categoryId:'分类编号',itemSize:'长度',itemType:'类型',branchId:'机构编号',deptid:'部门编号'}
*2 查询新增修改的参数格式 params={id:'主键 主键',itemCode:'代码,小写,下横线分割,请不要用驼峰命名',itemName:'名称',remark:'备注',categoryId:'分类编号',itemSize:'长度',itemType:'类型',branchId:'机构编号',deptid:'部门编号',cmenu:'是否创建菜单',values:'默认值,如果是列表,则存储列表编号,多个逗号分割',names:'默认名称,如果是列表,则存储列表名称,多个则逗号分割',options:'item_type=4,5时的选项列表[{value:值,name:显示名称}]',inputFormat:'输入提示',required:'是否必须0否1是',seq:'排序顺序',table:'表名',show:'是否显示0否1是',qx:'权限,是否可以0-新增,1-删除,2-编辑,3-查询,多个以逗号分割'}
**/
//普通查询 条件之间and关系
export const listItem = params => { return axios.get(`${base}/mdp/meta/item/list`, { params: params }); };
export const getDicts = params => { return axios.get(`${base}/mdp/meta/item/dicts`, { params: params }); };
/** params={categoryId:'all',itemCodes:['sex','grade']}
{
sex: [{id:'1',name:'男'},{id:'2',name:'女'}],
grade:[{id:'1',name:'等级1'},{id:'2',name:'等级2'}]
}
**/
export const initSimpleDicts=function(categoryId,itemCodes){
if(!categoryId){
categoryId="all"
}
return new Promise((resolve, reject) => {
var keys=itemCodes
var localDicts={}
var nolocalDictsKeys=[];
var datetime=new Date().getTime();
var millSec=24*60*60*1000;//一天的毫秒数
keys.forEach(i=>{
var key=categoryId+"_@"+i;
var value= localStorage.getItem(key)
if(value!=null &&value.length>0){
var data=JSON.parse(value)
var time=data.time;
if((datetime-time)>millSec){
nolocalDictsKeys.push(i)
localStorage.removeItem(key);
}else{
localDicts[i]=data.options
}
}else{
nolocalDictsKeys.push(i)
}
})
if(nolocalDictsKeys.length==0){
var res={data:{tips:{isOk:true,msg:"成功"},data:localDicts}}
resolve(res)
}else{
getDicts({categoryId:categoryId,itemCodes:nolocalDictsKeys}).then(res=>{
if(!res.data.tips){
reject(res)
}else if(res.data.tips.isOk){
var data=res.data.data
var dicts=localDicts;
data.forEach(dict=>{
if(dict.optionList){
dict.options=JSON.parse(dict.optionList)
}else{
dict.options=[]
}
dicts[dict.itemCode]=dict.options
localStorage.setItem(categoryId+'_@'+dict.itemCode,JSON.stringify({options:dict.options,time:datetime}))
})
res.data.data=dicts;
resolve(res);
}else{
resolve(res);
}
}).catch(e=>reject(e));
}
});
};
/** params={categoryId:'all',itemCodes:['sex','grade']}
{
sex:{id:'',itemCode:'',itemName:'',itemType:'',values:'',names:'','options':[{id:'1',name:'男'},{id:'2',name:'女'}]}
grade:{id:'',itemCode:'',itemName:'',itemType:'',values:'',names:'','options':[{id:'1',name:'等级1'},{id:'2',name:'等级2'}]}
}
***/
export const initComplexDicts=function(categoryId,itemCodes){
if(!categoryId){
categoryId="all"
}
return new Promise((resolve, reject) => {
getDicts({categoryId:categoryId,itemCodes:itemCodes}).then(res=>{
if(!res.data.tips){
reject(res)
}else if(res.data.tips.isOk){
var data=res.data.data
var dicts={};
data.forEach(dict=>{
if(dict.optionList){
dict.options=JSON.parse(dict.optionList)
}else{
dict.options=[]
}
dicts[dict.itemCode]=dict
})
res.data.data=dicts;
resolve(res);
}else{
resolve(res);
}
}).catch(e=>reject(e));
});
};
//模糊查询数据项定义 条件之间or关系
//export const listItemKey = params => { return axios.get(`${base}/mdp/meta/item/listKey`, { params: params }); };
@ -26,4 +127,12 @@ export const batchDelItem = params => { return axios.post(`${base}/mdp/meta/item
export const editItem = params => { return axios.post(`${base}/mdp/meta/item/edit`, params); };
//新增一条数据项定义
export const addItem = params => { return axios.post(`${base}/mdp/meta/item/add`, params); };
export const addItem = params => { return axios.post(`${base}/mdp/meta/item/add`, params); };
//新增一条数据项定义
export const copyToNewCategory = params => { return axios.post(`${base}/mdp/meta/item/copyToNewCategory`, params); };
//新增或者修改
export const insertOrUpdateItem = params => { return axios.post(`${base}/mdp/meta/item/insertOrUpdate`, params); };

35
src/views/xm/core/xmMenu/XmMenuMng.vue

@ -5,16 +5,16 @@
<el-row>
<el-select v-model="filters.dtype" clearable placeholder="需求类型">
<el-option v-for="i in this.options.demandType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
<el-option v-for="i in this.dicts.demandType" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
<el-select v-model="filters.source" placeholder="需求来源" clearable>
<el-option v-for="i in this.options.demandSource" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
<el-option v-for="i in this.dicts.demandSource" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
<el-select v-model="filters.dlvl" placeholder="需求层次" clearable class="hidden-md-and-down">
<el-option v-for="i in this.options.demandLvl" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
<el-option v-for="i in this.dicts.demandLvl" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
<el-select v-model="filters.priority" placeholder="优先级" clearable>
<el-option v-for="i in options.priority" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
<el-option v-for="i in dicts.priority" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
<el-select v-model="filters.taskFilterType" placeholder="已关联任务的需求?" clearable style="width: 160px;">
<el-option value="not-join-any-project" label="未关联任务"></el-option>
@ -106,7 +106,7 @@
需求层次:
</font>
<el-select v-model="filters.dlvl" placeholder="需求层次" clearable>
<el-option v-for="i in this.options.demandLvl" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
<el-option v-for="i in this.dicts.demandLvl" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</el-col>
<el-col :span="24" style="padding-top:5px;">
@ -250,7 +250,7 @@
</el-row>
<el-row v-if="batchEditVisible">
<xm-menu-mng-batch :xm-menus="xmMenus" @no-batch-edit="noBatchEdit" :product="filters.product"></xm-menu-mng-batch>
<xm-menu-mng-batch :xm-menus="xmMenus" :options="options" @no-batch-edit="noBatchEdit" :product="filters.product"></xm-menu-mng-batch>
</el-row>
<el-pagination layout="total, sizes, prev, pager, next" @current-change="handleCurrentChange" @size-change="handleSizeChange" :page-sizes="[10,20, 50, 100, 500]" :current-page="pageInfo.pageNum" :page-size="pageInfo.pageSize" :total="pageInfo.total" style="float:right;"></el-pagination>
@ -281,7 +281,7 @@
import util from '@/common/js/util';//
import treeTool from '@/common/js/treeTool';//
//import Sticky from '@/components/Sticky' // header
import { listOption } from '@/api/mdp/meta/itemOption';//
import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { listXmMenu, delXmMenu, batchDelXmMenu,batchAddXmMenu,batchEditXmMenu,listXmMenuWithState,listXmMenuWithPlan,batchChangeParentMenu } from '@/api/xm/core/xmMenu';
import { batchRelTasksWithMenu } from '@/api/xm/core/xmTask';
import { loadTasksToXmMenuState} from '@/api/xm/core/xmMenuState';
@ -357,7 +357,21 @@
parentMenuList:[],
status:'',
},
options:{},
options:{
menuStatus:[
{id:"0", name:"初始"},
{id:"1", name:"待评审"},
{id:"2", name:"待设计"},
{id:"3", name:"待开发"},
{id:"4", name:"待SIT"},
{id:"5", name:"待UAT"},
{id:"6", name:"待上线"},
{id:"7", name:"运行中"},
{id:"8", name:"已下线"},
{id:"9", name:"已删除"},
]
},
xmMenus: [],//
pageInfo:{//
total:0,//0>0
@ -957,9 +971,8 @@
//
},
mounted() {
listOption([{categoryId:'all',itemCode:'demandSource'},{categoryId:'all',itemCode:'demandLvl'},{categoryId:'all',itemCode:'demandType'},{categoryId:'all',itemCode:'priority'}]).then(res=>{
this.options=res.data.data;
initSimpleDicts("all",['menuStatus','demandSource','demandLvl','demandType','priority']).then(res=>{
this.dicts=res.data.data;
})
this.filters.product=this.xmProduct
if(this.xmProduct && this.xmProduct.id){

66
src/views/xm/core/xmMenu/XmMenuMngBatch.vue

@ -19,12 +19,37 @@
<el-input v-model="scope.row.menuName" @change="fieldChange(scope.row,'menuName')"></el-input>
</template>
</el-table-column>
<el-table-column prop="mmUsername" label="负责人" min-width="100" >
<el-table-column prop="mmUsername" label="跟进人" min-width="100" >
<template slot="header">
<el-button type="text" icon="el-icon-user" title="批量修改跟进人" @click="showBatchMmUserSelectVisible">批量修改</el-button>
</template>
<template slot-scope="scope">
<el-tag v-if="scope.row.mmUserid" @click="selectUser(scope.row)" closable @close="clearPmUser(scope.row)">{{scope.row.mmUsername}}</el-tag>
<el-button v-else type="text" @click="selectUser(scope.row)">选人</el-button>
</template>
</el-table-column>
<el-table-column label="需求属性" width="500" >
<template slot-scope="scope">
<el-select v-model="scope.row.dtype" clearable placeholder="需求类型">
<el-option v-for="i in options.demandType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
<el-select v-model="scope.row.source" placeholder="需求来源" clearable>
<el-option v-for="i in options.demandSource" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
<el-select v-model="scope.row.dlvl" placeholder="需求层次" clearable class="hidden-md-and-down">
<el-option v-for="i in options.demandLvl" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
<el-select v-model="scope.row.priority" placeholder="优先级" clearable>
<el-option v-for="i in options.priority" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="remark" label="描述" min-width="140" show-overflow-tooltip>
<template slot-scope="scope">
@ -36,7 +61,11 @@
</el-row>
<el-drawer title="选择员工" :visible.sync="userSelectVisible" size="60%" append-to-body>
<users-select @confirm="onUserSelected" ref="usersSelect"></users-select>
</el-drawer>
</el-drawer>
<el-drawer title="选择员工" :visible.sync="batchMmUserSelectVisible" size="60%" append-to-body>
<users-select @confirm="onBatchMmUserSelectConfirm" ref="batchMmUserSelect"></users-select>
</el-drawer>
</el-row>
</section>
</template>
@ -44,7 +73,7 @@
<script>
import util from '@/common/js/util';//
import treeTool from '@/common/js/treeTool';//
//import { listOption } from '@/api/mdp/meta/itemOption';//
import { listOption } from '@/api/mdp/meta/itemOption';//
import { batchEditXmMenu,listXmMenuWithState } from '@/api/xm/core/xmMenu';
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
@ -52,7 +81,7 @@
import { mapGetters } from 'vuex'
export default {
props:['product','xmMenus'],
props:['product','xmMenus','options'],
computed: {
...mapGetters([
'userInfo','roles'
@ -78,7 +107,7 @@
},
load:{ list: false, edit: false, del: false, add: false },//...
sels: [],//
options:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
options2:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
//xmMenu
addForm: {
@ -91,6 +120,7 @@
},
valueChangeRows:[],
userSelectVisible:false,
batchMmUserSelectVisible:false,
maxTableHeight:300,
pickerOptions: util.pickerOptions('datarange'),
@ -125,8 +155,7 @@
batchEditXmMenu(this.valueChangeRows).then(res=>{
var tips=res.data.tips;
if(tips.isOk){
this.valueChangeRows=[]
this.getXmMenus()
this.valueChangeRows=[]
}
this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error'});
});
@ -200,11 +229,34 @@
}).catch( err => this.load.list = false );
},
//
showBatchMmUserSelectVisible() {
if(!this.sels||this.sels.length==0){
this.$notify({showClose:true,message:'请先选中一条或多条数据',type:'error'})
return;
}else{
this.batchMmUserSelectVisible=true;
}
},
//
onBatchMmUserSelectConfirm(users) {
var user={};
if (users && users.length > 0) {
user=users[0]
}
this.batchMmUserSelectVisible=false;
this.sels.forEach(i=>{
i.mmUserid=user.userid;
i.mmUsername=user.username;
this.fieldChange(i,"mmUserid")
})
},
},//end methods
components: {
UsersSelect,
},
mounted() {
this.$nextTick(() => {
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.table.$el);
});

Loading…
Cancel
Save