import { createI18n } from 'vue-i18n' import en from '@/i18n/locales/en.json' import zhCN from '@/i18n/locales/zh-CN.json' import zhTW from '@/i18n/locales/zh-TW.json' import type { IStringKeyMap } from '#/types/types' type MessageSchema = typeof en const i18n = createI18n({ legacy: false, locale: localStorage.getItem('currentLanguage') || 'zh-CN', fallbackLocale: 'zh-CN', messages: { en, 'zh-CN': zhCN, 'zh-TW': zhTW } }) const { t } = i18n.global const defaultBaseRule = (name: string) => { return [ { required: true, message: `${t('MANAGE_CONSTANT_BASE_RULE')}${name}`, trigger: 'blur' } ] } const itemsPerPageRule = [ { required: true, message: t('MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A'), trigger: 'blur' }, { type: 'number', message: t('MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B'), trigger: 'change' }, { validator: (_rule: any, value: any, callback: any) => { if (value < 20 || value > 1000) { callback(new Error(t('MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C'))) } else { callback() } }, trigger: 'change' } ] const aliasRule = [ { required: true, message: t('MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A'), trigger: 'blur' }, { validator: (_rule: any, value: any, callback: any) => { const reg = /^[\u4e00-\u9fff_a-zA-Z0-9-]+$/ if (!reg.test(value)) { callback(new Error(t('MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B'))) } else { callback() } }, trigger: 'change' } ] const aliasTooltip = t('MANAGE_CONSTANT_ALIAS_TOOLTIP') const itemsPerPageTooltip = t('MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP') const pagingTooltip = t('MANAGE_CONSTANT_PAGING_TOOLTIP') const bucketNameTooltip = t('MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP') const baseDirTooltip = t('MANAGE_CONSTANT_BASE_DIR_TOOLTIP') const isAutoCustomUrlTooltip = t('MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP') export const supportedPicBedList: IStringKeyMap = { smms: { name: 'SM.MS', icon: 'smms', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_SMMS_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'smms-A', tooltip: aliasTooltip }, token: { required: true, description: t('MANAGE_CONSTANT_SMMS_TOKEN_DESC'), placeholder: t('MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('token') }, paging: { required: true, description: t('MANAGE_CONSTANT_SMMS_PAGING_DESC'), default: true, type: 'boolean', tooltip: pagingTooltip } }, explain: t('MANAGE_CONSTANT_SMMS_EXPLAIN'), options: ['alias', 'token', 'paging'], refLink: 'https://piclist.cn/manage.html#smms', referenceText: t('MANAGE_CONSTANT_SMMS_REFER_TEXT') }, qiniu: { name: t('MANAGE_CONSTANT_QINIU_NAME'), icon: 'qiniu', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_QINIU_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'qiniu-A', tooltip: aliasTooltip }, accessKey: { required: true, description: t('MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC'), placeholder: t('MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('accessKey') }, secretKey: { required: true, description: t('MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC'), placeholder: t('MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('secretKey') }, bucketName: { required: false, description: t('MANAGE_CONSTANT_QINIU_BUCKET_DESC'), placeholder: t('MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER'), type: 'string', tooltip: bucketNameTooltip }, baseDir: { required: false, description: t('MANAGE_CONSTANT_QINIU_BASE_DIR_DESC'), placeholder: t('MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER'), default: '/', type: 'string', tooltip: baseDirTooltip }, isAutoCustomUrl: { required: true, description: t('MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC'), default: true, type: 'boolean', tooltip: isAutoCustomUrlTooltip }, paging: { required: true, description: t('MANAGE_CONSTANT_QINIU_PAGING_DESC'), default: true, type: 'boolean', tooltip: pagingTooltip }, itemsPerPage: { required: true, description: t('MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC'), default: 50, type: 'number', rule: itemsPerPageRule, tooltip: itemsPerPageTooltip } }, explain: t('MANAGE_CONSTANT_QINIU_EXPLAIN'), options: ['alias', 'accessKey', 'secretKey', 'bucketName', 'baseDir', 'isAutoCustomUrl', 'paging', 'itemsPerPage'], refLink: 'https://piclist.cn/manage.html#%E4%B8%83%E7%89%9B%E4%BA%91', referenceText: t('MANAGE_CONSTANT_QINIU_REFER_TEXT') }, github: { name: 'GitHub', icon: 'github', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_GITHUB_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'github-A', tooltip: aliasTooltip }, token: { required: true, description: t('MANAGE_CONSTANT_GITHUB_TOKEN_DESC'), placeholder: t('MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('token'), tooltip: t('MANAGE_CONSTANT_GITHUB_TOKEN_TIPS') }, githubUsername: { required: true, description: t('MANAGE_CONSTANT_GITHUB_USER_DESC'), placeholder: t('MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER'), type: 'string', rule: defaultBaseRule(t('MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE')) }, proxy: { required: false, description: t('MANAGE_CONSTANT_GITHUB_PROXY_DESC'), placeholder: t('MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_GITHUB_PROXY_TIPS') }, paging: { required: true, description: t('MANAGE_CONSTANT_GITHUB_PAGING_DESC'), default: false, type: 'boolean', tooltip: pagingTooltip }, customUrl: { required: false, description: t('MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC'), placeholder: t('MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS'), rule: [ { validator: (_rule: any, value: any, callback: any) => { if (value) { const customUrlList = value.split(',') const customUrlValid = customUrlList.every((customUrl: string) => { const reg = /^((https|http)?:\/\/)/ if (customUrl === '') { return true } else if (!reg.test(customUrl)) { return false } return true }) const isBracketsValid = customUrlList.every((customUrl: string) => { const bracketPaired = (str: string) => { const stack = [] for (const i of str) { if (i === '{') { stack.push(i) } else if (i === '}') { if (stack.length === 0) { return false } stack.pop() } } return stack.length === 0 } if (customUrl === '') { return true } else if (!bracketPaired(customUrl)) { return false } return true }) if (!customUrlValid) { callback(new Error(t('MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A'))) } else if (!isBracketsValid) { callback(new Error(t('MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B'))) } else { callback() } } else { callback() } }, trigger: 'change' } ] } }, explain: t('MANAGE_CONSTANT_GITHUB_EXPLAIN'), options: ['alias', 'token', 'githubUsername', 'proxy', 'customUrl'], refLink: 'https://piclist.cn/manage.html#github', referenceText: t('MANAGE_CONSTANT_GITHUB_REFER_TEXT') }, aliyun: { name: t('MANAGE_CONSTANT_ALIYUN_NAME'), icon: 'aliyun', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_ALIYUN_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'aliyun-A', tooltip: aliasTooltip }, accessKeyId: { required: true, description: t('MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC'), placeholder: '请输入accessKeyId', type: 'string', rule: defaultBaseRule('accessKeyId') }, accessKeySecret: { required: true, description: t('MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC'), placeholder: t('MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('accessKeySecret') }, bucketName: { required: false, description: t('MANAGE_CONSTANT_ALIYUN_BUCKET_DESC'), placeholder: t('MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER'), type: 'string', tooltip: bucketNameTooltip }, baseDir: { required: false, description: t('MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC'), placeholder: t('MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER'), type: 'string', default: '/', tooltip: baseDirTooltip }, isAutoCustomUrl: { required: true, description: t('MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC'), default: true, type: 'boolean', tooltip: isAutoCustomUrlTooltip }, paging: { required: true, description: t('MANAGE_CONSTANT_ALIYUN_PAGING_DESC'), default: true, type: 'boolean', tooltip: pagingTooltip }, itemsPerPage: { required: true, description: t('MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC'), default: 50, type: 'number', rule: itemsPerPageRule, tooltip: itemsPerPageTooltip } }, explain: t('MANAGE_CONSTANT_ALIYUN_EXPLAIN'), options: [ 'alias', 'accessKeyId', 'accessKeySecret', 'bucketName', 'baseDir', 'isAutoCustomUrl', 'paging', 'itemsPerPage' ], refLink: 'https://piclist.cn/manage.html#%E9%98%BF%E9%87%8C%E4%BA%91oss', referenceText: t('MANAGE_CONSTANT_ALIYUN_REFER_TEXT') }, tcyun: { name: t('MANAGE_CONSTANT_TENCENT_NAME'), icon: 'tcyun', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_TENCENT_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'tcyun-A', tooltip: aliasTooltip }, secretId: { required: true, description: t('MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC'), placeholder: t('MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('secretId') }, secretKey: { required: true, description: t('MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC'), placeholder: t('MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('secretKey') }, appId: { required: true, description: t('MANAGE_CONSTANT_TENCENT_APPID_DESC'), placeholder: t('MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('appId'), tooltip: t('MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP') }, bucketName: { required: false, description: t('MANAGE_CONSTANT_TENCENT_BUCKET_DESC'), placeholder: t('MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER'), type: 'string', tooltip: bucketNameTooltip }, baseDir: { required: false, description: t('MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC'), placeholder: t('MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER'), type: 'string', default: '/', tooltip: baseDirTooltip }, isAutoCustomUrl: { required: true, description: t('MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC'), default: true, type: 'boolean', tooltip: isAutoCustomUrlTooltip }, paging: { required: true, description: t('MANAGE_CONSTANT_TENCENT_PAGING_DESC'), default: true, type: 'boolean', tooltip: pagingTooltip }, itemsPerPage: { required: true, description: t('MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC'), default: 50, type: 'number', rule: itemsPerPageRule, tooltip: itemsPerPageTooltip } }, explain: t('MANAGE_CONSTANT_TENCENT_EXPLAIN'), options: [ 'alias', 'secretId', 'secretKey', 'appId', 'bucketName', 'baseDir', 'isAutoCustomUrl', 'paging', 'itemsPerPage' ], refLink: 'https://piclist.cn/manage.html#%E8%85%BE%E8%AE%AF%E4%BA%91', referenceText: t('MANAGE_CONSTANT_TENCENT_REFER_TEXT') }, upyun: { name: t('MANAGE_CONSTANT_UPYUN_NAME'), icon: 'upyun', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_UPYUN_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'upyun-A', tooltip: aliasTooltip }, bucketName: { required: true, description: t('MANAGE_CONSTANT_UPYUN_BUCKET_DESC'), placeholder: t('MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('bucketName') }, operator: { required: true, description: t('MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC'), placeholder: t('MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER'), type: 'string', rule: defaultBaseRule(t('MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE')) }, password: { required: true, description: t('MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC'), placeholder: t('MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER'), type: 'string', rule: defaultBaseRule(t('MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE')) }, baseDir: { required: false, description: t('MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC'), placeholder: t('MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER'), type: 'string', default: '/' }, customUrl: { required: true, description: t('MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC'), placeholder: t('MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER'), type: 'string', rule: [ { required: true, message: t('MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A'), trigger: 'change' }, { validator: (_rule: any, value: any, callback: any) => { if (value) { const customUrlList = value.split(',') const customUrlValid = customUrlList.every((customUrl: string) => { const reg = /^((https|http)?:\/\/)/ if (customUrl === '') { return true } else if (!reg.test(customUrl)) { return false } return true }) if (!customUrlValid) { callback(new Error(t('MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B'))) } else { callback() } } else { callback() } }, trigger: 'change' } ] }, antiLeechToken: { required: false, description: t('MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC'), placeholder: t('MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER'), type: 'string', default: '', tooltip: t('MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP') }, expireTime: { required: false, description: t('MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC'), type: 'number', default: 0 }, paging: { required: true, description: t('MANAGE_CONSTANT_UPYUN_PAGING'), default: true, type: 'boolean', tooltip: pagingTooltip }, itemsPerPage: { required: true, description: t('MANAGE_CONSTANT_UPYUN_ITEMS_PAGE'), default: 50, type: 'number', rule: itemsPerPageRule, tooltip: itemsPerPageTooltip } }, explain: t('MANAGE_CONSTANT_UPYUN_EXPLAIN'), options: [ 'alias', 'bucketName', 'operator', 'password', 'baseDir', 'customUrl', 'paging', 'itemsPerPage', 'antiLeechToken', 'expireTime' ], refLink: 'https://piclist.cn/manage.html#%E5%8F%88%E6%8B%8D%E4%BA%91', referenceText: t('MANAGE_CONSTANT_UPYUN_REFER_TEXT') }, imgur: { name: t('MANAGE_CONSTANT_IMGUR_NAME'), icon: 'imgur', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_IMGUR_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'imgur-A' }, imgurUserName: { required: true, description: t('MANAGE_CONSTANT_IMGUR_USERNAME_DESC'), placeholder: t('MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('imgurUserName') }, accessToken: { required: true, description: t('MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC'), placeholder: t('MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('accessToken'), tooltip: t('MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP') }, proxy: { required: false, description: t('MANAGE_CONSTANT_IMGUR_PROXY_DESC'), placeholder: t('MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP') } }, explain: t('MANAGE_CONSTANT_IMGUR_EXPLAIN'), options: ['alias', 'imgurUserName', 'accessToken', 'proxy'], refLink: 'https://piclist.cn/manage.html#imgur', referenceText: t('MANAGE_CONSTANT_IMGUR_REFER_TEXT') }, s3plist: { name: t('MANAGE_CONSTANT_S3_NAME'), icon: 's3plist', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_S3_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 's3plist-A', tooltip: aliasTooltip }, accessKeyId: { required: true, description: t('MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC'), placeholder: t('MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('accessKeyId') }, secretAccessKey: { required: true, description: t('MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC'), placeholder: t('MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('secretAccessKey') }, endpoint: { required: false, description: t('MANAGE_CONSTANT_S3_ENDPOINT_DESC'), placeholder: t('MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP') }, sslEnabled: { required: true, description: t('MANAGE_CONSTANT_S3_SSLENABLED_DESC'), default: true, type: 'boolean', tooltip: t('MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP') }, s3ForcePathStyle: { required: true, description: t('MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC'), default: false, type: 'boolean', tooltip: t('MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP') }, proxy: { required: false, description: t('MANAGE_CONSTANT_S3_PROXY_DESC'), placeholder: t('MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_S3_PROXY_TOOLTIP') }, aclForUpload: { required: true, description: t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC'), rule: defaultBaseRule('aclForUpload'), default: 'public-read', type: 'select', selectOptions: { private: t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE'), 'public-read': t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ'), 'public-read-write': t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE'), 'authenticated-read': t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ'), 'bucket-owner-read': t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ'), 'bucket-owner-full-control': t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL'), 'aws-exec-read': t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ') }, tooltip: t('MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP') }, bucketName: { required: false, description: t('MANAGE_CONSTANT_S3_BUCKET_DESC'), placeholder: t('MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER'), type: 'string', tooltip: bucketNameTooltip }, baseDir: { required: false, description: t('MANAGE_CONSTANT_S3_BASE_DIR_DESC'), placeholder: t('MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER'), type: 'string', default: '/', tooltip: baseDirTooltip }, dogeCloudSupport: { required: false, description: t('MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC'), default: false, type: 'boolean', tooltip: t('MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP') }, paging: { required: true, description: t('MANAGE_CONSTANT_S3_PAGING_DESC'), default: true, type: 'boolean', tooltip: pagingTooltip }, itemsPerPage: { required: true, description: t('MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC'), default: 50, type: 'number', rule: itemsPerPageRule, tooltip: itemsPerPageTooltip } }, explain: t('MANAGE_CONSTANT_S3_EXPLAIN'), options: [ 'alias', 'accessKeyId', 'secretAccessKey', 'endpoint', 'sslEnabled', 's3ForcePathStyle', 'proxy', 'aclForUpload', 'bucketName', 'baseDir', 'dogeCloudSupport', 'paging', 'itemsPerPage' ], refLink: 'https://piclist.cn/manage.html#s3', referenceText: t('MANAGE_CONSTANT_S3_REFER_TEXT') }, webdavplist: { name: 'WebDAV', icon: 'webdavplist', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_WEBDAV_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'webdavplist-A', tooltip: aliasTooltip }, endpoint: { required: true, description: t('MANAGE_CONSTANT_WEBDAV_HOST_DESC'), placeholder: t('MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('rootDomain'), tooltip: t('MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP') }, username: { required: true, description: t('MANAGE_CONSTANT_WEBDAV_USERNAME_DESC'), placeholder: t('MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('username') }, bucketName: { required: true, description: t('MANAGE_CONSTANT_WEBDAV_BUCKET_DESC'), placeholder: t('MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER'), type: 'string', default: 'webdav', disabled: true, tooltip: t('MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP') }, password: { required: true, description: t('MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC'), placeholder: t('MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('password') }, baseDir: { required: false, description: t('MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC'), placeholder: t('MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER'), type: 'string', default: '/' }, customUrl: { required: false, description: t('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC'), placeholder: t('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP'), rule: [ { validator: (_rule: any, value: any, callback: any) => { if (value) { if (!/^https?:\/\/.+/.test(value)) { callback(new Error(t('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE'))) } else { callback() } } else { callback() } }, trigger: 'change' } ] }, webPath: { required: false, description: t('MANAGE_CONSTANT_WEBDAV_WEB_PATH'), placeholder: t('MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP'), default: '' }, proxy: { required: false, description: t('MANAGE_CONSTANT_WEBDAV_PROXY_DESC'), placeholder: t('MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP') }, sslEnabled: { required: true, description: t('MANAGE_CONSTANT_WEBDAV_SSL_DESC'), default: true, type: 'boolean', tooltip: t('MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP') }, authType: { required: true, description: t('MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC'), default: 'basic', type: 'select', selectOptions: { basic: 'Basic', digest: 'Digest' } } }, explain: t('MANAGE_CONSTANT_WEBDAV_EXPLAIN'), options: [ 'alias', 'endpoint', 'username', 'password', 'bucketName', 'baseDir', 'customUrl', 'webPath', 'proxy', 'sslEnabled', 'authType' ], refLink: 'https://piclist.cn/manage.html#webdav', referenceText: t('MANAGE_CONSTANT_WEBDAV_REFER_TEXT') }, local: { name: t('MANAGE_CONSTANT_LOCAL_NAME'), icon: 'local', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_LOCAL_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'local-A', tooltip: aliasTooltip }, baseDir: { required: true, description: t('MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC'), placeholder: t('MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER'), type: 'string', default: '', rule: [ { validator: (_rule: any, value: any, callback: any) => { if (!value) { callback(new Error(t('MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE'))) } else { callback() } } } ] }, customUrl: { required: false, description: t('MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC'), placeholder: t('MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP'), rule: [ { validator: (_rule: any, value: any, callback: any) => { if (value) { if (!/^https?:\/\/.+/.test(value)) { callback(new Error(t('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE'))) } else { callback() } } else { callback() } }, trigger: 'change' } ] }, bucketName: { required: true, description: t('MANAGE_CONSTANT_LOCAL_BUCKET_DESC'), placeholder: t('MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER'), type: 'string', default: 'local', disabled: true, tooltip: t('MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP') }, webPath: { required: false, description: t('MANAGE_CONSTANT_LOCAL_WEB_PATH'), placeholder: t('MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP'), default: '' } }, explain: t('MANAGE_CONSTANT_LOCAL_EXPLAIN'), options: ['alias', 'baseDir', 'customUrl', 'bucketName', 'webPath'], refLink: 'https://piclist.cn/manage.html#%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8', referenceText: t('MANAGE_CONSTANT_LOCAL_REFER_TEXT') }, sftp: { name: t('MANAGE_CONSTANT_SFTP_NAME'), icon: 'sftp', configOptions: { alias: { required: true, description: t('MANAGE_CONSTANT_SFTP_ALIAS_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER'), type: 'string', rule: aliasRule, default: 'sftp-A', tooltip: aliasTooltip }, host: { required: true, description: t('MANAGE_CONSTANT_SFTP_HOST_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER'), type: 'string', rule: defaultBaseRule('host'), default: '' }, port: { required: false, description: t('MANAGE_CONSTANT_SFTP_PORT_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER'), type: 'number', default: 22 }, username: { required: false, description: t('MANAGE_CONSTANT_SFTP_USERNAME_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER'), type: 'string', default: '' }, password: { required: false, description: t('MANAGE_CONSTANT_SFTP_PASSWORD_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER'), type: 'string', default: '' }, privateKey: { required: false, description: t('MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER'), type: 'string', default: '' }, passphrase: { required: false, description: t('MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER'), type: 'string', default: '' }, fileMode: { required: false, description: t('MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER'), type: 'string', default: '0664' }, dirMode: { required: false, description: t('MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER'), type: 'string', default: '0755' }, baseDir: { required: false, description: t('MANAGE_CONSTANT_SFTP_BASE_DIR_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER'), type: 'string', default: '', rule: [ { validator: (_rule: any, value: any, callback: any) => { if (!value) { callback(new Error(t('MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE'))) } else { callback() } } } ] }, customUrl: { required: false, description: t('MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP'), rule: [ { validator: (_rule: any, value: any, callback: any) => { if (value) { if (!/^https?:\/\/.+/.test(value)) { callback(new Error(t('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE'))) } else { callback() } } else { callback() } }, trigger: 'change' } ] }, bucketName: { required: true, description: t('MANAGE_CONSTANT_SFTP_BUCKET_DESC'), placeholder: t('MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER'), type: 'string', default: 'sftp', disabled: true, tooltip: t('MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP') }, webPath: { required: false, description: t('MANAGE_CONSTANT_SFTP_WEB_PATH'), placeholder: t('MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER'), type: 'string', tooltip: t('MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP'), default: '' } }, explain: t('MANAGE_CONSTANT_SFTP_EXPLAIN'), options: [ 'alias', 'host', 'port', 'username', 'password', 'privateKey', 'passphrase', 'fileMode', 'dirMode', 'baseDir', 'customUrl', 'bucketName', 'webPath' ], refLink: 'https://piclist.cn/manage.html#sftp', referenceText: t('MANAGE_CONSTANT_SFTP_REFER_TEXT') } }