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

ibiz4j 发布系统代码

上级 2a090687
## v7.0.0-alpha.6 [2020-5-23]
### Bug修复
修复处理快速分组模型动态数据部分
修复列表,数据视图默认排序
### 功能新增及优化
#### 模板
补充单位选择器、部门选择器、人员选择器
#### 基础文件
补充单位选择器、部门选择器、人员选择器
## v7.0.0-alpha.5 [2020-5-21]
### Bug修复
修复表格视图搜索placeholder显示为搜索字段
修复表单嵌表单分页异常
修复门户视图操作栏标题
修复看板部件高度自动撑
修复表单分组,界面行为组不显示
修复表格操作列数据异常
### 功能新增及优化
#### 模板
支持拷贝功能
支持实体甘特图视图
支持面板项隐藏表单项
支持表格列最小宽度和操作列样式支持
支持列表项、面板代码表转化
#### 基础文件
支持列表项、面板代码表转化
修复表单分组,界面行为组不显示
## v7.0.0-alpha.4 [2020-5-14]
### Bug修复
修复代码表代码项图标和数据
修复数据多项选择视图UI逻辑不匹配
修复列表高度异常
修复树节点上下文
修复表格(视图)高度,滚动条问题
修复表单loaddraft服务仿真主键丢失修复
修复user显示名称逻辑
修复issue地址为正式环境地址
### 功能新增及优化
#### 模板
模态时视图样式调整
增加菜单权限
增加快速分组搜索或快速搜索表单功能
增加表格内置工具栏
代码表多选控件分割符从分号转化为逗号
#### 基础文件
增加数据选择类插件表格呈现插件
## v7.0.0-alpha.3 [2020-5-10] ## v7.0.0-alpha.3 [2020-5-10]
### Bug修复 ### Bug修复
...@@ -65,3 +162,5 @@ ...@@ -65,3 +162,5 @@
## v7.0.0-alpha.1 [2020-4-29] ## v7.0.0-alpha.1 [2020-4-29]
初始化文件 初始化文件
...@@ -117,7 +117,9 @@ $ yarn build ...@@ -117,7 +117,9 @@ $ yarn build
|─ ─ favicon.ico 图标 |─ ─ favicon.ico 图标
​ |─ ─ src 工程文件夹 ​ |─ ─ src 工程文件夹
|─ ─ assets 静态资源 |─ ─ assets 静态资源
|─ ─ codelist 动态代码表服务
|─ ─ components 基础组件,主要包含编辑器组件和其他全局使用的组件 |─ ─ components 基础组件,主要包含编辑器组件和其他全局使用的组件
|─ ─ counter 计数器服务
|─ ─ engine 引擎文件,主要封装了内置视图的内置逻辑 |─ ─ engine 引擎文件,主要封装了内置视图的内置逻辑
|─ ─ environments 环境文件 |─ ─ environments 环境文件
​ |─ ─ interface 接口文件 ​ |─ ─ interface 接口文件
...@@ -150,6 +152,7 @@ $ yarn build ...@@ -150,6 +152,7 @@ $ yarn build
|─ ─ YYY-ui-logic-base.ts 应用实体界面处理逻辑文件 |─ ─ YYY-ui-logic-base.ts 应用实体界面处理逻辑文件
|─ ─ YYY-ui-logic.ts 自定义应用实体界面处理逻辑文件 |─ ─ YYY-ui-logic.ts 自定义应用实体界面处理逻辑文件
|─ ─ utils 工具类文件 |─ ─ utils 工具类文件
|─ ─ utilservice 应用功能服务
|─ ─ widgets 部件文件夹 |─ ─ widgets 部件文件夹
|─ ─ appde 应用实体名称 |─ ─ appde 应用实体名称
​ |─ ─ XXX 部件名称 ​ |─ ─ XXX 部件名称
......
...@@ -18,12 +18,16 @@ ...@@ -18,12 +18,16 @@
"@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",
"element-ui": "^2.13.0", "element-ui": "^2.13.0",
"file-saver": "^2.0.2", "file-saver": "^2.0.2",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"ibiz-gantt-elastic": "^1.0.15",
"ibiz-vue-lib": "^0.1.9",
"interactjs": "^1.9.4", "interactjs": "^1.9.4",
"moment": "^2.24.0", "moment": "^2.24.0",
"path-to-regexp": "^6.1.0", "path-to-regexp": "^6.1.0",
......
...@@ -71,6 +71,11 @@ import AppUploadFileInfo from './components/app-upload-file-info/app-upload-file ...@@ -71,6 +71,11 @@ import AppUploadFileInfo from './components/app-upload-file-info/app-upload-file
import ContextMenu from './components/context-menu/context-menu' import ContextMenu from './components/context-menu/context-menu'
import AppColumnFormat from './components/app-column-format/app-column-format.vue' import AppColumnFormat from './components/app-column-format/app-column-format.vue'
import AppQuickGroup from './components/app-quick-group/app-quick-group.vue' import AppQuickGroup from './components/app-quick-group/app-quick-group.vue'
import AppOrgSelect from './components/app-org-select/app-org-select.vue'
import AppDepartmentSelect from './components/app-department-select/app-department-select.vue'
import IBizGroupSelect from './components/ibiz-group-select/ibiz-group-select.vue'
import IBizGroupPicker from './components/ibiz-group-picker/ibiz-group-picker.vue'
import AppWFApproval from './components/app-wf-approval/app-wf-approval.vue'
// 全局挂载UI实体服务注册中心 // 全局挂载UI实体服务注册中心
window['uiServiceRegister'] = uiServiceRegister; window['uiServiceRegister'] = uiServiceRegister;
...@@ -151,5 +156,10 @@ export const AppComponents = { ...@@ -151,5 +156,10 @@ export const AppComponents = {
v.component('context-menu',ContextMenu); v.component('context-menu',ContextMenu);
v.component('app-column-format',AppColumnFormat); v.component('app-column-format',AppColumnFormat);
v.component('app-quick-group',AppQuickGroup); v.component('app-quick-group',AppQuickGroup);
v.component('app-org-select',AppOrgSelect);
v.component('app-department-select',AppDepartmentSelect);
v.component('ibiz-group-select',IBizGroupSelect);
v.component('ibiz-group-picker',IBizGroupPicker);
v.component('app-wf-approval',AppWFApproval);
}, },
}; };
\ No newline at end of file
.ivu-dropdown{
.ivu-dropdown-rel{
.tree-input{
.ivu-input-suffix{
width: auto;
text-align: right;
.icon-arrow{
margin-right: 4px;
}
}
.el-icon-circle-close{
display: none;
}
}
.tree-input:hover{
.el-icon-circle-close{
display: inline-block;
}
}
}
.ivu-select-dropdown{
max-height: 200px;
overflow: scroll;
.tree-contant{
overflow:inherit;
}
}
}
<template>
<div class="app-department-select">
<ibiz-select-tree :NodesData="Nodesdata" v-model="selectTreeValue" :multiple="multiple" @select="onSelect"></ibiz-select-tree>
</div>
</template>
<script lang="ts">
import { Vue, Component, Watch, Prop, Model } from 'vue-property-decorator';
@Component({
})
export default class AppDepartmentSelect extends Vue {
/**
* 接口url
*
* @type {*}
* @memberof AppDepartmentSelect
*/
@Prop() public url?: any;
/**
* 过滤项
*
* @type {*}
* @memberof AppDepartmentSelect
*/
@Prop() public filter?: any;
/**
* 过滤项
*
* @type {*}
* @memberof AppDepartmentSelect
*/
@Prop() public fillMap?: any;
/**
* 是否多选
*
* @type {*}
* @memberof AppDepartmentSelect
*/
@Prop({default:false}) public multiple?: any;
/**
* 表单数据
*
* @type {*}
* @memberof AppDepartmentSelect
*/
@Prop() public data!: any;
/**
* 上下文变量
*
* @type {*}
* @memberof AppDepartmentSelect
*/
@Prop() public context!: any;
/**
* 选中数值
*
* @type {*}
* @memberof AppDepartmentSelect
*/
public selectTreeValue:any = "";
/**
* 树节点数据
*
* @type {*}
* @memberof AppDepartmentSelect
*/
public Nodesdata: any[] = [];
/**
* 当前树节点数据的url
*
* @type {*}
* @memberof AppDepartmentSelect
*/
public oldurl: any[] = [];
/**
* 获取节点数据
*
* @memberof AppDepartmentSelect
*/
public handleFilter(){
if(this.filter){
if(this.data && this.data[this.filter]){
return this.data[this.filter];
}else if(this.context && this.context[this.filter]){
return this.context[this.filter];
}
}else{
return this.context.srforgid;
}
}
/**
* 获取节点数据
*
* @memberof AppDepartmentSelect
*/
public searchNodesData(){
// 处理过滤参数,生成url
let param = this.handleFilter();
let _url = this.url.replace('${orgid}',param)
if(this.oldurl === _url){
return;
}
this.oldurl = _url;
// 缓存机制
const result:any = this.$store.getters.getCopyData(_url);
if(result){
this.Nodesdata = result;
return;
}
this.$http.get(_url).then((response: any) => {
this.Nodesdata = response.data;
this.$store.commit('addDepData', { srfkey: this.filter, orgData: response.data });
}).catch((response: any) => {
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常!' });
return;
}
});
}
/**
* 值变化
*
* @param {*} newVal
* @param {*} oldVal
* @memberof AppDepartmentSelect
*/
@Watch('data',{immediate:true,deep:true})
public onValueChange(newVal: any, oldVal: any) {
if(newVal){
this.computedSelectedData();
this.$nextTick(()=>{
this.searchNodesData();
});
}
}
/**
* 计算选中值
*
* @memberof AppOrgSelect
*/
public computedSelectedData(){
// 单选
if(!this.multiple){
if(this.fillMap && Object.keys(this.fillMap).length >0){
let templateValue = {};
Object.keys(this.fillMap).forEach((item:any) =>{
if(this.data && this.data[this.fillMap[item]]){
Object.assign(templateValue,{[item]:this.data[this.fillMap[item]]});
}
})
this.selectTreeValue = JSON.stringify([templateValue]);
}
}else{
// 多选
if(this.fillMap && Object.keys(this.fillMap).length >0){
let tempArray:Array<any> = [];
Object.keys(this.fillMap).forEach((item:any) =>{
if(this.data && this.data[this.fillMap[item]]){
let tempDataArray:Array<any> = (this.data[this.fillMap[item]]).split(",");
tempDataArray.forEach((tempData:any,index:number) =>{
if(tempArray.length < tempDataArray.length){
let singleData:any ={[item]:tempData};
tempArray.push(singleData);
}else{
Object.assign(tempArray[index],{[item]:tempData});
}
})
}
})
this.selectTreeValue = JSON.stringify(tempArray);
}
}
}
/**
* select事件处理
*
* @param {*} $event
* @memberof AppDepartmentSelect
*/
public onSelect($event:any){
// 组件自身抛值事件
let selectArr = JSON.parse($event);
// fillMap抛值事件
if(this.fillMap && Object.keys(this.fillMap).length > 0){
Object.keys(this.fillMap).forEach((attribute:string) => {
let _name = this.fillMap[attribute];
let values = selectArr.map((item:any) => item[attribute]);
let _value = $event === "[]" ? null : values.join(",");
this.$emit('select-change',{name: this.fillMap[attribute], value: _value})
});
}
}
}
</script>
<style lang='less'>
@import './app-department-select.less';
</style>
\ No newline at end of file
...@@ -47,6 +47,14 @@ export default class AppFormDRUIPart extends Vue { ...@@ -47,6 +47,14 @@ export default class AppFormDRUIPart extends Vue {
*/ */
@Prop({ default: '' }) public refreshitems!: string; @Prop({ default: '' }) public refreshitems!: string;
/**
* 禁止加载
*
* @type {string}
* @memberof AppFormDRUIPart
*/
@Prop({ default: false }) public isForbidLoad!: boolean;
/** /**
* 关系视图类型 * 关系视图类型
* *
...@@ -232,7 +240,7 @@ export default class AppFormDRUIPart extends Vue { ...@@ -232,7 +240,7 @@ export default class AppFormDRUIPart extends Vue {
} }
const formData: any = data?data:JSON.parse(this.data); const formData: any = data?data:JSON.parse(this.data);
const _paramitem = formData[this.paramItem]; const _paramitem = formData[this.paramItem];
let viewdata = {srfparentdename:this.parentName,srfparentkey:_paramitem}; let viewdata = {};
Object.assign(viewdata, this.$viewTool.getIndexViewParam()); Object.assign(viewdata, this.$viewTool.getIndexViewParam());
const _parameters: any[] = [...this.$viewTool.getIndexParameters(), ...this.parameters]; const _parameters: any[] = [...this.$viewTool.getIndexParameters(), ...this.parameters];
_parameters.forEach((parameter: any) => { _parameters.forEach((parameter: any) => {
...@@ -244,6 +252,7 @@ export default class AppFormDRUIPart extends Vue { ...@@ -244,6 +252,7 @@ export default class AppFormDRUIPart extends Vue {
Object.assign(viewdata, { [this.paramItem]: _paramitem }); Object.assign(viewdata, { [this.paramItem]: _paramitem });
//设置顶层视图唯一标识 //设置顶层视图唯一标识
Object.assign(viewdata,this.context); Object.assign(viewdata,this.context);
Object.assign(viewdata,{srfparentdename:this.parentName,srfparentkey:_paramitem});
this.viewdata = JSON.stringify(viewdata); this.viewdata = JSON.stringify(viewdata);
this.viewparam = JSON.stringify(this.viewparams); this.viewparam = JSON.stringify(this.viewparams);
if (this.isRelationalData) { if (this.isRelationalData) {
...@@ -254,7 +263,11 @@ export default class AppFormDRUIPart extends Vue { ...@@ -254,7 +263,11 @@ export default class AppFormDRUIPart extends Vue {
this.blockUIStop(); this.blockUIStop();
} }
} }
this.formDruipart.next({action:'load',data:{srfparentdename:this.parentName,srfparentkey:_paramitem}}); if(!this.isForbidLoad){
this.$nextTick(() => {
this.formDruipart.next({action:'load',data:{srfparentdename:this.parentName,srfparentkey:_paramitem}});
});
}
} }
/** /**
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
} }
>.ivu-card-extra { >.ivu-card-extra {
.item-extract-mode { .item-extract-mode {
display: flex;
.item { .item {
margin-left: 12px; margin-left: 12px;
} }
......
.app-org-select {
width: 100%;
}
\ No newline at end of file
<template>
<div class="app-org-select">
<ibiz-select-tree :NodesData="NodesData" v-model="selectTreeValue" :multiple="multiple" @select="treeSelectChange"></ibiz-select-tree>
</div>
</template>
<script lang = 'ts'>
import { Vue, Component, Prop, Watch } from "vue-property-decorator";
import { Http } from '@/utils';
@Component({})
export default class AppOrgSelect extends Vue {
/**
* 表单数据
*
* @memberof AppOrgSelect
*/
@Prop() public data!:any;
/**
* 上下文
*
* @memberof AppOrgSelect
*/
@Prop() public context!:any;
/**
* 填充对象
*
* @memberof AppOrgSelect
*/
@Prop() public fillMap:any;
/**
* 过滤项
*
* @memberof AppOrgSelect
*/
@Prop() public filter?:string;
/**
* 是否多选
*
* @memberof AppOrgSelect
*/
@Prop({default:false}) public multiple?:boolean;
/**
* 查询单位路径
*
* @memberof AppOrgSelect
*/
@Prop() public url!:string;
/**
* 监听表单数据变化
*
* @memberof AppOrgSelect
*/
@Watch('data',{immediate:true,deep:true})
onDataChange(newVal: any, oldVal: any) {
if(newVal){
this.computedSelectedData();
if(this.filter){
let tempFilterValue:any = this.initBasicData();
// filter值变化才去请求数据
if(tempFilterValue && (this.copyFilterValue !== tempFilterValue)){
this.loadTreeData(this.url.replace('${orgid}',tempFilterValue));
this.copyFilterValue = tempFilterValue;
}
}
}
}
/**
* 选择值
*
* @memberof AppOrgSelect
*/
public selectTreeValue:any = "";
/**
* 树节点数据
*
* @memberof AppOrgSelect
*/
public NodesData:any = [];
/**
* 备份过滤值
*
* @memberof AppOrgSelect
*/
public copyFilterValue:any;
/**
* vue生命周期
*
* @memberof AppOrgSelect
*/
public created(){
if(!this.filter){
this.loadTreeData(this.url);
}
}
/**
* 加载树数据
*
* @memberof AppOrgSelect
*/
public initBasicData(){
// 计算出过滤值
if(this.filter){
if(this.data && this.data[this.filter]){
return this.data[this.filter];
}else if(this.context && this.context[this.filter]){
return this.context[this.filter];
}else{
return null;
}
}
}
/**
* 计算选中值
*
* @memberof AppOrgSelect
*/
public computedSelectedData(){
// 单选
if(!this.multiple){
if(this.fillMap && Object.keys(this.fillMap).length >0){
let templateValue = {};
Object.keys(this.fillMap).forEach((item:any) =>{
if(this.data && this.data[this.fillMap[item]]){
Object.assign(templateValue,{[item]:this.data[this.fillMap[item]]});
}
})
this.selectTreeValue = JSON.stringify([templateValue]);
}
}else{
// 多选
if(this.fillMap && Object.keys(this.fillMap).length >0){
let tempArray:Array<any> = [];
Object.keys(this.fillMap).forEach((item:any) =>{
if(this.data && this.data[this.fillMap[item]]){
let tempDataArray:Array<any> = (this.data[this.fillMap[item]]).split(",");
tempDataArray.forEach((tempData:any,index:number) =>{
if(tempArray.length < tempDataArray.length){
let singleData:any ={[item]:tempData};
tempArray.push(singleData);
}else{
Object.assign(tempArray[index],{[item]:tempData});
}
})
}
})
this.selectTreeValue = JSON.stringify(tempArray);
}
}
}
/**
* 加载树数据
*
* @memberof AppOrgSelect
*/
public loadTreeData(requestUrl:string){
if(this.filter){
const result:any = this.$store.getters.getCopyData(this.filter);
if(result){
this.NodesData = result;
return;
}
}
Http.getInstance().get(requestUrl).then((res:any) =>{
if(!res.status && res.status !== 200){
console.error("加载数据失败");
return;
}
this.NodesData = res.data;
if(this.filter){
this.$store.commit('addOrgData', { srfkey: this.filter, orgData: res.data });
}
})
}
/**
* 树选择触发事件
*
* @memberof AppOrgSelect
*/
public treeSelectChange($event:any){
// 多选
if(this.multiple){
if(!Object.is($event,'[]')){
const tempValue:any = JSON.parse($event);
if(this.fillMap && Object.keys(this.fillMap).length >0){
Object.keys(this.fillMap).forEach((item:any) =>{
let tempResult:any ="";
tempValue.forEach((value:any,index:number) =>{
tempResult += index>0?`,${value[item]}`:`${value[item]}`;
})
this.emitValue(this.fillMap[item],tempResult);
})
}
}else{
if(this.fillMap && Object.keys(this.fillMap).length >0){
Object.keys(this.fillMap).forEach((item:any) =>{
this.emitValue(this.fillMap[item],null);
})
}
}
}else{
// 单选
if(!Object.is($event,'[]')){
const tempValue:any = JSON.parse($event)[0];
if(this.fillMap && Object.keys(this.fillMap).length >0){
Object.keys(this.fillMap).forEach((item:any) =>{
this.emitValue(this.fillMap[item],tempValue[item]);
})
}
}else{
if(this.fillMap && Object.keys(this.fillMap).length >0){
Object.keys(this.fillMap).forEach((item:any) =>{
this.emitValue(this.fillMap[item],null);
})
}
}
}
}
/**
* 抛值
*
* @memberof AppOrgSelect
*/
public emitValue(name:string,value:any){
this.$emit('select-change',{name:name,value:value});
}
}
</script>
<style lang="less">
@import "./app-org-select.less";
</style>
\ No newline at end of file
...@@ -81,9 +81,16 @@ export default class AppUser extends Vue { ...@@ -81,9 +81,16 @@ export default class AppUser extends Vue {
* @memberof AppUser * @memberof AppUser
*/ */
public logout() { public logout() {
localStorage.removeItem('user'); const get: Promise<any> = this.$http.get('v7/logout');
localStorage.removeItem('token'); get.then((response:any) =>{
this.$router.push({ name: 'login' }); if (response && response.status === 200) {
localStorage.removeItem('user');
localStorage.removeItem('token');
this.$router.push({ name: 'login' });
}
}).catch((error: any) =>{
console.error(error);
})
} }
} }
</script> </script>
......
.app-wf-approval{
width:100%;
.app-wf-approval-header{
width: 100%;
text-align: center;
background: #e5eaef;
height: 32px;
line-height: 32px;
font-size: 16px;
border: 1px solid #565656;
.approval-header-left{
margin-right: 24px;
}
}
.app-wf-approval-bottom{
width: 100%;
text-align: center;
background: #e5eaef;
height: 32px;
line-height: 32px;
font-size: 16px;
border-style: solid;
border-width: 0px 1px 1px 1px;
border-color: #565656;
}
.app-wf-approval-content{
border-left: 1px solid #565656;
border-right: 1px solid #565656;
.approval-content-item{
display: flex;
align-items: center;
font-size: 16px;
border-bottom: 1px solid #565656;
.approval-content-item-left{
width: 130px;
padding: 8px;
text-align: center;
}
.approval-content-item-right{
width: calc(100% - 130px);
border-left:1px solid #565656;
.approval-content-item-wait{
padding: 0px 4px;
height: 32px;
line-height: 32px;
font-size: 16px;
border-bottom:1px solid #565656;
background: #d1ef5c;
>span{
font-size: 18px;
color: #000;
font-weight: 600;
}
}
.approval-content-item-info{
.approval-content-item-info-item {
padding: 0px 4px;
height: 32px;
line-height: 32px;
border-bottom:1px solid #565656;
}
.approval-content-item-info-top{
font-size: 16px;
}
.approval-content-item-info-bottom{
font-size: 14px;
text-align: right;
>span{
margin-right:6px;
}
.info-bottom-name{
font-size: 18px;
font-weight: 600;
}
}
> div:nth-last-child(1){
> .approval-content-item-info-item:nth-last-child(1){
border-bottom: 0;
}
}
}
.approval-content-item-memo{
padding: 0px 4px;
.el-textarea__inner{
border: 0px !important;
padding: 0px !important;
}
}
}
}
}
}
\ No newline at end of file
<template>
<div class='app-wf-approval'>
<div class="app-wf-approval-header">
<span class="approval-header-left">{{data.startTime}}</span>
<span>{{data.startUserName}}提交</span>
</div>
<div class="app-wf-approval-content" v-if="data.usertasks && data.usertasks.length >0">
<div class="approval-content-item" v-for="(usertask,index) in data.usertasks" :key="index">
<div class="approval-content-item-left">
{{usertask.userTaskName}}
</div>
<div class="approval-content-item-right">
<div class="approval-content-item-wait" v-if="usertask.identitylinks.length >0">
等待<span v-for="(identitylink,inx) in usertask.identitylinks" :key="inx">{{identitylink.displayname}}<span v-if="inx >0"></span></span>处理
</div>
<div class="approval-content-item-info" v-if="usertask.comments.length >0">
<div v-for="(comment,commentInx) in usertask.comments" :key="commentInx">
<div class="approval-content-item-info-item approval-content-item-info-top">
{{`【${comment.type}】${comment.fullMessage}`}}
</div>
<div class="approval-content-item-info-item approval-content-item-info-bottom">
<span class="info-bottom-name">{{comment.authorName}}</span>
<span>{{comment.time}}</span>
</div>
</div>
</div>
<div class="approval-content-item-memo" v-if="usertask.userTaskId === viewparams.userTaskId">
<el-input type="textarea" v-model="initmemo" :rows="2" @blur="handleBlur" placeholder="请输入内容"></el-input>
</div>
</div>
</div>
</div>
<div class="app-wf-approval-bottom">
<span v-if="data.endTime">{{data.endTime}}结束</span>
</div>
</div>
</template>
<script lang = 'ts'>
import { Vue, Component,Prop,Model } from 'vue-property-decorator';
@Component({
})
export default class AppWFApproval extends Vue {
/**
* 双向绑定值
*
* @memberof AppWFApproval
*/
@Model ('change') value!: string;
/**
* 数据
*
* @memberof AppWFApproval
*/
public data:any = {};
/**
* 初始化memo
*
* @memberof AppWFApproval
*/
public initmemo:string = "";
/**
* 传入数据服务
*
* @memberof AppWFApproval
*/
@Prop() public service:any;
/**
* 上下文
*
* @memberof AppWFApproval
*/
@Prop() public context:any;
/**
* 视图参数
*
* @memberof AppWFApproval
*/
@Prop() public viewparams:any;
/**
* 初始化数据
*
* @memberof AppWFApproval
*/
public created(){
if(this.service){
this.service.GetWFHistory(this.context).then((res:any) =>{
if(res && (res.status === 200)){
this.data = res.data;
}
})
}
}
/**
* 抛出wfprocmemo
*
* @memberof AppWFApproval
*/
public handleBlur($event:any){
this.$emit('change',$event.target.value);
}
}
</script>
<style lang="less">
@import './app-wf-approval.less';
</style>
\ No newline at end of file
<template>
<div class="ibiz-group-picker">
<div class="ibiz-group-container">
<div v-if="showTree" class="ibiz-group-tree">
<ibiz-select-tree :NodesData="treeItems" v-model="treeSelectVal" :treeOnly="true" :defaultChecked="true" @select="treeSelect"></ibiz-select-tree>
</div>
<div class="ibiz-group-content">
<ibiz-group-card :data="cardItems" text="label" value="id" groupName="group" :multiple="multiple" :defaultSelect="cardSelctVal" @select="groupSelect"></ibiz-group-card>
</div>
</div>
<div class="ibiz-group-footer">
<el-button size="small" type="primary" @click="onOK">确认</el-button>
<el-button size="small" @click="onCancel">取消</el-button>
</div>
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop, Watch } from 'vue-property-decorator';
import { Subject } from 'rxjs';
import { Http } from '../../utils';
@Component({})
export default class IBizGroupPicker extends Vue {
/**
* 视图上下文参数
*
* @type {*}
* @memberof IBizGroupPicker
*/
@Prop() viewdata: any;
/**
* 视图参数
*
* @type {*}
* @memberof IBizGroupPicker
*/
@Prop() viewparam: any;
/**
* 多选
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected multiple: boolean = false;
/**
* 加载树url
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected treeurl:any;
/**
* 加载人员url
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected url:any;
/**
* 树数据集
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected treeItems: any[] = [];
/**
* 分组表数据集
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected cardItems: any[] = [];
/**
* 视图上下文参数对象
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected viewData: any;
/**
* 视图参数对象
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected viewParam: any;
/**
* 树选中值
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected treeSelectVal: string = '';
/**
* 分组表选中集合
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected cardSelctVal: any = [];
/**
* 数据选中集合
*
* @type {*}
* @memberof IBizGroupPicker
*/
protected selects: any[] = [];
/**
* 是否显示树
*
* @type {*}
* @memberof IBizGroupPicker
*/
get showTree() {
if(this.viewParam) {
return this.viewParam.showtree;
}
}
/**
* 生命周期
*
* @type {*}
* @memberof IBizGroupPicker
*/
public created() {
if(!this.viewdata || !this.viewparam) {
return;
}
this.viewData = JSON.parse(this.viewdata);
this.viewParam = JSON.parse(this.viewparam);
this.multiple = this.viewParam.multiple;
this.treeurl = this.viewParam.treeurl;
this.url = this.viewParam.url;
if (this.viewParam.selects) {
this.viewParam.selects.forEach((select: any) => {
this.selects.push(select);
this.cardSelctVal.push(select.id)
})
}
this.load();
}
/**
* 加载数据
*
* @type {*}
* @memberof IBizGroupPicker
*/
public load() {
if(this.showTree) {
this.loadTree();
} else {
this.loadGroupData(this.viewParam.filtervalue);
}
}
/**
* 加载树数据
*
* @type {*}
* @memberof IBizGroupPicker
*/
public loadTree() {
let orgid = this.viewParam.filtervalue;
let tempTreeUrl:string = this.treeurl.replace('${orgid}',orgid);
let get = Http.getInstance().get(tempTreeUrl, true);
get.then((response: any) => {
if(response.status === 200) {
this.treeItems = response.data;
}
}).catch((error: any) => {
console.log(error)
})
}
/**
* 加载分组表数据
*
* @type {*}
* @memberof IBizGroupPicker
*/
public loadGroupData(key: string) {
let tempUrl = this.url.replace('${selected-orgid}',key);
let get = Http.getInstance().get(tempUrl, true);
get.then((response: any) => {
if(response.status === 200) {
this.cardItems = response.data;
}
}).catch((error: any) => {
console.log(error)
})
}
/**
* 树选中
*
* @type {*}
* @memberof IBizGroupPicker
*/
public treeSelect(event: any) {
if(!event || JSON.parse(event).length == 0) {
return;
}
const items: any = JSON.parse(event);
this.loadGroupData(items[0].id);
}
/**
* 分组表选中
*
* @type {*}
* @memberof IBizGroupPicker
*/
public groupSelect(event: any) {
if (!event || !event.select) {
return;
}
if(!this.multiple) {
this.selects = [];
}
if(event.rselect) {
let index: number = this.selects.findIndex((item: any) => Object.is(event.rselect, item.id));
if(index >= 0) {
this.selects.splice(index, 1);
}
} else {
event.select.forEach((key: string) => {
let index: number = this.selects.findIndex((item: any) => Object.is(key, item.id));
if(index >= 0) {
return;
}
let item: any = this.cardItems.find((item: any) => Object.is(key, item.id));
if (item) {
this.selects.push(item);
}
});
}
}
/**
* 确认
*
* @type {*}
* @memberof IBizGroupPicker
*/
public onOK() {
this.$emit('close', this.selects);
}
/**
* 取消
*
* @type {*}
* @memberof IBizGroupPicker
*/
public onCancel() {
this.$emit('close');
}
}
</script>
<style lang="less">
.ibiz-group-container {
display: flex;
height: calc(100% - 65px);
.ibiz-group-tree {
width: 400px;
border-right: 1px solid #ddd;
padding: 0 10px;
overflow: auto;
height: 100%;
}
.ibiz-group-content {
flex-grow: 1;
padding: 0 10px;
overflow: auto;
height: 100%;
}
}
.ibiz-group-footer {
padding: 16px;
text-align: right;
border-top: 1px solid #ddd;
}
</style>
\ No newline at end of file
<template>
<div class="ibiz-group-select">
<div class="ibiz-group-content">
<span v-if="!multiple">
{{ selectName }}
</span>
<template v-else v-for="(select, index) of selects">
<div :key="index" class="ibiz-group-item">
{{ select.label }}
<i v-if="!disabled" class="el-icon-close" @click="remove(select)"></i>
</div>
</template>
</div>
<div v-if="!disabled" class="ibiz-group-open">
<i v-if="!disabled && !multiple && selects.length > 0" class="el-icon-close" @click="remove(selects[0])"></i>
<i class="el-icon-search" @click="openView"></i>
</div>
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop, Watch } from 'vue-property-decorator';
import { Subject } from 'rxjs';
@Component({})
export default class IBizGroupSelect extends Vue {
/**
* 名称标识
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() name!: string;
/**
* 树加载地址
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() treeurl?:boolean;
/**
* 数据接口地址
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() url!: string;
/**
* 多选
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop({default: false}) multiple?: boolean;
/**
* 数据对象
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() data: any;
/**
* 过滤属性标识
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() filter?: string;
/**
* 是否启用
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() disabled?: boolean;
/**
* 值
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() value: any;
/**
* 上下文参数
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() context: any;
/**
* 关联属性
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() valueitem: any;
/**
* 填充属性
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Prop() fillmap: any;
/**
* 选中项集合
*
* @type {*}
* @memberof IBizGroupSelect
*/
protected selects: any[] = [];
/**
* 值变化
*
* @type {*}
* @memberof IBizGroupSelect
*/
@Watch('value')
onValueChange(newVal: any) {
this.selects = [];
if (newVal) {
let item: any = {};
item.label = newVal.split(',');
if(this.valueitem) {
item.id = this.data[this.valueitem] ? this.data[this.valueitem].split(',') : [];
}
if(this.fillmap) {
for(let key in this.fillmap) {
item[this.fillmap[key]] = this.data[key] ? this.data[key].split(',') : [];
}
}
item.label.forEach((val: string, index: number) => {
let _item: any = {};
for(let key in item) {
_item[key] = item[key][index] ? item[key][index] : null;
}
this.selects.push(_item)
})
}
}
/**
* 单选时选中名称
*
* @type {*}
* @memberof IBizGroupSelect
*/
get selectName() {
if(this.selects.length > 0) {
return this.selects[0].label;
}
}
/**
* 打开选择视图
*
* @type {*}
* @memberof IBizGroupSelect
*/
public openView() {
const view: any = {
viewname: 'ibiz-group-picker',
title: '分组选择'
};
const context: any = JSON.parse(JSON.stringify(this.context));
let filtervalue:string = "";
if(this.filter){
if(this.data[this.filter]){
filtervalue = this.data[this.filter];
}else if(context[this.filter]){
filtervalue = context[this.filter];
}else{
filtervalue = context.srforgid;
}
}else{
filtervalue = context.srforgid;
}
const param: any = {};
Object.assign(param, {
showtree: this.treeurl?true:false,
url:this.url,
treeurl:this.treeurl,
filtervalue: filtervalue,
multiple: this.multiple,
selects: this.selects
});
let container: Subject<any> = this.$appmodal.openModal(view, context, param);
container.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
return;
}
this.openViewClose(result);
});
}
/**
* 选择视图关闭
*
* @type {*}
* @memberof IBizGroupSelect
*/
public openViewClose(result: any) {
this.selects = [];
if (result.datas && result.datas.length > 0) {
this.selects = result.datas
}
this.setValue()
}
/**
* 数据删除
*
* @type {*}
* @memberof IBizGroupSelect
*/
public remove(item: any) {
this.selects.splice(this.selects.indexOf(item), 1);
this.setValue()
}
/**
* 设置值
*
* @type {*}
* @memberof IBizGroupSelect
*/
public setValue() {
let item: any = {};
item[this.name] = null;
if(this.valueitem) {
item[this.valueitem] = null;
}
if(this.fillmap) {
for(let key in this.fillmap) {
item[key] = null;
}
}
if(this.multiple) {
this.selects.forEach((select: any) => {
item[this.name] = item[this.name] ? `${item[this.name]},${select.label}` : select.label;
if(this.valueitem) {
item[this.valueitem] = item[this.valueitem] ? `${item[this.valueitem]},${select.id}` : select.id;
}
if(this.fillmap) {
for(let key in this.fillmap) {
item[key] = item[key] ? `${item[key]},${select[this.fillmap[key]]}` : select[this.fillmap[key]];
}
}
});
} else {
item = this.selects.length > 0 ? this.selects[0] : {};
item[this.name] = this.selects.length > 0 ? this.selects[0].label : null;
if(this.valueitem) {
item[this.valueitem] = this.selects.length > 0 ? this.selects[0].id : null;
}
if(this.fillmap) {
for(let key in this.fillmap) {
item[key] = this.selects.length > 0 ? this.selects[0][this.fillmap[key]] : null;
}
}
}
for(let key in item) {
this.$emit('formitemvaluechange', { name: key, value: item[key] });
}
}
}
</script>
<style lang="less">
.ibiz-group-select {
width: 100%;
display: flex;
border: 1px solid #DCDFE6;
min-height: 32px;
border-radius: 4px;
.ibiz-group-content {
flex-grow: 1;
padding: 0 16px;
.ibiz-group-item {
display: inline-block;
border: 1px solid #bbb;
line-height: 24px;
border-radius: 5px;
margin-right: 5px;
padding: 0 5px;
}
}
.ibiz-group-open {
display: flex;
text-align: center;
align-items: center;
padding: 0 5px;
}
}
.ibiz-group-select:hover {
border-color: #108cee;
}
</style>
\ No newline at end of file
...@@ -26,28 +26,45 @@ ...@@ -26,28 +26,45 @@
top: 50%; top: 50%;
transform: translateY(-60%); transform: translateY(-60%);
width: 300px; width: 300px;
.ivu-card-head { .ivu-card{
padding: 14px 6px; border-radius: 15px;
>p{ .ivu-card-head {
line-height: 20px; padding: 14px 6px;
font-size: 14px; >p{
color: #17233d; line-height: 20px;
font-weight: 700; font-size: 20px;
color: #17233d;
font-weight: 700;
text-align:center;
}
} }
} &-header{
&-header{ font-size: 16px;
font-size: 16px; font-weight: 300;
font-weight: 300; text-align: center;
text-align: center; padding: 30px 0;
padding: 30px 0; }
} .form-con{
.form-con{ padding: 10px 0 0;
padding: 10px 0 0; .ivu-form-item{
} margin-bottom: 20px;
.login-tip{ }
font-size: 10px; p{
text-align: center; font-size: 14px;
color: #c3c3c3; font-weight: bold;
} height: 21px;
line-height: 21px;
}
button{
background-image: linear-gradient(to bottom,#8bbcf1 0%,#2d8cf0 100%);
border-color:#8bbcf1;
}
}
.login-tip{
font-size: 10px;
text-align: center;
color: #5f4949;
}
}
} }
} }
\ No newline at end of file
...@@ -10,12 +10,14 @@ ...@@ -10,12 +10,14 @@
<div class='login-con'> <div class='login-con'>
<card :bordered="false"> <card :bordered="false">
<p slot='title'> <p slot='title'>
<icon type='ios-log-in'></icon> <!-- <icon type='ios-log-in'></icon> -->
&nbsp;&nbsp;{{this.$t('components.login.caption')}} <!-- &nbsp;&nbsp; -->
{{this.$t('components.login.caption')}}
</p> </p>
<div class='form-con'> <div class='form-con'>
<i-form ref='loginForm' :rules="rules" :model="form"> <i-form ref='loginForm' :rules="rules" :model="form">
<form-item prop='loginname'> <form-item prop='loginname'>
<p>用户名</p>
<i-input <i-input
prefix='ios-contact' prefix='ios-contact'
v-model="form.loginname" v-model="form.loginname"
...@@ -23,6 +25,7 @@ ...@@ -23,6 +25,7 @@
</i-input> </i-input>
</form-item> </form-item>
<form-item prop='password'> <form-item prop='password'>
<p>密码</p>
<i-input <i-input
prefix='ios-key' prefix='ios-key'
v-model="form.password" v-model="form.password"
......
...@@ -201,11 +201,11 @@ export default class TabPageExp extends Vue { ...@@ -201,11 +201,11 @@ export default class TabPageExp extends Vue {
* @param {*} caption * @param {*} caption
* @memberof TabPageExp * @memberof TabPageExp
*/ */
public setCurPageCaption(routename: string, caption: any, info: string) { public setCurPageCaption(caption: string, title: any, info: string) {
if(!Object.is(this.$route.name, routename)) { if(this.$route.meta && (!Object.is(this.$route.meta.caption, caption))) {
return; return;
} }
this.$store.commit("setCurPageCaption", { route: this.$route, caption: caption, info: info }); this.$store.commit("setCurPageCaption", { route: this.$route, caption: title, info: info });
setTimeout(() => { setTimeout(() => {
this.moveToView(this.$route); this.moveToView(this.$route);
}, 1); }, 1);
......
...@@ -247,9 +247,9 @@ export default class EditViewEngine extends ViewEngine { ...@@ -247,9 +247,9 @@ export default class EditViewEngine extends ViewEngine {
*/ */
public setTabCaption(info: string): void { public setTabCaption(info: string): void {
let viewdata: any = this.view.model; let viewdata: any = this.view.model;
let viewParam = this.view.$store.getters['viewaction/getAppView'](this.view.viewtag); if (viewdata && info && !Object.is(info, '') && this.view.$tabPageExp && (viewdata.srfTitle.indexOf(" - ") === -1)) {
if (viewdata && viewParam && info && !Object.is(info, '') && this.view.$tabPageExp) { this.view.$tabPageExp.setCurPageCaption(viewdata.srfCaption, viewdata.srfTitle, info);
this.view.$tabPageExp.setCurPageCaption(`${viewParam.viewmodule}_${viewParam.viewname}`.toLocaleLowerCase(), viewdata.srfCaption, info); this.view.model.srfTitle = `${this.view.$t(viewdata.srfTitle)} - ${viewdata.dataInfo}`;
} }
} }
......
...@@ -35,4 +35,20 @@ export default class PickupTreeViewEngine extends TreeViewEngine { ...@@ -35,4 +35,20 @@ export default class PickupTreeViewEngine extends TreeViewEngine {
this.view.$emit('viewdataschange', args); this.view.$emit('viewdataschange', args);
} }
} }
/**
* 双击选中激活数据
*
* @param {string} ctrlName
* @param {string} eventName
* @param {*} args
* @memberof PickupTreeViewEngine
*/
public onCtrlEvent(ctrlName: string, eventName: string, args: any): void {
if (Object.is(ctrlName, 'tree') && Object.is(eventName, 'nodedblclick')) {
this.view.$emit('viewdatasactivated', args);
return ;
}
super.onCtrlEvent(ctrlName, eventName, args);
}
} }
\ No newline at end of file
...@@ -22,7 +22,7 @@ export const Environment = { ...@@ -22,7 +22,7 @@ export const Environment = {
// 是否为开发模式 // 是否为开发模式
devMode: true, devMode: true,
// 项目模板地址 // 项目模板地址
ProjectUrl: "http://demo.ibizlab.cn/groups/ibizr7pfstdtempl", ProjectUrl: "http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7",
// 配置平台地址 // 配置平台地址
StudioUrl: "http://172.16.170.145/slnstudio/", StudioUrl: "http://172.16.170.145/slnstudio/",
// 中心标识 // 中心标识
......
import { ChartSeries } from './chart-series';
/**
* 雷达图序列模型
*
* @export
* @class ChartRadarSeries
*/
export class ChartRadarSeries extends ChartSeries{
/**
* 分类属性
*
* @type {string}
* @memberof ChartRadarSeries
*/
public categorField: string = '';
/**
* 值属性
*
* @type {string}
* @memberof ChartRadarSeries
*/
public valueField: string = '';
/**
* 雷达图指示器
*
* @type {string}
* @memberof ChartRadarSeries
*/
public indicator: Array<any> = [];
/**
* 分类代码表
*
* @type {string}
* @memberof ChartRadarSeries
*/
public categorCodeList: any = null;
/**
* 维度编码
*
* @type {*}
* @memberof ChartRadarSeries
*/
public encode:any = null;
/**
* Creates an instance of ChartRadarSeries.
* ChartRadarSeries 实例
*
* @param {*} [opts={}]
* @memberof ChartRadarSeries
*/
constructor(opts: any = {}) {
super(opts);
this.categorField = !Object.is(opts.categorField, '') ? opts.categorField : '';
this.categorCodeList = opts.categorCodeList ? opts.categorCodeList : null;
this.valueField = !Object.is(opts.valueField, '') ? opts.valueField : '';
this.encode = opts.encode ? opts.encode : null;
this.indicator = opts.indicator ? opts.indicator:[];
}
/**
* 设置分类属性
*
* @param {string} state
* @memberof ChartRadarSeries
*/
public setCategorField(state: string): void {
this.categorField = state;
}
/**
* 设置序列名称
*
* @param {string} state
* @memberof ChartRadarSeries
*/
public setValueField(state: string): void {
this.valueField = state;
}
/**
* 分类代码表
*
* @param {*} state
* @memberof ChartRadarSeries
*/
public setCategorCodeList(state: any): void {
this.categorCodeList = state;
}
/**
* 设置编码
*
* @param {*} state
* @memberof ChartRadarSeries
*/
public setEncode(state: any): void {
this.encode = state;
}
/**
* 设置雷达图指示器
*
* @param {*} state
* @memberof ChartRadarSeries
*/
public setIndicator(state: any): void {
this.indicator = state;
}
}
\ No newline at end of file
...@@ -2,4 +2,5 @@ export { ChartDataSetField } from './chart-dataset-field'; ...@@ -2,4 +2,5 @@ export { ChartDataSetField } from './chart-dataset-field';
export { ChartLineSeries } from './chart-line-series'; export { ChartLineSeries } from './chart-line-series';
export { ChartFunnelSeries } from './chart-funnel-series'; export { ChartFunnelSeries } from './chart-funnel-series';
export { ChartPieSeries } from './chart-pie-series'; export { ChartPieSeries } from './chart-pie-series';
export { ChartBarSeries } from './chart-bar-series'; export { ChartBarSeries } from './chart-bar-series';
\ No newline at end of file export { ChartRadarSeries } from './chart-radar-series';
\ No newline at end of file
...@@ -561,46 +561,46 @@ export default class SDFileEditViewBase extends Vue { ...@@ -561,46 +561,46 @@ export default class SDFileEditViewBase extends Vue {
*/ */
public toolbar_click($event: any, $event2?: any) { public toolbar_click($event: any, $event2?: any) {
if (Object.is($event.tag, 'tbitem3')) { if (Object.is($event.tag, 'tbitem3')) {
this.toolbar_tbitem3_click($event, '', $event2); this.toolbar_tbitem3_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem4')) { if (Object.is($event.tag, 'tbitem4')) {
this.toolbar_tbitem4_click($event, '', $event2); this.toolbar_tbitem4_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem5')) { if (Object.is($event.tag, 'tbitem5')) {
this.toolbar_tbitem5_click($event, '', $event2); this.toolbar_tbitem5_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem7')) { if (Object.is($event.tag, 'tbitem7')) {
this.toolbar_tbitem7_click($event, '', $event2); this.toolbar_tbitem7_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem9')) { if (Object.is($event.tag, 'tbitem9')) {
this.toolbar_tbitem9_click($event, '', $event2); this.toolbar_tbitem9_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem10')) { if (Object.is($event.tag, 'tbitem10')) {
this.toolbar_tbitem10_click($event, '', $event2); this.toolbar_tbitem10_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem12')) { if (Object.is($event.tag, 'tbitem12')) {
this.toolbar_tbitem12_click($event, '', $event2); this.toolbar_tbitem12_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem14')) { if (Object.is($event.tag, 'tbitem14')) {
this.toolbar_tbitem14_click($event, '', $event2); this.toolbar_tbitem14_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem15')) { if (Object.is($event.tag, 'tbitem15')) {
this.toolbar_tbitem15_click($event, '', $event2); this.toolbar_tbitem15_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem23')) { if (Object.is($event.tag, 'tbitem23')) {
this.toolbar_tbitem23_click($event, '', $event2); this.toolbar_tbitem23_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem24')) { if (Object.is($event.tag, 'tbitem24')) {
this.toolbar_tbitem24_click($event, '', $event2); this.toolbar_tbitem24_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem25')) { if (Object.is($event.tag, 'tbitem25')) {
this.toolbar_tbitem25_click($event, '', $event2); this.toolbar_tbitem25_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem26')) { if (Object.is($event.tag, 'tbitem26')) {
this.toolbar_tbitem26_click($event, '', $event2); this.toolbar_tbitem26_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem22')) { if (Object.is($event.tag, 'tbitem22')) {
this.toolbar_tbitem22_click($event, '', $event2); this.toolbar_tbitem22_click(null, '', $event2);
} }
} }
...@@ -664,6 +664,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -664,6 +664,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Save(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Save(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -690,6 +693,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -690,6 +693,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.SaveAndNew(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.SaveAndNew(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -716,6 +722,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -716,6 +722,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.SaveAndExit(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.SaveAndExit(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -742,6 +751,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -742,6 +751,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.RemoveAndExit(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.RemoveAndExit(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -768,6 +780,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -768,6 +780,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.SaveAndStart(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.SaveAndStart(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -794,6 +809,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -794,6 +809,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.ViewWFStep(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.ViewWFStep(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -820,6 +838,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -820,6 +838,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.New(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.New(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -846,6 +867,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -846,6 +867,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Copy(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Copy(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -872,6 +896,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -872,6 +896,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Print(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Print(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -898,6 +925,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -898,6 +925,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.FirstRecord(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.FirstRecord(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -924,6 +954,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -924,6 +954,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.PrevRecord(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.PrevRecord(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -950,6 +983,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -950,6 +983,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.NextRecord(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.NextRecord(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -976,6 +1012,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -976,6 +1012,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.LastRecord(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.LastRecord(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -1002,6 +1041,9 @@ export default class SDFileEditViewBase extends Vue { ...@@ -1002,6 +1041,9 @@ export default class SDFileEditViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Help(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Help(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -1227,14 +1269,14 @@ export default class SDFileEditViewBase extends Vue { ...@@ -1227,14 +1269,14 @@ export default class SDFileEditViewBase extends Vue {
const data: any = {}; const data: any = {};
if (args.length > 0) { if (args.length > 0) {
Object.assign(data, { srfsourcekey: args[0].srfkey }) Object.assign(data, { srfsourcekey: args[0].srfkey })
actionContext.$store.commit('addCopyData', { srfkey: args[0].srfkey, copyData: args[0] });
} }
_this.newdata([{ ...data }],[{ ...data }],params, $event, xData); _this.newdata([{ ...data }],[{ ...data }],params, $event, xData);
} else if (xData && xData.copy instanceof Function) { } else if (xData && xData.copy instanceof Function) {
const data2: any = {};
if (args.length > 0) { if (args.length > 0) {
Object.assign(data2, { srfsourcekey: args[0].srfkey }) actionContext.$store.commit('addCopyData', { srfkey: args[0].srfkey, copyData: args[0] });
} }
xData.copy(data2); xData.copy(args[0].srfkey);
} else { } else {
_this.$Notice.error({ title: '错误', desc: 'opendata 视图处理逻辑不存在,请添加!' }); _this.$Notice.error({ title: '错误', desc: 'opendata 视图处理逻辑不存在,请添加!' });
} }
......
<template> <template>
<div class='view-container degridview sdfile-grid-view'> <div class='view-container degridview sdfile-grid-view'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="sdfilegridview"></app-studioaction> <app-studioaction :viewTitle="$t(model.srfTitle)" viewName="sdfilegridview"></app-studioaction>
<card class='view-card ' :dis-hover="true" :bordered="false"> <card class='view-card ' :dis-hover="true" :bordered="false">
<p slot='title'> <p slot='title'>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<div class='view-top-messages'> <div class='view-top-messages'>
</div> </div>
<div style='margin-bottom: 6px;'> <div style='margin-bottom: 6px;'>
<i-input v-show="!isExpandSearchForm" v-model="query" search enter-button @on-search="onSearch($event)" class='quick-search-input' style='max-width: 400px;' /> <i-input v-show="!isExpandSearchForm" v-model="query" search enter-button @on-search="onSearch($event)" class='quick-search-input' style='max-width: 400px;' placeholder="" />
<div class='pull-right'> <div class='pull-right'>
<div class='toolbar-container'> <div class='toolbar-container'>
<tooltip :transfer="true" :max-width="600"> <tooltip :transfer="true" :max-width="600">
...@@ -604,43 +604,43 @@ export default class SDFileGridViewBase extends Vue { ...@@ -604,43 +604,43 @@ export default class SDFileGridViewBase extends Vue {
*/ */
public toolbar_click($event: any, $event2?: any) { public toolbar_click($event: any, $event2?: any) {
if (Object.is($event.tag, 'tbitem3')) { if (Object.is($event.tag, 'tbitem3')) {
this.toolbar_tbitem3_click($event, '', $event2); this.toolbar_tbitem3_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem4')) { if (Object.is($event.tag, 'tbitem4')) {
this.toolbar_tbitem4_click($event, '', $event2); this.toolbar_tbitem4_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem5')) { if (Object.is($event.tag, 'tbitem5')) {
this.toolbar_tbitem5_click($event, '', $event2); this.toolbar_tbitem5_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem6')) { if (Object.is($event.tag, 'tbitem6')) {
this.toolbar_tbitem6_click($event, '', $event2); this.toolbar_tbitem6_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem24')) { if (Object.is($event.tag, 'tbitem24')) {
this.toolbar_tbitem24_click($event, '', $event2); this.toolbar_tbitem24_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem25')) { if (Object.is($event.tag, 'tbitem25')) {
this.toolbar_tbitem25_click($event, '', $event2); this.toolbar_tbitem25_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem8')) { if (Object.is($event.tag, 'tbitem8')) {
this.toolbar_tbitem8_click($event, '', $event2); this.toolbar_tbitem8_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem13')) { if (Object.is($event.tag, 'tbitem13')) {
this.toolbar_tbitem13_click($event, '', $event2); this.toolbar_tbitem13_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem11')) { if (Object.is($event.tag, 'tbitem11')) {
this.toolbar_tbitem11_click($event, '', $event2); this.toolbar_tbitem11_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem21')) { if (Object.is($event.tag, 'tbitem21')) {
this.toolbar_tbitem21_click($event, '', $event2); this.toolbar_tbitem21_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem23')) { if (Object.is($event.tag, 'tbitem23')) {
this.toolbar_tbitem23_click($event, '', $event2); this.toolbar_tbitem23_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem19')) { if (Object.is($event.tag, 'tbitem19')) {
this.toolbar_tbitem19_click($event, '', $event2); this.toolbar_tbitem19_click(null, '', $event2);
} }
if (Object.is($event.tag, 'tbitem18')) { if (Object.is($event.tag, 'tbitem18')) {
this.toolbar_tbitem18_click($event, '', $event2); this.toolbar_tbitem18_click(null, '', $event2);
} }
} }
...@@ -764,6 +764,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -764,6 +764,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.New(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.New(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -790,6 +793,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -790,6 +793,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Edit(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Edit(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -816,6 +822,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -816,6 +822,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.View(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.View(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -842,6 +851,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -842,6 +851,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Copy(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Copy(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -868,6 +880,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -868,6 +880,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.ToggleRowEdit(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.ToggleRowEdit(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -894,6 +909,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -894,6 +909,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.NewRow(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.NewRow(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -920,6 +938,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -920,6 +938,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Remove(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Remove(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -946,6 +967,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -946,6 +967,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.ExportExcel(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.ExportExcel(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -972,6 +996,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -972,6 +996,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Print(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Print(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -998,6 +1025,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -998,6 +1025,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.ExportModel(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.ExportModel(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -1024,6 +1054,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -1024,6 +1054,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Import(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Import(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -1050,6 +1083,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -1050,6 +1083,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.ToggleFilter(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.ToggleFilter(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -1076,6 +1112,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -1076,6 +1112,9 @@ export default class SDFileGridViewBase extends Vue {
if (xData.getDatas && xData.getDatas instanceof Function) { if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()]; datas = [...xData.getDatas()];
} }
if(params){
datas = [params];
}
// 界面行为 // 界面行为
this.Help(datas, contextJO,paramJO, $event, xData,this,"SDFile"); this.Help(datas, contextJO,paramJO, $event, xData,this,"SDFile");
} }
...@@ -1092,6 +1131,9 @@ export default class SDFileGridViewBase extends Vue { ...@@ -1092,6 +1131,9 @@ export default class SDFileGridViewBase extends Vue {
*/ */
public newdata(args: any[],fullargs?:any[], params?: any, $event?: any, xData?: any) { public newdata(args: any[],fullargs?:any[], params?: any, $event?: any, xData?: any) {
const data: any = {}; const data: any = {};
if(args[0].srfsourcekey){
data.srfsourcekey = args[0].srfsourcekey;
}
let curViewParam = JSON.parse(JSON.stringify(this.context)); let curViewParam = JSON.parse(JSON.stringify(this.context));
if(args.length >0){ if(args.length >0){
Object.assign(curViewParam,args[0]); Object.assign(curViewParam,args[0]);
...@@ -1260,14 +1302,14 @@ export default class SDFileGridViewBase extends Vue { ...@@ -1260,14 +1302,14 @@ export default class SDFileGridViewBase extends Vue {
const data: any = {}; const data: any = {};
if (args.length > 0) { if (args.length > 0) {
Object.assign(data, { srfsourcekey: args[0].srfkey }) Object.assign(data, { srfsourcekey: args[0].srfkey })
actionContext.$store.commit('addCopyData', { srfkey: args[0].srfkey, copyData: args[0] });
} }
_this.newdata([{ ...data }],[{ ...data }],params, $event, xData); _this.newdata([{ ...data }],[{ ...data }],params, $event, xData);
} else if (xData && xData.copy instanceof Function) { } else if (xData && xData.copy instanceof Function) {
const data2: any = {};
if (args.length > 0) { if (args.length > 0) {
Object.assign(data2, { srfsourcekey: args[0].srfkey }) actionContext.$store.commit('addCopyData', { srfkey: args[0].srfkey, copyData: args[0] });
} }
xData.copy(data2); xData.copy(args[0].srfkey);
} else { } else {
_this.$Notice.error({ title: '错误', desc: 'opendata 视图处理逻辑不存在,请添加!' }); _this.$Notice.error({ title: '错误', desc: 'opendata 视图处理逻辑不存在,请添加!' });
} }
......
...@@ -4,12 +4,14 @@ import VueRouter from 'vue-router'; ...@@ -4,12 +4,14 @@ import VueRouter from 'vue-router';
import App from '@/App.vue'; import App from '@/App.vue';
import ElementUi from 'element-ui'; import ElementUi from 'element-ui';
import ViewUI from 'view-design'; import ViewUI from 'view-design';
import ibizLab from 'ibiz-vue-lib';
import { Interceptors } from '@/utils'; import { Interceptors } from '@/utils';
import {Print} from '@/utils/print'; import {Print} from '@/utils/print';
import i18n from '@/locale' import i18n from '@/locale'
import 'element-ui/lib/theme-chalk/index.css'; import 'element-ui/lib/theme-chalk/index.css';
import 'view-design/dist/styles/iview.css'; import 'view-design/dist/styles/iview.css';
import 'ibiz-vue-lib/lib/ibiz-vue-lib.css';
import '@/styles/default.less'; import '@/styles/default.less';
...@@ -30,7 +32,8 @@ Vue.config.errorHandler = function (err: any, vm: any, info: any) { ...@@ -30,7 +32,8 @@ Vue.config.errorHandler = function (err: any, vm: any, info: any) {
console.log(err); console.log(err);
} }
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.use(Print) Vue.use(Print);
Vue.use(ibizLab);
Vue.use(Vuex); Vue.use(Vuex);
Vue.use(VueRouter);; Vue.use(VueRouter);;
Vue.use(ElementUi, { Vue.use(ElementUi, {
......
...@@ -619,7 +619,22 @@ export default class EntityService { ...@@ -619,7 +619,22 @@ export default class EntityService {
* @memberof EntityService * @memberof EntityService
*/ */
public async removeBatch(context: any = {},data: any, isloading?: boolean): Promise<any> { public async removeBatch(context: any = {},data: any, isloading?: boolean): Promise<any> {
return Http.getInstance().delete(`/${this.APPDENAME}/batch`,isloading,data); return Http.getInstance().delete(`/${this.APPDENAME}/batch`,isloading,data[this.APPDEKEY]);
}
/**
* getDataInfo接口方法
*
* @param {*} [context={}]
* @param {*} [data]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof EntityService
*/
public async getDataInfo(context: any = {},data: any, isloading?: boolean):Promise<any> {
if(context[this.APPLYDEKEY]){
return this.Get(context,data, isloading);
}
} }
/** /**
...@@ -765,6 +780,19 @@ export default class EntityService { ...@@ -765,6 +780,19 @@ export default class EntityService {
return Http.getInstance().get(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/${context[this.APPLYDEKEY]}/usertasks/${data['taskDefinitionKey']}/ways`); return Http.getInstance().get(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/${context[this.APPLYDEKEY]}/usertasks/${data['taskDefinitionKey']}/ways`);
} }
/**
* GetWFHistory接口方法(根据业务主键获取工作流程记录)
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof EntityService
*/
public async GetWFHistory(context: any = {},data: any = {}, isloading?: boolean):Promise<any> {
return Http.getInstance().get(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/${context[this.APPLYDEKEY]}/process-instances/alls/history`);
}
/** /**
* WFSubmit接口方法 * WFSubmit接口方法
* *
......
...@@ -75,4 +75,37 @@ export const getZIndex = (state: any) => () => { ...@@ -75,4 +75,37 @@ export const getZIndex = (state: any) => () => {
*/ */
export const getViewSplit = (state: any) => (viewUID: string) => { export const getViewSplit = (state: any) => (viewUID: string) => {
return state.viewSplit[viewUID]; return state.viewSplit[viewUID];
}
/**
* 获取拷贝数据
*
* @param state
*/
export const getCopyData = (state: any) => (srfkey: string) => {
let copyData = state.copyDataMap[srfkey];
if(copyData){
delete state.copyDataMap[srfkey];
}
return copyData;
}
/**
* 获取单位数据
*
* @param state
*/
export const getOrgData = (state: any) => (srfkey: string) => {
let orgData = state.orgDataMap[srfkey];
return orgData;
}
/**
* 获取部门数据
*
* @param state
*/
export const getDepData = (state: any) => (srfkey: string) => {
let depData = state.depDataMap[srfkey];
return depData;
} }
\ No newline at end of file
...@@ -253,4 +253,40 @@ export const updateZIndex = (state: any, zIndex: number) => { ...@@ -253,4 +253,40 @@ export const updateZIndex = (state: any, zIndex: number) => {
*/ */
export const setViewSplit = (state: any, args: {viewSplit: number,viewUID:string}) => { export const setViewSplit = (state: any, args: {viewSplit: number,viewUID:string}) => {
state.viewSplit[args.viewUID] = args.viewSplit; state.viewSplit[args.viewUID] = args.viewSplit;
}
/**
* 添加拷贝数据
*
* @param state
* @param localdata
*/
export const addCopyData = (state: any, args: {srfkey: string,copyData: any}) => {
if(args && args.srfkey && args.copyData){
state.copyDataMap[args.srfkey] = JSON.parse(JSON.stringify(args.copyData));
}
}
/**
* 添加单位数据
*
* @param state
* @param args
*/
export const addOrgData = (state: any, args: {srfkey: string,orgData: any}) => {
if(args && args.srfkey && args.orgData){
state.orgDataMap[args.srfkey] = JSON.parse(JSON.stringify(args.orgData));
}
}
/**
* 添加部门数据
*
* @param state
* @param args
*/
export const addDepData = (state: any, args: {srfkey: string,depData: any}) => {
if(args && args.srfkey && args.depData){
state.depDataMap[args.srfkey] = JSON.parse(JSON.stringify(args.depData));
}
} }
\ No newline at end of file
...@@ -13,4 +13,7 @@ export const rootstate: any = { ...@@ -13,4 +13,7 @@ export const rootstate: any = {
localdata: {}, localdata: {},
zIndex: 300, zIndex: 300,
viewSplit: {}, viewSplit: {},
copyDataMap:{},
orgDataMap:{},
depDataMap:{},
} }
\ No newline at end of file
...@@ -92,7 +92,7 @@ export class StudioActionUtil { ...@@ -92,7 +92,7 @@ export class StudioActionUtil {
const config: any = await this.getConfig(viewName); const config: any = await this.getConfig(viewName);
if (config) { if (config) {
const context: string = `视图模块:${config.viewmodule}\n视图标识:${config.viewname}\n视图类型:${config.viewtype}\n`; const context: string = `视图模块:${config.viewmodule}\n视图标识:${config.viewname}\n视图类型:${config.viewtype}\n`;
window.open(`${Environment.ProjectUrl}/issues/`, '_blank'); window.open(`${Environment.ProjectUrl}/issues/new?issue[title]=${encodeURIComponent('问题')}&issue[description]=${encodeURIComponent(context)}`, '_blank');
} }
} }
......
...@@ -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" {
......
...@@ -41,6 +41,7 @@ export class UIActionTool { ...@@ -41,6 +41,7 @@ export class UIActionTool {
if (Object.is(actionTarget, 'SINGLEKEY')) { if (Object.is(actionTarget, 'SINGLEKEY')) {
let [arg] = args; let [arg] = args;
Object.keys(_params).forEach((name: string) => { Object.keys(_params).forEach((name: string) => {
let hasProperty = true;
if (!name) { if (!name) {
return; return;
} }
...@@ -50,13 +51,16 @@ export class UIActionTool { ...@@ -50,13 +51,16 @@ export class UIActionTool {
if (arg && arg.hasOwnProperty(key)) { if (arg && arg.hasOwnProperty(key)) {
value = (arg[key] !== null && arg[key] !== undefined) ? arg[key] : null; value = (arg[key] !== null && arg[key] !== undefined) ? arg[key] : null;
} else { } else {
value = null; hasProperty = false;
} }
} }
Object.assign(_data, { [name]: value }); if(hasProperty){
Object.assign(_data, { [name]: value });
}
}); });
} else if (Object.is(actionTarget, 'MULTIKEY')) { } else if (Object.is(actionTarget, 'MULTIKEY')) {
Object.keys(_params).forEach((name: string) => { Object.keys(_params).forEach((name: string) => {
let noPropertyNum = 0;
if (!name) { if (!name) {
return; return;
} }
...@@ -69,11 +73,14 @@ export class UIActionTool { ...@@ -69,11 +73,14 @@ export class UIActionTool {
value = (arg[key] !== null && arg[key] !== undefined) ? arg[key] : null; value = (arg[key] !== null && arg[key] !== undefined) ? arg[key] : null;
} else { } else {
value = null; value = null;
noPropertyNum++;
} }
values.push(value); values.push(value);
}); });
} }
Object.assign(_data, { [name]: values.length > 0 ? values.join(';') : value }); if(values.length !== noPropertyNum){
Object.assign(_data, { [name]: values.length > 0 ? values.join(';') : value });
}
}); });
} }
return _data; return _data;
......
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
import { Store } from 'vuex'; import { Store } from 'vuex';
import { Util } from '@/utils/util/util'; import { Util } from '@/utils/util/util';
import CodeListService from "@service/app/codelist-service";
/** /**
* 部件服务基类 * 部件服务基类
...@@ -26,6 +27,14 @@ export default class ControlService { ...@@ -26,6 +27,14 @@ export default class ControlService {
*/ */
public model: any | null = null; public model: any | null = null;
/**
* 代码表服务对象
*
* @type {any}
* @memberof ControlService
*/
public codeListService:any;
/** /**
* 是否为从数据模式 * 是否为从数据模式
* *
...@@ -43,6 +52,7 @@ export default class ControlService { ...@@ -43,6 +52,7 @@ export default class ControlService {
constructor(opts: any = {}) { constructor(opts: any = {}) {
this.$store = opts.$store; this.$store = opts.$store;
this.setTempMode(); this.setTempMode();
this.codeListService = new CodeListService({ $store:opts.$store });
} }
/** /**
...@@ -118,31 +128,41 @@ export default class ControlService { ...@@ -118,31 +128,41 @@ export default class ControlService {
* @param {*} response * @param {*} response
* @memberof ControlService * @memberof ControlService
*/ */
public handleResponse(action: string, response: any,isCreate:boolean = false){ public async handleResponse(action: string, response: any,isCreate:boolean = false){
let result = null; let result = null;
if (!response.data) { if (!response.data) {
return return
} else if (response.data instanceof Array) {
result = [];
response.data.forEach((item:any) =>{
result.push(this.handleResponseData(action, item, isCreate));
});
}else{
result = this.handleResponseData(action, response.data, isCreate);
} }
// response状态,头文件 const handleResult:any = (action: string, response: any,isCreate:boolean,codelistArray?:any) =>{
if(response.headers){ if (response.data instanceof Array) {
if(response.headers['x-page']){ result = [];
Object.assign(response,{page:Number(response.headers['x-page'])}); response.data.forEach((item:any) =>{
} result.push(this.handleResponseData(action, item, isCreate,codelistArray));
if(response.headers['x-per-page']){ });
Object.assign(response,{size:Number(response.headers['x-per-page'])}); }else{
result = this.handleResponseData(action, response.data, isCreate,codelistArray);
} }
if(response.headers['x-total']){ // response状态,头文件
Object.assign(response,{total:Number(response.headers['x-total'])}); if(response.headers){
if(response.headers['x-page']){
Object.assign(response,{page:Number(response.headers['x-page'])});
}
if(response.headers['x-per-page']){
Object.assign(response,{size:Number(response.headers['x-per-page'])});
}
if(response.headers['x-total']){
Object.assign(response,{total:Number(response.headers['x-total'])});
}
} }
response.data = result;
}
let codelistModel:Array<any> = this.handleCodelist();
if(codelistModel.length >0){
let res:any = await this.getAllCodeList(codelistModel);
handleResult(action, response,isCreate,res);
}else{
handleResult(action, response,isCreate);
} }
response.data = result;
} }
/** /**
...@@ -152,7 +172,7 @@ export default class ControlService { ...@@ -152,7 +172,7 @@ export default class ControlService {
* @param {*} response * @param {*} response
* @memberof ControlService * @memberof ControlService
*/ */
public handleResponseData(action: string, data: any = {},isCreate?:boolean){ public handleResponseData(action: string, data: any = {},isCreate?:boolean,codelistArray?:any){
let model: any = this.getMode(); let model: any = this.getMode();
if (!model && model.getDataItems instanceof Function) { if (!model && model.getDataItems instanceof Function) {
return data; return data;
...@@ -167,10 +187,13 @@ export default class ControlService { ...@@ -167,10 +187,13 @@ export default class ControlService {
if((isCreate === undefined || isCreate === null ) && Object.is(dataitem.dataType, 'GUID') && Object.is(dataitem.name, 'srfkey') && (val && !Object.is(val, ''))){ if((isCreate === undefined || isCreate === null ) && Object.is(dataitem.dataType, 'GUID') && Object.is(dataitem.name, 'srfkey') && (val && !Object.is(val, ''))){
isCreate = true; isCreate = true;
} }
// if((Object.is(dataitem.dataType,'DATE') || Object.is(dataitem.dataType,'DATETIME')) && !Object.is(Date.parse(val),NaN)){
// val = Util.dateFormat(new Date(val));
// }
item[dataitem.name] = val; item[dataitem.name] = val;
// 转化代码表
if(codelistArray && dataitem.codelist){
if(codelistArray.get(dataitem.codelist.tag) && codelistArray.get(dataitem.codelist.tag).get(val)){
item[dataitem.name] = codelistArray.get(dataitem.codelist.tag).get(val);
}
}
}); });
item.srfuf = data.srfuf ? data.srfuf : (isCreate ? "0" : "1"); item.srfuf = data.srfuf ? data.srfuf : (isCreate ? "0" : "1");
return item; return item;
...@@ -199,4 +222,88 @@ export default class ControlService { ...@@ -199,4 +222,88 @@ export default class ControlService {
return requestData; return requestData;
} }
/**
* 处理代码表
*
* @memberof ControlService
*/
public handleCodelist(){
let model: any = this.getMode();
if (!model) {
return [];
}
let dataItems: any[] = model.getDataItems();
let codelistMap:Map<string,any> = new Map();
if(dataItems && dataItems.length >0){
dataItems.forEach((item:any) =>{
if(item.codelist){
codelistMap.set(item.name,item.codelist);
}
})
}
if(codelistMap.size >0){
return Array.from(codelistMap).map(item => item[1]);
}else{
return [];
}
}
/**
* 获取所有代码表
*
* @param codelistArray 代码表模型数组
* @memberof ControlService
*/
public getAllCodeList(codelistArray:Array<any>):Promise<any>{
return new Promise((resolve:any,reject:any) =>{
let codeListMap:Map<string,any> = new Map();
let promiseArray:Array<any> = [];
codelistArray.forEach((item:any) =>{
if(!codeListMap.get(item.tag)){
promiseArray.push(this.getCodeList(item));
Promise.all(promiseArray).then((result:any) =>{
if(result && result.length >0){
result.forEach((codeList:any) =>{
let tempCodeListMap:Map<number,any> = new Map();
if(codeList.length >0){
codeList.forEach((codeListItem:any) =>{
tempCodeListMap.set(codeListItem.value,codeListItem.text);
})
}
codeListMap.set(item.tag,tempCodeListMap);
})
resolve(codeListMap);
}
})
}
})
})
}
/**
* 获取代码表
*
* @param codeListObject 传入代码表对象
* @memberof ControlService
*/
public getCodeList(codeListObject:any):Promise<any>{
return new Promise((resolve:any,reject:any) =>{
if(codeListObject.tag && Object.is(codeListObject.codelistType,"STATIC")){
const codelist = (this.getStore() as Store<any>).getters.getCodeList(codeListObject.tag);
if (codelist) {
resolve([...JSON.parse(JSON.stringify(codelist.items))]);
} else {
resolve([]);
console.log(`----${codeListObject.tag}----代码表不存在`);
}
}else if(codeListObject.tag && Object.is(codeListObject.codelistType,"DYNAMIC")){
this.codeListService.getItems(codeListObject.tag).then((res:any) => {
resolve(res);
}).catch((error:any) => {
resolve([]);
console.log(`----${codeListObject.tag}----代码表不存在`);
});
}
})
}
} }
\ No newline at end of file
...@@ -4,5 +4,5 @@ Tip: If the failing expression is known to be legally refer to something that's ...@@ -4,5 +4,5 @@ Tip: If the failing expression is known to be legally refer to something that's
---- ----
FTL stack trace ("~" means nesting-related): FTL stack trace ("~" means nesting-related):
- Failed at: ${appde.getKeyPSAppDEField().getCodeN... [in template "TEMPLCODE_zh_CN" at line 348, column 14] - Failed at: ${appde.getKeyPSAppDEField().getCodeN... [in template "TEMPLCODE_zh_CN" at line 349, column 14]
---- ----
\ No newline at end of file
...@@ -4,5 +4,5 @@ Tip: If the failing expression is known to be legally refer to something that's ...@@ -4,5 +4,5 @@ Tip: If the failing expression is known to be legally refer to something that's
---- ----
FTL stack trace ("~" means nesting-related): FTL stack trace ("~" means nesting-related):
- Failed at: ${appde.getKeyPSAppDEField().getCodeN... [in template "TEMPLCODE_zh_CN" at line 348, column 14] - Failed at: ${appde.getKeyPSAppDEField().getCodeN... [in template "TEMPLCODE_zh_CN" at line 349, column 14]
---- ----
\ No newline at end of file
...@@ -4,5 +4,5 @@ Tip: If the failing expression is known to be legally refer to something that's ...@@ -4,5 +4,5 @@ Tip: If the failing expression is known to be legally refer to something that's
---- ----
FTL stack trace ("~" means nesting-related): FTL stack trace ("~" means nesting-related):
- Failed at: ${ctrl.getPSAppDataEntity().getMajorP... [in template "TEMPLCODE_zh_CN" at line 809, column 39] - Failed at: ${ctrl.getPSAppDataEntity().getMajorP... [in template "TEMPLCODE_zh_CN" at line 884, column 39]
---- ----
\ No newline at end of file
...@@ -25,6 +25,10 @@ ...@@ -25,6 +25,10 @@
overflow: hidden; overflow: hidden;
word-break: break-all; word-break: break-all;
} }
.el-table-column--selection .cell {
padding-left: 0px;
padding-right: 0px;
}
.app-column-link, .app-format-data{ .app-column-link, .app-format-data{
display: inline; display: inline;
} }
......
...@@ -15,7 +15,7 @@ module.exports = { ...@@ -15,7 +15,7 @@ module.exports = {
port: 8111, port: 8111,
compress: true, compress: true,
disableHostCheck: true, disableHostCheck: true,
// proxy: "http://127.0.0.1:8080/web", // proxy: "http://127.0.0.1:8080/",
historyApiFallback: { historyApiFallback: {
rewrites: [ rewrites: [
] ]
......
此差异已折叠。
...@@ -13,4 +13,5 @@ services: ...@@ -13,4 +13,5 @@ services:
networks: networks:
agent_network: agent_network:
driver: overlay driver: overlay
attachable: true attachable: true
\ No newline at end of file
...@@ -42,6 +42,9 @@ public class webSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -42,6 +42,9 @@ public class webSecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${ibiz.auth.path:v7/login}") @Value("${ibiz.auth.path:v7/login}")
private String loginPath; private String loginPath;
@Value("${ibiz.auth.logoutpath:v7/logout}")
private String logoutPath;
@Value("${ibiz.file.uploadpath:ibizutil/upload}") @Value("${ibiz.file.uploadpath:ibizutil/upload}")
private String uploadpath; private String uploadpath;
...@@ -107,6 +110,8 @@ public class webSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -107,6 +110,8 @@ public class webSecurityConfig extends WebSecurityConfigurerAdapter {
).permitAll() ).permitAll()
//放行登录请求 //放行登录请求
.antMatchers( HttpMethod.POST,"/"+loginPath).permitAll() .antMatchers( HttpMethod.POST,"/"+loginPath).permitAll()
//放行注销请求
.antMatchers( HttpMethod.GET,"/"+logoutPath).permitAll()
// 文件操作 // 文件操作
.antMatchers("/"+downloadpath+"/**").permitAll() .antMatchers("/"+downloadpath+"/**").permitAll()
.antMatchers("/"+uploadpath).permitAll() .antMatchers("/"+uploadpath).permitAll()
......
...@@ -23,7 +23,7 @@ import java.util.List; ...@@ -23,7 +23,7 @@ import java.util.List;
@Configuration @Configuration
@EnableFeignClients(basePackages = {"cn.ibizlab" }) @EnableFeignClients(basePackages = {"cn.ibizlab" })
@EnableZuulProxy @EnableZuulProxy
@ComponentScan(basePackages = {"cn.ibizlab"}) @ComponentScan(basePackages = {"cn.ibizlab.web","cn.ibizlab.util"})
@MapperScan("cn.ibizlab.*.mapper") @MapperScan("cn.ibizlab.*.mapper")
@SpringBootApplication(exclude = { @SpringBootApplication(exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
......
...@@ -4,11 +4,13 @@ import lombok.extern.slf4j.Slf4j; ...@@ -4,11 +4,13 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.context.annotation.ComponentScan;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
...@@ -18,6 +20,14 @@ import java.util.List; ...@@ -18,6 +20,14 @@ import java.util.List;
@EnableFeignClients(basePackages = {"cn.ibizlab" }) @EnableFeignClients(basePackages = {"cn.ibizlab" })
@SpringBootApplication(exclude = { @SpringBootApplication(exclude = {
}) })
@ComponentScan(basePackages = {"cn.ibizlab"}
// ,excludeFilters={
// @ComponentScan.Filter(type= org.springframework.context.annotation.FilterType.REGEX,pattern="cn.ibizlab.xxx.rest.xxx"),
// }
)
@Import({
org.springframework.cloud.openfeign.FeignClientsConfiguration.class
})
public class DevBootApplication extends WebMvcConfigurerAdapter{ public class DevBootApplication extends WebMvcConfigurerAdapter{
public static void main(String[] args) { public static void main(String[] args) {
......
...@@ -41,6 +41,9 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -41,6 +41,9 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${ibiz.auth.path:v7/login}") @Value("${ibiz.auth.path:v7/login}")
private String loginPath; private String loginPath;
@Value("${ibiz.auth.logoutpath:v7/logout}")
private String logoutPath;
@Value("${ibiz.file.uploadpath:ibizutil/upload}") @Value("${ibiz.file.uploadpath:ibizutil/upload}")
private String uploadpath; private String uploadpath;
...@@ -102,6 +105,8 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -102,6 +105,8 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter {
).permitAll() ).permitAll()
//放行登录请求 //放行登录请求
.antMatchers( HttpMethod.POST,"/"+loginPath).permitAll() .antMatchers( HttpMethod.POST,"/"+loginPath).permitAll()
//放行注销请求
.antMatchers( HttpMethod.GET,"/"+logoutPath).permitAll()
// 文件操作 // 文件操作
.antMatchers("/"+downloadpath+"/**").permitAll() .antMatchers("/"+downloadpath+"/**").permitAll()
.antMatchers("/"+uploadpath).permitAll() .antMatchers("/"+uploadpath).permitAll()
......
此差异已折叠。
...@@ -8,7 +8,7 @@ import java.util.List; ...@@ -8,7 +8,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.HashMap; import java.util.HashMap;
import lombok.Data; import lombok.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
......
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册