fix: 修改白名单页面,安装包页面,发布页面的字段和逻辑判断

This commit is contained in:
张洋川 2024-04-09 09:05:50 +08:00
parent 02253789e8
commit 8a0e6b5a34
6 changed files with 691 additions and 40 deletions

View File

@ -8,10 +8,9 @@
:label="item.title"
:name="item.name"
>
{{item.title}}
</el-tab-pane>
</el-tabs>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
<el-form-item label="安装包名称" prop="installpackName">
<el-input
v-model="queryParams.installpackName"
@ -141,9 +140,6 @@
</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" />
@ -272,23 +268,17 @@
<!-- 安装包详情弹窗 -->
<el-dialog title="安装包详情" :visible.sync="detailOpen" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="100px" size="mini">
<el-form ref="form" :model="form" label-width="150px" size="mini">
<el-row>
<el-col :span="12">
<el-col :span="24">
<el-form-item label="上传方式:">离线上传</el-form-item>
<el-form-item
label="安装包名称:"
>安装包11111</el-form-item>
</el-col>
<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="12">
<el-form-item label="适用系统:">安卓</el-form-item>
<el-form-item label="适用模块:" v-if="activeTabs!=1">登录模块</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="上传时间:">上传时间2024-04-07 1743</el-form-item>
<el-form-item label="上传状态:">已上传</el-form-item>
<el-form-item label="上传人员:">刮刮乐</el-form-item>
@ -451,6 +441,11 @@ export default {
}).catch(() => {});
},
/** 查看详情弹窗 **/
handleDetail() {
this.detailOpen = true;
}
}
};
</script>

View File

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
<el-form-item label="选择APP" prop="configName">
<el-select v-model="queryParams.configType" placeholder="请选择APP" clearable>
<el-option
@ -61,8 +61,6 @@
v-hasPermi="['system:config:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
@ -89,18 +87,25 @@
<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="configKey" :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
prop="platform"
label="系统"
min-width="80"
> <template scope="scope">
<div>{{ scope.row.platform === '0'?'安卓':'IOS' }}</div>
</template>
</el-table-column>
<el-table-column label="公开版" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<el-switch v-model="tagsView" class="drawer-switch" />
<el-switch v-model="tagsView" class="drawer-switch" disabled/>
</template>
</el-table-column>
<el-table-column label="强制更新" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<el-switch v-model="tagsView" class="drawer-switch" />
<el-switch v-model="tagsView" class="drawer-switch" disabled/>
</template>
</el-table-column>
@ -109,13 +114,44 @@
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="configType">
<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="remark" :show-overflow-tooltip="true" />
<el-table-column label="公开时间" align="center" 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
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"
>
<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>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
@ -125,20 +161,6 @@
@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"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:config:edit']"
>发布</el-button>
<el-button
size="mini"
type="text"
@ -146,6 +168,20 @@
@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"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:config:edit']"
>下载安装包</el-button>
<el-button
size="mini"
type="text"
@ -324,8 +360,11 @@ export default {
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.addOpen = true;
this.title = "新增白名单";
// this.addOpen = true;
// this.title = "";
const type= 'add'
this.$router.push("publishList/add" + type);
},
//
handleSelectionChange(selection) {

View File

@ -0,0 +1,398 @@
<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>

View File

@ -0,0 +1,219 @@
<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="100px" size="mini">
<el-row>
<el-col :span="24">
<el-form-item label="APP名称"></el-form-item>
<el-form-item label="上传类型:">安装包11111</el-form-item>
</el-col>
<el-col :span="24">
<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-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-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-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-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-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-form-item label="发布日志:">说明说明</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</el-main>
</el-container>
</div>
</template>
<script>
export default {
name: 'InstallationPackDetail',
components: {
},
data() {
return {
disabledFlag: true,
selectValue: 'code',
checkList: ['Android'],
disabledCode: false,
ruleFlag: null,
ruleFlagList: null,
list: {
rule: {
regularRule: false,
customRule: false
},
// 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
headerOperations: [//
// {
// 'scope': '', // region platform
// 'inclued': '', // 1 2
// 'condition': '', //
// 'desp': ''//
// }
],
grayUserNum: '', //
expiryTime: '', //
desp: JSON.parse(this.$route.query.params).list.desp,
releaseRuleId: '', //
// deviceListId: '', //
whiteListId: ''// id
},
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 }
]
}
}
},
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: {
}
}
</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>

View File

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
<el-form-item label="名单类型" prop="whiteListType">
<el-input
v-model="queryParams.whiteListType"

View File

@ -35,7 +35,7 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://192.168.1.21:7781`,
target: `http://192.168.1.23:22009`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''