@steedos-labs/content-compliance 1.0.4 → 1.0.6

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 (132) hide show
  1. package/dist/index.js +1 -1
  2. package/lib/actions/bypassApproval.js +38 -36
  3. package/lib/actions/bypassApproval.js.map +1 -1
  4. package/lib/actions/terminate.js +1 -1
  5. package/lib/actions/terminate.js.map +1 -1
  6. package/lib/methods/__tests__/attachment.test.d.ts +1 -0
  7. package/lib/methods/__tests__/attachment.test.js +31 -0
  8. package/lib/methods/__tests__/attachment.test.js.map +1 -0
  9. package/lib/methods/__tests__/terminateBypassAttachments.test.d.ts +1 -0
  10. package/lib/methods/__tests__/terminateBypassAttachments.test.js +163 -0
  11. package/lib/methods/__tests__/terminateBypassAttachments.test.js.map +1 -0
  12. package/lib/methods/approval_engine.d.ts +1 -1
  13. package/lib/methods/approval_engine.js +69 -43
  14. package/lib/methods/approval_engine.js.map +1 -1
  15. package/lib/methods/attachment.d.ts +2 -0
  16. package/lib/methods/attachment.js +21 -0
  17. package/lib/methods/attachment.js.map +1 -0
  18. package/main/default/objects/pepsico_approval_process/fields/attachments.field.yml +11 -0
  19. package/main/default/objects/pepsico_material_approval/buttons/pepsico_bypass_approval.button.yml +24 -1
  20. package/main/default/objects/pepsico_material_approval/buttons/pepsico_terminate.button.yml +24 -1
  21. package/main/default/objects/pepsico_material_approval/fields/approval_bypassed.field.yml +2 -2
  22. package/main/default/objects/pepsico_material_approval/fields/approval_materials_quantity.field.yml +2 -2
  23. package/main/default/objects/pepsico_material_approval/fields/approval_status.field.yml +2 -2
  24. package/main/default/objects/pepsico_material_approval/fields/approved_flows.field.yml +2 -2
  25. package/main/default/objects/pepsico_material_approval/fields/assistance.field.yml +4 -2
  26. package/main/default/objects/pepsico_material_approval/fields/aunch_time.field.yml +4 -3
  27. package/main/default/objects/pepsico_material_approval/fields/autonumber.field.yml +2 -2
  28. package/main/default/objects/pepsico_material_approval/fields/available_channels.field.yml +2 -2
  29. package/main/default/objects/pepsico_material_approval/fields/available_channels_label.field.yml +1 -1
  30. package/main/default/objects/pepsico_material_approval/fields/bgm.field.yml +1 -1
  31. package/main/default/objects/pepsico_material_approval/fields/brief_flow.field.yml +2 -2
  32. package/main/default/objects/pepsico_material_approval/fields/brief_flow_number.field.yml +2 -1
  33. package/main/default/objects/pepsico_material_approval/fields/ca_approval_status.field.yml +2 -2
  34. package/main/default/objects/pepsico_material_approval/fields/ca_assistance.field.yml +4 -2
  35. package/main/default/objects/pepsico_material_approval/fields/ca_bypassed.field.yml +2 -2
  36. package/main/default/objects/pepsico_material_approval/fields/ca_materials_quantity.field.yml +2 -2
  37. package/main/default/objects/pepsico_material_approval/fields/ca_reviewer.field.yml +2 -0
  38. package/main/default/objects/pepsico_material_approval/fields/cc_users.field.yml +4 -4
  39. package/main/default/objects/pepsico_material_approval/fields/ch_material_group.field.yml +7 -7
  40. package/main/default/objects/pepsico_material_approval/fields/ch_material_group_path.field.yml +5 -5
  41. package/main/default/objects/pepsico_material_approval/fields/ch_sync_enabled.field.yml +3 -3
  42. package/main/default/objects/pepsico_material_approval/fields/ch_sync_manual.field.yml +1 -1
  43. package/main/default/objects/pepsico_material_approval/fields/ch_sync_rule_check.field.yml +5 -9
  44. package/main/default/objects/pepsico_material_approval/fields/ch_uploader_notified_group.field.yml +1 -1
  45. package/main/default/objects/pepsico_material_approval/fields/child_files.field.yml +3 -3
  46. package/main/default/objects/pepsico_material_approval/fields/classification.field.yml +4 -2
  47. package/main/default/objects/pepsico_material_approval/fields/content_rule.field.yml +2 -2
  48. package/main/default/objects/pepsico_material_approval/fields/content_rule_label.field.yml +1 -1
  49. package/main/default/objects/pepsico_material_approval/fields/copyright_front.field.yml +1 -1
  50. package/main/default/objects/pepsico_material_approval/fields/copyright_music.field.yml +1 -1
  51. package/main/default/objects/pepsico_material_approval/fields/copyright_other.field.yml +1 -1
  52. package/main/default/objects/pepsico_material_approval/fields/current_step.field.yml +2 -2
  53. package/main/default/objects/pepsico_material_approval/fields/effective_date.field.yml +3 -4
  54. package/main/default/objects/pepsico_material_approval/fields/expiry_date.field.yml +9 -5
  55. package/main/default/objects/pepsico_material_approval/fields/followers.field.yml +3 -2
  56. package/main/default/objects/pepsico_material_approval/fields/font_copyright.field.yml +1 -1
  57. package/main/default/objects/pepsico_material_approval/fields/handler_preca.field.yml +2 -2
  58. package/main/default/objects/pepsico_material_approval/fields/handler_prens.field.yml +2 -2
  59. package/main/default/objects/pepsico_material_approval/fields/handler_preqc.field.yml +2 -2
  60. package/main/default/objects/pepsico_material_approval/fields/handler_presra.field.yml +2 -2
  61. package/main/default/objects/pepsico_material_approval/fields/has_detail_page.field.yml +18 -0
  62. package/main/default/objects/pepsico_material_approval/fields/internal_collaborator.field.yml +3 -3
  63. package/main/default/objects/pepsico_material_approval/fields/internal_collaborator_edit.field.yml +4 -4
  64. package/main/default/objects/pepsico_material_approval/fields/is_skip_approver.field.yml +2 -2
  65. package/main/default/objects/pepsico_material_approval/fields/kids_approval_status.field.yml +2 -2
  66. package/main/default/objects/pepsico_material_approval/fields/kids_bypassed.field.yml +2 -2
  67. package/main/default/objects/pepsico_material_approval/fields/kids_file_name.field.yml +3 -2
  68. package/main/default/objects/pepsico_material_approval/fields/kids_materials_quantity.field.yml +2 -2
  69. package/main/default/objects/pepsico_material_approval/fields/kids_reviewer.field.yml +2 -2
  70. package/main/default/objects/pepsico_material_approval/fields/launch.field.yml +4 -2
  71. package/main/default/objects/pepsico_material_approval/fields/legal_approval_status.field.yml +2 -2
  72. package/main/default/objects/pepsico_material_approval/fields/legal_assistance.field.yml +4 -2
  73. package/main/default/objects/pepsico_material_approval/fields/legal_bypassed.field.yml +2 -2
  74. package/main/default/objects/pepsico_material_approval/fields/legal_materials_quantity.field.yml +2 -2
  75. package/main/default/objects/pepsico_material_approval/fields/legal_reviewer.field.yml +2 -0
  76. package/main/default/objects/pepsico_material_approval/fields/material_editable.field.yml +20 -28
  77. package/main/default/objects/pepsico_material_approval/fields/material_owner.field.yml +5 -5
  78. package/main/default/objects/pepsico_material_approval/fields/material_type.field.yml +1 -1
  79. package/main/default/objects/pepsico_material_approval/fields/material_type_label.field.yml +1 -1
  80. package/main/default/objects/pepsico_material_approval/fields/materials_quantity.field.yml +2 -2
  81. package/main/default/objects/pepsico_material_approval/fields/music_copyright.field.yml +1 -1
  82. package/main/default/objects/pepsico_material_approval/fields/name.field.yml +3 -3
  83. package/main/default/objects/pepsico_material_approval/fields/ns_approval_status.field.yml +2 -2
  84. package/main/default/objects/pepsico_material_approval/fields/ns_assistance.field.yml +4 -2
  85. package/main/default/objects/pepsico_material_approval/fields/ns_bypassed.field.yml +2 -2
  86. package/main/default/objects/pepsico_material_approval/fields/ns_materials_quantity.field.yml +2 -2
  87. package/main/default/objects/pepsico_material_approval/fields/ns_reviewer.field.yml +2 -0
  88. package/main/default/objects/pepsico_material_approval/fields/pls_file.field.yml +2 -2
  89. package/main/default/objects/pepsico_material_approval/fields/postpone_launch_date.field.yml +4 -3
  90. package/main/default/objects/pepsico_material_approval/fields/pre_approval_status.field.yml +2 -2
  91. package/main/default/objects/pepsico_material_approval/fields/pre_ca_approval_status.field.yml +2 -2
  92. package/main/default/objects/pepsico_material_approval/fields/pre_ca_materials_quantity.field.yml +2 -2
  93. package/main/default/objects/pepsico_material_approval/fields/pre_ca_reviewer.field.yml +4 -2
  94. package/main/default/objects/pepsico_material_approval/fields/pre_legal_approval_status.field.yml +2 -2
  95. package/main/default/objects/pepsico_material_approval/fields/pre_legal_materials_quantity.field.yml +2 -2
  96. package/main/default/objects/pepsico_material_approval/fields/pre_legal_reviewer.field.yml +2 -0
  97. package/main/default/objects/pepsico_material_approval/fields/pre_materials_quantity.field.yml +2 -2
  98. package/main/default/objects/pepsico_material_approval/fields/pre_ns_approval_status.field.yml +2 -2
  99. package/main/default/objects/pepsico_material_approval/fields/pre_ns_materials_quantity.field.yml +2 -2
  100. package/main/default/objects/pepsico_material_approval/fields/pre_ns_reviewer.field.yml +4 -2
  101. package/main/default/objects/pepsico_material_approval/fields/pre_qc_approval_status.field.yml +2 -2
  102. package/main/default/objects/pepsico_material_approval/fields/pre_qc_materials_quantity.field.yml +2 -2
  103. package/main/default/objects/pepsico_material_approval/fields/pre_qc_reviewer.field.yml +4 -2
  104. package/main/default/objects/pepsico_material_approval/fields/pre_reviewer.field.yml +4 -2
  105. package/main/default/objects/pepsico_material_approval/fields/pre_sra_approval_status.field.yml +2 -2
  106. package/main/default/objects/pepsico_material_approval/fields/pre_sra_materials_quantity.field.yml +2 -2
  107. package/main/default/objects/pepsico_material_approval/fields/pre_sra_reviewer.field.yml +4 -2
  108. package/main/default/objects/pepsico_material_approval/fields/product.field.yml +20 -10
  109. package/main/default/objects/pepsico_material_approval/fields/product_label.field.yml +1 -1
  110. package/main/default/objects/pepsico_material_approval/fields/qc_approval_status.field.yml +2 -2
  111. package/main/default/objects/pepsico_material_approval/fields/qc_assistance.field.yml +4 -2
  112. package/main/default/objects/pepsico_material_approval/fields/qc_bypass_reason.field.yml +2 -2
  113. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed.field.yml +2 -2
  114. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed_at.field.yml +2 -2
  115. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed_by.field.yml +2 -2
  116. package/main/default/objects/pepsico_material_approval/fields/qc_materials_quantity.field.yml +2 -2
  117. package/main/default/objects/pepsico_material_approval/fields/qc_reviewer.field.yml +2 -0
  118. package/main/default/objects/pepsico_material_approval/fields/review_status.field.yml +2 -2
  119. package/main/default/objects/pepsico_material_approval/fields/reviewer.field.yml +2 -0
  120. package/main/default/objects/pepsico_material_approval/fields/sra_approval_status.field.yml +2 -2
  121. package/main/default/objects/pepsico_material_approval/fields/sra_assistance.field.yml +4 -2
  122. package/main/default/objects/pepsico_material_approval/fields/sra_bypassed.field.yml +2 -2
  123. package/main/default/objects/pepsico_material_approval/fields/sra_materials_quantity.field.yml +2 -2
  124. package/main/default/objects/pepsico_material_approval/fields/sra_reviewer.field.yml +2 -0
  125. package/main/default/objects/pepsico_material_approval/fields/subtitles.field.yml +1 -1
  126. package/main/default/objects/pepsico_material_approval/fields/title.field.yml +3 -2
  127. package/main/default/objects/pepsico_material_approval/pepsico_material_approval.object.yml +1 -8
  128. package/package.json +2 -2
  129. package/public/account-apply/ccs-agency-application.docx +0 -0
  130. package/public/account-apply/ccs-employee-application.docx +0 -0
  131. package/public/dynamic.css +192 -7
  132. package/public/dynamic.js +96 -0
@@ -41,7 +41,33 @@ form {
41
41
 
42
42
  .mt-6.flex.justify-end {
43
43
  order: 6;
44
- margin-top: 1rem;
44
+ margin-top: 24px;
45
+ }
46
+
47
+ /* 输入框组:去掉上下额外留白,使分隔线、输入框、按钮之间统一为 24px */
48
+ form>.rounded-md.shadow-sm{
49
+ margin-top: 0;
50
+ margin-bottom: 0;
51
+ box-shadow: none;
52
+ }
53
+
54
+ /* 邮箱、密码拆成两个独立的圆角输入框,间距 12px */
55
+ form>.rounded-md.shadow-sm>.-mt-px{
56
+ margin-top: 12px;
57
+ }
58
+
59
+ #loginId,
60
+ #password{
61
+ height: 44px;
62
+ border-radius: 6px !important;
63
+ }
64
+
65
+ /* 输入框聚焦:主题色边框 + 浅色光晕 */
66
+ #loginId:focus,
67
+ #password:focus{
68
+ outline: none;
69
+ border-color: rgb(2 53 90);
70
+ box-shadow: 0 0 0 2px rgb(2 53 90 / 15%);
45
71
  }
46
72
 
47
73
  .mt-6.flex.justify-end button{
@@ -49,6 +75,7 @@ form {
49
75
  background: none;
50
76
  color: rgb(2 53 90 / var(--tw-bg-opacity));
51
77
  font-weight: 400;
78
+ height: 44px;
52
79
  }
53
80
 
54
81
  .flex:last-of-type {
@@ -58,18 +85,40 @@ form {
58
85
  .flex:last-of-type>a{
59
86
  background-color: rgb(2 53 90 / var(--tw-bg-opacity));
60
87
  color: #ffffff !important;
61
- height: 60px;
88
+ height: 44px;
62
89
  }
63
90
 
64
91
  .mt-6.mb-6.relative {
65
92
  order: 2;
66
93
  }
67
94
 
95
+ /* 分隔线文字「外部用户请使用以下登录方式」 */
96
+ form>.mt-6.mb-6.relative span{
97
+ font-size: 14px;
98
+ color: #374151;
99
+ }
100
+
68
101
  .h-10{
69
102
  margin-bottom: 2rem;
70
103
  height: auto !important;
71
104
  }
72
105
 
106
+ /* 登录框与账号申请弹框统一字体:英文字体在前,中文指定苹方 / 微软雅黑(均为系统字体) */
107
+ .relative.rounded.p-10.sm\:shadow-md.bg-white.w-screen.max-w-md,
108
+ .account-apply-modal{
109
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial,
110
+ "PingFang SC", "Microsoft YaHei", "Noto Sans", sans-serif;
111
+ -webkit-font-smoothing: antialiased;
112
+ -moz-osx-font-smoothing: grayscale;
113
+ }
114
+
115
+ @media (min-width: 769px) {
116
+ .relative.rounded.p-10.sm\:shadow-md.bg-white.w-screen.max-w-md{
117
+ border-radius: 20px;
118
+ box-shadow: 0 8px 24px rgb(0 0 0 / 12%);
119
+ }
120
+ }
121
+
73
122
  .relative.rounded.p-10.sm\:shadow-md.bg-white.w-screen.max-w-md>div{
74
123
  display: flex;
75
124
  justify-content: center;
@@ -84,7 +133,8 @@ form {
84
133
  }
85
134
 
86
135
  form{
87
- margin-bottom: 40px;
136
+ /* 隐私勾选行 bottom: 40px、行高 20px,此处 44px 使其与上方按钮间距为 24px */
137
+ margin-bottom: 44px;
88
138
  }
89
139
 
90
140
  .agreement-container{
@@ -94,16 +144,62 @@ form{
94
144
  /* bottom: -30px; */
95
145
  bottom: 40px;
96
146
  font-size: 12px;
147
+ line-height: 20px;
148
+ color: #1f2937;
149
+ }
150
+
151
+ .agreement-container label{
152
+ vertical-align: middle;
153
+ cursor: pointer;
97
154
  }
98
155
 
99
156
  .agreement-container a{
100
- color: rgb(2 53 90 / var(--tw-bg-opacity)) !important;
157
+ color: rgb(2 53 90) !important;
101
158
  background-color: none !important;
159
+ text-decoration-line: none;
160
+ margin: 0 2px;
161
+ }
162
+
163
+ .agreement-container a:hover{
102
164
  text-decoration-line: underline;
103
165
  }
104
166
 
105
- .agreement-container input{
106
- margin-right: 5px;
167
+ /* 复选框:浅灰描边圆角方框,勾选后为主题色 */
168
+ .agreement-container input[type="checkbox"]{
169
+ -webkit-appearance: none;
170
+ appearance: none;
171
+ width: 14px;
172
+ height: 14px;
173
+ margin: 0 5px 0 0;
174
+ vertical-align: middle;
175
+ border: 1px solid #d1d5db;
176
+ border-radius: 3px;
177
+ background: #ffffff;
178
+ cursor: pointer;
179
+ position: relative;
180
+ /* 中文字形偏下,略微下移与文字居中对齐 */
181
+ top: 3px;
182
+ }
183
+
184
+ .agreement-container input[type="checkbox"]:hover{
185
+ border-color: rgb(2 53 90);
186
+ }
187
+
188
+ .agreement-container input[type="checkbox"]:checked{
189
+ border-color: rgb(2 53 90);
190
+ background: rgb(2 53 90);
191
+ }
192
+
193
+ .agreement-container input[type="checkbox"]:checked::after{
194
+ content: '';
195
+ position: absolute;
196
+ left: 4px;
197
+ top: 1px;
198
+ width: 4px;
199
+ height: 8px;
200
+ border: solid #ffffff;
201
+ border-width: 0 2px 2px 0;
202
+ transform: rotate(45deg);
107
203
  }
108
204
 
109
205
  .privacy-message{
@@ -118,6 +214,95 @@ input{
118
214
  font-size: 14px !important;
119
215
  }
120
216
 
217
+ .account-apply-btn{
218
+ z-index: 999;
219
+ position: absolute;
220
+ /* 减去左右内边距,使文字与输入框右边缘对齐 */
221
+ right: calc(2.5rem - 8px);
222
+ /* 与左侧隐私勾选行垂直居中对齐 */
223
+ bottom: 38px;
224
+ padding: 2px 8px;
225
+ font-size: 12px;
226
+ line-height: 20px;
227
+ color: #4b5563;
228
+ background: transparent;
229
+ border: none;
230
+ border-radius: 4px;
231
+ cursor: pointer;
232
+ transition: background-color 0.2s, color 0.2s;
233
+ }
234
+
235
+ .account-apply-btn:hover{
236
+ color: rgb(2 53 90);
237
+ background: #f3f4f6;
238
+ }
239
+
240
+ .account-apply-modal{
241
+ display: none;
242
+ position: fixed;
243
+ inset: 0;
244
+ z-index: 10000;
245
+ align-items: center;
246
+ justify-content: center;
247
+ background: rgb(0 0 0 / 45%);
248
+ }
249
+
250
+ .account-apply-modal.show{
251
+ display: flex;
252
+ }
253
+
254
+ .account-apply-dialog{
255
+ width: 560px;
256
+ max-width: calc(100vw - 32px);
257
+ padding: 28px 32px 24px;
258
+ background: #ffffff;
259
+ border-radius: 8px;
260
+ box-shadow: 0 10px 30px rgb(0 0 0 / 20%);
261
+ color: #1f2937;
262
+ }
263
+
264
+ .account-apply-title{
265
+ font-size: 18px;
266
+ font-weight: bold;
267
+ margin-bottom: 12px;
268
+ }
269
+
270
+ .account-apply-content{
271
+ font-size: 14px;
272
+ line-height: 24px;
273
+ }
274
+
275
+ .account-apply-content p{
276
+ margin: 0 0 8px;
277
+ }
278
+
279
+ .account-apply-content ul{
280
+ margin: 0 0 8px;
281
+ padding-left: 20px;
282
+ list-style: disc;
283
+ }
284
+
285
+ .account-apply-content a{
286
+ color: #2563eb;
287
+ text-decoration-line: underline;
288
+ }
289
+
290
+ .account-apply-footer{
291
+ display: flex;
292
+ justify-content: flex-end;
293
+ margin-top: 20px;
294
+ }
295
+
296
+ .account-apply-footer button{
297
+ padding: 6px 20px;
298
+ font-size: 14px;
299
+ color: #ffffff;
300
+ background: rgb(2 53 90);
301
+ border: none;
302
+ border-radius: 4px;
303
+ cursor: pointer;
304
+ }
305
+
121
306
  @keyframes shake {
122
307
  0%, 100% { transform: translateX(0); }
123
308
  25% { transform: translateX(-5px); }
@@ -187,5 +372,5 @@ input{
187
372
  display: none !important;
188
373
  }
189
374
  .w-full.border.border-gray-300.justify-center.hover\:bg-gray-50.text-gray-800.py-2.px-4.rounded.inline-flex.items-center span{
190
- font-weight: bold;
375
+ font-weight: 600;
191
376
  }
package/public/dynamic.js CHANGED
@@ -12,6 +12,99 @@ document.title = "内容审核";
12
12
 
13
13
  // document.head.appendChild(link);
14
14
 
15
+ // 账号申请:申请表放在 public/account-apply/ 下,文件名固定,扩展名兼容 .docx / .xlsx(优先 .docx)
16
+ const ACCOUNT_APPLY_CONTACT = 'sweet.tian@pepsico.com';
17
+ const ACCOUNT_APPLY_FORMS = {
18
+ employee: { name: '百事食品审核系统内部员工申请表', path: '/account-apply/ccs-employee-application' },
19
+ agency: { name: '百事食品审核系统Agency申请表', path: '/account-apply/ccs-agency-application' }
20
+ };
21
+ const ACCOUNT_APPLY_EXTENSIONS = ['.docx', '.xlsx'];
22
+
23
+ // 依次探测各扩展名的文件是否存在,返回第一个存在的地址
24
+ async function resolveAccountApplyFormUrl(form) {
25
+ for (const ext of ACCOUNT_APPLY_EXTENSIONS) {
26
+ const url = form.path + ext;
27
+ try {
28
+ const res = await fetch(url, { method: 'HEAD', cache: 'no-store' });
29
+ const contentType = res.headers.get('content-type') || '';
30
+ // 排除不存在的路径被回退成 html 页面的情况
31
+ if (res.ok && contentType.indexOf('text/html') === -1) {
32
+ return { url: url, ext: ext };
33
+ }
34
+ } catch (e) {
35
+ // 忽略,继续探测下一个扩展名
36
+ }
37
+ }
38
+ return null;
39
+ }
40
+
41
+ async function downloadAccountApplyForm(key) {
42
+ const form = ACCOUNT_APPLY_FORMS[key];
43
+ const file = await resolveAccountApplyFormUrl(form);
44
+ if (!file) {
45
+ alert('申请表暂未提供,请联系 ' + ACCOUNT_APPLY_CONTACT);
46
+ return;
47
+ }
48
+ const a = document.createElement('a');
49
+ a.href = file.url;
50
+ a.download = form.name + file.ext;
51
+ document.body.appendChild(a);
52
+ a.click();
53
+ document.body.removeChild(a);
54
+ }
55
+
56
+ function createAccountApplyModal() {
57
+ if (document.getElementById('accountApplyModal')) {
58
+ return;
59
+ }
60
+ const modal = document.createElement('div');
61
+ modal.id = 'accountApplyModal';
62
+ modal.classList.add('account-apply-modal');
63
+ modal.innerHTML =
64
+ '<div class="account-apply-dialog" role="dialog" aria-modal="true">' +
65
+ '<div class="account-apply-title">账号申请</div>' +
66
+ '<div class="account-apply-content">' +
67
+ '<p>如需开通百事食品审核系统账号,请下载对应的申请表,审核通过后开通:</p>' +
68
+ '<ul>' +
69
+ '<li>百事食品内部员工:<a href="#" data-form="employee">【百事食品审核系统内部员工申请表】</a></li>' +
70
+ '<li>百事食品 Agency 成员:<a href="#" data-form="agency">【百事食品审核系统 Agency 申请表】</a></li>' +
71
+ '</ul>' +
72
+ '<p>申请表填写完成后,内部员工请线下获取 Line manager 的邮件审批,Agency 成员请线下获取百事内部对接人的邮件审批;' +
73
+ '审批通过后,请附上审批邮件联系 Sweet Tian(<a href="mailto:' + ACCOUNT_APPLY_CONTACT + '">' + ACCOUNT_APPLY_CONTACT + '</a>)开通账号。</p>' +
74
+ '</div>' +
75
+ '<div class="account-apply-footer"><button type="button" class="account-apply-ok">知道了</button></div>' +
76
+ '</div>';
77
+
78
+ modal.addEventListener('click', function (event) {
79
+ const formLink = event.target.closest('a[data-form]');
80
+ if (formLink) {
81
+ event.preventDefault();
82
+ downloadAccountApplyForm(formLink.getAttribute('data-form'));
83
+ return;
84
+ }
85
+ if (event.target === modal || event.target.classList.contains('account-apply-ok')) {
86
+ modal.classList.remove('show');
87
+ }
88
+ });
89
+ document.body.appendChild(modal);
90
+ }
91
+
92
+ function appendAccountApplyButton(element) {
93
+ if (element.querySelector('.account-apply-btn')) {
94
+ return;
95
+ }
96
+ const button = document.createElement('button');
97
+ button.type = 'button';
98
+ button.classList.add('account-apply-btn');
99
+ button.textContent = '账号申请';
100
+ button.addEventListener('click', function (event) {
101
+ event.preventDefault();
102
+ createAccountApplyModal();
103
+ document.getElementById('accountApplyModal').classList.add('show');
104
+ });
105
+ element.appendChild(button);
106
+ }
107
+
15
108
 
16
109
  function appendAgreement() {
17
110
  const element = document.querySelector('.relative.rounded.p-10.sm\\:shadow-md.bg-white.w-screen.max-w-md');
@@ -73,6 +166,9 @@ function appendAgreement() {
73
166
  // 在提交按钮前插入容器
74
167
  element.appendChild(container);
75
168
 
169
+ // 登录框右下角:账号申请按钮
170
+ appendAccountApplyButton(element);
171
+
76
172
  const ssoBtn = document.querySelector('.w-full.border.border-gray-300.justify-center.hover\\:bg-gray-50.text-gray-800.py-2.px-4.rounded.inline-flex.items-center')
77
173
 
78
174
  if(ssoBtn){