feat(attachment): 按参考主题重构后台上传配置套件

- 新增 AKSRT\Attachment\UploadLimits:按用户类型解析图片/视频/文件
  上传上限(取最大值+默认兜底,钳制到 PHP 上限)、允许/禁止格式过滤、
  上传自动重命名、非管理员附件页 404;不含论坛角色
- 后台「附件配置」重做:大小限制/格式限制/上传行为三组配置,
  PHP Schema 与 SPA Schema 逐字段镜像(v1.2.0)
- 定制页 AttachmentPermissions.vue 改为标准 schemaPage,清理失效的
  API 包装、组件加载器与旧配置键(submit_image_max_size 等)
- 投稿/评论上传、批量上传数量全部切换到新链路;AksField 数字组件
  支持单位展示
- 更新 captcha harness 与 front-submit 契约测试;421 项测试通过
This commit is contained in:
2026-09-24 11:04:49 +08:00
parent 505d9156fe
commit d4bb43a275
16 changed files with 643 additions and 269 deletions
+10 -6
View File
@@ -81,9 +81,12 @@ if (file_exists($js)) {
(string) filemtime($js),
true
);
$submit_image_max_size = \AKSRT\Core\FrontSubmit::upload_limit_bytes('image');
$submit_video_max_size = \AKSRT\Core\FrontSubmit::upload_limit_bytes('video');
$resource_max_size = \AKSRT\Core\FrontSubmit::upload_limit_bytes('resource');
$upload_image_max_bytes = \AKSRT\Core\FrontSubmit::upload_limit_bytes('image');
$upload_video_max_bytes = \AKSRT\Core\FrontSubmit::upload_limit_bytes('video');
$upload_resource_max_bytes = \AKSRT\Core\FrontSubmit::upload_limit_bytes('resource');
$image_upload_multiple = class_exists('\AKSRT\Attachment\UploadLimits')
? \AKSRT\Attachment\UploadLimits::image_batch_limit()
: 6;
wp_localize_script('aksrt-front-submit-editor', 'aksrtSubmitData', [
'ajaxUrl' => admin_url('admin-ajax.php'),
@@ -101,6 +104,7 @@ if (file_exists($js)) {
'leaveWarning' => !empty($ctx['settings']['leave_warning']),
'imageUploadMultiple' => $image_upload_multiple,
'ai' => [
'available' => !empty($ctx['ai_available']),
'summary' => !empty($ctx['ai_available']),
@@ -117,15 +121,15 @@ if (file_exists($js)) {
'uploads' => [
'image' => !empty($ctx['can_upload_img']) ? [
'url' => esc_url_raw(rest_url('aksrt/v1/front-submit/upload/image')),
'maxSize' => $submit_image_max_size,
'maxSize' => $upload_image_max_bytes,
] : null,
'video' => !empty($ctx['can_upload_video']) ? [
'url' => esc_url_raw(rest_url('aksrt/v1/front-submit/upload/video')),
'maxSize' => $submit_video_max_size,
'maxSize' => $upload_video_max_bytes,
] : null,
'resource' => !empty($ctx['can_upload_file']) ? [
'url' => esc_url_raw(rest_url('aksrt/v1/front-submit/upload/resource')),
'maxSize' => $resource_max_size,
'maxSize' => $upload_resource_max_bytes,
] : null,
],
'i18n' => [