mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-12 07:02:14 +08:00
- 新增ISV用户平台
- 新增门户网站(portal) - 新增`C++`,`Rust`语言SDK
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
:unique-opened="false"
|
||||
:active-text-color="variables.menuActiveText"
|
||||
:collapse-transition="false"
|
||||
:default-openeds="opened"
|
||||
mode="vertical"
|
||||
>
|
||||
<sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" />
|
||||
@@ -33,6 +34,13 @@ export default {
|
||||
routes() {
|
||||
return this.$router.options.routes
|
||||
},
|
||||
opened() {
|
||||
return this.routes.filter(route => {
|
||||
return route.meta && route.meta.open
|
||||
}).map(route => {
|
||||
return route.path
|
||||
})
|
||||
},
|
||||
activeMenu() {
|
||||
const route = this.$route
|
||||
const { meta, path } = route
|
||||
|
@@ -59,7 +59,7 @@ export const constantRoutes = [
|
||||
path: '/service',
|
||||
component: Layout,
|
||||
name: 'Service',
|
||||
meta: { title: '服务管理', icon: 'example' },
|
||||
meta: { title: '服务管理', icon: 'example', open: true },
|
||||
children: [
|
||||
{
|
||||
path: 'list',
|
||||
@@ -90,6 +90,12 @@ export const constantRoutes = [
|
||||
name: 'Blacklist',
|
||||
component: () => import('@/views/service/ipBlacklist'),
|
||||
meta: { title: 'IP黑名单' }
|
||||
},
|
||||
{
|
||||
path: 'sdk',
|
||||
name: 'Sdk',
|
||||
component: () => import('@/views/service/sdk'),
|
||||
meta: { title: 'SDK管理' }
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -98,7 +104,7 @@ export const constantRoutes = [
|
||||
path: '/isv',
|
||||
component: Layout,
|
||||
name: 'Isv',
|
||||
meta: { title: 'ISV管理', icon: 'user' },
|
||||
meta: { title: 'ISV管理', icon: 'user', open: true },
|
||||
children: [
|
||||
{
|
||||
path: 'list',
|
||||
|
@@ -94,6 +94,17 @@ Object.assign(Vue.prototype, {
|
||||
}
|
||||
}).catch(function() {})
|
||||
},
|
||||
/**
|
||||
* 文件必须放在public下面
|
||||
* @param path 相对于public文件夹路径,如文件在public/static/sign.md,填:static/sign.md
|
||||
* @param callback 回调函数,函数参数是文件内容
|
||||
*/
|
||||
getFile: function(path, callback) {
|
||||
axios.get(path)
|
||||
.then(function(response) {
|
||||
callback.call(this, response.data)
|
||||
})
|
||||
},
|
||||
downloadText(filename, text) {
|
||||
const element = document.createElement('a')
|
||||
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text))
|
||||
|
@@ -32,13 +32,28 @@
|
||||
<el-table-column
|
||||
prop="roleList"
|
||||
label="角色"
|
||||
width="150"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span v-html="roleRender(scope.row)"></span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="userId"
|
||||
label="注册用户"
|
||||
width="100"
|
||||
>
|
||||
<template slot="header">
|
||||
注册用户
|
||||
<el-tooltip content="注册用户自行管理秘钥" placement="top">
|
||||
<i class="el-icon-question" style="cursor: pointer"></i>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.userId" style="font-weight: bold;">是</span>
|
||||
<span v-else>否</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="状态"
|
||||
@@ -57,7 +72,6 @@
|
||||
<el-table-column
|
||||
prop="remark"
|
||||
label="备注"
|
||||
width="200"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
@@ -66,8 +80,8 @@
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="mini" @click="onTableUpdate(scope.row)">修改</el-button>
|
||||
<el-button type="text" size="mini" @click="onKeysUpdate(scope.row)">秘钥管理</el-button>
|
||||
<el-button type="text" size="mini" @click="onExportKeys(scope.row)">导出秘钥</el-button>
|
||||
<el-button v-if="!scope.row.userId" type="text" size="mini" @click="onKeysUpdate(scope.row)">秘钥管理</el-button>
|
||||
<el-button v-if="!scope.row.userId" type="text" size="mini" @click="onExportKeys(scope.row)">导出秘钥</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
179
sop-admin/sop-admin-vue/src/views/service/sdk.vue
Normal file
179
sop-admin/sop-admin-vue/src/views/service/sdk.vue
Normal file
@@ -0,0 +1,179 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form size="mini">
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-upload" @click="onAddSdk">发布SDK</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
:data="list"
|
||||
border
|
||||
>
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="SDK"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="version"
|
||||
label="版本"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="content"
|
||||
label="下载地址"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-link type="primary" :href="scope.row.content" target="_blank">{{ scope.row.content }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="150"
|
||||
align="center"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="mini" @click="onSdkUpdate(scope.row)">编辑</el-button>
|
||||
<el-button type="text" size="mini" @click="onSdkDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--dialog-->
|
||||
<el-dialog
|
||||
:title="sdkDlgTitle"
|
||||
:visible.sync="sdkDlgAddShow"
|
||||
:close-on-click-modal="false"
|
||||
@close="resetForm('sdkAddForm')"
|
||||
>
|
||||
<el-form
|
||||
ref="sdkAddForm"
|
||||
:model="sdkFormAddData"
|
||||
:rules="sdkFormRule"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item prop="name" label="选择语言">
|
||||
<el-select
|
||||
v-model="sdkFormAddData.name"
|
||||
placeholder="请选择"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in sdkConfigs"
|
||||
:key="item.name"
|
||||
:label="item.name"
|
||||
:value="item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item prop="version" label="版本">
|
||||
<el-input v-model="sdkFormAddData.version" maxlength="30" show-word-limit placeholder="如:1.0" />
|
||||
</el-form-item>
|
||||
<el-form-item prop="content" label="下载地址">
|
||||
<el-input v-model="sdkFormAddData.content" maxlength="100" show-word-limit />
|
||||
</el-form-item>
|
||||
<el-form-item prop="extContent" label="调用示例">
|
||||
<el-input v-model="sdkFormAddData.extContent" type="textarea" :rows="12" placeholder="填写SDK调用示例代码,支持markdown语法" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="sdkDlgAddShow = false">取 消</el-button>
|
||||
<el-button type="primary" @click="onSubmitForm">保 存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
const appFormDataInit = function() {
|
||||
return {
|
||||
id: 0,
|
||||
name: '',
|
||||
version: '',
|
||||
content: '',
|
||||
extContent: ''
|
||||
}
|
||||
}
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
searchFormData: {},
|
||||
sdkDownloadConfig: [],
|
||||
sdkConfigs: [],
|
||||
sdkDlgTitle: '',
|
||||
sdkDlgAddShow: false,
|
||||
sdkFormUpdateData: appFormDataInit(),
|
||||
sdkFormAddData: appFormDataInit(),
|
||||
sdkFormLoading: false,
|
||||
sdkFormRule: {
|
||||
name: [
|
||||
{ required: true, message: '请填名称', trigger: 'blur' }
|
||||
],
|
||||
version: [
|
||||
{ required: true, message: '请填版本', trigger: 'blur' }
|
||||
],
|
||||
content: [
|
||||
{ required: true, message: '请填写URL', trigger: 'blur' }
|
||||
],
|
||||
extContent: [
|
||||
{ required: true, message: '请填写调用示例', trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
downloadUrl: '',
|
||||
list: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.loadLangSelector()
|
||||
this.loadTable()
|
||||
},
|
||||
methods: {
|
||||
loadLangSelector: function() {
|
||||
this.getFile(`static/sdkConfig.json?q=${new Date().getTime()}`, (content) => {
|
||||
this.sdkConfigs = content.langList
|
||||
})
|
||||
},
|
||||
loadTable: function() {
|
||||
this.post('isp.sdk.list', this.searchFormData, resp => {
|
||||
this.list = resp.data
|
||||
})
|
||||
},
|
||||
onSizeChange: function(size) {
|
||||
this.searchFormData.pageSize = size
|
||||
this.loadTable()
|
||||
},
|
||||
onPageIndexChange: function(pageIndex) {
|
||||
this.searchFormData.pageIndex = pageIndex
|
||||
this.loadTable()
|
||||
},
|
||||
onAddSdk: function() {
|
||||
this.sdkDlgTitle = '添加SDK'
|
||||
this.sdkFormAddData = appFormDataInit()
|
||||
this.sdkDlgAddShow = true
|
||||
},
|
||||
onSdkUpdate: function(row) {
|
||||
this.sdkDlgTitle = '修改SDK'
|
||||
this.sdkFormAddData = appFormDataInit()
|
||||
Object.assign(this.sdkFormAddData, row)
|
||||
this.sdkDlgAddShow = true
|
||||
},
|
||||
onSdkDelete: function(row) {
|
||||
this.confirm(`确认要删除【${row.name}】吗?`, (done) => {
|
||||
this.post('isp.sdk.delete', { id: row.id }, resp => {
|
||||
done()
|
||||
this.tip('删除成功')
|
||||
this.loadTable()
|
||||
})
|
||||
})
|
||||
},
|
||||
onSubmitForm: function() {
|
||||
this.$refs.sdkAddForm.validate((valid) => {
|
||||
if (valid) {
|
||||
const uri = this.sdkFormAddData.id ? 'isp.sdk.update' : 'isp.sdk.add'
|
||||
this.post(uri, this.sdkFormAddData, function() {
|
||||
this.sdkDlgAddShow = false
|
||||
this.loadTable()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
Reference in New Issue
Block a user