Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
f8d2214a76
BIN
sf-ui/src/assets/images/code.png
Normal file
BIN
sf-ui/src/assets/images/code.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 213 B |
@ -1,11 +1,10 @@
|
||||
import Vue from 'vue'
|
||||
import Router from 'vue-router'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
/* Layout */
|
||||
import Layout from '@/layout'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
/**
|
||||
* Note: 路由配置项
|
||||
*
|
||||
@ -165,8 +164,8 @@ export const dynamicRoutes = [
|
||||
]
|
||||
|
||||
// 防止连续点击多次路由报错
|
||||
let routerPush = Router.prototype.push;
|
||||
let routerReplace = Router.prototype.replace;
|
||||
let routerPush = Router.prototype.push
|
||||
let routerReplace = Router.prototype.replace
|
||||
// push
|
||||
Router.prototype.push = function push(location) {
|
||||
return routerPush.call(this, location).catch(err => err)
|
||||
|
439
sf-ui/src/views/FDS/hotfix/add.vue
Normal file
439
sf-ui/src/views/FDS/hotfix/add.vue
Normal file
@ -0,0 +1,439 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-container>
|
||||
<el-header>
|
||||
<div>安装包发布任务</div>
|
||||
<el-divider/>
|
||||
</el-header>
|
||||
<el-main>
|
||||
<div class="form-main">
|
||||
<el-form ref="formAdd" v-loading="$store.state.app.isLoading" :label-width="'120px'" :model="list"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-form-item label="发布版本">
|
||||
<span>{{ list.version }} ({{ list.platformName }})</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布类型" prop="grayFlag">
|
||||
<el-radio v-model="list.grayFlag" label="0">灰度</el-radio>
|
||||
<el-radio v-model="list.grayFlag" label="1">正式</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item label="升级模式" prop="upgradeMode">
|
||||
<el-radio v-model="list.upgradeMode" label="0">非强制升级</el-radio>
|
||||
<el-radio v-model="list.upgradeMode" label="1">强制升级</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item label="升级描述" prop="upgradeDesp">
|
||||
<el-input v-model="list.upgradeDesp" class="remark-input" maxlength="50" placeholder="请输入升级描述"
|
||||
show-word-limit
|
||||
type="textarea"
|
||||
/>
|
||||
</el-form-item>
|
||||
<template v-if="list.grayFlag =='0'">
|
||||
<el-form-item label="发布条件" prop="releaseDestType">
|
||||
<el-radio v-model="list.releaseDestType" label="0">白名单</el-radio>
|
||||
<el-radio v-model="list.releaseDestType" label="1">时间窗</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="list.releaseDestType =='0'" label="白名单" prop="whiteListId">
|
||||
<template>
|
||||
<el-cascader v-model="list.whiteListId" :options="whiteOptions" :show-all-levels="false" clearable/>
|
||||
</template>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="list.releaseDestType =='1'" label="结束日期" prop="expiryTime">
|
||||
<template>
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
v-model="list.expiryTime"
|
||||
placeholder="选择日期时间"
|
||||
type="datetime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="list.releaseDestType =='1'" label="灰度人数">
|
||||
<el-radio v-model="list.numType" label="0">无限制</el-radio>
|
||||
<el-radio v-model="list.numType" label="1">限制</el-radio>
|
||||
<el-input-number v-model="list.grayUserNum" :disabled="list.numType == '0'" :max="1000000000"
|
||||
:min="1" controls-position="right" placeholder="请输入灰度人数"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="desp">
|
||||
<el-input v-model="list.desp" class="remark-input" maxlength="50" placeholder="请输入备注"
|
||||
show-word-limit
|
||||
type="textarea"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :prop="list.rule.regularRule? 'releaseRuleId': 'headerOperations'" label="高级规则">
|
||||
<template>
|
||||
<el-row>
|
||||
<el-col :span="5">
|
||||
<el-checkbox v-model="list.rule.regularRule">常用规则</el-checkbox>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-select v-model="list.releaseRuleId" :disabled="!list.rule.regularRule" filterable>
|
||||
<el-option
|
||||
v-for="item in releaseOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row class="form-row">
|
||||
<el-col :span="5">
|
||||
<el-checkbox v-model="list.rule.customRule">自定义</el-checkbox>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row v-if="list.rule.customRule" class="form-row">
|
||||
<el-table
|
||||
:data="list.headerOperations"
|
||||
border
|
||||
class="custom-table"
|
||||
size="mini"
|
||||
>
|
||||
<el-table-column align="center" label="类型">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.type" :disabled="disabledCode" placeholder="请选择"
|
||||
@change="value=>{dictionaryTypeChange(scope.$index,scope.row.type)}"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in typeList"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="条件">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.operType" :disabled="disabledCode" placeholder="请选择">
|
||||
<el-option label="包含" value="1"/>
|
||||
<el-option label="不包含" value="0"/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="发布条件">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.value" :disabled="disabledCode" placeholder="请选择">
|
||||
<el-option v-for="item in scope.row.dictionaryList" :key="item.value" :label="item.value"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" border label="操作" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-button :disabled="disabledCode" round size="mini" type="danger"
|
||||
@click="deleteHeaderOption(scope.$index)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-if="!disabledCode" class="addRow" @click="addHeaderOption()">
|
||||
<i class="el-icon-circle-plus-outline"/>
|
||||
<a class="color-3B77FF">新增一行</a>
|
||||
</div>
|
||||
</el-row>
|
||||
</template>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-if="list.grayFlag =='1'">
|
||||
<el-form-item label="备注" prop="desp">
|
||||
<el-input v-model="list.desp" class="remark-input" maxlength="50" placeholder="请输入备注"
|
||||
show-word-limit
|
||||
type="textarea"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="addNew()">新增发布任务</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
// import { getDictionaryList, getInstallTaskAdd, getReleaseRuleList, getTypeList, getWhiteList } from '@/api/FDS'
|
||||
|
||||
export default {
|
||||
name: 'InstallationPackTask',
|
||||
components: {},
|
||||
data() {
|
||||
var checkHeader = (rule, value, callback) => {
|
||||
if (this.list.rule.customRule) {
|
||||
value.forEach(ele => {
|
||||
for (const key in ele) {
|
||||
if (Object.hasOwnProperty.call(ele, key)) {
|
||||
const item = ele[key]
|
||||
if (!item && key !== 'desp') {
|
||||
return callback(new Error('请输入自定义规则必填项'))
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
callback()
|
||||
}
|
||||
var checkRadix = (rule, value, callback) => {
|
||||
if (this.list.rule.regularRule && !value) {
|
||||
return callback(new Error('请选择常用规则'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
return {
|
||||
selectValue: 'code',
|
||||
checkList: ['Android'],
|
||||
disabledCode: false,
|
||||
list: {
|
||||
rule: {
|
||||
regularRule: false,
|
||||
customRule: false
|
||||
},
|
||||
// headerOperations: [],
|
||||
packId: '', // 安装包ID
|
||||
grayFlag: '0', // 发布类型: 0灰度 1正式
|
||||
upgradeMode: '0', //
|
||||
releaseDestType: '0', // 发布条件: 0白名单 1时间窗
|
||||
headerOperations: [// 自定义规则
|
||||
// {
|
||||
// 'scope': '', // 范围:region地区 platform平台
|
||||
// 'inclued': '', // 是否包含 1包含 2不包含
|
||||
// 'condition': '', // 发布条件
|
||||
// 'desp': ''// 备注
|
||||
// }
|
||||
],
|
||||
grayUserNum: '', // 灰度人数
|
||||
numType: '0',
|
||||
expiryTime: '', // 灰度结束时间
|
||||
desp: '',
|
||||
releaseRuleId: '', // 常用规则
|
||||
// deviceListId: '', // 设备白名单
|
||||
whiteListId: ''// 用户白名单id
|
||||
},
|
||||
whiteOptions: [],
|
||||
releaseOptions: [],
|
||||
fileList: [],
|
||||
typeList: [],
|
||||
rules: {
|
||||
headerOperations: [
|
||||
{ validator: checkHeader, trigger: 'blur' }
|
||||
],
|
||||
releaseRuleId: [
|
||||
{ validator: checkRadix, trigger: 'blur' }
|
||||
],
|
||||
grayFlag: [
|
||||
{ required: true }
|
||||
],
|
||||
upgradeMode: [
|
||||
{ required: true }
|
||||
],
|
||||
upgradeDesp: [
|
||||
{ required: true, message: '请输入升级描述', trigger: 'change' }
|
||||
],
|
||||
releaseDestType: [
|
||||
{ required: true }
|
||||
],
|
||||
whiteListId: [
|
||||
{ required: true, message: '请选择白名单', trigger: 'change' }
|
||||
],
|
||||
expiryTime: [
|
||||
{ required: true, message: '请选择发布时间', trigger: 'blur' }
|
||||
],
|
||||
grayUserNum: [
|
||||
{ required: true, message: '请输入灰度人数', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
watch: {
|
||||
'list.rule.regularRule'(newR, oldR) { // 常用规则
|
||||
if (this.list.rule.customRule && newR) {
|
||||
this.list.rule.regularRule = true
|
||||
this.list.rule.customRule = false
|
||||
}
|
||||
this.list.releaseRuleId = newR ? this.list.releaseRuleId : ''
|
||||
},
|
||||
'list.rule.customRule'(newC, oldC) {
|
||||
if (this.list.rule.regularRule && newC) {
|
||||
this.list.rule.customRule = true
|
||||
this.list.rule.regularRule = false
|
||||
}
|
||||
if (newC && this.list.headerOperations.length < 1) {
|
||||
this.addHeaderOption()
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
beforeMount() {
|
||||
this.whiteOptions = [{
|
||||
value: 'user',
|
||||
label: '用户',
|
||||
children: []
|
||||
},
|
||||
{
|
||||
value: 'device',
|
||||
label: '设备',
|
||||
children: []
|
||||
}]
|
||||
getTypeList({
|
||||
'beginPage': '1',
|
||||
'pageSize': '999'
|
||||
}).then(res => {
|
||||
this.typeList = res.context.list
|
||||
this.typeList.forEach(res => {
|
||||
res.platform = this.list.platformName
|
||||
})
|
||||
console.log(275, this.typeList)
|
||||
})
|
||||
getWhiteList({ type: 0 }).then(res => {
|
||||
if (res.code === '00') {
|
||||
const list = res.context.list
|
||||
list.forEach(i => {
|
||||
this.whiteOptions[0].children.push({
|
||||
value: i.id,
|
||||
label: i.name
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
getWhiteList({ type: 1 }).then(res => {
|
||||
if (res.code === '00') {
|
||||
const list = res.context.list
|
||||
list.forEach(i => {
|
||||
this.whiteOptions[1].children.push({
|
||||
value: i.id,
|
||||
label: i.name
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
getReleaseRuleList({}).then(res => {
|
||||
if (res.code === '00') {
|
||||
const list = res.context.list
|
||||
list.forEach(i => {
|
||||
this.releaseOptions.push({
|
||||
value: i.id,
|
||||
label: i.name
|
||||
})
|
||||
console.log(this.releaseOptions)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
mounted() {
|
||||
if (this.$route.query.data) {
|
||||
const params = JSON.parse(this.$route.query.data)
|
||||
this.list.packId = params.id
|
||||
this.list.version = params.version
|
||||
this.list.platformName = params.platform === '0' ? 'Android' : 'IOS'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
addHeaderOption() {
|
||||
this.list.headerOperations.push({
|
||||
'type': '',
|
||||
'operType': '',
|
||||
'value': '',
|
||||
'dictionaryList': []
|
||||
// 'desp': ''
|
||||
})
|
||||
},
|
||||
deleteHeaderOption(index) {
|
||||
this.list.headerOperations.splice(index, 1)
|
||||
},
|
||||
dictionaryTypeChange(index, value) {
|
||||
const params = { type: value }
|
||||
if (value !== 'city') {
|
||||
params.notPlatform = this.list.platformName === '0' ? 'IOS' : 'Android'
|
||||
}
|
||||
getDictionaryList(params).then(res => {
|
||||
if (res.code === '00') {
|
||||
this.list.headerOperations[index].dictionaryList = res.context.list
|
||||
}
|
||||
})
|
||||
},
|
||||
addNew() {
|
||||
console.log(this.list)
|
||||
const params = {}
|
||||
params.grayFlag = this.list.grayFlag
|
||||
params.pattern = this.list.upgradeMode
|
||||
params.patternHint = this.list.upgradeDesp
|
||||
params.desp = this.list.desp
|
||||
params.packId = this.list.packId
|
||||
if (this.list.grayFlag === '0') {
|
||||
params.deployType = this.list.releaseDestType
|
||||
params.desp = this.list.desp
|
||||
if (this.list.rule.regularRule) {
|
||||
params.releaseRuleId = this.list.releaseRuleId
|
||||
}
|
||||
if (this.list.rule.customRule) {
|
||||
params.releaseRuleItemList = this.list.headerOperations
|
||||
}
|
||||
if (this.list.releaseDestType === '0') { // 灰度白名单
|
||||
params.whiteListId = this.list.whiteListId[this.list.whiteListId.length - 1]
|
||||
}
|
||||
if (this.list.releaseDestType === '1') { // 灰度时间窗
|
||||
if (this.list.numType === '1') {
|
||||
params.grayUserNum = this.list.grayUserNum
|
||||
}
|
||||
params.expiryTime = this.list.expiryTime
|
||||
}
|
||||
}
|
||||
this.$refs.formAdd.validate((valid) => {
|
||||
if (valid) {
|
||||
getInstallTaskAdd(params).then(res => {
|
||||
if (res.code === '00') {
|
||||
this.$message({
|
||||
message: '新增发布任务成功!',
|
||||
type: 'success'
|
||||
})
|
||||
this.$router.go(-1)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
background: #ffffff;
|
||||
margin: 24px;
|
||||
}
|
||||
|
||||
.form-main {
|
||||
width: 700px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.form-row {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner {
|
||||
border: 1px solid #E4E7ED !important;
|
||||
}
|
||||
|
||||
.custom-table {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.addRow {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.remark-input {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
</style>
|
204
sf-ui/src/views/FDS/installationList/add.vue
Normal file
204
sf-ui/src/views/FDS/installationList/add.vue
Normal file
@ -0,0 +1,204 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-container>
|
||||
<el-header>
|
||||
<div>新增文件</div>
|
||||
<el-divider/>
|
||||
</el-header>
|
||||
<el-main>
|
||||
<div class="form-main">
|
||||
<el-form ref="formAdd" v-loading="$store.state.app.isLoading" :model="form" :rules="rules"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-form-item label="上传方式" prop="debug">
|
||||
<el-radio-group v-model="form.debug">
|
||||
<el-radio
|
||||
:key="1"
|
||||
label="1"
|
||||
>在线上传
|
||||
</el-radio>
|
||||
<el-radio
|
||||
:key="2"
|
||||
label="2"
|
||||
>离线上传
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item :label="activeTabs=='1'?'安装包名称':'模块包名称'" prop="configKey">
|
||||
<el-input v-model="form.configKey" :placeholder="activeTabs=='1'?'请输入安装包名称':'请输入模块包名称'"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="版本号">
|
||||
<el-input v-model="form.configName" placeholder="请输入版本号"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="安装包文件">
|
||||
<el-upload
|
||||
ref="whiteListFiles"
|
||||
:auto-upload="true"
|
||||
:before-remove="beforeRemove"
|
||||
:before-upload="beforeAvatarUpload"
|
||||
:file-list="fileList"
|
||||
:headers="{tokenId: tokenId}"
|
||||
:multiple="false"
|
||||
:on-success="handleSuccess"
|
||||
accept=".zip"
|
||||
action="https://jsonplaceholder.typicode.com/posts/"
|
||||
class="upload"
|
||||
limit="1"
|
||||
>
|
||||
<el-button slot="trigger" size="small" type="primary">上传文件</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="安装包大小">
|
||||
<el-input v-model="form.configName" placeholder="请输入安装包版本号"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="适用系统">
|
||||
<el-radio-group v-model="form.platform">
|
||||
<el-radio
|
||||
:key="1"
|
||||
label="Android"
|
||||
>Android
|
||||
</el-radio>
|
||||
<el-radio
|
||||
:key="2"
|
||||
label="鸿蒙"
|
||||
>鸿蒙
|
||||
</el-radio>
|
||||
<el-radio
|
||||
:key="3"
|
||||
label="IOS"
|
||||
>IOS
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="activeTabs!='1'" label="适用模块" prop="configName">
|
||||
<el-select v-model="form.uploadMode" clearable placeholder="请选择对应的模块">
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_yes_no"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitAddForm()">保 存</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-main>
|
||||
<!--安装包弹窗-->
|
||||
</el-container>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
import { addConfig, updateConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: 'InstallAdd',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
return {
|
||||
form: {},
|
||||
tokenId: '',
|
||||
// 文件存放的路径
|
||||
fileList: [],
|
||||
rules: {
|
||||
configName: [
|
||||
{ required: true, message: '上传方式不能为空', trigger: 'change' }
|
||||
],
|
||||
configKey: [
|
||||
{ required: true, message: '安装包名称不能为空', trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
activeTabs: '1'
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
reset() {
|
||||
this.form = {
|
||||
whiteListType: undefined,
|
||||
whiteListName: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitAddForm: function() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.configId != undefined) {
|
||||
updateConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess('修改成功')
|
||||
this.closeModal()
|
||||
})
|
||||
} else {
|
||||
addConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess('新增成功')
|
||||
this.closeModal()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/** 在上传之前进行校验 */
|
||||
beforeAvatarUpload(file) {
|
||||
const formatList = file.name.split('.')
|
||||
const isFormat = file.type === 'text/plain' || formatList[formatList.length - 1] === 'txt'
|
||||
if (!isFormat) {
|
||||
this.$message.error(`上传格式只能是名称后缀为.txt的文本文件!`)
|
||||
}
|
||||
const isLt2M = file.size / 1024 / 1024 < 5
|
||||
if (!isLt2M) {
|
||||
this.$message.error(`上传文件大小不能超过5M!`)
|
||||
}
|
||||
return isLt2M && isFormat
|
||||
},
|
||||
/** 上传文件 */
|
||||
handleSuccess(file) {
|
||||
this.fileList = []
|
||||
const nameList = file.context.path.split('/')
|
||||
this.fileList.push({
|
||||
name: file.context.name || nameList[nameList.length - 1],
|
||||
url: file.context.path
|
||||
})
|
||||
this.addFormData.path = file.context.path
|
||||
},
|
||||
beforeRemove(files, filesList) {
|
||||
return this.$confirm(`确定要移除${files.name}?`)
|
||||
},
|
||||
cancel() {
|
||||
this.history.back()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
background: #ffffff;
|
||||
margin: 24px;
|
||||
}
|
||||
|
||||
.form-main {
|
||||
width: 700px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner {
|
||||
border: 1px solid #E4E7ED !important;
|
||||
}
|
||||
|
||||
.tag-group {
|
||||
.el-tag {
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.el-tag + .el-tag {
|
||||
margin-left: 10px
|
||||
}
|
||||
</style>
|
77
sf-ui/src/views/FDS/installationList/detail.vue
Normal file
77
sf-ui/src/views/FDS/installationList/detail.vue
Normal file
@ -0,0 +1,77 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-container>
|
||||
<el-header>
|
||||
<div>安装包详情</div>
|
||||
<el-divider/>
|
||||
</el-header>
|
||||
<el-main>
|
||||
<div class="form-main">
|
||||
<el-form ref="form" :model="form" label-width="150px" size="mini">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="上传方式:">离线上传</el-form-item>
|
||||
<el-form-item
|
||||
label="安装包名称:"
|
||||
>安装包11111
|
||||
</el-form-item>
|
||||
<el-form-item label="安装包文件名称:">安装包1111.excel</el-form-item>
|
||||
<el-form-item label="安装包大小:">58.1kb</el-form-item>
|
||||
<el-form-item label="适用系统:">安卓</el-form-item>
|
||||
<el-form-item v-if="activeTabs!='1'" label="适用模块:">登录模块</el-form-item>
|
||||
<el-form-item label="上传时间:">上传时间2024-04-07 17:43</el-form-item>
|
||||
<el-form-item label="上传状态:">已上传</el-form-item>
|
||||
<el-form-item label="上传人员:">刮刮乐</el-form-item>
|
||||
<el-form-item label="上传日志:">日志日志</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'InstallDetail',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
|
||||
return {
|
||||
form: {},
|
||||
tokenId: '',
|
||||
// 文件存放的路径
|
||||
activeTabs: '1'
|
||||
}
|
||||
},
|
||||
methods: {}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
background: #ffffff;
|
||||
margin: 24px;
|
||||
}
|
||||
|
||||
.form-main {
|
||||
width: 700px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner {
|
||||
border: 1px solid #E4E7ED !important;
|
||||
}
|
||||
|
||||
.tag-group {
|
||||
.el-tag {
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.el-tag + .el-tag {
|
||||
margin-left: 10px
|
||||
}
|
||||
</style>
|
@ -1,21 +1,20 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<el-tabs v-model="activeTabs">
|
||||
<el-tabs v-model="activeTabs" type="card" @tab-click="handleClickTabs">
|
||||
<el-tab-pane
|
||||
:key="item.name"
|
||||
v-for="item in packTabs"
|
||||
:key="item.name"
|
||||
:label="item.title"
|
||||
:name="item.name"
|
||||
>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
|
||||
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="90px" size="small">
|
||||
<el-form-item label="安装包名称" prop="installpackName">
|
||||
<el-input
|
||||
v-model="queryParams.installpackName"
|
||||
placeholder="请输入安装包名称"
|
||||
clearable
|
||||
placeholder="请输入安装包名称"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
@ -23,14 +22,14 @@
|
||||
<el-form-item label="版本" prop="versions">
|
||||
<el-input
|
||||
v-model="queryParams.versions"
|
||||
placeholder="请输入版本"
|
||||
clearable
|
||||
placeholder="请输入版本"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传方式" prop="uploadMode">
|
||||
<el-select v-model="queryParams.uploadMode" placeholder="请选择上传方式" clearable>
|
||||
<el-select v-model="queryParams.uploadMode" clearable placeholder="请选择上传方式">
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_yes_no"
|
||||
:key="dict.value"
|
||||
@ -42,16 +41,16 @@
|
||||
<el-form-item label="创建时间">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
end-placeholder="结束日期"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
style="width: 240px"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="configType">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-select v-model="queryParams.status" clearable placeholder="请选择状态">
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_yes_no"
|
||||
:key="dict.value"
|
||||
@ -61,7 +60,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -69,233 +68,105 @@
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:config:add']"
|
||||
>新建</el-button>
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>新建
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:config:delete']"
|
||||
>批量删除</el-button>
|
||||
:disabled="multiple"
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="info"
|
||||
@click="handleDelete"
|
||||
>批量删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
<el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange" v-if="activeTabs==1">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="安装包名称" align="center" prop="configId" />
|
||||
<el-table-column label="版本号" align="center" prop="configName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="安装包大小" align="center" prop="configKey" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="上传方式" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="状态" align="center" prop="configType">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.configType"/>
|
||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
||||
<el-table-column align="center" type="selection" width="55"/>
|
||||
<template v-if="activeTabs=='1'">
|
||||
<el-table-column align="center" label="离线包名称" prop="configId"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="版本" prop="configName"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="平台" prop="configValue"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="创建人" prop="configValue"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建人" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||
<template v-if="activeTabs=='2'">
|
||||
<el-table-column align="center" label="安装包名称" prop="configId"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="版本号" prop="configName"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="安装包大小" prop="configKey"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="上传方式" prop="configValue"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="创建人" prop="configValue"/>
|
||||
<el-table-column align="center" label="创建时间" prop="createTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
</template>
|
||||
<el-table-column align="center" label="状态" prop="configType">
|
||||
<template slot-scope="scopeA">
|
||||
<dict-tag :options="dict.type.sys_yes_no" :value="scopeA.row.type"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" class-name="small-padding fixed-width" label="操作" width="250">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleDownload(scope.row)"
|
||||
v-hasPermi="['system:config:dowmload']"
|
||||
>下载安装包</el-button>
|
||||
<el-button
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleEdit(scope.row)"
|
||||
@click="handleDownload(scope.row)"
|
||||
>下载安装包
|
||||
</el-button>
|
||||
<el-button
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>编辑</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleDetail(scope.row)"
|
||||
v-hasPermi="['system:config:detail']"
|
||||
>详情</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
@click="handleEdit(scope.row)"
|
||||
>编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-hasPermi="['system:config:detail']"
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleDetail(scope.row)"
|
||||
>详情
|
||||
</el-button>
|
||||
<el-button
|
||||
v-hasPermi="['system:config:delete']"
|
||||
>删除</el-button>
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange" v-else>
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="离线包名称" align="center" prop="configId" />
|
||||
<el-table-column label="版本" align="center" prop="configName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="平台" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="状态" align="center" prop="configType">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.configType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建人" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleDownload(scope.row)"
|
||||
v-hasPermi="['system:config:dowmload']"
|
||||
>下载安装包</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleEdit(scope.row)"
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>编辑</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleDetail(scope.row)"
|
||||
v-hasPermi="['system:config:detail']"
|
||||
>详情</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:config:delete']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<pagination
|
||||
v-if="activeTabs==1"
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<pagination
|
||||
v-else
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 上传APP安装包的弹窗 -->
|
||||
<el-dialog :title="title" :visible.sync="addOpen" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="上传方式" prop="configName">
|
||||
<el-radio-group v-model="form.debug">
|
||||
<el-radio
|
||||
:key="1"
|
||||
:label="在线上传"
|
||||
>在线上传</el-radio>
|
||||
<el-radio
|
||||
:key="2"
|
||||
:label="离线上传"
|
||||
>离线上传</el-radio>
|
||||
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item :label="activeTabs==1?'安装包名称':'模块包名称'" prop="configKey">
|
||||
<el-input v-model="form.configKey" :placeholder="activeTabs==1?'请输入安装包名称':'请输入模块包名称'" />
|
||||
</el-form-item>
|
||||
<el-form-item label="版本号" prop="configName">
|
||||
<el-input v-model="form.configName" placeholder="请输入版本号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="安装包文件" prop="configName">
|
||||
<el-input v-model="form.configName" placeholder="请输入安装包版本号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="安装包大小" prop="configName">
|
||||
<el-input v-model="form.configName" placeholder="请输入安装包版本号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="适用系统" prop="configName">
|
||||
<el-radio-group v-model="form.debug">
|
||||
<el-radio
|
||||
:key="1"
|
||||
:label="Android"
|
||||
>Android</el-radio>
|
||||
<el-radio
|
||||
:key="2"
|
||||
:label="鸿蒙"
|
||||
>鸿蒙</el-radio>
|
||||
|
||||
<el-radio
|
||||
:key="3"
|
||||
:label="IOS"
|
||||
>IOS</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="适用模块" prop="configName" v-if="activeTabs!=1">
|
||||
<el-select v-model="queryParams.uploadMode" placeholder="请选择对应的模块" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_yes_no"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm(2)">保 存</el-button>
|
||||
<el-button @click="cancel(2)">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 安装包详情弹窗 -->
|
||||
<el-dialog title="安装包详情" :visible.sync="detailOpen" width="700px" append-to-body>
|
||||
<el-form ref="form" :model="form" label-width="150px" size="mini">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="上传方式:">离线上传</el-form-item>
|
||||
<el-form-item
|
||||
label="安装包名称:"
|
||||
>安装包11111</el-form-item>
|
||||
<el-form-item label="安装包文件名称:">安装包1111.excel</el-form-item>
|
||||
<el-form-item label="安装包大小:">58.1kb</el-form-item>
|
||||
<el-form-item label="适用系统:">安卓</el-form-item>
|
||||
<el-form-item label="适用模块:" v-if="activeTabs!=1">登录模块</el-form-item>
|
||||
<el-form-item label="上传时间:">上传时间2024-04-07 17:43</el-form-item>
|
||||
<el-form-item label="上传状态:">已上传</el-form-item>
|
||||
<el-form-item label="上传人员:">刮刮乐</el-form-item>
|
||||
<el-form-item label="上传日志:">日志日志</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="detailOpen = false">关 闭</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { listConfig, getConfig, delConfig, addConfig, updateConfig, refreshCache } from "@/api/system/config";
|
||||
import { delConfig, getConfig, listConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: "installationList",
|
||||
name: 'InstallationList',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
return {
|
||||
@ -312,13 +183,26 @@ export default {
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 参数表格数据
|
||||
|
||||
dataList: [],
|
||||
|
||||
configList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
title: '',
|
||||
// 是否显示安装包上传弹出框
|
||||
addOpen: false,
|
||||
// 是否显示安装包详情弹出框
|
||||
detailOpen:false,
|
||||
detailOpen: false,
|
||||
tokenId: '',
|
||||
// 文件存放的路径
|
||||
fileList: [],
|
||||
packTabs: [{
|
||||
name: '1',
|
||||
title: 'APP安装包'
|
||||
}, {
|
||||
name: '2',
|
||||
title: 'H5模块包'
|
||||
}],
|
||||
// 日期范围
|
||||
dateRange: [],
|
||||
// 查询参数
|
||||
@ -331,49 +215,33 @@ export default {
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
activeTabs: '1'
|
||||
// 表单校验
|
||||
rules: {
|
||||
configName: [
|
||||
{ required: true, message: "上传方式不能为空", trigger: "change" }
|
||||
],
|
||||
configKey: [
|
||||
{ required: true, message: "安装包名称不能为空", trigger: "blur" }
|
||||
],
|
||||
},
|
||||
// 当前选中的安装包方式 1=APP安装包,2=H5模块包
|
||||
activeTabs:1,
|
||||
|
||||
packTabs:[{
|
||||
name:1,
|
||||
title:'APP安装包'
|
||||
},{
|
||||
name:2,
|
||||
title: 'H5模块包'
|
||||
}]
|
||||
};
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询参数列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
this.loading = true
|
||||
listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||
this.configList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
this.dataList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
}
|
||||
);
|
||||
)
|
||||
},
|
||||
|
||||
// 取消按钮
|
||||
cancel(type) {
|
||||
if (type===1){
|
||||
this.addOpen= false
|
||||
}else {
|
||||
if (type === 1) {
|
||||
this.addOpen = false
|
||||
} else {
|
||||
this.configOpen = false
|
||||
}
|
||||
this.reset();
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
@ -382,70 +250,103 @@ export default {
|
||||
configName: undefined,
|
||||
configKey: undefined,
|
||||
configValue: undefined,
|
||||
configType: "Y",
|
||||
configType: 'Y',
|
||||
remark: undefined
|
||||
};
|
||||
this.resetForm("form");
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.dateRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
this.dateRange = []
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.addOpen = true;
|
||||
this.title = "上传安装包";
|
||||
this.reset()
|
||||
|
||||
this.$router.push({
|
||||
path: 'install/add',
|
||||
params: {
|
||||
type: 'add',
|
||||
activeTabs: this.activeTabs
|
||||
}
|
||||
})
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.configId)
|
||||
this.single = selection.length!=1
|
||||
this.single = selection.length != 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm: function() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.configId != undefined) {
|
||||
updateConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.addOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.addOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const configIds = row.configId || this.ids;
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认删除编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds);
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
/** 修改按钮操作 */
|
||||
handleEdit(row) {
|
||||
this.reset()
|
||||
const configId = row.configId || this.ids
|
||||
getConfig(configId).then(response => {
|
||||
this.form = response.data
|
||||
this.$router.push({
|
||||
path: 'install/add',
|
||||
params: {
|
||||
type: 'edit',
|
||||
activeTabs: this.activeTabs
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
/** 查看详情弹窗 **/
|
||||
handleDetail() {
|
||||
this.detailOpen = true;
|
||||
this.$router.push({
|
||||
path: 'install/detail',
|
||||
params: {
|
||||
activeTabs: this.activeTabs
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/** 切换TAB触发的事件 */
|
||||
handleClickTabs() {
|
||||
this.getList()
|
||||
},
|
||||
|
||||
/** 下载按钮 */
|
||||
handleDownload(row) {
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认下载编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('下载成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
/** 关闭新增弹出框*/
|
||||
closeAdd() {
|
||||
this.addOpen = false
|
||||
this.getList()
|
||||
},
|
||||
closeAddConfig() {
|
||||
this.detailOpen = false
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
301
sf-ui/src/views/FDS/publishList/add.vue
Normal file
301
sf-ui/src/views/FDS/publishList/add.vue
Normal file
@ -0,0 +1,301 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-container>
|
||||
<el-header>
|
||||
<div>新增文件</div>
|
||||
<el-divider/>
|
||||
</el-header>
|
||||
<el-main>
|
||||
<div class="form-main">
|
||||
<el-form ref="formAdd" v-loading="$store.state.app.isLoading" :label-width="'120px'" :model="list"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-form-item label="APP名称" prop="AppName">
|
||||
<el-input v-model="list.AppName" placeholder="输入APP名称"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传类型" prop="">
|
||||
<el-input v-model="list.AppName" placeholder="请选择上传类型"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择系统" prop="grayFlag">
|
||||
<div class="tag-group">
|
||||
<el-tag :type="list.platform=='android'?'':'info'" @click="list.platform='android'">安卓</el-tag>
|
||||
<el-tag :type="list.platform=='IOS'?'':'info'" @click="list.platform='IOS'">IOS</el-tag>
|
||||
<el-tag :type="list.platform=='HarmonyOS'?'':'info'" @click="list.platform='HarmonyOS'">鸿蒙</el-tag>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="list.platform!=='IOS'" label="安装包" prop="upgradeMode">
|
||||
<el-input v-model="list.packName" class="input-with-select" placeholder="请选择包" readonly>
|
||||
<el-button slot="append" icon="el-icon-search" @click="handlePackOpen"></el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-else label="APP Store地址" prop="AppLink">
|
||||
<el-input v-model="list.AppLink" placeholder="请输入APPStore地址"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="版本号" prop="versionNumber">
|
||||
<el-input v-model="list.versionNumber" class="remark-input" maxlength="500" placeholder="输入版本号"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="版本说明">
|
||||
<el-input v-model="list.imprint" class="remark-input" maxlength="500" placeholder="输入版本描述"
|
||||
show-word-limit
|
||||
type="textarea"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 根据需求确认是否需要这些条件-->
|
||||
<!-- <el-form-item label="发布环境" prop="releaseDestType">-->
|
||||
<!-- <el-radio v-model="list.releaseDestType" label="0">开发环境</el-radio>-->
|
||||
<!-- <el-radio v-model="list.releaseDestType" label="1">测试发布</el-radio>-->
|
||||
<!-- <el-radio v-model="list.releaseDestType" label="2">生产发布</el-radio>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="发布策略" prop="releaseDestType">-->
|
||||
<!-- <el-radio v-model="list.releaseDestType" label="0">灰度发布</el-radio>-->
|
||||
<!-- <el-radio v-model="list.releaseDestType" label="1">全量发布</el-radio>-->
|
||||
<!-- <el-radio v-model="list.releaseDestType" label="2">回滚发布</el-radio>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="结果通知">
|
||||
<el-switch
|
||||
v-model="list.enableVerify"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="强制更新">
|
||||
<el-switch
|
||||
v-model="list.enableVerify"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="公开版">
|
||||
<el-switch
|
||||
v-model="list.enableVerify"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="下载验证">
|
||||
<span slot="label">
|
||||
下载验证
|
||||
<el-tooltip class="item-tooltip"
|
||||
content="当验证开关开启时,为发布包生成下载二维码的同时,也会生成一个6位验证码,扫描二维码后需经过验证码才可下载发布."
|
||||
effect="dark"
|
||||
placement="right"
|
||||
>
|
||||
<i class="el-icon-question"/>
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<el-switch
|
||||
v-model="list.downVerifi"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新客群">
|
||||
<el-radio v-model="list.numType" label="0">白名单客户</el-radio>
|
||||
<el-radio v-model="list.numType" label="1">普通客户</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item label="有效期">
|
||||
<template>
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
v-model="list.expiryTime"
|
||||
end-placeholder="结束日期"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
style="width: 240px"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
></el-date-picker>
|
||||
</div>
|
||||
</template>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="list.desp" class="remark-input" maxlength="50" placeholder="请输入备注" show-word-limit
|
||||
type="textarea"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-main>
|
||||
<!--安装包弹窗-->
|
||||
<AddPack :visible.sync="packOpen" @close="closeAddPack"></AddPack>
|
||||
</el-container>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
import AddPack from '@/views/FDS/publishList/components/addPack.vue'
|
||||
|
||||
export default {
|
||||
name: 'PublishAdd',
|
||||
dicts: ['sys_yes_no'],
|
||||
components: {
|
||||
AddPack
|
||||
},
|
||||
data() {
|
||||
// var checkHeader = (rule, value, callback) => {
|
||||
// if (this.list.rule.customRule) {
|
||||
// value.forEach(ele => {
|
||||
// for (const key in ele) {
|
||||
// if (Object.hasOwnProperty.call(ele, key)) {
|
||||
// const item = ele[key]
|
||||
// if (!item && key !== 'desp') {
|
||||
// return callback(new Error('请输入自定义规则必填项'))
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// callback()
|
||||
// }
|
||||
// var checkRadix = (rule, value, callback) => {
|
||||
// if (this.list.rule.regularRule && !value) {
|
||||
// return callback(new Error('请选择常用规则'))
|
||||
// }
|
||||
// callback()
|
||||
// }
|
||||
return {
|
||||
selectValue: 'code',
|
||||
list: {
|
||||
rule: {
|
||||
regularRule: false,
|
||||
customRule: false
|
||||
},
|
||||
// headerOperations: [],
|
||||
packId: '', // 安装包ID
|
||||
grayFlag: '0', // 发布类型: 0灰度 1正式
|
||||
upgradeMode: '0', //
|
||||
releaseDestType: '0', // 发布条件: 0白名单 1时间窗
|
||||
headerOperations: [// 自定义规则
|
||||
// {
|
||||
// 'scope': '', // 范围:region地区 platform平台
|
||||
// 'inclued': '', // 是否包含 1包含 2不包含
|
||||
// 'condition': '', // 发布条件
|
||||
// 'desp': ''// 备注
|
||||
// }
|
||||
],
|
||||
grayUserNum: '', // 灰度人数
|
||||
numType: '0',
|
||||
expiryTime: '', // 灰度结束时间
|
||||
desp: '',
|
||||
releaseRuleId: '', // 常用规则
|
||||
// deviceListId: '', // 设备白名单
|
||||
whiteListId: '',// 用户白名单id
|
||||
enableVerify: false, //是否开启下载验证
|
||||
imprint: '', //版本说明
|
||||
versionNumber: '',
|
||||
AppName: '', //APP名称
|
||||
platform: 'android' //系统
|
||||
},
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
packOpen: false,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
dataList: [],
|
||||
|
||||
rules: {
|
||||
grayFlag: [
|
||||
{ required: true }
|
||||
],
|
||||
upgradeMode: [
|
||||
{ required: true }
|
||||
],
|
||||
upgradeDesp: [
|
||||
{ required: true, message: '请输入升级描述', trigger: 'change' }
|
||||
],
|
||||
releaseDestType: [
|
||||
{ required: true }
|
||||
],
|
||||
whiteListId: [
|
||||
{ required: true, message: '请选择白名单', trigger: 'change' }
|
||||
],
|
||||
expiryTime: [
|
||||
{ required: true, message: '请选择发布时间', trigger: 'blur' }
|
||||
],
|
||||
grayUserNum: [
|
||||
{ required: true, message: '请输入灰度人数', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
|
||||
// mounted() {
|
||||
// if (this.$route.query.data) {
|
||||
// const params = JSON.parse(this.$route.query.data)
|
||||
// this.list.packId = params.id
|
||||
// this.list.version = params.version
|
||||
// this.list.platformName = params.platform === '0' ? 'Android' : 'IOS'
|
||||
// }
|
||||
// },
|
||||
methods: {
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.dateRange = []
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
/** 在上传之前进行校验 */
|
||||
beforeAvatarUpload(file) {
|
||||
const formatList = file.name.split('.')
|
||||
const isFormat = file.type === 'text/plain' || formatList[formatList.length - 1] === 'txt'
|
||||
if (!isFormat) {
|
||||
this.$message.error(`上传格式只能是名称后缀为.txt的文本文件!`)
|
||||
}
|
||||
const isLt2M = file.size / 1024 / 1024 < 5
|
||||
if (!isLt2M) {
|
||||
this.$message.error(`上传文件大小不能超过5M!`)
|
||||
}
|
||||
return isLt2M && isFormat
|
||||
},
|
||||
/** 上传文件 */
|
||||
handleSuccess(file) {
|
||||
this.fileList = []
|
||||
const nameList = file.context.path.split('/')
|
||||
this.fileList.push({
|
||||
name: file.context.name || nameList[nameList.length - 1],
|
||||
url: file.context.path
|
||||
})
|
||||
this.addFormData.path = file.context.path
|
||||
},
|
||||
beforeRemove(files, filesList) {
|
||||
return this.$confirm(`确定要移除${files.name}?`)
|
||||
},
|
||||
/** 弹出包选择框*/
|
||||
handlePackOpen() {
|
||||
this.packOpen = true
|
||||
},
|
||||
/** 关闭包选择框*/
|
||||
|
||||
closeAddPack() {
|
||||
this.packOpen = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
background: #ffffff;
|
||||
margin: 24px;
|
||||
}
|
||||
|
||||
.form-main {
|
||||
width: 700px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner {
|
||||
border: 1px solid #E4E7ED !important;
|
||||
}
|
||||
|
||||
.tag-group {
|
||||
.el-tag {
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.el-tag + .el-tag {
|
||||
margin-left: 10px
|
||||
}
|
||||
</style>
|
128
sf-ui/src/views/FDS/publishList/components/addPack.vue
Normal file
128
sf-ui/src/views/FDS/publishList/components/addPack.vue
Normal file
@ -0,0 +1,128 @@
|
||||
<template>
|
||||
<el-dialog :modal-append-to-body="false" :title="title" v-bind="$attrs" width="700px"
|
||||
@close="onClose"
|
||||
@open="onOpen"
|
||||
v-on="$listeners"
|
||||
>
|
||||
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="90px"
|
||||
size="small"
|
||||
>
|
||||
<el-form-item label="安装包名称" prop="installpackName">
|
||||
<el-input
|
||||
v-model="queryParams.installpackName"
|
||||
clearable
|
||||
placeholder="请输入安装包名称"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-loading="loading" :data="dataList">
|
||||
<el-table-column align="center" label="安装包名称" prop="configId"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="版本号" prop="configName"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="安装包大小" prop="configName"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="适用系统" prop="configValue"/>
|
||||
<el-table-column align="center" label="状态" prop="configType">
|
||||
<template slot-scope="scopeA">
|
||||
<dict-tag :options="dict.type.sys_yes_no" :value="scopeA.row.type"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" class-name="small-padding fixed-width" label="操作" width="50">
|
||||
<template slot-scope="scope">
|
||||
<el-button circle icon="el-icon-plus" type="primary"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitAddForm()">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
|
||||
import { listConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: 'AddPack',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
title: '添加安装包',
|
||||
loading: true,
|
||||
configName: undefined,
|
||||
form: {},
|
||||
dataList: [],
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
// 白名单配置表单验证
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
installpackName: undefined
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
|
||||
/** 查询参数列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||
this.dataList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
}
|
||||
)
|
||||
},
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.dateRange = []
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
// 确定安装包
|
||||
submitAddForm() {
|
||||
|
||||
},
|
||||
reset() {
|
||||
this.form = {
|
||||
whiteListType: undefined,
|
||||
whiteListName: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.reset()
|
||||
this.closeModal()
|
||||
},
|
||||
closeModal() {
|
||||
this.$emit('close')
|
||||
},
|
||||
onOpen() {
|
||||
this.active = this.current
|
||||
this.key = ''
|
||||
},
|
||||
onClose() {
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -3,85 +3,61 @@
|
||||
<el-container>
|
||||
<el-header>
|
||||
<div>发布详情</div>
|
||||
<el-divider />
|
||||
<el-divider/>
|
||||
</el-header>
|
||||
<el-main>
|
||||
<div class="form-main">
|
||||
<el-form ref="form" :model="form" label-width="100px" size="mini">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="APP名称:"></el-form-item>
|
||||
<el-form-item label="上传类型:">安装包11111</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所选系统:">安装包1111.excel</el-form-item>
|
||||
<el-form-item label="安装包名称:">58.1kb</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="版本号:">安卓</el-form-item>
|
||||
<el-form-item label="子版本号:">登录模块</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="版本说明:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发布环境:">发布环境</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布策略:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="结果通知:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="强制更新:">说明说明</el-form-item>
|
||||
<el-form-item label="公开版:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="强制更新:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="下载验证:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="更新客群:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="有效期:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="下载地址:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="下载量:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="注册数:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="最后刷新:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布时间:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="创建人:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布状态:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发布日志:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="有效期:">说明说明</el-form-item>
|
||||
<el-form-item label="备注:">说明说明</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
@ -92,17 +68,12 @@
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'InstallationPackDetail',
|
||||
components: {
|
||||
},
|
||||
name: 'PublishDetail',
|
||||
dicts: ['sys_yes_no'],
|
||||
components: {},
|
||||
data() {
|
||||
|
||||
return {
|
||||
disabledFlag: true,
|
||||
selectValue: 'code',
|
||||
checkList: ['Android'],
|
||||
disabledCode: false,
|
||||
ruleFlag: null,
|
||||
ruleFlagList: null,
|
||||
list: {
|
||||
rule: {
|
||||
regularRule: false,
|
||||
@ -110,10 +81,9 @@ export default {
|
||||
},
|
||||
// headerOperations: [],
|
||||
packId: '', // 安装包ID
|
||||
grayFlag: JSON.parse(this.$route.query.params).list.grayFlag, // 发布类型: 0灰度 1正式
|
||||
pattern: JSON.parse(this.$route.query.params).list.pattern, //
|
||||
patternHint: JSON.parse(this.$route.query.params).list.patternHint,
|
||||
deployType: JSON.parse(this.$route.query.params).list.deployType, // 发布条件: 0白名单 1时间窗
|
||||
grayFlag: '0', // 发布类型: 0灰度 1正式
|
||||
upgradeMode: '0', //
|
||||
releaseDestType: '0', // 发布条件: 0白名单 1时间窗
|
||||
headerOperations: [// 自定义规则
|
||||
// {
|
||||
// 'scope': '', // 范围:region地区 platform平台
|
||||
@ -123,97 +93,52 @@ export default {
|
||||
// }
|
||||
],
|
||||
grayUserNum: '', // 灰度人数
|
||||
numType: '0',
|
||||
expiryTime: '', // 灰度结束时间
|
||||
desp: JSON.parse(this.$route.query.params).list.desp,
|
||||
desp: '',
|
||||
releaseRuleId: '', // 常用规则
|
||||
// deviceListId: '', // 设备白名单
|
||||
whiteListId: ''// 用户白名单id
|
||||
whiteListId: '',// 用户白名单id
|
||||
enableVerify: false, //是否开启下载验证
|
||||
imprint: '', //版本说明
|
||||
versionNumber: '',
|
||||
AppName: '', //APP名称
|
||||
platform: 'android' //系统
|
||||
},
|
||||
whiteOptions: [{
|
||||
value: 'allLeader',
|
||||
label: '所有领导'
|
||||
}, {
|
||||
value: 'allBanker',
|
||||
label: '所有行员'
|
||||
}, {
|
||||
value: 'allBusimess',
|
||||
label: '所有业务'
|
||||
}],
|
||||
releaseOptions: [],
|
||||
fileList: [],
|
||||
typeList: [],
|
||||
rules: {
|
||||
grayFlag: [
|
||||
{ required: true }
|
||||
],
|
||||
pattern: [
|
||||
{ required: true }
|
||||
],
|
||||
patternHint: [
|
||||
{ required: true }
|
||||
],
|
||||
deployType: [
|
||||
{ required: true }
|
||||
],
|
||||
whiteListId: [
|
||||
{ required: true }
|
||||
],
|
||||
expiryTime: [
|
||||
{ required: true }
|
||||
],
|
||||
grayUserNum: [
|
||||
{ required: true }
|
||||
]
|
||||
}
|
||||
// 显示搜索条件
|
||||
// 总条数
|
||||
packOpen: false,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
dataList: [],
|
||||
form: {}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if (JSON.parse(this.$route.query.params)) {
|
||||
const dataParams = JSON.parse(this.$route.query.params)
|
||||
dataParams.list.releaseRuleItemList = dataParams.list.releaseRuleItemList || []
|
||||
dataParams.list.releaseRuleResponseMode = dataParams.list.releaseRuleResponseMode || {}
|
||||
this.list = dataParams.list
|
||||
this.list.desp = this.list.desp || '无'
|
||||
this.list.whiteListIdName = this.list.whiteListIdName ? (this.list.whiteListType === '0' ? '用户' : '设备') + '/' + this.list.whiteListIdName : '无'
|
||||
if (this.list.releaseRuleResponseMode.id) {
|
||||
this.ruleFlag = true
|
||||
} else {
|
||||
this.ruleFlag = false
|
||||
}
|
||||
if (this.list.releaseRuleItemList.length === 0) {
|
||||
this.ruleFlagList = false
|
||||
} else {
|
||||
this.ruleFlagList = true
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
}
|
||||
methods: {}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container{
|
||||
.app-container {
|
||||
background: #ffffff;
|
||||
margin: 24px;
|
||||
}
|
||||
.form-main{
|
||||
width: 700px;
|
||||
|
||||
.form-main {
|
||||
width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.form-row {
|
||||
margin-top: 20px;
|
||||
}
|
||||
::v-deep .el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner{
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner {
|
||||
border: 1px solid #E4E7ED !important;
|
||||
}
|
||||
.custom-table {
|
||||
font-size: 12px;
|
||||
}
|
||||
.addRow {
|
||||
width:100px;
|
||||
}
|
||||
.remark-input {
|
||||
width: 400px;
|
||||
|
||||
.tag-group {
|
||||
.el-tag {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.el-tag + .el-tag {
|
||||
margin-left: 10px
|
||||
}
|
||||
</style>
|
@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
|
||||
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="90px" size="small">
|
||||
<el-form-item label="选择APP" prop="configName">
|
||||
<el-select v-model="queryParams.configType" placeholder="请选择APP" clearable>
|
||||
<el-select v-model="queryParams.configType" clearable placeholder="请选择APP">
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_yes_no"
|
||||
:key="dict.value"
|
||||
@ -14,8 +14,8 @@
|
||||
<el-form-item label="版本号" prop="version">
|
||||
<el-input
|
||||
v-model="queryParams.version"
|
||||
placeholder="请输入版本号"
|
||||
clearable
|
||||
placeholder="请输入版本号"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
@ -24,18 +24,16 @@
|
||||
<el-form-item label="公开时间">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
end-placeholder="结束日期"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
style="width: 240px"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="状态" prop="configType">
|
||||
<el-select v-model="queryParams.configType" placeholder="请选择状态" clearable>
|
||||
<el-select v-model="queryParams.configType" clearable placeholder="请选择状态">
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_yes_no"
|
||||
:key="dict.value"
|
||||
@ -45,7 +43,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -53,215 +51,174 @@
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
v-hasPermi="['system:config:add']"
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:config:add']"
|
||||
>新增</el-button>
|
||||
>新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
:disabled="multiple"
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="info"
|
||||
@click="handlePublish"
|
||||
>批量发布</el-button>
|
||||
>批量发布
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:config:add']"
|
||||
>批量删除</el-button>
|
||||
:disabled="multiple"
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="info"
|
||||
@click="handleDelete"
|
||||
>批量删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="APP" align="center" prop="configId" />
|
||||
<el-table-column label="文件类型" align="center" prop="configName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="版本号" align="center" prop="version" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="子版本号" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
||||
<el-table-column align="center" type="selection" width="55"/>
|
||||
<el-table-column align="center" label="APP" prop="configId"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="文件类型" prop="configName"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="版本号" prop="version"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="子版本号" prop="configValue"/>
|
||||
<el-table-column
|
||||
prop="platform"
|
||||
label="系统"
|
||||
min-width="80"
|
||||
> <template scope="scope">
|
||||
<div>{{ scope.row.platform === '0'?'安卓':'IOS' }}</div>
|
||||
prop="platform"
|
||||
>
|
||||
<template scope="scope">
|
||||
<div>{{ scope.row.platform === '0' ? '安卓' : 'IOS' }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="公开版" align="center" prop="createTime" width="180">
|
||||
<el-table-column align="center" label="公开版" prop="createTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="tagsView" class="drawer-switch" disabled/>
|
||||
<el-switch v-model="scope.row.tagsView" class="drawer-switch" disabled/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="强制更新" align="center" prop="createTime" width="180">
|
||||
<el-table-column align="center" label="强制更新" prop="createTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="tagsView" class="drawer-switch" disabled/>
|
||||
<el-switch v-model="scope.row.tagsView" class="drawer-switch" disabled/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="上传时间" align="center" prop="createTime" width="180">
|
||||
<el-table-column align="center" label="上传时间" prop="createTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="发布环境" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
||||
|
||||
<el-table-column label="发布状态" align="center" prop="configType">
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="发布环境" prop="configValue"/>
|
||||
<el-table-column align="center" label="发布状态" prop="configType">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.configType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="公开时间" align="center" prop="createTime" width="180">
|
||||
<el-table-column align="center" label="公开时间" prop="createTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="更新说明" align="center" prop="remark" :show-overflow-tooltip="true" />
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="更新说明" prop="remark"/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="二维码"
|
||||
min-width="80"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-popover
|
||||
v-if="scope.row.qrCode && scopeC.row.status !== '20'"
|
||||
ref="popver"
|
||||
trigger="click"
|
||||
width="200"
|
||||
|
||||
<el-image
|
||||
:preview-src-list="srcList"
|
||||
:src="url"
|
||||
style="width: 80px; height: 80px"
|
||||
>
|
||||
<div class="table-img">
|
||||
<img :src="'data:image/jpg;base64,'+ scope.row.qrCode">
|
||||
<p v-if="scopeC.row.verifyCode">密码:{{ scope.row.verifyCode }}</p>
|
||||
</div>
|
||||
<!-- <img slot="reference" src="@/assets/code.png" class="table-qr">-->
|
||||
</el-popover>
|
||||
<div v-else>-</div>
|
||||
</el-image>
|
||||
|
||||
<!-- <el-popover-->
|
||||
<!-- v-if="scope.row.qrCode && scopeC.row.status !== '20'"-->
|
||||
<!-- ref="popver"-->
|
||||
<!-- trigger="click"-->
|
||||
<!-- width="200"-->
|
||||
<!-- >-->
|
||||
<!-- <div class="table-img">-->
|
||||
<!-- <img :src="'data:image/jpg;base64,'+ scope.row.qrCode">-->
|
||||
<!-- <p v-if="scopeC.row.verifyCode">密码:{{ scope.row.verifyCode }}</p>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-popover>-->
|
||||
<!-- <div v-else>-</div>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<el-table-column align="center" class-name="small-padding fixed-width" label="操作" width="150">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>下架</el-button>
|
||||
<el-button
|
||||
icon="el-icon-bottom"
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
@click="handleDown(scope.row)"
|
||||
>下架
|
||||
</el-button>
|
||||
<el-button
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>详情</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>下载安装包</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleEdit(scope.row)"
|
||||
>修改
|
||||
</el-button>
|
||||
<el-dropdown size="mini"
|
||||
@command="(command) => handleCommand(command, scope.row)"
|
||||
>
|
||||
<el-button icon="el-icon-d-arrow-right" size="mini" type="text">更多</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item v-hasPermi="['system:user:resetPwd']" command="handleDetail"
|
||||
icon="el-icon-view"
|
||||
>详情
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-hasPermi="['system:user:edit']" command="handleDownload"
|
||||
icon="el-icon-download"
|
||||
>下载安装包
|
||||
</el-dropdown-item>
|
||||
|
||||
<el-dropdown-item v-hasPermi="['system:user:edit']" command="handleDelete"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:config:remove']"
|
||||
>删除</el-button>
|
||||
>删除
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 新增白名单弹出框 -->
|
||||
<el-dialog :title="title" :visible.sync="addOpen" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="白名单名称" prop="configName">
|
||||
<el-input v-model="form.configName" placeholder="请输入参数名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="白名单类型" prop="configKey">
|
||||
<el-input v-model="form.configKey" placeholder="请输入参数键名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm(1)">保 存</el-button>
|
||||
<el-button @click="cancel(1)">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
<!-- 白名单配置弹出框 -->
|
||||
<el-dialog :title="title" :visible.sync="configOpen" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="添加方式" prop="configName">
|
||||
<el-radio-group v-model="form.debug">
|
||||
<el-radio
|
||||
:key="1"
|
||||
:label="手动添加"
|
||||
>手动添加</el-radio>
|
||||
<el-radio
|
||||
:key="2"
|
||||
:label="批量添加"
|
||||
>批量添加</el-radio>
|
||||
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="白名单类型" prop="configKey">
|
||||
<el-input v-model="form.configKey" placeholder="请选择白名单类型" />
|
||||
</el-form-item>
|
||||
<el-form-item label="白名单ID" prop="configName">
|
||||
<el-input v-model="form.configName" placeholder="输入用户ID" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm(2)">保 存</el-button>
|
||||
<el-button @click="cancel(2)">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listConfig, getConfig, delConfig, addConfig, updateConfig, refreshCache } from "@/api/system/config";
|
||||
import { delConfig, listConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: "Config",
|
||||
name: 'PublishList',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
return {
|
||||
@ -280,11 +237,14 @@ export default {
|
||||
// 参数表格数据
|
||||
configList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
title: '',
|
||||
// 是否显示新增白名单弹出框
|
||||
addOpen: false,
|
||||
// 是否显示白名单配置弹出框
|
||||
configOpen:false,
|
||||
configOpen: false,
|
||||
|
||||
packOpen: false,
|
||||
|
||||
// 日期范围
|
||||
dateRange: [],
|
||||
// 查询参数
|
||||
@ -297,42 +257,25 @@ export default {
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
configName: [
|
||||
{ required: true, message: "参数名称不能为空", trigger: "blur" }
|
||||
],
|
||||
configKey: [
|
||||
{ required: true, message: "参数键名不能为空", trigger: "blur" }
|
||||
],
|
||||
configValue: [
|
||||
{ required: true, message: "参数键值不能为空", trigger: "blur" }
|
||||
url: require('@/assets/images/code.png'),
|
||||
srcList: [
|
||||
require('@/assets/images/code.png')
|
||||
]
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询参数列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
this.loading = true
|
||||
listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||
this.configList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
this.configList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
}
|
||||
);
|
||||
},
|
||||
// 取消按钮
|
||||
cancel(type) {
|
||||
if (type===1){
|
||||
this.addOpen= false
|
||||
}else {
|
||||
this.configOpen = false
|
||||
}
|
||||
this.reset();
|
||||
)
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
@ -341,89 +284,86 @@ export default {
|
||||
configName: undefined,
|
||||
configKey: undefined,
|
||||
configValue: undefined,
|
||||
configType: "Y",
|
||||
configType: 'Y',
|
||||
remark: undefined
|
||||
};
|
||||
this.resetForm("form");
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.dateRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
this.dateRange = []
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
// this.addOpen = true;
|
||||
// this.title = "新增白名单";
|
||||
const type= 'add'
|
||||
this.$router.push("publishList/add" + type);
|
||||
|
||||
this.reset()
|
||||
// 使用ES6+语法
|
||||
this.reset()
|
||||
this.$router.push({
|
||||
path: 'publist/add'
|
||||
})
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.configId)
|
||||
this.single = selection.length!=1
|
||||
this.single = selection.length != 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const configId = row.configId || this.ids
|
||||
getConfig(configId).then(response => {
|
||||
this.form = response.data;
|
||||
this.addOpen = true;
|
||||
this.title = "修改白名单";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm: function() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.configId != undefined) {
|
||||
updateConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.addOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.addOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const configIds = row.configId || this.ids;
|
||||
this.$modal.confirm('是否确认删除参数编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
// /** 导出按钮操作 */
|
||||
// handleExport() {
|
||||
// this.download('system/config/export', {
|
||||
// ...this.queryParams
|
||||
// }, `config_${new Date().getTime()}.xlsx`)
|
||||
// },
|
||||
// /** 刷新缓存按钮操作 */
|
||||
// handleRefreshCache() {
|
||||
// refreshCache().then(() => {
|
||||
// this.$modal.msgSuccess("刷新成功");
|
||||
// });
|
||||
// }
|
||||
async handleDelete(row) {
|
||||
const configIds = row.configId || this.ids
|
||||
try {
|
||||
await this.$modal.confirm('是否确认删除参数编号为"' + configIds + '"的数据项?')
|
||||
await delConfig(configIds)
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
} catch (error) {
|
||||
console.error('删除失败', error)
|
||||
// 可以添加更多的错误处理逻辑,如用户提示等
|
||||
}
|
||||
};
|
||||
},
|
||||
/**查看详情*/
|
||||
handleDetail() {
|
||||
this.$router.push({
|
||||
path: 'publish/detail'
|
||||
})
|
||||
},
|
||||
/**下载安装包*/
|
||||
handleDownload() {
|
||||
|
||||
},
|
||||
/**********编辑*******/
|
||||
handleEdit() {
|
||||
|
||||
},
|
||||
/** 发布操作*/
|
||||
handlePublish() {
|
||||
},
|
||||
// 更多操作触发
|
||||
handleCommand(command, row) {
|
||||
switch (command) {
|
||||
case 'handleDetail':
|
||||
this.handleDetail(row)
|
||||
break
|
||||
case 'handleDownload':
|
||||
this.handleDownload(row)
|
||||
break
|
||||
|
||||
case 'handleDelete':
|
||||
this.handleDelete(row)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -1,398 +0,0 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-container>
|
||||
<el-header>
|
||||
<div>新增文件</div>
|
||||
<el-divider />
|
||||
</el-header>
|
||||
<el-main>
|
||||
<div class="form-main">
|
||||
<el-form ref="formAdd" v-loading="$store.state.app.isLoading" :model="list" :label-width="'120px'" :rules="rules">
|
||||
<el-form-item label="APP名称" prop="AppName">
|
||||
<el-input v-model="list.AppName" placeholder="输入APP名称" />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="上传类型" prop="">
|
||||
<el-input v-model="list.AppName" placeholder="输入APP名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="发布类型" prop="grayFlag">
|
||||
<el-radio v-model="list.grayFlag" label="0">灰度</el-radio>
|
||||
<el-radio v-model="list.grayFlag" label="1">正式</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item label="升级模式" prop="upgradeMode">
|
||||
<el-radio v-model="list.upgradeMode" label="0">非强制升级</el-radio>
|
||||
<el-radio v-model="list.upgradeMode" label="1">强制升级</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item label="升级描述" prop="upgradeDesp">
|
||||
<el-input v-model="list.upgradeDesp" maxlength="50" show-word-limit class="remark-input" type="textarea" placeholder="请输入升级描述" />
|
||||
</el-form-item>
|
||||
<template v-if="list.grayFlag =='0'">
|
||||
<el-form-item label="发布条件" prop="releaseDestType">
|
||||
<el-radio v-model="list.releaseDestType" label="0">白名单</el-radio>
|
||||
<el-radio v-model="list.releaseDestType" label="1">时间窗</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="list.releaseDestType =='0'" label="白名单" prop="whiteListId">
|
||||
<template>
|
||||
<el-cascader v-model="list.whiteListId" :options="whiteOptions" :show-all-levels="false" clearable />
|
||||
</template>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="版本号" prop="versionNumber">
|
||||
<el-input v-model="list.versionNumber" maxlength="500" show-word-limit class="remark-input" placeholder="输入版本号" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="版本说明">
|
||||
<el-input v-model="list.imprint" maxlength="500" show-word-limit class="remark-input" type="textarea" placeholder="输入版本描述" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发布环境" prop="releaseDestType">
|
||||
<el-radio v-model="list.releaseDestType" label="0">开发环境</el-radio>
|
||||
<el-radio v-model="list.releaseDestType" label="1">测试发布</el-radio>
|
||||
<el-radio v-model="list.releaseDestType" label="2">生产发布</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布策略" prop="releaseDestType">
|
||||
<el-radio v-model="list.releaseDestType" label="0">灰度发布</el-radio>
|
||||
<el-radio v-model="list.releaseDestType" label="1">全量发布</el-radio>
|
||||
<el-radio v-model="list.releaseDestType" label="2">回滚发布</el-radio>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="list.releaseDestType =='1'" label="结果通知">
|
||||
<el-switch
|
||||
v-model="list.enableVerify"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="list.releaseDestType =='1'" label="强制更新">
|
||||
<el-switch
|
||||
v-model="list.enableVerify"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="list.releaseDestType =='1'" label="公开版">
|
||||
<el-switch
|
||||
v-model="list.enableVerify"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="list.releaseDestType =='1'" label="下载验证">
|
||||
<span slot="label">
|
||||
下载验证
|
||||
<el-tooltip class="item-tooltip" effect="dark" content="当验证开关开启时,为发布包生成下载二维码的同时,也会生成一个6位验证码,扫描二维码后需经过验证码才可下载发布." placement="right">
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<el-switch
|
||||
v-model="list.enableVerify"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="list.releaseDestType =='1'" label="更新客群">
|
||||
<el-radio v-model="list.numType" label="0">白名单客户</el-radio>
|
||||
<el-radio v-model="list.numType" label="1">普通客户</el-radio>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="list.releaseDestType =='1'" label="有效期" prop="expiryTime">
|
||||
<template>
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
v-model="list.expiryTime"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
></el-date-picker>
|
||||
</div>
|
||||
</template>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="desp">
|
||||
<el-input v-model="list.desp" maxlength="50" show-word-limit class="remark-input" type="textarea" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
// import { getWhiteList, getReleaseRuleList, getDictionaryList, getInstallTaskAdd, getTypeList } from '@/api/FDS'
|
||||
export default {
|
||||
name: 'InstallationAdd',
|
||||
components: {
|
||||
},
|
||||
data() {
|
||||
var checkHeader = (rule, value, callback) => {
|
||||
if (this.list.rule.customRule) {
|
||||
value.forEach(ele => {
|
||||
for (const key in ele) {
|
||||
if (Object.hasOwnProperty.call(ele, key)) {
|
||||
const item = ele[key]
|
||||
if (!item && key !== 'desp') {
|
||||
return callback(new Error('请输入自定义规则必填项'))
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
callback()
|
||||
}
|
||||
var checkRadix = (rule, value, callback) => {
|
||||
if (this.list.rule.regularRule && !value) {
|
||||
return callback(new Error('请选择常用规则'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
return {
|
||||
selectValue: 'code',
|
||||
checkList: ['Android'],
|
||||
disabledCode: false,
|
||||
list: {
|
||||
rule: {
|
||||
regularRule: false,
|
||||
customRule: false
|
||||
},
|
||||
// headerOperations: [],
|
||||
packId: '', // 安装包ID
|
||||
grayFlag: '0', // 发布类型: 0灰度 1正式
|
||||
upgradeMode: '0', //
|
||||
releaseDestType: '0', // 发布条件: 0白名单 1时间窗
|
||||
headerOperations: [// 自定义规则
|
||||
// {
|
||||
// 'scope': '', // 范围:region地区 platform平台
|
||||
// 'inclued': '', // 是否包含 1包含 2不包含
|
||||
// 'condition': '', // 发布条件
|
||||
// 'desp': ''// 备注
|
||||
// }
|
||||
],
|
||||
grayUserNum: '', // 灰度人数
|
||||
numType: '0',
|
||||
expiryTime: '', // 灰度结束时间
|
||||
desp: '',
|
||||
releaseRuleId: '', // 常用规则
|
||||
// deviceListId: '', // 设备白名单
|
||||
whiteListId: '',// 用户白名单id
|
||||
enableVerify:false, //是否开启下载验证
|
||||
imprint:'', //版本说明
|
||||
versionNumber:'',
|
||||
AppName:'', //APP名称
|
||||
},
|
||||
whiteOptions: [],
|
||||
releaseOptions: [],
|
||||
fileList: [],
|
||||
typeList: [],
|
||||
rules: {
|
||||
headerOperations: [
|
||||
{ validator: checkHeader, trigger: 'blur' }
|
||||
],
|
||||
releaseRuleId: [
|
||||
{ validator: checkRadix, trigger: 'blur' }
|
||||
],
|
||||
grayFlag: [
|
||||
{ required: true }
|
||||
],
|
||||
upgradeMode: [
|
||||
{ required: true }
|
||||
],
|
||||
upgradeDesp: [
|
||||
{ required: true, message: '请输入升级描述', trigger: 'change' }
|
||||
],
|
||||
releaseDestType: [
|
||||
{ required: true }
|
||||
],
|
||||
whiteListId: [
|
||||
{ required: true, message: '请选择白名单', trigger: 'change' }
|
||||
],
|
||||
expiryTime: [
|
||||
{ required: true, message: '请选择发布时间', trigger: 'blur' }
|
||||
],
|
||||
grayUserNum: [
|
||||
{ required: true, message: '请输入灰度人数', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
},
|
||||
watch: {
|
||||
'list.rule.regularRule'(newR, oldR) { // 常用规则
|
||||
if (this.list.rule.customRule && newR) {
|
||||
this.list.rule.regularRule = true
|
||||
this.list.rule.customRule = false
|
||||
}
|
||||
this.list.releaseRuleId = newR ? this.list.releaseRuleId : ''
|
||||
},
|
||||
'list.rule.customRule'(newC, oldC) {
|
||||
if (this.list.rule.regularRule && newC) {
|
||||
this.list.rule.customRule = true
|
||||
this.list.rule.regularRule = false
|
||||
}
|
||||
if (newC && this.list.headerOperations.length < 1) {
|
||||
this.addHeaderOption()
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
beforeMount() {
|
||||
this.whiteOptions = [{
|
||||
value: 'user',
|
||||
label: '用户',
|
||||
children: []
|
||||
},
|
||||
{
|
||||
value: 'device',
|
||||
label: '设备',
|
||||
children: []
|
||||
}]
|
||||
// getTypeList({
|
||||
// 'beginPage': '1',
|
||||
// 'pageSize': '999'
|
||||
// }).then(res => {
|
||||
// this.typeList = res.context.list
|
||||
// this.typeList.forEach(res => {
|
||||
// res.platform = this.list.platformName
|
||||
// })
|
||||
// console.log(275, this.typeList)
|
||||
// })
|
||||
// getWhiteList({ type: 0 }).then(res => {
|
||||
// if (res.code === '00') {
|
||||
// const list = res.context.list
|
||||
// list.forEach(i => {
|
||||
// this.whiteOptions[0].children.push({
|
||||
// value: i.id,
|
||||
// label: i.name
|
||||
// })
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
// getWhiteList({ type: 1 }).then(res => {
|
||||
// if (res.code === '00') {
|
||||
// const list = res.context.list
|
||||
// list.forEach(i => {
|
||||
// this.whiteOptions[1].children.push({
|
||||
// value: i.id,
|
||||
// label: i.name
|
||||
// })
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
// getReleaseRuleList({}).then(res => {
|
||||
// if (res.code === '00') {
|
||||
// const list = res.context.list
|
||||
// list.forEach(i => {
|
||||
// this.releaseOptions.push({
|
||||
// value: i.id,
|
||||
// label: i.name
|
||||
// })
|
||||
// console.log(this.releaseOptions)
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
},
|
||||
mounted() {
|
||||
if (this.$route.query.data) {
|
||||
const params = JSON.parse(this.$route.query.data)
|
||||
this.list.packId = params.id
|
||||
this.list.version = params.version
|
||||
this.list.platformName = params.platform === '0' ? 'Android' : 'IOS'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
addHeaderOption() {
|
||||
this.list.headerOperations.push({
|
||||
'type': '',
|
||||
'operType': '',
|
||||
'value': '',
|
||||
'dictionaryList': []
|
||||
// 'desp': ''
|
||||
})
|
||||
},
|
||||
deleteHeaderOption(index) {
|
||||
this.list.headerOperations.splice(index, 1)
|
||||
},
|
||||
dictionaryTypeChange(index, value) {
|
||||
const params = { type: value }
|
||||
if (value !== 'city') {
|
||||
params.notPlatform = this.list.platformName === '0' ? 'IOS' : 'Android'
|
||||
}
|
||||
// getDictionaryList(params).then(res => {
|
||||
// if (res.code === '00') {
|
||||
// this.list.headerOperations[index].dictionaryList = res.context.list
|
||||
// }
|
||||
// })
|
||||
},
|
||||
addNew() {
|
||||
console.log(this.list)
|
||||
const params = {}
|
||||
params.grayFlag = this.list.grayFlag
|
||||
params.pattern = this.list.upgradeMode
|
||||
params.patternHint = this.list.upgradeDesp
|
||||
params.desp = this.list.desp
|
||||
params.packId = this.list.packId
|
||||
if (this.list.grayFlag === '0') {
|
||||
params.deployType = this.list.releaseDestType
|
||||
params.desp = this.list.desp
|
||||
if (this.list.rule.regularRule) {
|
||||
params.releaseRuleId = this.list.releaseRuleId
|
||||
}
|
||||
if (this.list.rule.customRule) {
|
||||
params.releaseRuleItemList = this.list.headerOperations
|
||||
}
|
||||
if (this.list.releaseDestType === '0') { // 灰度白名单
|
||||
params.whiteListId = this.list.whiteListId[this.list.whiteListId.length - 1]
|
||||
}
|
||||
if (this.list.releaseDestType === '1') { // 灰度时间窗
|
||||
if (this.list.numType === '1') {
|
||||
params.grayUserNum = this.list.grayUserNum
|
||||
}
|
||||
params.expiryTime = this.list.expiryTime
|
||||
}
|
||||
}
|
||||
this.$refs.formAdd.validate((valid) => {
|
||||
if (valid) {
|
||||
// getInstallTaskAdd(params).then(res => {
|
||||
// if (res.code === '00') {
|
||||
// this.$message({
|
||||
// message: '新增发布任务成功!',
|
||||
// type: 'success'
|
||||
// })
|
||||
// this.$router.go(-1)
|
||||
// }
|
||||
// })
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container{
|
||||
background: #ffffff;
|
||||
margin: 24px;
|
||||
}
|
||||
.form-main{
|
||||
width: 700px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.form-row {
|
||||
margin-top: 20px;
|
||||
}
|
||||
::v-deep .el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner{
|
||||
border: 1px solid #E4E7ED !important;
|
||||
}
|
||||
|
||||
.custom-table {
|
||||
font-size: 12px;
|
||||
}
|
||||
.addRow {
|
||||
width:100px;
|
||||
}
|
||||
.remark-input {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
</style>
|
123
sf-ui/src/views/FDS/whiteListManagement/add.vue
Normal file
123
sf-ui/src/views/FDS/whiteListManagement/add.vue
Normal file
@ -0,0 +1,123 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-container>
|
||||
<el-header>
|
||||
<div>新增文件</div>
|
||||
<el-divider/>
|
||||
</el-header>
|
||||
<el-main>
|
||||
<div class="form-main">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
||||
<el-form-item label="白名单名称" prop="whiteListName">
|
||||
<el-input v-model="form.whiteListName" placeholder="请输入白名单名称"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="白名单类型" prop="whiteListType">
|
||||
<el-select v-model="form.whiteListType" clearable placeholder="请选择白名单类型">
|
||||
<el-option label="白名单人员" value="0"/>
|
||||
<el-option label="白名单设备" value="1"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="form.remark" placeholder="请输入内容" type="textarea"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<el-button type="primary" @click="submitAddForm()">保 存</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
import { addConfig, updateConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: 'WhiteAdd',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
|
||||
return {
|
||||
form: {},
|
||||
tokenId: '',
|
||||
// 文件存放的路径
|
||||
fileList: [],
|
||||
rules: {
|
||||
configName: [
|
||||
{ required: true, message: '上传方式不能为空', trigger: 'change' }
|
||||
],
|
||||
configKey: [
|
||||
{ required: true, message: '安装包名称不能为空', trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
activeTabs: '1'
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
reset() {
|
||||
this.form = {
|
||||
whiteListType: undefined,
|
||||
whiteListName: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitAddForm: function() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.configId != undefined) {
|
||||
updateConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess('修改成功')
|
||||
})
|
||||
} else {
|
||||
addConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess('新增成功')
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
cancel() {
|
||||
this.history.back()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
background: #ffffff;
|
||||
margin: 24px;
|
||||
}
|
||||
|
||||
.form-main {
|
||||
width: 700px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner {
|
||||
border: 1px solid #E4E7ED !important;
|
||||
}
|
||||
|
||||
.tag-group {
|
||||
.el-tag {
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.el-tag + .el-tag {
|
||||
margin-left: 10px
|
||||
}
|
||||
|
||||
.page-footer {
|
||||
margin: 0 auto;
|
||||
width: 700px;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
194
sf-ui/src/views/FDS/whiteListManagement/addConfig.vue
Normal file
194
sf-ui/src/views/FDS/whiteListManagement/addConfig.vue
Normal file
@ -0,0 +1,194 @@
|
||||
、
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-container>
|
||||
<el-header>
|
||||
<div>白名单配置</div>
|
||||
<el-divider/>
|
||||
</el-header>
|
||||
<el-main>
|
||||
<div class="form-main">
|
||||
<el-form ref="configForm" :model="configForm" :rules="configRules" label-width="120px">
|
||||
<el-form-item label="添加方式" prop="configName">
|
||||
<el-radio-group v-model="configForm.addMode">
|
||||
<el-radio
|
||||
:label="1"
|
||||
>手动添加
|
||||
</el-radio>
|
||||
<el-radio
|
||||
:label="2"
|
||||
>批量添加
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="白名单类型" prop="whiteListType">
|
||||
<el-select v-model="configForm.whiteListType" clearable placeholder="请选择白名单类型">
|
||||
<el-option label="白名单人员" value="0"/>
|
||||
<el-option label="白名单设备" value="1"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<template v-if="configForm.addMode==1">
|
||||
<el-form-item v-if="configForm.whiteListType==0" label="白名单电话" prop="phone">
|
||||
<el-input v-model="configForm.phone" placeholder="请输入电话号码"/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="configForm.whiteListType==0" label="姓名">
|
||||
<el-input v-model="configForm.name" placeholder="请输入姓名"/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="configForm.whiteListType==1" label="白名单设备">
|
||||
<el-input v-model="configForm.equepid" placeholder="请输入设备信息" type="textarea"/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item v-else-if="configForm.addMode==2" label="白名单文件">
|
||||
<el-upload
|
||||
ref="whiteListFiles"
|
||||
:auto-upload="true"
|
||||
:before-remove="beforeRemove"
|
||||
:before-upload="beforeAvatarUpload"
|
||||
:file-list="fileList"
|
||||
:headers="{tokenId: tokenId}"
|
||||
:multiple="false"
|
||||
:on-success="handleSuccess"
|
||||
accept=".txt"
|
||||
action="https://jsonplaceholder.typicode.com/posts/"
|
||||
class="upload"
|
||||
>
|
||||
<el-button slot="trigger" size="small" type="primary">上传文件</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="configForm.remark" placeholder="请输入备注" type="textarea"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<el-button type="primary" @click="submitAddForm()">保 存</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-main>
|
||||
<!--安装包弹窗-->
|
||||
</el-container>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
import { addConfig, updateConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: 'WhiteAddConfig',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
|
||||
return {
|
||||
form: {},
|
||||
tokenId: '',
|
||||
// 文件存放的路径
|
||||
fileList: [],
|
||||
configForm: {
|
||||
addMode: 1,
|
||||
whiteListType: '',
|
||||
whitelistIds: '',
|
||||
remark: '',
|
||||
equepid: ''
|
||||
},
|
||||
configRules: {
|
||||
addMode: [
|
||||
{ required: true, message: '添加方式不能为空', trigger: 'change' }
|
||||
],
|
||||
whiteListType: [
|
||||
{ required: true, message: '白名单类型不能为空', trigger: 'change' }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
reset() {
|
||||
this.form = {
|
||||
whiteListType: undefined,
|
||||
whiteListName: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitAddForm: function() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.configId != undefined) {
|
||||
updateConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess('修改成功')
|
||||
})
|
||||
} else {
|
||||
addConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess('新增成功')
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/** 在上传之前进行校验 */
|
||||
beforeAvatarUpload(file) {
|
||||
const formatList = file.name.split('.')
|
||||
const isFormat = file.type === 'text/plain' || formatList[formatList.length - 1] === 'txt'
|
||||
if (!isFormat) {
|
||||
this.$message.error(`上传格式只能是名称后缀为.txt的文本文件!`)
|
||||
}
|
||||
const isLt2M = file.size / 1024 / 1024 < 5
|
||||
if (!isLt2M) {
|
||||
this.$message.error(`上传文件大小不能超过5M!`)
|
||||
}
|
||||
return isLt2M && isFormat
|
||||
},
|
||||
/** 上传文件 */
|
||||
handleSuccess(file) {
|
||||
this.fileList = []
|
||||
const nameList = file.context.path.split('/')
|
||||
this.fileList.push({
|
||||
name: file.context.name || nameList[nameList.length - 1],
|
||||
url: file.context.path
|
||||
})
|
||||
this.addFormData.path = file.context.path
|
||||
},
|
||||
beforeRemove(files, filesList) {
|
||||
return this.$confirm(`确定要移除${files.name}?`)
|
||||
},
|
||||
cancel() {
|
||||
this.history.back()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
background: #ffffff;
|
||||
margin: 24px;
|
||||
}
|
||||
|
||||
.form-main {
|
||||
width: 700px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner, .el-textarea.is-disabled .el-textarea__inner {
|
||||
border: 1px solid #E4E7ED !important;
|
||||
}
|
||||
|
||||
.tag-group {
|
||||
.el-tag {
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.el-tag + .el-tag {
|
||||
margin-left: 10px
|
||||
}
|
||||
|
||||
.page-footer {
|
||||
margin: 0 auto;
|
||||
width: 700px;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,95 @@
|
||||
<template>
|
||||
|
||||
<el-dialog :modal-append-to-body="false" :title="title" v-bind="$attrs" width="500px"
|
||||
@close="onClose"
|
||||
@open="onOpen"
|
||||
v-on="$listeners"
|
||||
>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="form.whiteListName" placeholder="请输入名称"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="电话" prop="phoneNumber">
|
||||
<el-input v-model="form.phoneNumber" placeholder="请输入电话"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitAddForm()">保 存</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
import { addConfig, updateConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: 'EditWhiteList',
|
||||
dicts: ['sys_yes_no'],
|
||||
|
||||
props: {
|
||||
// 图片数量限制
|
||||
title: {
|
||||
type: String,
|
||||
default: '添加白名单'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
configName: undefined,
|
||||
form: {},
|
||||
// 白名单配置表单验证
|
||||
rules: {
|
||||
whiteListName: [
|
||||
{ required: true, message: '名称不能为空', trigger: 'blur' }
|
||||
],
|
||||
whiteListType: [
|
||||
{ required: true, message: '白名单类型不能为空', trigger: 'change' }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
methods: {
|
||||
/** 提交按钮 */
|
||||
submitAddForm: function() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.configId != undefined) {
|
||||
updateConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess('修改成功')
|
||||
this.closeModal()
|
||||
})
|
||||
} else {
|
||||
addConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess('新增成功')
|
||||
this.closeModal()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
reset() {
|
||||
this.form = {
|
||||
whiteListType: undefined,
|
||||
whiteListName: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.reset()
|
||||
this.closeModal()
|
||||
},
|
||||
closeModal() {
|
||||
this.$emit('close')
|
||||
},
|
||||
onOpen() {
|
||||
this.active = this.current
|
||||
this.key = ''
|
||||
},
|
||||
onClose() {
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
220
sf-ui/src/views/FDS/whiteListManagement/detail.vue
Normal file
220
sf-ui/src/views/FDS/whiteListManagement/detail.vue
Normal file
@ -0,0 +1,220 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="90px" size="small">
|
||||
<el-form-item label="白名单信息" prop="phoneNumber">
|
||||
<el-input
|
||||
v-model="queryParams.phoneNumber"
|
||||
clearable
|
||||
placeholder="请输入电话号码"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
v-hasPermi="['system:config:delete']"
|
||||
:disabled="multiple"
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="info"
|
||||
@click="handleDelete"
|
||||
>批量删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
||||
<el-table-column align="center" type="selection" width="55"/>
|
||||
<el-table-column align="center" label="姓名" prop="configId"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="电话" prop="configName"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="添加时间" prop="configKey"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="备注" prop="configValue"/>
|
||||
<el-table-column align="center" class-name="small-padding fixed-width" label="操作" width="250">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-hasPermi="['system:config:edit']"
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleEdit(scope.row)"
|
||||
>编辑
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-hasPermi="['system:config:delete']"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { delConfig, getConfig, listConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: 'WhiteListDetail',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 参数表格数据
|
||||
|
||||
dataList: [],
|
||||
|
||||
configList: [],
|
||||
// 弹出层标题
|
||||
title: '',
|
||||
// 是否显示安装包上传弹出框
|
||||
addOpen: false,
|
||||
// 是否显示安装包详情弹出框
|
||||
detailOpen: false,
|
||||
tokenId: '',
|
||||
// 日期范围
|
||||
dateRange: [],
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
phoneNumber: undefined
|
||||
},
|
||||
// 表单参数
|
||||
form: {}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询参数列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||
this.dataList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
}
|
||||
)
|
||||
},
|
||||
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
configId: undefined,
|
||||
configName: undefined,
|
||||
configKey: undefined,
|
||||
configValue: undefined,
|
||||
configType: 'Y',
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.dateRange = []
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.addOpen = true
|
||||
this.title = '上传安装包'
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.configId)
|
||||
this.single = selection.length != 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认删除编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
|
||||
/** 修改按钮操作 */
|
||||
handleEdit(row) {
|
||||
this.reset()
|
||||
const configId = row.configId || this.ids
|
||||
getConfig(configId).then(response => {
|
||||
this.form = response.data
|
||||
this.addOpen = true
|
||||
this.title = '修改安装包'
|
||||
})
|
||||
},
|
||||
/** 查看详情弹窗 **/
|
||||
handleDetail() {
|
||||
this.detailOpen = true
|
||||
},
|
||||
|
||||
/** 切换TAB触发的事件 */
|
||||
handleClickTabs() {
|
||||
this.getList()
|
||||
},
|
||||
|
||||
/** 下载按钮 */
|
||||
handleDownload(row) {
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认下载编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('下载成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
/** 关闭新增弹出框*/
|
||||
closeAdd() {
|
||||
this.addOpen = false
|
||||
this.getList()
|
||||
},
|
||||
closeAddConfig() {
|
||||
this.detailOpen = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
219
sf-ui/src/views/FDS/whiteListManagement/equepDetail.vue
Normal file
219
sf-ui/src/views/FDS/whiteListManagement/equepDetail.vue
Normal file
@ -0,0 +1,219 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="90px" size="small">
|
||||
<el-form-item label="白名单信息" prop="phoneNumber">
|
||||
<el-input
|
||||
v-model="queryParams.phoneNumber"
|
||||
clearable
|
||||
placeholder="请输入设备号"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
v-hasPermi="['system:config:delete']"
|
||||
:disabled="multiple"
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="info"
|
||||
@click="handleDelete"
|
||||
>批量删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
||||
<el-table-column align="center" type="selection" width="55"/>
|
||||
<el-table-column align="center" label="设备号" prop="configId"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="添加时间" prop="configName"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="备注" prop="configValue"/>
|
||||
<el-table-column align="center" class-name="small-padding fixed-width" label="操作" width="250">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-hasPermi="['system:config:edit']"
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleEdit(scope.row)"
|
||||
>编辑
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-hasPermi="['system:config:delete']"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { delConfig, getConfig, listConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: 'WhiteListEquepDetail',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 参数表格数据
|
||||
|
||||
dataList: [],
|
||||
|
||||
configList: [],
|
||||
// 弹出层标题
|
||||
title: '',
|
||||
// 是否显示安装包上传弹出框
|
||||
addOpen: false,
|
||||
// 是否显示安装包详情弹出框
|
||||
detailOpen: false,
|
||||
tokenId: '',
|
||||
// 日期范围
|
||||
dateRange: [],
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
phoneNumber: undefined
|
||||
},
|
||||
// 表单参数
|
||||
form: {}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询参数列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||
this.dataList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
}
|
||||
)
|
||||
},
|
||||
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
configId: undefined,
|
||||
configName: undefined,
|
||||
configKey: undefined,
|
||||
configValue: undefined,
|
||||
configType: 'Y',
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.dateRange = []
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.addOpen = true
|
||||
this.title = '上传安装包'
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.configId)
|
||||
this.single = selection.length != 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认删除编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
|
||||
/** 修改按钮操作 */
|
||||
handleEdit(row) {
|
||||
this.reset()
|
||||
const configId = row.configId || this.ids
|
||||
getConfig(configId).then(response => {
|
||||
this.form = response.data
|
||||
this.addOpen = true
|
||||
this.title = '修改安装包'
|
||||
})
|
||||
},
|
||||
/** 查看详情弹窗 **/
|
||||
handleDetail() {
|
||||
this.detailOpen = true
|
||||
},
|
||||
|
||||
/** 切换TAB触发的事件 */
|
||||
handleClickTabs() {
|
||||
this.getList()
|
||||
},
|
||||
|
||||
/** 下载按钮 */
|
||||
handleDownload(row) {
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认下载编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('下载成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
/** 关闭新增弹出框*/
|
||||
closeAdd() {
|
||||
this.addOpen = false
|
||||
this.getList()
|
||||
},
|
||||
closeAddConfig() {
|
||||
this.detailOpen = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -1,11 +1,11 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
|
||||
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="90px" size="small">
|
||||
<el-form-item label="名单类型" prop="whiteListType">
|
||||
<el-input
|
||||
v-model="queryParams.whiteListType"
|
||||
placeholder="请输入名单类型"
|
||||
clearable
|
||||
placeholder="请输入名单类型"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
@ -13,8 +13,8 @@
|
||||
<el-form-item label="名称" prop="whiteListName">
|
||||
<el-input
|
||||
v-model="queryParams.whiteListName"
|
||||
placeholder="请输入名称"
|
||||
clearable
|
||||
placeholder="请输入名称"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
@ -22,16 +22,16 @@
|
||||
<el-form-item label="创建时间">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
end-placeholder="结束日期"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
style="width: 240px"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="configType">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-select v-model="queryParams.status" clearable placeholder="请选择状态">
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_yes_no"
|
||||
:key="dict.value"
|
||||
@ -41,7 +41,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -49,162 +49,128 @@
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:config:add']"
|
||||
>新增</el-button>
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="info"
|
||||
@click="handlePublish"
|
||||
>批量发布</el-button>
|
||||
>批量发布
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
icon="el-icon-plus"
|
||||
plain
|
||||
size="mini"
|
||||
type="info"
|
||||
@click="handleDelete"
|
||||
>批量删除</el-button>
|
||||
>批量删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="白名单名称" align="center" prop="configId" />
|
||||
<el-table-column label="说明" align="center" prop="configName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="白名单类型" align="center" prop="configKey" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="数量" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||
<el-table-column align="center" type="selection" width="55"/>
|
||||
<el-table-column align="center" label="白名单名称" prop="configId"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="说明" prop="configName"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="白名单类型" prop="configKey"/>
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="数量" prop="configValue"/>
|
||||
<el-table-column align="center" label="创建时间" prop="createTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="configType">
|
||||
<el-table-column align="center" label="状态" prop="configType">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.configType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
|
||||
<el-table-column :show-overflow-tooltip="true" align="center" label="备注" prop="remark"/>
|
||||
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<el-table-column align="center" class-name="small-padding fixed-width" label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>下架</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleDown(scope.row)"
|
||||
>下架
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>预览</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handlePublish(scope.row)"
|
||||
>发布
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>发布</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleConfig(scope.row)"
|
||||
>名单配置
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-hasPermi="['system:config:edit']"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:config:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
@click="handleEdit(scope.row)"
|
||||
>修改
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-hasPermi="['system:config:edit']"
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleDetail(scope.row)"
|
||||
>详情
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-hasPermi="['system:config:remove']"
|
||||
>删除</el-button>
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 新增白名单弹出框 -->
|
||||
<el-dialog :title="title" :visible.sync="addOpen" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="白名单名称" prop="configName">
|
||||
<el-input v-model="form.whiteListName" placeholder="请输入白名单名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="白名单类型" prop="configKey">
|
||||
<el-input v-model="form.whiteListType" placeholder="请选择白名单类型" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitAddForm()">保 存</el-button>
|
||||
<el-button @click="cancel(1)">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 白名单配置弹出框 -->
|
||||
<el-dialog :title="title" :visible.sync="configOpen" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="configForm" :rules="configRules" label-width="80px">
|
||||
<el-form-item label="添加方式" prop="configName">
|
||||
<el-radio-group v-model="configForm.addMode">
|
||||
<el-radio
|
||||
:key="1"
|
||||
:label="手动添加"
|
||||
>手动添加</el-radio>
|
||||
<el-radio
|
||||
:key="2"
|
||||
:label="批量添加"
|
||||
>批量添加</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="白名单类型" prop="whiteListType">
|
||||
<el-input v-model="form.whiteListType" placeholder="请选择白名单类型" />
|
||||
</el-form-item>
|
||||
<el-form-item label="白名单ID" prop="whitelistIds">
|
||||
<el-input v-model="form.whitelistIds" type="textarea" placeholder="请输入用户ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitConfigForm(2)">保 存</el-button>
|
||||
<el-button @click="cancel(2)">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { addConfig, delConfig, getConfig, updateConfig } from '@/api/system/config'
|
||||
|
||||
import { Document11691998078000list } from '@/api/FDS/whiteList'
|
||||
import { delConfig, getConfig, listConfig } from '@/api/system/config'
|
||||
|
||||
export default {
|
||||
name: "WhiteList",
|
||||
name: 'WhiteList',
|
||||
dicts: ['sys_yes_no'],
|
||||
data() {
|
||||
return {
|
||||
@ -223,11 +189,11 @@ export default {
|
||||
// 参数表格数据
|
||||
configList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
title: '',
|
||||
// 是否显示新增白名单弹出框
|
||||
addOpen: false,
|
||||
// 是否显示白名单配置弹出框
|
||||
configOpen:false,
|
||||
configOpen: false,
|
||||
// 日期范围
|
||||
dateRange: [],
|
||||
// 查询参数
|
||||
@ -236,58 +202,32 @@ export default {
|
||||
pageSize: 10,
|
||||
whiteListName: undefined,
|
||||
whiteListType: undefined,
|
||||
status:undefined
|
||||
status: undefined
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 白名单配置表单参数
|
||||
configForm: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
whiteListName: [
|
||||
{ required: true, message: "白名单名称不能为空", trigger: "blur" }
|
||||
],
|
||||
whiteListType: [
|
||||
{ required: true, message: "白名单类型不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
// 白名单配置表单验证
|
||||
configRules: {
|
||||
addMode: [
|
||||
{ required: true, message: "添加方式不能为空", trigger: "change" }
|
||||
],
|
||||
whiteListType: [
|
||||
{ required: true, message: "白名单类型不能为空", trigger: "change" }
|
||||
],
|
||||
whitelistIds: [
|
||||
{ required: true, message: "白名单名称不能为空", trigger: "blur" }
|
||||
],
|
||||
|
||||
configForm: {
|
||||
addMode: 1,
|
||||
whiteListType: undefined,
|
||||
whitelistIds: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询参数列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
Document11691998078000list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||
this.configList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
this.loading = true
|
||||
listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
||||
this.configList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
}
|
||||
);
|
||||
},
|
||||
// 取消按钮
|
||||
cancel(type) {
|
||||
if (type===1){
|
||||
this.addOpen= false
|
||||
}else {
|
||||
this.configOpen = false
|
||||
}
|
||||
this.reset();
|
||||
)
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
@ -296,100 +236,112 @@ export default {
|
||||
configName: undefined,
|
||||
configKey: undefined,
|
||||
configValue: undefined,
|
||||
configType: "Y",
|
||||
configType: 'Y',
|
||||
remark: undefined
|
||||
};
|
||||
this.resetForm("form");
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.dateRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
this.dateRange = []
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.addOpen = true;
|
||||
this.title = "新增白名单";
|
||||
this.reset()
|
||||
this.$router.push({
|
||||
path: 'whiteList/add',
|
||||
type: 'add'
|
||||
})
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.configId)
|
||||
this.single = selection.length!=1
|
||||
this.single = selection.length != 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
handleEdit(row) {
|
||||
this.reset()
|
||||
const configId = row.configId || this.ids
|
||||
getConfig(configId).then(response => {
|
||||
this.form = response.data;
|
||||
this.addOpen = true;
|
||||
this.title = "修改白名单";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitAddForm: function() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.configId != undefined) {
|
||||
updateConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.addOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addConfig(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.addOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
this.form = response.data
|
||||
this.$router.push({
|
||||
path: 'whiteList/add',
|
||||
type: 'edit'
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
/** 白名单配置提交 **/
|
||||
submitConfigForm:function() {
|
||||
this.$refs["configForm"].validate(valid => {
|
||||
if (valid) {
|
||||
addConfig(this.configForm).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.configOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
});
|
||||
/** 白名单配置弹窗 **/
|
||||
handleConfig(row) {
|
||||
this.reset()
|
||||
const configId = row.configId || this.ids
|
||||
getConfig(configId).then(response => {
|
||||
this.$router.push({
|
||||
path: 'whiteList/addConfig'
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const configIds = row.configId || this.ids;
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认删除编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds);
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
|
||||
/** 发布按钮操作 */
|
||||
handlePublish() {
|
||||
const configIds = row.configId || this.ids;
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认发布编号为"' + configIds + '"的数据项?').then(function() {
|
||||
return delConfig(configIds);
|
||||
//这里写发布操作
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("发布成功");
|
||||
}).catch(() => {});
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('发布成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
|
||||
/** 下架按钮操作 */
|
||||
handleDown() {
|
||||
const configIds = row.configId || this.ids
|
||||
this.$modal.confirm('是否确认下架编号为"' + configIds + '"的数据项?').then(function() {
|
||||
//这里写发布操作
|
||||
return delConfig(configIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('下架成功')
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
/** 查看详情按钮操作 */
|
||||
handleDetail(row) {
|
||||
if (row.type == 1) {
|
||||
this.$router.push({
|
||||
path: 'whiteList/detail'
|
||||
})
|
||||
} else {
|
||||
this.$router.push({
|
||||
path: 'whiteList/equepDetail'
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -1,963 +1,26 @@
|
||||
<template>
|
||||
<div class="app-container home">
|
||||
<el-row :gutter="20">
|
||||
<el-col :sm="24" :lg="24">
|
||||
<blockquote class="text-warning" style="font-size: 14px">
|
||||
领取阿里云通用云产品1888优惠券
|
||||
<br />
|
||||
<el-link
|
||||
href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"
|
||||
type="primary"
|
||||
target="_blank"
|
||||
>https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link
|
||||
>
|
||||
<br />
|
||||
领取腾讯云通用云产品2860优惠券
|
||||
<br />
|
||||
<el-link
|
||||
href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"
|
||||
type="primary"
|
||||
target="_blank"
|
||||
>https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link
|
||||
>
|
||||
<br />
|
||||
阿里云服务器折扣区
|
||||
<el-link href="http://aly.ruoyi.vip" type="primary" target="_blank"
|
||||
>>☛☛点我进入☚☚</el-link
|
||||
>
|
||||
腾讯云服务器秒杀区
|
||||
<el-link href="http://txy.ruoyi.vip" type="primary" target="_blank"
|
||||
>>☛☛点我进入☚☚</el-link
|
||||
><br />
|
||||
<h4 class="text-danger">
|
||||
云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)
|
||||
</h4>
|
||||
</blockquote>
|
||||
|
||||
<hr />
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
||||
<h2>SAC后台管理框架</h2>
|
||||
<p>
|
||||
一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了SAC管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
|
||||
</p>
|
||||
<p>
|
||||
<b>当前版本:</b> <span>v{{ version }}</span>
|
||||
</p>
|
||||
<p>
|
||||
<el-tag type="danger">¥免费开源</el-tag>
|
||||
</p>
|
||||
<p>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
icon="el-icon-cloudy"
|
||||
plain
|
||||
@click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
|
||||
>访问码云</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
icon="el-icon-s-home"
|
||||
plain
|
||||
@click="goTarget('http://ruoyi.vip')"
|
||||
>访问主页</el-button
|
||||
>
|
||||
</p>
|
||||
</el-col>
|
||||
|
||||
<el-col :sm="24" :lg="12" style="padding-left: 50px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<h2>技术选型</h2>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<h4>后端技术</h4>
|
||||
<ul>
|
||||
<li>SpringBoot</li>
|
||||
<li>Spring Security</li>
|
||||
<li>JWT</li>
|
||||
<li>MyBatis</li>
|
||||
<li>Druid</li>
|
||||
<li>Fastjson</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<h4>前端技术</h4>
|
||||
<ul>
|
||||
<li>Vue</li>
|
||||
<li>Vuex</li>
|
||||
<li>Element-ui</li>
|
||||
<li>Axios</li>
|
||||
<li>Sass</li>
|
||||
<li>Quill</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-divider />
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="8">
|
||||
<el-card class="update-log">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>联系信息</span>
|
||||
</div>
|
||||
<div class="body">
|
||||
<p>
|
||||
<i class="el-icon-s-promotion"></i> 官网:<el-link
|
||||
href="http://www.ruoyi.vip"
|
||||
target="_blank"
|
||||
>http://www.ruoyi.vip</el-link
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
<i class="el-icon-user-solid"></i> QQ群:<s> 满937441 </s> <s> 满887144332 </s>
|
||||
<s> 满180251782 </s> <s> 满104180207 </s> <s> 满186866453 </s> <s> 满201396349 </s>
|
||||
<s> 满101456076 </s> <s> 满101539465 </s> <s> 满264312783 </s> <s> 满167385320 </s>
|
||||
<s> 满104748341 </s> <s> 满160110482 </s> <s> 满170801498 </s> <s> 满108482800 </s>
|
||||
<s> 满101046199 </s> <s> 满136919097 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921" target="_blank">143961921</a>
|
||||
</p>
|
||||
<p>
|
||||
<i class="el-icon-chat-dot-round"></i> 微信:<a
|
||||
href="javascript:;"
|
||||
>/ *SAC</a
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
<i class="el-icon-money"></i> 支付宝:<a
|
||||
href="javascript:;"
|
||||
class="支付宝信息"
|
||||
>/ *SAC</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="8">
|
||||
<el-card class="update-log">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>更新日志</span>
|
||||
</div>
|
||||
<el-collapse accordion>
|
||||
<el-collapse-item title="v3.8.6 - 2023-06-30">
|
||||
<ol>
|
||||
<li>支持登录IP黑名单限制</li>
|
||||
<li>新增监控页面图标显示</li>
|
||||
<li>操作日志新增消耗时间属性</li>
|
||||
<li>屏蔽定时任务bean违规的字符</li>
|
||||
<li>日志管理使用索引提升查询性能</li>
|
||||
<li>日志注解支持排除指定的请求参数</li>
|
||||
<li>支持自定义隐藏属性列过滤子对象</li>
|
||||
<li>升级oshi到最新版本6.4.3</li>
|
||||
<li>升级druid到最新版本1.2.16</li>
|
||||
<li>升级fastjson到最新版2.0.34</li>
|
||||
<li>升级spring-boot到最新版本2.5.15</li>
|
||||
<li>升级element-ui到最新版本2.15.13</li>
|
||||
<li>移除apache/commons-fileupload依赖</li>
|
||||
<li>修复页面切换时布局错乱的问题</li>
|
||||
<li>修复匿名注解Anonymous空指针问题</li>
|
||||
<li>修复路由跳转被阻止时内部产生报错信息问题</li>
|
||||
<li>修复isMatchedIp的参数判断产生空指针的问题</li>
|
||||
<li>修复用户多角色数据权限可能出现权限抬升的情况</li>
|
||||
<li>修复开启TopNav后一级菜单路由参数设置无效问题</li>
|
||||
<li>修复DictTag组件value没有匹配的值时则展示value</li>
|
||||
<li>优化文件下载出现的异常</li>
|
||||
<li>优化选择图标组件高亮回显</li>
|
||||
<li>优化弹窗后导航栏偏移的问题</li>
|
||||
<li>优化修改密码日志存储明文问题</li>
|
||||
<li>优化页签栏关闭其他出现的异常问题</li>
|
||||
<li>优化页签关闭左侧选项排除首页选项</li>
|
||||
<li>优化关闭当前tab页跳转最右侧tab页</li>
|
||||
<li>优化缓存列表清除操作提示不变的问题</li>
|
||||
<li>优化字符未使用下划线不进行驼峰式处理</li>
|
||||
<li>优化用户导入更新时需获取用户编号问题</li>
|
||||
<li>优化侧边栏的平台标题与VUE_APP_TITLE保持同步</li>
|
||||
<li>优化导出Excel时设置dictType属性重复查缓存问题</li>
|
||||
<li>连接池Druid支持新的配置connectTimeout和socketTimeout</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.8.5 - 2023-01-01">
|
||||
<ol>
|
||||
<li>定时任务违规的字符</li>
|
||||
<li>重置时取消部门选中</li>
|
||||
<li>新增返回警告消息提示</li>
|
||||
<li>忽略不必要的属性数据返回</li>
|
||||
<li>修改参数键名时移除前缓存配置</li>
|
||||
<li>导入更新用户数据前校验数据权限</li>
|
||||
<li>兼容Excel下拉框内容过多无法显示的问题</li>
|
||||
<li>升级echarts到最新版本5.4.0</li>
|
||||
<li>升级core-js到最新版本3.25.3</li>
|
||||
<li>升级oshi到最新版本6.4.0</li>
|
||||
<li>升级kaptcha到最新版2.3.3</li>
|
||||
<li>升级druid到最新版本1.2.15</li>
|
||||
<li>升级fastjson到最新版2.0.20</li>
|
||||
<li>升级pagehelper到最新版1.4.6</li>
|
||||
<li>优化弹窗内容过多展示不全问题</li>
|
||||
<li>优化swagger-ui静态资源使用缓存</li>
|
||||
<li>开启TopNav没有子菜单隐藏侧边栏</li>
|
||||
<li>删除fuse无效选项maxPatternLength</li>
|
||||
<li>优化导出对象的子列表为空会出现[]问题</li>
|
||||
<li>优化编辑头像时透明部分会变成黑色问题</li>
|
||||
<li>优化小屏幕上修改头像界面布局错位的问题</li>
|
||||
<li>修复代码生成勾选属性无效问题</li>
|
||||
<li>修复文件上传组件格式验证问题</li>
|
||||
<li>修复回显数据字典数组异常问题</li>
|
||||
<li>修复sheet超出最大行数异常问题</li>
|
||||
<li>修复Log注解GET请求记录不到参数问题</li>
|
||||
<li>修复调度日志点击多次数据不变化的问题</li>
|
||||
<li>修复主题颜色在Drawer组件不会加载问题</li>
|
||||
<li>修复文件名包含特殊字符的文件无法下载问题</li>
|
||||
<li>修复table中更多按钮切换主题色未生效修复问题</li>
|
||||
<li>修复某些特性的环境生成代码变乱码TXT文件问题</li>
|
||||
<li>修复代码生成图片/文件/单选时选择必填无法校验问题</li>
|
||||
<li>修复某些特性的情况用户编辑对话框中角色和部门无法修改问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.8.4 - 2022-09-26">
|
||||
<ol>
|
||||
<li>数据逻辑删除不进行唯一验证</li>
|
||||
<li>Excel注解支持导出对象的子列表方法</li>
|
||||
<li>Excel注解支持自定义隐藏属性列</li>
|
||||
<li>Excel注解支持backgroundColor属性设置背景色</li>
|
||||
<li>支持配置密码最大错误次数/锁定时间</li>
|
||||
<li>登录日志新增解锁账户功能</li>
|
||||
<li>通用下载方法新增config配置选项</li>
|
||||
<li>支持多权限字符匹配角色数据权限</li>
|
||||
<li>页面内嵌iframe切换tab不刷新数据</li>
|
||||
<li>操作日志记录支持排除敏感属性字段</li>
|
||||
<li>修复多文件上传报错出现的异常问题</li>
|
||||
<li>修复图片预览组件src属性为null值控制台报错问题</li>
|
||||
<li>升级oshi到最新版本6.2.2</li>
|
||||
<li>升级fastjson到最新版2.0.14</li>
|
||||
<li>升级pagehelper到最新版1.4.3</li>
|
||||
<li>升级core-js到最新版本3.25.2</li>
|
||||
<li>升级element-ui到最新版本2.15.10</li>
|
||||
<li>优化任务过期不执行调度</li>
|
||||
<li>优化字典数据使用store存取</li>
|
||||
<li>优化修改资料头像被覆盖的问题</li>
|
||||
<li>优化修改用户登录账号重复验证</li>
|
||||
<li>优化代码生成同步后值NULL问题</li>
|
||||
<li>优化定时任务支持执行父类方法</li>
|
||||
<li>优化用户个人信息接口防止修改部门</li>
|
||||
<li>优化布局设置使用el-drawer抽屉显示</li>
|
||||
<li>优化没有权限的用户编辑部门缺少数据</li>
|
||||
<li>优化日志注解记录限制请求地址的长度</li>
|
||||
<li>优化excel/scale属性导出单元格数值类型</li>
|
||||
<li>优化日志操作中重置按钮时重复查询的问题</li>
|
||||
<li>优化多个相同角色数据导致权限SQL重复问题</li>
|
||||
<li>优化表格上右侧工具条(搜索按钮显隐&右侧样式凸出)</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.8.3 - 2022-06-27">
|
||||
<ol>
|
||||
<li>新增缓存列表菜单功能</li>
|
||||
<li>代码生成树表新增(展开/折叠)</li>
|
||||
<li>Excel注解支持color字体颜色</li>
|
||||
<li>新增Anonymous匿名访问不鉴权注解</li>
|
||||
<li>用户头像上传限制只能为图片格式</li>
|
||||
<li>接口使用泛型使其看到响应属性字段</li>
|
||||
<li>检查定时任务bean所在包名是否为白名单配置</li>
|
||||
<li>添加页签openPage支持传递参数</li>
|
||||
<li>用户缓存信息添加部门ancestors祖级列表</li>
|
||||
<li>升级element-ui到最新版本2.15.8</li>
|
||||
<li>升级oshi到最新版本6.1.6</li>
|
||||
<li>升级druid到最新版本1.2.11</li>
|
||||
<li>升级fastjson到最新版2.0.8</li>
|
||||
<li>升级spring-boot到最新版本2.5.14</li>
|
||||
<li>降级jsencrypt版本兼容IE浏览器</li>
|
||||
<li>删除多余的salt字段</li>
|
||||
<li>新增获取不带后缀文件名称方法</li>
|
||||
<li>新增获取配置文件中的属性值方法</li>
|
||||
<li>新增内容编码/解码方便插件集成使用</li>
|
||||
<li>字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)</li>
|
||||
<li>优化设置分页参数默认值</li>
|
||||
<li>优化对空字符串参数处理的过滤</li>
|
||||
<li>优化显示顺序orderNum类型为整型</li>
|
||||
<li>优化表单构建按钮不显示正则校验</li>
|
||||
<li>优化字典数据回显样式下拉框显示值</li>
|
||||
<li>优化R响应成功状态码与全局保持一致</li>
|
||||
<li>优化druid开启wall过滤器出现的异常问题</li>
|
||||
<li>优化用户管理左侧树型组件增加选中高亮保持</li>
|
||||
<li>优化新增用户与角色信息&用户与岗位信息逻辑</li>
|
||||
<li>优化默认不启用压缩文件缓存防止node_modules过大</li>
|
||||
<li>修复字典数据显示不全问题</li>
|
||||
<li>修复操作日志查询类型条件为0时会查到所有数据</li>
|
||||
<li>修复Excel注解prompt/combo同时使用不生效问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.8.2 - 2022-04-01">
|
||||
<ol>
|
||||
<li>前端支持设置是否需要防止数据重复提交</li>
|
||||
<li>开启TopNav没有子菜单情况隐藏侧边栏</li>
|
||||
<li>侧边栏菜单名称过长悬停显示标题</li>
|
||||
<li>用户访问控制时校验数据权限,防止越权</li>
|
||||
<li>导出Excel时屏蔽公式,防止CSV注入风险</li>
|
||||
<li>组件ImagePreview支持多图预览显示</li>
|
||||
<li>组件ImageUpload支持多图同时选择上传</li>
|
||||
<li>组件FileUpload支持多文件同时选择上传</li>
|
||||
<li>服务监控新增运行参数信息显示</li>
|
||||
<li>定时任务目标字符串过滤特殊字符</li>
|
||||
<li>定时任务目标字符串验证包名白名单</li>
|
||||
<li>代码生成列表图片支持预览</li>
|
||||
<li>代码生成编辑修改打开新页签</li>
|
||||
<li>代码生成新增Java类型Boolean</li>
|
||||
<li>代码生成子表支持日期/字典配置</li>
|
||||
<li>代码生成同步保留必填/类型选项</li>
|
||||
<li>升级oshi到最新版本6.1.2</li>
|
||||
<li>升级fastjson到最新版1.2.80</li>
|
||||
<li>升级pagehelper到最新版1.4.1</li>
|
||||
<li>升级spring-boot到最新版本2.5.11</li>
|
||||
<li>升级spring-boot-mybatis到最新版2.2.2</li>
|
||||
<li>添加遗漏的分页参数合理化属性</li>
|
||||
<li>修改npm即将过期的注册源地址</li>
|
||||
<li>修复分页组件请求两次问题</li>
|
||||
<li>修复通用文件下载接口跨域问题</li>
|
||||
<li>修复Xss注解字段值为空时的异常问题</li>
|
||||
<li>修复选项卡点击右键刷新丢失参数问题</li>
|
||||
<li>修复表单清除元素位置未垂直居中问题</li>
|
||||
<li>修复服务监控中运行参数显示条件错误</li>
|
||||
<li>修复导入Excel时字典字段类型为Long转义为空问题</li>
|
||||
<li>修复登录超时刷新页面跳转登录页面还提示重新登录问题</li>
|
||||
<li>优化加载字典缓存数据</li>
|
||||
<li>优化IP地址获取到多个的问题</li>
|
||||
<li>优化任务队列满时任务拒绝策略</li>
|
||||
<li>优化文件上传兼容Weblogic环境</li>
|
||||
<li>优化定时任务默认保存到内存中执行</li>
|
||||
<li>优化部门修改缩放后出现的错位问题</li>
|
||||
<li>优化Excel格式化不同类型的日期对象</li>
|
||||
<li>优化菜单表关键字导致的插件报错问题</li>
|
||||
<li>优化Oracle用户头像列为空时不显示问题</li>
|
||||
<li>优化页面若未匹配到字典标签则返回原字典值</li>
|
||||
<li>优化修复登录失效后多次请求提示多次弹窗问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.8.1 - 2022-01-01">
|
||||
<ol>
|
||||
<li>新增Vue3前端代码生成模板</li>
|
||||
<li>新增图片预览组件</li>
|
||||
<li>新增压缩插件实现打包Gzip</li>
|
||||
<li>自定义xss校验注解实现</li>
|
||||
<li>自定义文字复制剪贴指令</li>
|
||||
<li>代码生成预览支持复制内容</li>
|
||||
<li>路由支持单独配置菜单或角色权限</li>
|
||||
<li>用户管理部门查询选择节点后分页参数初始</li>
|
||||
<li>修复用户分配角色属性错误</li>
|
||||
<li>修复打包后字体图标偶现的乱码问题</li>
|
||||
<li>修复菜单管理重置表单出现的错误</li>
|
||||
<li>修复版本差异导致的懒加载报错问题</li>
|
||||
<li>修复Cron组件中周回显问题</li>
|
||||
<li>修复定时任务多参数逗号分隔的问题</li>
|
||||
<li>修复根据ID查询列表可能出现的主键溢出问题</li>
|
||||
<li>修复tomcat配置参数已过期问题</li>
|
||||
<li>升级clipboard到最新版本2.0.8</li>
|
||||
<li>升级oshi到最新版本v5.8.6</li>
|
||||
<li>升级fastjson到最新版1.2.79</li>
|
||||
<li>升级spring-boot到最新版本2.5.8</li>
|
||||
<li>升级log4j2到2.17.1,防止漏洞风险</li>
|
||||
<li>优化下载解析blob异常提示</li>
|
||||
<li>优化代码生成字典组重复问题</li>
|
||||
<li>优化查询用户的角色组&岗位组代码</li>
|
||||
<li>优化定时任务cron表达式小时设置24</li>
|
||||
<li>优化用户导入提示溢出则显示滚动条</li>
|
||||
<li>优化防重复提交标识组合为(key+url+header)</li>
|
||||
<li>优化分页方法设置成通用方便灵活调用</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.8.0 - 2021-12-01">
|
||||
<ol>
|
||||
<li>新增配套并同步的Vue3前端版本</li>
|
||||
<li>新增通用方法简化模态/缓存/下载/权限/页签使用</li>
|
||||
<li>优化导出数据/使用通用下载方法</li>
|
||||
<li>Excel注解支持自定义数据处理器</li>
|
||||
<li>Excel注解支持导入导出标题信息</li>
|
||||
<li>Excel导入支持@Excels注解</li>
|
||||
<li>新增组件data-dict,简化数据字典使用</li>
|
||||
<li>新增Jaxb依赖,防止jdk8以上出现的兼容错误</li>
|
||||
<li>生产环境使用路由懒加载提升页面响应速度</li>
|
||||
<li>修复五级以上菜单出现的404问题</li>
|
||||
<li>防重提交注解支持配置间隔时间/提示消息</li>
|
||||
<li>日志注解新增是否保存响应参数</li>
|
||||
<li>任务屏蔽违规字符&参数忽略双引号中的逗号</li>
|
||||
<li>升级SpringBoot到最新版本2.5.6</li>
|
||||
<li>升级pagehelper到最新版1.4.0</li>
|
||||
<li>升级spring-boot-mybatis到最新版2.2.0</li>
|
||||
<li>升级oshi到最新版本v5.8.2</li>
|
||||
<li>升级druid到最新版1.2.8</li>
|
||||
<li>升级velocity到最新版本2.3</li>
|
||||
<li>升级fastjson到最新版1.2.78</li>
|
||||
<li>升级axios到最新版本0.24.0</li>
|
||||
<li>升级dart-sass到版本1.32.13</li>
|
||||
<li>升级core-js到最新版本3.19.1</li>
|
||||
<li>升级jsencrypt到最新版本3.2.1</li>
|
||||
<li>升级js-cookie到最新版本3.0.1</li>
|
||||
<li>升级file-saver到最新版本2.0.5</li>
|
||||
<li>升级sass-loader到最新版本10.1.1</li>
|
||||
<li>升级element-ui到最新版本2.15.6</li>
|
||||
<li>新增sendGet无参请求方法</li>
|
||||
<li>禁用el-tag组件的渐变动画</li>
|
||||
<li>代码生成点击预览重置激活tab</li>
|
||||
<li>AjaxResult重写put方法,以方便链式调用</li>
|
||||
<li>优化登录/验证码请求headers不设置token</li>
|
||||
<li>优化用户个人信息接口防止修改用户名</li>
|
||||
<li>优化Cron表达式生成器关闭时销毁避免缓存</li>
|
||||
<li>优化注册成功提示消息类型success</li>
|
||||
<li>优化aop语法,使用spring自动注入注解</li>
|
||||
<li>优化记录登录信息,移除不必要的修改</li>
|
||||
<li>优化mybatis全局默认的执行器</li>
|
||||
<li>优化Excel导入图片可能出现的异常</li>
|
||||
<li>修复代码生成模板主子表删除缺少事务</li>
|
||||
<li>修复日志记录可能出现的转换异常</li>
|
||||
<li>修复代码生成复选框字典遗漏问题</li>
|
||||
<li>修复关闭xss功能导致可重复读RepeatableFilter失效</li>
|
||||
<li>修复字符串无法被反转义问题</li>
|
||||
<li>修复后端主子表代码模板方法名生成错误问题</li>
|
||||
<li>修复xss过滤后格式出现的异常</li>
|
||||
<li>修复swagger没有指定dataTypeClass导致启动出现warn日志</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.7.0 - 2021-09-13">
|
||||
<ol>
|
||||
<li>参数管理支持配置验证码开关</li>
|
||||
<li>新增是否开启用户注册功能</li>
|
||||
<li>定时任务支持在线生成cron表达式</li>
|
||||
<li>菜单管理支持配置路由参数</li>
|
||||
<li>支持自定义注解实现接口限流</li>
|
||||
<li>Excel注解支持Image图片导入</li>
|
||||
<li>自定义弹层溢出滚动样式</li>
|
||||
<li>自定义可拖动弹窗宽度指令</li>
|
||||
<li>自定义可拖动弹窗高度指令</li>
|
||||
<li>修复任意账户越权问题</li>
|
||||
<li>修改时检查用户数据权限范围</li>
|
||||
<li>修复保存配置主题颜色失效问题</li>
|
||||
<li>新增暗色菜单风格主题</li>
|
||||
<li>菜单&部门新增展开/折叠功能</li>
|
||||
<li>页签新增关闭左侧&添加图标</li>
|
||||
<li>顶部菜单排除隐藏的默认路由</li>
|
||||
<li>顶部菜单同步系统主题样式</li>
|
||||
<li>跳转路由高亮相对应的菜单栏</li>
|
||||
<li>代码生成主子表多选行数据</li>
|
||||
<li>日期范围支持添加多组</li>
|
||||
<li>升级element-ui到最新版本2.15.5</li>
|
||||
<li>升级oshi到最新版本v5.8.0</li>
|
||||
<li>升级commons.io到最新版本v2.11.0</li>
|
||||
<li>定时任务屏蔽ldap远程调用</li>
|
||||
<li>定时任务屏蔽http(s)远程调用</li>
|
||||
<li>补充定时任务表字段注释</li>
|
||||
<li>定时任务对检查异常进行事务回滚</li>
|
||||
<li>启用父部门状态排除顶级节点</li>
|
||||
<li>富文本新增上传文件大小限制</li>
|
||||
<li>默认首页使用keep-alive缓存</li>
|
||||
<li>修改代码生成字典回显样式</li>
|
||||
<li>自定义分页合理化传入参数</li>
|
||||
<li>修复字典组件值为整形不显示问题</li>
|
||||
<li>修复定时任务日志执行状态显示</li>
|
||||
<li>角色&菜单新增字段属性提示信息</li>
|
||||
<li>修复角色分配用户页面参数类型错误提醒</li>
|
||||
<li>优化布局设置动画特效</li>
|
||||
<li>优化异常处理信息</li>
|
||||
<li>优化错误token导致的解析异常</li>
|
||||
<li>密码框新增显示切换密码图标</li>
|
||||
<li>定时任务新增更多操作</li>
|
||||
<li>更多操作按钮添加权限控制</li>
|
||||
<li>导入用户样式优化</li>
|
||||
<li>提取通用方法到基类控制器</li>
|
||||
<li>优化使用权限工具获取用户信息</li>
|
||||
<li>优化用户不能删除自己</li>
|
||||
<li>优化XSS跨站脚本过滤</li>
|
||||
<li>优化代码生成模板</li>
|
||||
<li>验证码默认20s超时</li>
|
||||
<li>BLOB下载时清除URL对象引用</li>
|
||||
<li>代码生成导入表按创建时间排序</li>
|
||||
<li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>
|
||||
<li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>
|
||||
<li>多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.6.0 - 2021-07-12">
|
||||
<ol>
|
||||
<li>角色管理新增分配用户功能</li>
|
||||
<li>用户管理新增分配角色功能</li>
|
||||
<li>日志列表支持排序操作</li>
|
||||
<li>优化参数&字典缓存操作</li>
|
||||
<li>系统布局配置支持动态标题开关</li>
|
||||
<li>菜单路由配置支持内链访问</li>
|
||||
<li>默认访问后端首页新增提示语</li>
|
||||
<li>富文本默认上传返回url类型</li>
|
||||
<li>新增自定义弹窗拖拽指令</li>
|
||||
<li>全局注册常用通用组件</li>
|
||||
<li>全局挂载字典标签组件</li>
|
||||
<li>ImageUpload组件支持多图片上传</li>
|
||||
<li>FileUpload组件支持多文件上传</li>
|
||||
<li>文件上传组件添加数量限制属性</li>
|
||||
<li>富文本编辑组件添加类型属性</li>
|
||||
<li>富文本组件工具栏配置视频</li>
|
||||
<li>封装通用iframe组件</li>
|
||||
<li>限制超级管理员不允许操作</li>
|
||||
<li>用户信息长度校验限制</li>
|
||||
<li>分页组件新增pagerCount属性</li>
|
||||
<li>添加bat脚本执行应用</li>
|
||||
<li>升级oshi到最新版本v5.7.4</li>
|
||||
<li>升级element-ui到最新版本2.15.2</li>
|
||||
<li>升级pagehelper到最新版1.3.1</li>
|
||||
<li>升级commons.io到最新版本v2.10.0</li>
|
||||
<li>升级commons.fileupload到最新版本v1.4</li>
|
||||
<li>升级swagger到最新版本v3.0.0</li>
|
||||
<li>修复关闭confirm提示框控制台报错问题</li>
|
||||
<li>修复存在的SQL注入漏洞问题</li>
|
||||
<li>定时任务屏蔽rmi远程调用</li>
|
||||
<li>修复用户搜索分页变量错误</li>
|
||||
<li>修复导出角色数据范围翻译缺少仅本人</li>
|
||||
<li>修复表单构建选择下拉选择控制台报错问题</li>
|
||||
<li>优化图片工具类读取文件</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.5.0 - 2021-05-25">
|
||||
<ol>
|
||||
<li>新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)</li>
|
||||
<li>布局设置支持保存&重置配置</li>
|
||||
<li>修复树表数据显示不全&加载慢问题</li>
|
||||
<li>新增IE浏览器版本过低提示页面</li>
|
||||
<li>用户登录后记录最后登录IP&时间</li>
|
||||
<li>页面导出按钮点击之后添加遮罩</li>
|
||||
<li>富文本编辑器支持自定义上传地址</li>
|
||||
<li>富文本编辑组件新增readOnly属性</li>
|
||||
<li>页签TagsView新增关闭右侧功能</li>
|
||||
<li>显隐列组件加载初始默认隐藏列</li>
|
||||
<li>关闭头像上传窗口还原默认图片</li>
|
||||
<li>个人信息添加手机&邮箱重复验证</li>
|
||||
<li>代码生成模板导出按钮点击后添加遮罩</li>
|
||||
<li>代码生成模板树表操作列添加新增按钮</li>
|
||||
<li>代码生成模板修复主子表字段重名问题</li>
|
||||
<li>升级fastjson到最新版1.2.76</li>
|
||||
<li>升级druid到最新版本v1.2.6</li>
|
||||
<li>升级mybatis到最新版3.5.6 阻止远程代码执行漏洞</li>
|
||||
<li>升级oshi到最新版本v5.6.0</li>
|
||||
<li>velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞</li>
|
||||
<li>数据监控页默认账户密码防止越权访问</li>
|
||||
<li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>
|
||||
<li>修正后端导入表权限标识</li>
|
||||
<li>修正前端操作日志&登录日志权限标识</li>
|
||||
<li>设置Redis配置HashKey序列化</li>
|
||||
<li>删除操作日志记录信息</li>
|
||||
<li>上传媒体类型添加视频格式</li>
|
||||
<li>修复请求形参未传值记录日志异常问题</li>
|
||||
<li>优化xss校验json请求条件</li>
|
||||
<li>树级结构更新子节点使用replaceFirst</li>
|
||||
<li>优化ExcelUtil空值处理</li>
|
||||
<li>日志记录过滤BindingResult对象,防止异常</li>
|
||||
<li>修改主题后mini类型按钮无效问题</li>
|
||||
<li>优化通用下载完成后删除节点</li>
|
||||
<li>通用Controller添加响应返回消息</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.4.0 - 2021-02-22">
|
||||
<ol>
|
||||
<li>代码生成模板支持主子表</li>
|
||||
<li>表格右侧工具栏组件支持显隐列</li>
|
||||
<li>图片组件添加预览&移除功能</li>
|
||||
<li>Excel注解支持Image图片导出</li>
|
||||
<li>操作按钮组调整为朴素按钮样式</li>
|
||||
<li>代码生成支持文件上传组件</li>
|
||||
<li>代码生成日期控件区分范围</li>
|
||||
<li>代码生成数据库文本类型生成表单文本域</li>
|
||||
<li>用户手机邮箱&菜单组件修改允许空字符串</li>
|
||||
<li>升级SpringBoot到最新版本2.2.13 提升启动速度</li>
|
||||
<li>升级druid到最新版本v1.2.4</li>
|
||||
<li>升级fastjson到最新版1.2.75</li>
|
||||
<li>升级element-ui到最新版本2.15.0</li>
|
||||
<li>修复IE11浏览器报错问题</li>
|
||||
<li>优化多级菜单之间切换无法缓存的问题</li>
|
||||
<li>修复四级菜单无法显示问题</li>
|
||||
<li>修正侧边栏静态路由丢失问题</li>
|
||||
<li>修复角色管理-编辑角色-功能权限显示异常</li>
|
||||
<li>配置文件新增redis数据库索引属性</li>
|
||||
<li>权限工具类增加admin判断</li>
|
||||
<li>角色非自定义权限范围清空选择值</li>
|
||||
<li>修复导入数据为负浮点数时丢失精度问题</li>
|
||||
<li>移除path-to-regexp正则匹配插件</li>
|
||||
<li>修复生成树表代码异常</li>
|
||||
<li>修改ip字段长度防止ipv6地址长度不够</li>
|
||||
<li>防止get请求参数值为false或0等特殊值会导致无法正确的传参</li>
|
||||
<li>登录后push添加catch防止出现检查错误</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.3.0 - 2020-12-14">
|
||||
<ol>
|
||||
<li>新增缓存监控功能</li>
|
||||
<li>支持主题风格配置</li>
|
||||
<li>修复多级菜单之间切换无法缓存的问题</li>
|
||||
<li>多级菜单自动配置组件</li>
|
||||
<li>代码生成预览支持高亮显示</li>
|
||||
<li>支持Get请求映射Params参数</li>
|
||||
<li>删除用户和角色解绑关联</li>
|
||||
<li>去除用户手机邮箱部门必填验证</li>
|
||||
<li>Excel支持注解align对齐方式</li>
|
||||
<li>Excel支持导入Boolean型数据</li>
|
||||
<li>优化头像样式,鼠标移入悬停遮罩</li>
|
||||
<li>代码生成预览提供滚动机制</li>
|
||||
<li>代码生成删除多余的数字float类型</li>
|
||||
<li>修正转换字符串的目标字符集属性</li>
|
||||
<li>回显数据字典防止空值报错</li>
|
||||
<li>日志记录增加过滤多文件场景</li>
|
||||
<li>修改缓存Set方法可能导致嵌套的问题</li>
|
||||
<li>移除前端一些多余的依赖</li>
|
||||
<li>防止安全扫描YUI出现的风险提示</li>
|
||||
<li>修改node-sass为dart-sass</li>
|
||||
<li>升级SpringBoot到最新版本2.1.18</li>
|
||||
<li>升级poi到最新版本4.1.2</li>
|
||||
<li>升级oshi到最新版本v5.3.6</li>
|
||||
<li>升级bitwalker到最新版本1.21</li>
|
||||
<li>升级axios到最新版本0.21.0</li>
|
||||
<li>升级element-ui到最新版本2.14.1</li>
|
||||
<li>升级vue到最新版本2.6.12</li>
|
||||
<li>升级vuex到最新版本3.6.0</li>
|
||||
<li>升级vue-cli到版本4.5.9</li>
|
||||
<li>升级vue-router到最新版本3.4.9</li>
|
||||
<li>升级vue-cli到最新版本4.4.6</li>
|
||||
<li>升级vue-cropper到最新版本0.5.5</li>
|
||||
<li>升级clipboard到最新版本2.0.6</li>
|
||||
<li>升级core-js到最新版本3.8.1</li>
|
||||
<li>升级echarts到最新版本4.9.0</li>
|
||||
<li>升级file-saver到最新版本2.0.4</li>
|
||||
<li>升级fuse.js到最新版本6.4.3</li>
|
||||
<li>升级js-beautify到最新版本1.13.0</li>
|
||||
<li>升级js-cookie到最新版本2.2.1</li>
|
||||
<li>升级path-to-regexp到最新版本6.2.0</li>
|
||||
<li>升级quill到最新版本1.3.7</li>
|
||||
<li>升级screenfull到最新版本5.0.2</li>
|
||||
<li>升级sortablejs到最新版本1.10.2</li>
|
||||
<li>升级vuedraggable到最新版本2.24.3</li>
|
||||
<li>升级chalk到最新版本4.1.0</li>
|
||||
<li>升级eslint到最新版本7.15.0</li>
|
||||
<li>升级eslint-plugin-vue到最新版本7.2.0</li>
|
||||
<li>升级lint-staged到最新版本10.5.3</li>
|
||||
<li>升级runjs到最新版本4.4.2</li>
|
||||
<li>升级sass-loader到最新版本10.1.0</li>
|
||||
<li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li>
|
||||
<li>升级svg-sprite-loader到最新版本5.1.1</li>
|
||||
<li>升级vue-template-compiler到最新版本2.6.12</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.2.1 - 2020-11-18">
|
||||
<ol>
|
||||
<li>阻止任意文件下载漏洞</li>
|
||||
<li>代码生成支持上传控件</li>
|
||||
<li>新增图片上传组件</li>
|
||||
<li>调整默认首页</li>
|
||||
<li>升级druid到最新版本v1.2.2</li>
|
||||
<li>mapperLocations配置支持分隔符</li>
|
||||
<li>权限信息调整</li>
|
||||
<li>调整sql默认时间</li>
|
||||
<li>解决代码生成没有bit类型的问题</li>
|
||||
<li>升级pagehelper到最新版1.3.0</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.2.0 - 2020-10-10">
|
||||
<ol>
|
||||
<li>升级springboot版本到2.1.17 提升安全性</li>
|
||||
<li>升级oshi到最新版本v5.2.5</li>
|
||||
<li>升级druid到最新版本v1.2.1</li>
|
||||
<li>升级jjwt到版本0.9.1</li>
|
||||
<li>升级fastjson到最新版1.2.74</li>
|
||||
<li>修改sass为node-sass,避免el-icon图标乱码</li>
|
||||
<li>代码生成支持同步数据库</li>
|
||||
<li>代码生成支持富文本控件</li>
|
||||
<li>代码生成页面时不忽略remark属性</li>
|
||||
<li>代码生成添加select必填选项</li>
|
||||
<li>Excel导出类型NUMERIC支持精度浮点类型</li>
|
||||
<li>Excel导出targetAttr优化获取值,防止get方法不规范</li>
|
||||
<li>Excel注解支持自动统计数据总和</li>
|
||||
<li>Excel注解支持设置BigDecimal精度&舍入规则</li>
|
||||
<li>菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)</li>
|
||||
<li>允许用户分配到部门父节点</li>
|
||||
<li>菜单新增是否缓存keep-alive</li>
|
||||
<li>表格操作列间距调整</li>
|
||||
<li>限制系统内置参数不允许删除</li>
|
||||
<li>富文本组件优化,支持自定义高度&图片冲突问题</li>
|
||||
<li>富文本工具栏样式对齐</li>
|
||||
<li>导入excel整形值校验优化</li>
|
||||
<li>修复页签关闭所有时固定标签路由不刷新问题</li>
|
||||
<li>表单构建布局型组件新增按钮</li>
|
||||
<li>左侧菜单文字过长显示省略号</li>
|
||||
<li>修正根节点为子部门时,树状结构显示问题</li>
|
||||
<li>修正调用目标字符串最大长度</li>
|
||||
<li>修正菜单提示信息错误</li>
|
||||
<li>修正定时任务执行一次权限标识</li>
|
||||
<li>修正数据库字符串类型nvarchar</li>
|
||||
<li>优化递归子节点</li>
|
||||
<li>优化数据权限判断</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="v3.1.0 - 2020-08-13">
|
||||
<ol>
|
||||
<li>表格工具栏右侧添加刷新&显隐查询组件</li>
|
||||
<li>后端支持CORS跨域请求</li>
|
||||
<li>代码生成支持选择上级菜单</li>
|
||||
<li>代码生成支持自定义路径</li>
|
||||
<li>代码生成支持复选框</li>
|
||||
<li>Excel导出导入支持dictType字典类型</li>
|
||||
<li>Excel支持分割字符串组内容</li>
|
||||
<li>验证码类型支持(数组计算、字符验证)</li>
|
||||
<li>升级vue-cli版本到4.4.4</li>
|
||||
<li>修改 node-sass 为 dart-sass</li>
|
||||
<li>表单类型为Integer/Long设置整形默认值</li>
|
||||
<li>代码生成器默认mapper路径与默认mapperScan路径不一致</li>
|
||||
<li>优化防重复提交拦截器</li>
|
||||
<li>优化上级菜单不能选择自己</li>
|
||||
<li>修复角色的权限分配后,未实时生效问题</li>
|
||||
<li>修复在线用户日志记录类型</li>
|
||||
<li>修复富文本空格和缩进保存后不生效问题</li>
|
||||
<li>修复在线用户判断逻辑</li>
|
||||
<li>唯一限制条件只返回单条数据</li>
|
||||
<li>添加获取当前的环境配置方法</li>
|
||||
<li>超时登录后页面跳转到首页</li>
|
||||
<li>全局异常状态汉化拦截处理</li>
|
||||
<li>HTML过滤器改为将html转义</li>
|
||||
<li>检查字符支持小数点&降级改成异常提醒</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="v3.0.0 - 2020-07-20">
|
||||
<ol>
|
||||
<li>单应用调整为多模块项目</li>
|
||||
<li>升级element-ui版本到2.13.2</li>
|
||||
<li>删除babel,提高编译速度。</li>
|
||||
<li>新增菜单默认主类目</li>
|
||||
<li>编码文件名修改为uuid方式</li>
|
||||
<li>定时任务cron表达式验证</li>
|
||||
<li>角色权限修改时已有权限未自动勾选异常修复</li>
|
||||
<li>防止切换权限用户后登录出现404</li>
|
||||
<li>Excel支持sort导出排序</li>
|
||||
<li>创建用户不允许选择超级管理员角色</li>
|
||||
<li>修复代码生成导入表结构出现异常页面不提醒问题</li>
|
||||
<li>修复代码生成点击多次表修改数据不变化的问题</li>
|
||||
<li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li>
|
||||
<li>修复布局为small者mini用户表单显示错位问题</li>
|
||||
<li>修复热部署导致的强换异常问题</li>
|
||||
<li>修改用户管理复选框宽度,防止部分浏览器出现省略号</li>
|
||||
<li>IpUtils工具,清除Xss特殊字符,防止Xff注入攻击</li>
|
||||
<li>生成domain 如果是浮点型 统一用BigDecimal</li>
|
||||
<li>定时任务调整label-width,防止部署出现错位</li>
|
||||
<li>调整表头固定列默认样式</li>
|
||||
<li>代码生成模板调整,字段为String并且必填则加空串条件</li>
|
||||
<li>代码生成字典Integer/Long使用parseInt</li>
|
||||
<li>
|
||||
修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序
|
||||
</li>
|
||||
<li>修正岗位导出权限注解</li>
|
||||
<li>禁止加密密文返回前端</li>
|
||||
<li>修复代码生成页面中的查询条件创建时间未生效的问题</li>
|
||||
<li>修复首页搜索菜单外链无法点击跳转问题</li>
|
||||
<li>修复菜单管理选择图标,backspace删除时不过滤数据</li>
|
||||
<li>用户管理部门分支节点不可检查&显示计数</li>
|
||||
<li>数据范围过滤属性调整</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="v2.3.0 - 2020-06-01">
|
||||
<ol>
|
||||
<li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>
|
||||
<li>dev启动默认打开浏览器</li>
|
||||
<li>vue-cli使用默认source-map</li>
|
||||
<li>slidebar eslint报错优化</li>
|
||||
<li>当tags-view滚动关闭右键菜单</li>
|
||||
<li>字典管理添加缓存读取</li>
|
||||
<li>参数管理支持缓存操作</li>
|
||||
<li>支持一级菜单(和主页同级)在main区域显示</li>
|
||||
<li>限制外链地址必须以http(s)开头</li>
|
||||
<li>tagview & sidebar 主题颜色与element ui(全局)同步</li>
|
||||
<li>修改数据源类型优先级,先根据方法,再根据类</li>
|
||||
<li>支持是否需要设置token属性,自定义返回码消息。</li>
|
||||
<li>swagger请求前缀加入配置。</li>
|
||||
<li>登录地点设置内容过长则隐藏显示</li>
|
||||
<li>修复定时任务执行一次按钮后不提示消息问题</li>
|
||||
<li>修改上级部门(选择项排除本身和下级)</li>
|
||||
<li>通用http发送方法增加参数 contentType 编码类型</li>
|
||||
<li>更换IP地址查询接口</li>
|
||||
<li>修复页签变量undefined</li>
|
||||
<li>添加校验部门包含未停用的子部门</li>
|
||||
<li>修改定时任务详情下次执行时间日期显示错误</li>
|
||||
<li>角色管理查询设置默认排序字段</li>
|
||||
<li>swagger添加enable参数控制是否启用</li>
|
||||
<li>只对json类型请求构建可重复读取inputStream的request</li>
|
||||
<li>修改代码生成字典字段int类型没有自动选中问题</li>
|
||||
<li>vuex用户名取值修正</li>
|
||||
<li>表格树模板去掉多余的)</li>
|
||||
<li>代码生成序号修正</li>
|
||||
<li>全屏情况下不调整上外边距</li>
|
||||
<li>代码生成Date字段添加默认格式</li>
|
||||
<li>用户管理角色选择权限控制</li>
|
||||
<li>修复路由懒加载报错问题</li>
|
||||
<li>模板sql.vm添加菜单状态</li>
|
||||
<li>设置用户名称不能修改</li>
|
||||
<li>dialog添加append-to-body属性,防止ie遮罩</li>
|
||||
<li>菜单区分状态和显示隐藏功能</li>
|
||||
<li>升级fastjson到最新版1.2.68 修复安全加固</li>
|
||||
<li>修复代码生成如果选择字典类型缺失逗号问题</li>
|
||||
<li>登录请求params更换为data,防止暴露url</li>
|
||||
<li>日志返回时间格式处理</li>
|
||||
<li>添加handle控制允许拖动的元素</li>
|
||||
<li>布局设置点击扩大范围</li>
|
||||
<li>代码生成列属性排序查询</li>
|
||||
<li>代码生成列支持拖动排序</li>
|
||||
<li>修复时间格式不支持ios问题</li>
|
||||
<li>表单构建添加父级class,防止冲突</li>
|
||||
<li>定时任务并发属性修正</li>
|
||||
<li>角色禁用&菜单隐藏不查询权限</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="v2.2.0 - 2020-03-18">
|
||||
<ol>
|
||||
<li>系统监控新增定时任务功能</li>
|
||||
<li>添加一个打包Web工程bat</li>
|
||||
<li>修复页签鼠标滚轮按下的时候,可以关闭不可关闭的tag</li>
|
||||
<li>修复点击退出登录有时会无提示问题</li>
|
||||
<li>修复防重复提交注解无效问题</li>
|
||||
<li>修复通知公告批量删除异常问题</li>
|
||||
<li>添加菜单时路由地址必填限制</li>
|
||||
<li>代码生成字段描述可编辑</li>
|
||||
<li>修复用户修改个人信息导致缓存不过期问题</li>
|
||||
<li>个人信息创建时间获取正确属性值</li>
|
||||
<li>操作日志详细显示正确类型</li>
|
||||
<li>导入表单击行数据时选中对应的复选框</li>
|
||||
<li>批量替换表前缀逻辑调整</li>
|
||||
<li>固定重定向路径表达式</li>
|
||||
<li>升级element-ui版本到2.13.0</li>
|
||||
<li>操作日志排序调整</li>
|
||||
<li>修复charts切换侧边栏或者缩放窗口显示bug</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="v2.1.0 - 2020-02-24">
|
||||
<ol>
|
||||
<li>新增表单构建</li>
|
||||
<li>代码生成支持树表结构</li>
|
||||
<li>新增用户导入</li>
|
||||
<li>修复动态加载路由页面刷新问题</li>
|
||||
<li>修复地址开关无效问题</li>
|
||||
<li>汉化错误提示页面</li>
|
||||
<li>代码生成已知问题修改</li>
|
||||
<li>修复多数据源下配置关闭出现异常处理</li>
|
||||
<li>添加HTML过滤器,用于去除XSS漏洞隐患</li>
|
||||
<li>修复上传头像控制台出现异常</li>
|
||||
<li>修改用户管理分页不正确的问题</li>
|
||||
<li>修复验证码记录提示错误</li>
|
||||
<li>修复request.js缺少Message引用</li>
|
||||
<li>修复表格时间为空出现的异常</li>
|
||||
<li>添加Jackson日期反序列化时区配置</li>
|
||||
<li>调整根据用户权限加载菜单数据树形结构</li>
|
||||
<li>调整成功登录不恢复按钮,防止多次点击</li>
|
||||
<li>修改用户个人资料同步缓存信息</li>
|
||||
<li>修复页面同时出现el-upload和Editor不显示处理</li>
|
||||
<li>修复在角色管理页修改菜单权限偶尔未选中问题</li>
|
||||
<li>配置文件新增redis密码属性</li>
|
||||
<li>设置mybatis全局的配置文件</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="v2.0.0 - 2019-12-02">
|
||||
<ol>
|
||||
<li>新增代码生成</li>
|
||||
<li>新增@RepeatSubmit注解,防止重复提交</li>
|
||||
<li>新增菜单主目录添加/删除操作</li>
|
||||
<li>日志记录过滤特殊对象,防止转换异常</li>
|
||||
<li>修改代码生成路由脚本错误</li>
|
||||
<li>用户上传头像实时同步缓存,无需重新登录</li>
|
||||
<li>调整切换页签后不重新加载数据</li>
|
||||
<li>添加jsencrypt实现参数的前端加密</li>
|
||||
<li>系统退出删除用户缓存记录</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v1.1.0 - 2019-11-11">
|
||||
<ol>
|
||||
<li>新增在线用户管理</li>
|
||||
<li>新增按钮组功能实现(批量删除、导出、清空)</li>
|
||||
<li>新增查询条件重置按钮</li>
|
||||
<li>新增Swagger全局Token配置</li>
|
||||
<li>新增后端参数校验</li>
|
||||
<li>修复字典管理页面的日期查询异常</li>
|
||||
<li>修改时间函数命名防止冲突</li>
|
||||
<li>去除菜单上级校验,默认为顶级</li>
|
||||
<li>修复用户密码无法修改问题</li>
|
||||
<li>修复菜单类型为按钮时不显示权限标识</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v1.0.0 - 2019-10-08">
|
||||
<ol>
|
||||
<li>SAC前后端分离系统正式发布</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="8">
|
||||
<el-card class="update-log">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>捐赠支持</span>
|
||||
</div>
|
||||
<div class="body">
|
||||
<img
|
||||
src="@/assets/images/pay.png"
|
||||
alt="donate"
|
||||
width="100%"
|
||||
/>
|
||||
<span style="display: inline-block; height: 30px; line-height: 30px"
|
||||
>你可以请作者喝杯咖啡表示鼓励</span
|
||||
>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "Index",
|
||||
name: 'Index',
|
||||
data() {
|
||||
return {
|
||||
// 版本号
|
||||
version: "3.8.6"
|
||||
};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
goTarget(href) {
|
||||
window.open(href, "_blank");
|
||||
window.open(href, '_blank')
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
<style lang="scss" scoped>
|
||||
.home {
|
||||
blockquote {
|
||||
padding: 10px 20px;
|
||||
@ -965,12 +28,14 @@ export default {
|
||||
font-size: 17.5px;
|
||||
border-left: 5px solid #eee;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
border: 0;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
.col-item {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user