+
+ 并行上传
+
+ 开启后同时向所有商店提交包,关闭后逐个排队上传
+
-
+
+
+
+
([])
const loadingGrayMembers = ref(false)
@@ -1015,7 +1042,14 @@ const hasGrayDirectorySyncCallback = computed(() => Boolean(publishConfigForm.va
const hasAnyGrayCallback = computed(() => hasGraySelectCallback.value || hasGrayDirectorySyncCallback.value)
const allowAnonymousUpdateCheck = computed(() => Boolean(publishConfigForm.value.allowAnonymousUpdateCheck))
-type FieldDef = { key: string; label: string; type?: 'password' | 'textarea'; placeholder?: string }
+type FieldDef = {
+ key: string
+ label: string
+ type?: 'password' | 'textarea' | 'select'
+ placeholder?: string
+ options?: { label: string; value: string }[]
+ visibleWhen?: (values: Record) => boolean
+}
type GuideStep = { title: string; description: string }
function marketUrlField(placeholder: string): FieldDef {
return { key: 'marketUrl', label: '应用市场跳转页面(可选)', placeholder }
@@ -1192,8 +1226,15 @@ const STORE_DEFS: StoreDef[] = [
label: '审核通知',
shortLabel: '审核通知',
fields: [
- { key: 'webhookUrl', label: '通知地址', placeholder: 'https://your.service/store/webhook' },
- { key: 'secret', label: '签名密钥', type: 'password', placeholder: '可选,用于回调验签' },
+ { key: 'notifyType', label: '通知类型', type: 'select', options: [
+ { label: '自定义(XuqmGroup 格式)', value: 'CUSTOM' },
+ { label: '钉钉机器人', value: 'DINGTALK' },
+ { label: '企业微信机器人', value: 'WECOM' },
+ { label: '飞书机器人', value: 'FEISHU' },
+ ]},
+ { key: 'webhookUrl', label: 'Webhook 地址', placeholder: 'https://your.service/webhook 或机器人 Webhook 地址' },
+ { key: 'secret', label: '签名密钥', type: 'password', placeholder: '可选,仅自定义格式使用',
+ visibleWhen: (v) => !v.notifyType || v.notifyType === 'CUSTOM' },
],
guideSubtitle: '所有市场审核状态共用这一套通知配置',
guideUrl: 'https://cloud.tencent.com/document/product/269/32431',
@@ -1329,6 +1370,7 @@ function normalizePublishConfig(raw: Record | null | undefined)
graySelectCallbackSecret: String((raw as Record)?.graySelectCallbackSecret ?? ''),
grayDirectorySyncCallbackUrl: normalizeCallbackUrl((raw as Record)?.grayDirectorySyncCallbackUrl),
grayDirectorySyncCallbackSecret: String((raw as Record)?.grayDirectorySyncCallbackSecret ?? ''),
+ parallelStoreUpload: raw?.parallelStoreUpload !== false,
}
}
@@ -2306,6 +2348,18 @@ onBeforeUnmount(() => {
.form-tip { font-size: 12px; color: var(--el-text-color-secondary); margin-left: 8px; }
/* Store config grid */
+.store-upload-options {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ margin-bottom: 16px;
+ padding: 10px 14px;
+ background: var(--el-fill-color-light);
+ border-radius: 6px;
+}
+.store-option-label { font-weight: 600; font-size: 14px; white-space: nowrap; }
+.store-option-hint { font-size: 12px; color: var(--el-text-color-secondary); }
+
.store-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));