Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
I
iBiz企业中心
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
iBiz企业套件
iBiz企业中心
提交
dc3f8f8e
提交
dc3f8f8e
编写于
6月 29, 2020
作者:
ibizdev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lab_gzf 发布系统代码
上级
4a96b2a1
变更
68
隐藏空白字符变更
内嵌
并排
正在显示
68 个修改的文件
包含
2769 行增加
和
389 行删除
+2769
-389
data-dictionary.json
app_CRM/public/assets/json/data-dictionary.json
+117
-47
view-config.json
app_CRM/public/assets/json/view-config.json
+34
-4
subject.ts
app_CRM/src/interface/entity/subject.ts
+112
-0
en-US.ts
app_CRM/src/locale/lang/en-US.ts
+2
-0
zh-CN.ts
app_CRM/src/locale/lang/zh-CN.ts
+2
-0
codelist_en_US.ts
app_CRM/src/locale/lanres/codelist/codelist_en_US.ts
+14
-7
codelist_zh_CN.ts
app_CRM/src/locale/lanres/codelist/codelist_zh_CN.ts
+14
-7
competitor_en_US.ts
...src/locale/lanres/entities/competitor/competitor_en_US.ts
+1
-1
competitor_zh_CN.ts
...src/locale/lanres/entities/competitor/competitor_zh_CN.ts
+1
-1
contact_en_US.ts
app_CRM/src/locale/lanres/entities/contact/contact_en_US.ts
+1
-1
contact_zh_CN.ts
app_CRM/src/locale/lanres/entities/contact/contact_zh_CN.ts
+1
-1
invoice_en_US.ts
app_CRM/src/locale/lanres/entities/invoice/invoice_en_US.ts
+7
-3
invoice_zh_CN.ts
app_CRM/src/locale/lanres/entities/invoice/invoice_zh_CN.ts
+5
-1
product_en_US.ts
app_CRM/src/locale/lanres/entities/product/product_en_US.ts
+5
-5
product_zh_CN.ts
app_CRM/src/locale/lanres/entities/product/product_zh_CN.ts
+5
-5
quote_en_US.ts
app_CRM/src/locale/lanres/entities/quote/quote_en_US.ts
+1
-1
quote_zh_CN.ts
app_CRM/src/locale/lanres/entities/quote/quote_zh_CN.ts
+1
-1
sales-literature_en_US.ts
...anres/entities/sales-literature/sales-literature_en_US.ts
+27
-2
sales-literature_zh_CN.ts
...anres/entities/sales-literature/sales-literature_zh_CN.ts
+27
-2
subject_en_US.ts
app_CRM/src/locale/lanres/entities/subject/subject_en_US.ts
+44
-0
subject_zh_CN.ts
app_CRM/src/locale/lanres/entities/subject/subject_zh_CN.ts
+43
-0
codelist.ts
app_CRM/src/mock/codelist/codelist.ts
+117
-47
subjects.ts
app_CRM/src/mock/entity/subjects/subjects.ts
+380
-0
index.ts
app_CRM/src/mock/index.ts
+1
-0
viewconfig.ts
app_CRM/src/mock/viewconfig/viewconfig.ts
+28
-4
contact-grid-view-base.tsx
...c/pages/base/contact-grid-view/contact-grid-view-base.tsx
+1
-1
contact-grid-view.html
...M/src/pages/base/contact-grid-view/contact-grid-view.html
+1
-1
contact-grid-view.vue
...RM/src/pages/base/contact-grid-view/contact-grid-view.vue
+1
-1
invoice-grid-view-base.tsx
...ages/finance/invoice-grid-view/invoice-grid-view-base.tsx
+8
-123
product-edit-quick-create-base.tsx
...duct-edit-quick-create/product-edit-quick-create-base.tsx
+1
-1
product-edit-quick-create.html
.../product-edit-quick-create/product-edit-quick-create.html
+1
-1
product-edit-quick-create.vue
...t/product-edit-quick-create/product-edit-quick-create.vue
+2
-2
product-grid-view-base.tsx
...ages/product/product-grid-view/product-grid-view-base.tsx
+20
-8
competitor-grid-view-base.tsx
.../sales/competitor-grid-view/competitor-grid-view-base.tsx
+1
-1
competitor-grid-view.html
...ages/sales/competitor-grid-view/competitor-grid-view.html
+1
-1
competitor-grid-view.vue
...pages/sales/competitor-grid-view/competitor-grid-view.vue
+1
-1
quote-grid-view-base.tsx
.../src/pages/sales/quote-grid-view/quote-grid-view-base.tsx
+1
-1
quote-grid-view.html
app_CRM/src/pages/sales/quote-grid-view/quote-grid-view.html
+1
-1
quote-grid-view.vue
app_CRM/src/pages/sales/quote-grid-view/quote-grid-view.vue
+1
-1
page-register.ts
app_CRM/src/pages/ungroup/central/page-register.ts
+1
-0
router.ts
app_CRM/src/pages/ungroup/central/router.ts
+14
-0
entity-service-register.ts
app_CRM/src/service/entity-service-register.ts
+1
-0
subject-service-base.ts
app_CRM/src/service/subject/subject-service-base.ts
+177
-0
subject-service.ts
app_CRM/src/service/subject/subject-service.ts
+25
-0
state.ts
app_CRM/src/store/modules/view-action/state.ts
+1
-0
invoice-ui-service-base.ts
app_CRM/src/uiservice/invoice/invoice-ui-service-base.ts
+60
-0
product-ui-service-base.ts
app_CRM/src/uiservice/product/product-ui-service-base.ts
+22
-7
sales-literature-ui-service-base.ts
...vice/sales-literature/sales-literature-ui-service-base.ts
+1
-0
subject-ui-service-base.ts
app_CRM/src/uiservice/subject/subject-ui-service-base.ts
+212
-0
subject-ui-service.ts
app_CRM/src/uiservice/subject/subject-ui-service.ts
+21
-0
ui-service-register.ts
app_CRM/src/uiservice/ui-service-register.ts
+1
-0
main-grid-base.tsx
app_CRM/src/widgets/product/main-grid/main-grid-base.tsx
+12
-4
main-grid-model.ts
app_CRM/src/widgets/product/main-grid/main-grid-model.ts
+32
-27
main-grid.html
app_CRM/src/widgets/product/main-grid/main-grid.html
+16
-6
quick-create-form-base.tsx
...gets/product/quick-create-form/quick-create-form-base.tsx
+165
-0
quick-create-form-model.ts
...gets/product/quick-create-form/quick-create-form-model.ts
+91
-0
quick-create-form-service.ts
...ts/product/quick-create-form/quick-create-form-service.ts
+371
-0
quick-create-form.html
.../widgets/product/quick-create-form/quick-create-form.html
+40
-0
quick-create-form.vue
...c/widgets/product/quick-create-form/quick-create-form.vue
+22
-0
main-grid-base.tsx
...src/widgets/sales-literature/main-grid/main-grid-base.tsx
+8
-8
main-grid-model.ts
...src/widgets/sales-literature/main-grid/main-grid-model.ts
+8
-8
main-grid.html
...CRM/src/widgets/sales-literature/main-grid/main-grid.html
+11
-11
application-crm-prod.yml
...ntral-app-crm/src/main/resources/application-crm-prod.yml
+4
-0
h2_table.xml
...esscentral-core/src/main/resources/liquibase/h2_table.xml
+34
-34
systemResource.json
...al-core/src/main/resources/permission/systemResource.json
+8
-0
SubjectDTO.java
...cn/ibizlab/businesscentral/centralapi/dto/SubjectDTO.java
+200
-0
SubjectMapping.java
...ab/businesscentral/centralapi/mapping/SubjectMapping.java
+16
-0
SubjectResource.java
...zlab/businesscentral/centralapi/rest/SubjectResource.java
+164
-0
未找到文件。
app_CRM/public/assets/json/data-dictionary.json
浏览文件 @
dc3f8f8e
...
...
@@ -1736,6 +1736,123 @@
}
]
},
{
"srfkey"
:
"Salesliterature__LiteratureTypeCode"
,
"emptytext"
:
"未定义"
,
"codelisttype"
:
"static"
,
"items"
:
[
{
"id"
:
"1"
,
"label"
:
"产品表单"
,
"text"
:
"产品表单"
,
"data"
:
""
,
"codename"
:
"Item_1"
,
"value"
:
"1"
,
"disabled"
:
false
}
,
{
"id"
:
"7"
,
"label"
:
"价格表单"
,
"text"
:
"价格表单"
,
"data"
:
""
,
"codename"
:
"Item_7"
,
"value"
:
"7"
,
"disabled"
:
false
}
,
{
"id"
:
"9"
,
"label"
:
"公司背景"
,
"text"
:
"公司背景"
,
"data"
:
""
,
"codename"
:
"Item_9"
,
"value"
:
"9"
,
"disabled"
:
false
}
,
{
"id"
:
"6"
,
"label"
:
"公告"
,
"text"
:
"公告"
,
"data"
:
""
,
"codename"
:
"Item_6"
,
"value"
:
"6"
,
"disabled"
:
false
}
,
{
"id"
:
"100001"
,
"label"
:
"市场营销宣传材料"
,
"text"
:
"市场营销宣传材料"
,
"data"
:
""
,
"codename"
:
"Item_100001"
,
"value"
:
"100001"
,
"disabled"
:
false
}
,
{
"id"
:
"8"
,
"label"
:
"手册"
,
"text"
:
"手册"
,
"data"
:
""
,
"codename"
:
"Item_8"
,
"value"
:
"8"
,
"disabled"
:
false
}
,
{
"id"
:
"5"
,
"label"
:
"新闻"
,
"text"
:
"新闻"
,
"data"
:
""
,
"codename"
:
"Item_5"
,
"value"
:
"5"
,
"disabled"
:
false
}
,
{
"id"
:
"0"
,
"label"
:
"演示文稿"
,
"text"
:
"演示文稿"
,
"data"
:
""
,
"codename"
:
"Item_0"
,
"value"
:
"0"
,
"disabled"
:
false
}
,
{
"id"
:
"4"
,
"label"
:
"电子表格"
,
"text"
:
"电子表格"
,
"data"
:
""
,
"codename"
:
"Item_4"
,
"value"
:
"4"
,
"disabled"
:
false
}
,
{
"id"
:
"2"
,
"label"
:
"策略和步骤"
,
"text"
:
"策略和步骤"
,
"data"
:
""
,
"codename"
:
"Item_2"
,
"value"
:
"2"
,
"disabled"
:
false
}
,
{
"id"
:
"3"
,
"label"
:
"销售宣传资料"
,
"text"
:
"销售宣传资料"
,
"data"
:
""
,
"codename"
:
"Item_3"
,
"value"
:
"3"
,
"disabled"
:
false
}
]
},
{
"srfkey"
:
"SysOperator"
,
"emptytext"
:
"未定义"
,
...
...
@@ -2473,53 +2590,6 @@
}
]
},
{
"srfkey"
:
"Product__ProductTypeCode"
,
"emptytext"
:
"未定义"
,
"codelisttype"
:
"static"
,
"items"
:
[
{
"id"
:
"4"
,
"label"
:
"固定费用"
,
"text"
:
"固定费用"
,
"data"
:
""
,
"codename"
:
"Item_4"
,
"value"
:
"4"
,
"disabled"
:
false
}
,
{
"id"
:
"3"
,
"label"
:
"服务"
,
"text"
:
"服务"
,
"data"
:
""
,
"codename"
:
"Item_3"
,
"value"
:
"3"
,
"disabled"
:
false
}
,
{
"id"
:
"2"
,
"label"
:
"杂项费用"
,
"text"
:
"杂项费用"
,
"data"
:
""
,
"codename"
:
"Item_2"
,
"value"
:
"2"
,
"disabled"
:
false
}
,
{
"id"
:
"1"
,
"label"
:
"销售存货"
,
"text"
:
"销售存货"
,
"data"
:
""
,
"codename"
:
"Item_1"
,
"value"
:
"1"
,
"disabled"
:
false
}
]
},
{
"srfkey"
:
"Contact__GenderCode"
,
"emptytext"
:
"未定义"
,
...
...
app_CRM/public/assets/json/view-config.json
浏览文件 @
dc3f8f8e
...
...
@@ -30,7 +30,7 @@
"memo"
:
"系统自动添加"
},
"contactgridview"
:
{
"title"
:
"联系人
表格视图
"
,
"title"
:
"联系人
信息
"
,
"caption"
:
"联系人信息"
,
"viewtype"
:
"DEGRIDVIEW"
,
"viewmodule"
:
"Base"
,
...
...
@@ -140,7 +140,7 @@
"memo"
:
"系统自动添加"
},
"quotegridview"
:
{
"title"
:
"报价单
表格视图
"
,
"title"
:
"报价单
信息
"
,
"caption"
:
"报价单"
,
"viewtype"
:
"DEGRIDVIEW"
,
"viewmodule"
:
"Sales"
,
...
...
@@ -189,6 +189,16 @@
"viewtag"
:
"177c00d1674621e8933efe6db68bce0e"
,
"memo"
:
""
},
"subjectpickupgridview"
:
{
"title"
:
"主题选择表格视图"
,
"caption"
:
"主题"
,
"viewtype"
:
"DEPICKUPGRIDVIEW"
,
"viewmodule"
:
"Base"
,
"viewname"
:
"SubjectPickupGridView"
,
"viewfilename"
:
"subject-pickup-grid-view"
,
"viewtag"
:
"19e1193c4075ae18f2f29095bb8841fa"
,
"memo"
:
"系统自动添加"
},
"leadpickupview"
:
{
"title"
:
"潜在顾客数据选择视图"
,
"caption"
:
"潜在顾客"
,
...
...
@@ -1280,7 +1290,7 @@
"memo"
:
"系统自动添加"
},
"productedit_quickcreate"
:
{
"title"
:
"
产品选项操作视图
"
,
"title"
:
"
快速新建
"
,
"caption"
:
"产品"
,
"viewtype"
:
"DEOPTVIEW"
,
"viewmodule"
:
"Product"
,
...
...
@@ -1450,7 +1460,7 @@
"memo"
:
"系统自动添加"
},
"competitorgridview"
:
{
"title"
:
"竞争对手
表格视图
"
,
"title"
:
"竞争对手
信息
"
,
"caption"
:
"竞争对手"
,
"viewtype"
:
"DEGRIDVIEW"
,
"viewmodule"
:
"Sales"
,
...
...
@@ -1559,6 +1569,26 @@
"viewtag"
:
"e4335da0a7c14a65376eecaabb771fd7"
,
"memo"
:
""
},
"salesliteraturequickcreateview"
:
{
"title"
:
"快速新建"
,
"caption"
:
"销售宣传资料"
,
"viewtype"
:
"DEOPTVIEW"
,
"viewmodule"
:
"Sales"
,
"viewname"
:
"SalesLiteratureQuickCreateView"
,
"viewfilename"
:
"sales-literature-quick-create-view"
,
"viewtag"
:
"e45cd3d0a9959e1979243837b5dcfd2d"
,
"memo"
:
""
},
"subjectpickupview"
:
{
"title"
:
"主题数据选择视图"
,
"caption"
:
"主题"
,
"viewtype"
:
"DEPICKUPVIEW"
,
"viewmodule"
:
"Base"
,
"viewname"
:
"SubjectPickupView"
,
"viewfilename"
:
"subject-pickup-view"
,
"viewtag"
:
"e52af970c14fd89546ac8ccaecab460c"
,
"memo"
:
"系统自动添加"
},
"salesorderinfo_soview"
:
{
"title"
:
"订单编辑视图"
,
"caption"
:
"订单"
,
...
...
app_CRM/src/interface/entity/subject.ts
0 → 100644
浏览文件 @
dc3f8f8e
/**
* 主题
*
* @export
* @interface Subject
*/
export
interface
Subject
{
/**
* 创建记录的时间
*
* @returns {*}
* @memberof Subject
*/
overriddencreatedon
?:
any
;
/**
* 更新时间
*
* @returns {*}
* @memberof Subject
*/
updatedate
?:
any
;
/**
* 版本号
*
* @returns {*}
* @memberof Subject
*/
versionnumber
?:
any
;
/**
* 说明
*
* @returns {*}
* @memberof Subject
*/
description
?:
any
;
/**
* 导入序列号
*
* @returns {*}
* @memberof Subject
*/
importsequencenumber
?:
any
;
/**
* 更新人
*
* @returns {*}
* @memberof Subject
*/
updateman
?:
any
;
/**
* 建立时间
*
* @returns {*}
* @memberof Subject
*/
createdate
?:
any
;
/**
* 父主题的名称。
*
* @returns {*}
* @memberof Subject
*/
parentsubjectname
?:
any
;
/**
* 功能掩码
*
* @returns {*}
* @memberof Subject
*/
featuremask
?:
any
;
/**
* 建立人
*
* @returns {*}
* @memberof Subject
*/
createman
?:
any
;
/**
* 标题
*
* @returns {*}
* @memberof Subject
*/
title
?:
any
;
/**
* 主题
*
* @returns {*}
* @memberof Subject
*/
subjectid
?:
any
;
/**
* 父主题
*
* @returns {*}
* @memberof Subject
*/
parentsubject
?:
any
;
}
\ No newline at end of file
app_CRM/src/locale/lang/en-US.ts
浏览文件 @
dc3f8f8e
...
...
@@ -36,6 +36,7 @@ import competitor_en_US from '@locale/lanres/entities/competitor/competitor_en_U
import
account_en_US
from
'@locale/lanres/entities/account/account_en_US'
;
import
salesorder_en_US
from
'@locale/lanres/entities/sales-order/sales-order_en_US'
;
import
quotedetail_en_US
from
'@locale/lanres/entities/quote-detail/quote-detail_en_US'
;
import
subject_en_US
from
'@locale/lanres/entities/subject/subject_en_US'
;
import
components_en_US
from
'@locale/lanres/components/components_en_US'
;
import
codelist_en_US
from
'@locale/lanres/codelist/codelist_en_US'
;
import
userCustom_en_US
from
'@locale/lanres/userCustom/userCustom_en_US'
;
...
...
@@ -179,6 +180,7 @@ export default {
account
:
account_en_US
,
salesorder
:
salesorder_en_US
,
quotedetail
:
quotedetail_en_US
,
subject
:
subject_en_US
,
},
components
:
components_en_US
,
codelist
:
codelist_en_US
,
...
...
app_CRM/src/locale/lang/zh-CN.ts
浏览文件 @
dc3f8f8e
...
...
@@ -36,6 +36,7 @@ import competitor_zh_CN from '@locale/lanres/entities/competitor/competitor_zh_C
import
account_zh_CN
from
'@locale/lanres/entities/account/account_zh_CN'
;
import
salesorder_zh_CN
from
'@locale/lanres/entities/sales-order/sales-order_zh_CN'
;
import
quotedetail_zh_CN
from
'@locale/lanres/entities/quote-detail/quote-detail_zh_CN'
;
import
subject_zh_CN
from
'@locale/lanres/entities/subject/subject_zh_CN'
;
import
components_zh_CN
from
'@locale/lanres/components/components_zh_CN'
;
import
codelist_zh_CN
from
'@locale/lanres/codelist/codelist_zh_CN'
;
import
userCustom_zh_CN
from
'@locale/lanres/userCustom/userCustom_zh_CN'
;
...
...
@@ -179,6 +180,7 @@ export default {
account
:
account_zh_CN
,
salesorder
:
salesorder_zh_CN
,
quotedetail
:
quotedetail_zh_CN
,
subject
:
subject_zh_CN
,
},
components
:
components_zh_CN
,
codelist
:
codelist_zh_CN
,
...
...
app_CRM/src/locale/lanres/codelist/codelist_en_US.ts
浏览文件 @
dc3f8f8e
...
...
@@ -221,6 +221,20 @@ export default {
'2'
:
"高"
,
empty
:
""
,
},
Salesliterature__LiteratureTypeCode
:
{
'1'
:
"产品表单"
,
'7'
:
"价格表单"
,
'9'
:
"公司背景"
,
'6'
:
"公告"
,
'100001'
:
"市场营销宣传材料"
,
'8'
:
"手册"
,
'5'
:
"新闻"
,
'0'
:
"演示文稿"
,
'4'
:
"电子表格"
,
'2'
:
"策略和步骤"
,
'3'
:
"销售宣传资料"
,
empty
:
""
,
},
SysOperator
:
{
empty
:
""
,
},
...
...
@@ -336,13 +350,6 @@ export default {
'1'
:
"首选客户"
,
empty
:
""
,
},
Product__ProductTypeCode
:
{
'4'
:
"固定费用"
,
'3'
:
"服务"
,
'2'
:
"杂项费用"
,
'1'
:
"销售存货"
,
empty
:
""
,
},
Contact__GenderCode
:
{
'2'
:
"女"
,
'1'
:
"男"
,
...
...
app_CRM/src/locale/lanres/codelist/codelist_zh_CN.ts
浏览文件 @
dc3f8f8e
...
...
@@ -221,6 +221,20 @@ export default {
'2'
:
"高"
,
empty
:
""
,
},
Salesliterature__LiteratureTypeCode
:
{
'1'
:
"产品表单"
,
'7'
:
"价格表单"
,
'9'
:
"公司背景"
,
'6'
:
"公告"
,
'100001'
:
"市场营销宣传材料"
,
'8'
:
"手册"
,
'5'
:
"新闻"
,
'0'
:
"演示文稿"
,
'4'
:
"电子表格"
,
'2'
:
"策略和步骤"
,
'3'
:
"销售宣传资料"
,
empty
:
""
,
},
SysOperator
:
{
empty
:
""
,
},
...
...
@@ -336,13 +350,6 @@ export default {
'1'
:
"首选客户"
,
empty
:
""
,
},
Product__ProductTypeCode
:
{
'4'
:
"固定费用"
,
'3'
:
"服务"
,
'2'
:
"杂项费用"
,
'1'
:
"销售存货"
,
empty
:
""
,
},
Contact__GenderCode
:
{
'2'
:
"女"
,
'1'
:
"男"
,
...
...
app_CRM/src/locale/lanres/entities/competitor/competitor_en_US.ts
浏览文件 @
dc3f8f8e
...
...
@@ -102,7 +102,7 @@ export default {
},
gridview
:
{
caption
:
"竞争对手"
,
title
:
"竞争对手
表格视图
"
,
title
:
"竞争对手
信息
"
,
},
editview
:
{
caption
:
"竞争对手"
,
...
...
app_CRM/src/locale/lanres/entities/competitor/competitor_zh_CN.ts
浏览文件 @
dc3f8f8e
...
...
@@ -101,7 +101,7 @@ export default {
},
gridview
:
{
caption
:
"竞争对手"
,
title
:
"竞争对手
表格视图
"
,
title
:
"竞争对手
信息
"
,
},
editview
:
{
caption
:
"竞争对手"
,
...
...
app_CRM/src/locale/lanres/entities/contact/contact_en_US.ts
浏览文件 @
dc3f8f8e
...
...
@@ -211,7 +211,7 @@ export default {
},
gridview
:
{
caption
:
"联系人信息"
,
title
:
"联系人
表格视图
"
,
title
:
"联系人
信息
"
,
},
editmarket
:
{
caption
:
"市场营销信息"
,
...
...
app_CRM/src/locale/lanres/entities/contact/contact_zh_CN.ts
浏览文件 @
dc3f8f8e
...
...
@@ -210,7 +210,7 @@ export default {
},
gridview
:
{
caption
:
"联系人信息"
,
title
:
"联系人
表格视图
"
,
title
:
"联系人
信息
"
,
},
editmarket
:
{
caption
:
"市场营销信息"
,
...
...
app_CRM/src/locale/lanres/entities/invoice/invoice_en_US.ts
浏览文件 @
dc3f8f8e
...
...
@@ -269,9 +269,13 @@ export default {
},
},
gridviewtoolbar_toolbar
:
{
tbitem3
:
{
caption
:
"New"
,
tip
:
"New"
,
tbitem1_openquickcreateview
:
{
caption
:
"新建"
,
tip
:
"新建"
,
},
tbitem2
:
{
caption
:
"-"
,
tip
:
""
,
},
tbitem4
:
{
caption
:
"Edit"
,
...
...
app_CRM/src/locale/lanres/entities/invoice/invoice_zh_CN.ts
浏览文件 @
dc3f8f8e
...
...
@@ -268,10 +268,14 @@ export default {
},
},
gridviewtoolbar_toolbar
:
{
tbitem
3
:
{
tbitem
1_openquickcreateview
:
{
caption
:
"新建"
,
tip
:
"新建"
,
},
tbitem2
:
{
caption
:
"-"
,
tip
:
""
,
},
tbitem4
:
{
caption
:
"编辑"
,
tip
:
"编辑"
,
...
...
app_CRM/src/locale/lanres/entities/product/product_en_US.ts
浏览文件 @
dc3f8f8e
...
...
@@ -81,7 +81,7 @@ export default {
},
edit_quickcreate
:
{
caption
:
"产品"
,
title
:
"
产品选项操作视图
"
,
title
:
"
快速新建
"
,
},
gridview
:
{
caption
:
"产品"
,
...
...
@@ -138,7 +138,7 @@ export default {
uiactions
:
{
},
},
ef_001
_form
:
{
quickcreate
_form
:
{
details
:
{
group1
:
"产品基本信息"
,
formpage1
:
"基本信息"
,
...
...
@@ -150,11 +150,10 @@ export default {
srfuf
:
""
,
srfdeid
:
""
,
srfsourcekey
:
""
,
productname
:
"产品名称"
,
productnumber
:
"产品 ID"
,
productname
:
"产品名称"
,
validfromdate
:
"有效期的开始日期"
,
validtodate
:
"有效期的结束日期"
,
description
:
"说明"
,
productid
:
"产品"
,
},
uiactions
:
{
...
...
@@ -164,7 +163,8 @@ export default {
columns
:
{
productname
:
"产品名称"
,
productnumber
:
"产品 ID"
,
producttypecode
:
"产品类型"
,
validfromdate
:
"有效期的开始日期"
,
validtodate
:
"有效期的结束日期"
,
},
uiactions
:
{
},
...
...
app_CRM/src/locale/lanres/entities/product/product_zh_CN.ts
浏览文件 @
dc3f8f8e
...
...
@@ -80,7 +80,7 @@ export default {
},
edit_quickcreate
:
{
caption
:
"产品"
,
title
:
"
产品选项操作视图
"
,
title
:
"
快速新建
"
,
},
gridview
:
{
caption
:
"产品"
,
...
...
@@ -137,7 +137,7 @@ export default {
uiactions
:
{
},
},
ef_001
_form
:
{
quickcreate
_form
:
{
details
:
{
group1
:
"产品基本信息"
,
formpage1
:
"基本信息"
,
...
...
@@ -149,11 +149,10 @@ export default {
srfuf
:
""
,
srfdeid
:
""
,
srfsourcekey
:
""
,
productname
:
"产品名称"
,
productnumber
:
"产品 ID"
,
productname
:
"产品名称"
,
validfromdate
:
"有效期的开始日期"
,
validtodate
:
"有效期的结束日期"
,
description
:
"说明"
,
productid
:
"产品"
,
},
uiactions
:
{
...
...
@@ -163,7 +162,8 @@ export default {
columns
:
{
productname
:
"产品名称"
,
productnumber
:
"产品 ID"
,
producttypecode
:
"产品类型"
,
validfromdate
:
"有效期的开始日期"
,
validtodate
:
"有效期的结束日期"
,
},
uiactions
:
{
},
...
...
app_CRM/src/locale/lanres/entities/quote/quote_en_US.ts
浏览文件 @
dc3f8f8e
...
...
@@ -100,7 +100,7 @@ export default {
views
:
{
gridview
:
{
caption
:
"报价单"
,
title
:
"报价单
表格视图
"
,
title
:
"报价单
信息
"
,
},
summary
:
{
caption
:
"报价单"
,
...
...
app_CRM/src/locale/lanres/entities/quote/quote_zh_CN.ts
浏览文件 @
dc3f8f8e
...
...
@@ -99,7 +99,7 @@ export default {
views
:
{
gridview
:
{
caption
:
"报价单"
,
title
:
"报价单
表格视图
"
,
title
:
"报价单
信息
"
,
},
summary
:
{
caption
:
"报价单"
,
...
...
app_CRM/src/locale/lanres/entities/sales-literature/sales-literature_en_US.ts
浏览文件 @
dc3f8f8e
...
...
@@ -42,6 +42,10 @@ export default {
caption
:
"销售宣传资料"
,
title
:
"销售宣传资料表格视图"
,
},
quickcreateview
:
{
caption
:
"销售宣传资料"
,
title
:
"快速新建"
,
},
},
main_form
:
{
details
:
{
...
...
@@ -67,11 +71,32 @@ export default {
uiactions
:
{
},
},
quickcreate_form
:
{
details
:
{
group1
:
"销售宣传资料基本信息"
,
formpage1
:
"基本信息"
,
srfupdatedate
:
"更新时间"
,
srforikey
:
""
,
srfkey
:
"销售宣传资料"
,
srfmajortext
:
"销售资料名称"
,
srftempmode
:
""
,
srfuf
:
""
,
srfdeid
:
""
,
srfsourcekey
:
""
,
salesliteraturename
:
"标题"
,
subjectname
:
"主题"
,
literaturetypecode
:
"类型"
,
subjectid
:
"主题"
,
salesliteratureid
:
"销售宣传资料"
,
},
uiactions
:
{
},
},
main_grid
:
{
columns
:
{
salesliteraturename
:
"销售资料名称"
,
updateman
:
"更新人
"
,
updatedate
:
"更新时间
"
,
subjectname
:
"主题
"
,
literaturetypecode
:
"类型
"
,
},
uiactions
:
{
},
...
...
app_CRM/src/locale/lanres/entities/sales-literature/sales-literature_zh_CN.ts
浏览文件 @
dc3f8f8e
...
...
@@ -41,6 +41,10 @@ export default {
caption
:
"销售宣传资料"
,
title
:
"销售宣传资料表格视图"
,
},
quickcreateview
:
{
caption
:
"销售宣传资料"
,
title
:
"快速新建"
,
},
},
main_form
:
{
details
:
{
...
...
@@ -66,11 +70,32 @@ export default {
uiactions
:
{
},
},
quickcreate_form
:
{
details
:
{
group1
:
"销售宣传资料基本信息"
,
formpage1
:
"基本信息"
,
srfupdatedate
:
"更新时间"
,
srforikey
:
""
,
srfkey
:
"销售宣传资料"
,
srfmajortext
:
"销售资料名称"
,
srftempmode
:
""
,
srfuf
:
""
,
srfdeid
:
""
,
srfsourcekey
:
""
,
salesliteraturename
:
"标题"
,
subjectname
:
"主题"
,
literaturetypecode
:
"类型"
,
subjectid
:
"主题"
,
salesliteratureid
:
"销售宣传资料"
,
},
uiactions
:
{
},
},
main_grid
:
{
columns
:
{
salesliteraturename
:
"销售资料名称"
,
updateman
:
"更新人
"
,
updatedate
:
"更新时间
"
,
subjectname
:
"主题
"
,
literaturetypecode
:
"类型
"
,
},
uiactions
:
{
},
...
...
app_CRM/src/locale/lanres/entities/subject/subject_en_US.ts
0 → 100644
浏览文件 @
dc3f8f8e
export
default
{
fields
:
{
overriddencreatedon
:
"创建记录的时间"
,
updatedate
:
"更新时间"
,
versionnumber
:
"版本号"
,
description
:
"说明"
,
importsequencenumber
:
"导入序列号"
,
updateman
:
"更新人"
,
createdate
:
"建立时间"
,
parentsubjectname
:
"父主题的名称。"
,
featuremask
:
"功能掩码"
,
createman
:
"建立人"
,
title
:
"标题"
,
subjectid
:
"主题"
,
parentsubject
:
"父主题"
,
},
views
:
{
pickupgridview
:
{
caption
:
"主题"
,
title
:
"主题选择表格视图"
,
},
pickupview
:
{
caption
:
"主题"
,
title
:
"主题数据选择视图"
,
},
},
main_grid
:
{
columns
:
{
title
:
"标题"
,
updateman
:
"更新人"
,
updatedate
:
"更新时间"
,
},
uiactions
:
{
},
},
default_searchform
:
{
details
:
{
formpage1
:
"常规条件"
,
},
uiactions
:
{
},
},
};
app_CRM/src/locale/lanres/entities/subject/subject_zh_CN.ts
0 → 100644
浏览文件 @
dc3f8f8e
export
default
{
fields
:
{
overriddencreatedon
:
"创建记录的时间"
,
updatedate
:
"更新时间"
,
versionnumber
:
"版本号"
,
description
:
"说明"
,
importsequencenumber
:
"导入序列号"
,
updateman
:
"更新人"
,
createdate
:
"建立时间"
,
parentsubjectname
:
"父主题的名称。"
,
featuremask
:
"功能掩码"
,
createman
:
"建立人"
,
title
:
"标题"
,
subjectid
:
"主题"
,
parentsubject
:
"父主题"
,
},
views
:
{
pickupgridview
:
{
caption
:
"主题"
,
title
:
"主题选择表格视图"
,
},
pickupview
:
{
caption
:
"主题"
,
title
:
"主题数据选择视图"
,
},
},
main_grid
:
{
columns
:
{
title
:
"标题"
,
updateman
:
"更新人"
,
updatedate
:
"更新时间"
,
},
uiactions
:
{
},
},
default_searchform
:
{
details
:
{
formpage1
:
"常规条件"
,
},
uiactions
:
{
},
},
};
\ No newline at end of file
app_CRM/src/mock/codelist/codelist.ts
浏览文件 @
dc3f8f8e
...
...
@@ -1744,6 +1744,123 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => {
},
]
},
{
srfkey
:
'Salesliterature__LiteratureTypeCode'
,
emptytext
:
'未定义'
,
"codelisttype"
:
"static"
,
items
:
[
{
id
:
'1'
,
label
:
"产品表单"
,
text
:
"产品表单"
,
"data"
:
""
,
"codename"
:
"Item_1"
,
value
:
'1'
,
disabled
:
false
,
},
{
id
:
'7'
,
label
:
"价格表单"
,
text
:
"价格表单"
,
"data"
:
""
,
"codename"
:
"Item_7"
,
value
:
'7'
,
disabled
:
false
,
},
{
id
:
'9'
,
label
:
"公司背景"
,
text
:
"公司背景"
,
"data"
:
""
,
"codename"
:
"Item_9"
,
value
:
'9'
,
disabled
:
false
,
},
{
id
:
'6'
,
label
:
"公告"
,
text
:
"公告"
,
"data"
:
""
,
"codename"
:
"Item_6"
,
value
:
'6'
,
disabled
:
false
,
},
{
id
:
'100001'
,
label
:
"市场营销宣传材料"
,
text
:
"市场营销宣传材料"
,
"data"
:
""
,
"codename"
:
"Item_100001"
,
value
:
'100001'
,
disabled
:
false
,
},
{
id
:
'8'
,
label
:
"手册"
,
text
:
"手册"
,
"data"
:
""
,
"codename"
:
"Item_8"
,
value
:
'8'
,
disabled
:
false
,
},
{
id
:
'5'
,
label
:
"新闻"
,
text
:
"新闻"
,
"data"
:
""
,
"codename"
:
"Item_5"
,
value
:
'5'
,
disabled
:
false
,
},
{
id
:
'0'
,
label
:
"演示文稿"
,
text
:
"演示文稿"
,
"data"
:
""
,
"codename"
:
"Item_0"
,
value
:
'0'
,
disabled
:
false
,
},
{
id
:
'4'
,
label
:
"电子表格"
,
text
:
"电子表格"
,
"data"
:
""
,
"codename"
:
"Item_4"
,
value
:
'4'
,
disabled
:
false
,
},
{
id
:
'2'
,
label
:
"策略和步骤"
,
text
:
"策略和步骤"
,
"data"
:
""
,
"codename"
:
"Item_2"
,
value
:
'2'
,
disabled
:
false
,
},
{
id
:
'3'
,
label
:
"销售宣传资料"
,
text
:
"销售宣传资料"
,
"data"
:
""
,
"codename"
:
"Item_3"
,
value
:
'3'
,
disabled
:
false
,
},
]
},
{
"srfkey"
:
"SysOperator"
,
"emptytext"
:
"未定义"
,
...
...
@@ -2481,53 +2598,6 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => {
},
]
},
{
srfkey
:
'Product__ProductTypeCode'
,
emptytext
:
'未定义'
,
"codelisttype"
:
"static"
,
items
:
[
{
id
:
'4'
,
label
:
"固定费用"
,
text
:
"固定费用"
,
"data"
:
""
,
"codename"
:
"Item_4"
,
value
:
'4'
,
disabled
:
false
,
},
{
id
:
'3'
,
label
:
"服务"
,
text
:
"服务"
,
"data"
:
""
,
"codename"
:
"Item_3"
,
value
:
'3'
,
disabled
:
false
,
},
{
id
:
'2'
,
label
:
"杂项费用"
,
text
:
"杂项费用"
,
"data"
:
""
,
"codename"
:
"Item_2"
,
value
:
'2'
,
disabled
:
false
,
},
{
id
:
'1'
,
label
:
"销售存货"
,
text
:
"销售存货"
,
"data"
:
""
,
"codename"
:
"Item_1"
,
value
:
'1'
,
disabled
:
false
,
},
]
},
{
srfkey
:
'Contact__GenderCode'
,
emptytext
:
'未定义'
,
...
...
app_CRM/src/mock/entity/subjects/subjects.ts
0 → 100644
浏览文件 @
dc3f8f8e
import
qs
from
'qs'
;
import
{
MockAdapter
}
from
'@/mock/mock-adapter'
;
const
mock
=
MockAdapter
.
getInstance
();
// 模拟数据
const
mockDatas
:
Array
<
any
>
=
[
];
//getwflink
mock
.
onGet
(
new
RegExp
(
/^
\/
wfcore
\/
ibizbusinesscentral-app-crm
\/
subjects
\/[
a-zA-Z0-9
\-\;]
+
\/
usertasks
\/[
a-zA-Z0-9
\-\;]
+
\/
ways$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: getwflink"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
console
.
groupEnd
();
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
{}];
}
return
[
status
,[
{
"sequenceFlowId"
:
"dfdsfdsfdsfdsfds"
,
"sequenceFlowName"
:
"同意"
,
"taskId"
:
"aaaaddddccccddddd"
,
"processDefinitionKey"
:
"support-workorders-approve-v1"
,
"processInstanceId"
:
"ddlfldldfldsfds"
,
"refViewKey"
:
""
},
{
"sequenceFlowId"
:
"ddssdfdfdfdfsfdf"
,
"sequenceFlowName"
:
"不同意"
,
"taskId"
:
"aaaaddddccccddddd"
,
"processDefinitionKey"
:
"support-workorders-approve-v1"
,
"processInstanceId"
:
"ddfdsldlfdlldsf"
,
"refViewKey"
:
"workorder_ltform_editview"
}
]];
});
// getwfstep
mock
.
onGet
(
new
RegExp
(
/^
\/
wfcore
\/
ibizbusinesscentral-app-crm
\/
subjects
\/
process-definitions-nodes$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: getwfstep"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
console
.
groupEnd
();
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
{}];
}
return
[
status
,
[
{
"userTaskId"
:
"sddfddfd-dfdf-fdfd-fdf-dfdfd"
,
"userTaskName"
:
"待审"
,
"cnt"
:
0
,
"processDefinitionKey"
:
"support-workorders-approve-v1"
,
"processDefinitionName"
:
"工单审批流程v1"
},
{
"userTaskId"
:
"sddfddfd-dfdf-fdfd-fdf-87927"
,
"userTaskName"
:
"待分配"
,
"cnt"
:
3
,
"processDefinitionKey"
:
"support-workorders-approve-v1"
,
"processDefinitionName"
:
"工单审批流程v1"
}
]];
});
// createBatch
mock
.
onPost
(
new
RegExp
(
/^
\/
subjects
\/
batch$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: createBatch"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
console
.
groupEnd
();
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
{}];
}
return
[
status
,
{}];
});
// updateBatch
mock
.
onPut
(
new
RegExp
(
/^
\/
subjects
\/
batch$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: updateBatch"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
console
.
groupEnd
();
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
{}];
}
return
[
status
,
{}];
});
// removeBatch
mock
.
onDelete
(
new
RegExp
(
/^
\/
subjects
\/
batch$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: removeBatch"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
console
.
groupEnd
();
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
{}];
}
return
[
status
,
{}];
});
// Select
mock
.
onGet
(
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})\/
select$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: Select"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
const
paramArray
:
Array
<
any
>
=
[
'subjectid'
];
const
matchArray
:
any
=
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})\/
select$/
).
exec
(
config
.
url
);
let
tempValue
:
any
=
{};
if
(
matchArray
&&
matchArray
.
length
>
1
&&
paramArray
&&
paramArray
.
length
>
0
){
paramArray
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
Object
.
defineProperty
(
tempValue
,
item
,
{
enumerable
:
true
,
value
:
matchArray
[
index
+
1
]
});
});
}
let
items
=
mockDatas
?
mockDatas
:
[];
let
_items
=
items
.
find
((
item
:
any
)
=>
Object
.
is
(
item
.
subjectid
,
tempValue
.
subjectid
));
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
_items
);
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
_items
];
});
// Save
mock
.
onPost
(
new
RegExp
(
/^
\/
subjects
\/?([
a-zA-Z0-9
\-\;]{0,35})\/
save$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: Save"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
const
paramArray
:
Array
<
any
>
=
[
'subjectid'
];
const
matchArray
:
any
=
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})\/
save$/
).
exec
(
config
.
url
);
let
tempValue
:
any
=
{};
if
(
matchArray
&&
matchArray
.
length
>
1
&&
paramArray
&&
paramArray
.
length
>
0
){
paramArray
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
Object
.
defineProperty
(
tempValue
,
item
,
{
enumerable
:
true
,
value
:
matchArray
[
index
+
1
]
});
});
}
//let items = mockDatas ? mockDatas : [];
//let _items = items.find((item: any) => Object.is(item.subjectid, tempValue.subjectid));
let
data
=
JSON
.
parse
(
config
.
data
);
mockDatas
.
forEach
((
item
)
=>
{
if
(
item
[
'subjectid'
]
==
tempValue
[
'subjectid'
]
){
for
(
let
value
in
data
){
if
(
item
.
hasOwnProperty
(
value
)){
item
[
value
]
=
data
[
value
];
}
}
}
})
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
data
);
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
data
];
});
// Create
mock
.
onPost
(
new
RegExp
(
/^
\/
subjects
\/?([
a-zA-Z0-9
\-\;]{0,35})
$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: Create"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
const
paramArray
:
Array
<
any
>
=
[
'subjectid'
];
const
matchArray
:
any
=
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})
$/
).
exec
(
config
.
url
);
let
tempValue
:
any
=
{};
if
(
matchArray
&&
matchArray
.
length
>
1
&&
paramArray
&&
paramArray
.
length
>
0
){
paramArray
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
Object
.
defineProperty
(
tempValue
,
item
,
{
enumerable
:
true
,
value
:
matchArray
[
index
+
1
]
});
});
}
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
mockDatas
[
0
]);
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
mockDatas
[
0
]];
});
// CheckKey
mock
.
onPost
(
new
RegExp
(
/^
\/
subjects
\/?([
a-zA-Z0-9
\-\;]{0,35})\/
checkkey$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: CheckKey"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
const
paramArray
:
Array
<
any
>
=
[
'subjectid'
];
const
matchArray
:
any
=
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})\/
checkkey$/
).
exec
(
config
.
url
);
let
tempValue
:
any
=
{};
if
(
matchArray
&&
matchArray
.
length
>
1
&&
paramArray
&&
paramArray
.
length
>
0
){
paramArray
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
Object
.
defineProperty
(
tempValue
,
item
,
{
enumerable
:
true
,
value
:
matchArray
[
index
+
1
]
});
});
}
//let items = mockDatas ? mockDatas : [];
//let _items = items.find((item: any) => Object.is(item.subjectid, tempValue.subjectid));
let
data
=
JSON
.
parse
(
config
.
data
);
mockDatas
.
forEach
((
item
)
=>
{
if
(
item
[
'subjectid'
]
==
tempValue
[
'subjectid'
]
){
for
(
let
value
in
data
){
if
(
item
.
hasOwnProperty
(
value
)){
item
[
value
]
=
data
[
value
];
}
}
}
})
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
data
);
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
data
];
});
// Update
mock
.
onPut
(
new
RegExp
(
/^
\/
subjects
\/?([
a-zA-Z0-9
\-\;]{0,35})
$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: Update"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
const
paramArray
:
Array
<
any
>
=
[
'subjectid'
];
const
matchArray
:
any
=
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})
$/
).
exec
(
config
.
url
);
let
tempValue
:
any
=
{};
if
(
matchArray
&&
matchArray
.
length
>
1
&&
paramArray
&&
paramArray
.
length
>
0
){
paramArray
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
Object
.
defineProperty
(
tempValue
,
item
,
{
enumerable
:
true
,
value
:
matchArray
[
index
+
1
]
});
});
}
//let items = mockDatas ? mockDatas : [];
//let _items = items.find((item: any) => Object.is(item.subjectid, tempValue.subjectid));
let
data
=
JSON
.
parse
(
config
.
data
);
mockDatas
.
forEach
((
item
)
=>
{
if
(
item
[
'subjectid'
]
==
tempValue
[
'subjectid'
]
){
for
(
let
value
in
data
){
if
(
item
.
hasOwnProperty
(
value
)){
item
[
value
]
=
data
[
value
];
}
}
}
})
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
data
);
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
data
];
});
// GetDraft
mock
.
onGet
(
new
RegExp
(
/^
\/
subjects
\/
getdraft$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: GetDraft"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
// GetDraft
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
({});
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
{}];
});
// FetchDefault
mock
.
onGet
(
new
RegExp
(
/^
\/
subjects
\/
fetchdefault$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: FetchDefault"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
mockDatas
);
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
mockDatas
?
mockDatas
:
[]];
});
// FetchDefault
mock
.
onGet
(
new
RegExp
(
/^
\/
subjects
\/
fetchdefault
(\?[\w
-.
/
?%&=,
]
*
)
*$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: FetchDefault"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
if
(
config
.
url
.
includes
(
'page'
)){
let
url
=
config
.
url
.
split
(
'?'
)[
1
];
let
params
=
qs
.
parse
(
url
);
Object
.
assign
(
config
,
params
);
}
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
let
total
=
mockDatas
.
length
;
let
records
:
Array
<
any
>
=
[];
if
(
!
config
.
page
||
!
config
.
size
){
records
=
mockDatas
;
}
else
{
if
((
config
.
page
-
1
)
*
config
.
size
<
total
){
records
=
mockDatas
.
slice
(
config
.
page
,
config
.
size
);
}
}
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
records
?
records
:
[]);
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
records
?
records
:
[]];
});
// URI参数传递情况未实现
// URI参数传递情况未实现
// URI参数传递情况未实现
// URI参数传递情况未实现
// URI参数传递情况未实现
// URI参数传递情况未实现
// URI参数传递情况未实现
// Remove
mock
.
onDelete
(
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})
$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: Remove"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
const
paramArray
:
Array
<
any
>
=
[
'subjectid'
];
const
matchArray
:
any
=
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})
$/
).
exec
(
config
.
url
);
let
tempValue
:
any
=
{};
if
(
matchArray
&&
matchArray
.
length
>
1
&&
paramArray
&&
paramArray
.
length
>
0
){
paramArray
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
Object
.
defineProperty
(
tempValue
,
item
,
{
enumerable
:
true
,
value
:
matchArray
[
index
+
1
]
});
});
}
let
items
=
mockDatas
?
mockDatas
:
[];
let
_items
=
items
.
find
((
item
:
any
)
=>
Object
.
is
(
item
.
subjectid
,
tempValue
.
subjectid
));
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
_items
?
_items
:{});
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
_items
?
_items
:{}];
});
// Get
mock
.
onGet
(
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})
$/
)).
reply
((
config
:
any
)
=>
{
console
.
groupCollapsed
(
"实体:subject 方法: Get"
);
console
.
table
({
url
:
config
.
url
,
method
:
config
.
method
,
data
:
config
.
data
});
let
status
=
MockAdapter
.
mockStatus
(
config
);
if
(
status
!==
200
)
{
return
[
status
,
null
];
}
const
paramArray
:
Array
<
any
>
=
[
'subjectid'
];
const
matchArray
:
any
=
new
RegExp
(
/^
\/
subjects
\/([
a-zA-Z0-9
\-\;]{1,35})
$/
).
exec
(
config
.
url
);
let
tempValue
:
any
=
{};
if
(
matchArray
&&
matchArray
.
length
>
1
&&
paramArray
&&
paramArray
.
length
>
0
){
paramArray
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
Object
.
defineProperty
(
tempValue
,
item
,
{
enumerable
:
true
,
value
:
matchArray
[
index
+
1
]
});
});
}
let
items
=
mockDatas
?
mockDatas
:
[];
let
_items
=
items
.
find
((
item
:
any
)
=>
Object
.
is
(
item
.
subjectid
,
tempValue
.
subjectid
));
console
.
groupCollapsed
(
"response数据 status: "
+
status
+
" data: "
);
console
.
table
(
_items
?
_items
:{});
console
.
groupEnd
();
console
.
groupEnd
();
return
[
status
,
_items
?
_items
:{}];
});
app_CRM/src/mock/index.ts
浏览文件 @
dc3f8f8e
...
...
@@ -45,3 +45,4 @@ import './entity/competitors/competitors';
import
'./entity/accounts/accounts'
;
import
'./entity/sales-orders/sales-orders'
;
import
'./entity/quote-details/quote-details'
;
import
'./entity/subjects/subjects'
;
app_CRM/src/mock/viewconfig/viewconfig.ts
浏览文件 @
dc3f8f8e
...
...
@@ -32,7 +32,7 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewtag"
:
"01c28e25ad9d42977cb91ee890731b64"
},
"contactgridview"
:
{
"title"
:
"联系人
表格视图
"
,
"title"
:
"联系人
信息
"
,
"caption"
:
"联系人信息"
,
"viewtype"
:
"DEGRIDVIEW"
,
"viewmodule"
:
"Base"
,
...
...
@@ -120,7 +120,7 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewtag"
:
"10c5d33db64f3a1bda18c7571a679438"
},
"quotegridview"
:
{
"title"
:
"报价单
表格视图
"
,
"title"
:
"报价单
信息
"
,
"caption"
:
"报价单"
,
"viewtype"
:
"DEGRIDVIEW"
,
"viewmodule"
:
"Sales"
,
...
...
@@ -159,6 +159,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewname"
:
"OpportunitySummary"
,
"viewtag"
:
"177c00d1674621e8933efe6db68bce0e"
},
"subjectpickupgridview"
:
{
"title"
:
"主题选择表格视图"
,
"caption"
:
"主题"
,
"viewtype"
:
"DEPICKUPGRIDVIEW"
,
"viewmodule"
:
"Base"
,
"viewname"
:
"SubjectPickupGridView"
,
"viewtag"
:
"19e1193c4075ae18f2f29095bb8841fa"
},
"leadpickupview"
:
{
"title"
:
"潜在顾客数据选择视图"
,
"caption"
:
"潜在顾客"
,
...
...
@@ -1032,7 +1040,7 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewtag"
:
"ad6abf83dc1bc466b988194cd868d98a"
},
"productedit_quickcreate"
:
{
"title"
:
"
产品选项操作视图
"
,
"title"
:
"
快速新建
"
,
"caption"
:
"产品"
,
"viewtype"
:
"DEOPTVIEW"
,
"viewmodule"
:
"Product"
,
...
...
@@ -1168,7 +1176,7 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewtag"
:
"c7d0ca0f6fa1b27bbd1b5c422d1a108d"
},
"competitorgridview"
:
{
"title"
:
"竞争对手
表格视图
"
,
"title"
:
"竞争对手
信息
"
,
"caption"
:
"竞争对手"
,
"viewtype"
:
"DEGRIDVIEW"
,
"viewmodule"
:
"Sales"
,
...
...
@@ -1255,6 +1263,22 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
"viewname"
:
"AccountEdit_Address"
,
"viewtag"
:
"e4335da0a7c14a65376eecaabb771fd7"
},
"salesliteraturequickcreateview"
:
{
"title"
:
"快速新建"
,
"caption"
:
"销售宣传资料"
,
"viewtype"
:
"DEOPTVIEW"
,
"viewmodule"
:
"Sales"
,
"viewname"
:
"SalesLiteratureQuickCreateView"
,
"viewtag"
:
"e45cd3d0a9959e1979243837b5dcfd2d"
},
"subjectpickupview"
:
{
"title"
:
"主题数据选择视图"
,
"caption"
:
"主题"
,
"viewtype"
:
"DEPICKUPVIEW"
,
"viewmodule"
:
"Base"
,
"viewname"
:
"SubjectPickupView"
,
"viewtag"
:
"e52af970c14fd89546ac8ccaecab460c"
},
"salesorderinfo_soview"
:
{
"title"
:
"订单编辑视图"
,
"caption"
:
"订单"
,
...
...
app_CRM/src/pages/base/contact-grid-view/contact-grid-view-base.tsx
浏览文件 @
dc3f8f8e
...
...
@@ -8,7 +8,7 @@ import CodeListService from "@service/app/codelist-service";
/**
* 联系人
表格视图
视图基类
* 联系人
信息
视图基类
*
* @export
* @class ContactGridViewBase
...
...
app_CRM/src/pages/base/contact-grid-view/contact-grid-view.html
浏览文件 @
dc3f8f8e
<studio-view-style2
viewName=
"contactgridview"
viewTitle=
"联系人
表格视图
"
class=
'degridview contact-grid-view'
>
<studio-view-style2
viewName=
"contactgridview"
viewTitle=
"联系人
信息
"
class=
'degridview contact-grid-view'
>
<template
slot=
'title'
>
<span
class=
'caption-info'
>
{{$t(model.srfTitle)}}
</span>
</template>
...
...
app_CRM/src/pages/base/contact-grid-view/contact-grid-view.vue
浏览文件 @
dc3f8f8e
...
...
@@ -7,7 +7,7 @@ import view_grid from '@widgets/contact/main-grid/main-grid.vue';
import view_searchform from '@widgets/contact/default-searchform/default-searchform.vue';
/**
* 联系人
表格视图
视图
* 联系人
信息
视图
*
* @export
* @class ContactGridView
...
...
app_CRM/src/pages/finance/invoice-grid-view/invoice-grid-view-base.tsx
浏览文件 @
dc3f8f8e
...
...
@@ -3,6 +3,7 @@ import { Subject } from 'rxjs';
import
{
GridViewBase
}
from
'@/studio-core'
;
import
InvoiceService
from
'@/service/invoice/invoice-service'
;
import
GridViewEngine
from
'@engine/view/grid-view-engine'
;
import
InvoiceUIService
from
'@/uiservice/invoice/invoice-ui-service'
;
import
CodeListService
from
"@service/app/codelist-service"
;
...
...
@@ -67,8 +68,9 @@ export class InvoiceGridViewBase extends GridViewBase {
* @memberof InvoiceGridView
*/
public
toolBarModels
:
any
=
{
tbitem
3
:
{
name
:
'tbitem3'
,
caption
:
'新建'
,
'isShowCaption'
:
true
,
'isShowIcon'
:
true
,
tooltip
:
'新建'
,
iconcls
:
'fa fa-file-text-o'
,
icon
:
''
,
disabled
:
false
,
type
:
'DEUIACTION'
,
visabled
:
true
,
dataaccaction
:
''
,
uiaction
:
{
tag
:
'New'
,
target
:
'
'
},
class
:
''
},
tbitem
1_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
:
''
},
...
...
@@ -136,8 +138,8 @@ export class InvoiceGridViewBase extends GridViewBase {
* @memberof InvoiceGridViewBase
*/
public
toolbar_click
(
$event
:
any
,
$event2
?:
any
):
void
{
if
(
Object
.
is
(
$event
.
tag
,
'tbitem
3
'
))
{
this
.
toolbar_tbitem
3
_click
(
null
,
''
,
$event2
);
if
(
Object
.
is
(
$event
.
tag
,
'tbitem
1_openquickcreateview
'
))
{
this
.
toolbar_tbitem
1_openquickcreateview
_click
(
null
,
''
,
$event2
);
}
if
(
Object
.
is
(
$event
.
tag
,
'tbitem4'
))
{
this
.
toolbar_tbitem4_click
(
null
,
''
,
$event2
);
...
...
@@ -145,12 +147,6 @@ export class InvoiceGridViewBase extends GridViewBase {
if
(
Object
.
is
(
$event
.
tag
,
'tbitem6'
))
{
this
.
toolbar_tbitem6_click
(
null
,
''
,
$event2
);
}
if
(
Object
.
is
(
$event
.
tag
,
'tbitem24'
))
{
this
.
toolbar_tbitem24_click
(
null
,
''
,
$event2
);
}
if
(
Object
.
is
(
$event
.
tag
,
'tbitem25'
))
{
this
.
toolbar_tbitem25_click
(
null
,
''
,
$event2
);
}
if
(
Object
.
is
(
$event
.
tag
,
'tbitem8'
))
{
this
.
toolbar_tbitem8_click
(
null
,
''
,
$event2
);
}
...
...
@@ -261,7 +257,7 @@ export class InvoiceGridViewBase extends GridViewBase {
* @param {*} [$event]
* @memberof
*/
public
toolbar_tbitem
3
_click
(
params
:
any
=
{},
tag
?:
any
,
$event
?:
any
)
{
public
toolbar_tbitem
1_openquickcreateview
_click
(
params
:
any
=
{},
tag
?:
any
,
$event
?:
any
)
{
// 参数
// 取数
let
datas
:
any
[]
=
[];
...
...
@@ -278,7 +274,8 @@ export class InvoiceGridViewBase extends GridViewBase {
datas
=
[
params
];
}
// 界面行为
this
.
New
(
datas
,
contextJO
,
paramJO
,
$event
,
xData
,
this
,
"Invoice"
);
const
curUIService
:
InvoiceUIService
=
new
InvoiceUIService
();
curUIService
.
Invoice_OpenQuickCreateView
(
datas
,
contextJO
,
paramJO
,
$event
,
xData
,
this
,
"Invoice"
);
}
/**
...
...
@@ -337,62 +334,6 @@ export class InvoiceGridViewBase extends GridViewBase {
this
.
Copy
(
datas
,
contextJO
,
paramJO
,
$event
,
xData
,
this
,
"Invoice"
);
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public
toolbar_tbitem24_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
.
ToggleRowEdit
(
datas
,
contextJO
,
paramJO
,
$event
,
xData
,
this
,
"Invoice"
);
}
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public
toolbar_tbitem25_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
.
NewRow
(
datas
,
contextJO
,
paramJO
,
$event
,
xData
,
this
,
"Invoice"
);
}
/**
* 逻辑事件
*
...
...
@@ -575,26 +516,6 @@ export class InvoiceGridViewBase extends GridViewBase {
}
/**
* 新建
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof InvoiceGridViewBase
*/
public
New
(
args
:
any
[],
contextJO
?:
any
,
params
?:
any
,
$event
?:
any
,
xData
?:
any
,
actionContext
?:
any
,
srfParentDeName
?:
string
)
{
const
_this
:
any
=
this
;
if
(
_this
.
newdata
&&
_this
.
newdata
instanceof
Function
)
{
const
data
:
any
=
{};
_this
.
newdata
([{
...
data
}],[{
...
data
}],
params
,
$event
,
xData
);
}
else
{
_this
.
$Notice
.
error
({
title
:
'错误'
,
desc
:
'newdata 视图处理逻辑不存在,请添加!'
});
}
}
/**
* 编辑
*
...
...
@@ -653,42 +574,6 @@ export class InvoiceGridViewBase extends GridViewBase {
_this
.
$Notice
.
error
({
title
:
'错误'
,
desc
:
'opendata 视图处理逻辑不存在,请添加!'
});
}
}
/**
* 行编辑
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof InvoiceGridViewBase
*/
public
ToggleRowEdit
(
args
:
any
[],
contextJO
?:
any
,
params
?:
any
,
$event
?:
any
,
xData
?:
any
,
actionContext
?:
any
,
srfParentDeName
?:
string
)
{
xData
.
actualIsOpenEdit
=
!
xData
.
actualIsOpenEdit
;
}
/**
* 新建行
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof InvoiceGridViewBase
*/
public
NewRow
(
args
:
any
[],
contextJO
?:
any
,
params
?:
any
,
$event
?:
any
,
xData
?:
any
,
actionContext
?:
any
,
srfParentDeName
?:
string
)
{
const
_this
:
any
=
this
;
const
data
:
any
=
{};
if
(
_this
.
newRow
&&
_this
.
newRow
instanceof
Function
)
{
_this
.
newRow
([{
...
data
}],
params
,
$event
,
xData
);
}
else
if
(
xData
.
newRow
&&
xData
.
newRow
instanceof
Function
)
{
xData
.
newRow
([{
...
data
}],
params
,
$event
,
xData
);
}
else
{
_this
.
$Notice
.
error
({
title
:
'错误'
,
desc
:
'newRow 视图处理逻辑不存在,请添加!'
});
}
}
/**
* 删除
*
...
...
app_CRM/src/pages/product/product-edit-quick-create/product-edit-quick-create-base.tsx
浏览文件 @
dc3f8f8e
...
...
@@ -4,7 +4,7 @@ import ProductService from '@/service/product/product-service';
import
OptionViewEngine
from
'@engine/view/option-view-engine'
;
/**
*
产品选项操作视图
视图基类
*
快速新建
视图基类
*
* @export
* @class ProductEdit_QuickCreateBase
...
...
app_CRM/src/pages/product/product-edit-quick-create/product-edit-quick-create.html
浏览文件 @
dc3f8f8e
<studio-view-style2
viewName=
"productedit_quickcreate"
viewTitle=
"
产品选项操作视图
"
class=
'deoptview product-edit-quick-create'
>
<studio-view-style2
viewName=
"productedit_quickcreate"
viewTitle=
"
快速新建
"
class=
'deoptview product-edit-quick-create'
>
<template
slot=
'title'
>
<span
class=
'caption-info'
>
{{$t(model.srfTitle)}}
</span>
</template>
...
...
app_CRM/src/pages/product/product-edit-quick-create/product-edit-quick-create.vue
浏览文件 @
dc3f8f8e
...
...
@@ -3,10 +3,10 @@
import
{ Component } from 'vue-property-decorator';
import { VueLifeCycleProcessing } from '@/studio-core';
import { ProductEdit_QuickCreateBase } from './product-edit-quick-create-base';
import view_form from '@widgets/product/
ef-001-form/ef-001
-form.vue';
import view_form from '@widgets/product/
quick-create-form/quick-create
-form.vue';
/**
*
产品选项操作视图
视图
*
快速新建
视图
*
* @export
* @class ProductEdit_QuickCreate
...
...
app_CRM/src/pages/product/product-grid-view/product-grid-view-base.tsx
浏览文件 @
dc3f8f8e
...
...
@@ -68,7 +68,7 @@ export class ProductGridViewBase extends GridViewBase {
* @memberof ProductGridView
*/
public
toolBarModels
:
any
=
{
tbitem1_openquickcreateview
:
{
name
:
'tbitem1_openquickcreateview'
,
caption
:
'新建'
,
'isShowCaption'
:
true
,
'isShowIcon'
:
true
,
tooltip
:
'新建'
,
iconcls
:
'fa fa-
file-text-o
'
,
icon
:
''
,
disabled
:
false
,
type
:
'DEUIACTION'
,
visabled
:
true
,
dataaccaction
:
''
,
uiaction
:
{
tag
:
'OpenQuickCreateView'
,
target
:
'NONE'
},
class
:
''
},
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
:
''
},
...
...
@@ -471,16 +471,28 @@ export class ProductGridViewBase extends GridViewBase {
const
deResParameters
:
any
[]
=
[];
const
parameters
:
any
[]
=
[
{
pathName
:
'products'
,
parameterName
:
'product'
},
{
pathName
:
'edit_quickcreate'
,
parameterName
:
'edit_quickcreate'
},
];
const
_this
:
any
=
this
;
const
openIndexViewTab
=
(
data
:
any
)
=>
{
const
_data
:
any
=
{
w
:
(
new
Date
().
getTime
())
};
Object
.
assign
(
_data
,
data
);
const
routePath
=
this
.
$viewTool
.
buildUpRoutePath
(
this
.
$route
,
tempContext
,
deResParameters
,
parameters
,
args
,
_data
);
this
.
$router
.
push
(
routePath
);
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
);
});
}
openIndexViewTab
(
data
);
const
view
:
any
=
{
viewname
:
'product-edit-quick-create'
,
height
:
0
,
width
:
0
,
title
:
this
.
$t
(
'entities.product.views.edit_quickcreate.title'
),
placement
:
'DRAWER_RIGHT'
,
};
openDrawer
(
view
,
data
);
}
...
...
app_CRM/src/pages/sales/competitor-grid-view/competitor-grid-view-base.tsx
浏览文件 @
dc3f8f8e
...
...
@@ -8,7 +8,7 @@ import CodeListService from "@service/app/codelist-service";
/**
* 竞争对手
表格视图
视图基类
* 竞争对手
信息
视图基类
*
* @export
* @class CompetitorGridViewBase
...
...
app_CRM/src/pages/sales/competitor-grid-view/competitor-grid-view.html
浏览文件 @
dc3f8f8e
<studio-view-style2
viewName=
"competitorgridview"
viewTitle=
"竞争对手
表格视图
"
class=
'degridview competitor-grid-view'
>
<studio-view-style2
viewName=
"competitorgridview"
viewTitle=
"竞争对手
信息
"
class=
'degridview competitor-grid-view'
>
<template
slot=
'title'
>
<span
class=
'caption-info'
>
{{$t(model.srfTitle)}}
</span>
</template>
...
...
app_CRM/src/pages/sales/competitor-grid-view/competitor-grid-view.vue
浏览文件 @
dc3f8f8e
...
...
@@ -7,7 +7,7 @@ import view_grid from '@widgets/competitor/main-grid/main-grid.vue';
import view_searchform from '@widgets/competitor/default-searchform/default-searchform.vue';
/**
* 竞争对手
表格视图
视图
* 竞争对手
信息
视图
*
* @export
* @class CompetitorGridView
...
...
app_CRM/src/pages/sales/quote-grid-view/quote-grid-view-base.tsx
浏览文件 @
dc3f8f8e
...
...
@@ -8,7 +8,7 @@ import CodeListService from "@service/app/codelist-service";
/**
* 报价单
表格视图
视图基类
* 报价单
信息
视图基类
*
* @export
* @class QuoteGridViewBase
...
...
app_CRM/src/pages/sales/quote-grid-view/quote-grid-view.html
浏览文件 @
dc3f8f8e
<studio-view-style2
viewName=
"quotegridview"
viewTitle=
"报价单
表格视图
"
class=
'degridview quote-grid-view'
>
<studio-view-style2
viewName=
"quotegridview"
viewTitle=
"报价单
信息
"
class=
'degridview quote-grid-view'
>
<template
slot=
'title'
>
<span
class=
'caption-info'
>
{{$t(model.srfTitle)}}
</span>
</template>
...
...
app_CRM/src/pages/sales/quote-grid-view/quote-grid-view.vue
浏览文件 @
dc3f8f8e
...
...
@@ -7,7 +7,7 @@ import view_grid from '@widgets/quote/main-grid/main-grid.vue';
import view_searchform from '@widgets/quote/default-searchform/default-searchform.vue';
/**
* 报价单
表格视图
视图
* 报价单
信息
视图
*
* @export
* @class QuoteGridView
...
...
app_CRM/src/pages/ungroup/central/page-register.ts
浏览文件 @
dc3f8f8e
...
...
@@ -15,6 +15,7 @@ export const PageComponents = {
Vue
.
component
(
'task-quick-create'
,
()
=>
import
(
'@pages/base/task-quick-create/task-quick-create.vue'
));
Vue
.
component
(
'opportunity-quick-create'
,
()
=>
import
(
'@pages/sales/opportunity-quick-create/opportunity-quick-create.vue'
));
Vue
.
component
(
'opportunity-info-product'
,
()
=>
import
(
'@pages/sales/opportunity-info-product/opportunity-info-product.vue'
));
Vue
.
component
(
'invoice-quick-create-view'
,
()
=>
import
(
'@pages/finance/invoice-quick-create-view/invoice-quick-create-view.vue'
));
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'
));
...
...
app_CRM/src/pages/ungroup/central/router.ts
浏览文件 @
dc3f8f8e
...
...
@@ -445,6 +445,20 @@ const router = new Router({
},
component
:
()
=>
import
(
'@pages/sales/opportunity-info-product/opportunity-info-product.vue'
),
},
{
path
:
'invoices/:invoice?/quickcreateview/:quickcreateview?'
,
meta
:
{
caption
:
'entities.invoice.views.quickcreateview.title'
,
info
:
''
,
parameters
:
[
{
pathName
:
'central'
,
parameterName
:
'central'
},
{
pathName
:
'invoices'
,
parameterName
:
'invoice'
},
{
pathName
:
'quickcreateview'
,
parameterName
:
'quickcreateview'
},
],
requireAuth
:
true
,
},
component
:
()
=>
import
(
'@pages/finance/invoice-quick-create-view/invoice-quick-create-view.vue'
),
},
{
path
:
'accounts/:account?/contacts/:contact?/opportunities/:opportunity?/opportunitycompetitors/:opportunitycompetitor?/oppcompgridview/:oppcompgridview?'
,
meta
:
{
...
...
app_CRM/src/service/entity-service-register.ts
浏览文件 @
dc3f8f8e
...
...
@@ -77,6 +77,7 @@ export class EntityServiceRegister {
this
.
allEntityService
.
set
(
'account'
,
()
=>
import
(
'@/service/account/account-service'
));
this
.
allEntityService
.
set
(
'salesorder'
,
()
=>
import
(
'@/service/sales-order/sales-order-service'
));
this
.
allEntityService
.
set
(
'quotedetail'
,
()
=>
import
(
'@/service/quote-detail/quote-detail-service'
));
this
.
allEntityService
.
set
(
'subject'
,
()
=>
import
(
'@/service/subject/subject-service'
));
}
/**
...
...
app_CRM/src/service/subject/subject-service-base.ts
0 → 100644
浏览文件 @
dc3f8f8e
import
{
Http
,
Util
}
from
'@/utils'
;
import
EntityService
from
'../entity-service'
;
/**
* 主题服务对象基类
*
* @export
* @class SubjectServiceBase
* @extends {EntityServie}
*/
export
default
class
SubjectServiceBase
extends
EntityService
{
/**
* Creates an instance of SubjectServiceBase.
*
* @param {*} [opts={}]
* @memberof SubjectServiceBase
*/
constructor
(
opts
:
any
=
{})
{
super
(
opts
);
}
/**
* 初始化基础数据
*
* @memberof SubjectServiceBase
*/
public
initBasicData
(){
this
.
APPLYDEKEY
=
'subject'
;
this
.
APPDEKEY
=
'subjectid'
;
this
.
APPDENAME
=
'subjects'
;
this
.
APPDETEXT
=
'title'
;
this
.
APPNAME
=
'crm'
;
this
.
SYSTEMNAME
=
'ibizbusinesscentral'
;
}
// 实体接口
/**
* Select接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
Select
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
return
Http
.
getInstance
().
get
(
`/subjects/
${
context
.
subject
}
/select`
,
isloading
);
}
/**
* Save接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
Save
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
let
masterData
:
any
=
{};
Object
.
assign
(
data
,
masterData
);
let
res
:
any
=
await
Http
.
getInstance
().
post
(
`/subjects/
${
context
.
subject
}
/save`
,
data
,
isloading
);
return
res
;
}
/**
* Create接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
Create
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
let
masterData
:
any
=
{};
Object
.
assign
(
data
,
masterData
);
if
(
!
data
.
srffrontuf
||
data
.
srffrontuf
!==
"1"
){
data
[
this
.
APPDEKEY
]
=
null
;
}
if
(
data
.
srffrontuf
){
delete
data
.
srffrontuf
;
}
let
tempContext
:
any
=
JSON
.
parse
(
JSON
.
stringify
(
context
));
let
res
:
any
=
await
Http
.
getInstance
().
post
(
`/subjects`
,
data
,
isloading
);
return
res
;
}
/**
* CheckKey接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
CheckKey
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
return
Http
.
getInstance
().
post
(
`/subjects/
${
context
.
subject
}
/checkkey`
,
data
,
isloading
);
}
/**
* Update接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
Update
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
let
masterData
:
any
=
{};
Object
.
assign
(
data
,
masterData
);
let
res
:
any
=
await
Http
.
getInstance
().
put
(
`/subjects/
${
context
.
subject
}
`
,
data
,
isloading
);
return
res
;
}
/**
* Remove接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
Remove
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
return
Http
.
getInstance
().
delete
(
`/subjects/
${
context
.
subject
}
`
,
isloading
);
}
/**
* GetDraft接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
GetDraft
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
let
res
:
any
=
await
Http
.
getInstance
().
get
(
`/subjects/getdraft`
,
isloading
);
res
.
data
.
subject
=
data
.
subject
;
return
res
;
}
/**
* Get接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
Get
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
let
res
:
any
=
await
Http
.
getInstance
().
get
(
`/subjects/
${
context
.
subject
}
`
,
isloading
);
return
res
;
}
/**
* FetchDefault接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SubjectServiceBase
*/
public
async
FetchDefault
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
let
tempData
:
any
=
JSON
.
parse
(
JSON
.
stringify
(
data
));
return
Http
.
getInstance
().
get
(
`/subjects/fetchdefault`
,
tempData
,
isloading
);
}
}
\ No newline at end of file
app_CRM/src/service/subject/subject-service.ts
0 → 100644
浏览文件 @
dc3f8f8e
import
{
Http
,
Util
}
from
'@/utils'
;
import
SubjectServiceBase
from
'./subject-service-base'
;
/**
* 主题服务对象
*
* @export
* @class SubjectService
* @extends {SubjectServiceBase}
*/
export
default
class
SubjectService
extends
SubjectServiceBase
{
/**
* Creates an instance of SubjectService.
*
* @param {*} [opts={}]
* @memberof SubjectService
*/
constructor
(
opts
:
any
=
{})
{
super
(
opts
);
}
}
\ No newline at end of file
app_CRM/src/store/modules/view-action/state.ts
浏览文件 @
dc3f8f8e
...
...
@@ -1428,6 +1428,7 @@ export const viewstate: any = {
viewaction
:
''
,
viewdatachange
:
false
,
refviews
:
[
'0fc09bf520af62b4d89aef845fc72636'
,
'01c28e25ad9d42977cb91ee890731b64'
,
],
},
...
...
app_CRM/src/uiservice/invoice/invoice-ui-service-base.ts
浏览文件 @
dc3f8f8e
...
...
@@ -95,6 +95,66 @@ export default class InvoiceUIServiceBase extends UIService {
public
initDeMainStateMap
(){
}
/**
* 新建
*
* @param {any[]} args 当前数据
* @param {any} context 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @param {*} [srfParentDeName] 父实体名称
* @returns {Promise<any>}
*/
public
async
Invoice_OpenQuickCreateView
(
args
:
any
[],
context
:
any
=
{}
,
params
:
any
=
{},
$event
?:
any
,
xData
?:
any
,
actionContext
?:
any
,
srfParentDeName
?:
string
)
{
let
data
:
any
=
{};
let
parentContext
:
any
=
{};
let
parentViewParam
:
any
=
{};
const
_this
:
any
=
actionContext
;
const
_args
:
any
[]
=
Util
.
deepCopy
(
args
);
const
actionTarget
:
string
|
null
=
'NONE'
;
if
(
_this
.
context
){
parentContext
=
_this
.
context
;
}
if
(
_this
.
viewparams
){
parentViewParam
=
_this
.
viewparams
;
}
context
=
UIActionTool
.
handleContextParam
(
actionTarget
,
_args
,
parentContext
,
parentViewParam
,
context
);
data
=
UIActionTool
.
handleActionParam
(
actionTarget
,
_args
,
parentContext
,
parentViewParam
,
params
);
context
=
Object
.
assign
({},
actionContext
.
context
,
context
);
let
parentObj
:
any
=
{
srfparentdename
:
srfParentDeName
?
srfParentDeName
:
null
,
srfparentkey
:
srfParentDeName
?
context
[
srfParentDeName
.
toLowerCase
()]:
null
};
Object
.
assign
(
data
,
parentObj
);
Object
.
assign
(
context
,
parentObj
);
let
deResParameters
:
any
[]
=
[];
const
parameters
:
any
[]
=
[
{
pathName
:
'invoices'
,
parameterName
:
'invoice'
},
];
const
openDrawer
=
(
view
:
any
,
data
:
any
)
=>
{
let
container
:
Subject
<
any
>
=
actionContext
.
$appdrawer
.
openDrawer
(
view
,
context
,
data
);
container
.
subscribe
((
result
:
any
)
=>
{
if
(
!
result
||
!
Object
.
is
(
result
.
ret
,
'OK'
))
{
return
;
}
const
_this
:
any
=
actionContext
;
if
(
window
.
opener
){
window
.
opener
.
postMessage
({
status
:
'OK'
,
identification
:
'WF'
},
Environment
.
uniteAddress
);
window
.
close
();
}
return
result
.
datas
;
});
}
const
view
:
any
=
{
viewname
:
'invoice-quick-create-view'
,
height
:
0
,
width
:
0
,
title
:
actionContext
.
$t
(
'entities.invoice.views.quickcreateview.title'
),
placement
:
'DRAWER_RIGHT'
,
};
openDrawer
(
view
,
data
);
}
/**
* 获取指定数据的重定向页面
...
...
app_CRM/src/uiservice/product/product-ui-service-base.ts
浏览文件 @
dc3f8f8e
...
...
@@ -131,14 +131,29 @@ export default class ProductUIServiceBase extends UIService {
let
deResParameters
:
any
[]
=
[];
const
parameters
:
any
[]
=
[
{
pathName
:
'products'
,
parameterName
:
'product'
},
{
pathName
:
'edit_quickcreate'
,
parameterName
:
'edit_quickcreate'
},
];
const
openIndexViewTab
=
(
data
:
any
)
=>
{
const
routePath
=
actionContext
.
$viewTool
.
buildUpRoutePath
(
actionContext
.
$route
,
context
,
deResParameters
,
parameters
,
_args
,
data
);
actionContext
.
$router
.
push
(
routePath
);
return
null
;
}
openIndexViewTab
(
data
);
const
openDrawer
=
(
view
:
any
,
data
:
any
)
=>
{
let
container
:
Subject
<
any
>
=
actionContext
.
$appdrawer
.
openDrawer
(
view
,
context
,
data
);
container
.
subscribe
((
result
:
any
)
=>
{
if
(
!
result
||
!
Object
.
is
(
result
.
ret
,
'OK'
))
{
return
;
}
const
_this
:
any
=
actionContext
;
if
(
window
.
opener
){
window
.
opener
.
postMessage
({
status
:
'OK'
,
identification
:
'WF'
},
Environment
.
uniteAddress
);
window
.
close
();
}
return
result
.
datas
;
});
}
const
view
:
any
=
{
viewname
:
'product-edit-quick-create'
,
height
:
0
,
width
:
0
,
title
:
actionContext
.
$t
(
'entities.product.views.edit_quickcreate.title'
),
placement
:
'DRAWER_RIGHT'
,
};
openDrawer
(
view
,
data
);
}
...
...
app_CRM/src/uiservice/sales-literature/sales-literature-ui-service-base.ts
浏览文件 @
dc3f8f8e
...
...
@@ -81,6 +81,7 @@ export default class SalesLiteratureUIServiceBase extends UIService {
public
initViewMap
(){
this
.
allViewMap
.
set
(
'EDITVIEW:'
,{
viewname
:
'editview'
,
srfappde
:
'salesliteratures'
});
this
.
allViewMap
.
set
(
'MDATAVIEW:'
,{
viewname
:
'gridview'
,
srfappde
:
'salesliteratures'
});
this
.
allViewMap
.
set
(
':'
,{
viewname
:
'quickcreateview'
,
srfappde
:
'salesliteratures'
});
}
/**
...
...
app_CRM/src/uiservice/subject/subject-ui-service-base.ts
0 → 100644
浏览文件 @
dc3f8f8e
import
{
Environment
}
from
'@/environments/environment'
;
import
{
UIActionTool
,
Util
}
from
'@/utils'
;
import
UIService
from
'../ui-service'
;
import
{
Subject
}
from
'rxjs'
;
import
SubjectService
from
'@/service/subject/subject-service'
;
/**
* 主题UI服务对象基类
*
* @export
* @class SubjectUIServiceBase
*/
export
default
class
SubjectUIServiceBase
extends
UIService
{
/**
* 是否支持工作流
*
* @memberof SubjectUIServiceBase
*/
public
isEnableWorkflow
:
boolean
=
false
;
/**
* 当前UI服务对应的数据服务对象
*
* @memberof SubjectUIServiceBase
*/
public
dataService
:
SubjectService
=
new
SubjectService
();
/**
* 所有关联视图
*
* @memberof SubjectUIServiceBase
*/
public
allViewMap
:
Map
<
string
,
Object
>
=
new
Map
();
/**
* 状态值
*
* @memberof SubjectUIServiceBase
*/
public
stateValue
:
number
=
0
;
/**
* 状态属性
*
* @memberof SubjectUIServiceBase
*/
public
stateField
:
string
=
""
;
/**
* 主状态属性集合
*
* @memberof SubjectUIServiceBase
*/
public
mainStateFields
:
Array
<
any
>
=
[];
/**
* 主状态集合Map
*
* @memberof SubjectUIServiceBase
*/
public
allDeMainStateMap
:
Map
<
string
,
string
>
=
new
Map
();
/**
* Creates an instance of SubjectUIServiceBase.
*
* @param {*} [opts={}]
* @memberof SubjectUIServiceBase
*/
constructor
(
opts
:
any
=
{})
{
super
(
opts
);
this
.
initViewMap
();
this
.
initDeMainStateMap
();
}
/**
* 初始化视图Map
*
* @memberof SubjectUIServiceBase
*/
public
initViewMap
(){
this
.
allViewMap
.
set
(
':'
,{
viewname
:
'pickupgridview'
,
srfappde
:
'subjects'
});
this
.
allViewMap
.
set
(
'PICKUPVIEW:'
,{
viewname
:
'pickupview'
,
srfappde
:
'subjects'
});
}
/**
* 初始化主状态集合
*
* @memberof SubjectUIServiceBase
*/
public
initDeMainStateMap
(){
}
/**
* 获取指定数据的重定向页面
*
* @param srfkey 数据主键
* @param isEnableWorkflow 重定向视图是否需要处理流程中的数据
* @memberof SubjectUIServiceBase
*/
public
async
getRDAppView
(
srfkey
:
string
,
isEnableWorkflow
:
boolean
){
this
.
isEnableWorkflow
=
isEnableWorkflow
;
// 进行数据查询
let
result
:
any
=
await
this
.
dataService
.
Get
({
subject
:
srfkey
});
const
curData
:
any
=
result
.
data
;
//判断当前数据模式,默认为true,todo
const
iRealDEModel
:
boolean
=
true
;
let
bDataInWF
:
boolean
=
false
;
let
bWFMode
:
any
=
false
;
// 计算数据模式
if
(
this
.
isEnableWorkflow
)
{
bDataInWF
=
await
this
.
dataService
.
testDataInWF
({
stateValue
:
this
.
stateValue
,
stateField
:
this
.
stateField
},
curData
);
if
(
bDataInWF
)
{
bDataInWF
=
true
;
bWFMode
=
await
this
.
dataService
.
testUserExistWorklist
(
null
,
curData
);
}
}
let
strPDTViewParam
:
string
=
await
this
.
getDESDDEViewPDTParam
(
curData
,
bDataInWF
,
bWFMode
);
//若不是当前数据模式,处理strPDTViewParam,todo
//查找视图
//返回视图
return
this
.
allViewMap
.
get
(
strPDTViewParam
);
}
/**
* 获取实际的数据类型
*
* @memberof SubjectUIServiceBase
*/
public
getRealDEType
(
entity
:
any
){
}
/**
* 获取实体单数据实体视图预定义参数
*
* @param curData 当前数据
* @param bDataInWF 是否有数据在工作流中
* @param bWFMode 是否工作流模式
* @memberof SubjectUIServiceBase
*/
public
async
getDESDDEViewPDTParam
(
curData
:
any
,
bDataInWF
:
boolean
,
bWFMode
:
boolean
){
let
strPDTParam
:
string
=
''
;
if
(
bDataInWF
)
{
// 判断数据是否在流程中
}
//多表单,todo
const
isEnableMultiForm
:
boolean
=
false
;
const
multiFormDEField
:
string
|
null
=
null
;
if
(
isEnableMultiForm
&&
multiFormDEField
)
{
const
objFormValue
:
string
=
curData
[
multiFormDEField
];
if
(
!
Environment
.
isAppMode
){
return
'MOBEDITVIEW'
+
objFormValue
;
}
return
'EDITVIEW'
+
objFormValue
;
}
if
(
!
Environment
.
isAppMode
){
if
(
this
.
getDEMainStateTag
(
curData
)){
return
`MOBEDITVIEW:MSTAG:
${
await
this
.
getDEMainStateTag
(
curData
)}
`
;
}
return
'MOBEDITVIEW:'
;
}
if
(
this
.
getDEMainStateTag
(
curData
)){
return
`EDITVIEW:MSTAG:
${
await
this
.
getDEMainStateTag
(
curData
)}
`
;
}
return
'EDITVIEW:'
;
}
/**
* 获取数据对象的主状态标识
*
* @param curData 当前数据
* @memberof SubjectUIServiceBase
*/
public
async
getDEMainStateTag
(
curData
:
any
){
if
(
this
.
mainStateFields
.
length
===
0
)
return
null
;
this
.
mainStateFields
.
forEach
((
singleMainField
:
any
)
=>
{
if
(
!
(
singleMainField
in
curData
)){
console
.
error
(
`当前数据对象不包含属性singleMainField,可能会发生错误`
);
}
})
let
strTag
:
String
=
""
;
for
(
let
i
=
0
;
i
<=
1
;
i
++
)
{
let
strTag
:
string
=
(
curData
[
this
.
mainStateFields
[
0
]])?(
i
==
0
)
?
curData
[
this
.
mainStateFields
[
0
]]
:
""
:
""
;
if
(
this
.
mainStateFields
.
length
>=
2
)
{
for
(
let
j
=
0
;
j
<=
1
;
j
++
)
{
let
strTag2
:
string
=
(
curData
[
this
.
mainStateFields
[
1
]])?
`
${
strTag
}
__
${(
j
==
0
)
?
curData
[
this
.
mainStateFields
[
1
]]
:
""
}
`
:
strTag
;
if
(
this
.
mainStateFields
.
length
>=
3
)
{
for
(
let
k
=
0
;
k
<=
1
;
k
++
)
{
let
strTag3
:
string
=
(
curData
[
this
.
mainStateFields
[
2
]])?
`
${
strTag2
}
__
${(
k
==
0
)
?
curData
[
this
.
mainStateFields
[
2
]]
:
""
}
`
:
strTag2
;
// 判断是否存在
return
this
.
allDeMainStateMap
.
get
(
strTag3
);
}
}
else
{
return
this
.
allDeMainStateMap
.
get
(
strTag2
);
}
}
}
else
{
return
this
.
allDeMainStateMap
.
get
(
strTag
);
}
}
return
null
;
}
}
\ No newline at end of file
app_CRM/src/uiservice/subject/subject-ui-service.ts
0 → 100644
浏览文件 @
dc3f8f8e
import
SubjectUIServiceBase
from
'./subject-ui-service-base'
;
/**
* 主题UI服务对象
*
* @export
* @class SubjectUIService
*/
export
default
class
SubjectUIService
extends
SubjectUIServiceBase
{
/**
* Creates an instance of SubjectUIService.
*
* @param {*} [opts={}]
* @memberof SubjectUIService
*/
constructor
(
opts
:
any
=
{})
{
super
(
opts
);
}
}
\ No newline at end of file
app_CRM/src/uiservice/ui-service-register.ts
浏览文件 @
dc3f8f8e
...
...
@@ -77,6 +77,7 @@ export class UIServiceRegister {
this
.
allUIService
.
set
(
'account'
,
()
=>
import
(
'@/uiservice/account/account-ui-service'
));
this
.
allUIService
.
set
(
'salesorder'
,
()
=>
import
(
'@/uiservice/sales-order/sales-order-ui-service'
));
this
.
allUIService
.
set
(
'quotedetail'
,
()
=>
import
(
'@/uiservice/quote-detail/quote-detail-ui-service'
));
this
.
allUIService
.
set
(
'subject'
,
()
=>
import
(
'@/uiservice/subject/subject-ui-service'
));
}
/**
...
...
app_CRM/src/widgets/product/main-grid/main-grid-base.tsx
浏览文件 @
dc3f8f8e
...
...
@@ -71,9 +71,16 @@ export class MainGridBase extends GridControllerBase {
util
:
'PX'
},
{
name
:
'producttypecode'
,
label
:
'产品类型'
,
langtag
:
'entities.product.main_grid.columns.producttypecode'
,
name
:
'validfromdate'
,
label
:
'有效期的开始日期'
,
langtag
:
'entities.product.main_grid.columns.validfromdate'
,
show
:
true
,
util
:
'PX'
},
{
name
:
'validtodate'
,
label
:
'有效期的结束日期'
,
langtag
:
'entities.product.main_grid.columns.validtodate'
,
show
:
true
,
util
:
'PX'
},
...
...
@@ -113,7 +120,8 @@ export class MainGridBase extends GridControllerBase {
public
hasRowEdit
:
any
=
{
'productname'
:
false
,
'productnumber'
:
false
,
'producttypecode'
:
false
,
'validfromdate'
:
false
,
'validtodate'
:
false
,
};
/**
...
...
app_CRM/src/widgets/product/main-grid/main-grid-model.ts
浏览文件 @
dc3f8f8e
...
...
@@ -26,16 +26,6 @@ export default class MainModel {
]
}
else
{
return
[
{
name
:
'defaultuomid'
,
prop
:
'defaultuomid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'parentproductid'
,
prop
:
'parentproductid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'defaultuomscheduleid'
,
prop
:
'defaultuomscheduleid'
,
...
...
@@ -51,36 +41,51 @@ export default class MainModel {
prop
:
'productnumber'
,
dataType
:
'TEXT'
,
},
{
name
:
'subjectid'
,
prop
:
'subjectid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'pricelevelid'
,
prop
:
'pricelevelid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'producttypecode'
,
prop
:
'producttypecode'
,
dataType
:
'SSCODELIST'
,
},
{
name
:
'srfmajortext'
,
prop
:
'productname'
,
dataType
:
'TEXT'
,
},
{
name
:
'srf
dataaccaction
'
,
name
:
'srf
key
'
,
prop
:
'productid'
,
dataType
:
'GUID'
,
},
{
name
:
'srf
key
'
,
name
:
'srf
dataaccaction
'
,
prop
:
'productid'
,
dataType
:
'GUID'
,
},
{
name
:
'validfromdate'
,
prop
:
'validfromdate'
,
dataType
:
'DATETIME'
,
},
{
name
:
'defaultuomid'
,
prop
:
'defaultuomid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'parentproductid'
,
prop
:
'parentproductid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'validtodate'
,
prop
:
'validtodate'
,
dataType
:
'DATETIME'
,
},
{
name
:
'pricelevelid'
,
prop
:
'pricelevelid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'subjectid'
,
prop
:
'subjectid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'productname'
,
prop
:
'productname'
,
...
...
app_CRM/src/widgets/product/main-grid/main-grid.html
浏览文件 @
dc3f8f8e
...
...
@@ -47,17 +47,27 @@
</template>
</el-table-column>
</template>
<template
v-if=
"getColumnState('
producttypecod
e')"
>
<el-table-column
show-overflow-tooltip
:prop=
"'
producttypecode'"
:label=
"$t('entities.product.main_grid.columns.producttypecode')"
:width=
"15
0"
:align=
"'left'"
:sortable=
"'custom'"
>
<template
v-if=
"getColumnState('
validfromdat
e')"
>
<el-table-column
show-overflow-tooltip
:prop=
"'
validfromdate'"
:label=
"$t('entities.product.main_grid.columns.validfromdate')"
:width=
"18
0"
:align=
"'left'"
:sortable=
"'custom'"
>
<template
v-slot:header=
"{column}"
>
<span
class=
"column-header "
>
{{$t('entities.product.main_grid.columns.
producttypecod
e')}}
{{$t('entities.product.main_grid.columns.
validfromdat
e')}}
</span>
</template>
<template
v-slot=
"{row,column,$index}"
>
<template
>
<codelist
:value=
"row.producttypecode"
tag=
'Product__ProductTypeCode'
codelistType=
'STATIC'
></codelist>
</template>
<app-format-data
format=
"YYYY-MM-DD hh:mm:ss"
:data=
"row.validfromdate"
></app-format-data>
</template>
</el-table-column>
</template>
<template
v-if=
"getColumnState('validtodate')"
>
<el-table-column
show-overflow-tooltip
:prop=
"'validtodate'"
:label=
"$t('entities.product.main_grid.columns.validtodate')"
:width=
"180"
:align=
"'left'"
:sortable=
"'custom'"
>
<template
v-slot:header=
"{column}"
>
<span
class=
"column-header "
>
{{$t('entities.product.main_grid.columns.validtodate')}}
</span>
</template>
<template
v-slot=
"{row,column,$index}"
>
<app-format-data
format=
"YYYY-MM-DD hh:mm:ss"
:data=
"row.validtodate"
></app-format-data>
</template>
</el-table-column>
</template>
...
...
app_CRM/src/widgets/product/quick-create-form/quick-create-form-base.tsx
0 → 100644
浏览文件 @
dc3f8f8e
import
{
Prop
,
Provide
,
Emit
,
Model
}
from
'vue-property-decorator'
;
import
{
Subject
,
Subscription
}
from
'rxjs'
;
import
{
Watch
,
EditFormControlBase
}
from
'@/studio-core'
;
import
ProductService
from
'@/service/product/product-service'
;
import
QuickCreateService
from
'./quick-create-form-service'
;
import
{
FormButtonModel
,
FormPageModel
,
FormItemModel
,
FormDRUIPartModel
,
FormPartModel
,
FormGroupPanelModel
,
FormIFrameModel
,
FormRowItemModel
,
FormTabPageModel
,
FormTabPanelModel
,
FormUserControlModel
}
from
'@/model/form-detail'
;
/**
* form部件基类
*
* @export
* @class EditFormControlBase
* @extends {QuickCreateEditFormBase}
*/
export
class
QuickCreateEditFormBase
extends
EditFormControlBase
{
/**
* 建构部件服务对象
*
* @type {QuickCreateService}
* @memberof QuickCreateEditFormBase
*/
public
service
:
QuickCreateService
=
new
QuickCreateService
({
$store
:
this
.
$store
});
/**
* 实体服务对象
*
* @type {ProductService}
* @memberof QuickCreateEditFormBase
*/
public
appEntityService
:
ProductService
=
new
ProductService
({
$store
:
this
.
$store
});
/**
* 应用实体名称
*
* @protected
* @type {string}
* @memberof QuickCreateEditFormBase
*/
protected
appDeName
:
string
=
'product'
;
/**
* 表单数据对象
*
* @type {*}
* @memberof QuickCreateEditFormBase
*/
public
data
:
any
=
{
srfupdatedate
:
null
,
srforikey
:
null
,
srfkey
:
null
,
srfmajortext
:
null
,
srftempmode
:
null
,
srfuf
:
null
,
srfdeid
:
null
,
srfsourcekey
:
null
,
productnumber
:
null
,
productname
:
null
,
validfromdate
:
null
,
validtodate
:
null
,
productid
:
null
,
product
:
null
,
};
/**
* 属性值规则
*
* @type {*}
* @memberof QuickCreateEditFormBase
*/
public
rules
:
any
=
{
srfupdatedate
:
[
{
required
:
false
,
type
:
'string'
,
message
:
'更新时间 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
'更新时间 值不能为空'
,
trigger
:
'blur'
},
],
srforikey
:
[
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'blur'
},
],
srfkey
:
[
{
required
:
false
,
type
:
'string'
,
message
:
'产品 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
'产品 值不能为空'
,
trigger
:
'blur'
},
],
srfmajortext
:
[
{
required
:
false
,
type
:
'string'
,
message
:
'产品名称 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
'产品名称 值不能为空'
,
trigger
:
'blur'
},
],
srftempmode
:
[
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'blur'
},
],
srfuf
:
[
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'blur'
},
],
srfdeid
:
[
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'blur'
},
],
srfsourcekey
:
[
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
' 值不能为空'
,
trigger
:
'blur'
},
],
productnumber
:
[
{
required
:
true
,
type
:
'string'
,
message
:
'产品 ID 值不能为空'
,
trigger
:
'change'
},
{
required
:
true
,
type
:
'string'
,
message
:
'产品 ID 值不能为空'
,
trigger
:
'blur'
},
],
productname
:
[
{
required
:
true
,
type
:
'string'
,
message
:
'产品名称 值不能为空'
,
trigger
:
'change'
},
{
required
:
true
,
type
:
'string'
,
message
:
'产品名称 值不能为空'
,
trigger
:
'blur'
},
],
validfromdate
:
[
{
required
:
false
,
type
:
'string'
,
message
:
'有效期的开始日期 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
'有效期的开始日期 值不能为空'
,
trigger
:
'blur'
},
],
validtodate
:
[
{
required
:
false
,
type
:
'string'
,
message
:
'有效期的结束日期 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
'有效期的结束日期 值不能为空'
,
trigger
:
'blur'
},
],
productid
:
[
{
required
:
false
,
type
:
'string'
,
message
:
'产品 值不能为空'
,
trigger
:
'change'
},
{
required
:
false
,
type
:
'string'
,
message
:
'产品 值不能为空'
,
trigger
:
'blur'
},
],
}
/**
* 详情模型集合
*
* @type {*}
* @memberof QuickCreateEditFormBase
*/
public
detailsModel
:
any
=
{
group1
:
new
FormGroupPanelModel
({
caption
:
'产品基本信息'
,
detailType
:
'GROUPPANEL'
,
name
:
'group1'
,
visible
:
true
,
isShowCaption
:
false
,
form
:
this
,
uiActionGroup
:
{
caption
:
''
,
langbase
:
'entities.product.quickcreate_form'
,
extractMode
:
'ITEM'
,
details
:
[]
}
}),
formpage1
:
new
FormPageModel
({
caption
:
'基本信息'
,
detailType
:
'FORMPAGE'
,
name
:
'formpage1'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
}),
srfupdatedate
:
new
FormItemModel
({
caption
:
'更新时间'
,
detailType
:
'FORMITEM'
,
name
:
'srfupdatedate'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
0
}),
srforikey
:
new
FormItemModel
({
caption
:
''
,
detailType
:
'FORMITEM'
,
name
:
'srforikey'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
srfkey
:
new
FormItemModel
({
caption
:
'产品'
,
detailType
:
'FORMITEM'
,
name
:
'srfkey'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
1
}),
srfmajortext
:
new
FormItemModel
({
caption
:
'产品名称'
,
detailType
:
'FORMITEM'
,
name
:
'srfmajortext'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
srftempmode
:
new
FormItemModel
({
caption
:
''
,
detailType
:
'FORMITEM'
,
name
:
'srftempmode'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
srfuf
:
new
FormItemModel
({
caption
:
''
,
detailType
:
'FORMITEM'
,
name
:
'srfuf'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
srfdeid
:
new
FormItemModel
({
caption
:
''
,
detailType
:
'FORMITEM'
,
name
:
'srfdeid'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
srfsourcekey
:
new
FormItemModel
({
caption
:
''
,
detailType
:
'FORMITEM'
,
name
:
'srfsourcekey'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
productnumber
:
new
FormItemModel
({
caption
:
'产品 ID'
,
detailType
:
'FORMITEM'
,
name
:
'productnumber'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
productname
:
new
FormItemModel
({
caption
:
'产品名称'
,
detailType
:
'FORMITEM'
,
name
:
'productname'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
validfromdate
:
new
FormItemModel
({
caption
:
'有效期的开始日期'
,
detailType
:
'FORMITEM'
,
name
:
'validfromdate'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
validtodate
:
new
FormItemModel
({
caption
:
'有效期的结束日期'
,
detailType
:
'FORMITEM'
,
name
:
'validtodate'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
3
}),
productid
:
new
FormItemModel
({
caption
:
'产品'
,
detailType
:
'FORMITEM'
,
name
:
'productid'
,
visible
:
true
,
isShowCaption
:
true
,
form
:
this
,
disabled
:
false
,
enableCond
:
1
}),
};
}
\ No newline at end of file
app_CRM/src/widgets/product/quick-create-form/quick-create-form-model.ts
0 → 100644
浏览文件 @
dc3f8f8e
/**
* QuickCreate 部件模型
*
* @export
* @class QuickCreateModel
*/
export
default
class
QuickCreateModel
{
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof QuickCreateModel
*/
public
getDataItems
():
any
[]
{
return
[
{
name
:
'srfwfmemo'
,
prop
:
'srfwfmemo'
,
dataType
:
'TEXT'
,
},
// 前端新增修改标识,新增为"0",修改为"1"或未设值
{
name
:
'srffrontuf'
,
prop
:
'srffrontuf'
,
dataType
:
'TEXT'
,
},
{
name
:
'srfupdatedate'
,
prop
:
'updatedate'
,
dataType
:
'DATETIME'
,
},
{
name
:
'srforikey'
,
},
{
name
:
'srfkey'
,
prop
:
'productid'
,
dataType
:
'GUID'
,
},
{
name
:
'srfmajortext'
,
prop
:
'productname'
,
dataType
:
'TEXT'
,
},
{
name
:
'srftempmode'
,
},
{
name
:
'srfuf'
,
},
{
name
:
'srfdeid'
,
},
{
name
:
'srfsourcekey'
,
},
{
name
:
'productnumber'
,
prop
:
'productnumber'
,
dataType
:
'TEXT'
,
},
{
name
:
'productname'
,
prop
:
'productname'
,
dataType
:
'TEXT'
,
},
{
name
:
'validfromdate'
,
prop
:
'validfromdate'
,
dataType
:
'DATETIME'
,
},
{
name
:
'validtodate'
,
prop
:
'validtodate'
,
dataType
:
'DATETIME'
,
},
{
name
:
'productid'
,
prop
:
'productid'
,
dataType
:
'GUID'
,
},
{
name
:
'product'
,
prop
:
'productid'
,
dataType
:
'FONTKEY'
,
},
]
}
}
\ No newline at end of file
app_CRM/src/widgets/product/quick-create-form/quick-create-form-service.ts
0 → 100644
浏览文件 @
dc3f8f8e
import
{
Http
,
Util
,
Errorlog
}
from
'@/utils'
;
import
ControlService
from
'@/widgets/control-service'
;
import
ProductService
from
'@/service/product/product-service'
;
import
QuickCreateModel
from
'./quick-create-form-model'
;
/**
* QuickCreate 部件服务对象
*
* @export
* @class QuickCreateService
*/
export
default
class
QuickCreateService
extends
ControlService
{
/**
* 产品服务对象
*
* @type {ProductService}
* @memberof QuickCreateService
*/
public
appEntityService
:
ProductService
=
new
ProductService
({
$store
:
this
.
getStore
()
});
/**
* 设置从数据模式
*
* @type {boolean}
* @memberof QuickCreateService
*/
public
setTempMode
(){
this
.
isTempMode
=
false
;
}
/**
* Creates an instance of QuickCreateService.
*
* @param {*} [opts={}]
* @memberof QuickCreateService
*/
constructor
(
opts
:
any
=
{})
{
super
(
opts
);
this
.
model
=
new
QuickCreateModel
();
}
/**
* 处理数据
*
* @private
* @param {Promise<any>} promise
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
private
doItems
(
promise
:
Promise
<
any
>
,
deKeyField
:
string
,
deName
:
string
):
Promise
<
any
>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
promise
.
then
((
response
:
any
)
=>
{
if
(
response
&&
response
.
status
===
200
)
{
const
data
=
response
.
data
;
data
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
item
[
deName
]
=
item
[
deKeyField
];
data
[
index
]
=
item
;
});
resolve
(
data
);
}
else
{
reject
([])
}
}).
catch
((
response
:
any
)
=>
{
reject
([])
});
});
}
/**
* 获取跨实体数据集合
*
* @param {string} serviceName 服务名称
* @param {string} interfaceName 接口名称
* @param {*} data
* @param {boolean} [isloading]
* @returns {Promise<any[]>}
* @memberof QuickCreateService
*/
@
Errorlog
public
getItems
(
serviceName
:
string
,
interfaceName
:
string
,
context
:
any
=
{},
data
:
any
,
isloading
?:
boolean
):
Promise
<
any
[]
>
{
return
Promise
.
reject
([])
}
/**
* 启动工作流
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @param {*} [localdata]
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
@
Errorlog
public
wfstart
(
action
:
string
,
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
,
localdata
?:
any
):
Promise
<
any
>
{
data
=
this
.
handleWFData
(
data
);
context
=
this
.
handleRequestData
(
action
,
context
,
data
).
context
;
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
let
result
:
Promise
<
any
>
;
const
_appEntityService
:
any
=
this
.
appEntityService
;
if
(
_appEntityService
[
action
]
&&
_appEntityService
[
action
]
instanceof
Function
)
{
result
=
_appEntityService
[
action
](
context
,
data
,
isloading
,
localdata
);
}
else
{
result
=
this
.
appEntityService
.
WFStart
(
context
,
data
,
isloading
,
localdata
);
}
result
.
then
((
response
)
=>
{
this
.
handleResponse
(
action
,
response
);
resolve
(
response
);
}).
catch
(
response
=>
{
reject
(
response
);
});
});
}
/**
* 提交工作流
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @param {*} [localdata]
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
@
Errorlog
public
wfsubmit
(
action
:
string
,
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
,
localdata
?:
any
):
Promise
<
any
>
{
data
=
this
.
handleWFData
(
data
,
true
);
context
=
this
.
handleRequestData
(
action
,
context
,
data
,
true
).
context
;
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
let
result
:
Promise
<
any
>
;
const
_appEntityService
:
any
=
this
.
appEntityService
;
if
(
_appEntityService
[
action
]
&&
_appEntityService
[
action
]
instanceof
Function
)
{
result
=
_appEntityService
[
action
](
context
,
data
,
isloading
,
localdata
);
}
else
{
result
=
this
.
appEntityService
.
WFSubmit
(
context
,
data
,
isloading
,
localdata
);
}
result
.
then
((
response
)
=>
{
this
.
handleResponse
(
action
,
response
);
resolve
(
response
);
}).
catch
(
response
=>
{
reject
(
response
);
});
});
}
/**
* 添加数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
@
Errorlog
public
add
(
action
:
string
,
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
const
{
data
:
Data
,
context
:
Context
}
=
this
.
handleRequestData
(
action
,
context
,
data
);
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
let
result
:
Promise
<
any
>
;
const
_appEntityService
:
any
=
this
.
appEntityService
;
if
(
_appEntityService
[
action
]
&&
_appEntityService
[
action
]
instanceof
Function
)
{
result
=
_appEntityService
[
action
](
Context
,
Data
,
isloading
);
}
else
{
result
=
this
.
appEntityService
.
Create
(
Context
,
Data
,
isloading
);
}
result
.
then
((
response
)
=>
{
this
.
handleResponse
(
action
,
response
);
resolve
(
response
);
}).
catch
(
response
=>
{
reject
(
response
);
});
});
}
/**
* 删除数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
@
Errorlog
public
delete
(
action
:
string
,
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
const
{
data
:
Data
,
context
:
Context
}
=
this
.
handleRequestData
(
action
,
context
,
data
);
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
let
result
:
Promise
<
any
>
;
const
_appEntityService
:
any
=
this
.
appEntityService
;
if
(
_appEntityService
[
action
]
&&
_appEntityService
[
action
]
instanceof
Function
)
{
result
=
_appEntityService
[
action
](
Context
,
Data
,
isloading
);
}
else
{
result
=
this
.
appEntityService
.
Remove
(
Context
,
Data
,
isloading
);
}
result
.
then
((
response
)
=>
{
resolve
(
response
);
}).
catch
(
response
=>
{
reject
(
response
);
});
});
}
/**
* 修改数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
@
Errorlog
public
update
(
action
:
string
,
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
const
{
data
:
Data
,
context
:
Context
}
=
this
.
handleRequestData
(
action
,
context
,
data
);
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
let
result
:
Promise
<
any
>
;
const
_appEntityService
:
any
=
this
.
appEntityService
;
if
(
_appEntityService
[
action
]
&&
_appEntityService
[
action
]
instanceof
Function
)
{
result
=
_appEntityService
[
action
](
Context
,
Data
,
isloading
);
}
else
{
result
=
this
.
appEntityService
.
Update
(
Context
,
Data
,
isloading
);
}
result
.
then
((
response
)
=>
{
this
.
handleResponse
(
action
,
response
);
resolve
(
response
);
}).
catch
(
response
=>
{
reject
(
response
);
});
});
}
/**
* 查询数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
@
Errorlog
public
get
(
action
:
string
,
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
const
{
data
:
Data
,
context
:
Context
}
=
this
.
handleRequestData
(
action
,
context
,
data
);
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
let
result
:
Promise
<
any
>
;
const
_appEntityService
:
any
=
this
.
appEntityService
;
if
(
_appEntityService
[
action
]
&&
_appEntityService
[
action
]
instanceof
Function
)
{
result
=
_appEntityService
[
action
](
Context
,
Data
,
isloading
);
}
else
{
result
=
this
.
appEntityService
.
Get
(
Context
,
Data
,
isloading
);
}
result
.
then
((
response
)
=>
{
this
.
handleResponse
(
action
,
response
);
resolve
(
response
);
}).
catch
(
response
=>
{
reject
(
response
);
});
});
}
/**
* 加载草稿
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
@
Errorlog
public
loadDraft
(
action
:
string
,
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
const
{
data
:
Data
,
context
:
Context
}
=
this
.
handleRequestData
(
action
,
context
,
data
);
//仿真主键数据
const
PrimaryKey
=
Util
.
createUUID
();
Data
.
productid
=
PrimaryKey
;
Data
.
product
=
PrimaryKey
;
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
let
result
:
Promise
<
any
>
;
const
_appEntityService
:
any
=
this
.
appEntityService
;
if
(
_appEntityService
[
action
]
&&
_appEntityService
[
action
]
instanceof
Function
)
{
result
=
_appEntityService
[
action
](
Context
,
Data
,
isloading
);
}
else
{
result
=
this
.
appEntityService
.
GetDraft
(
Context
,
Data
,
isloading
);
}
result
.
then
((
response
)
=>
{
response
.
data
.
productid
=
PrimaryKey
;
this
.
handleResponse
(
action
,
response
,
true
);
resolve
(
response
);
}).
catch
(
response
=>
{
reject
(
response
);
});
});
}
/**
* 前台逻辑
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof QuickCreateService
*/
@
Errorlog
public
frontLogic
(
action
:
string
,
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
const
{
data
:
Data
,
context
:
Context
}
=
this
.
handleRequestData
(
action
,
context
,
data
);
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
let
result
:
Promise
<
any
>
;
const
_appEntityService
:
any
=
this
.
appEntityService
;
if
(
_appEntityService
[
action
]
&&
_appEntityService
[
action
]
instanceof
Function
)
{
result
=
_appEntityService
[
action
](
Context
,
Data
,
isloading
);
}
else
{
return
Promise
.
reject
({
status
:
500
,
data
:
{
title
:
'失败'
,
message
:
'系统异常'
}
});
}
result
.
then
((
response
)
=>
{
this
.
handleResponse
(
action
,
response
,
true
);
resolve
(
response
);
}).
catch
(
response
=>
{
reject
(
response
);
});
})
}
/**
* 处理请求数据
*
* @param action 行为
* @param data 数据
* @memberof QuickCreateService
*/
public
handleRequestData
(
action
:
string
,
context
:
any
,
data
:
any
=
{},
isMerge
:
boolean
=
false
){
let
mode
:
any
=
this
.
getMode
();
if
(
!
mode
&&
mode
.
getDataItems
instanceof
Function
)
{
return
data
;
}
let
formItemItems
:
any
[]
=
mode
.
getDataItems
();
let
requestData
:
any
=
{};
if
(
isMerge
&&
(
data
&&
data
.
viewparams
)){
Object
.
assign
(
requestData
,
data
.
viewparams
);
}
formItemItems
.
forEach
((
item
:
any
)
=>
{
if
(
item
&&
item
.
dataType
&&
Object
.
is
(
item
.
dataType
,
'FONTKEY'
)){
if
(
item
&&
item
.
prop
){
requestData
[
item
.
prop
]
=
context
[
item
.
name
];
}
}
else
{
if
(
item
&&
item
.
prop
){
requestData
[
item
.
prop
]
=
data
[
item
.
name
];
}
}
});
let
tempContext
:
any
=
JSON
.
parse
(
JSON
.
stringify
(
context
));
if
(
tempContext
&&
tempContext
.
srfsessionid
){
tempContext
.
srfsessionkey
=
tempContext
.
srfsessionid
;
delete
tempContext
.
srfsessionid
;
}
return
{
context
:
tempContext
,
data
:
requestData
};
}
}
\ No newline at end of file
app_CRM/src/widgets/product/quick-create-form/quick-create-form.html
0 → 100644
浏览文件 @
dc3f8f8e
<i-form
:model=
"this.data"
class=
'app-form'
ref=
'form'
id=
'product_quickcreate'
style=
""
>
<input
style=
"display:none;"
/>
<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.product.quickcreate_form.details.group1')"
:isShowCaption=
"false"
uiStyle=
"DEFAULT"
:titleBarCloseMode=
"0"
:isInfoGroupMode=
"false"
>
<row>
<i-col
v-show=
"detailsModel.productnumber.visible"
:style=
"{}"
:lg=
"{ span: 24, offset: 0 }"
>
<app-form-item
name=
'productnumber'
:itemRules=
"this.rules.productnumber"
class=
''
:caption=
"$t('entities.product.quickcreate_form.details.productnumber')"
uiStyle=
"DEFAULT"
:labelWidth=
"130"
:isShowCaption=
"true"
:error=
"detailsModel.productnumber.error"
:isEmptyCaption=
"false"
labelPos=
"LEFT"
>
<input-box
v-model=
"data.productnumber"
@
enter=
"onEnter($event)"
unit=
""
:disabled=
"detailsModel.productnumber.disabled"
type=
'text'
style=
""
></input-box>
</app-form-item>
</i-col>
<i-col
v-show=
"detailsModel.productname.visible"
:style=
"{}"
:lg=
"{ span: 24, offset: 0 }"
>
<app-form-item
name=
'productname'
:itemRules=
"this.rules.productname"
class=
''
:caption=
"$t('entities.product.quickcreate_form.details.productname')"
uiStyle=
"DEFAULT"
:labelWidth=
"130"
:isShowCaption=
"true"
:error=
"detailsModel.productname.error"
:isEmptyCaption=
"false"
labelPos=
"LEFT"
>
<input-box
v-model=
"data.productname"
@
enter=
"onEnter($event)"
unit=
""
:disabled=
"detailsModel.productname.disabled"
type=
'text'
style=
""
></input-box>
</app-form-item>
</i-col>
<i-col
v-show=
"detailsModel.validfromdate.visible"
:style=
"{}"
:lg=
"{ span: 24, offset: 0 }"
>
<app-form-item
name=
'validfromdate'
:itemRules=
"this.rules.validfromdate"
class=
''
:caption=
"$t('entities.product.quickcreate_form.details.validfromdate')"
uiStyle=
"DEFAULT"
:labelWidth=
"130"
:isShowCaption=
"true"
:error=
"detailsModel.validfromdate.error"
:isEmptyCaption=
"false"
labelPos=
"LEFT"
>
<date-picker
type=
"datetime"
:transfer=
"true"
format=
"yyyy-MM-dd HH:mm:ss"
placeholder=
"请选择时间..."
:value=
"data.validfromdate"
:disabled=
"detailsModel.validfromdate.disabled"
style=
"min-width: 150px; width:160px;"
@
on-change=
"(val1, val2) => { this.data.validfromdate = val1 }"
></date-picker>
</app-form-item>
</i-col>
<i-col
v-show=
"detailsModel.validtodate.visible"
:style=
"{}"
:lg=
"{ span: 24, offset: 0 }"
>
<app-form-item
name=
'validtodate'
:itemRules=
"this.rules.validtodate"
class=
''
:caption=
"$t('entities.product.quickcreate_form.details.validtodate')"
uiStyle=
"DEFAULT"
:labelWidth=
"130"
:isShowCaption=
"true"
:error=
"detailsModel.validtodate.error"
:isEmptyCaption=
"false"
labelPos=
"LEFT"
>
<date-picker
type=
"datetime"
:transfer=
"true"
format=
"yyyy-MM-dd HH:mm:ss"
placeholder=
"请选择时间..."
:value=
"data.validtodate"
:disabled=
"detailsModel.validtodate.disabled"
style=
"min-width: 150px; width:160px;"
@
on-change=
"(val1, val2) => { this.data.validtodate = val1 }"
></date-picker>
</app-form-item>
</i-col>
</row>
</app-form-group>
</i-col>
</row>
</i-form>
\ No newline at end of file
app_CRM/src/widgets/product/quick-create-form/quick-create-form.vue
0 → 100644
浏览文件 @
dc3f8f8e
<
template
src=
"./quick-create-form.html"
/>
<script
lang=
'tsx'
>
import
{ Component } from 'vue-property-decorator';
import { VueLifeCycleProcessing } from '@/studio-core';
import { QuickCreateEditFormBase } from './quick-create-form-base';
/**
* form部件
*
* @export
* @class QuickCreateEditForm
* @extends {QuickCreateEditFormBase}
*/
@Component({
components: {
}
})
@VueLifeCycleProcessing()
export default class QuickCreateEditForm extends QuickCreateEditFormBase { }
</script>
app_CRM/src/widgets/sales-literature/main-grid/main-grid-base.tsx
浏览文件 @
dc3f8f8e
...
...
@@ -64,16 +64,16 @@ export class MainGridBase extends GridControllerBase {
util
:
'PX'
},
{
name
:
'
updateman
'
,
label
:
'
更新人
'
,
langtag
:
'entities.salesliterature.main_grid.columns.
updateman
'
,
name
:
'
subjectname
'
,
label
:
'
主题
'
,
langtag
:
'entities.salesliterature.main_grid.columns.
subjectname
'
,
show
:
true
,
util
:
'PX'
},
{
name
:
'
updatedat
e'
,
label
:
'
更新时间
'
,
langtag
:
'entities.salesliterature.main_grid.columns.
updatedat
e'
,
name
:
'
literaturetypecod
e'
,
label
:
'
类型
'
,
langtag
:
'entities.salesliterature.main_grid.columns.
literaturetypecod
e'
,
show
:
true
,
util
:
'PX'
},
...
...
@@ -112,8 +112,8 @@ export class MainGridBase extends GridControllerBase {
*/
public
hasRowEdit
:
any
=
{
'salesliteraturename'
:
false
,
'
updateman
'
:
false
,
'
updatedat
e'
:
false
,
'
subjectname
'
:
false
,
'
literaturetypecod
e'
:
false
,
};
/**
...
...
app_CRM/src/widgets/sales-literature/main-grid/main-grid-model.ts
浏览文件 @
dc3f8f8e
...
...
@@ -26,26 +26,26 @@ export default class MainModel {
]
}
else
{
return
[
{
name
:
'literaturetypecode'
,
prop
:
'literaturetypecode'
,
dataType
:
'SSCODELIST'
,
},
{
name
:
'salesliteraturename'
,
prop
:
'salesliteraturename'
,
dataType
:
'TEXT'
,
},
{
name
:
'
updateman
'
,
prop
:
'
updateman
'
,
dataType
:
'TEXT'
,
name
:
'
subjectname
'
,
prop
:
'
subjectname
'
,
dataType
:
'
PICKUP
TEXT'
,
},
{
name
:
'transactioncurrencyid'
,
prop
:
'transactioncurrencyid'
,
dataType
:
'PICKUP'
,
},
{
name
:
'updatedate'
,
prop
:
'updatedate'
,
dataType
:
'DATETIME'
,
},
{
name
:
'subjectid'
,
prop
:
'subjectid'
,
...
...
app_CRM/src/widgets/sales-literature/main-grid/main-grid.html
浏览文件 @
dc3f8f8e
...
...
@@ -24,7 +24,7 @@
<el-table-column
align=
"center"
type=
'selection'
:width=
"checkboxColWidth"
></el-table-column>
</template>
<template
v-if=
"getColumnState('salesliteraturename')"
>
<el-table-column
show-overflow-tooltip
:prop=
"'salesliteraturename'"
:label=
"$t('entities.salesliterature.main_grid.columns.salesliteraturename')"
:width=
"1
5
0"
:align=
"'left'"
:sortable=
"'custom'"
>
<el-table-column
show-overflow-tooltip
:prop=
"'salesliteraturename'"
:label=
"$t('entities.salesliterature.main_grid.columns.salesliteraturename')"
:width=
"1
8
0"
:align=
"'left'"
:sortable=
"'custom'"
>
<template
v-slot:header=
"{column}"
>
<span
class=
"column-header "
>
{{$t('entities.salesliterature.main_grid.columns.salesliteraturename')}}
...
...
@@ -35,29 +35,29 @@
</template>
</el-table-column>
</template>
<template
v-if=
"getColumnState('
updateman
')"
>
<el-table-column
show-overflow-tooltip
:prop=
"'
updateman'"
:label=
"$t('entities.salesliterature.main_grid.columns.updateman
')"
:width=
"150"
:align=
"'left'"
:sortable=
"'custom'"
>
<template
v-if=
"getColumnState('
subjectname
')"
>
<el-table-column
show-overflow-tooltip
:prop=
"'
subjectname'"
:label=
"$t('entities.salesliterature.main_grid.columns.subjectname
')"
:width=
"150"
:align=
"'left'"
:sortable=
"'custom'"
>
<template
v-slot:header=
"{column}"
>
<span
class=
"column-header "
>
{{$t('entities.salesliterature.main_grid.columns.
updateman
')}}
{{$t('entities.salesliterature.main_grid.columns.
subjectname
')}}
</span>
</template>
<template
v-slot=
"{row,column,$index}"
>
<template
>
<codelist
:value=
"row.updateman"
tag=
'SysOperator'
codelistType=
'DYNAMIC'
></codelist>
</template>
<span>
{{row.subjectname}}
</span>
</template>
</el-table-column>
</template>
<template
v-if=
"getColumnState('
updatedat
e')"
>
<el-table-column
show-overflow-tooltip
:prop=
"'
updatedate'"
:label=
"$t('entities.salesliterature.main_grid.columns.updatedat
e')"
:width=
"150"
:align=
"'left'"
:sortable=
"'custom'"
>
<template
v-if=
"getColumnState('
literaturetypecod
e')"
>
<el-table-column
show-overflow-tooltip
:prop=
"'
literaturetypecode'"
:label=
"$t('entities.salesliterature.main_grid.columns.literaturetypecod
e')"
:width=
"150"
:align=
"'left'"
:sortable=
"'custom'"
>
<template
v-slot:header=
"{column}"
>
<span
class=
"column-header "
>
{{$t('entities.salesliterature.main_grid.columns.
updatedat
e')}}
{{$t('entities.salesliterature.main_grid.columns.
literaturetypecod
e')}}
</span>
</template>
<template
v-slot=
"{row,column,$index}"
>
<app-format-data
format=
"YYYY-MM-DD hh:mm:ss"
:data=
"row.updatedate"
></app-format-data>
<template
>
<codelist
:value=
"row.literaturetypecode"
tag=
'Salesliterature__LiteratureTypeCode'
codelistType=
'STATIC'
></codelist>
</template>
</template>
</el-table-column>
</template>
...
...
businesscentral-app/businesscentral-app-crm/src/main/resources/application-crm-prod.yml
浏览文件 @
dc3f8f8e
...
...
@@ -159,5 +159,9 @@ zuul:
path
:
/quotedetails/**
serviceId
:
ibizbusinesscentral-centralapi
stripPrefix
:
false
subject
:
path
:
/subjects/**
serviceId
:
ibizbusinesscentral-centralapi
stripPrefix
:
false
sensitive-headers
:
-
Cookie,Set-Cookie,Authorization
businesscentral-core/src/main/resources/liquibase/h2_table.xml
浏览文件 @
dc3f8f8e
...
...
@@ -880,7 +880,7 @@
<!--输出实体[SUBJECT]数据结构 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-subject-
1
-12"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-subject-
4
-12"
>
<createTable
tableName=
"SUBJECT"
>
<column
name=
"OVERRIDDENCREATEDON"
remarks=
""
type=
"DATETIME"
>
</column>
...
...
@@ -2418,7 +2418,7 @@
<!--输出实体[INVOICE]数据结构 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-invoice-3
0
-33"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-invoice-3
4
-33"
>
<createTable
tableName=
"INVOICE"
>
<column
name=
"BILLTO_LINE1"
remarks=
""
type=
"VARCHAR(250)"
>
</column>
...
...
@@ -3206,7 +3206,7 @@
<!--输出实体[CONTACT]数据结构 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-contact-2
39
-44"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-contact-2
40
-44"
>
<createTable
tableName=
"CONTACT"
>
<column
name=
"ADDRESS1_FREIGHTTERMSCODE"
remarks=
""
type=
"VARCHAR(30)"
>
</column>
...
...
@@ -3732,7 +3732,7 @@
<!--输出实体[QUOTE]数据结构 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-quote-
39
-47"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-quote-
40
-47"
>
<createTable
tableName=
"QUOTE"
>
<column
name=
"BILLTO_COUNTRY"
remarks=
""
type=
"VARCHAR(80)"
>
</column>
...
...
@@ -6343,7 +6343,7 @@
<!--输出实体[SALESLITERATURE]数据结构 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-salesliterature-
3
-73"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-salesliterature-
8
-73"
>
<createTable
tableName=
"SALESLITERATURE"
>
<column
name=
"IMPORTSEQUENCENUMBER"
remarks=
""
type=
"INT"
>
</column>
...
...
@@ -8113,7 +8113,7 @@
<!--输出实体[COMPETITOR]数据结构 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-competitor-3
5
-90"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-competitor-3
6
-90"
>
<createTable
tableName=
"COMPETITOR"
>
<column
name=
"ENTITYIMAGE"
remarks=
""
type=
"VARCHAR(100)"
>
</column>
...
...
@@ -8283,7 +8283,7 @@
<!--输出实体[PRODUCT]数据结构 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-product-
36
-91"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"tab-product-
47
-91"
>
<createTable
tableName=
"PRODUCT"
>
<column
name=
"VENDORID"
remarks=
""
type=
"VARCHAR(100)"
>
</column>
...
...
@@ -10830,7 +10830,7 @@
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"LETTER"
constraintName=
"DER1N_LETTER__TRANSACTIONCURRE"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<!--输出实体[SUBJECT]外键关系 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-subject-
1
-144"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-subject-
4
-144"
>
<addForeignKeyConstraint
baseColumnNames=
"PARENTSUBJECT"
baseTableName=
"SUBJECT"
constraintName=
"DER1N_SUBJECT__SUBJECT__PARENT"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"SUBJECTID"
referencedTableName=
"SUBJECT"
validate=
"true"
/>
</changeSet>
<!--输出实体[BULKOPERATIONLOG]外键关系 -->
...
...
@@ -10977,19 +10977,19 @@
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"SLAKPIINSTANCE"
constraintName=
"DER1N_SLAKPIINSTANCE__TRANSACT"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<!--输出实体[INVOICE]外键关系 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
0
-190"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
4
-190"
>
<addForeignKeyConstraint
baseColumnNames=
"OPPORTUNITYID"
baseTableName=
"INVOICE"
constraintName=
"DER1N_INVOICE__OPPORTUNITY__OP"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"OPPORTUNITYID"
referencedTableName=
"OPPORTUNITY"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
0
-191"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
4
-191"
>
<addForeignKeyConstraint
baseColumnNames=
"PRICELEVELID"
baseTableName=
"INVOICE"
constraintName=
"DER1N_INVOICE__PRICELEVEL__PRI"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"PRICELEVELID"
referencedTableName=
"PRICELEVEL"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
0
-192"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
4
-192"
>
<addForeignKeyConstraint
baseColumnNames=
"SALESORDERID"
baseTableName=
"INVOICE"
constraintName=
"DER1N_INVOICE__SALESORDER__SAL"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"SALESORDERID"
referencedTableName=
"SALESORDER"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
0
-193"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
4
-193"
>
<addForeignKeyConstraint
baseColumnNames=
"SLAID"
baseTableName=
"INVOICE"
constraintName=
"DER1N_INVOICE__SLA__SLAID"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"SLAID"
referencedTableName=
"SLA"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
0
-194"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-invoice-3
4
-194"
>
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"INVOICE"
constraintName=
"DER1N_INVOICE__TRANSACTIONCURR"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<!--输出实体[TASK]外键关系 -->
...
...
@@ -11063,25 +11063,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-2
39
-216"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-2
40
-216"
>
<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-2
39
-217"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-2
40
-217"
>
<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-2
39
-218"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-2
40
-218"
>
<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-2
39
-219"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-2
40
-219"
>
<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-2
39
-220"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-2
40
-220"
>
<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-2
39
-221"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-2
40
-221"
>
<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-2
39
-222"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-contact-2
40
-222"
>
<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]外键关系 -->
...
...
@@ -11102,19 +11102,19 @@
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"PRICELEVEL"
constraintName=
"DER1N_PRICELEVEL__TRANSACTIONC"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<!--输出实体[QUOTE]外键关系 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
39
-228"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
40
-228"
>
<addForeignKeyConstraint
baseColumnNames=
"CAMPAIGNID"
baseTableName=
"QUOTE"
constraintName=
"DER1N_QUOTE__CAMPAIGN__CAMPAIG"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"CAMPAIGNID"
referencedTableName=
"CAMPAIGN"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
39
-229"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
40
-229"
>
<addForeignKeyConstraint
baseColumnNames=
"OPPORTUNITYID"
baseTableName=
"QUOTE"
constraintName=
"DER1N_QUOTE__OPPORTUNITY__OPPO"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"OPPORTUNITYID"
referencedTableName=
"OPPORTUNITY"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
39
-230"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
40
-230"
>
<addForeignKeyConstraint
baseColumnNames=
"PRICELEVELID"
baseTableName=
"QUOTE"
constraintName=
"DER1N_QUOTE__PRICELEVEL__PRICE"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"PRICELEVELID"
referencedTableName=
"PRICELEVEL"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
39
-231"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
40
-231"
>
<addForeignKeyConstraint
baseColumnNames=
"SLAID"
baseTableName=
"QUOTE"
constraintName=
"DER1N_QUOTE__SLA__SLAID"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"SLAID"
referencedTableName=
"SLA"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
39
-232"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-quote-
40
-232"
>
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"QUOTE"
constraintName=
"DER1N_QUOTE__TRANSACTIONCURREN"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<!--输出实体[BULKDELETEOPERATION]外键关系 -->
...
...
@@ -11329,10 +11329,10 @@
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"RATINGVALUE"
constraintName=
"DER1N_RATINGVALUE__TRANSACTION"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<!--输出实体[SALESLITERATURE]外键关系 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-salesliterature-
3
-309"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-salesliterature-
8
-309"
>
<addForeignKeyConstraint
baseColumnNames=
"SUBJECTID"
baseTableName=
"SALESLITERATURE"
constraintName=
"DER1N_SALESLITERATURE__SUBJECT"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"SUBJECTID"
referencedTableName=
"SUBJECT"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-salesliterature-
3
-310"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-salesliterature-
8
-310"
>
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"SALESLITERATURE"
constraintName=
"DER1N_SALESLITERATURE__TRANSAC"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<!--输出实体[METRIC]外键关系 -->
...
...
@@ -11451,26 +11451,26 @@
<!--输出实体[CAMPAIGNLIST]外键关系 -->
<!--输出实体[LISTCONTACT]外键关系 -->
<!--输出实体[COMPETITOR]外键关系 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-competitor-3
5
-348"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-competitor-3
6
-348"
>
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"COMPETITOR"
constraintName=
"DER1N_COMPETITOR__TRANSACTIONC"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<!--输出实体[PRODUCT]外键关系 -->
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
36
-349"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
47
-349"
>
<addForeignKeyConstraint
baseColumnNames=
"PRICELEVELID"
baseTableName=
"PRODUCT"
constraintName=
"DER1N_PRODUCT__PRICELEVEL__PRI"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"PRICELEVELID"
referencedTableName=
"PRICELEVEL"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
36
-350"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
47
-350"
>
<addForeignKeyConstraint
baseColumnNames=
"PARENTPRODUCTID"
baseTableName=
"PRODUCT"
constraintName=
"DER1N_PRODUCT__PRODUCT__PARENT"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"PRODUCTID"
referencedTableName=
"PRODUCT"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
36
-351"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
47
-351"
>
<addForeignKeyConstraint
baseColumnNames=
"SUBJECTID"
baseTableName=
"PRODUCT"
constraintName=
"DER1N_PRODUCT__SUBJECT__SUBJEC"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"SUBJECTID"
referencedTableName=
"SUBJECT"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
36
-352"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
47
-352"
>
<addForeignKeyConstraint
baseColumnNames=
"TRANSACTIONCURRENCYID"
baseTableName=
"PRODUCT"
constraintName=
"DER1N_PRODUCT__TRANSACTIONCURR"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"TRANSACTIONCURRENCYID"
referencedTableName=
"TRANSACTIONCURRENCY"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
36
-353"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
47
-353"
>
<addForeignKeyConstraint
baseColumnNames=
"DEFAULTUOMSCHEDULEID"
baseTableName=
"PRODUCT"
constraintName=
"DER1N_PRODUCT__UOMSCHEDULE__DE"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"UOMSCHEDULEID"
referencedTableName=
"UOMSCHEDULE"
validate=
"true"
/>
</changeSet>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
36
-354"
>
<changeSet
author=
"a_LAB01_e85d8801c"
id=
"fk-product-
47
-354"
>
<addForeignKeyConstraint
baseColumnNames=
"DEFAULTUOMID"
baseTableName=
"PRODUCT"
constraintName=
"DER1N_PRODUCT__UOM__DEFAULTUOM"
deferrable=
"false"
initiallyDeferred=
"false"
onDelete=
"RESTRICT"
onUpdate=
"RESTRICT"
referencedColumnNames=
"UOMID"
referencedTableName=
"UOM"
validate=
"true"
/>
</changeSet>
<!--输出实体[CHARACTERISTIC]外键关系 -->
...
...
businesscentral-core/src/main/resources/permission/systemResource.json
浏览文件 @
dc3f8f8e
...
...
@@ -305,6 +305,14 @@
"sysmoudle"
:{
"id"
:
"SALES"
,
"name"
:
"Sales"
},
"dedataset"
:[{
"id"
:
"Default"
,
"name"
:
"DEFAULT"
}],
"deaction"
:[{
"id"
:
"GetDraft"
,
"name"
:
"GetDraft"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Update"
,
"name"
:
"Update"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Save"
,
"name"
:
"Save"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Remove"
,
"name"
:
"Remove"
,
"type"
:
"BUILTIN"
},{
"id"
:
"CheckKey"
,
"name"
:
"CheckKey"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Get"
,
"name"
:
"Get"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Create"
,
"name"
:
"Create"
,
"type"
:
"BUILTIN"
}],
"datascope"
:[{
"id"
:
"all"
,
"name"
:
"全部数据"
},
{
"id"
:
"createman"
,
"name"
:
"创建人"
}]
}
,
{
"dename"
:
"Subject"
,
"delogicname"
:
"主题"
,
"sysmoudle"
:{
"id"
:
"BASE"
,
"name"
:
"Base"
},
"dedataset"
:[{
"id"
:
"Default"
,
"name"
:
"DEFAULT"
}],
"deaction"
:[{
"id"
:
"Save"
,
"name"
:
"Save"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Create"
,
"name"
:
"Create"
,
"type"
:
"BUILTIN"
},{
"id"
:
"CheckKey"
,
"name"
:
"CheckKey"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Update"
,
"name"
:
"Update"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Remove"
,
"name"
:
"Remove"
,
"type"
:
"BUILTIN"
},{
"id"
:
"GetDraft"
,
"name"
:
"GetDraft"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Get"
,
"name"
:
"Get"
,
"type"
:
"BUILTIN"
}],
"datascope"
:[{
"id"
:
"all"
,
"name"
:
"全部数据"
},
{
"id"
:
"createman"
,
"name"
:
"创建人"
}]
}
],
...
...
businesscentral-provider/businesscentral-provider-centralapi/src/main/java/cn/ibizlab/businesscentral/centralapi/dto/SubjectDTO.java
0 → 100644
浏览文件 @
dc3f8f8e
package
cn
.
ibizlab
.
businesscentral
.
centralapi
.
dto
;
import
java.sql.Timestamp
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.math.BigInteger
;
import
java.util.Map
;
import
java.util.HashMap
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
cn.ibizlab.businesscentral.util.domain.DTOBase
;
import
lombok.Data
;
/**
* 服务DTO对象[SubjectDTO]
*/
@Data
public
class
SubjectDTO
extends
DTOBase
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 属性 [OVERRIDDENCREATEDON]
*
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
locale
=
"zh"
,
timezone
=
"GMT+8"
)
@JSONField
(
name
=
"overriddencreatedon"
,
format
=
"yyyy-MM-dd HH:mm:ss"
)
@JsonProperty
(
"overriddencreatedon"
)
private
Timestamp
overriddencreatedon
;
/**
* 属性 [UPDATEDATE]
*
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
locale
=
"zh"
,
timezone
=
"GMT+8"
)
@JSONField
(
name
=
"updatedate"
,
format
=
"yyyy-MM-dd HH:mm:ss"
)
@JsonProperty
(
"updatedate"
)
private
Timestamp
updatedate
;
/**
* 属性 [VERSIONNUMBER]
*
*/
@JSONField
(
name
=
"versionnumber"
)
@JsonProperty
(
"versionnumber"
)
private
BigInteger
versionnumber
;
/**
* 属性 [DESCRIPTION]
*
*/
@JSONField
(
name
=
"description"
)
@JsonProperty
(
"description"
)
private
String
description
;
/**
* 属性 [IMPORTSEQUENCENUMBER]
*
*/
@JSONField
(
name
=
"importsequencenumber"
)
@JsonProperty
(
"importsequencenumber"
)
private
Integer
importsequencenumber
;
/**
* 属性 [UPDATEMAN]
*
*/
@JSONField
(
name
=
"updateman"
)
@JsonProperty
(
"updateman"
)
private
String
updateman
;
/**
* 属性 [CREATEDATE]
*
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
locale
=
"zh"
,
timezone
=
"GMT+8"
)
@JSONField
(
name
=
"createdate"
,
format
=
"yyyy-MM-dd HH:mm:ss"
)
@JsonProperty
(
"createdate"
)
private
Timestamp
createdate
;
/**
* 属性 [PARENTSUBJECTNAME]
*
*/
@JSONField
(
name
=
"parentsubjectname"
)
@JsonProperty
(
"parentsubjectname"
)
private
String
parentsubjectname
;
/**
* 属性 [FEATUREMASK]
*
*/
@JSONField
(
name
=
"featuremask"
)
@JsonProperty
(
"featuremask"
)
private
Integer
featuremask
;
/**
* 属性 [CREATEMAN]
*
*/
@JSONField
(
name
=
"createman"
)
@JsonProperty
(
"createman"
)
private
String
createman
;
/**
* 属性 [TITLE]
*
*/
@JSONField
(
name
=
"title"
)
@JsonProperty
(
"title"
)
private
String
title
;
/**
* 属性 [SUBJECTID]
*
*/
@JSONField
(
name
=
"subjectid"
)
@JsonProperty
(
"subjectid"
)
private
String
subjectid
;
/**
* 属性 [PARENTSUBJECT]
*
*/
@JSONField
(
name
=
"parentsubject"
)
@JsonProperty
(
"parentsubject"
)
private
String
parentsubject
;
/**
* 设置 [OVERRIDDENCREATEDON]
*/
public
void
setOverriddencreatedon
(
Timestamp
overriddencreatedon
){
this
.
overriddencreatedon
=
overriddencreatedon
;
this
.
modify
(
"overriddencreatedon"
,
overriddencreatedon
);
}
/**
* 设置 [VERSIONNUMBER]
*/
public
void
setVersionnumber
(
BigInteger
versionnumber
){
this
.
versionnumber
=
versionnumber
;
this
.
modify
(
"versionnumber"
,
versionnumber
);
}
/**
* 设置 [DESCRIPTION]
*/
public
void
setDescription
(
String
description
){
this
.
description
=
description
;
this
.
modify
(
"description"
,
description
);
}
/**
* 设置 [IMPORTSEQUENCENUMBER]
*/
public
void
setImportsequencenumber
(
Integer
importsequencenumber
){
this
.
importsequencenumber
=
importsequencenumber
;
this
.
modify
(
"importsequencenumber"
,
importsequencenumber
);
}
/**
* 设置 [PARENTSUBJECTNAME]
*/
public
void
setParentsubjectname
(
String
parentsubjectname
){
this
.
parentsubjectname
=
parentsubjectname
;
this
.
modify
(
"parentsubjectname"
,
parentsubjectname
);
}
/**
* 设置 [FEATUREMASK]
*/
public
void
setFeaturemask
(
Integer
featuremask
){
this
.
featuremask
=
featuremask
;
this
.
modify
(
"featuremask"
,
featuremask
);
}
/**
* 设置 [TITLE]
*/
public
void
setTitle
(
String
title
){
this
.
title
=
title
;
this
.
modify
(
"title"
,
title
);
}
/**
* 设置 [PARENTSUBJECT]
*/
public
void
setParentsubject
(
String
parentsubject
){
this
.
parentsubject
=
parentsubject
;
this
.
modify
(
"parentsubject"
,
parentsubject
);
}
}
businesscentral-provider/businesscentral-provider-centralapi/src/main/java/cn/ibizlab/businesscentral/centralapi/mapping/SubjectMapping.java
0 → 100644
浏览文件 @
dc3f8f8e
package
cn
.
ibizlab
.
businesscentral
.
centralapi
.
mapping
;
import
org.mapstruct.*
;
import
cn.ibizlab.businesscentral.core.base.domain.Subject
;
import
cn.ibizlab.businesscentral.centralapi.dto.SubjectDTO
;
import
cn.ibizlab.businesscentral.util.domain.MappingBase
;
import
org.mapstruct.factory.Mappers
;
@Mapper
(
componentModel
=
"spring"
,
uses
=
{},
nullValuePropertyMappingStrategy
=
NullValuePropertyMappingStrategy
.
IGNORE
,
nullValueCheckStrategy
=
NullValueCheckStrategy
.
ALWAYS
)
public
interface
SubjectMapping
extends
MappingBase
<
SubjectDTO
,
Subject
>
{
}
businesscentral-provider/businesscentral-provider-centralapi/src/main/java/cn/ibizlab/businesscentral/centralapi/rest/SubjectResource.java
0 → 100644
浏览文件 @
dc3f8f8e
package
cn
.
ibizlab
.
businesscentral
.
centralapi
.
rest
;
import
java.sql.Timestamp
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.math.BigInteger
;
import
java.util.HashMap
;
import
lombok.extern.slf4j.Slf4j
;
import
com.alibaba.fastjson.JSONObject
;
import
javax.servlet.ServletRequest
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cglib.beans.BeanCopier
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.util.StringUtils
;
import
org.springframework.context.annotation.Lazy
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.security.access.prepost.PostAuthorize
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiResponse
;
import
io.swagger.annotations.ApiResponses
;
import
cn.ibizlab.businesscentral.centralapi.dto.*
;
import
cn.ibizlab.businesscentral.centralapi.mapping.*
;
import
cn.ibizlab.businesscentral.core.base.domain.Subject
;
import
cn.ibizlab.businesscentral.core.base.service.ISubjectService
;
import
cn.ibizlab.businesscentral.core.base.filter.SubjectSearchContext
;
import
cn.ibizlab.businesscentral.util.annotation.VersionCheck
;
@Slf4j
@Api
(
tags
=
{
"主题"
})
@RestController
(
"CentralApi-subject"
)
@RequestMapping
(
""
)
public
class
SubjectResource
{
@Autowired
public
ISubjectService
subjectService
;
@Autowired
@Lazy
public
SubjectMapping
subjectMapping
;
@PreAuthorize
(
"hasPermission(this.subjectMapping.toDomain(#subjectdto),'iBizBusinessCentral-Subject-Save')"
)
@ApiOperation
(
value
=
"保存主题"
,
tags
=
{
"主题"
},
notes
=
"保存主题"
)
@RequestMapping
(
method
=
RequestMethod
.
POST
,
value
=
"/subjects/save"
)
public
ResponseEntity
<
Boolean
>
save
(
@RequestBody
SubjectDTO
subjectdto
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
subjectService
.
save
(
subjectMapping
.
toDomain
(
subjectdto
)));
}
@PreAuthorize
(
"hasPermission(this.subjectMapping.toDomain(#subjectdtos),'iBizBusinessCentral-Subject-Save')"
)
@ApiOperation
(
value
=
"批量保存主题"
,
tags
=
{
"主题"
},
notes
=
"批量保存主题"
)
@RequestMapping
(
method
=
RequestMethod
.
POST
,
value
=
"/subjects/savebatch"
)
public
ResponseEntity
<
Boolean
>
saveBatch
(
@RequestBody
List
<
SubjectDTO
>
subjectdtos
)
{
subjectService
.
saveBatch
(
subjectMapping
.
toDomain
(
subjectdtos
));
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
true
);
}
@PreAuthorize
(
"hasPermission(this.subjectMapping.toDomain(#subjectdto),'iBizBusinessCentral-Subject-Create')"
)
@ApiOperation
(
value
=
"新建主题"
,
tags
=
{
"主题"
},
notes
=
"新建主题"
)
@RequestMapping
(
method
=
RequestMethod
.
POST
,
value
=
"/subjects"
)
@Transactional
public
ResponseEntity
<
SubjectDTO
>
create
(
@RequestBody
SubjectDTO
subjectdto
)
{
Subject
domain
=
subjectMapping
.
toDomain
(
subjectdto
);
subjectService
.
create
(
domain
);
SubjectDTO
dto
=
subjectMapping
.
toDto
(
domain
);
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
dto
);
}
@PreAuthorize
(
"hasPermission(this.subjectMapping.toDomain(#subjectdtos),'iBizBusinessCentral-Subject-Create')"
)
@ApiOperation
(
value
=
"批量新建主题"
,
tags
=
{
"主题"
},
notes
=
"批量新建主题"
)
@RequestMapping
(
method
=
RequestMethod
.
POST
,
value
=
"/subjects/batch"
)
public
ResponseEntity
<
Boolean
>
createBatch
(
@RequestBody
List
<
SubjectDTO
>
subjectdtos
)
{
subjectService
.
createBatch
(
subjectMapping
.
toDomain
(
subjectdtos
));
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
true
);
}
@ApiOperation
(
value
=
"检查主题"
,
tags
=
{
"主题"
},
notes
=
"检查主题"
)
@RequestMapping
(
method
=
RequestMethod
.
POST
,
value
=
"/subjects/checkkey"
)
public
ResponseEntity
<
Boolean
>
checkKey
(
@RequestBody
SubjectDTO
subjectdto
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
subjectService
.
checkKey
(
subjectMapping
.
toDomain
(
subjectdto
)));
}
@VersionCheck
(
entity
=
"subject"
,
versionfield
=
"updatedate"
)
@PreAuthorize
(
"hasPermission(this.subjectService.get(#subject_id),'iBizBusinessCentral-Subject-Update')"
)
@ApiOperation
(
value
=
"更新主题"
,
tags
=
{
"主题"
},
notes
=
"更新主题"
)
@RequestMapping
(
method
=
RequestMethod
.
PUT
,
value
=
"/subjects/{subject_id}"
)
@Transactional
public
ResponseEntity
<
SubjectDTO
>
update
(
@PathVariable
(
"subject_id"
)
String
subject_id
,
@RequestBody
SubjectDTO
subjectdto
)
{
Subject
domain
=
subjectMapping
.
toDomain
(
subjectdto
);
domain
.
setSubjectid
(
subject_id
);
subjectService
.
update
(
domain
);
SubjectDTO
dto
=
subjectMapping
.
toDto
(
domain
);
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
dto
);
}
@PreAuthorize
(
"hasPermission(this.subjectService.getSubjectByEntities(this.subjectMapping.toDomain(#subjectdtos)),'iBizBusinessCentral-Subject-Update')"
)
@ApiOperation
(
value
=
"批量更新主题"
,
tags
=
{
"主题"
},
notes
=
"批量更新主题"
)
@RequestMapping
(
method
=
RequestMethod
.
PUT
,
value
=
"/subjects/batch"
)
public
ResponseEntity
<
Boolean
>
updateBatch
(
@RequestBody
List
<
SubjectDTO
>
subjectdtos
)
{
subjectService
.
updateBatch
(
subjectMapping
.
toDomain
(
subjectdtos
));
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
true
);
}
@PreAuthorize
(
"hasPermission(this.subjectService.get(#subject_id),'iBizBusinessCentral-Subject-Remove')"
)
@ApiOperation
(
value
=
"删除主题"
,
tags
=
{
"主题"
},
notes
=
"删除主题"
)
@RequestMapping
(
method
=
RequestMethod
.
DELETE
,
value
=
"/subjects/{subject_id}"
)
@Transactional
public
ResponseEntity
<
Boolean
>
remove
(
@PathVariable
(
"subject_id"
)
String
subject_id
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
subjectService
.
remove
(
subject_id
));
}
@PreAuthorize
(
"hasPermission(this.subjectService.getSubjectByIds(#ids),'iBizBusinessCentral-Subject-Remove')"
)
@ApiOperation
(
value
=
"批量删除主题"
,
tags
=
{
"主题"
},
notes
=
"批量删除主题"
)
@RequestMapping
(
method
=
RequestMethod
.
DELETE
,
value
=
"/subjects/batch"
)
public
ResponseEntity
<
Boolean
>
removeBatch
(
@RequestBody
List
<
String
>
ids
)
{
subjectService
.
removeBatch
(
ids
);
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
true
);
}
@ApiOperation
(
value
=
"获取主题草稿"
,
tags
=
{
"主题"
},
notes
=
"获取主题草稿"
)
@RequestMapping
(
method
=
RequestMethod
.
GET
,
value
=
"/subjects/getdraft"
)
public
ResponseEntity
<
SubjectDTO
>
getDraft
()
{
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
subjectMapping
.
toDto
(
subjectService
.
getDraft
(
new
Subject
())));
}
@PostAuthorize
(
"hasPermission(this.subjectMapping.toDomain(returnObject.body),'iBizBusinessCentral-Subject-Get')"
)
@ApiOperation
(
value
=
"获取主题"
,
tags
=
{
"主题"
},
notes
=
"获取主题"
)
@RequestMapping
(
method
=
RequestMethod
.
GET
,
value
=
"/subjects/{subject_id}"
)
public
ResponseEntity
<
SubjectDTO
>
get
(
@PathVariable
(
"subject_id"
)
String
subject_id
)
{
Subject
domain
=
subjectService
.
get
(
subject_id
);
SubjectDTO
dto
=
subjectMapping
.
toDto
(
domain
);
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
body
(
dto
);
}
@PreAuthorize
(
"hasAnyAuthority('ROLE_SUPERADMIN','iBizBusinessCentral-Subject-searchDefault-all')"
)
@ApiOperation
(
value
=
"获取DEFAULT"
,
tags
=
{
"主题"
}
,
notes
=
"获取DEFAULT"
)
@RequestMapping
(
method
=
RequestMethod
.
GET
,
value
=
"/subjects/fetchdefault"
)
public
ResponseEntity
<
List
<
SubjectDTO
>>
fetchDefault
(
SubjectSearchContext
context
)
{
Page
<
Subject
>
domains
=
subjectService
.
searchDefault
(
context
)
;
List
<
SubjectDTO
>
list
=
subjectMapping
.
toDto
(
domains
.
getContent
());
return
ResponseEntity
.
status
(
HttpStatus
.
OK
)
.
header
(
"x-page"
,
String
.
valueOf
(
context
.
getPageable
().
getPageNumber
()))
.
header
(
"x-per-page"
,
String
.
valueOf
(
context
.
getPageable
().
getPageSize
()))
.
header
(
"x-total"
,
String
.
valueOf
(
domains
.
getTotalElements
()))
.
body
(
list
);
}
@PreAuthorize
(
"hasAnyAuthority('ROLE_SUPERADMIN','iBizBusinessCentral-Subject-searchDefault-all')"
)
@ApiOperation
(
value
=
"查询DEFAULT"
,
tags
=
{
"主题"
}
,
notes
=
"查询DEFAULT"
)
@RequestMapping
(
method
=
RequestMethod
.
POST
,
value
=
"/subjects/searchdefault"
)
public
ResponseEntity
<
Page
<
SubjectDTO
>>
searchDefault
(
@RequestBody
SubjectSearchContext
context
)
{
Page
<
Subject
>
domains
=
subjectService
.
searchDefault
(
context
)
;
return
ResponseEntity
.
status
(
HttpStatus
.
OK
)
.
body
(
new
PageImpl
(
subjectMapping
.
toDto
(
domains
.
getContent
()),
context
.
getPageable
(),
domains
.
getTotalElements
()));
}
}
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录