@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.
Files changed (55) hide show
  1. package/dist/index.js +1 -1
  2. package/lib/methods/AI.d.ts +1 -0
  3. package/lib/methods/AI.js +58 -44
  4. package/lib/methods/AI.js.map +1 -1
  5. package/lib/methods/__tests__/aiReviewLog.test.d.ts +1 -0
  6. package/lib/methods/__tests__/aiReviewLog.test.js +101 -0
  7. package/lib/methods/__tests__/aiReviewLog.test.js.map +1 -0
  8. package/lib/methods/__tests__/contentHubPush.test.js +63 -5
  9. package/lib/methods/__tests__/contentHubPush.test.js.map +1 -1
  10. package/lib/methods/__tests__/contentHubSyncRule.test.js +9 -0
  11. package/lib/methods/__tests__/contentHubSyncRule.test.js.map +1 -1
  12. package/lib/methods/content_hub.js +26 -37
  13. package/lib/methods/content_hub.js.map +1 -1
  14. package/lib/methods/content_hub_sync_rule.js +7 -3
  15. package/lib/methods/content_hub_sync_rule.js.map +1 -1
  16. package/lib/methods/content_hub_uploader.d.ts +7 -2
  17. package/lib/methods/content_hub_uploader.js +20 -12
  18. package/lib/methods/content_hub_uploader.js.map +1 -1
  19. package/main/default/objectTranslations/space_users.zh-CN/space_users.zh-CN.objectTranslation.yml +4 -0
  20. package/main/default/objects/pepesio_ch__c/pepesio_ch__c.object.yml +1 -1
  21. package/main/default/objects/pepsico_ch_material_group_rule/listviews/all.listview.yml +2 -3
  22. package/main/default/objects/pepsico_ch_material_group_rule/pepsico_ch_material_group_rule.object.yml +1 -1
  23. package/main/default/objects/pepsico_ch_sync_rule/fields/kol_classification.field.yml +7 -2
  24. package/main/default/objects/pepsico_ch_sync_rule/fields/spot_check.field.yml +4 -4
  25. package/main/default/objects/pepsico_ch_sync_rule/listviews/all.listview.yml +2 -7
  26. package/main/default/objects/pepsico_ch_sync_rule/pepsico_ch_sync_rule.object.yml +1 -1
  27. package/main/default/objects/pepsico_ch_tag_sync_log/pepsico_ch_tag_sync_log.object.yml +1 -1
  28. package/main/default/objects/pepsico_ch_tag_sync_request/pepsico_ch_tag_sync_request.object.yml +1 -1
  29. package/main/default/objects/pepsico_material_approval/fields/available_channels.field.yml +24 -3
  30. package/main/default/objects/pepsico_material_approval/fields/ch_sync_enabled.field.yml +1 -1
  31. package/main/default/objects/pepsico_material_approval/fields/classification.field.yml +24 -3
  32. package/main/default/objects/pepsico_material_approval/fields/content_rule.field.yml +24 -3
  33. package/main/default/objects/pepsico_material_approval/fields/kol_classification.field.yml +24 -3
  34. package/main/default/objects/pepsico_material_approval/fields/material_editable.field.yml +26 -5
  35. package/main/default/objects/pepsico_material_approval/fields/material_type.field.yml +24 -3
  36. package/main/default/objects/pepsico_material_approval/fields/product.field.yml +24 -4
  37. package/main/default/objects/pepsico_material_approval/fields/social_media.field.yml +24 -3
  38. package/main/default/objects/space_users/fields/agency_contract_expiry_date.field.yml +3 -3
  39. package/main/default/objects/space_users/fields/agency_pepsico_contact.field.yml +3 -3
  40. package/main/default/objects/space_users/fields/avatar.field.yml +1 -1
  41. package/main/default/objects/space_users/fields/created.field.yml +1 -1
  42. package/main/default/objects/space_users/fields/email_notification.field.yml +1 -1
  43. package/main/default/objects/space_users/fields/is_collaborator.field.yml +2 -1
  44. package/main/default/objects/space_users/fields/last_logon.field.yml +3 -3
  45. package/main/default/objects/space_users/fields/login_expired.field.yml +3 -3
  46. package/main/default/objects/space_users/fields/modified.field.yml +1 -1
  47. package/main/default/objects/space_users/fields/modified_by.field.yml +1 -1
  48. package/main/default/objects/space_users/fields/password_expired.field.yml +1 -1
  49. package/main/default/tabs/object_pepesio_ch.tab.yml +1 -1
  50. package/main/default/tabs/object_pepsico_ch_material_group_rule.tab.yml +1 -1
  51. package/main/default/tabs/object_pepsico_ch_sync_rule.tab.yml +1 -1
  52. package/main/default/tabs/object_pepsico_ch_tag_sync_log.tab.yml +1 -1
  53. package/main/default/tabs/object_pepsico_ch_tag_sync_request.tab.yml +1 -1
  54. package/package.json +1 -1
  55. package/public/content-review/amis.css +27 -0
@@ -12,5 +12,5 @@ field_groups:
12
12
  - group_name: 通用
13
13
  icon: action_list_component
14
14
  is_enable: true
15
- label: Content Hub 标签同步明细
15
+ label: CH 标签同步明细
16
16
  version: 2
@@ -12,5 +12,5 @@ field_groups:
12
12
  - group_name: 通用
13
13
  icon: action_list_component
14
14
  is_enable: true
15
- label: Content Hub 标签同步请求
15
+ label: CH 标签同步请求
16
16
  version: 2
@@ -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(filters: [["enable", "=", true]], sort: "sort_no desc"){
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 pOptions = payload.data.picklists[0].options;
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++;
@@ -11,7 +11,7 @@ amis:
11
11
  componentId: 'u:ch_sync_manual'
12
12
  args:
13
13
  value: true
14
- description: 如需将素材推送至 Content Hub 请勾选,勾选后选择需要同步的素材组目录。
14
+ description: 如需素材推送至 Content Hub 请勾选
15
15
  group: Content Hub同步与版权文件
16
16
  label: 素材需同步到 Content Hub
17
17
  required: false
@@ -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(filters: [["enable", "=", true]], sort: "sort_no desc"){
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 pOptions = payload.data.picklists[0].options;
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(filters: [["enable", "=", true]], sort: "sort_no desc"){
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 pOptions = payload.data.picklists[0].options;
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(filters: [["enable", "=", true]], sort: "sort_no desc"){
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 pOptions = payload.data.picklists[0].options;
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(filters: [["enable", "=", true]], sort: "sort_no desc"){
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 pOptions = payload.data.picklists[0].options;
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(filters: [["enable", "=", true]], sort: "sort_no desc"){
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 pOptions = payload.data.picklists[0].options;
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
- api.url = api.url.split('?')[0] + '?product_picklist=' + (isSearch ? 'all' : codes[0]);
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(filters: [["enable", "=", true]], sort: "sort_no desc"){
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 pOptions = _.flatMap(picklists, (picklist) => picklists.length > 1 && picklist.code === '223321001114213-v3'
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(filters: [["enable", "=", true]], sort: "sort_no desc"){
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 pOptions = payload.data.picklists[0].options;
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: 1710
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: 1720
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}}'
@@ -7,4 +7,4 @@ inlineHelpText: ''
7
7
  label: 头像
8
8
  sort_no: 99998
9
9
  type: avatar
10
- is_wide: false
10
+ is_wide: true
@@ -7,6 +7,6 @@ index: true
7
7
  inlineHelpText: ''
8
8
  label: 创建时间
9
9
  readonly: true
10
- sort_no: 1750
10
+ sort_no: 1151
11
11
  sortable: true
12
12
  type: datetime
@@ -6,6 +6,6 @@ enable_thousands: true
6
6
  group: 个人信息
7
7
  inlineHelpText: ''
8
8
  label: 接收邮件通知
9
- sort_no: 9999
9
+ sort_no: 845
10
10
  is_wide: false
11
11
  type: boolean
@@ -6,5 +6,6 @@ enable_thousands: true
6
6
  group: 个人信息
7
7
  inlineHelpText: ''
8
8
  label: 是否协作者
9
- sort_no: 845
9
+ sort_no: 999
10
10
  type: boolean
11
+ is_wide: 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: 1151
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
@@ -7,6 +7,6 @@ index: true
7
7
  inlineHelpText: ''
8
8
  label: 修改时间
9
9
  readonly: true
10
- sort_no: 1900
10
+ sort_no: 1750
11
11
  sortable: true
12
12
  type: datetime
@@ -8,5 +8,5 @@ inlineHelpText: ''
8
8
  label: 修改人
9
9
  readonly: true
10
10
  reference_to: users
11
- sort_no: 1850
11
+ sort_no: 1705
12
12
  type: lookup
@@ -9,7 +9,7 @@ hidden: false
9
9
  inlineHelpText: ''
10
10
  label: 密码已过期
11
11
  omit: false
12
- sort_no: 1705
12
+ sort_no: 1850
13
13
  is_wide: false
14
14
  type: boolean
15
15
  visible_on: '{{global.user.is_space_admin}}'
@@ -1,7 +1,7 @@
1
1
  name: object_pepesio_ch
2
2
  desktop: true
3
3
  icon: account
4
- label: Content hub素材推送
4
+ label: CH 素材推送
5
5
  mobile: true
6
6
  object: pepesio_ch__c
7
7
  permissions: []
@@ -1,7 +1,7 @@
1
1
  name: object_pepsico_ch_material_group_rule
2
2
  desktop: true
3
3
  icon: hierarchy
4
- label: Content Hub 素材组查询规则
4
+ label: CH 素材组查询规则
5
5
  mobile: false
6
6
  object: pepsico_ch_material_group_rule
7
7
  permissions: []
@@ -1,7 +1,7 @@
1
1
  name: object_pepsico_ch_sync_rule
2
2
  desktop: true
3
3
  icon: approval
4
- label: Content Hub 同步规则
4
+ label: CH 同步规则
5
5
  mobile: false
6
6
  object: pepsico_ch_sync_rule
7
7
  permissions: []
@@ -1,7 +1,7 @@
1
1
  name: object_pepsico_ch_tag_sync_log
2
2
  desktop: true
3
3
  icon: action_list_component
4
- label: Content Hub 标签同步明细
4
+ label: CH 标签同步明细
5
5
  mobile: false
6
6
  object: pepsico_ch_tag_sync_log
7
7
  permissions: []
@@ -1,7 +1,7 @@
1
1
  name: object_pepsico_ch_tag_sync_request
2
2
  desktop: true
3
3
  icon: action_list_component
4
- label: Content Hub 标签同步请求
4
+ label: CH 标签同步请求
5
5
  mobile: false
6
6
  object: pepsico_ch_tag_sync_request
7
7
  permissions: []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos-labs/content-compliance",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "内容审核系统改造:content hub&登录页增加申请表&跳过中止操作支持上传证明文件表单改造",
5
5
  "main": "package.service.js",
6
6
  "scripts": {
@@ -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
+ }