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

lab_gzf 发布系统代码

上级 6d526df9
......@@ -509,6 +509,16 @@
"viewtag": "49e5e89fb51fa9929925b532841b2549",
"memo": ""
},
"opportunityconoppgridview": {
"title": "商机表格视图",
"caption": "商机信息",
"viewtype": "DEGRIDVIEW",
"viewmodule": "Sales",
"viewname": "OpportunityConOppGridView",
"viewfilename": "opportunity-con-opp-grid-view",
"viewtag": "50138c2b066081ec8b6fe67c88af5371",
"memo": "系统自动添加"
},
"campaignsummary_head": {
"title": "市场活动概览",
"caption": "市场活动概览",
......@@ -719,6 +729,16 @@
"viewtag": "6e866e05730d8c3e03f150a33225307d",
"memo": "系统自动添加"
},
"leadconleadgridview": {
"title": "潜在顾客信息",
"caption": "潜在顾客信息",
"viewtype": "DEGRIDVIEW",
"viewmodule": "Sales",
"viewname": "LeadConLeadGridView",
"viewfilename": "lead-con-lead-grid-view",
"viewtag": "6f35f461b53398775ff2f1a563776fa3",
"memo": "系统自动添加"
},
"accountinnerpickupgridview": {
"title": "客户选择表格视图",
"caption": "客户",
......@@ -1009,6 +1029,16 @@
"viewtag": "9bf80730e83a74615919a0f0907505d4",
"memo": ""
},
"opportunitylistexpview": {
"title": "商机列表导航视图",
"caption": "商机信息",
"viewtype": "DELISTEXPVIEW",
"viewmodule": "Sales",
"viewname": "OpportunityListExpView",
"viewfilename": "opportunity-list-exp-view",
"viewtag": "9f92696f8eeec188f5ea674b925df275",
"memo": ""
},
"ibizlistsummary": {
"title": "市场营销列表概览",
"caption": "市场营销列表概览",
......
......@@ -292,10 +292,12 @@ export default {
srfsourcekey: "",
fullname: "全名",
jobtitle: "职务",
customername: "客户",
emailaddress1: "电子邮件",
telephone1: "商务电话",
mobilephone: "移动电话",
fax: "传真",
customerid: "客户",
contactid: "联系人",
},
uiactions: {
......@@ -316,6 +318,7 @@ export default {
srfsourcekey: "",
fullname: "全名",
jobtitle: "职务",
customername: "客户",
emailaddress1: "电子邮件",
telephone1: "商务电话",
mobilephone: "移动电话",
......@@ -325,6 +328,7 @@ export default {
address1_city: "市/县",
address1_line1: "街道",
address1_postalcode: "邮政编码",
customerid: "客户",
contactid: "联系人",
},
uiactions: {
......@@ -344,6 +348,7 @@ export default {
srfsourcekey: "",
fullname: "全名",
jobtitle: "职务",
customername: "客户",
emailaddress1: "电子邮件",
telephone1: "商务电话",
mobilephone: "移动电话",
......
......@@ -291,10 +291,12 @@ export default {
srfsourcekey: '',
fullname: '全名',
jobtitle: '职务',
customername: '客户',
emailaddress1: '电子邮件',
telephone1: '商务电话',
mobilephone: '移动电话',
fax: '传真',
customerid: '客户',
contactid: '联系人',
},
uiactions: {
......@@ -315,6 +317,7 @@ export default {
srfsourcekey: '',
fullname: '全名',
jobtitle: '职务',
customername: '客户',
emailaddress1: '电子邮件',
telephone1: '商务电话',
mobilephone: '移动电话',
......@@ -324,6 +327,7 @@ export default {
address1_city: '市/县',
address1_line1: '街道',
address1_postalcode: '邮政编码',
customerid: '客户',
contactid: '联系人',
},
uiactions: {
......@@ -343,6 +347,7 @@ export default {
srfsourcekey: '',
fullname: '全名',
jobtitle: '职务',
customername: '客户',
emailaddress1: '电子邮件',
telephone1: '商务电话',
mobilephone: '移动电话',
......
......@@ -181,6 +181,10 @@ export default {
info_market: {
caption: "潜在顾客",
title: '潜在顾客编辑视图',
},
conleadgridview: {
caption: "潜在顾客信息",
title: '潜在顾客信息',
},
info_contact: {
caption: "潜在顾客",
......@@ -363,7 +367,7 @@ export default {
uiactions: {
},
},
gridviewtoolbar_toolbar: {
conleadgridviewtoolbar_toolbar: {
tbitem1_openquickcreateview: {
caption: "新建",
tip: "新建",
......@@ -467,6 +471,48 @@ export default {
tip: "关闭",
},
},
gridviewtoolbar_toolbar: {
tbitem1_openquickcreateview: {
caption: "新建",
tip: "新建",
},
tbitem2: {
caption: "-",
tip: "",
},
tbitem4: {
caption: "Edit",
tip: "Edit {0}",
},
tbitem6: {
caption: "Copy",
tip: "Copy {0}",
},
tbitem7: {
caption: "-",
tip: "",
},
tbitem8: {
caption: "Remove",
tip: "Remove {0}",
},
tbitem9: {
caption: "-",
tip: "",
},
tbitem13: {
caption: "Export",
tip: "Export {0} Data To Excel",
},
tbitem10: {
caption: "-",
tip: "",
},
tbitem19: {
caption: "Filter",
tip: "Filter",
},
},
editviewtoolbar_toolbar: {
tbitem3: {
caption: "Save",
......
......@@ -180,6 +180,10 @@ export default {
info_market: {
caption: '潜在顾客',
title: '潜在顾客编辑视图',
},
conleadgridview: {
caption: '潜在顾客信息',
title: '潜在顾客信息',
},
info_contact: {
caption: '潜在顾客',
......@@ -362,7 +366,7 @@ export default {
uiactions: {
},
},
gridviewtoolbar_toolbar: {
conleadgridviewtoolbar_toolbar: {
tbitem1_openquickcreateview: {
caption: '新建',
tip: '新建',
......@@ -466,6 +470,48 @@ export default {
tip: '关闭',
},
},
gridviewtoolbar_toolbar: {
tbitem1_openquickcreateview: {
caption: '新建',
tip: '新建',
},
tbitem2: {
caption: '-',
tip: '',
},
tbitem4: {
caption: '编辑',
tip: '编辑',
},
tbitem6: {
caption: '拷贝',
tip: '拷贝',
},
tbitem7: {
caption: '-',
tip: '',
},
tbitem8: {
caption: '删除',
tip: '删除',
},
tbitem9: {
caption: '-',
tip: '',
},
tbitem13: {
caption: '导出',
tip: '导出',
},
tbitem10: {
caption: '-',
tip: '',
},
tbitem19: {
caption: '过滤',
tip: '过滤',
},
},
editviewtoolbar_toolbar: {
tbitem3: {
caption: '保存',
......
......@@ -117,6 +117,10 @@ export default {
summary: {
caption: "商机概览",
title: '商机概览',
},
conoppgridview: {
caption: "商机信息",
title: '商机表格视图',
},
gridview: {
caption: "商机信息",
......@@ -145,6 +149,10 @@ export default {
oppprodashboardview: {
caption: "商机",
title: '商机数据看板视图',
},
listexpview: {
caption: "商机信息",
title: '商机列表导航视图',
},
quickcreate: {
caption: "快速新建",
......@@ -184,9 +192,9 @@ export default {
},
productinfo_form: {
details: {
group1: "商机基本信息",
group1: "价目表信息",
druipart1: "",
grouppanel1: "分组面板",
grouppanel1: "产品明细信息",
formpage1: "基本信息",
srfupdatedate: "更新时间",
srforikey: "",
......@@ -276,7 +284,7 @@ export default {
uiactions: {
},
},
gridviewtoolbar_toolbar: {
conoppgridviewtoolbar_toolbar: {
tbitem1_openquickcreateview: {
caption: "新建",
tip: "新建",
......@@ -360,6 +368,48 @@ export default {
tip: "关闭",
},
},
gridviewtoolbar_toolbar: {
tbitem1_openquickcreateview: {
caption: "新建",
tip: "新建",
},
tbitem2: {
caption: "-",
tip: "",
},
tbitem4: {
caption: "Edit",
tip: "Edit {0}",
},
tbitem6: {
caption: "Copy",
tip: "Copy {0}",
},
tbitem7: {
caption: "-",
tip: "",
},
tbitem8: {
caption: "Remove",
tip: "Remove {0}",
},
tbitem9: {
caption: "-",
tip: "",
},
tbitem13: {
caption: "Export",
tip: "Export {0} Data To Excel",
},
tbitem10: {
caption: "-",
tip: "",
},
tbitem19: {
caption: "Filter",
tip: "Filter",
},
},
editviewtoolbar_toolbar: {
tbitem3: {
caption: "Save",
......
......@@ -116,6 +116,10 @@ export default {
summary: {
caption: '商机概览',
title: '商机概览',
},
conoppgridview: {
caption: '商机信息',
title: '商机表格视图',
},
gridview: {
caption: '商机信息',
......@@ -144,6 +148,10 @@ export default {
oppprodashboardview: {
caption: '商机',
title: '商机数据看板视图',
},
listexpview: {
caption: '商机信息',
title: '商机列表导航视图',
},
quickcreate: {
caption: '快速新建',
......@@ -183,9 +191,9 @@ export default {
},
productinfo_form: {
details: {
group1: '商机基本信息',
group1: '价目表信息',
druipart1: '',
grouppanel1: '分组面板',
grouppanel1: '产品明细信息',
formpage1: '基本信息',
srfupdatedate: '更新时间',
srforikey: '',
......@@ -275,7 +283,7 @@ export default {
uiactions: {
},
},
gridviewtoolbar_toolbar: {
conoppgridviewtoolbar_toolbar: {
tbitem1_openquickcreateview: {
caption: '新建',
tip: '新建',
......@@ -359,6 +367,48 @@ export default {
tip: '关闭',
},
},
gridviewtoolbar_toolbar: {
tbitem1_openquickcreateview: {
caption: '新建',
tip: '新建',
},
tbitem2: {
caption: '-',
tip: '',
},
tbitem4: {
caption: '编辑',
tip: '编辑',
},
tbitem6: {
caption: '拷贝',
tip: '拷贝',
},
tbitem7: {
caption: '-',
tip: '',
},
tbitem8: {
caption: '删除',
tip: '删除',
},
tbitem9: {
caption: '-',
tip: '',
},
tbitem13: {
caption: '导出',
tip: '导出',
},
tbitem10: {
caption: '-',
tip: '',
},
tbitem19: {
caption: '过滤',
tip: '过滤',
},
},
editviewtoolbar_toolbar: {
tbitem3: {
caption: '保存',
......
......@@ -415,6 +415,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewname": "LeadInfo_Market",
"viewtag": "49e5e89fb51fa9929925b532841b2549"
},
"opportunityconoppgridview": {
"title": "商机表格视图",
"caption": "商机信息",
"viewtype": "DEGRIDVIEW",
"viewmodule": "Sales",
"viewname": "OpportunityConOppGridView",
"viewtag": "50138c2b066081ec8b6fe67c88af5371"
},
"campaignsummary_head": {
"title": "市场活动概览",
"caption": "市场活动概览",
......@@ -583,6 +591,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewname": "OpportunityPickupGridView",
"viewtag": "6e866e05730d8c3e03f150a33225307d"
},
"leadconleadgridview": {
"title": "潜在顾客信息",
"caption": "潜在顾客信息",
"viewtype": "DEGRIDVIEW",
"viewmodule": "Sales",
"viewname": "LeadConLeadGridView",
"viewtag": "6f35f461b53398775ff2f1a563776fa3"
},
"accountinnerpickupgridview": {
"title": "客户选择表格视图",
"caption": "客户",
......@@ -815,6 +831,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewname": "CompetitorSummary",
"viewtag": "9bf80730e83a74615919a0f0907505d4"
},
"opportunitylistexpview": {
"title": "商机列表导航视图",
"caption": "商机信息",
"viewtype": "DELISTEXPVIEW",
"viewmodule": "Sales",
"viewname": "OpportunityListExpView",
"viewtag": "9f92696f8eeec188f5ea674b925df275"
},
"ibizlistsummary": {
"title": "市场营销列表概览",
"caption": "市场营销列表概览",
......
<template>
<studio-view-style2 viewName="leadconleadgridview" viewTitle="潜在顾客信息" class='degridview lead-con-lead-grid-view'>
<i-input slot="quickSearch" v-show="!isExpandSearchForm" v-model="query" search @on-search="onSearch($event)"/>
<template slot="toolbar">
<view-toolbar mode="STYLE2" :model="toolBarModels" @item-click="toolbar_click"/> </template>
<template slot="searchForm">
<view_searchform
:viewState="viewState"
:viewparams="viewparams"
:context="context"
:showBusyIndicator="true"
v-show="isExpandSearchForm"
loaddraftAction="FilterGetDraft"
loadAction="FilterGet"
name="searchform"
ref='searchform'
@save="searchform_save($event)"
@search="searchform_search($event)"
@load="searchform_load($event)"
@closeview="closeView($event)">
</view_searchform>
</template>
<view_grid
:viewState="viewState"
:viewparams="viewparams"
:context="context"
:isSingleSelect="isSingleSelect"
:showBusyIndicator="true"
:isOpenEdit="false"
:gridRowActiveMode="gridRowActiveMode"
@save="onSave"
updateAction=""
removeAction="Remove"
loaddraftAction=""
loadAction=""
createAction=""
fetchAction="FetchDefault"
:newdata="newdata"
:opendata="opendata"
name="grid"
ref='grid'
@selectionchange="grid_selectionchange($event)"
@beforeload="grid_beforeload($event)"
@rowdblclick="grid_rowdblclick($event)"
@remove="grid_remove($event)"
@load="grid_load($event)"
@closeview="closeView($event)">
</view_grid>
</studio-view-style2>
</template>
<script lang='tsx'>
import { Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { Subject } from 'rxjs';
import { UIActionTool, Util } from '@/utils';
import { VueLifeCycleProcessing, GridViewBase } from '@/studio-core';
import LeadService from '@/service/lead/lead-service';
import GridViewEngine from '@engine/view/grid-view-engine';
import LeadUIService from '@/uiservice/lead/lead-ui-service';
import CodeListService from "@service/app/codelist-service";
/**
* 潜在顾客信息视图基类
*
* @export
* @class LeadConLeadGridViewBase
* @extends {GridViewBase}
*/
@Component({})
@VueLifeCycleProcessing()
export default class LeadConLeadGridViewBase extends GridViewBase {
/**
* 实体服务对象
*
* @type {LeadService}
* @memberof LeadConLeadGridViewBase
*/
protected appEntityService: LeadService = new LeadService;
/**
* 计数器服务对象集合
*
* @protected
* @type {Array<*>}
* @memberof LeadConLeadGridViewBase
*/
protected counterServiceArray: Array<any> = [];
/**
* 自定义视图导航上下文集合
*
* @protected
* @type {*}
* @memberof LeadConLeadGridViewBase
*/
protected customViewNavContexts: any = {
};
/**
* 自定义视图导航参数集合
*
* @protected
* @type {*}
* @memberof LeadConLeadGridViewBase
*/
protected customViewParams: any = {
};
/**
* 视图模型数据
*
* @protected
* @type {*}
* @memberof LeadConLeadGridViewBase
*/
protected model: any = {
srfCaption: 'entities.lead.views.conleadgridview.caption',
srfTitle: 'entities.lead.views.conleadgridview.title',
srfSubTitle: 'entities.lead.views.conleadgridview.subtitle',
dataInfo: ''
}
/**
* 容器模型
*
* @protected
* @type {*}
* @memberof LeadConLeadGridViewBase
*/
protected containerModel: any = {
view_toolbar: { name: 'toolbar', type: 'TOOLBAR' },
view_grid: { name: 'grid', type: 'GRID' },
view_searchform: { name: 'searchform', type: 'SEARCHFORM' },
};
/**
* 工具栏模型
*
* @type {*}
* @memberof LeadConLeadGridView
*/
public toolBarModels: any = {
tbitem1_openquickcreateview: { name: 'tbitem1_openquickcreateview', caption: '新建','isShowCaption':true,'isShowIcon':true, tooltip: '新建', iconcls: 'fa fa-user-plus', icon: '', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'OpenQuickCreateView', target: 'NONE' }, class: '' },
tbitem2: { name: 'tbitem2', type: 'SEPERATOR', visabled: true, dataaccaction: '', uiaction: { } },
tbitem4: { name: 'tbitem4', caption: '编辑','isShowCaption':true,'isShowIcon':true, tooltip: '编辑', iconcls: 'fa fa-edit', icon: '', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'Edit', target: 'SINGLEKEY' }, class: '' },
tbitem6: { name: 'tbitem6', caption: '拷贝','isShowCaption':true,'isShowIcon':true, tooltip: '拷贝', iconcls: 'fa fa-copy', icon: '', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'Copy', target: 'SINGLEKEY' }, class: '' },
tbitem7: { name: 'tbitem7', type: 'SEPERATOR', visabled: true, dataaccaction: '', uiaction: { } },
tbitem8: { name: 'tbitem8', caption: '删除','isShowCaption':true,'isShowIcon':true, tooltip: '删除', iconcls: 'fa fa-remove', icon: '', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'Remove', target: 'MULTIKEY' }, class: '' },
tbitem9: { name: 'tbitem9', type: 'SEPERATOR', visabled: true, dataaccaction: '', uiaction: { } },
tbitem13: { name: 'tbitem13', caption: '导出','isShowCaption':true,'isShowIcon':true, tooltip: '导出', iconcls: 'fa fa-file-excel-o', icon: '', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'ExportExcel', target: '' }, MaxRowCount: 1000, class: '' },
tbitem10: { name: 'tbitem10', type: 'SEPERATOR', visabled: true, dataaccaction: '', uiaction: { } },
tbitem19: { name: 'tbitem19', caption: '过滤','isShowCaption':true,'isShowIcon':true, tooltip: '过滤', iconcls: 'fa fa-filter', icon: '', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'ToggleFilter', target: '' }, class: '' },
};
/**
* 视图引擎
*
* @public
* @type {Engine}
* @memberof LeadConLeadGridViewBase
*/
public engine: GridViewEngine = new GridViewEngine();
/**
* 引擎初始化
*
* @public
* @memberof LeadConLeadGridViewBase
*/
public engineInit(): void {
this.engine.init({
view: this,
opendata: (args: any[],fullargs?:any[],params?: any, $event?: any, xData?: any) => {
this.opendata(args,fullargs, params, $event, xData);
},
newdata: (args: any[],fullargs?:any[],params?: any, $event?: any, xData?: any) => {
this.newdata(args,fullargs, params, $event, xData);
},
grid: this.$refs.grid,
searchform: this.$refs.searchform,
keyPSDEField: 'lead',
majorPSDEField: 'fullname',
isLoadDefault: true,
});
}
/**
* toolbar 部件 click 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public toolbar_click($event: any, $event2?: any): void {
if (Object.is($event.tag, 'tbitem1_openquickcreateview')) {
this.toolbar_tbitem1_openquickcreateview_click(null, '', $event2);
}
if (Object.is($event.tag, 'tbitem4')) {
this.toolbar_tbitem4_click(null, '', $event2);
}
if (Object.is($event.tag, 'tbitem6')) {
this.toolbar_tbitem6_click(null, '', $event2);
}
if (Object.is($event.tag, 'tbitem8')) {
this.toolbar_tbitem8_click(null, '', $event2);
}
if (Object.is($event.tag, 'tbitem13')) {
this.toolbar_tbitem13_click(null, '', $event2);
}
if (Object.is($event.tag, 'tbitem11')) {
this.toolbar_tbitem11_click(null, '', $event2);
}
if (Object.is($event.tag, 'tbitem19')) {
this.toolbar_tbitem19_click(null, '', $event2);
}
}
/**
* grid 部件 selectionchange 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public grid_selectionchange($event: any, $event2?: any): void {
this.engine.onCtrlEvent('grid', 'selectionchange', $event);
}
/**
* grid 部件 beforeload 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public grid_beforeload($event: any, $event2?: any): void {
this.engine.onCtrlEvent('grid', 'beforeload', $event);
}
/**
* grid 部件 rowdblclick 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public grid_rowdblclick($event: any, $event2?: any): void {
this.engine.onCtrlEvent('grid', 'rowdblclick', $event);
}
/**
* grid 部件 remove 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public grid_remove($event: any, $event2?: any): void {
this.engine.onCtrlEvent('grid', 'remove', $event);
}
/**
* grid 部件 load 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public grid_load($event: any, $event2?: any): void {
this.engine.onCtrlEvent('grid', 'load', $event);
}
/**
* searchform 部件 save 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public searchform_save($event: any, $event2?: any): void {
this.engine.onCtrlEvent('searchform', 'save', $event);
}
/**
* searchform 部件 search 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public searchform_search($event: any, $event2?: any): void {
this.engine.onCtrlEvent('searchform', 'search', $event);
}
/**
* searchform 部件 load 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof LeadConLeadGridViewBase
*/
public searchform_load($event: any, $event2?: any): void {
this.engine.onCtrlEvent('searchform', 'load', $event);
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public toolbar_tbitem1_openquickcreateview_click(params: any = {}, tag?: any, $event?: any) {
// 参数
// 取数
let datas: any[] = [];
let xData: any = null;
// _this 指向容器对象
const _this: any = this;
let paramJO:any = {};
let contextJO:any = {};
xData = this.$refs.grid;
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
if(params){
datas = [params];
}
// 界面行为
const curUIService:LeadUIService = new LeadUIService();
curUIService.Lead_OpenQuickCreateView(datas,contextJO, paramJO, $event, xData,this,"Lead");
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public toolbar_tbitem4_click(params: any = {}, tag?: any, $event?: any) {
// 参数
// 取数
let datas: any[] = [];
let xData: any = null;
// _this 指向容器对象
const _this: any = this;
let paramJO:any = {};
let contextJO:any = {};
xData = this.$refs.grid;
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
if(params){
datas = [params];
}
// 界面行为
this.Edit(datas, contextJO,paramJO, $event, xData,this,"Lead");
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public toolbar_tbitem6_click(params: any = {}, tag?: any, $event?: any) {
// 参数
// 取数
let datas: any[] = [];
let xData: any = null;
// _this 指向容器对象
const _this: any = this;
let paramJO:any = {};
let contextJO:any = {};
xData = this.$refs.grid;
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
if(params){
datas = [params];
}
// 界面行为
this.Copy(datas, contextJO,paramJO, $event, xData,this,"Lead");
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public toolbar_tbitem8_click(params: any = {}, tag?: any, $event?: any) {
// 参数
// 取数
let datas: any[] = [];
let xData: any = null;
// _this 指向容器对象
const _this: any = this;
let paramJO:any = {};
let contextJO:any = {};
xData = this.$refs.grid;
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
if(params){
datas = [params];
}
// 界面行为
this.Remove(datas, contextJO,paramJO, $event, xData,this,"Lead");
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public toolbar_tbitem13_click(params: any = {}, tag?: any, $event?: any) {
// 参数
// 取数
let datas: any[] = [];
let xData: any = null;
// _this 指向容器对象
const _this: any = this;
let paramJO:any = {};
let contextJO:any = {};
xData = this.$refs.grid;
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
if(params){
datas = [params];
}
// 界面行为
this.ExportExcel(datas, contextJO,paramJO, $event, xData,this,"Lead");
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public toolbar_tbitem11_click(params: any = {}, tag?: any, $event?: any) {
// 参数
// 取数
let datas: any[] = [];
let xData: any = null;
// _this 指向容器对象
const _this: any = this;
let paramJO:any = {};
let contextJO:any = {};
xData = this.$refs.grid;
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
if(params){
datas = [params];
}
// 界面行为
this.Print(datas, contextJO,paramJO, $event, xData,this,"Lead");
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public toolbar_tbitem19_click(params: any = {}, tag?: any, $event?: any) {
// 参数
// 取数
let datas: any[] = [];
let xData: any = null;
// _this 指向容器对象
const _this: any = this;
let paramJO:any = {};
let contextJO:any = {};
xData = this.$refs.grid;
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
if(params){
datas = [params];
}
// 界面行为
this.ToggleFilter(datas, contextJO,paramJO, $event, xData,this,"Lead");
}
/**
* 打开新建数据视图
*
* @param {any[]} args
* @param {*} [params]
* @param {*} [fullargs]
* @param {*} [$event]
* @param {*} [xData]
* @memberof LeadConLeadGridView
*/
public newdata(args: any[],fullargs?:any[], params?: any, $event?: any, xData?: any) {
let localContext:any = null;
let localViewParam:any =null;
const data: any = {};
if(args[0].srfsourcekey){
data.srfsourcekey = args[0].srfsourcekey;
}
let tempContext = JSON.parse(JSON.stringify(this.context));
delete tempContext.lead;
if(args.length >0){
Object.assign(tempContext,args[0]);
}
let deResParameters: any[] = [];
if(tempContext.campaign && true){
deResParameters = [
{ pathName: 'campaigns', parameterName: 'campaign' },
]
}
const parameters: any[] = [
{ pathName: 'leads', parameterName: 'lead' },
];
const _this: any = this;
const openDrawer = (view: any, data: any) => {
let container: Subject<any> = this.$appdrawer.openDrawer(view, tempContext, data);
container.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
return;
}
if (!xData || !(xData.refresh instanceof Function)) {
return;
}
xData.refresh(result.datas);
});
}
const view: any = {
viewname: 'lead-quick-create',
height: 0,
width: 450,
title: this.$t('entities.lead.views.quickcreate.title'),
placement: 'DRAWER_RIGHT',
};
openDrawer(view, data);
}
/**
* 打开编辑数据视图
*
* @param {any[]} args
* @param {*} [params]
* @param {*} [fullargs]
* @param {*} [$event]
* @param {*} [xData]
* @memberof LeadConLeadGridView
*/
public opendata(args: any[],fullargs?:any[],params?: any, $event?: any, xData?: any) {
let localContext:any = null;
let localViewParam:any =null;
const data: any = {};
let tempContext = JSON.parse(JSON.stringify(this.context));
if(args.length >0){
Object.assign(tempContext,args[0]);
}
let deResParameters: any[] = [];
if(tempContext.campaign && true){
deResParameters = [
{ pathName: 'campaigns', parameterName: 'campaign' },
]
}
const parameters: any[] = [
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'info', parameterName: 'info' },
];
const _this: any = this;
const openIndexViewTab = (data: any) => {
const routePath = this.$viewTool.buildUpRoutePath(this.$route, tempContext, deResParameters, parameters, args, data);
this.$router.push(routePath);
}
openIndexViewTab(data);
}
/**
* 编辑
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof LeadConLeadGridViewBase
*/
public Edit(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
if (args.length === 0) {
return;
}
const _this: any = this;
if (_this.opendata && _this.opendata instanceof Function) {
const data: any = { };
if (args.length > 0) {
Object.assign(data, { lead: args[0].lead })
}
_this.opendata([{ ...data }], params, $event, xData);
} else {
_this.$Notice.error({ title: '错误', desc: 'opendata 视图处理逻辑不存在,请添加!' });
}
}
/**
* 拷贝
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof LeadConLeadGridViewBase
*/
public Copy(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
if (args.length === 0) {
return;
}
const _this: any = this;
if (_this.newdata && _this.newdata instanceof Function) {
const data: any = {};
if (args.length > 0) {
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);
} else if (xData && xData.copy instanceof Function) {
if (args.length > 0) {
actionContext.$store.commit('addCopyData', { srfkey: args[0].srfkey, copyData: args[0] });
}
xData.copy(args[0].srfkey);
} else {
_this.$Notice.error({ title: '错误', desc: 'opendata 视图处理逻辑不存在,请添加!' });
}
}
/**
* 删除
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof LeadConLeadGridViewBase
*/
public Remove(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
const _this: any = this;
if (!xData || !(xData.remove instanceof Function)) {
return ;
}
xData.remove(args);
}
/**
* 导出
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof LeadConLeadGridViewBase
*/
public ExportExcel(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
const _this: any = this;
if (!xData || !(xData.exportExcel instanceof Function) || !$event) {
return ;
}
xData.exportExcel($event.exportparms);
}
/**
* 打印
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof LeadConLeadGridViewBase
*/
public Print(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
let _this:any = this;
if (!xData || !(xData.print instanceof Function) || !$event) {
return ;
}
xData.print();
}
/**
* 过滤
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof LeadConLeadGridViewBase
*/
public ToggleFilter(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
const _this: any = this;
if (_this.hasOwnProperty('isExpandSearchForm')) {
_this.isExpandSearchForm = !_this.isExpandSearchForm;
}
}
}
</script>
<style lang='less'>
@import './lead-con-lead-grid-view.less';
</style>
\ No newline at end of file
// 避免空文件,后台不让空文件过
.lead-con-lead-grid-view {
--lead-con-lead-grid-view: 0;
}
// 视图样式
// this is less
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import LeadConLeadGridViewBase from './lead-con-lead-grid-view-base.vue';
import view_grid from '@widgets/lead/main-grid/main-grid.vue';
import view_searchform from '@widgets/lead/default-searchform/default-searchform.vue';
@Component({
components: {
view_grid,
view_searchform,
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
vm.$store.commit('addCurPageViewtag', { route: to, viewtag: vm.viewtag });
});
},
})
export default class LeadConLeadGridView extends LeadConLeadGridViewBase {
}
</script>
\ No newline at end of file
<template>
<studio-view-style2 viewName="opportunityinfo_product" viewTitle="商机编辑视图" class='deeditview opportunity-info-product'>
<template slot='title'>
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</template>
<view_form
:viewState="viewState"
:viewparams="viewparams"
......
<template>
<studio-view-style2 viewName="opportunityinfo" viewTitle="商机信息" class='detabexpview opportunity-info'>
<template slot='title'>
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</template>
<template slot="toolbar">
<view-toolbar mode="STYLE2" :model="toolBarModels" @item-click="toolbar_click"/> </template>
<view_tabexppanel
......
<template>
<studio-view-style2 viewName="opportunitylistexpview" viewTitle="商机列表导航视图" class='delistexpview opportunity-list-exp-view'>
<template slot='title'>
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</template>
<view_listexpbar
:viewState="viewState"
:viewparams="viewparams"
:context="context"
:showBusyIndicator="true"
:viewUID="viewUID"
:newdata="newdata"
:opendata="opendata"
name="listexpbar"
ref='listexpbar'
@selectionchange="listexpbar_selectionchange($event)"
@activated="listexpbar_activated($event)"
@load="listexpbar_load($event)"
@closeview="closeView($event)">
</view_listexpbar>
</studio-view-style2>
</template>
<script lang='tsx'>
import { Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { Subject } from 'rxjs';
import { UIActionTool, Util } from '@/utils';
import { VueLifeCycleProcessing, ListExpViewBase } from '@/studio-core';
import OpportunityService from '@/service/opportunity/opportunity-service';
import ListExpViewEngine from '@engine/view/list-exp-view-engine';
/**
* 商机列表导航视图视图基类
*
* @export
* @class OpportunityListExpViewBase
* @extends {ListExpViewBase}
*/
@Component({})
@VueLifeCycleProcessing()
export default class OpportunityListExpViewBase extends ListExpViewBase {
/**
* 实体服务对象
*
* @type {OpportunityService}
* @memberof OpportunityListExpViewBase
*/
protected appEntityService: OpportunityService = new OpportunityService;
/**
* 计数器服务对象集合
*
* @protected
* @type {Array<*>}
* @memberof OpportunityListExpViewBase
*/
protected counterServiceArray: Array<any> = [];
/**
* 自定义视图导航上下文集合
*
* @protected
* @type {*}
* @memberof OpportunityListExpViewBase
*/
protected customViewNavContexts: any = {
};
/**
* 自定义视图导航参数集合
*
* @protected
* @type {*}
* @memberof OpportunityListExpViewBase
*/
protected customViewParams: any = {
};
/**
* 视图模型数据
*
* @protected
* @type {*}
* @memberof OpportunityListExpViewBase
*/
protected model: any = {
srfCaption: 'entities.opportunity.views.listexpview.caption',
srfTitle: 'entities.opportunity.views.listexpview.title',
srfSubTitle: 'entities.opportunity.views.listexpview.subtitle',
dataInfo: ''
}
/**
* 容器模型
*
* @protected
* @type {*}
* @memberof OpportunityListExpViewBase
*/
protected containerModel: any = {
view_listexpbar: { name: 'listexpbar', type: 'LISTEXPBAR' },
};
/**
* 视图引擎
*
* @public
* @type {Engine}
* @memberof OpportunityListExpViewBase
*/
public engine: ListExpViewEngine = new ListExpViewEngine();
/**
* 引擎初始化
*
* @public
* @memberof OpportunityListExpViewBase
*/
public engineInit(): void {
this.engine.init({
view: this,
listexpbar: this.$refs.listexpbar,
keyPSDEField: 'opportunity',
majorPSDEField: 'opportunityname',
isLoadDefault: true,
});
}
/**
* listexpbar 部件 selectionchange 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof OpportunityListExpViewBase
*/
public listexpbar_selectionchange($event: any, $event2?: any): void {
this.engine.onCtrlEvent('listexpbar', 'selectionchange', $event);
}
/**
* listexpbar 部件 activated 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof OpportunityListExpViewBase
*/
public listexpbar_activated($event: any, $event2?: any): void {
this.engine.onCtrlEvent('listexpbar', 'activated', $event);
}
/**
* listexpbar 部件 load 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof OpportunityListExpViewBase
*/
public listexpbar_load($event: any, $event2?: any): void {
this.engine.onCtrlEvent('listexpbar', 'load', $event);
}
/**
* 打开新建数据视图
*
* @param {any[]} args
* @param {*} [params]
* @param {*} [fullargs]
* @param {*} [$event]
* @param {*} [xData]
* @memberof OpportunityListExpView
*/
public newdata(args: any[],fullargs?:any[], params?: any, $event?: any, xData?: any) {
let localContext:any = null;
let localViewParam:any =null;
this.$Notice.warning({ title: '错误', desc: '未指定关系视图' });
}
/**
* 打开编辑数据视图
*
* @param {any[]} args
* @param {*} [params]
* @param {*} [fullargs]
* @param {*} [$event]
* @param {*} [xData]
* @memberof OpportunityListExpView
*/
public opendata(args: any[],fullargs?:any[],params?: any, $event?: any, xData?: any) {
let localContext:any = null;
let localViewParam:any =null;
this.$Notice.warning({ title: '错误', desc: '未指定关系视图' });
}
}
</script>
<style lang='less'>
@import './opportunity-list-exp-view.less';
</style>
\ No newline at end of file
// 避免空文件,后台不让空文件过
.opportunity-list-exp-view {
--opportunity-list-exp-view: 0;
}
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import OpportunityListExpViewBase from './opportunity-list-exp-view-base.vue';
import view_listexpbar from '@widgets/opportunity/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar.vue';
@Component({
components: {
view_listexpbar,
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
vm.$store.commit('addCurPageViewtag', { route: to, viewtag: vm.viewtag });
});
},
})
export default class OpportunityListExpView extends OpportunityListExpViewBase {
}
</script>
\ No newline at end of file
<template>
<studio-view-style2 viewName="opportunityproductopp_oppprogridview" viewTitle="商机产品表格视图" class='degridview opportunity-product-opp-opp-pro-grid-view'>
<template slot='title'>
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</template>
<i-input slot="quickSearch" v-show="!isExpandSearchForm" v-model="query" search @on-search="onSearch($event)"/>
<template slot="toolbar">
<view-toolbar mode="STYLE2" :model="toolBarModels" @item-click="toolbar_click"/> </template>
......
......@@ -17,9 +17,9 @@ export const PageComponents = {
Vue.component('opportunity-competitor-opp-comp-grid-view', () => import('@pages/sales/opportunity-competitor-opp-comp-grid-view/opportunity-competitor-opp-comp-grid-view.vue'));
Vue.component('contact-info-person', () => import('@pages/base/contact-info-person/contact-info-person.vue'));
Vue.component('campaign-info-schedule', () => import('@pages/marketing/campaign-info-schedule/campaign-info-schedule.vue'));
Vue.component('opportunity-grid-view', () => import('@pages/sales/opportunity-grid-view/opportunity-grid-view.vue'));
Vue.component('letter-edit-view', () => import('@pages/base/letter-edit-view/letter-edit-view.vue'));
Vue.component('lead-con-lead-grid-view', () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'));
Vue.component('goal-edit-view', () => import('@pages/sales/goal-edit-view/goal-edit-view.vue'));
Vue.component('letter-edit-view', () => import('@pages/base/letter-edit-view/letter-edit-view.vue'));
Vue.component('transaction-currency-pickup-view', () => import('@pages/base/transaction-currency-pickup-view/transaction-currency-pickup-view.vue'));
Vue.component('opportunity-product-edit-view', () => import('@pages/sales/opportunity-product-edit-view/opportunity-product-edit-view.vue'));
Vue.component('email-edit-view', () => import('@pages/base/email-edit-view/email-edit-view.vue'));
......@@ -73,8 +73,8 @@ export const PageComponents = {
Vue.component('quote-grid-view', () => import('@pages/sales/quote-grid-view/quote-grid-view.vue'));
Vue.component('invoice-edit-view', () => import('@pages/finance/invoice-edit-view/invoice-edit-view.vue'));
Vue.component('quote-option-view', () => import('@pages/sales/quote-option-view/quote-option-view.vue'));
Vue.component('campaign-edit-view', () => import('@pages/marketing/campaign-edit-view/campaign-edit-view.vue'));
Vue.component('opportunity-summary', () => import('@pages/sales/opportunity-summary/opportunity-summary.vue'));
Vue.component('campaign-edit-view', () => import('@pages/marketing/campaign-edit-view/campaign-edit-view.vue'));
Vue.component('list-contact-inner', () => import('@pages/marketing/list-contact-inner/list-contact-inner.vue'));
Vue.component('campaign-info-campagin', () => import('@pages/marketing/campaign-info-campagin/campaign-info-campagin.vue'));
Vue.component('appointment-edit-view', () => import('@pages/base/appointment-edit-view/appointment-edit-view.vue'));
......@@ -83,9 +83,9 @@ export const PageComponents = {
Vue.component('contact-pickup-grid-view', () => import('@pages/base/contact-pickup-grid-view/contact-pickup-grid-view.vue'));
Vue.component('list-account-edit-view', () => import('@pages/marketing/list-account-edit-view/list-account-edit-view.vue'));
Vue.component('opportunity-info', () => import('@pages/sales/opportunity-info/opportunity-info.vue'));
Vue.component('transaction-currency-pickup-grid-view', () => import('@pages/base/transaction-currency-pickup-grid-view/transaction-currency-pickup-grid-view.vue'));
Vue.component('service-appointment-edit-view', () => import('@pages/service/service-appointment-edit-view/service-appointment-edit-view.vue'));
Vue.component('contact-grid-view', () => import('@pages/base/contact-grid-view/contact-grid-view.vue'));
Vue.component('transaction-currency-pickup-grid-view', () => import('@pages/base/transaction-currency-pickup-grid-view/transaction-currency-pickup-grid-view.vue'));
Vue.component('activity-pointer-grid-view', () => import('@pages/base/activity-pointer-grid-view/activity-pointer-grid-view.vue'));
Vue.component('campaign-activity-by-parent-key', () => import('@pages/marketing/campaign-activity-by-parent-key/campaign-activity-by-parent-key.vue'));
Vue.component('account-pickup-view', () => import('@pages/base/account-pickup-view/account-pickup-view.vue'));
......@@ -93,9 +93,11 @@ export const PageComponents = {
Vue.component('quote-opp-qua-grid-view', () => import('@pages/sales/quote-opp-qua-grid-view/quote-opp-qua-grid-view.vue'));
Vue.component('contact-by-account', () => import('@pages/base/contact-by-account/contact-by-account.vue'));
Vue.component('opportunity-opp-pro-dashboard-view', () => import('@pages/sales/opportunity-opp-pro-dashboard-view/opportunity-opp-pro-dashboard-view.vue'));
Vue.component('opportunity-list-exp-view', () => import('@pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.vue'));
Vue.component('sales-literature-edit-view', () => import('@pages/sales/sales-literature-edit-view/sales-literature-edit-view.vue'));
Vue.component('ibiz-list-summary', () => import('@pages/marketing/ibiz-list-summary/ibiz-list-summary.vue'));
Vue.component('lead-dashboard-view', () => import('@pages/sales/lead-dashboard-view/lead-dashboard-view.vue'));
Vue.component('opportunity-con-opp-grid-view', () => import('@pages/sales/opportunity-con-opp-grid-view/opportunity-con-opp-grid-view.vue'));
Vue.component('list-account-quick-create-by-list', () => import('@pages/marketing/list-account-quick-create-by-list/list-account-quick-create-by-list.vue'));
Vue.component('campaign-list-edit-view', () => import('@pages/marketing/campaign-list-edit-view/campaign-list-edit-view.vue'));
Vue.component('competitor-info', () => import('@pages/sales/competitor-info/competitor-info.vue'));
......
......@@ -552,63 +552,64 @@ const router = new Router({
component: () => import('@pages/marketing/campaign-info-schedule/campaign-info-schedule.vue'),
},
{
path: 'accounts/:account?/contacts/:contact?/opportunities/:opportunity?/gridview/:gridview?',
path: 'accounts/:account?/contacts/:contact?/leads/:lead?/conleadgridview/:conleadgridview?',
meta: {
caption: 'entities.opportunity.views.gridview.title',
caption: 'entities.lead.views.conleadgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'accounts', parameterName: 'account' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'gridview', parameterName: 'gridview' },
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'conleadgridview', parameterName: 'conleadgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-grid-view/opportunity-grid-view.vue'),
component: () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'),
},
{
path: 'contacts/:contact?/opportunities/:opportunity?/gridview/:gridview?',
path: 'contacts/:contact?/leads/:lead?/conleadgridview/:conleadgridview?',
meta: {
caption: 'entities.opportunity.views.gridview.title',
caption: 'entities.lead.views.conleadgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'gridview', parameterName: 'gridview' },
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'conleadgridview', parameterName: 'conleadgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-grid-view/opportunity-grid-view.vue'),
component: () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'),
},
{
path: 'opportunities/:opportunity?/gridview/:gridview?',
path: 'campaigns/:campaign?/leads/:lead?/conleadgridview/:conleadgridview?',
meta: {
caption: 'entities.opportunity.views.gridview.title',
caption: 'entities.lead.views.conleadgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'gridview', parameterName: 'gridview' },
{ pathName: 'campaigns', parameterName: 'campaign' },
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'conleadgridview', parameterName: 'conleadgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-grid-view/opportunity-grid-view.vue'),
component: () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'),
},
{
path: 'letters/:letter?/editview/:editview?',
path: 'leads/:lead?/conleadgridview/:conleadgridview?',
meta: {
caption: 'entities.letter.views.editview.title',
caption: 'entities.lead.views.conleadgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'letters', parameterName: 'letter' },
{ pathName: 'editview', parameterName: 'editview' },
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'conleadgridview', parameterName: 'conleadgridview' },
],
requireAuth: true,
},
component: () => import('@pages/base/letter-edit-view/letter-edit-view.vue'),
component: () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'),
},
{
path: 'goals/:goal?/editview/:editview?',
......@@ -624,6 +625,20 @@ const router = new Router({
},
component: () => import('@pages/sales/goal-edit-view/goal-edit-view.vue'),
},
{
path: 'letters/:letter?/editview/:editview?',
meta: {
caption: 'entities.letter.views.editview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'letters', parameterName: 'letter' },
{ pathName: 'editview', parameterName: 'editview' },
],
requireAuth: true,
},
component: () => import('@pages/base/letter-edit-view/letter-edit-view.vue'),
},
{
path: 'transactioncurrencies/:transactioncurrency?/pickupview/:pickupview?',
meta: {
......@@ -2326,20 +2341,6 @@ const router = new Router({
},
component: () => import('@pages/base/contact-pickup-view/contact-pickup-view.vue'),
},
{
path: 'campaigns/:campaign?/editview/:editview?',
meta: {
caption: 'entities.campaign.views.editview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'campaigns', parameterName: 'campaign' },
{ pathName: 'editview', parameterName: 'editview' },
],
requireAuth: true,
},
component: () => import('@pages/marketing/campaign-edit-view/campaign-edit-view.vue'),
},
{
path: 'accounts/:account?/contacts/:contact?/opportunities/:opportunity?/summary/:summary?',
meta: {
......@@ -2385,6 +2386,20 @@ const router = new Router({
},
component: () => import('@pages/sales/opportunity-summary/opportunity-summary.vue'),
},
{
path: 'campaigns/:campaign?/editview/:editview?',
meta: {
caption: 'entities.campaign.views.editview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'campaigns', parameterName: 'campaign' },
{ pathName: 'editview', parameterName: 'editview' },
],
requireAuth: true,
},
component: () => import('@pages/marketing/campaign-edit-view/campaign-edit-view.vue'),
},
{
path: 'accounts/:account?/contacts/:contact?/listcontacts/:listcontact?/inner/:inner?',
meta: {
......@@ -2682,20 +2697,6 @@ const router = new Router({
},
component: () => import('@pages/sales/opportunity-info/opportunity-info.vue'),
},
{
path: 'transactioncurrencies/:transactioncurrency?/pickupgridview/:pickupgridview?',
meta: {
caption: 'entities.transactioncurrency.views.pickupgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'transactioncurrencies', parameterName: 'transactioncurrency' },
{ pathName: 'pickupgridview', parameterName: 'pickupgridview' },
],
requireAuth: true,
},
component: () => import('@pages/base/transaction-currency-pickup-grid-view/transaction-currency-pickup-grid-view.vue'),
},
{
path: 'serviceappointments/:serviceappointment?/editview/:editview?',
meta: {
......@@ -2739,6 +2740,20 @@ const router = new Router({
},
component: () => import('@pages/base/contact-grid-view/contact-grid-view.vue'),
},
{
path: 'transactioncurrencies/:transactioncurrency?/pickupgridview/:pickupgridview?',
meta: {
caption: 'entities.transactioncurrency.views.pickupgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'transactioncurrencies', parameterName: 'transactioncurrency' },
{ pathName: 'pickupgridview', parameterName: 'pickupgridview' },
],
requireAuth: true,
},
component: () => import('@pages/base/transaction-currency-pickup-grid-view/transaction-currency-pickup-grid-view.vue'),
},
{
path: 'activitypointers/:activitypointer?/gridview/:gridview?',
meta: {
......@@ -2931,6 +2946,51 @@ const router = new Router({
},
component: () => import('@pages/sales/opportunity-opp-pro-dashboard-view/opportunity-opp-pro-dashboard-view.vue'),
},
{
path: 'accounts/:account?/contacts/:contact?/opportunities/:opportunity?/listexpview/:listexpview?',
meta: {
caption: 'entities.opportunity.views.listexpview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'accounts', parameterName: 'account' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'listexpview', parameterName: 'listexpview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.vue'),
},
{
path: 'contacts/:contact?/opportunities/:opportunity?/listexpview/:listexpview?',
meta: {
caption: 'entities.opportunity.views.listexpview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'listexpview', parameterName: 'listexpview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.vue'),
},
{
path: 'opportunities/:opportunity?/listexpview/:listexpview?',
meta: {
caption: 'entities.opportunity.views.listexpview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'listexpview', parameterName: 'listexpview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.vue'),
},
{
path: 'salesliteratures/:salesliterature?/editview/:editview?',
meta: {
......@@ -3019,6 +3079,51 @@ const router = new Router({
},
component: () => import('@pages/sales/lead-dashboard-view/lead-dashboard-view.vue'),
},
{
path: 'accounts/:account?/contacts/:contact?/opportunities/:opportunity?/conoppgridview/:conoppgridview?',
meta: {
caption: 'entities.opportunity.views.conoppgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'accounts', parameterName: 'account' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'conoppgridview', parameterName: 'conoppgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-con-opp-grid-view/opportunity-con-opp-grid-view.vue'),
},
{
path: 'contacts/:contact?/opportunities/:opportunity?/conoppgridview/:conoppgridview?',
meta: {
caption: 'entities.opportunity.views.conoppgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'conoppgridview', parameterName: 'conoppgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-con-opp-grid-view/opportunity-con-opp-grid-view.vue'),
},
{
path: 'opportunities/:opportunity?/conoppgridview/:conoppgridview?',
meta: {
caption: 'entities.opportunity.views.conoppgridview.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'conoppgridview', parameterName: 'conoppgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-con-opp-grid-view/opportunity-con-opp-grid-view.vue'),
},
{
path: 'campaignresponses/:campaignresponse?/quickcreate/:quickcreate?',
meta: {
......@@ -5490,48 +5595,6 @@ const router = new Router({
},
component: () => import('@pages/sales/opportunity-competitor-opp-comp-grid-view/opportunity-competitor-opp-comp-grid-view.vue'),
},
{
path: '/accounts/:account?/contacts/:contact?/opportunities/:opportunity?/gridview/:gridview?',
meta: {
caption: 'entities.opportunity.views.gridview.title',
info:'',
parameters: [
{ pathName: 'accounts', parameterName: 'account' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'gridview', parameterName: 'gridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-grid-view/opportunity-grid-view.vue'),
},
{
path: '/contacts/:contact?/opportunities/:opportunity?/gridview/:gridview?',
meta: {
caption: 'entities.opportunity.views.gridview.title',
info:'',
parameters: [
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'gridview', parameterName: 'gridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-grid-view/opportunity-grid-view.vue'),
},
{
path: '/opportunities/:opportunity?/gridview/:gridview?',
meta: {
caption: 'entities.opportunity.views.gridview.title',
info:'',
parameters: [
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'gridview', parameterName: 'gridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-grid-view/opportunity-grid-view.vue'),
},
{
path: '/accounts/:account?/contacts/:contact?/info_market/:info_market?',
meta: {
......@@ -5847,6 +5910,62 @@ const router = new Router({
},
component: () => import('@pages/sales/opportunity-pickup-grid-view/opportunity-pickup-grid-view.vue'),
},
{
path: '/accounts/:account?/contacts/:contact?/leads/:lead?/conleadgridview/:conleadgridview?',
meta: {
caption: 'entities.lead.views.conleadgridview.title',
info:'',
parameters: [
{ pathName: 'accounts', parameterName: 'account' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'conleadgridview', parameterName: 'conleadgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'),
},
{
path: '/contacts/:contact?/leads/:lead?/conleadgridview/:conleadgridview?',
meta: {
caption: 'entities.lead.views.conleadgridview.title',
info:'',
parameters: [
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'conleadgridview', parameterName: 'conleadgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'),
},
{
path: '/campaigns/:campaign?/leads/:lead?/conleadgridview/:conleadgridview?',
meta: {
caption: 'entities.lead.views.conleadgridview.title',
info:'',
parameters: [
{ pathName: 'campaigns', parameterName: 'campaign' },
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'conleadgridview', parameterName: 'conleadgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'),
},
{
path: '/leads/:lead?/conleadgridview/:conleadgridview?',
meta: {
caption: 'entities.lead.views.conleadgridview.title',
info:'',
parameters: [
{ pathName: 'leads', parameterName: 'lead' },
{ pathName: 'conleadgridview', parameterName: 'conleadgridview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue'),
},
{
path: '/accounts/:account?/innerpickupgridview/:innerpickupgridview?',
meta: {
......@@ -6537,6 +6656,48 @@ const router = new Router({
},
component: () => import('@pages/sales/competitor-summary/competitor-summary.vue'),
},
{
path: '/accounts/:account?/contacts/:contact?/opportunities/:opportunity?/listexpview/:listexpview?',
meta: {
caption: 'entities.opportunity.views.listexpview.title',
info:'',
parameters: [
{ pathName: 'accounts', parameterName: 'account' },
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'listexpview', parameterName: 'listexpview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.vue'),
},
{
path: '/contacts/:contact?/opportunities/:opportunity?/listexpview/:listexpview?',
meta: {
caption: 'entities.opportunity.views.listexpview.title',
info:'',
parameters: [
{ pathName: 'contacts', parameterName: 'contact' },
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'listexpview', parameterName: 'listexpview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.vue'),
},
{
path: '/opportunities/:opportunity?/listexpview/:listexpview?',
meta: {
caption: 'entities.opportunity.views.listexpview.title',
info:'',
parameters: [
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'listexpview', parameterName: 'listexpview' },
],
requireAuth: true,
},
component: () => import('@pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.vue'),
},
{
path: '/ibizlists/:ibizlist?/summary/:summary?',
meta: {
......
......@@ -10,6 +10,7 @@ export const viewstate: any = {
viewaction: '',
viewdatachange: false,
refviews: [
'29bfcd628ab25e297248ff0524d12908',
],
},
{
......@@ -558,17 +559,6 @@ export const viewstate: any = {
'c420212fae385872d6ae89e3d237350a',
],
},
{
viewtag: '5f8f689d5dccc3db6d2b74a24a8b24ef',
viewmodule: 'Sales',
viewname: 'OpportunityGridView',
viewaction: '',
viewdatachange: false,
refviews: [
'8bfcd7acdd1f36afc1714f1071671f2c',
'a243cd62accb02ceba4fb128703128f0',
],
},
{
viewtag: '615ceb2945e3cfe7404850aeadae188d',
viewmodule: 'Base',
......@@ -701,6 +691,17 @@ export const viewstate: any = {
refviews: [
],
},
{
viewtag: '6f35f461b53398775ff2f1a563776fa3',
viewmodule: 'Sales',
viewname: 'LeadConLeadGridView',
viewaction: '',
viewdatachange: false,
refviews: [
'35728a12ceecb647982051842853547c',
'4745ca10fe4421ea043cb9ace1840224',
],
},
{
viewtag: '7217511947b8833ba5683e54c06b0271',
viewmodule: 'Base',
......@@ -812,8 +813,8 @@ export const viewstate: any = {
'07c5035fbb847e889f3dbb9657723f30',
'24a93674ec4c976c08902a3e95421ca6',
'6978259896338a7ace85a9fbc5d70395',
'9f92696f8eeec188f5ea674b925df275',
'b38bc0256ecd5be1a58a3c2210a98d05',
'5f8f689d5dccc3db6d2b74a24a8b24ef',
'dfc0051ae4813115e03f3d095f8cd7d3',
'631a4276161c551802f3aaf4bd7e607c',
'15d12c1173fcb6e742b6a6d92cbc53ed',
......@@ -952,6 +953,15 @@ export const viewstate: any = {
'a5213905238dbc5d8e1a505029105cc9',
],
},
{
viewtag: '9f92696f8eeec188f5ea674b925df275',
viewmodule: 'Sales',
viewname: 'OpportunityListExpView',
viewaction: '',
viewdatachange: false,
refviews: [
],
},
{
viewtag: 'a0baf844a4d48914ee2623448b1a73fb',
viewmodule: 'Marketing',
......@@ -1321,6 +1331,7 @@ export const viewstate: any = {
viewaction: '',
viewdatachange: false,
refviews: [
'29bfcd628ab25e297248ff0524d12908',
],
},
{
......@@ -1385,9 +1396,9 @@ export const viewstate: any = {
viewaction: '',
viewdatachange: false,
refviews: [
'15d12c1173fcb6e742b6a6d92cbc53ed',
'5f8f689d5dccc3db6d2b74a24a8b24ef',
'6f35f461b53398775ff2f1a563776fa3',
'bae77557d2f7a7852b634dc5d5a93435',
'50138c2b066081ec8b6fe67c88af5371',
'6168a7e787ead13b1e0f9a55007bc68c',
],
},
......
......@@ -85,6 +85,7 @@ export default class LeadUIServiceBase extends UIService {
this.allViewMap.set(':',{viewname:'info',srfappde:'leads'});
this.allViewMap.set(':',{viewname:'quickcreate',srfappde:'leads'});
this.allViewMap.set(':',{viewname:'info_market',srfappde:'leads'});
this.allViewMap.set(':',{viewname:'conleadgridview',srfappde:'leads'});
this.allViewMap.set(':',{viewname:'info_contact',srfappde:'leads'});
this.allViewMap.set(':',{viewname:'pickupgridview',srfappde:'leads'});
this.allViewMap.set(':',{viewname:'info_company',srfappde:'leads'});
......
......@@ -80,6 +80,7 @@ export default class OpportunityUIServiceBase extends UIService {
*/
public initViewMap(){
this.allViewMap.set(':',{viewname:'summary',srfappde:'opportunities'});
this.allViewMap.set(':',{viewname:'conoppgridview',srfappde:'opportunities'});
this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'opportunities'});
this.allViewMap.set(':',{viewname:'info_abstract',srfappde:'opportunities'});
this.allViewMap.set('PICKUPVIEW:',{viewname:'pickupview',srfappde:'opportunities'});
......@@ -87,6 +88,7 @@ export default class OpportunityUIServiceBase extends UIService {
this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'opportunities'});
this.allViewMap.set(':',{viewname:'info',srfappde:'opportunities'});
this.allViewMap.set(':',{viewname:'oppprodashboardview',srfappde:'opportunities'});
this.allViewMap.set(':',{viewname:'listexpview',srfappde:'opportunities'});
this.allViewMap.set(':',{viewname:'quickcreate',srfappde:'opportunities'});
this.allViewMap.set(':',{viewname:'info_product',srfappde:'opportunities'});
}
......
......@@ -265,7 +265,7 @@ export default class CentralBase extends Vue {
const deResParameters: any[] = [];
const parameters: any[] = [
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'gridview', parameterName: 'gridview' },
{ pathName: 'listexpview', parameterName: 'listexpview' },
];
const path: string = this.$viewTool.buildUpRoutePath(this.$route, {}, deResParameters, parameters, [], viewparam);
this.$router.push(path);
......
......@@ -349,7 +349,7 @@ export default class CentralModel {
textcls: '',
appfunctag: 'Auto10',
appfuncyype: 'APPVIEW',
viewname: 'opportunity-grid-view',
viewname: 'opportunity-list-exp-view',
resourcetag: '',
}
,
......@@ -901,12 +901,12 @@ export default class CentralModel {
appfunctag: 'Auto10',
appfuncyype: 'APPVIEW',
openmode: '',
codename: 'opportunitygridview',
codename: 'opportunitylistexpview',
deResParameters: [],
routepath: '/central/:central?/opportunities/:opportunity?/gridview/:gridview?',
routepath: '/central/:central?/opportunities/:opportunity?/listexpview/:listexpview?',
parameters: [
{ pathName: 'opportunities', parameterName: 'opportunity' },
{ pathName: 'gridview', parameterName: 'gridview' },
{ pathName: 'listexpview', parameterName: 'listexpview' },
],
},
{
......
......@@ -17,6 +17,33 @@
<input-box v-model="data.jobtitle" @enter="onEnter($event)" unit="" :disabled="detailsModel.jobtitle.disabled" type='text' style=""></input-box>
</app-form-item>
</i-col>
<i-col v-show="detailsModel.customername.visible" :style="{}" :lg="{ span: 24, offset: 0 }" :xl="{ span: 24, offset: 0 }">
<app-form-item name='customername' :itemRules="this.rules.customername" class='' :caption="$t('entities.contact.abstractedit_form.details.customername')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.customername.error" :isEmptyCaption="false" labelPos="LEFT">
<app-picker
:formState="formState"
:data="data"
:context="context"
:viewparams="viewparams"
:localContext ='{ }'
:localParam ='{ }'
:disabled="detailsModel.customername.disabled"
name='customername'
deMajorField='accountname'
deKeyField='account'
:service="service"
:acParams="{ serviceName: 'AccountService', interfaceName: 'FetchDefault'}"
valueitem='customerid'
:value="data.customername"
editortype=""
:pickupView="{ viewname: 'account-pickup-view', title: $t('entities.account.views.pickupview.title'), deResParameters: [], parameters: [{ pathName: 'accounts', parameterName: 'account' }, { pathName: 'pickupview', parameterName: 'pickupview' } ], placement:'' }"
style=""
@formitemvaluechange="onFormItemValueChange">
</app-picker>
</app-form-item>
</i-col>
<i-col v-show="detailsModel.emailaddress1.visible" :style="{}" :lg="{ span: 24, offset: 0 }" :xl="{ span: 24, offset: 0 }">
<app-form-item name='emailaddress1' :itemRules="this.rules.emailaddress1" class='' :caption="$t('entities.contact.abstractedit_form.details.emailaddress1')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.emailaddress1.error" :isEmptyCaption="false" labelPos="LEFT">
......@@ -355,10 +382,12 @@ export default class AbstractEditBase extends Vue implements ControlInterface {
srfsourcekey: null,
fullname: null,
jobtitle: null,
customername: null,
emailaddress1: null,
telephone1: null,
mobilephone: null,
fax: null,
customerid: null,
contactid: null,
contact:null,
};
......@@ -462,6 +491,12 @@ export default class AbstractEditBase extends Vue implements ControlInterface {
{ required: false, type: 'string', message: '职务 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '职务 值不能为空', trigger: 'blur' },
],
customername: [
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'blur' },
],
emailaddress1: [
{ type: 'string', message: '电子邮件 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '电子邮件 值必须为字符串类型', trigger: 'blur' },
......@@ -486,6 +521,12 @@ export default class AbstractEditBase extends Vue implements ControlInterface {
{ required: false, type: 'string', message: '传真 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '传真 值不能为空', trigger: 'blur' },
],
customerid: [
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'blur' },
],
contactid: [
{ type: 'string', message: '联系人 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '联系人 值必须为字符串类型', trigger: 'blur' },
......@@ -524,6 +565,8 @@ export default class AbstractEditBase extends Vue implements ControlInterface {
fullname: new FormItemModel({ caption: '全名', detailType: 'FORMITEM', name: 'fullname', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
jobtitle: new FormItemModel({ caption: '职务', detailType: 'FORMITEM', name: 'jobtitle', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
customername: new FormItemModel({ caption: '客户', detailType: 'FORMITEM', name: 'customername', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
emailaddress1: new FormItemModel({ caption: '电子邮件', detailType: 'FORMITEM', name: 'emailaddress1', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
......@@ -532,6 +575,8 @@ export default class AbstractEditBase extends Vue implements ControlInterface {
mobilephone: new FormItemModel({ caption: '移动电话', detailType: 'FORMITEM', name: 'mobilephone', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
fax: new FormItemModel({ caption: '传真', detailType: 'FORMITEM', name: 'fax', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
customerid: new FormItemModel({ caption: '客户', detailType: 'FORMITEM', name: 'customerid', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
contactid: new FormItemModel({ caption: '联系人', detailType: 'FORMITEM', name: 'contactid', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 1 })
,
......@@ -657,6 +702,18 @@ export default class AbstractEditBase extends Vue implements ControlInterface {
this.formDataChange({ name: 'jobtitle', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 customername 值
*
* @param {*} newVal
* @param {*} oldVal
* @memberof AbstractEdit
*/
@Watch('data.customername')
onCustomernameChange(newVal: any, oldVal: any) {
this.formDataChange({ name: 'customername', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 emailaddress1 值
*
......@@ -705,6 +762,18 @@ export default class AbstractEditBase extends Vue implements ControlInterface {
this.formDataChange({ name: 'fax', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 customerid 值
*
* @param {*} newVal
* @param {*} oldVal
* @memberof AbstractEdit
*/
@Watch('data.customerid')
onCustomeridChange(newVal: any, oldVal: any) {
this.formDataChange({ name: 'customerid', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 contactid 值
*
......@@ -770,6 +839,8 @@ export default class AbstractEditBase extends Vue implements ControlInterface {
}
/**
......
......@@ -65,6 +65,11 @@ export default class AbstractEditModel {
prop: 'jobtitle',
dataType: 'TEXT',
},
{
name: 'customername',
prop: 'cusomername',
dataType: 'PICKUPTEXT',
},
{
name: 'emailaddress1',
prop: 'emailaddress1',
......@@ -85,6 +90,11 @@ export default class AbstractEditModel {
prop: 'fax',
dataType: 'TEXT',
},
{
name: 'customerid',
prop: 'customerid',
dataType: 'PICKUP',
},
{
name: 'contactid',
prop: 'contactid',
......
......@@ -2,6 +2,7 @@ import { Http,Util,Errorlog } from '@/utils';
import ControlService from '@/widgets/control-service';
import ContactService from '@/service/contact/contact-service';
import AbstractEditModel from './abstract-edit-form-model';
import AccountService from '@/service/account/account-service';
/**
......@@ -41,6 +42,14 @@ export default class AbstractEditService extends ControlService {
this.model = new AbstractEditModel();
}
/**
* 客户服务对象
*
* @type {AccountService}
* @memberof AbstractEditService
*/
public accountService: AccountService = new AccountService();
/**
* 处理数据
*
......@@ -80,6 +89,9 @@ export default class AbstractEditService extends ControlService {
*/
@Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
if (Object.is(serviceName, 'AccountService') && Object.is(interfaceName, 'FetchDefault')) {
return this.doItems(this.accountService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'accountid', 'account');
}
return Promise.reject([])
}
......
......@@ -19,6 +19,13 @@
<app-span name='jobtitle' :value="data.jobtitle" :data="data" :context="context" :viewparams="viewparams" :localContext ='{ }' :localParam ='{ }' style=""></app-span>
</app-form-item>
</i-col>
<i-col v-show="detailsModel.customername.visible" :style="{}" :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
<app-form-item name='customername' :itemRules="this.rules.customername" class='' :caption="$t('entities.contact.abstractinfo_form.details.customername')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.customername.error" :isEmptyCaption="false" labelPos="LEFT">
<app-span name='customername' :value="data.customername" :data="data" :context="context" :viewparams="viewparams" :localContext ='{ }' :localParam ='{ }' style=""></app-span>
</app-form-item>
</i-col>
<i-col v-show="detailsModel.emailaddress1.visible" :style="{}" :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
<app-form-item name='emailaddress1' :itemRules="this.rules.emailaddress1" class='' :caption="$t('entities.contact.abstractinfo_form.details.emailaddress1')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.emailaddress1.error" :isEmptyCaption="false" labelPos="LEFT">
......@@ -361,6 +368,7 @@ export default class AbstractInfoBase extends Vue implements ControlInterface {
srfsourcekey: null,
fullname: null,
jobtitle: null,
customername: null,
emailaddress1: null,
telephone1: null,
mobilephone: null,
......@@ -468,6 +476,12 @@ export default class AbstractInfoBase extends Vue implements ControlInterface {
{ required: false, type: 'string', message: '职务 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '职务 值不能为空', trigger: 'blur' },
],
customername: [
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'blur' },
],
emailaddress1: [
{ type: 'string', message: '电子邮件 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '电子邮件 值必须为字符串类型', trigger: 'blur' },
......@@ -530,6 +544,8 @@ export default class AbstractInfoBase extends Vue implements ControlInterface {
fullname: new FormItemModel({ caption: '全名', detailType: 'FORMITEM', name: 'fullname', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
jobtitle: new FormItemModel({ caption: '职务', detailType: 'FORMITEM', name: 'jobtitle', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
customername: new FormItemModel({ caption: '客户', detailType: 'FORMITEM', name: 'customername', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
emailaddress1: new FormItemModel({ caption: '电子邮件', detailType: 'FORMITEM', name: 'emailaddress1', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
......@@ -663,6 +679,18 @@ export default class AbstractInfoBase extends Vue implements ControlInterface {
this.formDataChange({ name: 'jobtitle', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 customername 值
*
* @param {*} newVal
* @param {*} oldVal
* @memberof AbstractInfo
*/
@Watch('data.customername')
onCustomernameChange(newVal: any, oldVal: any) {
this.formDataChange({ name: 'customername', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 emailaddress1 值
*
......@@ -776,6 +804,7 @@ export default class AbstractInfoBase extends Vue implements ControlInterface {
}
/**
......
......@@ -65,6 +65,11 @@ export default class AbstractInfoModel {
prop: 'jobtitle',
dataType: 'TEXT',
},
{
name: 'customername',
prop: 'cusomername',
dataType: 'PICKUPTEXT',
},
{
name: 'emailaddress1',
prop: 'emailaddress1',
......
<template>
<div class='tabviewpanel' style="height:100%;" v-if = 'isActivied' >
<lead-grid-view
<lead-con-lead-grid-view
class='viewcontainer2'
:viewdata="viewdata"
:viewparam="viewparam"
@viewload="viewDatasChange($event)"
:viewDefaultUsage="false" >
</lead-grid-view>
</lead-con-lead-grid-view>
</div>
</template>
<script lang='tsx'>
......
<template>
<div class='tabviewpanel' style="height:100%;" v-if = 'isActivied' >
<opportunity-grid-view
<opportunity-con-opp-grid-view
class='viewcontainer2'
:viewdata="viewdata"
:viewparam="viewparam"
@viewload="viewDatasChange($event)"
:viewDefaultUsage="false" >
</opportunity-grid-view>
</opportunity-con-opp-grid-view>
</div>
</template>
<script lang='tsx'>
......
......@@ -17,6 +17,33 @@
<input-box v-model="data.jobtitle" @enter="onEnter($event)" unit="" :disabled="detailsModel.jobtitle.disabled" type='text' style=""></input-box>
</app-form-item>
</i-col>
<i-col v-show="detailsModel.customername.visible" :style="{}" :lg="{ span: 12, offset: 0 }" :xl="{ span: 12, offset: 0 }">
<app-form-item name='customername' :itemRules="this.rules.customername" class='' :caption="$t('entities.contact.quickcreate_form.details.customername')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.customername.error" :isEmptyCaption="false" labelPos="LEFT">
<app-picker
:formState="formState"
:data="data"
:context="context"
:viewparams="viewparams"
:localContext ='{ }'
:localParam ='{ }'
:disabled="detailsModel.customername.disabled"
name='customername'
deMajorField='accountname'
deKeyField='account'
:service="service"
:acParams="{ serviceName: 'AccountService', interfaceName: 'FetchDefault'}"
valueitem='customerid'
:value="data.customername"
editortype=""
:pickupView="{ viewname: 'account-pickup-view', title: $t('entities.account.views.pickupview.title'), deResParameters: [], parameters: [{ pathName: 'accounts', parameterName: 'account' }, { pathName: 'pickupview', parameterName: 'pickupview' } ], placement:'' }"
style=""
@formitemvaluechange="onFormItemValueChange">
</app-picker>
</app-form-item>
</i-col>
<i-col v-show="detailsModel.emailaddress1.visible" :style="{}" :lg="{ span: 12, offset: 0 }" :xl="{ span: 12, offset: 0 }">
<app-form-item name='emailaddress1' :itemRules="this.rules.emailaddress1" class='' :caption="$t('entities.contact.quickcreate_form.details.emailaddress1')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.emailaddress1.error" :isEmptyCaption="false" labelPos="LEFT">
......@@ -393,6 +420,7 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
srfsourcekey: null,
fullname: null,
jobtitle: null,
customername: null,
emailaddress1: null,
telephone1: null,
mobilephone: null,
......@@ -402,6 +430,7 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
address1_city: null,
address1_line1: null,
address1_postalcode: null,
customerid: null,
contactid: null,
contact:null,
};
......@@ -505,6 +534,12 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
{ required: false, type: 'string', message: '职务 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '职务 值不能为空', trigger: 'blur' },
],
customername: [
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'blur' },
],
emailaddress1: [
{ type: 'string', message: '电子邮件 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '电子邮件 值必须为字符串类型', trigger: 'blur' },
......@@ -559,6 +594,12 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
{ required: false, type: 'string', message: '邮政编码 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '邮政编码 值不能为空', trigger: 'blur' },
],
customerid: [
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '客户 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '客户 值不能为空', trigger: 'blur' },
],
contactid: [
{ type: 'string', message: '联系人 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '联系人 值必须为字符串类型', trigger: 'blur' },
......@@ -599,6 +640,8 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
fullname: new FormItemModel({ caption: '全名', detailType: 'FORMITEM', name: 'fullname', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
jobtitle: new FormItemModel({ caption: '职务', detailType: 'FORMITEM', name: 'jobtitle', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
customername: new FormItemModel({ caption: '客户', detailType: 'FORMITEM', name: 'customername', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
emailaddress1: new FormItemModel({ caption: '电子邮件', detailType: 'FORMITEM', name: 'emailaddress1', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
......@@ -617,6 +660,8 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
address1_line1: new FormItemModel({ caption: '街道', detailType: 'FORMITEM', name: 'address1_line1', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
address1_postalcode: new FormItemModel({ caption: '邮政编码', detailType: 'FORMITEM', name: 'address1_postalcode', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
customerid: new FormItemModel({ caption: '客户', detailType: 'FORMITEM', name: 'customerid', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
contactid: new FormItemModel({ caption: '联系人', detailType: 'FORMITEM', name: 'contactid', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 1 })
,
......@@ -742,6 +787,18 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
this.formDataChange({ name: 'jobtitle', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 customername 值
*
* @param {*} newVal
* @param {*} oldVal
* @memberof QuickCreate
*/
@Watch('data.customername')
onCustomernameChange(newVal: any, oldVal: any) {
this.formDataChange({ name: 'customername', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 emailaddress1 值
*
......@@ -850,6 +907,18 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
this.formDataChange({ name: 'address1_postalcode', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 customerid 值
*
* @param {*} newVal
* @param {*} oldVal
* @memberof QuickCreate
*/
@Watch('data.customerid')
onCustomeridChange(newVal: any, oldVal: any) {
this.formDataChange({ name: 'customerid', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 contactid 值
*
......@@ -918,6 +987,8 @@ export default class QuickCreateBase extends Vue implements ControlInterface {
......
......@@ -65,6 +65,11 @@ export default class QuickCreateModel {
prop: 'jobtitle',
dataType: 'TEXT',
},
{
name: 'customername',
prop: 'cusomername',
dataType: 'PICKUPTEXT',
},
{
name: 'emailaddress1',
prop: 'emailaddress1',
......@@ -110,6 +115,11 @@ export default class QuickCreateModel {
prop: 'address1_postalcode',
dataType: 'TEXT',
},
{
name: 'customerid',
prop: 'customerid',
dataType: 'PICKUP',
},
{
name: 'contactid',
prop: 'contactid',
......
......@@ -2,6 +2,7 @@ import { Http,Util,Errorlog } from '@/utils';
import ControlService from '@/widgets/control-service';
import ContactService from '@/service/contact/contact-service';
import QuickCreateModel from './quick-create-form-model';
import AccountService from '@/service/account/account-service';
/**
......@@ -41,6 +42,14 @@ export default class QuickCreateService extends ControlService {
this.model = new QuickCreateModel();
}
/**
* 客户服务对象
*
* @type {AccountService}
* @memberof QuickCreateService
*/
public accountService: AccountService = new AccountService();
/**
* 处理数据
*
......@@ -80,6 +89,9 @@ export default class QuickCreateService extends ControlService {
*/
@Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
if (Object.is(serviceName, 'AccountService') && Object.is(interfaceName, 'FetchDefault')) {
return this.doItems(this.accountService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'accountid', 'account');
}
return Promise.reject([])
}
......
<template>
<split id="listexpviewlistexpbar" class="app-list-exp-bar" v-model="split" mode="horizontal" @on-move-end="onSplitChange">
<template slot='left'>
<div class="container-header">
<div class='search-container'>
<i-input :search="true"
@on-change="($event) => { this.searchText = $event.target.value; }"
@on-search="onSearch">
</i-input>
</div>
</div>
<div class='list-exp-bar-content'>
<view_listexpbar_list
:viewState="viewState"
:viewparams="viewparams"
:context="context"
createAction="Create"
removeAction="Remove"
updateAction="Update"
fetchAction="FetchDefault"
:showBusyIndicator="true"
:isSelectFirstDefault="true"
:newdata="newdata"
:opendata="opendata"
name="listexpbar_list"
ref='listexpbar_list'
@selectionchange="listexpbar_list_selectionchange($event)"
@load="listexpbar_list_load($event)"
@closeview="closeView($event)">
</view_listexpbar_list>
</div>
</template>
<template slot='right'>
<component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname"
class="viewcontainer2"
:viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.context)"
:viewparam="JSON.stringify(selection.viewparam)">
</component>
</template>
</split>
</template>
<script lang='tsx'>
import { Vue, Component, Prop, Provide, Emit, Watch, Model } from 'vue-property-decorator';
import { CreateElement } from 'vue';
import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils';
import OpportunityService from '@/service/opportunity/opportunity-service';
import ListExpViewlistexpbarService from './list-exp-viewlistexpbar-listexpbar-service';
@Component({
components: {
}
})
export default class ListExpViewlistexpbarBase extends Vue implements ControlInterface {
/**
* 名称
*
* @type {string}
* @memberof ListExpViewlistexpbar
*/
@Prop() public name?: string;
/**
* 视图通讯对象
*
* @type {Subject<ViewState>}
* @memberof ListExpViewlistexpbar
*/
@Prop() public viewState!: Subject<ViewState>;
/**
* 应用上下文
*
* @type {*}
* @memberof ListExpViewlistexpbar
*/
@Prop() public context: any;
/**
* 视图参数
*
* @type {*}
* @memberof ListExpViewlistexpbar
*/
@Prop() public viewparams: any;
/**
* 视图状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof ListExpViewlistexpbar
*/
public viewStateEvent: Subscription | undefined;
/**
* 获取部件类型
*
* @returns {string}
* @memberof ListExpViewlistexpbar
*/
public getControlType(): string {
return 'LISTEXPBAR'
}
/**
* 计数器服务对象集合
*
* @type {Array<*>}
* @memberof ListExpViewlistexpbar
*/
public counterServiceArray:Array<any> = [];
/**
* 建构部件服务对象
*
* @type {ListExpViewlistexpbarService}
* @memberof ListExpViewlistexpbar
*/
public service: ListExpViewlistexpbarService = new ListExpViewlistexpbarService({ $store: this.$store });
/**
* 实体服务对象
*
* @type {OpportunityService}
* @memberof ListExpViewlistexpbar
*/
public appEntityService: OpportunityService = new OpportunityService({ $store: this.$store });
/**
* listexpbar_list 部件 selectionchange 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof ListExpViewlistexpbar
*/
public listexpbar_list_selectionchange($event: any, $event2?: any) {
this.listexpbar_selectionchange($event, 'listexpbar_list', $event2);
}
/**
* listexpbar_list 部件 load 事件
*
* @param {*} [args={}]
* @param {*} $event
* @memberof ListExpViewlistexpbar
*/
public listexpbar_list_load($event: any, $event2?: any) {
this.listexpbar_load($event, 'listexpbar_list', $event2);
}
/**
* 关闭视图
*
* @param {any} args
* @memberof ListExpViewlistexpbar
*/
public closeView(args: any): void {
let _this: any = this;
_this.$emit('closeview', [args]);
}
/**
* 计数器刷新
*
* @memberof ListExpViewlistexpbar
*/
public counterRefresh(){
const _this:any =this;
if(_this.counterServiceArray && _this.counterServiceArray.length >0){
_this.counterServiceArray.forEach((item:any) =>{
if(item.refreshData && item.refreshData instanceof Function){
item.refreshData();
}
})
}
}
/**
* 打开新建数据视图
*
* @type {any}
* @memberof ListExpViewlistexpbarBase
*/
@Prop() public newdata: any;
/**
* 打开编辑数据视图
*
* @type {any}
* @memberof ListExpViewlistexpbarBase
*/
@Prop() public opendata: any;
/**
* 视图唯一标识
*
* @type {boolean}
* @memberof ListExpViewlistexpbarBase
*/
@Prop() public viewUID!:string;
/**
* 是否单选
*
* @public
* @type {(boolean)}
* @memberof ListExpViewlistexpbarBase
*/
public isSingleSelect:boolean = true;
/**
* 呈现模式,可选值:horizontal或者vertical
*
* @public
* @type {(string)}
* @memberof ListExpViewlistexpbarBase
*/
public showMode:string ="horizontal";
/**
* 控件宽度
*
* @type {number}
* @memberof ListExpViewlistexpbarBase
*/
public ctrlWidth:number = 0;
/**
* 控件高度
*
* @type {number}
* @memberof ListExpViewlistexpbarBase
*/
public ctrlHeight: number = 0;
/**
* 搜素值
*
* @public
* @type {(string)}
* @memberof ListExpViewlistexpbarBase
*/
public searchText:string = "";
/**
* 分割宽度
*
* @type {number}
* @memberof ListExpViewlistexpbarBase
*/
public split: number = 0.2;
/**
* 导航视图名称
*
* @type {string}
* @memberof ListExpViewlistexpbarBase
*/
public navViewName: string = "";
/**
* 导航视图参数
*
* @type {string}
* @memberof ListExpViewlistexpbarBase
*/
public navViewParam: string = '{}';
/**
* 导航过滤项
*
* @type {string}
* @memberof ListExpViewlistexpbarBase
*/
public navFilter: string = "";
/**
* 导航关系
*
* @type {string}
* @memberof ListExpViewlistexpbarBase
*/
public navPSDer: string = "";
/**
* 导航上下文参数
*
* @type {*}
* @memberof ListExpViewlistexpbarBase
*/
public navigateContext:any = null;
/**
* 导航视图参数
*
* @type {*}
* @memberof ListExpViewlistexpbarBase
*/
public navigateParams:any = null;
/**
* 显示处理提示
*
* @type {boolean}
* @memberof ListExpViewlistexpbarBase
*/
@Prop({ default: true }) public showBusyIndicator!: boolean;
/**
* 获取多项数据
*
* @returns {any[]}
* @memberof ListExpViewlistexpbarBase
*/
public getDatas(): any[] {
return [];
}
/**
* 获取单项树
*
* @returns {*}
* @memberof ListExpViewlistexpbarBase
*/
public getData(): any {
return null;
}
/**
* 选中数据
*
* @type {*}
* @memberof ListExpViewlistexpbarBase
*/
public selection: any = {};
/**
* split值变化事件
*
* @memberof ListExpViewlistexpbarBase
*/
public onSplitChange() {
if(this.split){
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
}
}
/**
* Vue声明周期(组件初始化完毕)
*
* @memberof ListExpViewlistexpbarBase
*/
public created() {
this.afterCreated();
}
/**
* 执行created后的逻辑
*
* @memberof ListExpViewlistexpbarBase
*/
public afterCreated(){
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, this.name)) {
return;
}
this.viewState.next({ tag: 'listexpbar_list', action: action, data: data });
});
}
}
/**
* 执行mounted后的逻辑
*
* @memberof ListExpViewlistexpbarBase
*/
public afterMounted(){
if(this.$store.getters.getViewSplit(this.viewUID)){
this.split = this.$store.getters.getViewSplit(this.viewUID);
}else{
let containerWidth:number = (document.getElementById("listexpviewlistexpbar") as any).offsetWidth;
let containerHeight:number = (document.getElementById("listexpviewlistexpbar") as any).offsetHeight;
if(Object.is(this.showMode,'horizontal')){
if(this.ctrlWidth){
this.split = this.ctrlWidth/containerWidth;
}
}else{
if(this.ctrlHeight){
this.split = this.ctrlHeight/containerHeight;
}
}
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
}
}
/**
* Vue声明周期(组件渲染完毕)
*
* @memberof ListExpViewlistexpbarBase
*/
public mounted() {
this.afterMounted();
}
/**
* vue 生命周期
*
* @memberof ListExpViewlistexpbarBase
*/
public destroyed() {
this.afterDestroy();
}
/**
* 执行destroyed后的逻辑
*
* @memberof ListExpViewlistexpbarBase
*/
public afterDestroy() {
if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe();
}
}
/**
* listexpbar的选中数据事件
*
* @memberof ListExpViewlistexpbarBase
*/
public listexpbar_selectionchange(args: any [], tag?: string, $event2?: any): void {
let tempContext:any = {};
let tempViewParam:any = {};
if (args.length === 0) {
return ;
}
const arg:any = args[0];
if(this.context){
Object.assign(tempContext,JSON.parse(JSON.stringify(this.context)));
}
Object.assign(tempContext,{'opportunity':arg['opportunity']});
Object.assign(tempContext,{srfparentdename:'Opportunity',srfparentkey:arg['opportunity']});
if(this.navFilter && !Object.is(this.navFilter,"")){
Object.assign(tempViewParam,{[this.navFilter]:arg['opportunity']});
}
if(this.navPSDer && !Object.is(this.navPSDer,"")){
Object.assign(tempViewParam,{[this.navPSDer]:arg['opportunity']});
}
if(this.navigateContext && Object.keys(this.navigateContext).length >0){
let _context:any = this.$util.computedNavData(arg,tempContext,tempViewParam,this.navigateContext);
Object.assign(tempContext,_context);
}
if(this.navigateParams && Object.keys(this.navigateParams).length >0){
let _params:any = this.$util.computedNavData(arg,tempContext,tempViewParam,this.navigateParams);
Object.assign(tempViewParam,_params);
}
this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName },context:tempContext,viewparam:tempViewParam});
this.$emit('selectionchange',args);
this.$forceUpdate();
}
/**
* listexpbar的load完成事件
*
* @memberof ListExpViewlistexpbarBase
*/
public listexpbar_load(args:any, tag?: string, $event2?: any){
this.$emit('load',args);
}
/**
* 执行搜索
*
* @memberof ListExpViewlistexpbarBase
*/
public onSearch($event:any) {
this.viewState.next({ tag: 'listexpbar_list', action: "load", data: {query : this.searchText}});
}
}
</script>
<style lang='less'>
@import './list-exp-viewlistexpbar-listexpbar.less';
</style>
\ No newline at end of file
/**
* ListExpViewlistexpbar 部件模型
*
* @export
* @class ListExpViewlistexpbarModel
*/
export default class ListExpViewlistexpbarModel {
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ListExpViewlistexpbarListexpbarMode
*/
public getDataItems(): any[] {
return [
]
}
}
\ No newline at end of file
import { Http,Util,Errorlog } from '@/utils';
import ControlService from '@/widgets/control-service';
import OpportunityService from '@/service/opportunity/opportunity-service';
import ListExpViewlistexpbarModel from './list-exp-viewlistexpbar-listexpbar-model';
/**
* ListExpViewlistexpbar 部件服务对象
*
* @export
* @class ListExpViewlistexpbarService
*/
export default class ListExpViewlistexpbarService extends ControlService {
/**
* 商机服务对象
*
* @type {OpportunityService}
* @memberof ListExpViewlistexpbarService
*/
public appEntityService: OpportunityService = new OpportunityService({ $store: this.getStore() });
/**
* 设置从数据模式
*
* @type {boolean}
* @memberof ListExpViewlistexpbarService
*/
public setTempMode(){
this.isTempMode = false;
}
/**
* Creates an instance of ListExpViewlistexpbarService.
*
* @param {*} [opts={}]
* @memberof ListExpViewlistexpbarService
*/
constructor(opts: any = {}) {
super(opts);
this.model = new ListExpViewlistexpbarModel();
}
}
\ No newline at end of file
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import ListExpViewlistexpbarBase from './list-exp-viewlistexpbar-listexpbar-base.vue';
import view_listexpbar_list from '@widgets/opportunity/list-list/list-list.vue';
@Component({
components: {
view_listexpbar_list,
}
})
export default class ListExpViewlistexpbar extends ListExpViewlistexpbarBase {
}
</script>
\ No newline at end of file
<template>
<div :class="['app-list', this.items.length > 0 ? '' : 'app-list-empty' ]">
<div v-if="items.length > 0" style="height:100%;">
<div v-for = "item in items" :key="item.srfkey" :class="['app-list-item', {'isSelect': item.isselected === true ? true : false}]" @click="handleClick(item)" @dblclick="handleDblClick(item)">
<layout_listexpbar_list_itempanel name='listexpbar_list_itempanel' :inputData="item" :parentRef="thisRef"></layout_listexpbar_list_itempanel>
</div>
</div>
<div v-else>
暂无数据
</div>
</div>
</template>
<script lang='tsx'>
import { Vue, Component, Prop, Provide, Emit, Watch, Model } from 'vue-property-decorator';
import { CreateElement } from 'vue';
import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils';
import OpportunityService from '@/service/opportunity/opportunity-service';
import ListService from './list-list-service';
@Component({
components: {
}
})
export default class ListBase extends Vue implements ControlInterface {
/**
* 名称
*
* @type {string}
* @memberof List
*/
@Prop() public name?: string;
/**
* 视图通讯对象
*
* @type {Subject<ViewState>}
* @memberof List
*/
@Prop() public viewState!: Subject<ViewState>;
/**
* 应用上下文
*
* @type {*}
* @memberof List
*/
@Prop() public context: any;
/**
* 视图参数
*
* @type {*}
* @memberof List
*/
@Prop() public viewparams: any;
/**
* 视图状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof List
*/
public viewStateEvent: Subscription | undefined;
/**
* 获取部件类型
*
* @returns {string}
* @memberof List
*/
public getControlType(): string {
return 'LIST'
}
/**
* 计数器服务对象集合
*
* @type {Array<*>}
* @memberof List
*/
public counterServiceArray:Array<any> = [];
/**
* 建构部件服务对象
*
* @type {ListService}
* @memberof List
*/
public service: ListService = new ListService({ $store: this.$store });
/**
* 实体服务对象
*
* @type {OpportunityService}
* @memberof List
*/
public appEntityService: OpportunityService = new OpportunityService({ $store: this.$store });
/**
* 关闭视图
*
* @param {any} args
* @memberof List
*/
public closeView(args: any): void {
let _this: any = this;
_this.$emit('closeview', [args]);
}
/**
* 计数器刷新
*
* @memberof List
*/
public counterRefresh(){
const _this:any =this;
if(_this.counterServiceArray && _this.counterServiceArray.length >0){
_this.counterServiceArray.forEach((item:any) =>{
if(item.refreshData && item.refreshData instanceof Function){
item.refreshData();
}
})
}
}
/**
* 获取多项数据
*
* @returns {any[]}
* @memberof List
*/
public getDatas(): any[] {
return this.selections;
}
/**
* 获取单项树
*
* @returns {*}
* @memberof List
*/
public getData(): any {
return null;
}
/**
* 是否默认选中第一条数据
*
* @type {boolean}
* @memberof List
*/
@Prop({ default: false }) public isSelectFirstDefault!: boolean;
/**
* 显示处理提示
*
* @type {boolean}
* @memberof List
*/
@Prop({ default: true }) public showBusyIndicator?: boolean;
/**
* 部件行为--create
*
* @type {string}
* @memberof List
*/
@Prop() public createAction!: string;
/**
* 部件行为--remove
*
* @type {string}
* @memberof List
*/
@Prop() public removeAction!: string;
/**
* 部件行为--update
*
* @type {string}
* @memberof List
*/
@Prop() public updateAction!: string;
/**
* 部件行为--fetch
*
* @type {string}
* @memberof List
*/
@Prop() public fetchAction!: string;
/**
* 打开新建数据视图
*
* @type {any}
* @memberof List
*/
@Prop() public newdata: any;
/**
* 打开编辑数据视图
*
* @type {any}
* @memberof List
*/
@Prop() public opendata: any;
/**
* this引用
*
* @type {number}
* @memberof Main
*/
public thisRef: any = this;
/**
* 当前页
*
* @type {number}
* @memberof Main
*/
public curPage: number = 1;
/**
* 数据
*
* @type {any[]}
* @memberof List
*/
public items: any[] = [];
/**
* 是否支持分页
*
* @type {boolean}
* @memberof List
*/
public isEnablePagingBar: boolean = true;
/**
* 分页条数
*
* @type {number}
* @memberof List
*/
public limit: number = 1000;
/**
* 总条数
*
* @type {number}
* @memberof List
*/
public totalRecord: number = 0;
/**
* 加载的数据是否附加在items之后
*
* @type {boolean}
* @memberof List
*/
public isAddBehind:boolean = false;
/**
* 排序方向
*
* @type {string}
* @memberof List
*/
public sortDir:string = '';
/**
* 排序字段
*
* @type {string}
* @memberof List
*/
public sortField: string = '';
/**
* 选中数组
* @type {Array<any>}
* @memberof List
*/
public selections: Array<any> = [];
/**
* Vue声明周期,组件挂载完毕
*
* @memberof List
*/
public mounted () {
this.afterMounted();
}
/**
* 执行mounted后的逻辑
*
* @memberof List
*/
public afterMounted () {
this.$el.addEventListener('scroll', ()=> {
if( this.$el.scrollTop + this.$el.clientHeight >= this.$el.scrollHeight) {
this.loadMore();
}
})
}
/**
* Vue声明周期,组件创建完毕
*
* @memberof List
*/
public created() {
this.afterCreated()
}
/**
* 执行created后的逻辑
*
* @memberof List
*/
public afterCreated(){
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(this.name, tag)) {
return;
}
if (Object.is(action,'load')) {
this.refresh(data)
}
});
}
}
/**
* vue 生命周期
*
* @memberof List
*/
public destroyed() {
this.afterDestroy();
}
/**
* 执行destroyed后的逻辑
*
* @memberof List
*/
public afterDestroy() {
if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe();
}
}
/**
* 加载更多
*
* @memberof Mob
*/
public loadMore(){
if(this.totalRecord>this.items.length)
{
this.curPage = ++this.curPage;
this.isAddBehind = true;
this.load({});
}
}
/**
* 刷新
*
* @param {*} [opt={}]
* @memberof Main
*/
public refresh(opt: any = {}) {
this.curPage = 1;
this.items = [];
this.load(opt);
}
/**
* 列表数据加载
*
* @public
* @param {*} [arg={}]
* @memberof List
*/
public load(opt: any = {}): void {
if(!this.fetchAction){
this.$Notice.error({ title: '错误', desc: 'OpportunityListExpView视图列表fetchAction参数未配置' });
return;
}
const arg: any = {...opt};
const page: any = {};
if (this.isEnablePagingBar) {
Object.assign(page, { page: this.curPage-1, size: this.limit });
}
// 设置排序
if (!Object.is(this.sortDir, '') && !Object.is(this.sortField, '')) {
const sort: string = this.sortField+","+this.sortDir;
Object.assign(page, { sort: sort });
}
Object.assign(arg, page);
const parentdata: any = {};
this.$emit('beforeload', parentdata);
Object.assign(arg, parentdata);
let tempViewParams:any = parentdata.viewparams?parentdata.viewparams:{};
if(this.viewparams){
Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams)));
}
Object.assign(arg,{viewparams:tempViewParams});
const post: Promise<any> = this.service.search(this.fetchAction, this.context?JSON.parse(JSON.stringify(this.context)):{}, arg, this.showBusyIndicator);
post.then((response: any) => {
if (!response || response.status !== 200) {
if (response.errorMessage) {
this.$Notice.error({ title: '错误', desc: response.errorMessage });
}
return;
}
const data: any = response.data;
if(!this.isAddBehind){
this.items = [];
}
if (Object.keys(data).length > 0) {
let datas = JSON.parse(JSON.stringify(data));
datas.map((item: any) => {
Object.assign(item, { isselected: false });
});
this.totalRecord = response.total;
this.items.push(...datas);
}
this.isAddBehind = false;
this.$emit('load', this.items);
if(this.isSelectFirstDefault){
this.handleClick(this.items[0]);
}
}, (response: any) => {
if (response && response.status === 401) {
return;
}
this.$Notice.error({ title: '错误', desc: response.errorMessage });
});
}
/**
* 删除
*
* @param {any[]} datas
* @returns {Promise<any>}
* @memberof List
*/
public async remove(datas: any[]): Promise<any> {
if(!this.removeAction){
this.$Notice.error({ title: '错误', desc: 'OpportunityListExpView视图表格removeAction参数未配置' });
return;
}
if (datas.length === 0) {
return;
}
let dataInfo = '';
datas.forEach((record: any, index: number) => {
let srfmajortext = record.srfmajortext;
if (index < 5) {
if (!Object.is(dataInfo, '')) {
dataInfo += '、';
}
dataInfo += srfmajortext;
} else {
return false;
}
});
if (datas.length < 5) {
dataInfo = dataInfo + ' 共' + datas.length + '条数据';
} else {
dataInfo = dataInfo + '...' + ' 共' + datas.length + '条数据';
}
const removeData = () => {
let keys: any[] = [];
datas.forEach((data: any) => {
keys.push(data.srfkey);
});
let _removeAction = keys.length > 1 ? 'removeBatch' : this.removeAction ;
const context:any = JSON.parse(JSON.stringify(this.context));
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ opportunity: keys.join(';') }),Object.assign({ opportunity: keys.join(';') },{viewparams:this.viewparams}), this.showBusyIndicator);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
if (!response || response.status !== 200) {
this.$Notice.error({ title: '', desc: '删除数据失败,' + response.info });
return;
} else {
this.$Notice.success({ title: '', desc: '删除成功!' });
}
//删除items中已删除的项
datas.forEach((data: any) => {
this.items.some((item:any,index:number)=>{
if(Object.is(item.srfkey,data.srfkey)){
this.items.splice(index,1);
return true;
}
});
});
this.$emit('remove', null);
this.selections = [];
resolve(response);
}).catch((response: any) => {
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
reject(response);
return;
}
reject(response);
});
});
}
dataInfo = dataInfo.replace(/[null]/g, '').replace(/[undefined]/g, '').replace(/[ ]/g, '');
this.$Modal.confirm({
title: '警告',
content: '确认要删除 ' + dataInfo + ',删除操作将不可恢复?',
onOk: () => {
removeData();
},
onCancel: () => { }
});
return removeData;
}
/**
* 选择数据
* @memberof List
*
*/
public handleClick(args: any) {
this.clearSelection();
args.isselected = !args.isselected;
this.selectchange();
}
/**
* 双击数据
* @memberof List
*
*/
public handleDblClick(args: any) {
this.$emit('rowdblclick', args);
}
/**
* 触发事件
* @memberof List
*
*/
public selectchange() {
this.selections = [];
this.items.map((item: any) => {
if (item.isselected) {
this.selections.push(item);
}
});
this.$emit('selectionchange', this.selections);
}
/**
* 清除当前所有选中状态
*
* @memberof List
*/
public clearSelection(){
this.items.map((item: any) => {
Object.assign(item, { isselected: false });
});
}
}
</script>
<style lang='less'>
@import './list-list.less';
</style>
\ No newline at end of file
/**
* List 部件模型
*
* @export
* @class ListModel
*/
export default class ListModel {
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ListListexpbar_listMode
*/
public getDataItems(): any[] {
return [
{
name: 'parentcontactname',
},
{
name: 'parentaccountname',
},
{
name: 'opportunityname',
},
{
name:'size',
prop:'size'
},
{
name:'query',
prop:'query'
},
{
name:'sort',
prop:'sort'
},
{
name:'page',
prop:'page'
},
// 前端新增修改标识,新增为"0",修改为"1"或未设值
{
name: 'srffrontuf',
prop: 'srffrontuf',
dataType: 'TEXT',
},
]
}
}
\ No newline at end of file
import { Http,Util,Errorlog } from '@/utils';
import ControlService from '@/widgets/control-service';
import OpportunityService from '@/service/opportunity/opportunity-service';
import ListModel from './list-list-model';
/**
* List 部件服务对象
*
* @export
* @class ListService
*/
export default class ListService extends ControlService {
/**
* 商机服务对象
*
* @type {OpportunityService}
* @memberof ListService
*/
public appEntityService: OpportunityService = new OpportunityService({ $store: this.getStore() });
/**
* 设置从数据模式
*
* @type {boolean}
* @memberof ListService
*/
public setTempMode(){
this.isTempMode = false;
}
/**
* Creates an instance of ListService.
*
* @param {*} [opts={}]
* @memberof ListService
*/
constructor(opts: any = {}) {
super(opts);
this.model = new ListModel();
}
/**
* 查询数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ListService
*/
@Errorlog
public search(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
return new Promise((resolve: any, reject: any) => {
const _appEntityService: any = this.appEntityService;
let result: Promise<any>;
if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
result = _appEntityService[action](Context,Data, isloading);
}else{
result =_appEntityService.FetchDefault(Context,Data, isloading);
}
result.then(async (response) => {
await this.handleResponse(action, response);
resolve(response);
}).catch(response => {
reject(response);
});
});
}
/**
* 删除数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ListService
*/
@Errorlog
public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
return new Promise((resolve: any, reject: any) => {
const _appEntityService: any = this.appEntityService;
let result: Promise<any>;
if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
result = _appEntityService[action](Context,Data, isloading);
}else{
result =_appEntityService.remove(Context,Data , isloading);
}
result.then((response) => {
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
reject(response);
});
});
}
}
\ No newline at end of file
.app-list {
--app-list: 0;
}
// this is less
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import ListBase from './list-list-base.vue';
import layout_listexpbar_list_itempanel from '@widgets/opportunity/panel-panel/panel-panel.vue';
@Component({
components: {
layout_listexpbar_list_itempanel,
}
})
export default class List extends ListBase {
}
</script>
\ No newline at end of file
<template>
<div class='panel-container' style="">
<row class="app-layoutpanel" style="height:100%;">
<i-col v-show="detailsModel.container1.visible" style="" class="app-layoutpanel-container">
<row style="height:100%;">
<i-col v-show="detailsModel.opportunityname.visible" :md="{ span: 24, offset: 0 }" style="" class="app-layoutpanel-field">
<div class="item-field">
<div class="item-field-content">
<span>{{data.opportunityname}}</span>
</div>
</div>
</i-col>
<i-col v-show="detailsModel.parentaccountname.visible" :md="{ span: 24, offset: 0 }" style="" class="app-layoutpanel-field">
<div class="item-field">
<div class="item-field-content">
<span>{{data.parentaccountname}}</span>
</div>
</div>
</i-col>
<i-col v-show="detailsModel.parentcontactname.visible" :md="{ span: 24, offset: 0 }" style="" class="app-layoutpanel-field">
<div class="item-field">
<div class="item-field-content">
<span>{{data.parentcontactname}}</span>
</div>
</div>
</i-col>
</row>
</i-col>
</row>
</div>
</template>
<script lang='tsx'>
import { Vue, Component, Prop, Provide, Emit, Watch, Model } from 'vue-property-decorator';
import { CreateElement } from 'vue';
import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils';
import OpportunityService from '@/service/opportunity/opportunity-service';
import PanelService from './panel-panel-service';
import { FormItemModel } from '@/model/form-detail';
import PanelModel from './panel-panel-model';
import CodeListService from "@service/app/codelist-service";
@Component({
components: {
}
})
export default class PanelBase extends Vue implements ControlInterface {
/**
* 名称
*
* @type {string}
* @memberof Panel
*/
@Prop() public name?: string;
/**
* 视图通讯对象
*
* @type {Subject<ViewState>}
* @memberof Panel
*/
@Prop() public viewState!: Subject<ViewState>;
/**
* 应用上下文
*
* @type {*}
* @memberof Panel
*/
@Prop() public context: any;
/**
* 视图参数
*
* @type {*}
* @memberof Panel
*/
@Prop() public viewparams: any;
/**
* 视图状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof Panel
*/
public viewStateEvent: Subscription | undefined;
/**
* 获取部件类型
*
* @returns {string}
* @memberof Panel
*/
public getControlType(): string {
return 'PANEL'
}
/**
* 计数器服务对象集合
*
* @type {Array<*>}
* @memberof Panel
*/
public counterServiceArray:Array<any> = [];
/**
* 建构部件服务对象
*
* @type {PanelService}
* @memberof Panel
*/
public service: PanelService = new PanelService({ $store: this.$store });
/**
* 实体服务对象
*
* @type {OpportunityService}
* @memberof Panel
*/
public appEntityService: OpportunityService = new OpportunityService({ $store: this.$store });
/**
* 关闭视图
*
* @param {any} args
* @memberof Panel
*/
public closeView(args: any): void {
let _this: any = this;
_this.$emit('closeview', [args]);
}
/**
* 计数器刷新
*
* @memberof Panel
*/
public counterRefresh(){
const _this:any =this;
if(_this.counterServiceArray && _this.counterServiceArray.length >0){
_this.counterServiceArray.forEach((item:any) =>{
if(item.refreshData && item.refreshData instanceof Function){
item.refreshData();
}
})
}
}
/**
* 接口实现
*
* @returns {any[]}
* @memberof Panel
*/
getDatas(): any[] {
if (!this.panelData) {
return [];
}
return [this.panelData];
}
/**
* 接口实现
*
* @returns {*}
* @memberof Panel
*/
getData() {
return this.data;
}
/**
* 父级部件引用
*
* @type {*}
* @memberof Panel
*/
@Prop() public parentRef?: any;
/**
* 面板数据对象
*
* @type {*}
* @memberof Panel
*/
@Prop() public inputData?: any;
/**
* 代码表服务对象
*
* @type {CodeListService}
* @memberof Panel
*/
public codeListService:CodeListService = new CodeListService({ $store:this.$store });
/**
* 详情模型集合
*
* @type {*}
* @memberof Panel
*/
public detailsModel: any = {
opportunityname: new FormItemModel({ visible: true, disabled: false, enableCond: 3 }),
parentaccountname: new FormItemModel({ visible: true, disabled: false, enableCond: 3 }),
parentcontactname: new FormItemModel({ visible: true, disabled: false, enableCond: 3 }),
container1: new FormItemModel({ visible: true, disabled: false, enableCond: 3 }),
};
/**
* 面板逻辑
*
* @public
* @param {{ name: string, newVal: any, oldVal: any }} { name, newVal, oldVal }
* @memberof Panel
*/
public panelLogic({ name, newVal, oldVal }: { name: string, newVal: any, oldVal: any }): void {
}
/**
* 数据模型对象
*
* @type {PanelModel}
* @memberof Panel
*/
public dataModel:PanelModel = new PanelModel();
/**
* UI数据对象
*
* @type {*}
* @memberof Panel
*/
public data:any = {};
/**
* 面板数据对象
*
* @type {*}
* @memberof Mob
*/
public panelData:any = null;
/**
* 监听数据对象
*
* @memberof Panel
*/
@Watch('inputData',{immediate:true})
async onInputDataChange(newVal: any, oldVal: any){
if(newVal){
await this.computedUIData(newVal);
this.panelLogic({ name: '', newVal: null, oldVal: null });
this.$forceUpdate();
}
}
/**
* 计算UI展示数据
*
* @param codelistArray 代码表模型数组
* @memberof Panel
*/
public async computedUIData(newVal:any){
let codelistArray:Array<any> = [];
if((this.dataModel.getDataItems instanceof Function) && this.dataModel.getDataItems().length >0){
this.dataModel.getDataItems().forEach((item:any) =>{
if(item.codelist){
codelistArray.push(item.codelist);
}
})
if(codelistArray.length >0){
let res:any = await this.getAllCodeList(codelistArray);
this.dataModel.getDataItems().forEach((item:any) =>{
if(item.codelist){
this.data[item.name] = res.get(item.codelist.tag).get(newVal[item.prop]);
}else{
this.data[item.name] = newVal[item.prop];
}
})
}else{
this.dataModel.getDataItems().forEach((item:any) =>{
this.data[item.name] = newVal[item.prop];
})
}
}
}
/**
* 计算面板数据
*
* @param codelistArray 代码表模型数组
* @memberof Mob
*/
public async computePanelData(){
let codelistArray:Array<any> = [];
let panelData:any = {};
if((this.dataModel.getDataItems instanceof Function) && this.dataModel.getDataItems().length >0){
this.dataModel.getDataItems().forEach((item:any) =>{
if(item.codelist){
codelistArray.push(item.codelist);
}
})
if(codelistArray.length >0){
let res:any = await this.getAllCodeList(codelistArray,true);
this.dataModel.getDataItems().forEach((item:any) =>{
if(item.codelist){
panelData[item.prop] = res.get(item.codelist.tag).get(this.data[item.name]);
}else{
panelData[item.prop] = this.data[item.name];
}
})
}else{
this.dataModel.getDataItems().forEach((item:any) =>{
panelData[item.prop] = this.data[item.name];
})
}
}
this.panelData = Object.assign(JSON.parse(JSON.stringify(this.inputData)),panelData);
}
/**
* 获取所有代码表
*
* @param codelistArray 代码表模型数组
* @memberof Panel
*/
public getAllCodeList(codelistArray:Array<any>,reverse:boolean = false):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) =>{
if(reverse){
tempCodeListMap.set(codeListItem.text,codeListItem.value);
}else{
tempCodeListMap.set(codeListItem.value,codeListItem.text);
}
})
}
codeListMap.set(item.tag,tempCodeListMap);
})
resolve(codeListMap);
}
})
}
})
})
}
/**
* 获取代码表
*
* @param codeListObject 传入代码表对象
* @memberof Panel
*/
public getCodeList(codeListObject:any):Promise<any>{
return new Promise((resolve:any,reject:any) =>{
if(codeListObject.tag && Object.is(codeListObject.codelistType,"STATIC")){
const codelist = this.$store.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}----代码表不存在`);
});
}
})
}
/**
* 界面行为
*
* @param {*} row
* @param {*} tag
* @param {*} $event
* @memberof Panel
*/
public async uiAction(row: any, tag: any, $event: any) {
await this.computePanelData();
}
/**
* 打开编辑数据视图
*
* @type {any}
* @memberof Panel
*/
public opendata(args: any[],fullargs?:any[],params?: any, $event?: any, xData?: any){
if (this.parentRef.opendata && this.parentRef.opendata instanceof Function) {
this.parentRef.opendata(args,fullargs,params, $event, xData);
}
}
/**
* 打开新建数据视图
*
* @type {any}
* @memberof Panel
*/
public newdata(args: any[],fullargs?:any[], params?: any, $event?: any, xData?: any) {
if (this.parentRef.newdata && this.parentRef.newdata instanceof Function) {
this.parentRef.newdata(args,fullargs,params, $event, xData);
}
}
/**
* 删除
*
* @param {any[]} datas
* @returns {Promise<any>}
* @memberof Panel
*/
public async remove(datas: any[]): Promise<any> {
if (this.parentRef.remove && this.parentRef.remove instanceof Function) {
return this.parentRef.remove(datas);
}
}
/**
* 刷新
*
* @param {*} [opt={}]
* @memberof Main
*/
public refresh(opt: any = {}) {
if (this.parentRef.refresh && this.parentRef.refresh instanceof Function) {
this.parentRef.refresh(opt);
}
}
/**
* 设置面板编辑项值变更
*
* @param data 面板数据
* @param {{ name: string, value: any }} $event
* @returns {void}
* @memberof Panel
*/
public onPanelItemValueChange(data: any,$event: { name: string, value: any }): void {
if (!$event) {
return;
}
if (!$event.name || Object.is($event.name, '') || !data.hasOwnProperty($event.name)) {
return;
}
data[$event.name] = $event.value;
this.panelEditItemChange(data, $event.name, $event.value);
}
/**
* 面板编辑项值变化
*
* @public
* @param data 面板数据
* @param property 编辑项名
* @param value 编辑项值
* @returns {void}
* @memberof Panel
*/
public panelEditItemChange(data: any, property: string, value: any){
}
}
</script>
<style lang='less'>
@import './panel-panel.less';
</style>
/**
* Panel 部件模型
*
* @export
* @class PanelModel
*/
export default class PanelModel {
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof PanelModel
*/
public getDataItems(): any[] {
return [
{
name: 'opportunityname',
prop: 'opportunityname'
},
{
name: 'parentaccountname',
prop: 'parentaccountname'
},
{
name: 'parentcontactname',
prop: 'parentcontactname'
}
]
}
}
\ No newline at end of file
import { Http } from '@/utils';
import ControlService from '@/widgets/control-service';
/**
* Panel 部件服务对象
*
* @export
* @class PanelService
*/
export default class PanelService extends ControlService {
}
\ No newline at end of file
// this is less
.app-layoutpanel {
height: 100%;
> .app-layoutpanel-container {
height: 100%;
}
.item-field{
padding: 0 4px;
display: flex;
>.item-field-label{
padding: 0 8px;
}
}
}
\ No newline at end of file
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import PanelBase from './panel-panel-base.vue';
@Component({
components: {
}
})
export default class Panel extends PanelBase {
}
</script>
\ No newline at end of file
......@@ -4,7 +4,7 @@
<row >
<i-col v-show="detailsModel.group1.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.opportunity.productinfo_form.details.group1')" :isShowCaption="false" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="true" >
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.opportunity.productinfo_form.details.group1')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="true" >
<row>
<i-col v-show="detailsModel.pricelevelname.visible" :style="{}" :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
<app-form-item name='pricelevelname' :itemRules="this.rules.pricelevelname" class='' :caption="$t('entities.opportunity.productinfo_form.details.pricelevelname')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.pricelevelname.error" :isEmptyCaption="false" labelPos="LEFT">
......@@ -19,7 +19,7 @@
</i-col>
<i-col v-show="detailsModel.grouppanel1.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.grouppanel1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.opportunity.productinfo_form.details.grouppanel1')" :isShowCaption="false" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="true" >
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.grouppanel1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.opportunity.productinfo_form.details.grouppanel1')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="true" >
<row>
<i-col v-show="detailsModel.druipart1.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-druipart
......@@ -471,11 +471,11 @@ export default class ProductInfoBase extends Vue implements ControlInterface {
* @memberof ProductInfo
*/
public detailsModel: any = {
group1: new FormGroupPanelModel({ caption: '商机基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: false, form: this, uiActionGroup: { caption: '', langbase: 'entities.opportunity.productinfo_form', extractMode: 'ITEM', details: [] } })
group1: new FormGroupPanelModel({ caption: '价目表信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: true, form: this, uiActionGroup: { caption: '', langbase: 'entities.opportunity.productinfo_form', extractMode: 'ITEM', details: [] } })
,
druipart1: new FormDRUIPartModel({ caption: '', detailType: 'DRUIPART', name: 'druipart1', visible: true, isShowCaption: true, form: this })
,
grouppanel1: new FormGroupPanelModel({ caption: '分组面板', detailType: 'GROUPPANEL', name: 'grouppanel1', visible: true, isShowCaption: false, form: this, uiActionGroup: { caption: '', langbase: 'entities.opportunity.productinfo_form', extractMode: 'ITEM', details: [] } })
grouppanel1: new FormGroupPanelModel({ caption: '产品明细信息', detailType: 'GROUPPANEL', name: 'grouppanel1', visible: true, isShowCaption: true, form: this, uiActionGroup: { caption: '', langbase: 'entities.opportunity.productinfo_form', extractMode: 'ITEM', details: [] } })
,
formpage1: new FormPageModel({ caption: '基本信息', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this })
,
......
......@@ -3182,7 +3182,7 @@
<!--输出实体[CONTACT]数据结构 -->
<changeSet author="a_LAB01_e85d8801c" id="tab-contact-233-43">
<changeSet author="a_LAB01_e85d8801c" id="tab-contact-238-43">
<createTable tableName="CONTACT">
<column name="ADDRESS1_FREIGHTTERMSCODE" remarks="" type="VARCHAR(30)">
</column>
......@@ -5884,7 +5884,7 @@
<!--输出实体[OPPORTUNITYPRODUCT]数据结构 -->
<changeSet author="a_LAB01_e85d8801c" id="tab-opportunityproduct-8-66">
<changeSet author="a_LAB01_e85d8801c" id="tab-opportunityproduct-9-66">
<createTable tableName="OPPORTUNITYPRODUCT">
<column name="PRICEOVERRIDDEN" remarks="" type="INT">
</column>
......@@ -6431,7 +6431,7 @@
<!--输出实体[LEAD]数据结构 -->
<changeSet author="a_LAB01_e85d8801c" id="tab-lead-103-74">
<changeSet author="a_LAB01_e85d8801c" id="tab-lead-106-74">
<createTable tableName="LEAD">
<column name="ADDRESS1_FAX" remarks="" type="VARCHAR(50)">
</column>
......@@ -10402,7 +10402,7 @@
<!--输出实体[OPPORTUNITY]数据结构 -->
<changeSet author="a_LAB01_e85d8801c" id="tab-opportunity-70-121">
<changeSet author="a_LAB01_e85d8801c" id="tab-opportunity-81-121">
<createTable tableName="OPPORTUNITY">
<column name="DECISIONMAKER" remarks="" type="INT">
</column>
......@@ -11033,25 +11033,25 @@
<addForeignKeyConstraint baseColumnNames="TRANSACTIONCURRENCYID" baseTableName="MONTHLYFISCALCALENDAR" constraintName="DER1N_MONTHLYFISCALCALENDAR__T" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="TRANSACTIONCURRENCYID" referencedTableName="TRANSACTIONCURRENCY" validate="true"/>
</changeSet>
<!--输出实体[CONTACT]外键关系 -->
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-233-214">
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-238-214">
<addForeignKeyConstraint baseColumnNames="CUSTOMERID" baseTableName="CONTACT" constraintName="DER1N_CONTACT_ACCOUNT_CUSTOMER" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ACCOUNTID" referencedTableName="ACCOUNT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-233-215">
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-238-215">
<addForeignKeyConstraint baseColumnNames="PREFERREDEQUIPMENTID" baseTableName="CONTACT" constraintName="DER1N_CONTACT__EQUIPMENT__PREF" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EQUIPMENTID" referencedTableName="EQUIPMENT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-233-216">
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-238-216">
<addForeignKeyConstraint baseColumnNames="ORIGINATINGLEADID" baseTableName="CONTACT" constraintName="DER1N_CONTACT__LEAD__ORIGINATI" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="LEADID" referencedTableName="LEAD" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-233-217">
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-238-217">
<addForeignKeyConstraint baseColumnNames="DEFAULTPRICELEVELID" baseTableName="CONTACT" constraintName="DER1N_CONTACT__PRICELEVEL__DEF" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="PRICELEVELID" referencedTableName="PRICELEVEL" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-233-218">
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-238-218">
<addForeignKeyConstraint baseColumnNames="PREFERREDSERVICEID" baseTableName="CONTACT" constraintName="DER1N_CONTACT__SERVICE__PREFER" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="SERVICEID" referencedTableName="SERVICE" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-233-219">
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-238-219">
<addForeignKeyConstraint baseColumnNames="SLAID" baseTableName="CONTACT" constraintName="DER1N_CONTACT__SLA__SLAID" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="SLAID" referencedTableName="SLA" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-233-220">
<changeSet author="a_LAB01_e85d8801c" id="fk-contact-238-220">
<addForeignKeyConstraint baseColumnNames="TRANSACTIONCURRENCYID" baseTableName="CONTACT" constraintName="DER1N_CONTACT__TRANSACTIONCURR" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="TRANSACTIONCURRENCYID" referencedTableName="TRANSACTIONCURRENCY" validate="true"/>
</changeSet>
<!--输出实体[TEAM]外键关系 -->
......@@ -11257,16 +11257,16 @@
<addForeignKeyConstraint baseColumnNames="TRANSACTIONCURRENCYID" baseTableName="EXPIREDPROCESS" constraintName="DER1N_EXPIREDPROCESS__TRANSACT" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="TRANSACTIONCURRENCYID" referencedTableName="TRANSACTIONCURRENCY" validate="true"/>
</changeSet>
<!--输出实体[OPPORTUNITYPRODUCT]外键关系 -->
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunityproduct-8-293">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunityproduct-9-293">
<addForeignKeyConstraint baseColumnNames="PARENTBUNDLEIDREF" baseTableName="OPPORTUNITYPRODUCT" constraintName="DER1N_OPPORTUNITYPRODUCT__OPPO" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="OPPORTUNITYPRODUCTID" referencedTableName="OPPORTUNITYPRODUCT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunityproduct-8-295">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunityproduct-9-295">
<addForeignKeyConstraint baseColumnNames="PRODUCTID" baseTableName="OPPORTUNITYPRODUCT" constraintName="DER1N_OPPORTUNITYPRODUCT__PROD" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="PRODUCTID" referencedTableName="PRODUCT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunityproduct-8-296">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunityproduct-9-296">
<addForeignKeyConstraint baseColumnNames="TRANSACTIONCURRENCYID" baseTableName="OPPORTUNITYPRODUCT" constraintName="DER1N_OPPORTUNITYPRODUCT__TRAN" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="TRANSACTIONCURRENCYID" referencedTableName="TRANSACTIONCURRENCY" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunityproduct-8-297">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunityproduct-9-297">
<addForeignKeyConstraint baseColumnNames="UOMID" baseTableName="OPPORTUNITYPRODUCT" constraintName="DER1N_OPPORTUNITYPRODUCT__UOM_" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="UOMID" referencedTableName="UOM" validate="true"/>
</changeSet>
<!--输出实体[POSITION]外键关系 -->
......@@ -11307,28 +11307,28 @@
</changeSet>
<!--输出实体[METRIC]外键关系 -->
<!--输出实体[LEAD]外键关系 -->
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-103-309">
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-106-309">
<addForeignKeyConstraint baseColumnNames="PARENTACCOUNTID" baseTableName="LEAD" constraintName="DER1N_LEAD__ACCOUNT__PARENTACC" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ACCOUNTID" referencedTableName="ACCOUNT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-103-310">
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-106-310">
<addForeignKeyConstraint baseColumnNames="RELATEDOBJECTID" baseTableName="LEAD" constraintName="DER1N_LEAD__CAMPAIGNRESPONSE__" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ACTIVITYID" referencedTableName="CAMPAIGNRESPONSE" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-103-311">
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-106-311">
<addForeignKeyConstraint baseColumnNames="CAMPAIGNID" baseTableName="LEAD" constraintName="DER1N_LEAD__CAMPAIGN__CAMPAIGN" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="CAMPAIGNID" referencedTableName="CAMPAIGN" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-103-312">
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-106-312">
<addForeignKeyConstraint baseColumnNames="PARENTCONTACTID" baseTableName="LEAD" constraintName="DER1N_LEAD__CONTACT__PARENTCON" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="CONTACTID" referencedTableName="CONTACT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-103-313">
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-106-313">
<addForeignKeyConstraint baseColumnNames="ORIGINATINGCASEID" baseTableName="LEAD" constraintName="DER1N_LEAD__INCIDENT__ORIGINAT" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="INCIDENTID" referencedTableName="INCIDENT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-103-314">
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-106-314">
<addForeignKeyConstraint baseColumnNames="QUALIFYINGOPPORTUNITYID" baseTableName="LEAD" constraintName="DER1N_LEAD__OPPORTUNITY__QUALI" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="OPPORTUNITYID" referencedTableName="OPPORTUNITY" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-103-315">
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-106-315">
<addForeignKeyConstraint baseColumnNames="SLAID" baseTableName="LEAD" constraintName="DER1N_LEAD__SLA__SLAID" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="SLAID" referencedTableName="SLA" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-103-316">
<changeSet author="a_LAB01_e85d8801c" id="fk-lead-106-316">
<addForeignKeyConstraint baseColumnNames="TRANSACTIONCURRENCYID" baseTableName="LEAD" constraintName="DER1N_LEAD__TRANSACTIONCURRENC" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="TRANSACTIONCURRENCYID" referencedTableName="TRANSACTIONCURRENCY" validate="true"/>
</changeSet>
<!--输出实体[TERRITORY]外键关系 -->
......@@ -11621,25 +11621,25 @@
<!--输出实体[RELATIONSHIPS]外键关系 -->
<!--输出实体[CONNECTIONROLE]外键关系 -->
<!--输出实体[OPPORTUNITY]外键关系 -->
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-70-406">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-81-406">
<addForeignKeyConstraint baseColumnNames="PARENTACCOUNTID" baseTableName="OPPORTUNITY" constraintName="DER1N_OPPORTUNITY__ACCOUNT__PA" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ACCOUNTID" referencedTableName="ACCOUNT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-70-407">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-81-407">
<addForeignKeyConstraint baseColumnNames="CAMPAIGNID" baseTableName="OPPORTUNITY" constraintName="DER1N_OPPORTUNITY__CAMPAIGN__C" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="CAMPAIGNID" referencedTableName="CAMPAIGN" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-70-408">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-81-408">
<addForeignKeyConstraint baseColumnNames="PARENTCONTACTID" baseTableName="OPPORTUNITY" constraintName="DER1N_OPPORTUNITY__CONTACT__PA" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="CONTACTID" referencedTableName="CONTACT" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-70-409">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-81-409">
<addForeignKeyConstraint baseColumnNames="ORIGINATINGLEADID" baseTableName="OPPORTUNITY" constraintName="DER1N_OPPORTUNITY__LEAD__ORIGI" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="LEADID" referencedTableName="LEAD" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-70-410">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-81-410">
<addForeignKeyConstraint baseColumnNames="PRICELEVELID" baseTableName="OPPORTUNITY" constraintName="DER1N_OPPORTUNITY__PRICELEVEL_" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="PRICELEVELID" referencedTableName="PRICELEVEL" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-70-411">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-81-411">
<addForeignKeyConstraint baseColumnNames="SLAID" baseTableName="OPPORTUNITY" constraintName="DER1N_OPPORTUNITY__SLA__SLAID" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="SLAID" referencedTableName="SLA" validate="true"/>
</changeSet>
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-70-412">
<changeSet author="a_LAB01_e85d8801c" id="fk-opportunity-81-412">
<addForeignKeyConstraint baseColumnNames="TRANSACTIONCURRENCYID" baseTableName="OPPORTUNITY" constraintName="DER1N_OPPORTUNITY__TRANSACTION" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="TRANSACTIONCURRENCYID" referencedTableName="TRANSACTIONCURRENCY" validate="true"/>
</changeSet>
<!--输出实体[OPPORTUNITYCOMPETITOR]外键关系 -->
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册