提交 babfc16f 编写于 作者: ibizdev's avatar ibizdev

lab_qyk 发布系统代码

上级 91ef056f
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
"@fullcalendar/list": "^4.4.0", "@fullcalendar/list": "^4.4.0",
"@fullcalendar/timegrid": "^4.4.0", "@fullcalendar/timegrid": "^4.4.0",
"@fullcalendar/vue": "^4.4.0", "@fullcalendar/vue": "^4.4.0",
"vuedraggable": "^2.23.2",
"async-validator": "^3.3.0",
"axios": "^0.19.1", "axios": "^0.19.1",
"core-js": "^3.4.4", "core-js": "^3.4.4",
"echarts": "^4.6.0", "echarts": "^4.6.0",
......
...@@ -47,6 +47,22 @@ export default class IBizGroupPicker extends Vue { ...@@ -47,6 +47,22 @@ export default class IBizGroupPicker extends Vue {
*/ */
protected multiple: boolean = false; protected multiple: boolean = false;
/**
* 加载树url
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected treeurl:any;
/**
* 加载人员url
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected url:any;
/** /**
* 树数据集 * 树数据集
* *
...@@ -110,10 +126,9 @@ export default class IBizGroupPicker extends Vue { ...@@ -110,10 +126,9 @@ export default class IBizGroupPicker extends Vue {
* @memberof IBizGroupPicker * @memberof IBizGroupPicker
*/ */
get showTree() { get showTree() {
if(this.viewParam.hasfilter && Object.is(this.viewData.srforgid, this.viewParam.filtervalue)) { if(this.viewParam) {
return false; return this.viewParam.showtree;
} }
return true;
} }
/** /**
...@@ -129,6 +144,8 @@ export default class IBizGroupPicker extends Vue { ...@@ -129,6 +144,8 @@ export default class IBizGroupPicker extends Vue {
this.viewData = JSON.parse(this.viewdata); this.viewData = JSON.parse(this.viewdata);
this.viewParam = JSON.parse(this.viewparam); this.viewParam = JSON.parse(this.viewparam);
this.multiple = this.viewParam.multiple; this.multiple = this.viewParam.multiple;
this.treeurl = this.viewParam.treeurl;
this.url = this.viewParam.url;
if (this.viewParam.selects) { if (this.viewParam.selects) {
this.viewParam.selects.forEach((select: any) => { this.viewParam.selects.forEach((select: any) => {
this.selects.push(select); this.selects.push(select);
...@@ -159,8 +176,9 @@ export default class IBizGroupPicker extends Vue { ...@@ -159,8 +176,9 @@ export default class IBizGroupPicker extends Vue {
* @memberof IBizGroupPicker * @memberof IBizGroupPicker
*/ */
public loadTree() { public loadTree() {
let orgid = this.viewParam.filtervalue?this.viewParam.filtervalue:"alls"; let orgid = this.viewParam.filtervalue;
let get = Http.getInstance().get(`/ibzorganizations/${orgid}/suborg/ibzdepartments/picker`, true); let tempTreeUrl:string = this.treeurl.replace('${orgid}',orgid);
let get = Http.getInstance().get(tempTreeUrl, true);
get.then((response: any) => { get.then((response: any) => {
if(response.status === 200) { if(response.status === 200) {
this.treeItems = response.data; this.treeItems = response.data;
...@@ -177,7 +195,8 @@ export default class IBizGroupPicker extends Vue { ...@@ -177,7 +195,8 @@ export default class IBizGroupPicker extends Vue {
* @memberof IBizGroupPicker * @memberof IBizGroupPicker
*/ */
public loadGroupData(key: string) { public loadGroupData(key: string) {
let get = Http.getInstance().get(`/ibzorganizations/${key}/ibzemployees/picker`, true); let tempUrl = this.url.replace('${selected-orgid}',key);
let get = Http.getInstance().get(tempUrl, true);
get.then((response: any) => { get.then((response: any) => {
if(response.status === 200) { if(response.status === 200) {
this.cardItems = response.data; this.cardItems = response.data;
......
...@@ -32,13 +32,21 @@ export default class IBizGroupSelect extends Vue { ...@@ -32,13 +32,21 @@ export default class IBizGroupSelect extends Vue {
*/ */
@Prop() name!: string; @Prop() name!: string;
/**
* 树加载地址
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() treeurl?:boolean;
/** /**
* 数据接口地址 * 数据接口地址
* *
* @type {*} * @type {*}
* @memberof IBizGroupSelect * @memberof IBizGroupSelect
*/ */
@Prop() url?: string; @Prop() url!: string;
/** /**
* 多选 * 多选
...@@ -175,10 +183,14 @@ export default class IBizGroupSelect extends Vue { ...@@ -175,10 +183,14 @@ export default class IBizGroupSelect extends Vue {
}else{ }else{
filtervalue = context.srforgid; filtervalue = context.srforgid;
} }
}else{
filtervalue = context.srforgid;
} }
const param: any = {}; const param: any = {};
Object.assign(param, { Object.assign(param, {
hasfilter: this.filter ? true : false, showtree: this.treeurl?true:false,
url:this.url,
treeurl:this.treeurl,
filtervalue: filtervalue, filtervalue: filtervalue,
multiple: this.multiple, multiple: this.multiple,
selects: this.selects selects: this.selects
...@@ -199,7 +211,6 @@ export default class IBizGroupSelect extends Vue { ...@@ -199,7 +211,6 @@ export default class IBizGroupSelect extends Vue {
* @memberof IBizGroupSelect * @memberof IBizGroupSelect
*/ */
public openViewClose(result: any) { public openViewClose(result: any) {
console.log(result)
this.selects = []; this.selects = [];
if (result.datas && result.datas.length > 0) { if (result.datas && result.datas.length > 0) {
this.selects = result.datas this.selects = result.datas
......
...@@ -138,6 +138,17 @@ export declare interface Util { ...@@ -138,6 +138,17 @@ export declare interface Util {
* @memberof Util * @memberof Util
*/ */
dateFormat(date: any,fmt?: string):string dateFormat(date: any,fmt?: string):string
/**
* 表单项校验
*
* @param property 表单项属性名
* @param data 表单数据
* @param rules 表单值规则
* @returns {Promise}
* @memberof Util
*/
validateItem(property: string, data:any, rules:any): Promise<any>
} }
declare module "vue/types/vue" { declare module "vue/types/vue" {
......
import qs from 'qs'; import qs from 'qs';
import { Route } from 'vue-router'; import { Route } from 'vue-router';
import Schema from "async-validator";
/** /**
* 平台工具类 * 平台工具类
...@@ -362,4 +363,23 @@ export class Util { ...@@ -362,4 +363,23 @@ export class Util {
return FirstOBJ; return FirstOBJ;
} }
/**
* 表单项校验
*
* @param property 表单项属性名
* @param data 表单数据
* @param rules 表单值规则
* @returns {Promise}
* @memberof Util
*/
public static validateItem(property: string, data:any, rules:any) {
// 1.获取数值和规则
const value = data[property];
const rule = rules[property];
// 2.创建校验规则
const schema = new Schema({ [property]: rule })
// 校验返回Promise
return schema.validate({ [property]: value })
}
} }
\ No newline at end of file
...@@ -49,8 +49,9 @@ ...@@ -49,8 +49,9 @@
<app-form-item name='leadername' :itemRules="this.rules.leadername" class='' :caption="$t('entities.ibzdepartment.main_form.details.leadername')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.leadername.error" :isEmptyCaption="false" labelPos="LEFT"> <app-form-item name='leadername' :itemRules="this.rules.leadername" class='' :caption="$t('entities.ibzdepartment.main_form.details.leadername')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.leadername.error" :isEmptyCaption="false" labelPos="LEFT">
<ibiz-group-select <ibiz-group-select
name="leadername" name="leadername"
:showtree="true" :value='data.leadername'
url="/ibzorganizations/${orgid}/ibzemployees/picker" valueitem="leaderid"
url="/ibzorganizations/${selected-orgid}/ibzemployees/picker"
treeurl="/ibzorganizations/${orgid}/suborg/picker" treeurl="/ibzorganizations/${orgid}/suborg/picker"
:multiple="true" :multiple="true"
filter="srforgid" filter="srforgid"
......
<template> <template>
<div class='grid' style="height:100%;"> <div class='grid' style="height:100%;">
<el-table v-if="isDisplay === true" <i-form>
<el-table v-if="isDisplay === true"
:default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }" :default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }"
@sort-change="onSortChange($event)" @sort-change="onSortChange($event)"
:border="isDragendCol" :border="isDragendCol"
...@@ -28,7 +29,7 @@ ...@@ -28,7 +29,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.deptid')}} {{$t('entities.ibzdepartment.main_grid.columns.deptid')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.deptid}}</span> <span>{{row.deptid}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -40,7 +41,7 @@ ...@@ -40,7 +41,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.deptcode')}} {{$t('entities.ibzdepartment.main_grid.columns.deptcode')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.deptcode}}</span> <span>{{row.deptcode}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -52,7 +53,7 @@ ...@@ -52,7 +53,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.deptname')}} {{$t('entities.ibzdepartment.main_grid.columns.deptname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.deptname}}</span> <span>{{row.deptname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -64,7 +65,7 @@ ...@@ -64,7 +65,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.shortname')}} {{$t('entities.ibzdepartment.main_grid.columns.shortname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.shortname}}</span> <span>{{row.shortname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -76,7 +77,7 @@ ...@@ -76,7 +77,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.deptlevel')}} {{$t('entities.ibzdepartment.main_grid.columns.deptlevel')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.deptlevel}}</span> <span>{{row.deptlevel}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -88,7 +89,7 @@ ...@@ -88,7 +89,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.bcode')}} {{$t('entities.ibzdepartment.main_grid.columns.bcode')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.bcode}}</span> <span>{{row.bcode}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -100,7 +101,7 @@ ...@@ -100,7 +101,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.showorder')}} {{$t('entities.ibzdepartment.main_grid.columns.showorder')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.showorder}}</span> <span>{{row.showorder}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -112,7 +113,7 @@ ...@@ -112,7 +113,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.createdate')}} {{$t('entities.ibzdepartment.main_grid.columns.createdate')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<app-format-data format="YYYY-MM-DD hh:mm:ss" :data="row.createdate"></app-format-data> <app-format-data format="YYYY-MM-DD hh:mm:ss" :data="row.createdate"></app-format-data>
</template> </template>
</el-table-column> </el-table-column>
...@@ -124,7 +125,7 @@ ...@@ -124,7 +125,7 @@
{{$t('entities.ibzdepartment.main_grid.columns.updatedate')}} {{$t('entities.ibzdepartment.main_grid.columns.updatedate')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<app-format-data format="YYYY-MM-DD hh:mm:ss" :data="row.updatedate"></app-format-data> <app-format-data format="YYYY-MM-DD hh:mm:ss" :data="row.updatedate"></app-format-data>
</template> </template>
</el-table-column> </el-table-column>
...@@ -133,6 +134,7 @@ ...@@ -133,6 +134,7 @@
<el-table-column></el-table-column> <el-table-column></el-table-column>
</template> </template>
</el-table> </el-table>
</i-form>
<row class='grid-pagination' v-show="items.length > 0"> <row class='grid-pagination' v-show="items.length > 0">
<page class='pull-right' @on-change="pageOnChange($event)" <page class='pull-right' @on-change="pageOnChange($event)"
@on-page-size-change="onPageSizeChange($event)" @on-page-size-change="onPageSizeChange($event)"
...@@ -180,6 +182,7 @@ import IBZDepartmentService from '@/service/ibzdepartment/ibzdepartment-service' ...@@ -180,6 +182,7 @@ import IBZDepartmentService from '@/service/ibzdepartment/ibzdepartment-service'
import MainService from './main-grid-service'; import MainService from './main-grid-service';
import CodeListService from "@service/app/codelist-service"; import CodeListService from "@service/app/codelist-service";
import { FormItemModel } from '@/model/form-detail';
@Component({ @Component({
...@@ -669,6 +672,26 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -669,6 +672,26 @@ export default class MainBase extends Vue implements ControlInterface {
}, },
] ]
/**
* 表格模型集合
*
* @type {*}
* @memberof Main
*/
public gridItemsModel: any[] = [];
/**
* 获取表格行模型
*
* @type {*}
* @memberof Main
*/
public getGridRowModel(){
return {
srfkey: new FormItemModel(),
}
}
/** /**
* 属性值规则 * 属性值规则
* *
...@@ -682,6 +705,23 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -682,6 +705,23 @@ export default class MainBase extends Vue implements ControlInterface {
], ],
} }
/**
* 表格行编辑项校验
*
* @param {string} property 属性名
* @param {*} data 行数据
* @param {number} rowIndex 行索引
*
* @memberof Main
*/
public validtor(property:string, data:any, rowIndex:number){
this.$util.validateItem(property,data,this.rules).then(()=>{
this.gridItemsModel[rowIndex][property].setError(null);
}).catch(({ errors, fields }) => {
this.gridItemsModel[rowIndex][property].setError(errors[0].message);
});
}
/** /**
* 表格数据加载 * 表格数据加载
* *
...@@ -724,8 +764,10 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -724,8 +764,10 @@ export default class MainBase extends Vue implements ControlInterface {
const data: any = response.data; const data: any = response.data;
this.totalrow = response.total; this.totalrow = response.total;
this.items = JSON.parse(JSON.stringify(data)); this.items = JSON.parse(JSON.stringify(data));
// 清空selections // 清空selections,gridItemsModel
this.selections = []; this.selections = [];
this.gridItemsModel = [];
this.items.forEach(()=>{this.gridItemsModel.push(this.getGridRowModel())});
this.$emit('load', this.items); this.$emit('load', this.items);
// 设置默认选中 // 设置默认选中
let _this = this; let _this = this;
...@@ -774,6 +816,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -774,6 +816,7 @@ export default class MainBase extends Vue implements ControlInterface {
this.items.some((val: any, num: number) =>{ this.items.some((val: any, num: number) =>{
if(JSON.stringify(val) == JSON.stringify(record)){ if(JSON.stringify(val) == JSON.stringify(record)){
this.items.splice(num,1); this.items.splice(num,1);
this.gridItemsModel.splice(num,1);
return true; return true;
} }
}); });
...@@ -823,9 +866,10 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -823,9 +866,10 @@ export default class MainBase extends Vue implements ControlInterface {
//删除items中已删除的项 //删除items中已删除的项
console.log(this.items); console.log(this.items);
_datas.forEach((data: any) => { _datas.forEach((data: any) => {
this.items.some((item:any,index:number)=>{ this.items.some((item:any,index:number)=>{
if(Object.is(item.srfkey,data.srfkey)){ if(Object.is(item.srfkey,data.srfkey)){
this.items.splice(index,1); this.items.splice(index,1);
this.gridItemsModel.splice(index,1);
return true; return true;
} }
}); });
......
<template> <template>
<div class='grid' style="height:100%;"> <div class='grid' style="height:100%;">
<el-table v-if="isDisplay === true" <i-form>
<el-table v-if="isDisplay === true"
:default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }" :default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }"
@sort-change="onSortChange($event)" @sort-change="onSortChange($event)"
:border="isDragendCol" :border="isDragendCol"
...@@ -28,13 +29,11 @@ ...@@ -28,13 +29,11 @@
{{$t('entities.ibzdeptmember.main_grid.columns.deptname')}} {{$t('entities.ibzdeptmember.main_grid.columns.deptname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<template v-if="actualIsOpenEdit"> <template v-if="actualIsOpenEdit">
<i-form style="height:100%;" :model="row"> <app-form-item :error="gridItemsModel[$index][column.property].error">
<app-form-item :name="column.property" :itemRules="rules[column.property]"> <dropdown-list v-model="row[column.property]" :disabled="row.srfuf === 1 ? (3 & 2) !== 2 : (3 & 1) !== 1" placeholder='请选择...' style="" @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></dropdown-list>
<dropdown-list v-model="row[column.property]" :disabled="row.srfuf === 1 ? (3 & 2) !== 2 : (3 & 1) !== 1" placeholder='请选择...' style="" @change="($event)=>{gridEditItemChange(row, column.property, $event)}"></dropdown-list> </app-form-item>
</app-form-item>
</i-form>
</template> </template>
<template v-if="!actualIsOpenEdit"> <template v-if="!actualIsOpenEdit">
<app-span name='deptname' editorType="DROPDOWNLIST" :value="row.deptname"></app-span> <app-span name='deptname' editorType="DROPDOWNLIST" :value="row.deptname"></app-span>
...@@ -49,7 +48,7 @@ ...@@ -49,7 +48,7 @@
{{$t('entities.ibzdeptmember.main_grid.columns.personname')}} {{$t('entities.ibzdeptmember.main_grid.columns.personname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.personname}}</span> <span>{{row.personname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -61,21 +60,19 @@ ...@@ -61,21 +60,19 @@
{{$t('entities.ibzdeptmember.main_grid.columns.deptid')}} {{$t('entities.ibzdeptmember.main_grid.columns.deptid')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<template v-if="actualIsOpenEdit"> <template v-if="actualIsOpenEdit">
<i-form style="height:100%;" :model="row"> <app-form-item :error="gridItemsModel[$index][column.property].error">
<app-form-item :name="column.property" :itemRules="rules[column.property]"> <input-box
<input-box
:disabled="row.srfuf === 1 ? (3 & 2) !== 2 : (3 & 1) !== 1" :disabled="row.srfuf === 1 ? (3 & 2) !== 2 : (3 & 1) !== 1"
v-model="row[column.property]" v-model="row[column.property]"
style="" style=""
type="text" type="text"
@change="($event)=>{gridEditItemChange(row, column.property, $event)}"> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}">
</input-box> </input-box>
</app-form-item> </app-form-item>
</i-form>
</template> </template>
<template v-if="!actualIsOpenEdit"> <template v-if="!actualIsOpenEdit">
<app-span name='deptid' editorType="HIDDEN" :value="row.deptid"></app-span> <app-span name='deptid' editorType="HIDDEN" :value="row.deptid"></app-span>
...@@ -87,6 +84,7 @@ ...@@ -87,6 +84,7 @@
<el-table-column></el-table-column> <el-table-column></el-table-column>
</template> </template>
</el-table> </el-table>
</i-form>
<row class='grid-pagination' v-show="items.length > 0"> <row class='grid-pagination' v-show="items.length > 0">
<page class='pull-right' @on-change="pageOnChange($event)" <page class='pull-right' @on-change="pageOnChange($event)"
@on-page-size-change="onPageSizeChange($event)" @on-page-size-change="onPageSizeChange($event)"
...@@ -134,6 +132,7 @@ import IBZDeptMemberService from '@/service/ibzdept-member/ibzdept-member-servic ...@@ -134,6 +132,7 @@ import IBZDeptMemberService from '@/service/ibzdept-member/ibzdept-member-servic
import MainService from './main-grid-service'; import MainService from './main-grid-service';
import CodeListService from "@service/app/codelist-service"; import CodeListService from "@service/app/codelist-service";
import { FormItemModel } from '@/model/form-detail';
@Component({ @Component({
...@@ -581,6 +580,28 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -581,6 +580,28 @@ export default class MainBase extends Vue implements ControlInterface {
}, },
] ]
/**
* 表格模型集合
*
* @type {*}
* @memberof Main
*/
public gridItemsModel: any[] = [];
/**
* 获取表格行模型
*
* @type {*}
* @memberof Main
*/
public getGridRowModel(){
return {
deptid: new FormItemModel(),
deptname: new FormItemModel(),
srfkey: new FormItemModel(),
}
}
/** /**
* 属性值规则 * 属性值规则
* *
...@@ -602,6 +623,23 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -602,6 +623,23 @@ export default class MainBase extends Vue implements ControlInterface {
], ],
} }
/**
* 表格行编辑项校验
*
* @param {string} property 属性名
* @param {*} data 行数据
* @param {number} rowIndex 行索引
*
* @memberof Main
*/
public validtor(property:string, data:any, rowIndex:number){
this.$util.validateItem(property,data,this.rules).then(()=>{
this.gridItemsModel[rowIndex][property].setError(null);
}).catch(({ errors, fields }) => {
this.gridItemsModel[rowIndex][property].setError(errors[0].message);
});
}
/** /**
* 表格数据加载 * 表格数据加载
* *
...@@ -644,8 +682,10 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -644,8 +682,10 @@ export default class MainBase extends Vue implements ControlInterface {
const data: any = response.data; const data: any = response.data;
this.totalrow = response.total; this.totalrow = response.total;
this.items = JSON.parse(JSON.stringify(data)); this.items = JSON.parse(JSON.stringify(data));
// 清空selections // 清空selections,gridItemsModel
this.selections = []; this.selections = [];
this.gridItemsModel = [];
this.items.forEach(()=>{this.gridItemsModel.push(this.getGridRowModel())});
this.$emit('load', this.items); this.$emit('load', this.items);
// 设置默认选中 // 设置默认选中
let _this = this; let _this = this;
...@@ -694,6 +734,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -694,6 +734,7 @@ export default class MainBase extends Vue implements ControlInterface {
this.items.some((val: any, num: number) =>{ this.items.some((val: any, num: number) =>{
if(JSON.stringify(val) == JSON.stringify(record)){ if(JSON.stringify(val) == JSON.stringify(record)){
this.items.splice(num,1); this.items.splice(num,1);
this.gridItemsModel.splice(num,1);
return true; return true;
} }
}); });
...@@ -743,9 +784,10 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -743,9 +784,10 @@ export default class MainBase extends Vue implements ControlInterface {
//删除items中已删除的项 //删除items中已删除的项
console.log(this.items); console.log(this.items);
_datas.forEach((data: any) => { _datas.forEach((data: any) => {
this.items.some((item:any,index:number)=>{ this.items.some((item:any,index:number)=>{
if(Object.is(item.srfkey,data.srfkey)){ if(Object.is(item.srfkey,data.srfkey)){
this.items.splice(index,1); this.items.splice(index,1);
this.gridItemsModel.splice(index,1);
return true; return true;
} }
}); });
...@@ -1370,6 +1412,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1370,6 +1412,7 @@ export default class MainBase extends Vue implements ControlInterface {
const data = response.data; const data = response.data;
data.rowDataState = "create"; data.rowDataState = "create";
_this.items.push(data); _this.items.push(data);
_this.gridItemsModel.push(_this.getGridRowModel());
}).catch((response: any) => { }).catch((response: any) => {
if (response && response.status === 401) { if (response && response.status === 401) {
return; return;
...@@ -1389,7 +1432,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1389,7 +1432,7 @@ export default class MainBase extends Vue implements ControlInterface {
* @returns {void} * @returns {void}
* @memberof Main * @memberof Main
*/ */
public onGridItemValueChange(row: any,$event: { name: string, value: any }): void { public onGridItemValueChange(row: any,$event: { name: string, value: any },rowIndex: number): void {
if (!$event) { if (!$event) {
return; return;
} }
...@@ -1410,8 +1453,9 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1410,8 +1453,9 @@ export default class MainBase extends Vue implements ControlInterface {
* @returns {void} * @returns {void}
* @memberof Main * @memberof Main
*/ */
public gridEditItemChange(row: any, property: string, value: any){ public gridEditItemChange(row: any, property: string, value: any, rowIndex: number){
row.rowDataState = row.rowDataState ? row.rowDataState : "update" ; row.rowDataState = row.rowDataState ? row.rowDataState : "update" ;
this.validtor(property,row,rowIndex);
} }
/** /**
......
<template> <template>
<div class='grid' style="height:100%;"> <div class='grid' style="height:100%;">
<el-table v-if="isDisplay === true" <i-form>
<el-table v-if="isDisplay === true"
:default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }" :default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }"
@sort-change="onSortChange($event)" @sort-change="onSortChange($event)"
:border="isDragendCol" :border="isDragendCol"
...@@ -28,7 +29,7 @@ ...@@ -28,7 +29,7 @@
{{$t('entities.ibzemployee.main_grid.columns.usercode')}} {{$t('entities.ibzemployee.main_grid.columns.usercode')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.usercode}}</span> <span>{{row.usercode}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -40,7 +41,7 @@ ...@@ -40,7 +41,7 @@
{{$t('entities.ibzemployee.main_grid.columns.personname')}} {{$t('entities.ibzemployee.main_grid.columns.personname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.personname}}</span> <span>{{row.personname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -52,7 +53,7 @@ ...@@ -52,7 +53,7 @@
{{$t('entities.ibzemployee.main_grid.columns.loginname')}} {{$t('entities.ibzemployee.main_grid.columns.loginname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.loginname}}</span> <span>{{row.loginname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -64,7 +65,7 @@ ...@@ -64,7 +65,7 @@
{{$t('entities.ibzemployee.main_grid.columns.orgcode')}} {{$t('entities.ibzemployee.main_grid.columns.orgcode')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.orgcode}}</span> <span>{{row.orgcode}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -76,7 +77,7 @@ ...@@ -76,7 +77,7 @@
{{$t('entities.ibzemployee.main_grid.columns.orgname')}} {{$t('entities.ibzemployee.main_grid.columns.orgname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.orgname}}</span> <span>{{row.orgname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -88,7 +89,7 @@ ...@@ -88,7 +89,7 @@
{{$t('entities.ibzemployee.main_grid.columns.mdeptcode')}} {{$t('entities.ibzemployee.main_grid.columns.mdeptcode')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.mdeptcode}}</span> <span>{{row.mdeptcode}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -100,7 +101,7 @@ ...@@ -100,7 +101,7 @@
{{$t('entities.ibzemployee.main_grid.columns.mdeptname')}} {{$t('entities.ibzemployee.main_grid.columns.mdeptname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.mdeptname}}</span> <span>{{row.mdeptname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -112,7 +113,7 @@ ...@@ -112,7 +113,7 @@
{{$t('entities.ibzemployee.main_grid.columns.sex')}} {{$t('entities.ibzemployee.main_grid.columns.sex')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<template > <template >
<codelist :value="row.sex" tag='CLIBZSex' codelistType='STATIC' ></codelist> <codelist :value="row.sex" tag='CLIBZSex' codelistType='STATIC' ></codelist>
</template> </template>
...@@ -126,7 +127,7 @@ ...@@ -126,7 +127,7 @@
{{$t('entities.ibzemployee.main_grid.columns.phone')}} {{$t('entities.ibzemployee.main_grid.columns.phone')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.phone}}</span> <span>{{row.phone}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -138,7 +139,7 @@ ...@@ -138,7 +139,7 @@
{{$t('entities.ibzemployee.main_grid.columns.ipaddr')}} {{$t('entities.ibzemployee.main_grid.columns.ipaddr')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.ipaddr}}</span> <span>{{row.ipaddr}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -150,7 +151,7 @@ ...@@ -150,7 +151,7 @@
{{$t('entities.ibzemployee.main_grid.columns.showorder')}} {{$t('entities.ibzemployee.main_grid.columns.showorder')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.showorder}}</span> <span>{{row.showorder}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -159,6 +160,7 @@ ...@@ -159,6 +160,7 @@
<el-table-column></el-table-column> <el-table-column></el-table-column>
</template> </template>
</el-table> </el-table>
</i-form>
<row class='grid-pagination' v-show="items.length > 0"> <row class='grid-pagination' v-show="items.length > 0">
<page class='pull-right' @on-change="pageOnChange($event)" <page class='pull-right' @on-change="pageOnChange($event)"
@on-page-size-change="onPageSizeChange($event)" @on-page-size-change="onPageSizeChange($event)"
...@@ -206,6 +208,7 @@ import IBZEmployeeService from '@/service/ibzemployee/ibzemployee-service'; ...@@ -206,6 +208,7 @@ import IBZEmployeeService from '@/service/ibzemployee/ibzemployee-service';
import MainService from './main-grid-service'; import MainService from './main-grid-service';
import CodeListService from "@service/app/codelist-service"; import CodeListService from "@service/app/codelist-service";
import { FormItemModel } from '@/model/form-detail';
@Component({ @Component({
...@@ -695,6 +698,26 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -695,6 +698,26 @@ export default class MainBase extends Vue implements ControlInterface {
}, },
] ]
/**
* 表格模型集合
*
* @type {*}
* @memberof Main
*/
public gridItemsModel: any[] = [];
/**
* 获取表格行模型
*
* @type {*}
* @memberof Main
*/
public getGridRowModel(){
return {
srfkey: new FormItemModel(),
}
}
/** /**
* 属性值规则 * 属性值规则
* *
...@@ -708,6 +731,23 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -708,6 +731,23 @@ export default class MainBase extends Vue implements ControlInterface {
], ],
} }
/**
* 表格行编辑项校验
*
* @param {string} property 属性名
* @param {*} data 行数据
* @param {number} rowIndex 行索引
*
* @memberof Main
*/
public validtor(property:string, data:any, rowIndex:number){
this.$util.validateItem(property,data,this.rules).then(()=>{
this.gridItemsModel[rowIndex][property].setError(null);
}).catch(({ errors, fields }) => {
this.gridItemsModel[rowIndex][property].setError(errors[0].message);
});
}
/** /**
* 表格数据加载 * 表格数据加载
* *
...@@ -750,8 +790,10 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -750,8 +790,10 @@ export default class MainBase extends Vue implements ControlInterface {
const data: any = response.data; const data: any = response.data;
this.totalrow = response.total; this.totalrow = response.total;
this.items = JSON.parse(JSON.stringify(data)); this.items = JSON.parse(JSON.stringify(data));
// 清空selections // 清空selections,gridItemsModel
this.selections = []; this.selections = [];
this.gridItemsModel = [];
this.items.forEach(()=>{this.gridItemsModel.push(this.getGridRowModel())});
this.$emit('load', this.items); this.$emit('load', this.items);
// 设置默认选中 // 设置默认选中
let _this = this; let _this = this;
...@@ -800,6 +842,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -800,6 +842,7 @@ export default class MainBase extends Vue implements ControlInterface {
this.items.some((val: any, num: number) =>{ this.items.some((val: any, num: number) =>{
if(JSON.stringify(val) == JSON.stringify(record)){ if(JSON.stringify(val) == JSON.stringify(record)){
this.items.splice(num,1); this.items.splice(num,1);
this.gridItemsModel.splice(num,1);
return true; return true;
} }
}); });
...@@ -849,9 +892,10 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -849,9 +892,10 @@ export default class MainBase extends Vue implements ControlInterface {
//删除items中已删除的项 //删除items中已删除的项
console.log(this.items); console.log(this.items);
_datas.forEach((data: any) => { _datas.forEach((data: any) => {
this.items.some((item:any,index:number)=>{ this.items.some((item:any,index:number)=>{
if(Object.is(item.srfkey,data.srfkey)){ if(Object.is(item.srfkey,data.srfkey)){
this.items.splice(index,1); this.items.splice(index,1);
this.gridItemsModel.splice(index,1);
return true; return true;
} }
}); });
......
<template> <template>
<div class='grid' style="height:100%;"> <div class='grid' style="height:100%;">
<el-table v-if="isDisplay === true" <i-form>
<el-table v-if="isDisplay === true"
:default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }" :default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }"
@sort-change="onSortChange($event)" @sort-change="onSortChange($event)"
:border="isDragendCol" :border="isDragendCol"
...@@ -28,7 +29,7 @@ ...@@ -28,7 +29,7 @@
{{$t('entities.ibzorganization.main_grid.columns.orgid')}} {{$t('entities.ibzorganization.main_grid.columns.orgid')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.orgid}}</span> <span>{{row.orgid}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -40,7 +41,7 @@ ...@@ -40,7 +41,7 @@
{{$t('entities.ibzorganization.main_grid.columns.orgcode')}} {{$t('entities.ibzorganization.main_grid.columns.orgcode')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.orgcode}}</span> <span>{{row.orgcode}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -52,7 +53,7 @@ ...@@ -52,7 +53,7 @@
{{$t('entities.ibzorganization.main_grid.columns.orgname')}} {{$t('entities.ibzorganization.main_grid.columns.orgname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.orgname}}</span> <span>{{row.orgname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -64,7 +65,7 @@ ...@@ -64,7 +65,7 @@
{{$t('entities.ibzorganization.main_grid.columns.orglevel')}} {{$t('entities.ibzorganization.main_grid.columns.orglevel')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.orglevel}}</span> <span>{{row.orglevel}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -76,7 +77,7 @@ ...@@ -76,7 +77,7 @@
{{$t('entities.ibzorganization.main_grid.columns.shortname')}} {{$t('entities.ibzorganization.main_grid.columns.shortname')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.shortname}}</span> <span>{{row.shortname}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -88,7 +89,7 @@ ...@@ -88,7 +89,7 @@
{{$t('entities.ibzorganization.main_grid.columns.showorder')}} {{$t('entities.ibzorganization.main_grid.columns.showorder')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<span>{{row.showorder}}</span> <span>{{row.showorder}}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -100,7 +101,7 @@ ...@@ -100,7 +101,7 @@
{{$t('entities.ibzorganization.main_grid.columns.createdate')}} {{$t('entities.ibzorganization.main_grid.columns.createdate')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<app-format-data format="YYYY-MM-DD hh:mm:ss" :data="row.createdate"></app-format-data> <app-format-data format="YYYY-MM-DD hh:mm:ss" :data="row.createdate"></app-format-data>
</template> </template>
</el-table-column> </el-table-column>
...@@ -112,7 +113,7 @@ ...@@ -112,7 +113,7 @@
{{$t('entities.ibzorganization.main_grid.columns.updatedate')}} {{$t('entities.ibzorganization.main_grid.columns.updatedate')}}
</span> </span>
</template> </template>
<template v-slot="{row,column}"> <template v-slot="{row,column,$index}">
<app-format-data format="YYYY-MM-DD hh:mm:ss" :data="row.updatedate"></app-format-data> <app-format-data format="YYYY-MM-DD hh:mm:ss" :data="row.updatedate"></app-format-data>
</template> </template>
</el-table-column> </el-table-column>
...@@ -121,6 +122,7 @@ ...@@ -121,6 +122,7 @@
<el-table-column></el-table-column> <el-table-column></el-table-column>
</template> </template>
</el-table> </el-table>
</i-form>
<row class='grid-pagination' v-show="items.length > 0"> <row class='grid-pagination' v-show="items.length > 0">
<page class='pull-right' @on-change="pageOnChange($event)" <page class='pull-right' @on-change="pageOnChange($event)"
@on-page-size-change="onPageSizeChange($event)" @on-page-size-change="onPageSizeChange($event)"
...@@ -168,6 +170,7 @@ import IBZOrganizationService from '@/service/ibzorganization/ibzorganization-se ...@@ -168,6 +170,7 @@ import IBZOrganizationService from '@/service/ibzorganization/ibzorganization-se
import MainService from './main-grid-service'; import MainService from './main-grid-service';
import CodeListService from "@service/app/codelist-service"; import CodeListService from "@service/app/codelist-service";
import { FormItemModel } from '@/model/form-detail';
@Component({ @Component({
...@@ -650,6 +653,26 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -650,6 +653,26 @@ export default class MainBase extends Vue implements ControlInterface {
}, },
] ]
/**
* 表格模型集合
*
* @type {*}
* @memberof Main
*/
public gridItemsModel: any[] = [];
/**
* 获取表格行模型
*
* @type {*}
* @memberof Main
*/
public getGridRowModel(){
return {
srfkey: new FormItemModel(),
}
}
/** /**
* 属性值规则 * 属性值规则
* *
...@@ -663,6 +686,23 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -663,6 +686,23 @@ export default class MainBase extends Vue implements ControlInterface {
], ],
} }
/**
* 表格行编辑项校验
*
* @param {string} property 属性名
* @param {*} data 行数据
* @param {number} rowIndex 行索引
*
* @memberof Main
*/
public validtor(property:string, data:any, rowIndex:number){
this.$util.validateItem(property,data,this.rules).then(()=>{
this.gridItemsModel[rowIndex][property].setError(null);
}).catch(({ errors, fields }) => {
this.gridItemsModel[rowIndex][property].setError(errors[0].message);
});
}
/** /**
* 表格数据加载 * 表格数据加载
* *
...@@ -705,8 +745,10 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -705,8 +745,10 @@ export default class MainBase extends Vue implements ControlInterface {
const data: any = response.data; const data: any = response.data;
this.totalrow = response.total; this.totalrow = response.total;
this.items = JSON.parse(JSON.stringify(data)); this.items = JSON.parse(JSON.stringify(data));
// 清空selections // 清空selections,gridItemsModel
this.selections = []; this.selections = [];
this.gridItemsModel = [];
this.items.forEach(()=>{this.gridItemsModel.push(this.getGridRowModel())});
this.$emit('load', this.items); this.$emit('load', this.items);
// 设置默认选中 // 设置默认选中
let _this = this; let _this = this;
...@@ -755,6 +797,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -755,6 +797,7 @@ export default class MainBase extends Vue implements ControlInterface {
this.items.some((val: any, num: number) =>{ this.items.some((val: any, num: number) =>{
if(JSON.stringify(val) == JSON.stringify(record)){ if(JSON.stringify(val) == JSON.stringify(record)){
this.items.splice(num,1); this.items.splice(num,1);
this.gridItemsModel.splice(num,1);
return true; return true;
} }
}); });
...@@ -804,9 +847,10 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -804,9 +847,10 @@ export default class MainBase extends Vue implements ControlInterface {
//删除items中已删除的项 //删除items中已删除的项
console.log(this.items); console.log(this.items);
_datas.forEach((data: any) => { _datas.forEach((data: any) => {
this.items.some((item:any,index:number)=>{ this.items.some((item:any,index:number)=>{
if(Object.is(item.srfkey,data.srfkey)){ if(Object.is(item.srfkey,data.srfkey)){
this.items.splice(index,1); this.items.splice(index,1);
this.gridItemsModel.splice(index,1);
return true; return true;
} }
}); });
......
...@@ -126,7 +126,7 @@ ...@@ -126,7 +126,7 @@
<!--输出实体[IBZDEPT]数据结构 --> <!--输出实体[IBZDEPT]数据结构 -->
<changeSet author="a_A_5d9d78509" id="tab-ibzdept-657-4"> <changeSet author="a_A_5d9d78509" id="tab-ibzdept-659-4">
<createTable tableName="IBZDEPT"> <createTable tableName="IBZDEPT">
<column name="DEPTID" remarks="" type="VARCHAR(100)"> <column name="DEPTID" remarks="" type="VARCHAR(100)">
<constraints primaryKey="true" primaryKeyName="PK_IBZDEPT_DEPTID"/> <constraints primaryKey="true" primaryKeyName="PK_IBZDEPT_DEPTID"/>
...@@ -179,10 +179,10 @@ ...@@ -179,10 +179,10 @@
<addForeignKeyConstraint baseColumnNames="USERID" baseTableName="IBZDEPTMEMBER" constraintName="DER1N_IBZDEPTMEMBER_IBZEMP_USE" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="USERID" referencedTableName="IBZEMP" validate="true"/> <addForeignKeyConstraint baseColumnNames="USERID" baseTableName="IBZDEPTMEMBER" constraintName="DER1N_IBZDEPTMEMBER_IBZEMP_USE" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="USERID" referencedTableName="IBZEMP" validate="true"/>
</changeSet> </changeSet>
<!--输出实体[IBZDEPT]外键关系 --> <!--输出实体[IBZDEPT]外键关系 -->
<changeSet author="a_A_5d9d78509" id="fk-ibzdept-657-10"> <changeSet author="a_A_5d9d78509" id="fk-ibzdept-659-10">
<addForeignKeyConstraint baseColumnNames="PDEPTID" baseTableName="IBZDEPT" constraintName="DER1N_IBZDEPT_IBZDEPT_PDEPTID" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="DEPTID" referencedTableName="IBZDEPT" validate="true"/> <addForeignKeyConstraint baseColumnNames="PDEPTID" baseTableName="IBZDEPT" constraintName="DER1N_IBZDEPT_IBZDEPT_PDEPTID" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="DEPTID" referencedTableName="IBZDEPT" validate="true"/>
</changeSet> </changeSet>
<changeSet author="a_A_5d9d78509" id="fk-ibzdept-657-11"> <changeSet author="a_A_5d9d78509" id="fk-ibzdept-659-11">
<addForeignKeyConstraint baseColumnNames="ORGID" baseTableName="IBZDEPT" constraintName="DER1N_IBZDEPT_IBZORG_ORGID" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ORGID" referencedTableName="IBZORG" validate="true"/> <addForeignKeyConstraint baseColumnNames="ORGID" baseTableName="IBZDEPT" constraintName="DER1N_IBZDEPT_IBZORG_ORGID" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ORGID" referencedTableName="IBZORG" validate="true"/>
</changeSet> </changeSet>
......
...@@ -40,15 +40,13 @@ import cn.ibizlab.core.ou.filter.IBZDepartmentSearchContext; ...@@ -40,15 +40,13 @@ import cn.ibizlab.core.ou.filter.IBZDepartmentSearchContext;
public class IBZDepartmentResource { public class IBZDepartmentResource {
@Autowired @Autowired
private IIBZDepartmentService ibzdepartmentService; public IIBZDepartmentService ibzdepartmentService;
@Autowired @Autowired
@Lazy @Lazy
public IBZDepartmentMapping ibzdepartmentMapping; public IBZDepartmentMapping ibzdepartmentMapping;
public IBZDepartmentDTO permissionDTO=new IBZDepartmentDTO(); @PreAuthorize("hasPermission(this.ibzdepartmentMapping.toDomain(#ibzdepartmentdto),'ibzou-IBZDepartment-Create')")
//@PreAuthorize("hasPermission(this.ibzdepartmentMapping.toDomain(#ibzdepartmentdtos),'ibzou-IBZDepartment-Create')")
@ApiOperation(value = "Create", tags = {"IBZDepartment" }, notes = "Create") @ApiOperation(value = "Create", tags = {"IBZDepartment" }, notes = "Create")
@RequestMapping(method = RequestMethod.POST, value = "/ibzdepartments") @RequestMapping(method = RequestMethod.POST, value = "/ibzdepartments")
@Transactional @Transactional
...@@ -103,7 +101,7 @@ public class IBZDepartmentResource { ...@@ -103,7 +101,7 @@ public class IBZDepartmentResource {
return ResponseEntity.status(HttpStatus.OK).body(ibzdepartmentMapping.toDto(ibzdepartmentService.getDraft(new IBZDepartment()))); return ResponseEntity.status(HttpStatus.OK).body(ibzdepartmentMapping.toDto(ibzdepartmentService.getDraft(new IBZDepartment())));
} }
//@PreAuthorize("hasPermission(this.ibzdepartmentService.get(#ibzdepartment_id),'ibzou-IBZDepartment-Remove')") @PreAuthorize("hasPermission(this.ibzdepartmentService.get(#ibzdepartment_id),'ibzou-IBZDepartment-Remove')")
@ApiOperation(value = "Remove", tags = {"IBZDepartment" }, notes = "Remove") @ApiOperation(value = "Remove", tags = {"IBZDepartment" }, notes = "Remove")
@RequestMapping(method = RequestMethod.DELETE, value = "/ibzdepartments/{ibzdepartment_id}") @RequestMapping(method = RequestMethod.DELETE, value = "/ibzdepartments/{ibzdepartment_id}")
@Transactional @Transactional
...@@ -119,7 +117,7 @@ public class IBZDepartmentResource { ...@@ -119,7 +117,7 @@ public class IBZDepartmentResource {
return ResponseEntity.status(HttpStatus.OK).body(true); return ResponseEntity.status(HttpStatus.OK).body(true);
} }
//@PreAuthorize("hasPermission(this.ibzdepartmentService.get(#ibzdepartment_id),'ibzou-IBZDepartment-Update')") @PreAuthorize("hasPermission(this.ibzdepartmentService.get(#ibzdepartment_id),'ibzou-IBZDepartment-Update')")
@ApiOperation(value = "Update", tags = {"IBZDepartment" }, notes = "Update") @ApiOperation(value = "Update", tags = {"IBZDepartment" }, notes = "Update")
@RequestMapping(method = RequestMethod.PUT, value = "/ibzdepartments/{ibzdepartment_id}") @RequestMapping(method = RequestMethod.PUT, value = "/ibzdepartments/{ibzdepartment_id}")
@Transactional @Transactional
......
...@@ -40,14 +40,12 @@ import cn.ibizlab.core.ou.filter.IBZDeptMemberSearchContext; ...@@ -40,14 +40,12 @@ import cn.ibizlab.core.ou.filter.IBZDeptMemberSearchContext;
public class IBZDeptMemberResource { public class IBZDeptMemberResource {
@Autowired @Autowired
private IIBZDeptMemberService ibzdeptmemberService; public IIBZDeptMemberService ibzdeptmemberService;
@Autowired @Autowired
@Lazy @Lazy
public IBZDeptMemberMapping ibzdeptmemberMapping; public IBZDeptMemberMapping ibzdeptmemberMapping;
public IBZDeptMemberDTO permissionDTO=new IBZDeptMemberDTO();
@PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','ibzou-IBZDeptMember-Update-all')") @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','ibzou-IBZDeptMember-Update-all')")
@ApiOperation(value = "Update", tags = {"IBZDeptMember" }, notes = "Update") @ApiOperation(value = "Update", tags = {"IBZDeptMember" }, notes = "Update")
@RequestMapping(method = RequestMethod.PUT, value = "/ibzdeptmembers/{ibzdeptmember_id}") @RequestMapping(method = RequestMethod.PUT, value = "/ibzdeptmembers/{ibzdeptmember_id}")
......
...@@ -40,15 +40,13 @@ import cn.ibizlab.core.ou.filter.IBZEmployeeSearchContext; ...@@ -40,15 +40,13 @@ import cn.ibizlab.core.ou.filter.IBZEmployeeSearchContext;
public class IBZEmployeeResource { public class IBZEmployeeResource {
@Autowired @Autowired
private IIBZEmployeeService ibzemployeeService; public IIBZEmployeeService ibzemployeeService;
@Autowired @Autowired
@Lazy @Lazy
public IBZEmployeeMapping ibzemployeeMapping; public IBZEmployeeMapping ibzemployeeMapping;
public IBZEmployeeDTO permissionDTO=new IBZEmployeeDTO(); @PreAuthorize("hasPermission(this.ibzemployeeService.get(#ibzemployee_id),'ibzou-IBZEmployee-Remove')")
//@PreAuthorize("hasPermission(this.ibzemployeeService.get(#ibzemployee_id),'ibzou-IBZEmployee-Remove')")
@ApiOperation(value = "Remove", tags = {"IBZEmployee" }, notes = "Remove") @ApiOperation(value = "Remove", tags = {"IBZEmployee" }, notes = "Remove")
@RequestMapping(method = RequestMethod.DELETE, value = "/ibzemployees/{ibzemployee_id}") @RequestMapping(method = RequestMethod.DELETE, value = "/ibzemployees/{ibzemployee_id}")
@Transactional @Transactional
...@@ -76,7 +74,7 @@ public class IBZEmployeeResource { ...@@ -76,7 +74,7 @@ public class IBZEmployeeResource {
return ResponseEntity.status(HttpStatus.OK).body(ibzemployeedto); return ResponseEntity.status(HttpStatus.OK).body(ibzemployeedto);
} }
//@PreAuthorize("hasPermission(this.ibzemployeeMapping.toDomain(#ibzemployeedtos),'ibzou-IBZEmployee-Create')") @PreAuthorize("hasPermission(this.ibzemployeeMapping.toDomain(#ibzemployeedto),'ibzou-IBZEmployee-Create')")
@ApiOperation(value = "Create", tags = {"IBZEmployee" }, notes = "Create") @ApiOperation(value = "Create", tags = {"IBZEmployee" }, notes = "Create")
@RequestMapping(method = RequestMethod.POST, value = "/ibzemployees") @RequestMapping(method = RequestMethod.POST, value = "/ibzemployees")
@Transactional @Transactional
...@@ -101,7 +99,7 @@ public class IBZEmployeeResource { ...@@ -101,7 +99,7 @@ public class IBZEmployeeResource {
return ResponseEntity.status(HttpStatus.OK).body(ibzemployeeService.checkKey(ibzemployeeMapping.toDomain(ibzemployeedto))); return ResponseEntity.status(HttpStatus.OK).body(ibzemployeeService.checkKey(ibzemployeeMapping.toDomain(ibzemployeedto)));
} }
//@PreAuthorize("hasPermission(this.ibzemployeeService.get(#ibzemployee_id),'ibzou-IBZEmployee-Update')") @PreAuthorize("hasPermission(this.ibzemployeeService.get(#ibzemployee_id),'ibzou-IBZEmployee-Update')")
@ApiOperation(value = "Update", tags = {"IBZEmployee" }, notes = "Update") @ApiOperation(value = "Update", tags = {"IBZEmployee" }, notes = "Update")
@RequestMapping(method = RequestMethod.PUT, value = "/ibzemployees/{ibzemployee_id}") @RequestMapping(method = RequestMethod.PUT, value = "/ibzemployees/{ibzemployee_id}")
@Transactional @Transactional
......
...@@ -40,21 +40,19 @@ import cn.ibizlab.core.ou.filter.IBZOrganizationSearchContext; ...@@ -40,21 +40,19 @@ import cn.ibizlab.core.ou.filter.IBZOrganizationSearchContext;
public class IBZOrganizationResource { public class IBZOrganizationResource {
@Autowired @Autowired
private IIBZOrganizationService ibzorganizationService; public IIBZOrganizationService ibzorganizationService;
@Autowired @Autowired
@Lazy @Lazy
public IBZOrganizationMapping ibzorganizationMapping; public IBZOrganizationMapping ibzorganizationMapping;
public IBZOrganizationDTO permissionDTO=new IBZOrganizationDTO();
@ApiOperation(value = "CheckKey", tags = {"IBZOrganization" }, notes = "CheckKey") @ApiOperation(value = "CheckKey", tags = {"IBZOrganization" }, notes = "CheckKey")
@RequestMapping(method = RequestMethod.POST, value = "/ibzorganizations/checkkey") @RequestMapping(method = RequestMethod.POST, value = "/ibzorganizations/checkkey")
public ResponseEntity<Boolean> checkKey(@RequestBody IBZOrganizationDTO ibzorganizationdto) { public ResponseEntity<Boolean> checkKey(@RequestBody IBZOrganizationDTO ibzorganizationdto) {
return ResponseEntity.status(HttpStatus.OK).body(ibzorganizationService.checkKey(ibzorganizationMapping.toDomain(ibzorganizationdto))); return ResponseEntity.status(HttpStatus.OK).body(ibzorganizationService.checkKey(ibzorganizationMapping.toDomain(ibzorganizationdto)));
} }
//@PreAuthorize("hasPermission(this.ibzorganizationService.get(#ibzorganization_id),'ibzou-IBZOrganization-Update')") @PreAuthorize("hasPermission(this.ibzorganizationService.get(#ibzorganization_id),'ibzou-IBZOrganization-Update')")
@ApiOperation(value = "Update", tags = {"IBZOrganization" }, notes = "Update") @ApiOperation(value = "Update", tags = {"IBZOrganization" }, notes = "Update")
@RequestMapping(method = RequestMethod.PUT, value = "/ibzorganizations/{ibzorganization_id}") @RequestMapping(method = RequestMethod.PUT, value = "/ibzorganizations/{ibzorganization_id}")
@Transactional @Transactional
...@@ -74,7 +72,7 @@ public class IBZOrganizationResource { ...@@ -74,7 +72,7 @@ public class IBZOrganizationResource {
return ResponseEntity.status(HttpStatus.OK).body(true); return ResponseEntity.status(HttpStatus.OK).body(true);
} }
//@PreAuthorize("hasPermission(this.ibzorganizationMapping.toDomain(#ibzorganizationdtos),'ibzou-IBZOrganization-Create')") @PreAuthorize("hasPermission(this.ibzorganizationMapping.toDomain(#ibzorganizationdto),'ibzou-IBZOrganization-Create')")
@ApiOperation(value = "Create", tags = {"IBZOrganization" }, notes = "Create") @ApiOperation(value = "Create", tags = {"IBZOrganization" }, notes = "Create")
@RequestMapping(method = RequestMethod.POST, value = "/ibzorganizations") @RequestMapping(method = RequestMethod.POST, value = "/ibzorganizations")
@Transactional @Transactional
...@@ -108,7 +106,7 @@ public class IBZOrganizationResource { ...@@ -108,7 +106,7 @@ public class IBZOrganizationResource {
return ResponseEntity.status(HttpStatus.OK).body(true); return ResponseEntity.status(HttpStatus.OK).body(true);
} }
//@PreAuthorize("hasPermission(this.ibzorganizationService.get(#ibzorganization_id),'ibzou-IBZOrganization-Remove')") @PreAuthorize("hasPermission(this.ibzorganizationService.get(#ibzorganization_id),'ibzou-IBZOrganization-Remove')")
@ApiOperation(value = "Remove", tags = {"IBZOrganization" }, notes = "Remove") @ApiOperation(value = "Remove", tags = {"IBZOrganization" }, notes = "Remove")
@RequestMapping(method = RequestMethod.DELETE, value = "/ibzorganizations/{ibzorganization_id}") @RequestMapping(method = RequestMethod.DELETE, value = "/ibzorganizations/{ibzorganization_id}")
@Transactional @Transactional
......
...@@ -50,7 +50,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -50,7 +50,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
if(entity instanceof ArrayList){ if(entity instanceof ArrayList){
List<EntityBase> entities= (List<EntityBase>) entity; List<EntityBase> entities= (List<EntityBase>) entity;
for(EntityBase entityBase: entities){ for(EntityBase entityBase: entities){
boolean result=actionValid(entityBase,entityDataRange); boolean result=actionValid(entityBase,strAction,entityDataRange);
if(!result){ if(!result){
return false; return false;
} }
...@@ -58,7 +58,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -58,7 +58,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
} }
else{ else{
EntityBase entityBase= (EntityBase) entity; EntityBase entityBase= (EntityBase) entity;
return actionValid(entityBase,entityDataRange); return actionValid(entityBase,strAction,entityDataRange);
} }
return true; return true;
} }
...@@ -109,7 +109,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -109,7 +109,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
* @param entityDataRange * @param entityDataRange
* @return * @return
*/ */
private boolean actionValid(EntityBase entity, Set<String> entityDataRange){ private boolean actionValid(EntityBase entity, String action, Set<String> entityDataRange){
Map<String,String> permissionField=getPermissionField(entity);//获取组织、部门预置属性 Map<String,String> permissionField=getPermissionField(entity);//获取组织、部门预置属性
String orgField=permissionField.get("orgfield"); String orgField=permissionField.get("orgfield");
...@@ -150,17 +150,26 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -150,17 +150,26 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
} }
} }
if(!ObjectUtils.isEmpty(orgFieldValue) && !userOrg.contains(orgFieldValue)){ if(action.endsWith("Create")){
return false; if(!ObjectUtils.isEmpty(orgFieldValue) && !userOrg.contains(orgFieldValue))
} return false;
if(!ObjectUtils.isEmpty(orgDeptFieldValue) && !userOrgDept.contains(orgDeptFieldValue)){ if(!ObjectUtils.isEmpty(orgDeptFieldValue) && !userOrgDept.contains(orgDeptFieldValue))
return false; return false;
} if(!ObjectUtils.isEmpty(crateManFieldValue) && !crateManFieldValue.equals(authenticationUser.getUserid()))
if(!ObjectUtils.isEmpty(crateManFieldValue) && !crateManFieldValue.equals(authenticationUser.getUserid())){ return false;
return false;
return true;
} }
else{
if(!ObjectUtils.isEmpty(orgFieldValue) && userOrg.contains(orgFieldValue))
return true;
if(!ObjectUtils.isEmpty(orgDeptFieldValue) && userOrgDept.contains(orgDeptFieldValue))
return true;
if(!ObjectUtils.isEmpty(crateManFieldValue) && crateManFieldValue.equals(authenticationUser.getUserid()))
return true;
return true; return false;
}
} }
/** /**
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册