@steedos-labs/content-compliance 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/lib/methods/AI.d.ts +1 -0
- package/lib/methods/AI.js +58 -44
- package/lib/methods/AI.js.map +1 -1
- package/lib/methods/__tests__/aiReviewLog.test.d.ts +1 -0
- package/lib/methods/__tests__/aiReviewLog.test.js +101 -0
- package/lib/methods/__tests__/aiReviewLog.test.js.map +1 -0
- package/lib/methods/__tests__/contentHubPush.test.js +63 -5
- package/lib/methods/__tests__/contentHubPush.test.js.map +1 -1
- package/lib/methods/__tests__/contentHubSyncRule.test.js +9 -0
- package/lib/methods/__tests__/contentHubSyncRule.test.js.map +1 -1
- package/lib/methods/content_hub.js +26 -37
- package/lib/methods/content_hub.js.map +1 -1
- package/lib/methods/content_hub_sync_rule.js +7 -3
- package/lib/methods/content_hub_sync_rule.js.map +1 -1
- package/lib/methods/content_hub_uploader.d.ts +7 -2
- package/lib/methods/content_hub_uploader.js +20 -12
- package/lib/methods/content_hub_uploader.js.map +1 -1
- package/main/default/objectTranslations/space_users.zh-CN/space_users.zh-CN.objectTranslation.yml +4 -0
- package/main/default/objects/pepesio_ch__c/pepesio_ch__c.object.yml +1 -1
- package/main/default/objects/pepsico_ch_material_group_rule/listviews/all.listview.yml +2 -3
- package/main/default/objects/pepsico_ch_material_group_rule/pepsico_ch_material_group_rule.object.yml +1 -1
- package/main/default/objects/pepsico_ch_sync_rule/fields/kol_classification.field.yml +7 -2
- package/main/default/objects/pepsico_ch_sync_rule/fields/spot_check.field.yml +4 -4
- package/main/default/objects/pepsico_ch_sync_rule/listviews/all.listview.yml +2 -7
- package/main/default/objects/pepsico_ch_sync_rule/pepsico_ch_sync_rule.object.yml +1 -1
- package/main/default/objects/pepsico_ch_tag_sync_log/pepsico_ch_tag_sync_log.object.yml +1 -1
- package/main/default/objects/pepsico_ch_tag_sync_request/pepsico_ch_tag_sync_request.object.yml +1 -1
- package/main/default/objects/pepsico_material_approval/fields/available_channels.field.yml +24 -3
- package/main/default/objects/pepsico_material_approval/fields/ch_sync_enabled.field.yml +1 -1
- package/main/default/objects/pepsico_material_approval/fields/classification.field.yml +24 -3
- package/main/default/objects/pepsico_material_approval/fields/content_rule.field.yml +24 -3
- package/main/default/objects/pepsico_material_approval/fields/kol_classification.field.yml +24 -3
- package/main/default/objects/pepsico_material_approval/fields/material_editable.field.yml +26 -5
- package/main/default/objects/pepsico_material_approval/fields/material_type.field.yml +24 -3
- package/main/default/objects/pepsico_material_approval/fields/product.field.yml +24 -4
- package/main/default/objects/pepsico_material_approval/fields/social_media.field.yml +24 -3
- package/main/default/objects/space_users/fields/agency_contract_expiry_date.field.yml +3 -3
- package/main/default/objects/space_users/fields/agency_pepsico_contact.field.yml +3 -3
- package/main/default/objects/space_users/fields/avatar.field.yml +1 -1
- package/main/default/objects/space_users/fields/created.field.yml +1 -1
- package/main/default/objects/space_users/fields/email_notification.field.yml +1 -1
- package/main/default/objects/space_users/fields/is_collaborator.field.yml +2 -1
- package/main/default/objects/space_users/fields/last_logon.field.yml +3 -3
- package/main/default/objects/space_users/fields/login_expired.field.yml +3 -3
- package/main/default/objects/space_users/fields/modified.field.yml +1 -1
- package/main/default/objects/space_users/fields/modified_by.field.yml +1 -1
- package/main/default/objects/space_users/fields/password_expired.field.yml +1 -1
- package/main/default/tabs/object_pepesio_ch.tab.yml +1 -1
- package/main/default/tabs/object_pepsico_ch_material_group_rule.tab.yml +1 -1
- package/main/default/tabs/object_pepsico_ch_sync_rule.tab.yml +1 -1
- package/main/default/tabs/object_pepsico_ch_tag_sync_log.tab.yml +1 -1
- package/main/default/tabs/object_pepsico_ch_tag_sync_request.tab.yml +1 -1
- package/package.json +1 -1
- package/public/content-review/amis.css +27 -0
|
@@ -21,17 +21,38 @@ amis:
|
|
|
21
21
|
url: /graphql
|
|
22
22
|
method: post
|
|
23
23
|
requestAdaptor: |-
|
|
24
|
+
// 停用的选项也查出来, 怎么显示由 adaptor 决定; 模式和当前值放进 url, 缓存才会按搜索框 / 单据区分
|
|
25
|
+
const isSearch = !!context && Object.prototype.hasOwnProperty.call(context, 'filterFormSearchableFields');
|
|
26
|
+
const keepIds = isSearch ? [] : _.uniq(_.compact(_.flatMap(_.castArray((context && context.available_channels) || []), (v) => {
|
|
27
|
+
const s = _.isString(v) ? v : String((v && v.value) || '');
|
|
28
|
+
return _.flatMap(s.split(/[,、]/), (p) => [p].concat(p.split('-')));
|
|
29
|
+
}).map((s) => s.trim())));
|
|
30
|
+
api.url = api.url.split('?')[0] + '?tag_options=' + (isSearch ? 'all' : encodeURIComponent(keepIds.join(',')));
|
|
24
31
|
api.data = { query:`
|
|
25
32
|
query{
|
|
26
33
|
picklists(filters: [["code", "=", "223321001114944"]]){
|
|
27
|
-
options: _related_picklist_options_picklist(
|
|
28
|
-
label: name, value, , parent: parent__expand{ value }
|
|
34
|
+
options: _related_picklist_options_picklist(sort: "sort_no desc"){
|
|
35
|
+
label: name, value, enable, parent: parent__expand{ value }
|
|
29
36
|
}
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
39
|
`}
|
|
33
40
|
adaptor: |+
|
|
34
|
-
const
|
|
41
|
+
const allOptions = payload.data.picklists[0].options;
|
|
42
|
+
// 停用的选项: 列表搜索框全部列出并标「已停用」, 用来筛选历史单据;
|
|
43
|
+
// 表单 / 详情页只留当前值用到的(置灰, 不能再选), 否则停用后只显示一串 ID; 其余停用选项不显示
|
|
44
|
+
const tagOptions = new URLSearchParams(((api && api.url) || '').split('?')[1] || '').get('tag_options') || '';
|
|
45
|
+
const keepIds = tagOptions === 'all' ? null : tagOptions.split(',');
|
|
46
|
+
// 值里只存了末级 ID 时, 停用的上级也要带出来, 否则挂不到树上
|
|
47
|
+
_.forEach(keepIds, (id) => {
|
|
48
|
+
const op = _.find(allOptions, { value: id });
|
|
49
|
+
if (op && op.parent && !_.includes(keepIds, op.parent.value)) keepIds.push(op.parent.value);
|
|
50
|
+
});
|
|
51
|
+
const pOptions = _.compact(_.map(allOptions, (op) => {
|
|
52
|
+
if (op.enable !== false) return op;
|
|
53
|
+
if (keepIds == null) return { ...op, label: op.label + '(已停用)' };
|
|
54
|
+
return _.includes(keepIds, op.value) ? { ...op, disabled: true } : null;
|
|
55
|
+
}));
|
|
35
56
|
let depth = 0;
|
|
36
57
|
function getChildren(value) {
|
|
37
58
|
depth++;
|
|
@@ -22,18 +22,39 @@ amis:
|
|
|
22
22
|
url: /graphql
|
|
23
23
|
method: post
|
|
24
24
|
requestAdaptor: |-
|
|
25
|
+
// 停用的选项也查出来, 怎么显示由 adaptor 决定; 模式和当前值放进 url, 缓存才会按搜索框 / 单据区分
|
|
26
|
+
const isSearch = !!context && Object.prototype.hasOwnProperty.call(context, 'filterFormSearchableFields');
|
|
27
|
+
const keepIds = isSearch ? [] : _.uniq(_.compact(_.flatMap(_.castArray((context && context.classification) || []), (v) => {
|
|
28
|
+
const s = _.isString(v) ? v : String((v && v.value) || '');
|
|
29
|
+
return _.flatMap(s.split(/[,、]/), (p) => [p].concat(p.split('-')));
|
|
30
|
+
}).map((s) => s.trim())));
|
|
31
|
+
api.url = api.url.split('?')[0] + '?tag_options=' + (isSearch ? 'all' : encodeURIComponent(keepIds.join(',')));
|
|
25
32
|
api.data = {
|
|
26
33
|
query: `
|
|
27
34
|
query{
|
|
28
35
|
picklists(filters: [["code", "=", "classification"]]){
|
|
29
|
-
options: _related_picklist_options_picklist(
|
|
30
|
-
label: name, value, , parent: parent__expand{value}
|
|
36
|
+
options: _related_picklist_options_picklist(sort: "sort_no desc"){
|
|
37
|
+
label: name, value, enable, parent: parent__expand{value}
|
|
31
38
|
}
|
|
32
39
|
}
|
|
33
40
|
}
|
|
34
41
|
`}
|
|
35
42
|
adaptor: |+
|
|
36
|
-
const
|
|
43
|
+
const allOptions = payload.data.picklists[0].options;
|
|
44
|
+
// 停用的选项: 列表搜索框全部列出并标「已停用」, 用来筛选历史单据;
|
|
45
|
+
// 表单 / 详情页只留当前值用到的(置灰, 不能再选), 否则停用后只显示一串 ID; 其余停用选项不显示
|
|
46
|
+
const tagOptions = new URLSearchParams(((api && api.url) || '').split('?')[1] || '').get('tag_options') || '';
|
|
47
|
+
const keepIds = tagOptions === 'all' ? null : tagOptions.split(',');
|
|
48
|
+
// 值里只存了末级 ID 时, 停用的上级也要带出来, 否则挂不到树上
|
|
49
|
+
_.forEach(keepIds, (id) => {
|
|
50
|
+
const op = _.find(allOptions, { value: id });
|
|
51
|
+
if (op && op.parent && !_.includes(keepIds, op.parent.value)) keepIds.push(op.parent.value);
|
|
52
|
+
});
|
|
53
|
+
const pOptions = _.compact(_.map(allOptions, (op) => {
|
|
54
|
+
if (op.enable !== false) return op;
|
|
55
|
+
if (keepIds == null) return { ...op, label: op.label + '(已停用)' };
|
|
56
|
+
return _.includes(keepIds, op.value) ? { ...op, disabled: true } : null;
|
|
57
|
+
}));
|
|
37
58
|
let depth = 0;
|
|
38
59
|
function getChildren(value) {
|
|
39
60
|
depth++;
|
|
@@ -18,17 +18,38 @@ amis:
|
|
|
18
18
|
url: /graphql
|
|
19
19
|
method: post
|
|
20
20
|
requestAdaptor: |-
|
|
21
|
+
// 停用的选项也查出来, 怎么显示由 adaptor 决定; 模式和当前值放进 url, 缓存才会按搜索框 / 单据区分
|
|
22
|
+
const isSearch = !!context && Object.prototype.hasOwnProperty.call(context, 'filterFormSearchableFields');
|
|
23
|
+
const keepIds = isSearch ? [] : _.uniq(_.compact(_.flatMap(_.castArray((context && context.content_rule) || []), (v) => {
|
|
24
|
+
const s = _.isString(v) ? v : String((v && v.value) || '');
|
|
25
|
+
return _.flatMap(s.split(/[,、]/), (p) => [p].concat(p.split('-')));
|
|
26
|
+
}).map((s) => s.trim())));
|
|
27
|
+
api.url = api.url.split('?')[0] + '?tag_options=' + (isSearch ? 'all' : encodeURIComponent(keepIds.join(',')));
|
|
21
28
|
api.data = { query:`
|
|
22
29
|
query{
|
|
23
30
|
picklists(filters: [["code", "=", "223321022150011"]]){
|
|
24
|
-
options: _related_picklist_options_picklist(
|
|
25
|
-
label: name, value, , parent: parent__expand{ value }
|
|
31
|
+
options: _related_picklist_options_picklist(sort: "sort_no desc"){
|
|
32
|
+
label: name, value, enable, parent: parent__expand{ value }
|
|
26
33
|
}
|
|
27
34
|
}
|
|
28
35
|
}
|
|
29
36
|
`}
|
|
30
37
|
adaptor: |+
|
|
31
|
-
const
|
|
38
|
+
const allOptions = payload.data.picklists[0].options;
|
|
39
|
+
// 停用的选项: 列表搜索框全部列出并标「已停用」, 用来筛选历史单据;
|
|
40
|
+
// 表单 / 详情页只留当前值用到的(置灰, 不能再选), 否则停用后只显示一串 ID; 其余停用选项不显示
|
|
41
|
+
const tagOptions = new URLSearchParams(((api && api.url) || '').split('?')[1] || '').get('tag_options') || '';
|
|
42
|
+
const keepIds = tagOptions === 'all' ? null : tagOptions.split(',');
|
|
43
|
+
// 值里只存了末级 ID 时, 停用的上级也要带出来, 否则挂不到树上
|
|
44
|
+
_.forEach(keepIds, (id) => {
|
|
45
|
+
const op = _.find(allOptions, { value: id });
|
|
46
|
+
if (op && op.parent && !_.includes(keepIds, op.parent.value)) keepIds.push(op.parent.value);
|
|
47
|
+
});
|
|
48
|
+
const pOptions = _.compact(_.map(allOptions, (op) => {
|
|
49
|
+
if (op.enable !== false) return op;
|
|
50
|
+
if (keepIds == null) return { ...op, label: op.label + '(已停用)' };
|
|
51
|
+
return _.includes(keepIds, op.value) ? { ...op, disabled: true } : null;
|
|
52
|
+
}));
|
|
32
53
|
let depth = 0;
|
|
33
54
|
function getChildren(value) {
|
|
34
55
|
depth++;
|
|
@@ -20,18 +20,39 @@ amis:
|
|
|
20
20
|
url: /graphql
|
|
21
21
|
method: post
|
|
22
22
|
requestAdaptor: |-
|
|
23
|
+
// 停用的选项也查出来, 怎么显示由 adaptor 决定; 模式和当前值放进 url, 缓存才会按搜索框 / 单据区分
|
|
24
|
+
const isSearch = !!context && Object.prototype.hasOwnProperty.call(context, 'filterFormSearchableFields');
|
|
25
|
+
const keepIds = isSearch ? [] : _.uniq(_.compact(_.flatMap(_.castArray((context && context.kol_classification) || []), (v) => {
|
|
26
|
+
const s = _.isString(v) ? v : String((v && v.value) || '');
|
|
27
|
+
return _.flatMap(s.split(/[,、]/), (p) => [p].concat(p.split('-')));
|
|
28
|
+
}).map((s) => s.trim())));
|
|
29
|
+
api.url = api.url.split('?')[0] + '?tag_options=' + (isSearch ? 'all' : encodeURIComponent(keepIds.join(',')));
|
|
23
30
|
api.data = {
|
|
24
31
|
query: `
|
|
25
32
|
query{
|
|
26
33
|
picklists(filters: [["code", "=", "kol_classification"]]){
|
|
27
|
-
options: _related_picklist_options_picklist(
|
|
28
|
-
label: name, value, , parent: parent__expand{value}
|
|
34
|
+
options: _related_picklist_options_picklist(sort: "sort_no desc"){
|
|
35
|
+
label: name, value, enable, parent: parent__expand{value}
|
|
29
36
|
}
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
39
|
`}
|
|
33
40
|
adaptor: |+
|
|
34
|
-
const
|
|
41
|
+
const allOptions = payload.data.picklists[0].options;
|
|
42
|
+
// 停用的选项: 列表搜索框全部列出并标「已停用」, 用来筛选历史单据;
|
|
43
|
+
// 表单 / 详情页只留当前值用到的(置灰, 不能再选), 否则停用后只显示一串 ID; 其余停用选项不显示
|
|
44
|
+
const tagOptions = new URLSearchParams(((api && api.url) || '').split('?')[1] || '').get('tag_options') || '';
|
|
45
|
+
const keepIds = tagOptions === 'all' ? null : tagOptions.split(',');
|
|
46
|
+
// 值里只存了末级 ID 时, 停用的上级也要带出来, 否则挂不到树上
|
|
47
|
+
_.forEach(keepIds, (id) => {
|
|
48
|
+
const op = _.find(allOptions, { value: id });
|
|
49
|
+
if (op && op.parent && !_.includes(keepIds, op.parent.value)) keepIds.push(op.parent.value);
|
|
50
|
+
});
|
|
51
|
+
const pOptions = _.compact(_.map(allOptions, (op) => {
|
|
52
|
+
if (op.enable !== false) return op;
|
|
53
|
+
if (keepIds == null) return { ...op, label: op.label + '(已停用)' };
|
|
54
|
+
return _.includes(keepIds, op.value) ? { ...op, disabled: true } : null;
|
|
55
|
+
}));
|
|
35
56
|
let depth = 0;
|
|
36
57
|
function getChildren(value) {
|
|
37
58
|
depth++;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: material_editable
|
|
2
|
-
# 选项与素材授权规则(content_rule)相同, 动态读取 picklist 223321022150011
|
|
2
|
+
# 选项与素材授权规则(content_rule)相同, 动态读取 picklist 223321022150011 的选项(停用的只在搜索框和当前值里显示)
|
|
3
3
|
amis:
|
|
4
4
|
id: 'u:material_editable'
|
|
5
5
|
# 与「有无BGM」一样用按钮点选; 选项仍动态读取公共选项集的末级启用选项
|
|
@@ -10,18 +10,39 @@ amis:
|
|
|
10
10
|
url: /graphql
|
|
11
11
|
method: post
|
|
12
12
|
requestAdaptor: |-
|
|
13
|
+
// 停用的选项也查出来, 怎么显示由 adaptor 决定; 模式和当前值放进 url, 缓存才会按搜索框 / 单据区分
|
|
14
|
+
const isSearch = !!context && Object.prototype.hasOwnProperty.call(context, 'filterFormSearchableFields');
|
|
15
|
+
const keepIds = isSearch ? [] : _.uniq(_.compact(_.flatMap(_.castArray((context && context.material_editable) || []), (v) => {
|
|
16
|
+
const s = _.isString(v) ? v : String((v && v.value) || '');
|
|
17
|
+
return _.flatMap(s.split(/[,、]/), (p) => [p].concat(p.split('-')));
|
|
18
|
+
}).map((s) => s.trim())));
|
|
19
|
+
api.url = api.url.split('?')[0] + '?tag_options=' + (isSearch ? 'all' : encodeURIComponent(keepIds.join(',')));
|
|
13
20
|
api.data = { query:`
|
|
14
21
|
query{
|
|
15
22
|
picklists(filters: [["code", "=", "223321022150011"]]){
|
|
16
|
-
options: _related_picklist_options_picklist(
|
|
17
|
-
label: name, value, , parent: parent__expand{ value }
|
|
23
|
+
options: _related_picklist_options_picklist(sort: "sort_no desc"){
|
|
24
|
+
label: name, value, enable, parent: parent__expand{ value }
|
|
18
25
|
}
|
|
19
26
|
}
|
|
20
27
|
}
|
|
21
28
|
`}
|
|
22
29
|
adaptor: |+
|
|
23
30
|
// 只取末级选项作为按钮; 值沿用原树形下拉的节点路径(各级 value 用 - 连接), 存量单据和推送 Content Hub 不受影响
|
|
24
|
-
const
|
|
31
|
+
const allOptions = payload.data.picklists[0].options;
|
|
32
|
+
// 停用的选项: 列表搜索框全部列出并标「已停用」, 用来筛选历史单据;
|
|
33
|
+
// 表单 / 详情页只留当前值用到的(置灰, 不能再选), 否则停用后只显示一串 ID; 其余停用选项不显示
|
|
34
|
+
const tagOptions = new URLSearchParams(((api && api.url) || '').split('?')[1] || '').get('tag_options') || '';
|
|
35
|
+
const keepIds = tagOptions === 'all' ? null : tagOptions.split(',');
|
|
36
|
+
// 值里只存了末级 ID 时, 停用的上级也要带出来, 否则挂不到树上
|
|
37
|
+
_.forEach(keepIds, (id) => {
|
|
38
|
+
const op = _.find(allOptions, { value: id });
|
|
39
|
+
if (op && op.parent && !_.includes(keepIds, op.parent.value)) keepIds.push(op.parent.value);
|
|
40
|
+
});
|
|
41
|
+
const pOptions = _.compact(_.map(allOptions, (op) => {
|
|
42
|
+
if (op.enable !== false) return op;
|
|
43
|
+
if (keepIds == null) return { ...op, label: op.label + '(已停用)' };
|
|
44
|
+
return _.includes(keepIds, op.value) ? { ...op, disabled: true } : null;
|
|
45
|
+
}));
|
|
25
46
|
const options = [];
|
|
26
47
|
let depth = 0;
|
|
27
48
|
function walk(parentValue, path) {
|
|
@@ -42,7 +63,7 @@ amis:
|
|
|
42
63
|
if (hasChildren) {
|
|
43
64
|
walk(item.value, itemPath);
|
|
44
65
|
} else {
|
|
45
|
-
options.push({ label: item.label, value: itemPath.join('-') });
|
|
66
|
+
options.push({ label: item.label, value: itemPath.join('-'), disabled: item.disabled });
|
|
46
67
|
}
|
|
47
68
|
});
|
|
48
69
|
}
|
|
@@ -16,18 +16,39 @@ amis:
|
|
|
16
16
|
url: /graphql
|
|
17
17
|
method: post
|
|
18
18
|
requestAdaptor: |-
|
|
19
|
+
// 停用的选项也查出来, 怎么显示由 adaptor 决定; 模式和当前值放进 url, 缓存才会按搜索框 / 单据区分
|
|
20
|
+
const isSearch = !!context && Object.prototype.hasOwnProperty.call(context, 'filterFormSearchableFields');
|
|
21
|
+
const keepIds = isSearch ? [] : _.uniq(_.compact(_.flatMap(_.castArray((context && context.material_type) || []), (v) => {
|
|
22
|
+
const s = _.isString(v) ? v : String((v && v.value) || '');
|
|
23
|
+
return _.flatMap(s.split(/[,、]/), (p) => [p].concat(p.split('-')));
|
|
24
|
+
}).map((s) => s.trim())));
|
|
25
|
+
api.url = api.url.split('?')[0] + '?tag_options=' + (isSearch ? 'all' : encodeURIComponent(keepIds.join(',')));
|
|
19
26
|
api.data = {
|
|
20
27
|
query: `
|
|
21
28
|
query{
|
|
22
29
|
picklists(filters: [["code", "=", "223321001114222"]]){
|
|
23
|
-
options: _related_picklist_options_picklist(
|
|
24
|
-
label: name, value, , parent: parent__expand{value}
|
|
30
|
+
options: _related_picklist_options_picklist(sort: "sort_no desc"){
|
|
31
|
+
label: name, value, enable, parent: parent__expand{value}
|
|
25
32
|
}
|
|
26
33
|
}
|
|
27
34
|
}
|
|
28
35
|
`}
|
|
29
36
|
adaptor: |+
|
|
30
|
-
const
|
|
37
|
+
const allOptions = payload.data.picklists[0].options;
|
|
38
|
+
// 停用的选项: 列表搜索框全部列出并标「已停用」, 用来筛选历史单据;
|
|
39
|
+
// 表单 / 详情页只留当前值用到的(置灰, 不能再选), 否则停用后只显示一串 ID; 其余停用选项不显示
|
|
40
|
+
const tagOptions = new URLSearchParams(((api && api.url) || '').split('?')[1] || '').get('tag_options') || '';
|
|
41
|
+
const keepIds = tagOptions === 'all' ? null : tagOptions.split(',');
|
|
42
|
+
// 值里只存了末级 ID 时, 停用的上级也要带出来, 否则挂不到树上
|
|
43
|
+
_.forEach(keepIds, (id) => {
|
|
44
|
+
const op = _.find(allOptions, { value: id });
|
|
45
|
+
if (op && op.parent && !_.includes(keepIds, op.parent.value)) keepIds.push(op.parent.value);
|
|
46
|
+
});
|
|
47
|
+
const pOptions = _.compact(_.map(allOptions, (op) => {
|
|
48
|
+
if (op.enable !== false) return op;
|
|
49
|
+
if (keepIds == null) return { ...op, label: op.label + '(已停用)' };
|
|
50
|
+
return _.includes(keepIds, op.value) ? { ...op, disabled: true } : null;
|
|
51
|
+
}));
|
|
31
52
|
let depth = 0;
|
|
32
53
|
function getChildren(value) {
|
|
33
54
|
depth++;
|
|
@@ -23,13 +23,19 @@ amis:
|
|
|
23
23
|
// 搜索框的数据上有 filterFormSearchableFields; 只认自身属性, 不认从列表页继承下来的
|
|
24
24
|
const isSearch = !!context && Object.prototype.hasOwnProperty.call(context, 'filterFormSearchableFields');
|
|
25
25
|
const codes = isSearch ? ['223321001114213', '223321001114213-v3'] : [context && context.form_version === 'v3' ? '223321001114213-v3' : '223321001114213'];
|
|
26
|
-
|
|
26
|
+
// 停用的选项也查出来, 怎么显示由 adaptor 决定; 当前值放进 url, 缓存才会按单据区分
|
|
27
|
+
const keepIds = isSearch ? [] : _.uniq(_.compact(_.flatMap(_.castArray((context && context.product) || []), (v) => {
|
|
28
|
+
const s = _.isString(v) ? v : String((v && v.value) || '');
|
|
29
|
+
return _.flatMap(s.split(/[,、]/), (p) => [p].concat(p.split('-')));
|
|
30
|
+
}).map((s) => s.trim())));
|
|
31
|
+
api.url = api.url.split('?')[0] + '?product_picklist=' + (isSearch ? 'all' : codes[0])
|
|
32
|
+
+ '&tag_options=' + (isSearch ? 'all' : encodeURIComponent(keepIds.join(',')));
|
|
27
33
|
api.data = { query:`
|
|
28
34
|
query{
|
|
29
35
|
picklists(filters: [["code", "in", ${JSON.stringify(codes)}]]){
|
|
30
36
|
code,
|
|
31
|
-
options: _related_picklist_options_picklist(
|
|
32
|
-
label: name, value, , parent: parent__expand{value}
|
|
37
|
+
options: _related_picklist_options_picklist(sort: "sort_no desc"){
|
|
38
|
+
label: name, value, enable, parent: parent__expand{value}
|
|
33
39
|
}
|
|
34
40
|
}
|
|
35
41
|
}
|
|
@@ -38,9 +44,23 @@ amis:
|
|
|
38
44
|
adaptor: |+
|
|
39
45
|
// 选项集还没建好时下拉为空, 不报错。两套一起列出时(搜索框), 新选项集的顶级品牌标「[新]」
|
|
40
46
|
const picklists = (payload.data && payload.data.picklists) || [];
|
|
41
|
-
const
|
|
47
|
+
const allOptions = _.flatMap(picklists, (picklist) => picklists.length > 1 && picklist.code === '223321001114213-v3'
|
|
42
48
|
? _.map(picklist.options, (op) => op.parent == null ? { ...op, label: '[新] ' + op.label } : op)
|
|
43
49
|
: picklist.options);
|
|
50
|
+
// 停用的选项: 搜索框全部列出并标「已停用」, 用来筛选历史单据(原选项集冻结后旧品牌都停用了也要能搜);
|
|
51
|
+
// 表单 / 详情页只留当前值用到的(置灰, 不能再选), 否则停用后只显示一串 ID; 其余停用选项不显示
|
|
52
|
+
const tagOptions = new URLSearchParams(((api && api.url) || '').split('?')[1] || '').get('tag_options') || '';
|
|
53
|
+
const keepIds = tagOptions === 'all' ? null : tagOptions.split(',');
|
|
54
|
+
// 值里只存了末级 ID 时, 停用的上级也要带出来, 否则挂不到树上
|
|
55
|
+
_.forEach(keepIds, (id) => {
|
|
56
|
+
const op = _.find(allOptions, { value: id });
|
|
57
|
+
if (op && op.parent && !_.includes(keepIds, op.parent.value)) keepIds.push(op.parent.value);
|
|
58
|
+
});
|
|
59
|
+
const pOptions = _.compact(_.map(allOptions, (op) => {
|
|
60
|
+
if (op.enable !== false) return op;
|
|
61
|
+
if (keepIds == null) return { ...op, label: op.label + '(已停用)' };
|
|
62
|
+
return _.includes(keepIds, op.value) ? { ...op, disabled: true } : null;
|
|
63
|
+
}));
|
|
44
64
|
let depth = 0;
|
|
45
65
|
function getChildren(value) {
|
|
46
66
|
depth++;
|
|
@@ -16,17 +16,38 @@ amis:
|
|
|
16
16
|
url: /graphql
|
|
17
17
|
method: post
|
|
18
18
|
requestAdaptor: |-
|
|
19
|
+
// 停用的选项也查出来, 怎么显示由 adaptor 决定; 模式和当前值放进 url, 缓存才会按搜索框 / 单据区分
|
|
20
|
+
const isSearch = !!context && Object.prototype.hasOwnProperty.call(context, 'filterFormSearchableFields');
|
|
21
|
+
const keepIds = isSearch ? [] : _.uniq(_.compact(_.flatMap(_.castArray((context && context.social_media) || []), (v) => {
|
|
22
|
+
const s = _.isString(v) ? v : String((v && v.value) || '');
|
|
23
|
+
return _.flatMap(s.split(/[,、]/), (p) => [p].concat(p.split('-')));
|
|
24
|
+
}).map((s) => s.trim())));
|
|
25
|
+
api.url = api.url.split('?')[0] + '?tag_options=' + (isSearch ? 'all' : encodeURIComponent(keepIds.join(',')));
|
|
19
26
|
api.data = { query:`
|
|
20
27
|
query{
|
|
21
28
|
picklists(filters: [["code", "=", "social_media"]]){
|
|
22
|
-
options: _related_picklist_options_picklist(
|
|
23
|
-
label: name, value, , parent: parent__expand{value}
|
|
29
|
+
options: _related_picklist_options_picklist(sort: "sort_no desc"){
|
|
30
|
+
label: name, value, enable, parent: parent__expand{value}
|
|
24
31
|
}
|
|
25
32
|
}
|
|
26
33
|
}
|
|
27
34
|
`}
|
|
28
35
|
adaptor: |+
|
|
29
|
-
const
|
|
36
|
+
const allOptions = payload.data.picklists[0].options;
|
|
37
|
+
// 停用的选项: 列表搜索框全部列出并标「已停用」, 用来筛选历史单据;
|
|
38
|
+
// 表单 / 详情页只留当前值用到的(置灰, 不能再选), 否则停用后只显示一串 ID; 其余停用选项不显示
|
|
39
|
+
const tagOptions = new URLSearchParams(((api && api.url) || '').split('?')[1] || '').get('tag_options') || '';
|
|
40
|
+
const keepIds = tagOptions === 'all' ? null : tagOptions.split(',');
|
|
41
|
+
// 值里只存了末级 ID 时, 停用的上级也要带出来, 否则挂不到树上
|
|
42
|
+
_.forEach(keepIds, (id) => {
|
|
43
|
+
const op = _.find(allOptions, { value: id });
|
|
44
|
+
if (op && op.parent && !_.includes(keepIds, op.parent.value)) keepIds.push(op.parent.value);
|
|
45
|
+
});
|
|
46
|
+
const pOptions = _.compact(_.map(allOptions, (op) => {
|
|
47
|
+
if (op.enable !== false) return op;
|
|
48
|
+
if (keepIds == null) return { ...op, label: op.label + '(已停用)' };
|
|
49
|
+
return _.includes(keepIds, op.value) ? { ...op, disabled: true } : null;
|
|
50
|
+
}));
|
|
30
51
|
let depth = 0;
|
|
31
52
|
function getChildren(value) {
|
|
32
53
|
depth++;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
name: agency_contract_expiry_date
|
|
2
2
|
amis:
|
|
3
3
|
id: 'u:agency_contract_expiry_date'
|
|
4
|
-
group:
|
|
4
|
+
group: 个人信息
|
|
5
5
|
label: Agency合同截止日期
|
|
6
6
|
required: false
|
|
7
|
-
sort_no:
|
|
7
|
+
sort_no: 10000
|
|
8
8
|
type: date
|
|
9
|
-
visible_on: '{{global.user.is_space_admin}}'
|
|
9
|
+
visible_on: '{{global.user.is_space_admin === true && formData.is_collaborator === true}}'
|
|
@@ -2,13 +2,13 @@ name: agency_pepsico_contact
|
|
|
2
2
|
amis:
|
|
3
3
|
id: 'u:agency_pepsico_contact'
|
|
4
4
|
filters: []
|
|
5
|
-
group:
|
|
5
|
+
group: 个人信息
|
|
6
6
|
is_wide: false
|
|
7
7
|
label: Agency百事内部对接人
|
|
8
8
|
multiple: false
|
|
9
9
|
reference_to: space_users
|
|
10
10
|
reference_to_field: user
|
|
11
11
|
required: false
|
|
12
|
-
sort_no:
|
|
12
|
+
sort_no: 10010
|
|
13
13
|
type: lookup
|
|
14
|
-
visible_on: '{{global.user.is_space_admin}}'
|
|
14
|
+
visible_on: '{{global.user.is_space_admin === true && formData.is_collaborator === true}}'
|
|
@@ -5,11 +5,11 @@ description: ''
|
|
|
5
5
|
enable_thousands: true
|
|
6
6
|
group: 系统信息
|
|
7
7
|
inlineHelpText: ''
|
|
8
|
-
label:
|
|
8
|
+
label: 最近登录
|
|
9
9
|
sort_no: 1700
|
|
10
10
|
type: date
|
|
11
|
-
visible_on: '{{global.user.is_space_admin}}'
|
|
11
|
+
visible_on: '{{global.user.is_space_admin === true && global.mode === "read"}}'
|
|
12
12
|
hidden: false
|
|
13
13
|
omit: false
|
|
14
14
|
static: true
|
|
15
|
-
is_wide: false
|
|
15
|
+
is_wide: false
|
|
@@ -9,7 +9,7 @@ hidden: false
|
|
|
9
9
|
inlineHelpText: ''
|
|
10
10
|
label: 超90天未登录
|
|
11
11
|
omit: false
|
|
12
|
-
sort_no:
|
|
12
|
+
sort_no: 1900
|
|
13
13
|
type: boolean
|
|
14
|
-
visible_on: '{{global.user.is_space_admin}}'
|
|
15
|
-
static: true
|
|
14
|
+
visible_on: '{{global.user.is_space_admin === true && global.mode === "read"}}'
|
|
15
|
+
static: true
|
package/package.json
CHANGED
|
@@ -701,3 +701,30 @@ tbody .color-priority-postponed *{
|
|
|
701
701
|
.antd-Modal .pepsico-pls-files-field {
|
|
702
702
|
border-bottom: 0 !important;
|
|
703
703
|
}
|
|
704
|
+
|
|
705
|
+
/* 文件上传字段的说明文字: amis 文件上传控件自己渲染说明, 字号用的是 14px,
|
|
706
|
+
比其它字段的说明(12px)大。统一成表单说明文字的字号和行高。 */
|
|
707
|
+
.antd-FileControl-description {
|
|
708
|
+
font-size: var(--Form-description-fontSize);
|
|
709
|
+
line-height: var(--Form-description-lineHeight);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/* 表单字段的 placeholder 统一为 12px, 与字段说明文字一致。
|
|
713
|
+
输入框类用 ::placeholder; 下拉、树形下拉、日期、选人等控件的 placeholder 是单独的元素。
|
|
714
|
+
加 .amis-scope 前缀, 优先级不低于 amis 自带的 placeholder 样式。 */
|
|
715
|
+
.amis-scope .antd-Form-item input::placeholder,
|
|
716
|
+
.amis-scope .antd-Form-item textarea::placeholder,
|
|
717
|
+
.amis-scope .antd-Form-item .antd-Select-placeholder,
|
|
718
|
+
.amis-scope .antd-Form-item .antd-ResultBox-placeholder,
|
|
719
|
+
.amis-scope .antd-Form-item .antd-Picker-placeholder,
|
|
720
|
+
.amis-scope .antd-Form-item .antd-DatePicker-placeholder,
|
|
721
|
+
.amis-scope .antd-Form-item .antd-DateRangePicker-placeholder,
|
|
722
|
+
.amis-scope .antd-Form-item .antd-TextControl-placeholder {
|
|
723
|
+
font-size: var(--Form-description-fontSize);
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
/* 按钮点选字段(有无BGM、有无文字、是否可以进行素材编辑等)的选项文字统一为 12px,
|
|
727
|
+
与文件上传按钮「文件上传」的文字一致; amis 按钮默认是 14px。 */
|
|
728
|
+
.amis-scope .antd-Form-item .antd-ButtonGroup .antd-Button {
|
|
729
|
+
font-size: var(--fontSizeSm);
|
|
730
|
+
}
|