Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
I
iBiz企业中心
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
iBiz企业套件
iBiz企业中心
提交
10870d68
提交
10870d68
编写于
6月 22, 2020
作者:
ibizdev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lab_gzf 发布系统代码
上级
6d526df9
变更
51
隐藏空白字符变更
内嵌
并排
正在显示
51 个修改的文件
包含
3766 行增加
和
168 行删除
+3766
-168
view-config.json
app_CRM/public/assets/json/view-config.json
+30
-0
contact_en_US.ts
app_CRM/src/locale/lanres/entities/contact/contact_en_US.ts
+5
-0
contact_zh_CN.ts
app_CRM/src/locale/lanres/entities/contact/contact_zh_CN.ts
+5
-0
lead_en_US.ts
app_CRM/src/locale/lanres/entities/lead/lead_en_US.ts
+47
-1
lead_zh_CN.ts
app_CRM/src/locale/lanres/entities/lead/lead_zh_CN.ts
+47
-1
opportunity_en_US.ts
...c/locale/lanres/entities/opportunity/opportunity_en_US.ts
+53
-3
opportunity_zh_CN.ts
...c/locale/lanres/entities/opportunity/opportunity_zh_CN.ts
+53
-3
viewconfig.ts
app_CRM/src/mock/viewconfig/viewconfig.ts
+24
-0
lead-con-lead-grid-view-base.vue
.../lead-con-lead-grid-view/lead-con-lead-grid-view-base.vue
+745
-0
lead-con-lead-grid-view.less
...ales/lead-con-lead-grid-view/lead-con-lead-grid-view.less
+8
-0
lead-con-lead-grid-view.vue
...sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue
+21
-0
opportunity-info-product-base.vue
...pportunity-info-product/opportunity-info-product-base.vue
+0
-3
opportunity-info-base.vue
...rc/pages/sales/opportunity-info/opportunity-info-base.vue
+0
-3
opportunity-list-exp-view-base.vue
...ortunity-list-exp-view/opportunity-list-exp-view-base.vue
+207
-0
opportunity-list-exp-view.less
.../opportunity-list-exp-view/opportunity-list-exp-view.less
+6
-0
opportunity-list-exp-view.vue
...s/opportunity-list-exp-view/opportunity-list-exp-view.vue
+19
-0
opportunity-product-opp-opp-pro-grid-view-base.vue
...d-view/opportunity-product-opp-opp-pro-grid-view-base.vue
+0
-3
page-register.ts
app_CRM/src/pages/ungroup/central/page-register.ts
+6
-4
router.ts
app_CRM/src/pages/ungroup/central/router.ts
+251
-90
state.ts
app_CRM/src/store/modules/view-action/state.ts
+25
-14
lead-ui-service-base.ts
app_CRM/src/uiservice/lead/lead-ui-service-base.ts
+1
-0
opportunity-ui-service-base.ts
.../src/uiservice/opportunity/opportunity-ui-service-base.ts
+2
-0
central-appmenu-base.vue
.../src/widgets/app/central-appmenu/central-appmenu-base.vue
+1
-1
central-appmenu-model.ts
.../src/widgets/app/central-appmenu/central-appmenu-model.ts
+4
-4
abstract-edit-form-base.vue
...ts/contact/abstract-edit-form/abstract-edit-form-base.vue
+71
-0
abstract-edit-form-model.ts
...ts/contact/abstract-edit-form/abstract-edit-form-model.ts
+10
-0
abstract-edit-form-service.ts
.../contact/abstract-edit-form/abstract-edit-form-service.ts
+12
-0
abstract-info-form-base.vue
...ts/contact/abstract-info-form/abstract-info-form-base.vue
+29
-0
abstract-info-form-model.ts
...ts/contact/abstract-info-form/abstract-info-form-model.ts
+5
-0
infotabviewpanel2-tabviewpanel-base.vue
...nel2-tabviewpanel/infotabviewpanel2-tabviewpanel-base.vue
+2
-2
infotabviewpanel3-tabviewpanel-base.vue
...nel3-tabviewpanel/infotabviewpanel3-tabviewpanel-base.vue
+2
-2
quick-create-form-base.vue
...gets/contact/quick-create-form/quick-create-form-base.vue
+71
-0
quick-create-form-model.ts
...gets/contact/quick-create-form/quick-create-form-model.ts
+10
-0
quick-create-form-service.ts
...ts/contact/quick-create-form/quick-create-form-service.ts
+12
-0
list-exp-viewlistexpbar-listexpbar-base.vue
...ar-listexpbar/list-exp-viewlistexpbar-listexpbar-base.vue
+504
-0
list-exp-viewlistexpbar-listexpbar-model.ts
...ar-listexpbar/list-exp-viewlistexpbar-listexpbar-model.ts
+21
-0
list-exp-viewlistexpbar-listexpbar-service.ts
...-listexpbar/list-exp-viewlistexpbar-listexpbar-service.ts
+44
-0
list-exp-viewlistexpbar-listexpbar.less
...expbar-listexpbar/list-exp-viewlistexpbar-listexpbar.less
+4
-0
list-exp-viewlistexpbar-listexpbar.vue
...texpbar-listexpbar/list-exp-viewlistexpbar-listexpbar.vue
+16
-0
list-list-base.vue
app_CRM/src/widgets/opportunity/list-list/list-list-base.vue
+599
-0
list-list-model.ts
app_CRM/src/widgets/opportunity/list-list/list-list-model.ts
+51
-0
list-list-service.ts
...RM/src/widgets/opportunity/list-list/list-list-service.ts
+104
-0
list-list.less
app_CRM/src/widgets/opportunity/list-list/list-list.less
+4
-0
list-list.vue
app_CRM/src/widgets/opportunity/list-list/list-list.vue
+16
-0
panel-panel-base.vue
.../src/widgets/opportunity/panel-panel/panel-panel-base.vue
+514
-0
panel-panel-model.ts
.../src/widgets/opportunity/panel-panel/panel-panel-model.ts
+31
-0
panel-panel-service.ts
...rc/widgets/opportunity/panel-panel/panel-panel-service.ts
+11
-0
panel-panel.less
app_CRM/src/widgets/opportunity/panel-panel/panel-panel.less
+15
-0
panel-panel.vue
app_CRM/src/widgets/opportunity/panel-panel/panel-panel.vue
+14
-0
product-info-form-base.vue
.../opportunity/product-info-form/product-info-form-base.vue
+4
-4
h2_table.xml
...esscentral-core/src/main/resources/liquibase/h2_table.xml
+30
-30
未找到文件。
app_CRM/public/assets/json/view-config.json
浏览文件 @
10870d68
...
...
@@ -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"
:
"市场营销列表概览"
,
...
...
app_CRM/src/locale/lanres/entities/contact/contact_en_US.ts
浏览文件 @
10870d68
...
...
@@ -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
:
"移动电话"
,
...
...
app_CRM/src/locale/lanres/entities/contact/contact_zh_CN.ts
浏览文件 @
10870d68
...
...
@@ -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
:
'移动电话'
,
...
...
app_CRM/src/locale/lanres/entities/lead/lead_en_US.ts
浏览文件 @
10870d68
...
...
@@ -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
:
{
conlead
gridviewtoolbar_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"
,
...
...
app_CRM/src/locale/lanres/entities/lead/lead_zh_CN.ts
浏览文件 @
10870d68
...
...
@@ -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
:
{
conlead
gridviewtoolbar_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
:
'保存'
,
...
...
app_CRM/src/locale/lanres/entities/opportunity/opportunity_en_US.ts
浏览文件 @
10870d68
...
...
@@ -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
:
{
conopp
gridviewtoolbar_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"
,
...
...
app_CRM/src/locale/lanres/entities/opportunity/opportunity_zh_CN.ts
浏览文件 @
10870d68
...
...
@@ -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
:
{
conopp
gridviewtoolbar_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
:
'保存'
,
...
...
app_CRM/src/mock/viewconfig/viewconfig.ts
浏览文件 @
10870d68
...
...
@@ -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"
:
"市场营销列表概览"
,
...
...
app_CRM/src/pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view-base.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.less
0 → 100644
浏览文件 @
10870d68
// 避免空文件,后台不让空文件过
.lead-con-lead-grid-view {
--lead-con-lead-grid-view: 0;
}
// 视图样式
// this is less
app_CRM/src/pages/sales/lead-con-lead-grid-view/lead-con-lead-grid-view.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/pages/sales/opportunity-info-product/opportunity-info-product-base.vue
浏览文件 @
10870d68
<
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"
...
...
app_CRM/src/pages/sales/opportunity-info/opportunity-info-base.vue
浏览文件 @
10870d68
<
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
...
...
app_CRM/src/pages/sales/opportunity-list-exp-view/opportunity-list-exp-view-base.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.less
0 → 100644
浏览文件 @
10870d68
// 避免空文件,后台不让空文件过
.opportunity-list-exp-view {
--opportunity-list-exp-view: 0;
}
app_CRM/src/pages/sales/opportunity-list-exp-view/opportunity-list-exp-view.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/pages/sales/opportunity-product-opp-opp-pro-grid-view/opportunity-product-opp-opp-pro-grid-view-base.vue
浏览文件 @
10870d68
<
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
>
...
...
app_CRM/src/pages/ungroup/central/page-register.ts
浏览文件 @
10870d68
...
...
@@ -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'
));
...
...
app_CRM/src/pages/ungroup/central/router.ts
浏览文件 @
10870d68
...
...
@@ -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/:conlead
gridview?'
,
meta
:
{
caption
:
'entities.
opportunity.views.
gridview.title'
,
caption
:
'entities.
lead.views.conlead
gridview.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
:
'conlead
gridview'
},
],
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/:conlead
gridview?'
,
meta
:
{
caption
:
'entities.
opportunity.views.
gridview.title'
,
caption
:
'entities.
lead.views.conlead
gridview.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
:
'conlead
gridview'
},
],
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/:conlead
gridview?'
,
meta
:
{
caption
:
'entities.
opportunity.views.
gridview.title'
,
caption
:
'entities.
lead.views.conlead
gridview.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
:
'le
tters/:letter?/editview/:edit
view?'
,
path
:
'le
ads/:lead?/conleadgridview/:conleadgrid
view?'
,
meta
:
{
caption
:
'entities.le
tter.views.edit
view.title'
,
caption
:
'entities.le
ad.views.conleadgrid
view.title'
,
info
:
''
,
parameters
:
[
{
pathName
:
'central'
,
parameterName
:
'central'
},
{
pathName
:
'le
tters'
,
parameterName
:
'letter
'
},
{
pathName
:
'
editview'
,
parameterName
:
'edit
view'
},
{
pathName
:
'le
ads'
,
parameterName
:
'lead
'
},
{
pathName
:
'
conleadgridview'
,
parameterName
:
'conleadgrid
view'
},
],
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
:
{
...
...
app_CRM/src/store/modules/view-action/state.ts
浏览文件 @
10870d68
...
...
@@ -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'
,
],
},
...
...
app_CRM/src/uiservice/lead/lead-ui-service-base.ts
浏览文件 @
10870d68
...
...
@@ -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'
});
...
...
app_CRM/src/uiservice/opportunity/opportunity-ui-service-base.ts
浏览文件 @
10870d68
...
...
@@ -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'
});
}
...
...
app_CRM/src/widgets/app/central-appmenu/central-appmenu-base.vue
浏览文件 @
10870d68
...
...
@@ -265,7 +265,7 @@ export default class CentralBase extends Vue {
const
deResParameters
:
any
[]
=
[];
const
parameters
:
any
[]
=
[
{
pathName
:
'opportunities'
,
parameterName
:
'opportunity'
},
{
pathName
:
'
gridview'
,
parameterName
:
'grid
view'
},
{
pathName
:
'
listexpview'
,
parameterName
:
'listexp
view'
},
];
const
path
:
string
=
this
.
$viewTool
.
buildUpRoutePath
(
this
.
$route
,
{},
deResParameters
,
parameters
,
[],
viewparam
);
this
.
$router
.
push
(
path
);
...
...
app_CRM/src/widgets/app/central-appmenu/central-appmenu-model.ts
浏览文件 @
10870d68
...
...
@@ -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
:
'opportunity
grid
view'
,
codename
:
'opportunity
listexp
view'
,
deResParameters
:
[],
routepath
:
'/central/:central?/opportunities/:opportunity?/
gridview/:grid
view?'
,
routepath
:
'/central/:central?/opportunities/:opportunity?/
listexpview/:listexp
view?'
,
parameters
:
[
{
pathName
:
'opportunities'
,
parameterName
:
'opportunity'
},
{
pathName
:
'
gridview'
,
parameterName
:
'grid
view'
},
{
pathName
:
'
listexpview'
,
parameterName
:
'listexp
view'
},
],
},
{
...
...
app_CRM/src/widgets/contact/abstract-edit-form/abstract-edit-form-base.vue
浏览文件 @
10870d68
...
...
@@ -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 {
}
/**
...
...
app_CRM/src/widgets/contact/abstract-edit-form/abstract-edit-form-model.ts
浏览文件 @
10870d68
...
...
@@ -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'
,
...
...
app_CRM/src/widgets/contact/abstract-edit-form/abstract-edit-form-service.ts
浏览文件 @
10870d68
...
...
@@ -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
([])
}
...
...
app_CRM/src/widgets/contact/abstract-info-form/abstract-info-form-base.vue
浏览文件 @
10870d68
...
...
@@ -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 {
}
/**
...
...
app_CRM/src/widgets/contact/abstract-info-form/abstract-info-form-model.ts
浏览文件 @
10870d68
...
...
@@ -65,6 +65,11 @@ export default class AbstractInfoModel {
prop
:
'jobtitle'
,
dataType
:
'TEXT'
,
},
{
name
:
'customername'
,
prop
:
'cusomername'
,
dataType
:
'PICKUPTEXT'
,
},
{
name
:
'emailaddress1'
,
prop
:
'emailaddress1'
,
...
...
app_CRM/src/widgets/contact/infotabviewpanel2-tabviewpanel/infotabviewpanel2-tabviewpanel-base.vue
浏览文件 @
10870d68
<
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'
>
...
...
app_CRM/src/widgets/contact/infotabviewpanel3-tabviewpanel/infotabviewpanel3-tabviewpanel-base.vue
浏览文件 @
10870d68
<
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'
>
...
...
app_CRM/src/widgets/contact/quick-create-form/quick-create-form-base.vue
浏览文件 @
10870d68
...
...
@@ -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 {
...
...
app_CRM/src/widgets/contact/quick-create-form/quick-create-form-model.ts
浏览文件 @
10870d68
...
...
@@ -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'
,
...
...
app_CRM/src/widgets/contact/quick-create-form/quick-create-form-service.ts
浏览文件 @
10870d68
...
...
@@ -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
([])
}
...
...
app_CRM/src/widgets/opportunity/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar-base.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/widgets/opportunity/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar-model.ts
0 → 100644
浏览文件 @
10870d68
/**
* ListExpViewlistexpbar 部件模型
*
* @export
* @class ListExpViewlistexpbarModel
*/
export
default
class
ListExpViewlistexpbarModel
{
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ListExpViewlistexpbarListexpbarMode
*/
public
getDataItems
():
any
[]
{
return
[
]
}
}
\ No newline at end of file
app_CRM/src/widgets/opportunity/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar-service.ts
0 → 100644
浏览文件 @
10870d68
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
app_CRM/src/widgets/opportunity/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar.less
0 → 100644
浏览文件 @
10870d68
.app-list-exp-bar {
--app-list-exp-bar: 0px;
}
// this is less
app_CRM/src/widgets/opportunity/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/widgets/opportunity/list-list/list-list-base.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/widgets/opportunity/list-list/list-list-model.ts
0 → 100644
浏览文件 @
10870d68
/**
* 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
app_CRM/src/widgets/opportunity/list-list/list-list-service.ts
0 → 100644
浏览文件 @
10870d68
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_CRM/src/widgets/opportunity/list-list/list-list.less
0 → 100644
浏览文件 @
10870d68
.app-list {
--app-list: 0;
}
// this is less
app_CRM/src/widgets/opportunity/list-list/list-list.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/widgets/opportunity/panel-panel/panel-panel-base.vue
0 → 100644
浏览文件 @
10870d68
<
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
>
app_CRM/src/widgets/opportunity/panel-panel/panel-panel-model.ts
0 → 100644
浏览文件 @
10870d68
/**
* 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
app_CRM/src/widgets/opportunity/panel-panel/panel-panel-service.ts
0 → 100644
浏览文件 @
10870d68
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
app_CRM/src/widgets/opportunity/panel-panel/panel-panel.less
0 → 100644
浏览文件 @
10870d68
// 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
app_CRM/src/widgets/opportunity/panel-panel/panel-panel.vue
0 → 100644
浏览文件 @
10870d68
<
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
app_CRM/src/widgets/opportunity/product-info-form/product-info-form-base.vue
浏览文件 @
10870d68
...
...
@@ -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=
"
fals
e"
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=
"
tru
e"
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=
"
fals
e"
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=
"
tru
e"
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
:
fals
e
,
form
:
this
,
uiActionGroup
:
{
caption
:
''
,
langbase
:
'entities.opportunity.productinfo_form'
,
extractMode
:
'ITEM'
,
details
:
[]
}
})
group1
:
new
FormGroupPanelModel
({
caption
:
'
价目表信息'
,
detailType
:
'GROUPPANEL'
,
name
:
'group1'
,
visible
:
true
,
isShowCaption
:
tru
e
,
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
:
fals
e
,
form
:
this
,
uiActionGroup
:
{
caption
:
''
,
langbase
:
'entities.opportunity.productinfo_form'
,
extractMode
:
'ITEM'
,
details
:
[]
}
})
grouppanel1
:
new
FormGroupPanelModel
({
caption
:
'
产品明细信息'
,
detailType
:
'GROUPPANEL'
,
name
:
'grouppanel1'
,
visible
:
true
,
isShowCaption
:
tru
e
,
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
})
,
...
...
businesscentral-core/src/main/resources/liquibase/h2_table.xml
浏览文件 @
10870d68
...
...
@@ -3182,7 +3182,7 @@
<!--输出实体[CONTACT]数据结构 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-contact-23
3
-43"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-contact-23
8
-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-10
3
-74"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-lead-10
6
-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-23
3
-214"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-23
8
-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-23
3
-215"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-23
8
-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-23
3
-216"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-23
8
-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-23
3
-217"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-23
8
-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-23
3
-218"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-23
8
-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-23
3
-219"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-23
8
-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-23
3
-220"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-23
8
-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-10
3
-309"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-lead-10
6
-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-10
3
-310"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-lead-10
6
-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-10
3
-311"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-lead-10
6
-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-10
3
-312"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-lead-10
6
-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-10
3
-313"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-lead-10
6
-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-10
3
-314"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-lead-10
6
-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-10
3
-315"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-lead-10
6
-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-10
3
-316"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-lead-10
6
-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
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录