@steedos-labs/content-compliance 0.7.2 → 0.7.4
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/actions/index.d.ts +2 -0
- package/lib/actions/index.js +2 -0
- package/lib/actions/index.js.map +1 -1
- package/lib/actions/postponeReview.d.ts +7 -0
- package/lib/actions/postponeReview.js +30 -0
- package/lib/actions/postponeReview.js.map +1 -0
- package/lib/actions/urgentApproval.d.ts +14 -0
- package/lib/actions/urgentApproval.js +51 -0
- package/lib/actions/urgentApproval.js.map +1 -0
- package/lib/index.js +100 -52
- package/lib/index.js.map +1 -1
- package/lib/methods/approval_engine.d.ts +1 -0
- package/lib/methods/approval_engine.js +363 -100
- package/lib/methods/approval_engine.js.map +1 -1
- package/lib/methods/consts.d.ts +4 -0
- package/lib/methods/consts.js.map +1 -1
- package/lib/methods/index.d.ts +1 -0
- package/lib/methods/index.js +1 -0
- package/lib/methods/index.js.map +1 -1
- package/lib/methods/notification.d.ts +1 -0
- package/lib/methods/notification.js +109 -6
- package/lib/methods/notification.js.map +1 -1
- package/lib/methods/urgent.d.ts +19 -0
- package/lib/methods/urgent.js +253 -0
- package/lib/methods/urgent.js.map +1 -0
- package/main/default/applications/pepsico_content_review.app.yml +24 -102
- package/main/default/objects/pepsico_approval_process/fields/approved.field.yml +3 -0
- package/main/default/objects/pepsico_material_approval/buttons/pepsico_postpone_review.button.yml +145 -0
- package/main/default/objects/pepsico_material_approval/buttons/pepsico_urgent_review.button.yml +156 -0
- package/main/default/objects/pepsico_material_approval/fields/is_urgent.field.yml +9 -0
- package/main/default/objects/pepsico_material_approval/fields/review_postponed_users.field.yml +15 -0
- package/main/default/objects/pepsico_material_approval/fields/urgent_at.field.yml +8 -0
- package/main/default/objects/pepsico_material_approval/fields/urgent_name_tag.field.yml +8 -0
- package/main/default/objects/pepsico_material_approval/fields/urgent_times.field.yml +9 -0
- package/main/default/objects/pepsico_material_approval/listviews/all.listview.yml +4 -0
- package/main/default/objects/pepsico_material_approval/listviews/collaboration.listview.yml +4 -0
- package/main/default/objects/pepsico_material_approval/listviews/handle.listview.yml +8 -0
- package/main/default/objects/pepsico_material_approval/listviews/handle_postpone.listview.yml +89 -0
- package/main/default/objects/pepsico_review_postpone/fields/department_type.field.yml +29 -0
- package/main/default/objects/pepsico_review_postpone/fields/is_marker.field.yml +7 -0
- package/main/default/objects/pepsico_review_postpone/fields/notification_sent.field.yml +6 -0
- package/main/default/objects/pepsico_review_postpone/fields/pepsico_material_approval.field.yml +10 -0
- package/main/default/objects/pepsico_review_postpone/fields/postpone_by.field.yml +7 -0
- package/main/default/objects/pepsico_review_postpone/fields/postpone_date.field.yml +6 -0
- package/main/default/objects/pepsico_review_postpone/fields/postpone_reason.field.yml +6 -0
- package/main/default/objects/pepsico_review_postpone/fields/postponed_user_ids.field.yml +6 -0
- package/main/default/objects/pepsico_review_postpone/fields/visible_after.field.yml +6 -0
- package/main/default/objects/pepsico_review_postpone/listviews/all.listview.yml +21 -0
- package/main/default/objects/pepsico_review_postpone/listviews/mine.listview.yml +16 -0
- package/main/default/objects/pepsico_review_postpone/pepsico_review_postpone.object.yml +16 -0
- package/main/default/objects/pepsico_review_postpone/permissions/admin.permission.yml +9 -0
- package/main/default/objects/pepsico_review_postpone/permissions/pepsico_submit.permission.yml +10 -0
- package/main/default/objects/pepsico_review_postpone/permissions/user.permission.yml +9 -0
- package/main/default/objects/pepsico_urgent_log/fields/approval.field.yml +7 -0
- package/main/default/objects/pepsico_urgent_log/fields/approval_name.field.yml +6 -0
- package/main/default/objects/pepsico_urgent_log/fields/half.field.yml +7 -0
- package/main/default/objects/pepsico_urgent_log/fields/operator.field.yml +7 -0
- package/main/default/objects/pepsico_urgent_log/fields/space.field.yml +6 -0
- package/main/default/objects/pepsico_urgent_log/fields/year.field.yml +6 -0
- package/main/default/objects/pepsico_urgent_log/pepsico_urgent_log.object.yml +16 -0
- package/main/default/objects/pepsico_urgent_quota/fields/h1_used.field.yml +7 -0
- package/main/default/objects/pepsico_urgent_quota/fields/h2_used.field.yml +7 -0
- package/main/default/objects/pepsico_urgent_quota/fields/space.field.yml +6 -0
- package/main/default/objects/pepsico_urgent_quota/fields/user.field.yml +7 -0
- package/main/default/objects/pepsico_urgent_quota/fields/year.field.yml +6 -0
- package/main/default/objects/pepsico_urgent_quota/pepsico_urgent_quota.object.yml +16 -0
- package/main/default/pages/pepsico_content_review_detail.page.amis.json +14 -6
- package/main/default/restrictionRules/pepsico_material_approval.restrictionRule.yml +1 -1
- package/main/default/tabs/object_pepsico_urgent_log.tab.yml +14 -0
- package/main/default/tabs/object_pepsico_urgent_quota.tab.yml +14 -0
- package/package.json +1 -1
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.doUrgent = exports.canUrgent = exports.getUrgentQuota = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var consts_1 = require("./consts");
|
|
6
|
+
var HALF_YEAR_QUOTA = 6;
|
|
7
|
+
var getUrgentQuota = function (ctx, userId, space) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
8
|
+
var now, year, half, quota, h1_used, h2_used, available, used, total, h1_remaining;
|
|
9
|
+
return tslib_1.__generator(this, function (_a) {
|
|
10
|
+
switch (_a.label) {
|
|
11
|
+
case 0:
|
|
12
|
+
now = new Date();
|
|
13
|
+
year = now.getFullYear();
|
|
14
|
+
half = now.getMonth() < 6 ? 1 : 2;
|
|
15
|
+
return [4, ctx.getObject('pepsico_urgent_quota').findOne({
|
|
16
|
+
filters: [['user', '=', userId], ['space', '=', space], ['year', '=', year]]
|
|
17
|
+
})];
|
|
18
|
+
case 1:
|
|
19
|
+
quota = _a.sent();
|
|
20
|
+
h1_used = (quota === null || quota === void 0 ? void 0 : quota.h1_used) || 0;
|
|
21
|
+
h2_used = (quota === null || quota === void 0 ? void 0 : quota.h2_used) || 0;
|
|
22
|
+
if (half === 1) {
|
|
23
|
+
used = h1_used;
|
|
24
|
+
total = HALF_YEAR_QUOTA;
|
|
25
|
+
available = Math.max(0, HALF_YEAR_QUOTA - h1_used);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
h1_remaining = Math.max(0, HALF_YEAR_QUOTA - h1_used);
|
|
29
|
+
total = HALF_YEAR_QUOTA + h1_remaining;
|
|
30
|
+
used = h2_used;
|
|
31
|
+
available = Math.max(0, total - h2_used);
|
|
32
|
+
}
|
|
33
|
+
return [2, { available: available, used: used, total: total, year: year, half: half }];
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}); };
|
|
37
|
+
exports.getUrgentQuota = getUrgentQuota;
|
|
38
|
+
var canUrgent = function (ctx, approvalId, userId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
39
|
+
var approval, reviewSteps, postponedUsers, quota;
|
|
40
|
+
return tslib_1.__generator(this, function (_a) {
|
|
41
|
+
switch (_a.label) {
|
|
42
|
+
case 0: return [4, ctx.getObject('pepsico_material_approval').findOne(approvalId)];
|
|
43
|
+
case 1:
|
|
44
|
+
approval = _a.sent();
|
|
45
|
+
if (!approval) {
|
|
46
|
+
return [2, { canUrgent: false, reason: '审批单不存在' }];
|
|
47
|
+
}
|
|
48
|
+
if (approval.is_urgent) {
|
|
49
|
+
return [2, { canUrgent: false, reason: '该审批单已处于加急状态' }];
|
|
50
|
+
}
|
|
51
|
+
if (approval.owner !== userId) {
|
|
52
|
+
return [2, { canUrgent: false, reason: '只有发起人可以加急' }];
|
|
53
|
+
}
|
|
54
|
+
reviewSteps = [consts_1.Step.departmental_review, consts_1.Step.personnel_review];
|
|
55
|
+
if (!reviewSteps.includes(approval.current_step)) {
|
|
56
|
+
return [2, { canUrgent: false, reason: '当前步骤不支持加急' }];
|
|
57
|
+
}
|
|
58
|
+
postponedUsers = approval.review_postponed_users || [];
|
|
59
|
+
if (postponedUsers.length > 0) {
|
|
60
|
+
return [2, { canUrgent: false, reason: '存在延后审核人,无法加急' }];
|
|
61
|
+
}
|
|
62
|
+
return [4, (0, exports.getUrgentQuota)(ctx, userId, approval.space)];
|
|
63
|
+
case 2:
|
|
64
|
+
quota = _a.sent();
|
|
65
|
+
if (quota.available <= 0) {
|
|
66
|
+
return [2, { canUrgent: false, reason: '暂无加急次数', quota: quota }];
|
|
67
|
+
}
|
|
68
|
+
return [2, { canUrgent: true, quota: quota }];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}); };
|
|
72
|
+
exports.canUrgent = canUrgent;
|
|
73
|
+
var sendUrgentNotification = function (ctx, space, approvalId, approvalName, fromUserId, toUserId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
74
|
+
var error_1, spaceUsers, spaceUsers_1, spaceUsers_1_1, spaceUser, error_2, e_1_1, error_3;
|
|
75
|
+
var e_1, _a;
|
|
76
|
+
return tslib_1.__generator(this, function (_b) {
|
|
77
|
+
switch (_b.label) {
|
|
78
|
+
case 0:
|
|
79
|
+
_b.trys.push([0, 2, , 3]);
|
|
80
|
+
return [4, ctx.broker.call('notifications.add', {
|
|
81
|
+
message: {
|
|
82
|
+
name: "[\u52A0\u6025] ".concat(approvalName),
|
|
83
|
+
body: '发起人已标记为加急审核,请优先处理',
|
|
84
|
+
related_to: {
|
|
85
|
+
o: 'pepsico_material_approval',
|
|
86
|
+
ids: [approvalId]
|
|
87
|
+
},
|
|
88
|
+
related_name: approvalName,
|
|
89
|
+
from: fromUserId,
|
|
90
|
+
space: space
|
|
91
|
+
},
|
|
92
|
+
from: fromUserId,
|
|
93
|
+
to: toUserId
|
|
94
|
+
})];
|
|
95
|
+
case 1:
|
|
96
|
+
_b.sent();
|
|
97
|
+
return [3, 3];
|
|
98
|
+
case 2:
|
|
99
|
+
error_1 = _b.sent();
|
|
100
|
+
console.log('[urgent] sendUrgentNotification notification error', error_1);
|
|
101
|
+
return [3, 3];
|
|
102
|
+
case 3:
|
|
103
|
+
_b.trys.push([3, 15, , 16]);
|
|
104
|
+
return [4, ctx.getObject('space_users').find({
|
|
105
|
+
filters: [['user', '=', toUserId], ['space', '=', space]]
|
|
106
|
+
})];
|
|
107
|
+
case 4:
|
|
108
|
+
spaceUsers = _b.sent();
|
|
109
|
+
_b.label = 5;
|
|
110
|
+
case 5:
|
|
111
|
+
_b.trys.push([5, 12, 13, 14]);
|
|
112
|
+
spaceUsers_1 = tslib_1.__values(spaceUsers), spaceUsers_1_1 = spaceUsers_1.next();
|
|
113
|
+
_b.label = 6;
|
|
114
|
+
case 6:
|
|
115
|
+
if (!!spaceUsers_1_1.done) return [3, 11];
|
|
116
|
+
spaceUser = spaceUsers_1_1.value;
|
|
117
|
+
if (!spaceUser.email) return [3, 10];
|
|
118
|
+
_b.label = 7;
|
|
119
|
+
case 7:
|
|
120
|
+
_b.trys.push([7, 9, , 10]);
|
|
121
|
+
return [4, ctx.broker.call('@builder6/email.send', {
|
|
122
|
+
to: spaceUser.email,
|
|
123
|
+
subject: "[\u52A0\u6025\u5BA1\u6838] ".concat(approvalName),
|
|
124
|
+
html: "\n <p>\u60A8\u6709\u4E00\u4EFD\u5BA1\u6279\u5355\u88AB\u6807\u8BB0\u4E3A<strong>\u52A0\u6025\u5BA1\u6838</strong>\uFF0C\u8BF7\u4F18\u5148\u5904\u7406\u3002</p>\n <a href=\"".concat(process.env.ROOT_URL, "/app/pepsico_content_review/pepsico_material_approval/view/").concat(approvalId, "?side_object=pepsico_material_approval&side_listview_id=pending\">").concat(approvalName, "</a>\n ")
|
|
125
|
+
})];
|
|
126
|
+
case 8:
|
|
127
|
+
_b.sent();
|
|
128
|
+
return [3, 10];
|
|
129
|
+
case 9:
|
|
130
|
+
error_2 = _b.sent();
|
|
131
|
+
console.log('[urgent] sendUrgentNotification email error', error_2);
|
|
132
|
+
return [3, 10];
|
|
133
|
+
case 10:
|
|
134
|
+
spaceUsers_1_1 = spaceUsers_1.next();
|
|
135
|
+
return [3, 6];
|
|
136
|
+
case 11: return [3, 14];
|
|
137
|
+
case 12:
|
|
138
|
+
e_1_1 = _b.sent();
|
|
139
|
+
e_1 = { error: e_1_1 };
|
|
140
|
+
return [3, 14];
|
|
141
|
+
case 13:
|
|
142
|
+
try {
|
|
143
|
+
if (spaceUsers_1_1 && !spaceUsers_1_1.done && (_a = spaceUsers_1.return)) _a.call(spaceUsers_1);
|
|
144
|
+
}
|
|
145
|
+
finally { if (e_1) throw e_1.error; }
|
|
146
|
+
return [7];
|
|
147
|
+
case 14: return [3, 16];
|
|
148
|
+
case 15:
|
|
149
|
+
error_3 = _b.sent();
|
|
150
|
+
console.log('[urgent] sendUrgentNotification spaceUsers error', error_3);
|
|
151
|
+
return [3, 16];
|
|
152
|
+
case 16: return [2];
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}); };
|
|
156
|
+
var doUrgent = function (ctx, approvalId, userId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
157
|
+
var check, approval, _a, year, half, used, total, existingQuota, updateField, pendingApprovers, pendingApprovers_1, pendingApprovers_1_1, approverId, e_2_1, newUsed, newAvailable;
|
|
158
|
+
var _b, e_2, _c;
|
|
159
|
+
return tslib_1.__generator(this, function (_d) {
|
|
160
|
+
switch (_d.label) {
|
|
161
|
+
case 0: return [4, (0, exports.canUrgent)(ctx, approvalId, userId)];
|
|
162
|
+
case 1:
|
|
163
|
+
check = _d.sent();
|
|
164
|
+
if (!check.canUrgent) {
|
|
165
|
+
throw new Error(check.reason);
|
|
166
|
+
}
|
|
167
|
+
return [4, ctx.getObject('pepsico_material_approval').findOne(approvalId)];
|
|
168
|
+
case 2:
|
|
169
|
+
approval = _d.sent();
|
|
170
|
+
_a = check.quota, year = _a.year, half = _a.half, used = _a.used, total = _a.total;
|
|
171
|
+
return [4, ctx.getObject('pepsico_urgent_quota').findOne({
|
|
172
|
+
filters: [['user', '=', userId], ['space', '=', approval.space], ['year', '=', year]]
|
|
173
|
+
})];
|
|
174
|
+
case 3:
|
|
175
|
+
existingQuota = _d.sent();
|
|
176
|
+
updateField = half === 1 ? 'h1_used' : 'h2_used';
|
|
177
|
+
if (!existingQuota) return [3, 5];
|
|
178
|
+
return [4, ctx.getObject('pepsico_urgent_quota').directUpdate(existingQuota._id, (_b = {},
|
|
179
|
+
_b[updateField] = (existingQuota[updateField] || 0) + 1,
|
|
180
|
+
_b))];
|
|
181
|
+
case 4:
|
|
182
|
+
_d.sent();
|
|
183
|
+
return [3, 7];
|
|
184
|
+
case 5: return [4, ctx.getObject('pepsico_urgent_quota').insert({
|
|
185
|
+
user: userId,
|
|
186
|
+
space: approval.space,
|
|
187
|
+
year: year,
|
|
188
|
+
h1_used: half === 1 ? 1 : 0,
|
|
189
|
+
h2_used: half === 2 ? 1 : 0
|
|
190
|
+
})];
|
|
191
|
+
case 6:
|
|
192
|
+
_d.sent();
|
|
193
|
+
_d.label = 7;
|
|
194
|
+
case 7: return [4, ctx.getObject('pepsico_material_approval').directUpdate(approvalId, {
|
|
195
|
+
is_urgent: true,
|
|
196
|
+
urgent_times: (approval.urgent_times || 0) + 1,
|
|
197
|
+
urgent_at: new Date()
|
|
198
|
+
})];
|
|
199
|
+
case 8:
|
|
200
|
+
_d.sent();
|
|
201
|
+
return [4, ctx.getObject('pepsico_urgent_log').insert({
|
|
202
|
+
approval: approvalId,
|
|
203
|
+
approval_name: approval.name,
|
|
204
|
+
operator: userId,
|
|
205
|
+
space: approval.space,
|
|
206
|
+
year: year,
|
|
207
|
+
half: half
|
|
208
|
+
})];
|
|
209
|
+
case 9:
|
|
210
|
+
_d.sent();
|
|
211
|
+
pendingApprovers = Array.isArray(approval.person_pending_approve)
|
|
212
|
+
? approval.person_pending_approve
|
|
213
|
+
: [];
|
|
214
|
+
_d.label = 10;
|
|
215
|
+
case 10:
|
|
216
|
+
_d.trys.push([10, 15, 16, 17]);
|
|
217
|
+
pendingApprovers_1 = tslib_1.__values(pendingApprovers), pendingApprovers_1_1 = pendingApprovers_1.next();
|
|
218
|
+
_d.label = 11;
|
|
219
|
+
case 11:
|
|
220
|
+
if (!!pendingApprovers_1_1.done) return [3, 14];
|
|
221
|
+
approverId = pendingApprovers_1_1.value;
|
|
222
|
+
return [4, sendUrgentNotification(ctx, approval.space, approvalId, approval.name, userId, approverId)];
|
|
223
|
+
case 12:
|
|
224
|
+
_d.sent();
|
|
225
|
+
_d.label = 13;
|
|
226
|
+
case 13:
|
|
227
|
+
pendingApprovers_1_1 = pendingApprovers_1.next();
|
|
228
|
+
return [3, 11];
|
|
229
|
+
case 14: return [3, 17];
|
|
230
|
+
case 15:
|
|
231
|
+
e_2_1 = _d.sent();
|
|
232
|
+
e_2 = { error: e_2_1 };
|
|
233
|
+
return [3, 17];
|
|
234
|
+
case 16:
|
|
235
|
+
try {
|
|
236
|
+
if (pendingApprovers_1_1 && !pendingApprovers_1_1.done && (_c = pendingApprovers_1.return)) _c.call(pendingApprovers_1);
|
|
237
|
+
}
|
|
238
|
+
finally { if (e_2) throw e_2.error; }
|
|
239
|
+
return [7];
|
|
240
|
+
case 17:
|
|
241
|
+
newUsed = used + 1;
|
|
242
|
+
newAvailable = Math.max(0, total - newUsed);
|
|
243
|
+
return [2, {
|
|
244
|
+
message: "\u52A0\u6025\u6210\u529F\uFF01\u5DF2\u4F7F\u7528 ".concat(newUsed, " \u6B21\uFF0C\u5269\u4F59 ").concat(newAvailable, " \u6B21"),
|
|
245
|
+
used: newUsed,
|
|
246
|
+
available: newAvailable,
|
|
247
|
+
total: total
|
|
248
|
+
}];
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}); };
|
|
252
|
+
exports.doUrgent = doUrgent;
|
|
253
|
+
//# sourceMappingURL=urgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urgent.js","sourceRoot":"","sources":["../../src/methods/urgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,9 @@ tab_groups:
|
|
|
50
50
|
- group_name: 知识库
|
|
51
51
|
default_open: true
|
|
52
52
|
id: 知识库
|
|
53
|
+
- group_name: 审批管理
|
|
54
|
+
default_open: false
|
|
55
|
+
id: 审批管理
|
|
53
56
|
tab_items:
|
|
54
57
|
object_pepsico_material_approval:
|
|
55
58
|
group: 内容审核
|
|
@@ -96,6 +99,21 @@ tab_items:
|
|
|
96
99
|
object_pepsico_km_homo:
|
|
97
100
|
group: 知识库
|
|
98
101
|
index: 16
|
|
102
|
+
object_pepsico_approval_share:
|
|
103
|
+
group: 审批管理
|
|
104
|
+
index: 2000
|
|
105
|
+
object_pepsico_approval_admin_log:
|
|
106
|
+
group: 审批管理
|
|
107
|
+
index: 2001
|
|
108
|
+
pepsico_approval_transfer:
|
|
109
|
+
group: 审批管理
|
|
110
|
+
index: 2002
|
|
111
|
+
object_pepsico_urgent_quota:
|
|
112
|
+
group: 审批管理
|
|
113
|
+
index: 2003
|
|
114
|
+
object_pepsico_urgent_log:
|
|
115
|
+
group: 审批管理
|
|
116
|
+
index: 2004
|
|
99
117
|
tabs:
|
|
100
118
|
- object_pepsico_material_approval
|
|
101
119
|
- process_delegation_rules
|
|
@@ -114,105 +132,9 @@ tabs:
|
|
|
114
132
|
- object_pepsico_km_files
|
|
115
133
|
- object_pepsico_km_update
|
|
116
134
|
- object_pepsico_km_homo
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
- label: API 名称
|
|
124
|
-
value: code
|
|
125
|
-
- label: 图标
|
|
126
|
-
value: icon_slds
|
|
127
|
-
- label: 排序
|
|
128
|
-
value: sort
|
|
129
|
-
- label: 描述
|
|
130
|
-
value: description
|
|
131
|
-
- label: tab_groups.$.group_name
|
|
132
|
-
value: tab_groups.$.group_name
|
|
133
|
-
- label: tab_groups.$.default_open
|
|
134
|
-
value: tab_groups.$.default_open
|
|
135
|
-
- label: 在桌面中显示此应用
|
|
136
|
-
value: is_creator
|
|
137
|
-
- label: 在手机上显示此应用
|
|
138
|
-
value: mobile
|
|
139
|
-
- label: 启用
|
|
140
|
-
value: visible
|
|
141
|
-
- label: 显示左侧导航
|
|
142
|
-
value: showSidebar
|
|
143
|
-
- label: 自定义导航
|
|
144
|
-
value: nav_schema
|
|
145
|
-
- label: 外部链接
|
|
146
|
-
value: url
|
|
147
|
-
- label: 使用IE打开(需使用Steedos桌面客户端)
|
|
148
|
-
value: is_use_ie
|
|
149
|
-
- label: 使用iframe打开
|
|
150
|
-
value: is_use_iframe
|
|
151
|
-
- label: 在新窗口打开
|
|
152
|
-
value: is_new_window
|
|
153
|
-
- label: 链接脚本
|
|
154
|
-
value: on_click
|
|
155
|
-
- label: 验证域名
|
|
156
|
-
value: auth_name
|
|
157
|
-
- label: API 密钥
|
|
158
|
-
value: secret
|
|
159
|
-
- label: 桌面主菜单(已作废)
|
|
160
|
-
value: objects
|
|
161
|
-
- label: 手机主菜单(已作废)
|
|
162
|
-
value: mobile_objects
|
|
163
|
-
- label: 显示公式
|
|
164
|
-
value: visible_on
|
|
165
|
-
- label: 启用自定义导航
|
|
166
|
-
value: enable_nav_schema
|
|
167
|
-
- label: 系统
|
|
168
|
-
value: is_system
|
|
169
|
-
- label: from_code_id
|
|
170
|
-
value: from_code_id
|
|
171
|
-
- label: 所有者
|
|
172
|
-
value: owner
|
|
173
|
-
- label: 已锁定
|
|
174
|
-
value: locked
|
|
175
|
-
- label: 主分部
|
|
176
|
-
value: company_id
|
|
177
|
-
- label: 所属分部
|
|
178
|
-
value: company_ids
|
|
179
|
-
- label: 申请单审批状态
|
|
180
|
-
value: instance_state
|
|
181
|
-
- label: 创建时间
|
|
182
|
-
value: created
|
|
183
|
-
- label: 创建人
|
|
184
|
-
value: created_by
|
|
185
|
-
- label: 修改时间
|
|
186
|
-
value: modified
|
|
187
|
-
- label: 修改人
|
|
188
|
-
value: modified_by
|
|
189
|
-
- label: 全局变量
|
|
190
|
-
children:
|
|
191
|
-
- label: 用户ID
|
|
192
|
-
value: 'global[''userId'']'
|
|
193
|
-
- label: 工作区ID
|
|
194
|
-
value: 'global[''spaceId'']'
|
|
195
|
-
- label: 用户
|
|
196
|
-
children:
|
|
197
|
-
- label: 姓名
|
|
198
|
-
value: 'global[''user''][''name'']'
|
|
199
|
-
- label: 邮件
|
|
200
|
-
value: 'global[''user''][''email'']'
|
|
201
|
-
- label: 语言
|
|
202
|
-
value: 'global[''user''][''language'']'
|
|
203
|
-
- label: 简档
|
|
204
|
-
value: 'global[''user''][''profile'']'
|
|
205
|
-
- label: 权限集
|
|
206
|
-
value: 'global[''user''][''roles'']'
|
|
207
|
-
- label: 主部门ID
|
|
208
|
-
value: 'global[''user''][''organization''][''_id'']'
|
|
209
|
-
- label: 部门(含上级)
|
|
210
|
-
value: 'global[''user''][''organizations_parents'']'
|
|
211
|
-
- label: 主分部ID
|
|
212
|
-
value: 'global[''user''][''company_id'']'
|
|
213
|
-
- label: 分部(多选)
|
|
214
|
-
value: 'global[''user''][''company_ids'']'
|
|
215
|
-
- label: 人员ID
|
|
216
|
-
value: 'global[''user''][''spaceUserId'']'
|
|
217
|
-
- label: 是否是工作区管理员
|
|
218
|
-
value: 'global[''user''][''is_space_admin'']'
|
|
135
|
+
- object_pepsico_approval_share
|
|
136
|
+
- object_pepsico_approval_admin_log
|
|
137
|
+
- pepsico_approval_transfer
|
|
138
|
+
- object_pepsico_urgent_quota
|
|
139
|
+
- object_pepsico_urgent_log
|
|
140
|
+
visible: true
|
package/main/default/objects/pepsico_material_approval/buttons/pepsico_postpone_review.button.yml
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
name: pepsico_postpone_review
|
|
2
|
+
amis_schema: |-
|
|
3
|
+
{
|
|
4
|
+
"type": "service",
|
|
5
|
+
"body": [
|
|
6
|
+
{
|
|
7
|
+
"type": "button",
|
|
8
|
+
"label": "延后审核",
|
|
9
|
+
"id": "u:pepsico_postpone_review",
|
|
10
|
+
"editorState": "default",
|
|
11
|
+
"visibleOn": "${(current_step == 'departmental_review' || current_step == 'personnel_review') && !ARRAYINCLUDES(person_pending_approve, context.user.user) && ARRAYINCLUDES(person_approved, context.user.user) && formFactor != 'SMALL'}",
|
|
12
|
+
"onEvent": {
|
|
13
|
+
"click": {
|
|
14
|
+
"weight": 0,
|
|
15
|
+
"actions": [
|
|
16
|
+
{
|
|
17
|
+
"ignoreError": false,
|
|
18
|
+
"actionType": "dialog",
|
|
19
|
+
"dialog": {
|
|
20
|
+
"type": "dialog",
|
|
21
|
+
"title": "延后审核",
|
|
22
|
+
"body": [
|
|
23
|
+
{
|
|
24
|
+
"type": "alert",
|
|
25
|
+
"body": "延后审核仅对下次再次分配到您所在部门时生效:届时该审批单将延迟3天可见,通知也将延迟发送。请填写延后原因。",
|
|
26
|
+
"level": "warning",
|
|
27
|
+
"id": "u:postpone_review_alert"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"type": "textarea",
|
|
31
|
+
"label": "延后原因",
|
|
32
|
+
"name": "postpone_reason",
|
|
33
|
+
"id": "u:postpone_review_reason",
|
|
34
|
+
"placeholder": "请填写延后原因(必填)",
|
|
35
|
+
"required": true,
|
|
36
|
+
"validations": {
|
|
37
|
+
"isRequired": true
|
|
38
|
+
},
|
|
39
|
+
"validationErrors": {
|
|
40
|
+
"isRequired": "请填写延后原因"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"id": "u:postpone_review_dialog",
|
|
45
|
+
"actions": [
|
|
46
|
+
{
|
|
47
|
+
"type": "button",
|
|
48
|
+
"actionType": "cancel",
|
|
49
|
+
"label": "取消",
|
|
50
|
+
"id": "u:postpone_review_cancel"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"type": "button",
|
|
54
|
+
"actionType": "confirm",
|
|
55
|
+
"label": "确定延后",
|
|
56
|
+
"primary": true,
|
|
57
|
+
"id": "u:postpone_review_confirm",
|
|
58
|
+
"editorState": "default",
|
|
59
|
+
"onEvent": {
|
|
60
|
+
"click": {
|
|
61
|
+
"weight": 0,
|
|
62
|
+
"actions": [
|
|
63
|
+
{
|
|
64
|
+
"ignoreError": false,
|
|
65
|
+
"actionType": "disabled",
|
|
66
|
+
"componentId": "u:postpone_review_confirm"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"ignoreError": false,
|
|
70
|
+
"actionType": "ajax",
|
|
71
|
+
"outputVar": "responseResult",
|
|
72
|
+
"options": {},
|
|
73
|
+
"api": {
|
|
74
|
+
"url": "/api/pepsico-content/approve/postpone-review/${recordId}",
|
|
75
|
+
"method": "post",
|
|
76
|
+
"requestAdaptor": "\napi.data = {postpone_reason: context.postpone_reason}\n\n\nreturn api;",
|
|
77
|
+
"adaptor": "",
|
|
78
|
+
"messages": {}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"actionType": "broadcast",
|
|
83
|
+
"args": {
|
|
84
|
+
"eventName": "@data.changed.pepsico_material_approval"
|
|
85
|
+
},
|
|
86
|
+
"data": {
|
|
87
|
+
"objectName": "pepsico_material_approval"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"actionType": "reload",
|
|
92
|
+
"componentId": "listview_pepsico_review_postpone",
|
|
93
|
+
"groupType": "component"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"ignoreError": false,
|
|
97
|
+
"actionType": "enabled",
|
|
98
|
+
"componentId": "u:postpone_review_confirm"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"showCloseButton": true,
|
|
106
|
+
"closeOnOutside": false,
|
|
107
|
+
"closeOnEsc": false,
|
|
108
|
+
"showErrorMsg": true,
|
|
109
|
+
"showLoading": true,
|
|
110
|
+
"draggable": false,
|
|
111
|
+
"actionType": "dialog",
|
|
112
|
+
"size": "md"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"regions": [
|
|
121
|
+
"body"
|
|
122
|
+
],
|
|
123
|
+
"data": {
|
|
124
|
+
"context": {},
|
|
125
|
+
"dataComponentId": "",
|
|
126
|
+
"record_id": "",
|
|
127
|
+
"record": {},
|
|
128
|
+
"permissions": {}
|
|
129
|
+
},
|
|
130
|
+
"id": "u:pepsico_postpone_review_service",
|
|
131
|
+
"bodyClassName": "p-0",
|
|
132
|
+
"dsType": "api",
|
|
133
|
+
"asideResizor": false,
|
|
134
|
+
"editorState": "default",
|
|
135
|
+
"pullRefresh": {
|
|
136
|
+
"disabled": true
|
|
137
|
+
},
|
|
138
|
+
"definitions": {}
|
|
139
|
+
}
|
|
140
|
+
is_enable: true
|
|
141
|
+
label: 延后审核
|
|
142
|
+
locked: false
|
|
143
|
+
'on': record_only
|
|
144
|
+
type: amis_button
|
|
145
|
+
visible: true
|