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

xignzi006 发布系统代码

上级 11dee05c

要显示的变更太多。

为了保持性能,仅显示文件中的 1000/1000+

module.exports = {
env: {
development: {
sourceMaps: true,
retainLines: true
}
},
presets: [
'@vue/cli-plugin-babel/preset'
]
}
env: {
development: {
sourceMaps: true,
retainLines: true
}
},
presets: [
'@vue/cli-plugin-babel/preset'
]
}
\ No newline at end of file
......@@ -27,7 +27,7 @@
"font-awesome": "^4.7.0",
"ibiz-gantt-elastic": "^1.0.17",
"ibiz-studio-components-vue": "^0.0.1-alpha.9",
"ibiz-vue-lib": "^0.1.10",
"ibiz-vue-lib": "^0.1.13",
"ibiz-vue-pivottable": "^1.0.6",
"interactjs": "1.9.10",
"moment": "^2.24.0",
......
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M511.999 1024a512 512 0 1 0-512-512 512 512 0 0 0 512 512z" fill="#23A0F0" /><path d="M735.765 604.422c-3.55-49.47-36.192-90.932-55.09-112.47a70.383 70.383 0 0 0-15.577-67.003v-1.718c0-97.235-68.028-167.254-153.35-167.55-85.333 0.342-153.35 70.315-153.35 167.55v1.718a70.383 70.383 0 0 0-15.576 67.003c-18.898 21.413-51.54 62.874-55.09 112.47a75.39 75.39 0 0 0 7.554 40.425c7.555 10.308 28.513-2.06 43.406-34.93a210.33 210.33 0 0 0 35.499 67.914c-36.307 8.477-46.729 44.897-34.475 64.853 8.59 14.086 28.445 25.657 62.419 25.657 60.473 0 87.267-16.611 99.18-28.057a16.259 16.259 0 0 1 20.844 0c11.913 11.57 38.684 28.057 99.18 28.057 34.02 0 53.715-11.57 62.419-25.657 12.253-19.922 1.831-56.342-34.475-64.853a211.627 211.627 0 0 0 35.499-67.914c14.893 32.87 35.85 45.124 43.406 34.93a76.493 76.493 0 0 0 7.577-40.425z" fill="#FFFFFF" /></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#36ab60" d="M352.814545 385.396364m-33.512727 0a33.512727 33.512727 0 1 0 67.025455 0 33.512727 33.512727 0 1 0-67.025455 0Z" /><path fill="#36ab60" d="M502.690909 384.465455m-33.512727 0a33.512727 33.512727 0 1 0 67.025454 0 33.512727 33.512727 0 1 0-67.025454 0Z" /><path fill="#36ab60" d="M576.232727 534.341818m-23.272727 0a23.272727 23.272727 0 1 0 46.545455 0 23.272727 23.272727 0 1 0-46.545455 0Z" /><path fill="#36ab60" d="M694.458182 536.203636m-23.272727 0a23.272727 23.272727 0 1 0 46.545454 0 23.272727 23.272727 0 1 0-46.545454 0Z" /><path fill="#36ab60" d="M512 0C229.003636 0 0 229.003636 0 512s229.003636 512 512 512 512-229.003636 512-512S794.996364 0 512 0z m-87.505455 630.225455c-26.996364 0-48.407273-5.585455-75.403636-11.17091l-75.403636 37.236364 21.410909-64.232727c-53.992727-37.236364-85.643636-85.643636-85.643637-145.221818 0-102.4 96.814545-182.458182 215.04-182.458182 105.192727 0 198.283636 64.232727 216.901819 150.807273-6.516364-0.930909-13.963636-0.930909-20.48-0.93091-102.4 0-182.458182 76.334545-182.458182 170.356364 0 15.825455 2.792727 30.72 6.516363 44.683636-7.447273 0-13.963636 0.930909-20.48 0.93091z m314.647273 75.403636l15.825455 53.992727-58.647273-32.581818c-21.410909 5.585455-42.821818 11.170909-64.232727 11.170909-102.4 0-182.458182-69.818182-182.458182-155.461818s80.058182-155.461818 182.458182-155.461818c96.814545 0 182.458182 69.818182 182.458182 155.461818 0 47.476364-31.650909 90.298182-75.403637 122.88z" /></svg>
\ No newline at end of file
......@@ -68,14 +68,14 @@ import AppUploadFileInfo from './components/app-upload-file-info/app-upload-file
import ContextMenu from './components/context-menu/context-menu'
import AppColumnFormat from './components/app-column-format/app-column-format.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 AppGroupPicker from './components/app-group-picker/app-group-picker.vue'
import AppWFApproval from './components/app-wf-approval/app-wf-approval.vue'
import Breadcrumb from './components/app-breadcrumb/app-breadcrumb.vue';
import Breadcrumb from './components/app-breadcrumb/app-breadcrumb.vue'
import AppTransfer from './components/app-transfer/app-transfer.vue'
import ContextMenuDrag from './components/context-menu-drag/context-menu-drag.vue'
import AppOrgSelect from './components/app-org-select/app-org-select.vue'
import AppDepartmentSelect from './components/app-department-select/app-department-select.vue'
import AppGroupSelect from './components/app-group-select/app-group-select.vue'
// 全局挂载UI实体服务注册中心
window['uiServiceRegister'] = uiServiceRegister;
// 全局挂载功能服务注册中心
......@@ -157,10 +157,11 @@ export const AppComponents = {
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-group-select',AppGroupSelect);
v.component('app-group-picker',AppGroupPicker);
v.component('app-wf-approval',AppWFApproval);
v.component('app-breadcrumb',Breadcrumb);
v.component('app-transfer',AppTransfer);
v.component('context-menu-drag',ContextMenuDrag);
},
};
\ No newline at end of file
......@@ -13,5 +13,12 @@
.no-redirect {
color: #97a8be;
cursor: text;
.curselected{
color: #2196F3;
font-weight: bold;
}
.app-breadcrumb-selected{
cursor: pointer;
}
}
}
\ No newline at end of file
<template>
<el-breadcrumb
class="app-breadcrumb"
separator="/"
>
<el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb">
<el-breadcrumb-item
v-for="(item, index) in breadcrumbs"
:key="item.path"
>
<span
v-if="index === breadcrumbs.length-1"
class="no-redirect"
>{{ $t(item.meta.caption) }}</span>
<a
v-else
@click.prevent="handleLink(item)"
>{{ $t(item.meta.caption) }}</a>
</el-breadcrumb-item>
<template v-if="Object.is(this.navModel,'route')">
<el-breadcrumb-item v-for="(item, index) in breadcrumbs" :key="item.id">
<span v-if="index === breadcrumbs.length-1" class="no-redirect">{{ item.title }}
<span v-if="isShowSelected(item)">
<dropdown trigger='click' @on-click="selectNavData($event,item)">
<span class="app-breadcrumb-selected">
<i class="el-icon-caret-bottom"></i>
</span>
<dropdown-menu slot='list'>
<dropdown-item v-for="(dataitem) in getPreNavData(item)" :name="dataitem.srfkey" :key="dataitem.srfkey">
<span :class="{'curselected':isCurSelected(item,dataitem)}">{{dataitem.srfmajortext}}</span>
</dropdown-item>
</dropdown-menu>
</dropdown>
</span>
</span>
<a v-else @click.prevent="handleLink(item)">{{ item.title }}</a>
</el-breadcrumb-item>
</template>
<template v-if="!Object.is(this.navModel,'route')">
<el-breadcrumb-item v-for="(item, index) in breadcrumbs" :key="item.path">
<span v-if="index === breadcrumbs.length-1" class="no-redirect" >{{ $t(item.meta.caption)}}</span>
<a v-else @click.prevent="handleLink(item)" >{{ $t(item.meta.caption) }}</a>
</el-breadcrumb-item>
</template>
</transition-group>
</el-breadcrumb>
</template>
......@@ -24,14 +33,41 @@
<script lang="ts">
import { Component, Vue, Watch, Prop } from 'vue-property-decorator'
import { RouteRecord, Route } from 'vue-router'
import { Environment } from "@/environments/environment";
import NavDataService from '@/service/app/navdata-service';
import {Subscription } from 'rxjs';
@Component({
})
export default class Breadcrumb extends Vue {
private breadcrumbs: RouteRecord[] = []; //面包屑列表
/**
* 面包屑列表
*
* @memberof Breadcrumb
*/
private breadcrumbs: Array<any> = [];
/**
* 导航服务
*
* @memberof Breadcrumb
*/
private navDataService = NavDataService.getInstance(this.$store);
@Prop() public defPSAppView: any; //默认视图
/**
* 默认视图标识
*
* @memberof Breadcrumb
*/
@Prop() public indexViewTag!: string;
/**
* 导航模式
*
* @memberof Breadcrumb
*/
@Prop({default:'tab'}) public navModel?:string;
/**
* 监听路由
......@@ -43,13 +79,30 @@ export default class Breadcrumb extends Vue {
this.getBreadcrumb()
}
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof Dev
*/
public serviceStateEvent: Subscription | undefined;
/**
* vue 生命周期
*
* @memberof Breadcrumb
*/
created() {
this.getBreadcrumb()
this.getBreadcrumb();
if(Object.is(this.navModel,"route")){
this.serviceStateEvent = this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if (Object.is(action, 'datarefresh')) {
this.getBreadcrumb();
}
});
}
}
/**
......@@ -58,24 +111,99 @@ export default class Breadcrumb extends Vue {
* @memberof Breadcrumb
*/
private getBreadcrumb() {
this.breadcrumbs = this.$route.matched.filter((item) => {
if(Object.is(this.navModel,"route")){
this.breadcrumbs = this.navDataService.getNavData();
this.$forceUpdate();
}else{
this.breadcrumbs = this.$route.matched.filter((item) => {
return item.meta && item.meta.caption
})
if(this.defPSAppView){
/**如果配置了默认视图,给面包屑第一级赋值默认视图为首页 */
}
}
/**
* 单机面包屑
* 获取面包屑指定元素前一条数据
*
* @memberof Breadcrumb
*/
private getPreNavData(item:any){
let preNavData:any = this.navDataService.getPreNavDataById(item.id);
return preNavData.data;
}
/**
* 判断是否为当前选中项
*
* @memberof Breadcrumb
*/
private isCurSelected(item:any,singleItem:any){
return item.srfkey === singleItem.srfkey;
}
/**
* 面包屑点击行为
*
* @memberof Breadcrumb
*/
private handleLink(item: any) {
this.$router.push(item).catch(err => {
console.warn(err);
});
if(Object.is(this.navModel,"route")){
// 首页
if(Object.is(item.id,this.indexViewTag)){
this.$router.push((window.sessionStorage.getItem(Environment.AppName))as string);
}else{
// 非首页
this.$router.push(item.path).catch(err => {
console.warn(err);
});
}
this.navDataService.removeNavData(item.id);
}else{
if(item && item.meta && item.meta.viewType && Object.is(item.meta.viewType,"APPINDEX")){
let path: string | null = window.sessionStorage.getItem(Environment.AppName);
if (path) {
this.$router.push({ path: path });
} else {
this.$router.push("/");
}
}else{
this.$router.push(item).catch(err => {
console.warn(err);
});
}
}
}
/**
* 切换导航行为
*
* @memberof Breadcrumb
*/
private selectNavData($event:any,item:any){
let preNavData:any = this.getPreNavData(item);
let curSrfkey:any = $event;
this.navDataService.serviceState.next({action:'viewrefresh',name:item.id, data:curSrfkey});
}
/**
* 组件销毁
*
* @memberof Breadcrumb
*/
public destroyed() {
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
/**
* 是否显示下拉列表
*
* @memberof Breadcrumb
*/
public isShowSelected(item:any){
return item.isselected && !this.$util.isEmpty(item.srfkey);
}
}
</script>
......
......@@ -6,7 +6,6 @@
<script lang="ts">
import { Vue, Component, Watch, Prop, Model } from 'vue-property-decorator';
@Component({
})
export default class AppDepartmentSelect extends Vue {
......
......@@ -100,6 +100,22 @@ export default class AppFileUpload extends Vue {
*/
@Prop() public data!: string;
/**
* 视图参数
*
* @type {*}
* @memberof AppFormDRUIPart
*/
@Prop() public viewparams!: any;
/**
* 视图上下文
*
* @type {*}
* @memberof AppAutocomplete
*/
@Prop() public context!: any;
/**
* 初始化值
*
......@@ -146,7 +162,7 @@ export default class AppFileUpload extends Vue {
* @type {string}
* @memberof AppFileUpload
*/
@Prop() public uploadparams?: string;
@Prop() public uploadparams?: any;
/**
* 下载参数
......@@ -154,15 +170,7 @@ export default class AppFileUpload extends Vue {
* @type {string}
* @memberof AppFileUpload
*/
@Prop() public exportparams?: string;
/**
* 自定义参数
*
* @type {*}
* @memberof AppFileUpload
*/
@Prop() public customparams?: any;
@Prop() public exportparams?: any;
/**
* 上传文件路径
......@@ -186,20 +194,20 @@ export default class AppFileUpload extends Vue {
public files = [];
/**
* 上传keys
* 上传params
*
* @type {Array<any>}
* @memberof AppFileUpload
*/
public upload_keys: Array<any> = [];
public upload_params: Array<any> = [];
/**
* 导出keys
* 导出params
*
* @type {Array<any>}
* @memberof AppFileUpload
*/
public export_keys: Array<any> = [];
public export_params: Array<any> = [];
/**
* 自定义数组
......@@ -239,31 +247,37 @@ export default class AppFileUpload extends Vue {
* @memberof AppFileUpload
*/
private dataProcess(): void {
let upload_arr: Array<string> = [];
let export_arr: Array<string> = [];
const _data: any = JSON.parse(this.data);
this.upload_keys.forEach((key: string) => {
upload_arr.push(`${key}=${_data[key]}`);
});
this.export_keys.forEach((key: string) => {
export_arr.push(`${key}=${_data[key]}`);
});
let _url = `${Environment.BaseUrl}${Environment.UploadFile}`;
if (upload_arr.length > 0 || this.custom_arr.length > 0) {
_url = `${_url}?${upload_arr.join('&')}${upload_arr.length > 0 ? '&' : ''}${this.custom_arr.join('&')}`;
if (this.upload_params.length > 0 ) {
_url +='?';
this.upload_params.forEach((item:any,i:any)=>{
_url += `${Object.keys(item)[0]}=${Object.values(item)[0]}`;
if(i<this.upload_params.length-1){
_url += '&';
}
})
}
this.uploadUrl = _url;
this.files.forEach((file: any) => {
let url = `${this.downloadUrl}/${file.id}`;
if (upload_arr.length > 0 || this.custom_arr.length > 0) {
url = `${url}?${upload_arr.join('&')}${upload_arr.length > 0 ? '&' : ''}${this.custom_arr.join('&')}`;
if (this.export_params.length > 0) {
url +='?';
this.export_params.forEach((item:any,i:any)=>{
url += `${Object.keys(item)[0]}=${Object.values(item)[0]}`;
if(i<this.export_params.length-1){
url += '&';
}
})
}
file.url = url;
});
}
/**
* vue 生命周期
*
......@@ -290,28 +304,37 @@ export default class AppFileUpload extends Vue {
public mounted() {
this.appData = this.$store.getters.getAppData();
let uploadparams: string = '';
let exportparams: string = '';
let uploadparams: any = {};
let exportparams: any = {};
let upload_keys: Array<string> = [];
let export_keys: Array<string> = [];
let upload_params: Array<string> = [];
let export_params: Array<string> = [];
let custom_arr: Array<string> = [];
let param:any = this.viewparams;
let context:any = this.context;
let _data:any = JSON.parse(this.data);
if (this.uploadparams && !Object.is(this.uploadparams, '')) {
uploadparams = this.uploadparams;
upload_keys = uploadparams.split(';');
upload_params = this.$util.computedNavData(_data,param,context,uploadparams);
}
if (this.exportparams && !Object.is(this.exportparams, '')) {
exportparams = this.exportparams;
export_keys = exportparams.split(';');
export_params = this.$util.computedNavData(_data,param,context,exportparams);
}
if (this.customparams && !Object.is(this.customparams, '')) {
Object.keys(this.customparams).forEach((name: string) => {
custom_arr.push(`${name}=${this.customparams[name]}`);
});
for (const item in upload_params) {
this.upload_params.push({
[item]:upload_params[item]
})
}
for (const item in export_params) {
this.export_params.push({
[item]:export_params[item]
})
}
this.upload_keys = upload_keys;
this.export_keys = export_keys;
this.custom_arr = custom_arr;
this.setFiles(this.value);
this.dataProcess();
......
......@@ -12,7 +12,8 @@
@drdatasaved="drdatasaved"
@drdatachange="drdatachange"
@viewdataschange="viewdataschange"
@viewload="viewload">
@viewload="viewload"
@mounted="viewMounted">
</component>
<spin v-if="blockUI" class='app-druipart-spin' fix >{{ $t('components.appFormDRUIPart.blockUITipInfo') }}</spin>
</div>
......@@ -170,6 +171,31 @@ export default class AppFormDRUIPart extends Vue {
*/
private formStateEvent: Unsubscribable | undefined;
/**
* 关系视图是否已经加载完毕
*
* @type {boolean}
* @memberof AppFormDRUIPart
*/
protected viewIsLoaded: boolean = false;
/**
* 定时器实例
*
* @type {[boolean]}
* @memberof AppFormDRUIPart
*/
protected timer?: number;
/**
* 关系视图加载完毕触发事件
*
* @memberof AppFormDRUIPart
*/
protected viewMounted(): void {
this.viewIsLoaded = true;
}
/**
* 监控值
*
......@@ -251,7 +277,6 @@ export default class AppFormDRUIPart extends Vue {
* @memberof AppFormDRUIPart
*/
private refreshDRUIPart(data?:any): void {
if (Object.is(this.parentdata.SRFPARENTTYPE, 'CUSTOM')) {
this.isRelationalData = false;
}
......@@ -292,10 +317,34 @@ export default class AppFormDRUIPart extends Vue {
}
}
if(!this.isForbidLoad){
this.$nextTick(() => {
this.formDruipart.next({action:'load',data:{srfparentdename:this.parentName,srfparentkey:_paramitem}});
});
this.partViewEvent('load', {srfparentdename:this.parentName,srfparentkey:_paramitem}, 0);
}
}
/**
* 向关系视图发送事件,采用轮询模式。避免异步视图出现加载慢情况
*
* @param {*} action 触发行为
* @param {*} data 数据
* @param {*} count 轮询计数
* @memberof AppFormDRUIPart
*/
protected partViewEvent(action: string, data: any, count: number = 0): void {
if (count > 100) {
return;
}
if (count === 0 && this.timer !== undefined) {
clearTimeout(this.timer);
this.timer = undefined;
}
if (this.viewIsLoaded) {
this.formDruipart.next({action:'load',data});
return;
}
this.timer = setTimeout(() => {
count++;
this.partViewEvent(action, data, count);
}, 30);
}
/**
......
......@@ -15,7 +15,7 @@
overflow: auto;
> .ivu-tabs-tabpane {
height: 100%;
overflow: auto;
overflow: initial;
}
}
}
......
<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 AppGroupPicker extends Vue {
/**
* 视图上下文参数
*
* @type {*}
* @memberof AppGroupPicker
*/
@Prop() viewdata: any;
/**
* 视图参数
*
* @type {*}
* @memberof AppGroupPicker
*/
@Prop() viewparam: any;
/**
* 多选
*
* @type {*}
* @memberof AppGroupPicker
*/
protected multiple: boolean = false;
/**
* 加载树url
*
* @type {*}
* @memberof AppGroupPicker
*/
protected treeurl:any;
/**
* 加载人员url
*
* @type {*}
* @memberof AppGroupPicker
*/
protected url:any;
/**
* 树数据集
*
* @type {*}
* @memberof AppGroupPicker
*/
protected treeItems: any[] = [];
/**
* 分组表数据集
*
* @type {*}
* @memberof AppGroupPicker
*/
protected cardItems: any[] = [];
/**
* 视图上下文参数对象
*
* @type {*}
* @memberof AppGroupPicker
*/
protected viewData: any;
/**
* 视图参数对象
*
* @type {*}
* @memberof AppGroupPicker
*/
protected viewParam: any;
/**
* 树选中值
*
* @type {*}
* @memberof AppGroupPicker
*/
protected treeSelectVal: string = '';
/**
* 分组表选中集合
*
* @type {*}
* @memberof AppGroupPicker
*/
protected cardSelctVal: any = [];
/**
* 数据选中集合
*
* @type {*}
* @memberof AppGroupPicker
*/
protected selects: any[] = [];
/**
* 是否显示树
*
* @type {*}
* @memberof AppGroupPicker
*/
get showTree() {
if(this.viewParam) {
return this.viewParam.showtree;
}
}
/**
* 生命周期
*
* @type {*}
* @memberof AppGroupPicker
*/
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 AppGroupPicker
*/
public load() {
if(this.showTree) {
this.loadTree();
} else {
this.loadGroupData(this.viewParam.filtervalue);
}
}
/**
* 加载树数据
*
* @type {*}
* @memberof AppGroupPicker
*/
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 AppGroupPicker
*/
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 AppGroupPicker
*/
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 AppGroupPicker
*/
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 AppGroupPicker
*/
public onOK() {
this.$emit('close', this.selects);
}
/**
* 取消
*
* @type {*}
* @memberof AppGroupPicker
*/
public onCancel() {
this.$emit('close');
}
}
</script>
<style lang="less">
.ibiz-group-picker{
width: 100%;
height: 100%;
.ibiz-group-container {
display: flex;
height: calc(100% - 65px);
.ibiz-group-tree {
min-width: 200px;
border-right: 1px solid #ddd;
padding: 0 34px 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 AppGroupSelect extends Vue {
/**
* 名称标识
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() name!: string;
/**
* 树加载地址
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() treeurl?:boolean;
/**
* 数据接口地址
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() url!: string;
/**
* 多选
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop({default: false}) multiple?: boolean;
/**
* 数据对象
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() data: any;
/**
* 过滤属性标识
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() filter?: string;
/**
* 是否启用
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() disabled?: boolean;
/**
* 值
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() value: any;
/**
* 上下文参数
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() context: any;
/**
* 关联属性
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() valueitem: any;
/**
* 填充属性
*
* @type {*}
* @memberof AppGroupSelect
*/
@Prop() fillmap: any;
/**
* 选中项集合
*
* @type {*}
* @memberof AppGroupSelect
*/
protected selects: any[] = [];
/**
* 值变化
*
* @type {*}
* @memberof AppGroupSelect
*/
@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 AppGroupSelect
*/
get selectName() {
if(this.selects.length > 0) {
return this.selects[0].label;
}
}
/**
* 打开选择视图
*
* @type {*}
* @memberof AppGroupSelect
*/
public openView() {
const view: any = {
viewname: 'app-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 AppGroupSelect
*/
public openViewClose(result: any) {
this.selects = [];
if (result.datas && result.datas.length > 0) {
this.selects = result.datas
}
this.setValue()
}
/**
* 数据删除
*
* @type {*}
* @memberof AppGroupSelect
*/
public remove(item: any) {
this.selects.splice(this.selects.indexOf(item), 1);
this.setValue()
}
/**
* 设置值
*
* @type {*}
* @memberof AppGroupSelect
*/
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
......@@ -98,6 +98,22 @@ export default class AppImageUpload extends Vue {
*/
@Prop() public data!: string;
/**
* 视图参数
*
* @type {*}
* @memberof AppFormDRUIPart
*/
@Prop() public viewparams!: any;
/**
* 视图上下文
*
* @type {*}
* @memberof AppAutocomplete
*/
@Prop() public context!: any;
/**
* 初始化值
*
......@@ -185,20 +201,20 @@ export default class AppImageUpload extends Vue {
@Provide() public files = [];
/**
* 上传keys
* 上传params
*
* @type {Array<any>}
* @memberof AppImageUpload
*/
public upload_keys: Array<any> = [];
public upload_params: Array<any> = [];
/**
* 导出keys
* 导出params
*
* @type {Array<any>}
* @memberof AppImageUpload
*/
public export_keys: Array<any> = [];
public export_params: Array<any> = [];
/**
* 自定义数组
......@@ -238,26 +254,31 @@ export default class AppImageUpload extends Vue {
* @memberof AppImageUpload
*/
private dataProcess(): void {
let upload_arr: Array<string> = [];
let export_arr: Array<string> = [];
const _data: any = JSON.parse(this.data);
this.upload_keys.forEach((key: string) => {
upload_arr.push(`${key}=${_data[key]}`);
});
this.export_keys.forEach((key: string) => {
export_arr.push(`${key}=${_data[key]}`);
});
let _url = `${Environment.BaseUrl}${Environment.UploadFile}`;
if (upload_arr.length > 0 || this.custom_arr.length > 0) {
_url = `${_url}?${upload_arr.join('&')}${upload_arr.length > 0 ? '&' : ''}${this.custom_arr.join('&')}`;
if (this.upload_params.length > 0 ) {
_url +='?';
this.upload_params.forEach((item:any,i:any)=>{
_url += `${Object.keys(item)[0]}=${Object.values(item)[0]}`;
if(i<this.upload_params.length-1){
_url += '&';
}
})
}
this.uploadUrl = _url;
this.files.forEach((file: any) => {
let url = `${this.downloadUrl}/${file.id}`;
if (upload_arr.length > 0 || this.custom_arr.length > 0) {
url = `${url}?${upload_arr.join('&')}${upload_arr.length > 0 ? '&' : ''}${this.custom_arr.join('&')}`;
if (this.export_params.length > 0) {
url +='?';
this.export_params.forEach((item:any,i:any)=>{
url += `${Object.keys(item)[0]}=${Object.values(item)[0]}`;
if(i<this.export_params.length-1){
url += '&';
}
})
}
file.url = url;
});
......@@ -288,28 +309,35 @@ export default class AppImageUpload extends Vue {
public mounted() {
this.appData = this.$store.getters.getAppData();
let uploadparams: string = '';
let exportparams: string = '';
let uploadparams: any = {};
let exportparams: any = {};
let upload_keys: Array<string> = [];
let export_keys: Array<string> = [];
let upload_params: Array<string> = [];
let export_params: Array<string> = [];
let custom_arr: Array<string> = [];
let param:any = this.viewparams;
let context:any = this.context;
let _data:any = JSON.parse(this.data);
if (this.uploadparams && !Object.is(this.uploadparams, '')) {
uploadparams = this.uploadparams;
upload_keys = uploadparams.split(';');
upload_params = this.$util.computedNavData(_data,param,context,uploadparams);
}
if (this.exportparams && !Object.is(this.exportparams, '')) {
exportparams = this.exportparams;
export_keys = exportparams.split(';');
export_params = this.$util.computedNavData(_data,param,context,exportparams);
}
if (this.customparams && !Object.is(this.customparams, '')) {
Object.keys(this.customparams).forEach((name: string) => {
custom_arr.push(`${name}=${this.customparams[name]}`);
});
for (const item in upload_params) {
this.upload_params.push({
[item]:upload_params[item]
})
}
for (const item in export_params) {
this.export_params.push({
[item]:export_params[item]
})
}
this.upload_keys = upload_keys;
this.export_keys = export_keys;
this.custom_arr = custom_arr;
this.setFiles(this.value);
this.dataProcess();
......
......@@ -324,10 +324,10 @@ export default class AppPickerSelectView extends Vue {
this.items.push({ srfmajortext : item.srfmajortext, srfkey: item.srfkey });
}
});
let _viewparam = JSON.parse(this.viewparam);
_viewparam.selectedData = this.selectItems;
this.viewparam = JSON.stringify(_viewparam);
}
let _viewparam = JSON.parse(this.viewparam);
_viewparam.selectedData = this.selectItems;
this.viewparam = JSON.stringify(_viewparam);
}
this.$forceUpdate();
}
......
......@@ -242,7 +242,7 @@ export default class AppPicker extends Vue {
* @param {*} oldVal
* @memberof AppPicker
*/
@Watch('value')
@Watch('value',{immediate: true})
public onValueChange(newVal: any, oldVal: any) {
this.curvalue = newVal;
if (Object.is(this.editortype, 'dropdown') && this.valueitem) {
......
......@@ -5,4 +5,7 @@
margin-right: 10px;
padding: 0 5px;
}
}
.user-dropdownMenu{
margin-top: 9px;
}
\ No newline at end of file
<template>
<div class='app-header-user'>
<dropdown @on-click="userSelect" :transfer="true">
<dropdown transfer-class-name="user-dropdownMenu" @on-click="userSelect" :transfer="true">
<div class='user'>
<span>{{user.name ? user.name : $t('components.appUser.name')}}</span>
&nbsp;&nbsp;<avatar :src="user.avatar" />
</div>
<dropdown-menu class='menu' slot='list' style='font-size: 15px !important;'>
<dropdown-item name='logout' style='font-size: 15px !important;'>
<span><i aria-hidden='true' class='fa fa-cogs' style='margin-right: 8px;'></i></span>
<span><i aria-hidden='true' class='ivu-icon ivu-icon-md-power' style='margin-right: 8px;'></i></span>
<span>{{$t('components.appUser.logout')}}</span>
</dropdown-item>
</dropdown-menu>
......
.menu-drawer {
.ivu-drawer-left {
left: 201px !important;
}
.ivu-drawer {
top: 64px !important;
}
.ivu-drawer-body {
padding: 32px !important;
.menuItems {
display: flex;
flex-wrap: wrap;
> .item {
margin: 0px 10px;
width: calc(33.333% - 20px);
padding: 0px 15px;
font-size: 13px;
transition: all 0.3s;
display: flex;
justify-content: space-between;
height: 32px;
align-items: center;
.star {
display: flex;
height: 100%;
width: 30px;
font-size: 15px;
align-items: center;
justify-content: center;
.ivu-icon-ios-star-outline{
display: none;
}
}
}
> .item:hover {
background-color: #eaeaea;
cursor: pointer;
.ivu-icon-ios-star-outline{
display: inline;
}
}
}
}
}
.sider-drawer {
.ivu-drawer {
background-color: #ffffff !important;
}
.ivu-drawer-body {
padding: 0px !important;
}
.ivu-drawer {
top: 64px !important;
}
.context-menu-drag {
display: flex;
.flip-list-move {
transition: transform 0.3s;
}
.menu-list {
width: 100%;
height: 100%;
.menu-header {
cursor: pointer;
border-bottom: 1px solid rgb(222, 222, 222);
height: 48px;
line-height: 48px;
display: flex;
align-items: center;
.menuicon {
display: inline-block;
width: 50px;
font-size: 16px;
text-align: center;
font-size: 22px;
}
.content {
display: inline-block;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1 1 0%;
overflow: hidden;
font-size: 13px;
}
.forward {
margin: 0px 8px 0px 4px;
color: rgb(222, 222, 222);
font-size: 15px;
}
}
.list-group-item {
transition: background 1s;
-webkit-transition: background 1s;
.menuicon {
text-align: center;
}
.el-row {
height: 100%;
display: flex;
align-items: center;
padding: 0px 5px;
}
height: 40px;
cursor: pointer;
position: relative;
display: block;
margin-bottom: -1px;
transition: background-color 0.5s;
transition-timing-function: ease-in-out;
.handle {
cursor: move;
}
.bar {
display: flex;
.ivu-icon-ios-close {
cursor: pointer;
font-size: 25px;
}
}
}
.list-group-item:hover {
background-color: #f5f5f5;
.ivu-icon-ios-star-outline{
display: inline;
}
}
}
}
}
\ No newline at end of file
<template>
<Drawer class-name="sider-drawer" placement="left" :closable="false" :mask="false" width="200" v-model="leftDrawerVisiable">
<div class="context-menu-drag">
<div class="menu-list">
<div class="menu-header" @click="rightDrawerVisiable=!rightDrawerVisiable">
<div class="menuicon">
<Icon type="md-apps" />
</div>
<div class="content">
<span>全部应用</span>
</div>
<div class="forward">
<Icon type="ios-arrow-forward" />
</div>
</div>
<div style="padding:8px 0px;" class="col-6">
<draggable class="list-group" tag="ul" v-model="selectlist" v-bind="dragOptionsVal" @start="drag=true" @end="drag=false" :animation="250" handle=".handle" ghost-class="ghost">
<transition-group type="transition" :name="!drag ? 'flip-list' : null">
<li @click="skipTo(item)" class="list-group-item" v-for="(item,index) in selectlist" :key="item.id">
<el-row>
<el-col class="menuicon" :span="4">
<span>
<Icon v-if="item.icon" :type="item.icon" />
<Icon v-else type="md-menu" />
</span>
</el-col>
<el-col :span="14">
<span>{{ item.label }}</span>
</el-col>
<el-col :span="6">
<div class="bar">
<div>
<Icon type="ios-close" @click.stop="removeAt(index)" />
</div>
<div>
<Icon type="ios-move handle" />
</div>
</div>
</el-col>
</el-row>
</li>
</transition-group>
</draggable>
</div>
</div>
<Drawer class-name="menu-drawer" width="60" :closable="true" :mask="false" placement="left" v-model="rightDrawerVisiable">
<div class="menuItems">
<div @click="skipTo(item)" class="item" v-for="(item) in list" :key="item.id">
<span class="title">{{item.label}}</span>
<span v-if="isStar(item.id)" class="star" @click.stop="outStar(item)">
<Icon type="ios-star" />
</span>
<span v-else class="star" @click.stop="onStar(item)">
<Icon type="ios-star-outline" />
</span>
</div>
</div>
</Drawer>
</div>
</Drawer>
</template>
<script lang="ts">
import draggable from "vuedraggable";
import EntityService from '@/service/entity-service';
import { Vue,Component,Provide,Watch,Prop,Model } from "vue-property-decorator";
// tslint:disable-next-line:max-classes-per-file
@Component({
components: {
draggable
}
})
export default class ContextMenuDrag extends Vue {
public panelShow: boolean = true;
/**
* 抽屉菜单状态
*
* @returns
* @memberof ContextMenuDrag
*/
@Prop() public contextMenuDragVisiable?: boolean;
/**
* 拖拽列表配置对象
*
* @returns
* @memberof ContextMenuDrag
*/
@Model("change") public dragOptions: any;
/**
* 右侧飘窗状态
*
* @returns
* @memberof ContextMenuDrag
*/
public rightDrawerVisiable: boolean = false;
/**
* 左侧飘窗状态
*
* @returns
* @memberof ContextMenuDrag
*/
public leftDrawerVisiable: boolean = false;
/**
* 全部应用数据
*
* @returns
* @memberof ContextMenuDrag
*/
public list: Array<any> = [];
/**
* 已选择的应用数据
*
* @returns
* @memberof ContextMenuDrag
*/
public selectlist: Array<any> = [];
/**
* 拖拽列表
*
* @returns
* @memberof ContextMenuDrag
*/
public drag: boolean = false;
/**
* 拖拽列表配置项
*
* @returns
* @memberof ContextMenuDrag
*/
get dragOptionsVal() {
return {
animation: 200,
group: "description",
disabled: false,
ghostClass: "ghost"
};
}
/**
* 实体服务对象
*
* @protected
* @type {EntityService}
* @memberof ContextMenuDrag
*/
protected entityService: EntityService = new EntityService();
/**
* 监听抽屉菜单状态
*
* @returns
* @memberof ContextMenuDrag
*/
@Watch("contextMenuDragVisiable")
public onVisiableChange(newVal: any, oldVal: any) {
if (newVal) {
this.leftDrawerVisiable = newVal;
} else {
let that: any = this;
let params: any = {};
params.model = this.selectlist;
const put: Promise<any> = this.entityService.updateChooseApp(null,params);
this.rightDrawerVisiable = false;
setTimeout(() => {
that.leftDrawerVisiable = false;
}, 300);
}
}
/**
* 鼠标移入服务时显示右侧飘窗
*
* @returns
* @memberof ContextMenuDrag
*/
public showMenuDrawer() {
let that: any = this;
if(this.contextMenuDragVisiable){
setTimeout(() => {
that.rightDrawerVisiable = true;
}, 300);
}
}
/**
* 判断是否已选择该应用
*
* @returns
* @memberof ContextMenuDrag
*/
public isStar(id: any) {
let istar: boolean = false;
this.selectlist.forEach((item: any) => {
if (Object.is(item.id, id)) {
istar = true;
}
});
return istar;
}
/**
* 跳转到应用
*
* @returns
* @memberof ContextMenuDrag
*/
public skipTo(item: any){
if(item.addr){
let params: any = {};
params.model = this.selectlist;
const put: Promise<any> = this.entityService.updateChooseApp(null,params);
window.location.href = item.addr;
}else{
this.$message.info("未找到该应用");
}
}
/**
* 加入列表
*
* @returns
* @memberof ContextMenuDrag
*/
public onStar(item: any) {
item.visabled = 1;
this.selectlist.push(item);
}
/**
* 从列表中删除
*
* @returns
* @memberof ContextMenuDrag
*/
public outStar(item: any) {
item.visabled = 0;
let index: number = 0;
let that: any = this;
this.selectlist.forEach((select: any, index: number) => {
if (Object.is(item.id, select.id)) {
that.selectlist.splice(index,1);
}
});
}
/**
* 删除已选择应用
*
* @returns
* @memberof ContextMenuDrag
*/
removeAt(index: any) {
this.selectlist.splice(index, 1);
}
/**
* 拖拽列表排序
*/
sort() {
this.selectlist = this.selectlist.sort((a, b) => a.order - b.order);
}
/**
* 过滤已选择的应用
*
* @returns
* @memberof ContextMenuDrag
*/
listFilter() {
let that: any = this;
that.selectlist = [];
this.list.forEach((item: any) => {
if (item.visabled === 1) {
that.selectlist.push(item);
}
});
}
/**
* vue 生命周期
*
* @returns
* @memberof ContextMenuDrag
*/
mounted() {
let that: any = this;
const get: Promise<any> = this.entityService.getAllApp(null,{});
get
.then((response: any) => {
if (response) {
that.list = response.data.model;
that.listFilter();
}
});
}
}
</script>
<style lang='less'>
@import './context-menu-drag.less';
</style>
......@@ -5,4 +5,7 @@
top: 0;
right: 20px;
}
.ivu-input-number-input{
text-align: right;
}
}
\ No newline at end of file
<template>
<div class="input-unit">
<i-input
<InputNumber v-if="type === 'number'"
:placeholder="placeholder"
:size="size"
:precision="precision"
v-model="CurrentVal"
:disabled="disabled ? true : false"
></InputNumber>
<i-input v-else
:placeholder="placeholder"
:size="size"
:type="type"
v-model="CurrentVal"
:disabled="disabled ? true : false"
:autosize="autoSize"
@on-enter="enter"
></i-input>
<div class="unit-text">{{unit}}</div>
......@@ -62,13 +70,33 @@ export default class InputBox extends Vue {
*/
@Prop() public type?: string;
/**
* 精度
*
* @type {number}
* @memberof InputBox
*/
@Prop({default: 0}) public precision?: number;
/**
* 多行文本行数
*
* @type {string}
* @memberof InputBox
*/
@Prop() public autoSize?: any;
/**
* 当前值
*
* @memberof InputBox
*/
get CurrentVal() {
return this.itemValue;
if(Object.is(this.type, 'number') && this.itemValue && !isNaN(this.itemValue)){
return Number(Number(this.itemValue).toFixed(this.precision));
}else{
return this.itemValue;
}
}
/**
......
......@@ -103,7 +103,7 @@ export default class EditViewEngine extends ViewEngine {
public onFormLoad(arg: any): void {
this.view.model.dataInfo = Object.is(arg.srfuf, '1') ? (this.majorPSDEField?arg[this.majorPSDEField]:arg.srfmajortext) : this.view.$t('app.local.new');
this.setTabCaption(this.view.model.dataInfo);
this.setTabCaption(this.view.model.dataInfo,Object.is(arg.srfuf, '0'));
const newdata: boolean = !Object.is(arg.srfuf, '1');
this.calcToolbarItemState(newdata);
}
......@@ -117,7 +117,7 @@ export default class EditViewEngine extends ViewEngine {
public onFormSave(arg: any): void {
this.view.model.dataInfo = Object.is(arg.srfuf, '1') ? (this.majorPSDEField?arg[this.majorPSDEField]:arg.srfmajortext) : this.view.$t('app.local.new');
this.setTabCaption(this.view.model.dataInfo);
this.setTabCaption(this.view.model.dataInfo,Object.is(arg.srfuf, '0'));
const newdata: boolean = !Object.is(arg.srfuf, '1');
this.calcToolbarItemState(newdata);
this.view.$emit('save',arg);
......@@ -245,15 +245,21 @@ export default class EditViewEngine extends ViewEngine {
*
* @memberof EditViewEngine
*/
public setTabCaption(info: string): void {
public setTabCaption(info: string,isNew:boolean): void {
let viewdata: any = this.view.model;
if (viewdata && info && !Object.is(info, '') && this.view.$tabPageExp && (viewdata.srfTitle.indexOf(" - ") === -1)) {
this.view.$tabPageExp.setCurPageCaption(viewdata.srfTitle, viewdata.srfTitle, info);
let index:number = viewdata.srfTitle.indexOf("-");
if (viewdata && info && !Object.is(info, '')) {
if(index !== -1){
viewdata.srfTitle = viewdata.srfTitle.substr(0,index);
}
if(this.view.$tabPageExp){
this.view.$tabPageExp.setCurPageCaption(this.view.$t(viewdata.srfTitle), this.view.$t(viewdata.srfTitle), info);
}
if(this.view.$route){
this.view.$route.meta.info = info;
}
this.view.model.srfTitle = `${this.view.$t(viewdata.srfTitle)} - ${viewdata.dataInfo}`;
this.view.$emit('viewModelChange', this.view.model.srfTitle);
this.view.model.srfTitle = `${this.view.$t(viewdata.srfTitle)}-${viewdata.dataInfo}`;
this.view.initNavDataWithRoute(null,isNew);
}
}
......
......@@ -367,6 +367,15 @@ export default class MDViewEngine extends ViewEngine {
* @memberof MDViewEngine
*/
public MDCtrlLoad(args: any[]) {
let cacheArray:Array<any> = [];
if(args.length >0){
args.forEach((item:any) =>{
cacheArray.push({srfkey:item.srfkey,srfmajortext:item.srfmajortext});
})
}
this.view.viewCacheData = cacheArray;
this.view.initNavDataWithRoute(cacheArray);
this.view.initNavDataWithTab(cacheArray,false);
if (this.view) {
this.view.$emit('viewload', args);
}
......
export default {
fields: {
seriesid: '系列 ID',
traversedpath: '遍历的路径',
deliveryprioritycode: '传递优先级',
onholdtime: '暂候时间(分钟)',
workflowcreated: '由工作流创建',
senton: '发送日期',
lastonholdtime: '上一暂候时间',
actualdurationminutes: '实际持续时间',
regardingobjectid: '关于',
deliverylastattemptedon: '上次尝试传递的日期',
mapiprivate: '隐藏',
actualend: '实际结束时间',
description: '说明',
prioritycode: '优先级',
owneridtype: '所有者类型',
billed: '已记帐',
regularactivity: '是定期活动',
utcconversiontimezonecode: 'UTC 转换时区代码',
createman: '建立人',
scheduleddurationminutes: '计划持续时间',
activityadditionalparams: '活动附加参数',
activityid: '活动',
updatedate: '更新时间',
stageid: '流程阶段',
leftvoicemail: '保留的语音邮件',
scheduledend: '截止日期',
exchangeitemid: 'Exchange 项目 ID',
exchangerate: '汇率',
scheduledstart: '开始日期',
instancetypecode: '定期实例类型',
regardingobjectidyominame: '关于',
regardingobjecttypecode: 'RegardingObjectTypeCode',
sortdate: '排序日期',
createdate: '建立时间',
owneridyominame: '负责人',
community: '社交渠道',
ownerid: '负责人',
processid: '流程',
slaname: 'SLAName',
subject: '主题',
versionnumber: '版本号',
allparties: '所有活动方',
updateman: '更新人',
exchangeweblink: 'Exchange 链接',
statuscode: '状态描述',
timezoneruleversionnumber: '时区规则版本号',
actualstart: '实际开始时间',
activitytypecode: '活动类型',
regardingobjectidname: '关于',
statecode: '活动状态',
serviceid: '服务',
transactioncurrencyid: '货币',
slaid: 'SLA',
seriesid: "系列 ID",
traversedpath: "遍历的路径",
deliveryprioritycode: "传递优先级",
onholdtime: "暂候时间(分钟)",
workflowcreated: "由工作流创建",
senton: "发送日期",
lastonholdtime: "上一暂候时间",
actualdurationminutes: "实际持续时间",
regardingobjectid: "关于",
deliverylastattemptedon: "上次尝试传递的日期",
mapiprivate: "隐藏",
actualend: "实际结束时间",
description: "说明",
prioritycode: "优先级",
owneridtype: "所有者类型",
billed: "已记帐",
regularactivity: "是定期活动",
utcconversiontimezonecode: "UTC 转换时区代码",
createman: "建立人",
scheduleddurationminutes: "计划持续时间",
activityadditionalparams: "活动附加参数",
activityid: "活动",
updatedate: "更新时间",
stageid: "流程阶段",
leftvoicemail: "保留的语音邮件",
scheduledend: "截止日期",
exchangeitemid: "Exchange 项目 ID",
exchangerate: "汇率",
scheduledstart: "开始日期",
instancetypecode: "定期实例类型",
regardingobjectidyominame: "关于",
regardingobjecttypecode: "RegardingObjectTypeCode",
sortdate: "排序日期",
createdate: "建立时间",
owneridyominame: "负责人",
community: "社交渠道",
ownerid: "负责人",
processid: "流程",
slaname: "SLAName",
subject: "主题",
versionnumber: "版本号",
allparties: "所有活动方",
updateman: "更新人",
exchangeweblink: "Exchange 链接",
statuscode: "状态描述",
timezoneruleversionnumber: "时区规则版本号",
actualstart: "实际开始时间",
activitytypecode: "活动类型",
regardingobjectidname: "关于",
statecode: "活动状态",
serviceid: "服务",
transactioncurrencyid: "货币",
slaid: "SLA",
},
views: {
editview: {
caption: "活动",
title: '活动编辑视图',
title: "活动编辑视图",
},
gridview: {
caption: "活动",
title: '活动',
title: "活动",
},
byparentkey: {
caption: "活动",
title: '活动',
title: "活动",
},
},
main_form: {
......@@ -189,4 +189,4 @@ export default {
tip: "Copy {0}",
},
},
};
\ No newline at end of file
};
export default {
fields: {
seriesid: '系列 ID',
traversedpath: '遍历的路径',
deliveryprioritycode: '传递优先级',
onholdtime: '暂候时间(分钟)',
workflowcreated: '由工作流创建',
senton: '发送日期',
lastonholdtime: '上一暂候时间',
actualdurationminutes: '实际持续时间',
regardingobjectid: '关于',
deliverylastattemptedon: '上次尝试传递的日期',
mapiprivate: '隐藏',
actualend: '实际结束时间',
description: '说明',
prioritycode: '优先级',
owneridtype: '所有者类型',
billed: '已记帐',
regularactivity: '是定期活动',
utcconversiontimezonecode: 'UTC 转换时区代码',
createman: '建立人',
scheduleddurationminutes: '计划持续时间',
activityadditionalparams: '活动附加参数',
activityid: '活动',
updatedate: '更新时间',
stageid: '流程阶段',
leftvoicemail: '保留的语音邮件',
scheduledend: '截止日期',
exchangeitemid: 'Exchange 项目 ID',
exchangerate: '汇率',
scheduledstart: '开始日期',
instancetypecode: '定期实例类型',
regardingobjectidyominame: '关于',
regardingobjecttypecode: 'RegardingObjectTypeCode',
sortdate: '排序日期',
createdate: '建立时间',
owneridyominame: '负责人',
community: '社交渠道',
ownerid: '负责人',
processid: '流程',
slaname: 'SLAName',
subject: '主题',
versionnumber: '版本号',
allparties: '所有活动方',
updateman: '更新人',
exchangeweblink: 'Exchange 链接',
statuscode: '状态描述',
timezoneruleversionnumber: '时区规则版本号',
actualstart: '实际开始时间',
activitytypecode: '活动类型',
regardingobjectidname: '关于',
statecode: '活动状态',
serviceid: '服务',
transactioncurrencyid: '货币',
slaid: 'SLA',
seriesid: "系列 ID",
traversedpath: "遍历的路径",
deliveryprioritycode: "传递优先级",
onholdtime: "暂候时间(分钟)",
workflowcreated: "由工作流创建",
senton: "发送日期",
lastonholdtime: "上一暂候时间",
actualdurationminutes: "实际持续时间",
regardingobjectid: "关于",
deliverylastattemptedon: "上次尝试传递的日期",
mapiprivate: "隐藏",
actualend: "实际结束时间",
description: "说明",
prioritycode: "优先级",
owneridtype: "所有者类型",
billed: "已记帐",
regularactivity: "是定期活动",
utcconversiontimezonecode: "UTC 转换时区代码",
createman: "建立人",
scheduleddurationminutes: "计划持续时间",
activityadditionalparams: "活动附加参数",
activityid: "活动",
updatedate: "更新时间",
stageid: "流程阶段",
leftvoicemail: "保留的语音邮件",
scheduledend: "截止日期",
exchangeitemid: "Exchange 项目 ID",
exchangerate: "汇率",
scheduledstart: "开始日期",
instancetypecode: "定期实例类型",
regardingobjectidyominame: "关于",
regardingobjecttypecode: "RegardingObjectTypeCode",
sortdate: "排序日期",
createdate: "建立时间",
owneridyominame: "负责人",
community: "社交渠道",
ownerid: "负责人",
processid: "流程",
slaname: "SLAName",
subject: "主题",
versionnumber: "版本号",
allparties: "所有活动方",
updateman: "更新人",
exchangeweblink: "Exchange 链接",
statuscode: "状态描述",
timezoneruleversionnumber: "时区规则版本号",
actualstart: "实际开始时间",
activitytypecode: "活动类型",
regardingobjectidname: "关于",
statecode: "活动状态",
serviceid: "服务",
transactioncurrencyid: "货币",
slaid: "SLA",
},
views: {
editview: {
caption: '活动',
title: '活动编辑视图',
caption: "活动",
title: "活动编辑视图",
},
gridview: {
caption: '活动',
title: '活动',
caption: "活动",
title: "活动",
},
byparentkey: {
caption: '活动',
title: '活动',
caption: "活动",
title: "活动",
},
},
main_form: {
details: {
group1: 'activitypointer基本信息',
formpage1: '基本信息',
group2: '操作信息',
formpage2: '其它',
srfupdatedate: '更新时间',
srforikey: '',
srfkey: '活动',
srfmajortext: '主题',
srftempmode: '',
srfuf: '',
srfdeid: '',
srfsourcekey: '',
subject: '主题',
createman: '建立人',
createdate: '建立时间',
updateman: '更新人',
updatedate: '更新时间',
activityid: '活动',
group1: "activitypointer基本信息",
formpage1: "基本信息",
group2: "操作信息",
formpage2: "其它",
srfupdatedate: "更新时间",
srforikey: "",
srfkey: "活动",
srfmajortext: "主题",
srftempmode: "",
srfuf: "",
srfdeid: "",
srfsourcekey: "",
subject: "主题",
createman: "建立人",
createdate: "建立时间",
updateman: "更新人",
updatedate: "更新时间",
activityid: "活动",
},
uiactions: {
},
},
main_grid: {
columns: {
subject: '主题',
regardingobjectidname: '关于',
activitytypecode: '活动类型',
statecode: '活动状态',
prioritycode: '优先级',
scheduledstart: '开始日期',
scheduledend: '截止日期',
subject: "主题",
regardingobjectidname: "关于",
activitytypecode: "活动类型",
statecode: "活动状态",
prioritycode: "优先级",
scheduledstart: "开始日期",
scheduledend: "截止日期",
},
uiactions: {
},
},
default_searchform: {
details: {
formpage1: '常规条件',
formpage1: "常规条件",
},
uiactions: {
},
},
byparentkeytoolbar_toolbar: {
items1: {
caption: '新建',
tip: '新建',
caption: "新建",
tip: "新建",
},
deuiaction2: {
caption: '任务',
tip: '任务',
caption: "任务",
tip: "任务",
},
deuiaction3: {
caption: '电子邮件',
tip: '电子邮件',
caption: "电子邮件",
tip: "电子邮件",
},
deuiaction4: {
caption: '约会',
tip: '约会',
caption: "约会",
tip: "约会",
},
deuiaction5: {
caption: '电话联络',
tip: '电话联络',
caption: "电话联络",
tip: "电话联络",
},
deuiaction1: {
caption: '过滤',
tip: '过滤',
caption: "过滤",
tip: "过滤",
},
tbitem4: {
caption: '编辑',
tip: '编辑',
caption: "编辑",
tip: "编辑",
},
tbitem26: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem8: {
caption: '删除',
tip: '删除',
caption: "删除",
tip: "删除",
},
},
editviewtoolbar_toolbar: {
tbitem3: {
caption: '保存',
tip: '保存',
caption: "保存",
tip: "保存",
},
tbitem4: {
caption: '保存并新建',
tip: '保存并新建',
caption: "保存并新建",
tip: "保存并新建",
},
tbitem5: {
caption: '保存并关闭',
tip: '保存并关闭',
caption: "保存并关闭",
tip: "保存并关闭",
},
tbitem6: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem7: {
caption: '删除并关闭',
tip: '删除并关闭',
caption: "删除并关闭",
tip: "删除并关闭",
},
tbitem8: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem12: {
caption: '新建',
tip: '新建',
caption: "新建",
tip: "新建",
},
tbitem13: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem14: {
caption: '拷贝',
tip: '拷贝',
caption: "拷贝",
tip: "拷贝",
},
},
};
\ No newline at end of file
export default {
fields: {
importsequencenumber: '导入序列号',
subscriptionid: '预订',
updatedate: '更新时间',
attachmentcount: '附件计数',
createdate: '建立时间',
originalstartdate: '最初开始日期',
slaname: 'SLAName',
owneridyominame: '负责人',
createman: '建立人',
activityid: '约会',
actualstart: '实际开始时间',
owneridtype: '负责人类型',
regardingobjectid: '关于',
actualend: '实际结束时间',
subcategory: '子类别',
alldayevent: '全天事件',
regardingobjecttypecode: 'RegardingObjectTypeCode',
scheduledend: '约会结束时间',
outlookownerapptid: 'Outlook 约会负责人',
description: '说明',
regularactivity: '是定期活动',
unsafe: 'IsUnsafe',
seriesid: '系列 ID',
globalobjectid: 'Outlook 约会',
mapiprivate: '隐藏',
regardingobjectidyominame: '关于',
safedescription: '安全说明',
subject: '主题',
workflowcreated: '由工作流创建',
category: '类别',
utcconversiontimezonecode: 'UTC 转换时区代码',
modifiedfieldsmask: '已修改的字段掩码',
statecode: '状态',
requiredattendees: '必须出席的人员',
sortdate: '排序日期',
versionnumber: '版本号',
actualdurationminutes: '实际持续时间',
lastonholdtime: '上一暂候时间',
updateman: '更新人',
stageid: '流程阶段',
traversedpath: '遍历的路径',
prioritycode: '优先级',
attachmenterrors: 'AttachmentErrors',
statuscode: '状态描述',
ownerid: '负责人',
onholdtime: '暂候时间(分钟)',
organizer: '组织者',
timezoneruleversionnumber: '时区规则版本号',
billed: '已记帐',
activitytypecode: '活动类型',
overriddencreatedon: '创建记录的时间',
scheduledstart: '开始时间',
exchangerate: '汇率',
optionalattendees: '赴约者(备选对象)',
activityadditionalparams: '附加参数',
draft: 'IsDraft',
instancetypecode: '约会类型',
location: '地点',
scheduleddurationminutes: '持续时间',
processid: '流程',
slaid: 'SLA',
transactioncurrencyid: '货币',
serviceid: '服务',
importsequencenumber: "导入序列号",
subscriptionid: "预订",
updatedate: "更新时间",
attachmentcount: "附件计数",
createdate: "建立时间",
originalstartdate: "最初开始日期",
slaname: "SLAName",
owneridyominame: "负责人",
createman: "建立人",
activityid: "约会",
actualstart: "实际开始时间",
owneridtype: "负责人类型",
regardingobjectid: "关于",
actualend: "实际结束时间",
subcategory: "子类别",
alldayevent: "全天事件",
regardingobjecttypecode: "RegardingObjectTypeCode",
scheduledend: "约会结束时间",
outlookownerapptid: "Outlook 约会负责人",
description: "说明",
regularactivity: "是定期活动",
unsafe: "IsUnsafe",
seriesid: "系列 ID",
globalobjectid: "Outlook 约会",
mapiprivate: "隐藏",
regardingobjectidyominame: "关于",
safedescription: "安全说明",
subject: "主题",
workflowcreated: "由工作流创建",
category: "类别",
utcconversiontimezonecode: "UTC 转换时区代码",
modifiedfieldsmask: "已修改的字段掩码",
statecode: "状态",
requiredattendees: "必须出席的人员",
sortdate: "排序日期",
versionnumber: "版本号",
actualdurationminutes: "实际持续时间",
lastonholdtime: "上一暂候时间",
updateman: "更新人",
stageid: "流程阶段",
traversedpath: "遍历的路径",
prioritycode: "优先级",
attachmenterrors: "AttachmentErrors",
statuscode: "状态描述",
ownerid: "负责人",
onholdtime: "暂候时间(分钟)",
organizer: "组织者",
timezoneruleversionnumber: "时区规则版本号",
billed: "已记帐",
activitytypecode: "活动类型",
overriddencreatedon: "创建记录的时间",
scheduledstart: "开始时间",
exchangerate: "汇率",
optionalattendees: "赴约者(备选对象)",
activityadditionalparams: "附加参数",
draft: "IsDraft",
instancetypecode: "约会类型",
location: "地点",
scheduleddurationminutes: "持续时间",
processid: "流程",
slaid: "SLA",
transactioncurrencyid: "货币",
serviceid: "服务",
},
views: {
editview: {
caption: "约会",
title: '约会编辑视图',
title: "约会编辑视图",
},
quickcreate: {
caption: "约会",
title: '约会',
title: "约会",
},
},
quickcreate_form: {
......@@ -155,4 +155,4 @@ export default {
tip: "Copy {0}",
},
},
};
\ No newline at end of file
};
export default {
fields: {
importsequencenumber: '导入序列号',
subscriptionid: '预订',
updatedate: '更新时间',
attachmentcount: '附件计数',
createdate: '建立时间',
originalstartdate: '最初开始日期',
slaname: 'SLAName',
owneridyominame: '负责人',
createman: '建立人',
activityid: '约会',
actualstart: '实际开始时间',
owneridtype: '负责人类型',
regardingobjectid: '关于',
actualend: '实际结束时间',
subcategory: '子类别',
alldayevent: '全天事件',
regardingobjecttypecode: 'RegardingObjectTypeCode',
scheduledend: '约会结束时间',
outlookownerapptid: 'Outlook 约会负责人',
description: '说明',
regularactivity: '是定期活动',
unsafe: 'IsUnsafe',
seriesid: '系列 ID',
globalobjectid: 'Outlook 约会',
mapiprivate: '隐藏',
regardingobjectidyominame: '关于',
safedescription: '安全说明',
subject: '主题',
workflowcreated: '由工作流创建',
category: '类别',
utcconversiontimezonecode: 'UTC 转换时区代码',
modifiedfieldsmask: '已修改的字段掩码',
statecode: '状态',
requiredattendees: '必须出席的人员',
sortdate: '排序日期',
versionnumber: '版本号',
actualdurationminutes: '实际持续时间',
lastonholdtime: '上一暂候时间',
updateman: '更新人',
stageid: '流程阶段',
traversedpath: '遍历的路径',
prioritycode: '优先级',
attachmenterrors: 'AttachmentErrors',
statuscode: '状态描述',
ownerid: '负责人',
onholdtime: '暂候时间(分钟)',
organizer: '组织者',
timezoneruleversionnumber: '时区规则版本号',
billed: '已记帐',
activitytypecode: '活动类型',
overriddencreatedon: '创建记录的时间',
scheduledstart: '开始时间',
exchangerate: '汇率',
optionalattendees: '赴约者(备选对象)',
activityadditionalparams: '附加参数',
draft: 'IsDraft',
instancetypecode: '约会类型',
location: '地点',
scheduleddurationminutes: '持续时间',
processid: '流程',
slaid: 'SLA',
transactioncurrencyid: '货币',
serviceid: '服务',
importsequencenumber: "导入序列号",
subscriptionid: "预订",
updatedate: "更新时间",
attachmentcount: "附件计数",
createdate: "建立时间",
originalstartdate: "最初开始日期",
slaname: "SLAName",
owneridyominame: "负责人",
createman: "建立人",
activityid: "约会",
actualstart: "实际开始时间",
owneridtype: "负责人类型",
regardingobjectid: "关于",
actualend: "实际结束时间",
subcategory: "子类别",
alldayevent: "全天事件",
regardingobjecttypecode: "RegardingObjectTypeCode",
scheduledend: "约会结束时间",
outlookownerapptid: "Outlook 约会负责人",
description: "说明",
regularactivity: "是定期活动",
unsafe: "IsUnsafe",
seriesid: "系列 ID",
globalobjectid: "Outlook 约会",
mapiprivate: "隐藏",
regardingobjectidyominame: "关于",
safedescription: "安全说明",
subject: "主题",
workflowcreated: "由工作流创建",
category: "类别",
utcconversiontimezonecode: "UTC 转换时区代码",
modifiedfieldsmask: "已修改的字段掩码",
statecode: "状态",
requiredattendees: "必须出席的人员",
sortdate: "排序日期",
versionnumber: "版本号",
actualdurationminutes: "实际持续时间",
lastonholdtime: "上一暂候时间",
updateman: "更新人",
stageid: "流程阶段",
traversedpath: "遍历的路径",
prioritycode: "优先级",
attachmenterrors: "AttachmentErrors",
statuscode: "状态描述",
ownerid: "负责人",
onholdtime: "暂候时间(分钟)",
organizer: "组织者",
timezoneruleversionnumber: "时区规则版本号",
billed: "已记帐",
activitytypecode: "活动类型",
overriddencreatedon: "创建记录的时间",
scheduledstart: "开始时间",
exchangerate: "汇率",
optionalattendees: "赴约者(备选对象)",
activityadditionalparams: "附加参数",
draft: "IsDraft",
instancetypecode: "约会类型",
location: "地点",
scheduleddurationminutes: "持续时间",
processid: "流程",
slaid: "SLA",
transactioncurrencyid: "货币",
serviceid: "服务",
},
views: {
editview: {
caption: '约会',
title: '约会编辑视图',
caption: "约会",
title: "约会编辑视图",
},
quickcreate: {
caption: '约会',
title: '约会',
caption: "约会",
title: "约会",
},
},
quickcreate_form: {
details: {
group1: 'appointment基本信息',
formpage1: '基本信息',
srfupdatedate: '更新时间',
srforikey: '',
srfkey: '约会',
srfmajortext: '主题',
srftempmode: '',
srfuf: '',
srfdeid: '',
srfsourcekey: '',
subject: '主题',
activityid: '约会',
group1: "appointment基本信息",
formpage1: "基本信息",
srfupdatedate: "更新时间",
srforikey: "",
srfkey: "约会",
srfmajortext: "主题",
srftempmode: "",
srfuf: "",
srfdeid: "",
srfsourcekey: "",
subject: "主题",
activityid: "约会",
},
uiactions: {
},
},
main_form: {
details: {
group1: 'appointment基本信息',
formpage1: '基本信息',
group2: '操作信息',
formpage2: '其它',
srfupdatedate: '更新时间',
srforikey: '',
srfkey: '约会',
srfmajortext: '主题',
srftempmode: '',
srfuf: '',
srfdeid: '',
srfsourcekey: '',
subject: '主题',
createman: '建立人',
createdate: '建立时间',
updateman: '更新人',
updatedate: '更新时间',
activityid: '约会',
group1: "appointment基本信息",
formpage1: "基本信息",
group2: "操作信息",
formpage2: "其它",
srfupdatedate: "更新时间",
srforikey: "",
srfkey: "约会",
srfmajortext: "主题",
srftempmode: "",
srfuf: "",
srfdeid: "",
srfsourcekey: "",
subject: "主题",
createman: "建立人",
createdate: "建立时间",
updateman: "更新人",
updatedate: "更新时间",
activityid: "约会",
},
uiactions: {
},
},
editviewtoolbar_toolbar: {
tbitem3: {
caption: '保存',
tip: '保存',
caption: "保存",
tip: "保存",
},
tbitem4: {
caption: '保存并新建',
tip: '保存并新建',
caption: "保存并新建",
tip: "保存并新建",
},
tbitem5: {
caption: '保存并关闭',
tip: '保存并关闭',
caption: "保存并关闭",
tip: "保存并关闭",
},
tbitem6: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem7: {
caption: '删除并关闭',
tip: '删除并关闭',
caption: "删除并关闭",
tip: "删除并关闭",
},
tbitem8: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem12: {
caption: '新建',
tip: '新建',
caption: "新建",
tip: "新建",
},
tbitem13: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem14: {
caption: '拷贝',
tip: '拷贝',
caption: "拷贝",
tip: "拷贝",
},
},
};
\ No newline at end of file
export default {
fields: {
statuscode: '状态描述',
regardingobjectidyominame: '关于',
regularactivity: '是定期活动',
createdate: '建立时间',
overriddencreatedon: 'Record Created On',
sortdate: '排序日期',
traversedpath: '遍历的路径',
activitytypecode: '活动类型',
optionalattendees: 'Optional Attendees',
ownerid: '负责人',
scheduledend: '计划结束时间',
customers: 'Customers',
organizer: 'Organizer',
budgetedcost: '预算分配',
category: '类别',
channeltypecode: '渠道',
budgetedcost_base: '预算分配 (Base)',
bcc: 'BCC',
scheduleddurationminutes: '计划持续时间',
subcategory: '子类别',
cc: 'CC',
prioritycode: '优先级',
updateman: '更新人',
partners: 'Outsource Vendors',
typecode: '类型',
statecode: '状态',
actualstart: '实际开始时间',
slaname: 'SLAName',
versionnumber: '版本号',
donotsendonoptout: '排除退出的成员',
exchangeitemid: 'Exchange 项目 ID',
exchangeweblink: 'Exchange WebLink',
community: '社交渠道',
subject: '主题',
actualcost_base: '实际成本 (Base)',
to: 'To',
instancetypecode: '定期实例类型',
lastonholdtime: '上一暂候时间',
timezoneruleversionnumber: '时区规则版本号',
owneridyominame: '负责人',
stageid: '流程阶段',
onholdtime: '暂候时间(分钟)',
description: '说明',
mapiprivate: '隐藏',
activityadditionalparams: '活动附加参数',
deliveryprioritycode: '传递优先级',
requiredattendees: 'Required Attendees',
serviceid: '服务',
exchangerate: '汇率',
updatedate: '更新时间',
importsequencenumber: 'Import Sequence Number',
scheduledstart: '计划开始时间',
actualdurationminutes: '实际持续时间',
senton: '发送日期',
activityid: '市场活动项目',
excludeifcontactedinxdays: '天数',
leftvoicemail: '保留的语音邮件',
workflowcreated: '由工作流创建',
regardingobjecttypecode: 'RegardingObjectTypeCode',
utcconversiontimezonecode: 'UTC 转换时区代码',
regardingobjectid: '关于',
ignoreinactivelistmembers: '忽略停用市场营销列表成员',
createman: '建立人',
from: '来自',
billed: '已记帐',
actualcost: '实际成本',
owneridtype: '负责人类型',
deliverylastattemptedon: '上次尝试传递的日期',
actualend: '实际结束时间',
seriesid: '系列 ID',
processid: '流程',
resources: 'Resources',
slaid: 'SLA',
statuscode: "状态描述",
regardingobjectidyominame: "关于",
regularactivity: "是定期活动",
createdate: "建立时间",
overriddencreatedon: "Record Created On",
sortdate: "排序日期",
traversedpath: "遍历的路径",
activitytypecode: "活动类型",
optionalattendees: "Optional Attendees",
ownerid: "负责人",
scheduledend: "计划结束时间",
customers: "Customers",
organizer: "Organizer",
budgetedcost: "预算分配",
category: "类别",
channeltypecode: "渠道",
budgetedcost_base: "预算分配 (Base)",
bcc: "BCC",
scheduleddurationminutes: "计划持续时间",
subcategory: "子类别",
cc: "CC",
prioritycode: "优先级",
updateman: "更新人",
partners: "Outsource Vendors",
typecode: "类型",
statecode: "状态",
actualstart: "实际开始时间",
slaname: "SLAName",
versionnumber: "版本号",
donotsendonoptout: "排除退出的成员",
exchangeitemid: "Exchange 项目 ID",
exchangeweblink: "Exchange WebLink",
community: "社交渠道",
subject: "主题",
actualcost_base: "实际成本 (Base)",
to: "To",
instancetypecode: "定期实例类型",
lastonholdtime: "上一暂候时间",
timezoneruleversionnumber: "时区规则版本号",
owneridyominame: "负责人",
stageid: "流程阶段",
onholdtime: "暂候时间(分钟)",
description: "说明",
mapiprivate: "隐藏",
activityadditionalparams: "活动附加参数",
deliveryprioritycode: "传递优先级",
requiredattendees: "Required Attendees",
serviceid: "服务",
exchangerate: "汇率",
updatedate: "更新时间",
importsequencenumber: "Import Sequence Number",
scheduledstart: "计划开始时间",
actualdurationminutes: "实际持续时间",
senton: "发送日期",
activityid: "市场活动项目",
excludeifcontactedinxdays: "天数",
leftvoicemail: "保留的语音邮件",
workflowcreated: "由工作流创建",
regardingobjecttypecode: "RegardingObjectTypeCode",
utcconversiontimezonecode: "UTC 转换时区代码",
regardingobjectid: "关于",
ignoreinactivelistmembers: "忽略停用市场营销列表成员",
createman: "建立人",
from: "来自",
billed: "已记帐",
actualcost: "实际成本",
owneridtype: "负责人类型",
deliverylastattemptedon: "上次尝试传递的日期",
actualend: "实际结束时间",
seriesid: "系列 ID",
processid: "流程",
resources: "Resources",
slaid: "SLA",
},
views: {
quickcreate: {
caption: "快速新建",
title: '快速新建',
title: "快速新建",
},
editview: {
caption: "市场活动项目",
title: '市场活动项目编辑视图',
title: "市场活动项目编辑视图",
},
byparentkey: {
caption: "市场活动项目",
title: '市场活动项目表格视图',
title: "市场活动项目表格视图",
},
gridview: {
caption: "市场活动项目",
title: '市场活动项目表格视图',
title: "市场活动项目表格视图",
},
},
main_form: {
......@@ -275,4 +275,4 @@ export default {
tip: "Filter",
},
},
};
\ No newline at end of file
};
export default {
fields: {
createman: '建立人',
createdate: '建立时间',
updatedate: '更新时间',
updateman: '更新人',
relationshipstype: '关系类型',
entityid: '市场活动',
entityname: '活动名称',
entity2id: '市场活动',
entity2name: '活动2名称',
relationshipsid: '关系标识',
relationshipsname: '关系名称',
createman: "建立人",
createdate: "建立时间",
updatedate: "更新时间",
updateman: "更新人",
relationshipstype: "关系类型",
entityid: "市场活动",
entityname: "活动名称",
entity2id: "市场活动",
entity2name: "活动2名称",
relationshipsid: "关系标识",
relationshipsname: "关系名称",
},
};
\ No newline at end of file
};
export default {
fields: {
createman: '建立人',
createdate: '建立时间',
updatedate: '更新时间',
updateman: '更新人',
relationshipstype: '关系类型',
entityid: '市场活动',
entityname: '活动名称',
entity2id: '市场活动',
entity2name: '活动2名称',
relationshipsid: '关系标识',
relationshipsname: '关系名称',
createman: "建立人",
createdate: "建立时间",
updatedate: "更新时间",
updateman: "更新人",
relationshipstype: "关系类型",
entityid: "市场活动",
entityname: "活动名称",
entity2id: "市场活动",
entity2name: "活动2名称",
relationshipsid: "关系标识",
relationshipsname: "关系名称",
},
};
\ No newline at end of file
export default {
fields: {
createdate: '建立时间',
createman: '建立人',
relationshipstype: '关系类型',
updatedate: '更新时间',
updateman: '更新人',
entityid: '市场活动',
entityname: '活动名称',
entity2id: '列表',
entity2name: '名称',
relationshipsid: '关系标识',
relationshipsname: '关系名称',
createdate: "建立时间",
createman: "建立人",
relationshipstype: "关系类型",
updatedate: "更新时间",
updateman: "更新人",
entityid: "市场活动",
entityname: "活动名称",
entity2id: "列表",
entity2name: "名称",
relationshipsid: "关系标识",
relationshipsname: "关系名称",
},
views: {
gridview: {
caption: "市场活动-营销列表",
title: '市场活动-营销列表表格视图',
title: "市场活动-营销列表表格视图",
},
editview: {
caption: "市场活动-营销列表",
title: '市场活动-营销列表编辑视图',
title: "市场活动-营销列表编辑视图",
},
},
main_form: {
......@@ -123,4 +123,4 @@ export default {
tip: "关闭",
},
},
};
\ No newline at end of file
};
export default {
fields: {
createdate: '建立时间',
createman: '建立人',
relationshipstype: '关系类型',
updatedate: '更新时间',
updateman: '更新人',
entityid: '市场活动',
entityname: '活动名称',
entity2id: '列表',
entity2name: '名称',
relationshipsid: '关系标识',
relationshipsname: '关系名称',
createdate: "建立时间",
createman: "建立人",
relationshipstype: "关系类型",
updatedate: "更新时间",
updateman: "更新人",
entityid: "市场活动",
entityname: "活动名称",
entity2id: "列表",
entity2name: "名称",
relationshipsid: "关系标识",
relationshipsname: "关系名称",
},
views: {
gridview: {
caption: '市场活动-营销列表',
title: '市场活动-营销列表表格视图',
caption: "市场活动-营销列表",
title: "市场活动-营销列表表格视图",
},
editview: {
caption: '市场活动-营销列表',
title: '市场活动-营销列表编辑视图',
caption: "市场活动-营销列表",
title: "市场活动-营销列表编辑视图",
},
},
main_form: {
details: {
group1: '市场活动-营销列表基本信息',
formpage1: '基本信息',
group2: '操作信息',
formpage2: '其它',
srfupdatedate: '更新时间',
srforikey: '',
srfkey: '关系标识',
srfmajortext: '关系名称',
srftempmode: '',
srfuf: '',
srfdeid: '',
srfsourcekey: '',
relationshipsid: '关系标识',
group1: "市场活动-营销列表基本信息",
formpage1: "基本信息",
group2: "操作信息",
formpage2: "其它",
srfupdatedate: "更新时间",
srforikey: "",
srfkey: "关系标识",
srfmajortext: "关系名称",
srftempmode: "",
srfuf: "",
srfdeid: "",
srfsourcekey: "",
relationshipsid: "关系标识",
},
uiactions: {
},
......@@ -49,77 +49,77 @@ export default {
},
default_searchform: {
details: {
formpage1: '常规条件',
formpage1: "常规条件",
},
uiactions: {
},
},
gridviewtoolbar_toolbar: {
tbitem3: {
caption: '新建',
tip: '新建',
caption: "新建",
tip: "新建",
},
tbitem4: {
caption: '编辑',
tip: '编辑',
caption: "编辑",
tip: "编辑",
},
tbitem6: {
caption: '拷贝',
tip: '拷贝',
caption: "拷贝",
tip: "拷贝",
},
tbitem7: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem8: {
caption: '删除',
tip: '删除',
caption: "删除",
tip: "删除",
},
tbitem9: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem13: {
caption: '导出',
tip: '导出',
caption: "导出",
tip: "导出",
},
tbitem10: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
tbitem19: {
caption: '过滤',
tip: '过滤',
caption: "过滤",
tip: "过滤",
},
},
editviewtoolbar_toolbar: {
tbitem3: {
caption: '保存',
tip: '保存',
caption: "保存",
tip: "保存",
},
tbitem5: {
caption: '保存并关闭',
tip: '保存并关闭',
caption: "保存并关闭",
tip: "保存并关闭",
},
tbitem6: {
caption: '-',
tip: '',
caption: "-",
tip: "",
},
deuiaction1: {
caption: '删除并关闭',
tip: '删除并关闭',
caption: "删除并关闭",
tip: "删除并关闭",
},
deuiaction2: {
caption: '刷新',
tip: '刷新',
caption: "刷新",
tip: "刷新",
},
seperator1: {
caption: '',
tip: '',
caption: "",
tip: "",
},
tbitem12: {
caption: '关闭',
tip: '关闭',
caption: "关闭",
tip: "关闭",
},
},
};
\ No newline at end of file
......@@ -189,7 +189,7 @@ mock.onGet('v7/centralappmenu').reply((config: any) => {
iconcls: 'fa fa-line-chart',
icon: '',
textcls: '',
appfunctag: '_3',
appfunctag: 'Auto16',
resourcetag: '',
},
{
......@@ -485,7 +485,7 @@ mock.onGet('v7/centralappmenu').reply((config: any) => {
iconcls: 'fa fa-lastfm',
icon: '',
textcls: '',
appfunctag: '_2',
appfunctag: 'Auto15',
resourcetag: '',
},
{
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册