halo-admin/src/views/system/optiontabs/AttachmentTab.vue

690 lines
22 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<a-form-model
ref="attachmentOptionsForm"
:model="options"
:rules="rules"
layout="vertical"
:wrapperCol="wrapperCol"
>
<a-form-model-item label="上传图片时预览:">
<a-switch v-model="options.attachment_upload_image_preview_enable" />
</a-form-model-item>
<a-form-model-item label="最大上传文件数:">
<a-input-number
v-model="options.attachment_upload_max_files"
style="width:100%"
/>
</a-form-model-item>
<a-form-model-item label="同时上传文件数:">
<a-input-number
v-model="options.attachment_upload_max_parallel_uploads"
style="width:100%"
/>
</a-form-model-item>
<a-form-model-item label="存储位置:">
<a-select v-model="options.attachment_type">
<a-select-option
v-for="item in Object.keys(attachmentType)"
:key="item"
:value="item"
>{{ attachmentType[item].text }}</a-select-option>
</a-select>
</a-form-model-item>
<div
id="smmsForm"
v-show="options.attachment_type === 'SMMS'"
>
<a-form-model-item label="Secret Token">
<a-input-password
v-model="options.smms_api_secret_token"
placeholder="需要到 sm.ms 官网注册后获取"
autocomplete="new-password"
/>
</a-form-model-item>
</div>
<div
id="upOssForm"
v-show="options.attachment_type === 'UPOSS'"
>
<a-form-model-item label="绑定域名协议:">
<a-select v-model="options.oss_upyun_domain_protocol">
<a-select-option value="https://">HTTPS</a-select-option>
<a-select-option value="http://">HTTP</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item label="绑定域名:">
<a-input
v-model="options.oss_upyun_domain"
placeholder="无需再加上 http:// 或者 https://"
/>
</a-form-model-item>
<a-form-model-item label="空间名称:">
<a-input v-model="options.oss_upyun_bucket" />
</a-form-model-item>
<a-form-model-item label="操作员名称:">
<a-input v-model="options.oss_upyun_operator" />
</a-form-model-item>
<a-form-model-item label="操作员密码:">
<a-input-password
v-model="options.oss_upyun_password"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="文件目录:">
<a-input v-model="options.oss_upyun_source" />
</a-form-model-item>
<a-form-model-item label="图片处理策略:">
<a-input
v-model="options.oss_upyun_style_rule"
placeholder="间隔标识符+图片处理版本名称"
/>
</a-form-model-item>
<a-form-model-item label="缩略图处理策略:">
<a-input
v-model="options.oss_upyun_thumbnail_style_rule"
placeholder="间隔标识符+图片处理版本名称,一般为后台展示所用"
/>
</a-form-model-item>
</div>
<div
id="qiniuOssForm"
v-show="options.attachment_type === 'QINIUOSS'"
>
<a-form-model-item label="绑定域名协议:">
<a-select v-model="options.oss_qiniu_domain_protocol">
<a-select-option value="https://">HTTPS</a-select-option>
<a-select-option value="http://">HTTP</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item label="绑定域名:">
<a-input
v-model="options.oss_qiniu_domain"
placeholder="无需再加上 http:// 或者 https://"
/>
</a-form-model-item>
<a-form-model-item label="区域:">
<a-auto-complete
:dataSource="qiniuOssZones"
v-model="options.oss_qiniu_zone"
allowClear
/>
</a-form-model-item>
<a-form-model-item label="Access Key">
<a-input-password
v-model="options.oss_qiniu_access_key"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="Secret Key">
<a-input-password
v-model="options.oss_qiniu_secret_key"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="文件目录:">
<a-input
v-model="options.oss_qiniu_source"
placeholder="不填写则上传到根目录"
/>
</a-form-model-item>
<a-form-model-item label="Bucket">
<a-input
v-model="options.oss_qiniu_bucket"
placeholder="存储空间名称"
/>
</a-form-model-item>
<a-form-model-item label="图片处理策略:">
<a-input
v-model="options.oss_qiniu_style_rule"
placeholder="样式分隔符+图片处理样式名称"
/>
</a-form-model-item>
<a-form-model-item label="缩略图处理策略:">
<a-input
v-model="options.oss_qiniu_thumbnail_style_rule"
placeholder="样式分隔符+图片处理样式名称,一般为后台展示所用"
/>
</a-form-model-item>
</div>
<div
id="aliOssForm"
v-show="options.attachment_type === 'ALIOSS'"
>
<a-form-model-item label="绑定域名协议:">
<a-select v-model="options.oss_ali_domain_protocol">
<a-select-option value="https://">HTTPS</a-select-option>
<a-select-option value="http://">HTTP</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item label="绑定域名:">
<a-input
v-model="options.oss_ali_domain"
placeholder="如不填写,路径根域名将为 Bucket + EndPoint"
/>
</a-form-model-item>
<a-form-model-item label="Bucket">
<a-input
v-model="options.oss_ali_bucket_name"
placeholder="存储空间名称"
/>
</a-form-model-item>
<a-form-model-item label="EndPoint地域节点">
<a-input v-model="options.oss_ali_endpoint" />
</a-form-model-item>
<a-form-model-item label="Access Key">
<a-input-password
v-model="options.oss_ali_access_key"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="Access Secret">
<a-input-password
v-model="options.oss_ali_access_secret"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="文件目录:">
<a-input
v-model="options.oss_ali_source"
placeholder="不填写则上传到根目录"
/>
</a-form-model-item>
<a-form-model-item label="图片处理策略:">
<a-input
v-model="options.oss_ali_style_rule"
placeholder="请到阿里云控制台的图片处理获取"
/>
</a-form-model-item>
<a-form-model-item label="缩略图处理策略:">
<a-input
v-model="options.oss_ali_thumbnail_style_rule"
placeholder="请到阿里云控制台的图片处理获取,一般为后台展示所用"
/>
</a-form-model-item>
</div>
<div
id="baiduBosForm"
v-show="options.attachment_type === 'BAIDUBOS'"
>
<a-form-model-item label="绑定域名协议:">
<a-select v-model="options.bos_baidu_domain_protocol">
<a-select-option value="https://">HTTPS</a-select-option>
<a-select-option value="http://">HTTP</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item label="绑定域名:">
<a-input
v-model="options.bos_baidu_domain"
placeholder="如不填写,路径根域名将为 Bucket + EndPoint"
/>
</a-form-model-item>
<a-form-model-item label="Bucket">
<a-input
v-model="options.bos_baidu_bucket_name"
placeholder="存储空间名称"
/>
</a-form-model-item>
<a-form-model-item label="EndPoint地域节点">
<a-input v-model="options.bos_baidu_endpoint" />
</a-form-model-item>
<a-form-model-item label="Access Key">
<a-input-password
v-model="options.bos_baidu_access_key"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="Secret Key">
<a-input-password
v-model="options.bos_baidu_secret_key"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="图片处理策略:">
<a-input
v-model="options.bos_baidu_style_rule"
placeholder="请到百度云控制台的图片处理获取"
/>
</a-form-model-item>
<a-form-model-item label="缩略图处理策略:">
<a-input
v-model="options.bos_baidu_thumbnail_style_rule"
placeholder="请到百度云控制台的图片处理获取,一般为后台展示所用"
/>
</a-form-model-item>
</div>
<div
id="tencentCosForm"
v-show="options.attachment_type === 'TENCENTCOS'"
>
<a-form-model-item label="绑定域名协议:">
<a-select v-model="options.cos_tencent_domain_protocol">
<a-select-option value="https://">HTTPS</a-select-option>
<a-select-option value="http://">HTTP</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item label="绑定域名:">
<a-input
v-model="options.cos_tencent_domain"
placeholder="如不填写,路径根域名将为 Bucket + 区域地址"
/>
</a-form-model-item>
<a-form-model-item label="Bucket">
<a-input
v-model="options.cos_tencent_bucket_name"
placeholder="存储桶名称"
/>
</a-form-model-item>
<a-form-model-item label="区域:">
<a-auto-complete
:dataSource="tencentCosRegions"
v-model="options.cos_tencent_region"
allowClear
/>
</a-form-model-item>
<a-form-model-item label="Secret Id">
<a-input-password
v-model="options.cos_tencent_secret_id"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="Secret Key">
<a-input-password
v-model="options.cos_tencent_secret_key"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="文件目录:">
<a-input
v-model="options.cos_tencent_source"
placeholder="不填写则上传到根目录"
/>
</a-form-model-item>
<a-form-model-item label="图片处理策略:">
<a-input
v-model="options.cos_tencent_style_rule"
placeholder="请到腾讯云控制台的图片处理获取"
/>
</a-form-model-item>
<a-form-model-item label="缩略图处理策略:">
<a-input
v-model="options.cos_tencent_thumbnail_style_rule"
placeholder="请到腾讯云控制台的图片处理获取,一般为后台展示所用"
/>
</a-form-model-item>
</div>
<div
id="huaweiObsForm"
v-show="options.attachment_type === 'HUAWEIOBS'"
>
<a-form-model-item label="绑定域名协议:">
<a-select v-model="options.obs_huawei_domain_protocol">
<a-select-option value="https://">HTTPS</a-select-option>
<a-select-option value="http://">HTTP</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item label="绑定域名:">
<a-input
v-model="options.obs_huawei_domain"
placeholder="如不填写,路径根域名将为 Bucket + EndPoint"
/>
</a-form-model-item>
<a-form-model-item label="Bucket桶名称">
<a-input
v-model="options.obs_huawei_bucket_name"
placeholder="桶名称"
/>
</a-form-model-item>
<a-form-model-item label="EndPoint终端节点">
<a-input
v-model="options.obs_huawei_endpoint"
placeholder="Endpoint"
/>
</a-form-model-item>
<a-form-model-item label="Access Key">
<a-input-password
v-model="options.obs_huawei_access_key"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="Access Secret">
<a-input-password
v-model="options.obs_huawei_access_secret"
autocomplete="new-password"
/>
</a-form-model-item>
<a-form-model-item label="文件目录:">
<a-input
v-model="options.obs_huawei_source"
placeholder="不填写则上传到根目录"
/>
</a-form-model-item>
<a-form-model-item label="图片处理策略:">
<a-input
v-model="options.obs_huawei_style_rule"
placeholder="请到华为云控制台的图片处理创建"
/>
</a-form-model-item>
<a-form-model-item label="缩略图处理策略:">
<a-input
v-model="options.obs_huawei_thumbnail_style_rule"
placeholder="请到华为云控制台的图片处理获取,一般为后台展示所用"
/>
</a-form-model-item>
</div>
<a-form-model-item>
<ReactiveButton
type="primary"
@click="handleSaveOptions"
@callback="$emit('callback')"
:loading="saving"
:errored="errored"
text="保存"
loadedText="保存成功"
erroredText="保存失败"
></ReactiveButton>
</a-form-model-item>
</a-form-model>
</div>
</template>
<script>
import attachmentApi from '@/api/attachment'
const tencentCosRegions = [
{
text: '北京一区',
value: 'ap-beijing-1'
},
{
text: '北京',
value: 'ap-beijing'
},
{
text: '上海(华东)',
value: 'ap-shanghai'
},
{
text: '广州(华南)',
value: 'ap-guangzhou'
},
{
text: '成都(西南)',
value: 'ap-chengdu'
},
{
text: '重庆',
value: 'ap-chongqing'
}
]
const qiniuOssZones = [
{
text: '自动选择',
value: 'auto'
},
{
text: '华东',
value: 'z0'
},
{
text: '华北',
value: 'z1'
},
{
text: '华南',
value: 'z2'
},
{
text: '北美',
value: 'na0'
},
{
text: '东南亚',
value: 'as0'
}
]
export default {
name: 'AttachmentTab',
props: {
options: {
type: Object,
required: true
},
saving: {
type: Boolean,
default: false
},
errored: {
type: Boolean,
default: false
}
},
data() {
return {
attachmentType: attachmentApi.type,
wrapperCol: {
xl: { span: 8 },
lg: { span: 8 },
sm: { span: 12 },
xs: { span: 24 }
},
tencentCosRegions,
qiniuOssZones,
rules: {}
}
},
watch: {
options(val) {
this.$emit('onChange', val)
}
},
methods: {
handleSaveOptions() {
// 附件配置验证
switch (this.options.attachment_type) {
case 'SMMS':
if (!this.options.smms_api_secret_token) {
this.$notification['error']({
message: '提示',
description: 'Secret Token 不能为空!'
})
return
}
break
case 'UPOSS':
if (!this.options.oss_upyun_domain) {
this.$notification['error']({
message: '提示',
description: '绑定域名不能为空!'
})
return
}
if (!this.options.oss_upyun_bucket) {
this.$notification['error']({
message: '提示',
description: '空间名称不能为空!'
})
return
}
if (!this.options.oss_upyun_operator) {
this.$notification['error']({
message: '提示',
description: '操作员名称不能为空!'
})
return
}
if (!this.options.oss_upyun_password) {
this.$notification['error']({
message: '提示',
description: '操作员密码不能为空!'
})
return
}
if (!this.options.oss_upyun_source) {
this.$notification['error']({
message: '提示',
description: '文件目录不能为空!'
})
return
}
break
case 'QINIUOSS':
if (!this.options.oss_qiniu_domain) {
this.$notification['error']({
message: '提示',
description: '绑定域名不能为空!'
})
return
}
if (!this.options.oss_qiniu_access_key) {
this.$notification['error']({
message: '提示',
description: 'Access Key 不能为空!'
})
return
}
if (!this.options.oss_qiniu_secret_key) {
this.$notification['error']({
message: '提示',
description: 'Secret Key 不能为空!'
})
return
}
if (!this.options.oss_qiniu_bucket) {
this.$notification['error']({
message: '提示',
description: 'Bucket 不能为空!'
})
return
}
break
case 'ALIOSS':
if (!this.options.oss_ali_bucket_name) {
this.$notification['error']({
message: '提示',
description: 'Bucket 不能为空!'
})
return
}
if (!this.options.oss_ali_endpoint) {
this.$notification['error']({
message: '提示',
description: 'EndPoint地域节点 不能为空!'
})
return
}
if (!this.options.oss_ali_access_key) {
this.$notification['error']({
message: '提示',
description: 'Access Key 不能为空!'
})
return
}
if (!this.options.oss_ali_access_secret) {
this.$notification['error']({
message: '提示',
description: 'Access Secret 不能为空!'
})
return
}
break
case 'BAIDUBOS':
if (!this.options.bos_baidu_bucket_name) {
this.$notification['error']({
message: '提示',
description: 'Bucket 不能为空!'
})
return
}
if (!this.options.bos_baidu_endpoint) {
this.$notification['error']({
message: '提示',
description: 'EndPoint地域节点 不能为空!'
})
return
}
if (!this.options.bos_baidu_access_key) {
this.$notification['error']({
message: '提示',
description: 'Access Key 不能为空!'
})
return
}
if (!this.options.bos_baidu_secret_key) {
this.$notification['error']({
message: '提示',
description: 'Secret Key 不能为空!'
})
return
}
break
case 'TENCENTCOS':
if (!this.options.cos_tencent_bucket_name) {
this.$notification['error']({
message: '提示',
description: 'Bucket 不能为空!'
})
return
}
if (!this.options.cos_tencent_region) {
this.$notification['error']({
message: '提示',
description: '区域不能为空!'
})
return
}
if (!this.options.cos_tencent_secret_id) {
this.$notification['error']({
message: '提示',
description: 'Secret Id 不能为空!'
})
return
}
if (!this.options.cos_tencent_secret_key) {
this.$notification['error']({
message: '提示',
description: 'Secret Key 不能为空!'
})
return
}
break
case 'HUAWEIOBS':
if (!this.options.obs_huawei_bucket_name) {
this.$notification['error']({
message: '提示',
description: 'Bucket 不能为空!'
})
return
}
if (!this.options.obs_huawei_endpoint) {
this.$notification['error']({
message: '提示',
description: 'EndPoint终端节点 不能为空!'
})
return
}
if (!this.options.obs_huawei_access_key) {
this.$notification['error']({
message: '提示',
description: 'Access Key 不能为空!'
})
return
}
if (!this.options.obs_huawei_access_secret) {
this.$notification['error']({
message: '提示',
description: 'Access Secret 不能为空!'
})
return
}
break
}
const _this = this
_this.$refs.attachmentOptionsForm.validate(valid => {
if (valid) {
this.$emit('onSave')
}
})
}
}
}
</script>