feat: 新增oss管理

This commit is contained in:
jmal 2023-04-05 18:49:08 +08:00
parent d04eb14ccb
commit 2783ddd47c
2 changed files with 108 additions and 50 deletions

View File

@ -1,4 +1,5 @@
import request from '@/utils/request' import request from '@/utils/request'
const qs = require('qs')
export default { export default {
/** /**
@ -12,11 +13,11 @@ export default {
}) })
}, },
/** /**
* 判断目录是否存在 * OSS配置列表
*/ */
existFolderName: function(params) { ossConfigList: function(params) {
return request({ return request({
url: '/oss/existFolderName', url: '/oss/ossConfigList',
method: 'get', method: 'get',
params params
}) })
@ -31,4 +32,17 @@ export default {
data data
}) })
}, },
/**
* 删除OSS配置
*/
deleteOssConfig: function(params) {
return request({
url: '/oss/deleteOssConfig',
method: 'delete',
params,
paramsSerializer: function(params) {
return qs.stringify(params, { arrayFormat: 'repeat' })
}
})
},
} }

View File

@ -9,69 +9,79 @@
</div> </div>
</div> </div>
</div> </div>
<table-list
ref="tableOssConfig"
:has-selection="false"
:tableData="ossConfigList"
:less-client-height="210"
:loading="tableLoading"
:tableHeader="tableHeader"
></table-list>
</el-card> </el-card>
<div>
<el-dialog class="set-oss-dialog" title="添加OSS" :visible.sync="showDialog" :close-on-click-modal="false"> <el-dialog class="set-oss-dialog" :title="putOssTitle" :visible.sync="showDialog" :close-on-click-modal="false">
<el-form :rules="rules" ref="form" :model="formData" label-width="120px" size="small"> <el-form :rules="rules" ref="form" :model="formData" label-width="120px" size="small">
<el-form-item label="Platform" prop="platform"> <el-form-item label="Platform" prop="platform">
<el-select v-model="formData.platform" placeholder="选择平台"> <el-select v-model="formData.platform" placeholder="选择平台">
<el-option <el-option
v-for="item in platforms" v-for="item in platforms"
:key="item.key" :key="item.value"
:label="item.value" :label="item.label"
:value="item.key" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="Endpoint" prop="endpoint"> <el-form-item label="Endpoint" prop="endpoint">
<el-input v-model="formData.endpoint"></el-input> <el-input v-model="formData.endpoint"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Access Key" prop="accessKey"> <el-form-item label="Access Key" prop="accessKey">
<el-input type="password" v-model="formData.accessKey"></el-input> <el-input type="password" v-model="formData.accessKey"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Secret Key" prop="secretKey"> <el-form-item label="Secret Key" prop="secretKey">
<el-input type="password" v-model="formData.secretKey"></el-input> <el-input type="password" v-model="formData.secretKey"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Region" prop="region"> <el-form-item label="Region" prop="region">
<el-input v-model="formData.region"></el-input> <el-input v-model="formData.region"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Bucket" prop="bucket"> <el-form-item label="Bucket" prop="bucket">
<el-input v-model="formData.bucket"></el-input> <el-input v-model="formData.bucket"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="目录名称" prop="folderName"> <el-form-item label="目录名称" prop="folderName">
<el-input v-model="formData.folderName"></el-input> <el-input v-model="formData.folderName"></el-input>
<div class="form-item-desc">将在根目录下创建此目录,相当于把oss挂载到了此目录</div> <div class="form-item-desc">将在根目录下创建此目录,相当于把oss挂载到了此目录</div>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button size="small" @click="showDialog = false">取消</el-button> <el-button size="small" @click="showDialog = false">取消</el-button>
<el-button size="small" type="primary" @click="submitForm">确定</el-button> <el-button size="small" type="primary" @click="submitForm">确定</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div>
</div> </div>
</template> </template>
<script> <script>
import ossApi from "@/api/oss" import ossApi from "@/api/oss"
import TableList from "@/components/table/TableList.vue";
export default { export default {
components: {TableList},
data() { data() {
const validateFolderName = async (rule, value, callback) => { const validateFolderName = async (rule, value, callback) => {
await this.existFolderName(value)
if (value === '') { if (value === '') {
callback(new Error('请输入目录名')); callback(new Error('请输入目录名'));
} else if (/[\[\]\/\\"<>\?\*]/gi.test(value)) { } else if (/[\[\]\/\\"<>\?\*]/gi.test(value)) {
callback(new Error('目录名不能包含以下字符:<,>,|,*,?,,/,[,]')); callback(new Error('目录名不能包含这些字符:<,>,|,*,?,,/,[,]'));
} else if (this.existFolder) {
callback(new Error('该目录已存在'));
} else { } else {
callback() callback()
} }
} }
return { return {
putOssTitle: '',
showDialog: false, showDialog: false,
ossConfigList: [],
tableLoading: false,
formData: { formData: {
endpoint: "", endpoint: "",
accessKey: "", accessKey: "",
@ -81,8 +91,25 @@ export default {
folderName: "", folderName: "",
platform: "", platform: "",
}, },
tableHeader: [
{prop: 'platform', label: '平台', noScope: true, align: 'left',
formatData: (platform)=> {
let index = this.platforms.findIndex(item => item.value === platform)
if (index > -1) {
return this.platforms[index].label
}
return ""
}
},
{prop: 'bucket', label: 'bucket', noScope: true, align: 'left'},
{prop: 'folderName', label: '目录名', noScope: true, align: 'left'},
{label: '操作', minWidth: this.$pc ? 0 : 130, active: [
{name: '修改', icon: 'el-icon-edit', handle: (row) => this.updateOssConfig(row)},
{name: '删除', icon: 'el-icon-delete', color: '#ff4d4f', handle: (row) => this.deleteOssConfig([row.id])},
],
},
],
platforms: [], platforms: [],
existFolder: false,
rules: { rules: {
platform: [ platform: [
{required: true, message: '请选择平台', trigger: 'change'} {required: true, message: '请选择平台', trigger: 'change'}
@ -109,14 +136,14 @@ export default {
} }
}, },
mounted() { mounted() {
this.getPlatformList()
}, },
destroyed() { destroyed() {
}, },
methods: { methods: {
async existFolderName(folderName) { getOssConfigList() {
this.existFolder = false ossApi.ossConfigList().then((res) => {
await ossApi.existFolderName({username: this.$store.getters.name, folderName: folderName}).then((res) => { this.ossConfigList = res.data;
this.existFolder = res.data
}) })
}, },
submitForm() { submitForm() {
@ -128,18 +155,35 @@ export default {
} }
}); });
}, },
deleteOssConfig(id) {
ossApi.deleteOssConfig({id: id}).then(() => {
this.getOssConfigList()
this.$message.success("删除成功!")
})
},
updateOssConfig(row) {
this.formData = row
this.showDialog = true
this.putOssTitle = '修改OSS'
},
putOssConfig() { putOssConfig() {
this.formData.userId = this.$store.getters.userId this.formData.userId = this.$store.getters.userId
ossApi.putOssConfig(this.formData).then(() => { ossApi.putOssConfig(this.formData).then(() => {
this.$message.success("添加成功!") this.getOssConfigList()
this.$message.success(this.putOssTitle + "成功!")
this.showDialog = false; this.showDialog = false;
}) })
}, },
addOSS() { addOSS() {
this.formData = {}
this.showDialog = true
this.putOssTitle = '添加OSS'
},
getPlatformList() {
ossApi.getPlatformList().then((res) => { ossApi.getPlatformList().then((res) => {
this.platforms = res.data this.platforms = res.data
this.getOssConfigList()
}) })
this.showDialog = true
} }
} }
} }