增加版本管理上传文件

This commit is contained in:
YeMingfei666 2024-12-10 18:10:54 +08:00
parent 55f47da140
commit f749674816
4 changed files with 689 additions and 470 deletions

BIN
src/assets/img/android.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/assets/img/ios.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -9,8 +9,8 @@ export const entryName = '短剧13.2系统';
// const baseUrl = "http://192.168.1.15:8100/sqx_fast/"
// const baseUrl = "https://video.hnsiyao.cn/sqx_fast/"
const baseUrl = "https://dj-api.hnsiyao.cn/sqx_fast/"
const baseUrl = "https://video.hnsiyao.cn/sqx_fast/"
// const baseUrl = "https://dj-api.hnsiyao.cn/sqx_fast/"
// const $urlMap={
// local:'http://192.168.1.15:8100/sqx_fast/',

View File

@ -1,118 +1,239 @@
<template>
<div>
<el-tabs v-model="activeName" @tab-click="handleClick">
<div style="float: right;margin-right:2%;">
<el-button style='margin: 10px 0;' :disabled="!isAuth('app:add')" size="mini" type="primary"
icon="document" @click="addUpgrade">添加升级</el-button>
<div style="float: right; margin-right: 2%">
<el-button
style="margin: 10px 0"
:disabled="!isAuth('app:add')"
size="mini"
type="primary"
icon="document"
@click="addUpgrade"
>添加升级</el-button
>
</div>
<el-table v-loading="tableDataLoading" :data="upgradeData1.records">
<el-table-column fixed prop="id" label="编号" width="80">
</el-table-column>
<el-table-column prop="wgtUrl" label="统一地址">
</el-table-column>
<el-table-column prop="androidWgtUrl" label="安卓">
</el-table-column>
<el-table-column prop="iosWgtUrl" label="苹果">
</el-table-column>
<el-table-column prop="version" label="安卓版本">
</el-table-column>
<el-table-column prop="iosVersion" label="ios版本">
</el-table-column>
<el-table-column prop="wgtUrl" label="统一地址"> </el-table-column>
<el-table-column prop="androidWgtUrl" label="安卓"> </el-table-column>
<el-table-column prop="iosWgtUrl" label="苹果"> </el-table-column>
<el-table-column prop="version" label="安卓版本"> </el-table-column>
<el-table-column prop="iosVersion" label="ios版本"> </el-table-column>
<el-table-column prop="content" label="升级方式">
<template slot-scope="scope">
<span>{{scope.row.method == 'true' ? '强制升级' : '普通升级'}}</span>
<span>{{
scope.row.method == "true" ? "强制升级" : "普通升级"
}}</span>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
</el-table-column>
<el-table-column prop="createAt" label="创建时间"> </el-table-column>
<el-table-column label="操作" width="200">
<template slot-scope="scope">
<el-button size="mini" type="primary" :disabled="!isAuth('app:update')"
@click="upgradebj(scope.$index, scope.row)">编辑
<el-button
size="mini"
type="primary"
:disabled="!isAuth('app:update')"
@click="upgradebj(scope.$index, scope.row)"
>编辑
</el-button>
<el-button size="mini" type="danger" :disabled="!isAuth('app:delete')"
@click="upgradelete(scope.row)">删除
<el-button
size="mini"
type="danger"
:disabled="!isAuth('app:delete')"
@click="upgradelete(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center;margin-top: 10px;">
<el-pagination @size-change="handleSizeChange2" @current-change="handleCurrentChange2"
:page-sizes="[10, 20, 30, 40]" :page-size="limit" :current-page="page"
layout="total,sizes, prev, pager, next,jumper" :total="upgradeData1.total">
<div style="text-align: center; margin-top: 10px">
<el-pagination
@size-change="handleSizeChange2"
@current-change="handleCurrentChange2"
:page-sizes="[10, 20, 30, 40]"
:page-size="limit"
:current-page="page"
layout="total,sizes, prev, pager, next,jumper"
:total="upgradeData1.total"
>
</el-pagination>
</div>
<!-- 添加升级弹框 -->
<el-dialog title="添加升级" :visible.sync="dialogFormVisible3" center>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;"><i
style="color: #f56c6c;margin-right: 2px;">*</i>统一地址</span>
<el-input style="width: 50%;" v-model="wgtUrl" placeholder="请输入统一地址"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;"><i
style="color: #f56c6c;margin-right: 2px;">*</i>安卓地址</span>
<el-input style="width:50%;" v-model="androidWgtUrl" placeholder="请输入安卓地址"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;"><i
style="color: #f56c6c;margin-right: 2px;">*</i>苹果地址</span>
<el-input style="width: 50%;" v-model="iosWgtUrl" placeholder="请输入苹果地址"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;"><i
style="color: #f56c6c;margin-right: 2px;">*</i>安卓版本号</span>
<el-input style="width: 50%;" v-model="version" placeholder="请输入安卓版本号"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;"><i
style="color: #f56c6c;margin-right: 2px;">*</i>ios版本号</span>
<el-input style="width: 50%;" v-model="iosVersion" placeholder="请输入ios版本号"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;"><i
style="color: #f56c6c;margin-right: 2px;">*</i>升级方式</span>
<el-select v-model="method" placeholder="请选择升级方式" style="width:50%;">
<el-option v-for="item in methods" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;"><i
style="color: #f56c6c;margin-right: 2px;">*</i>升级内容</span>
<el-input style="width: 50%;" v-model="des" placeholder="请输入升级内容"></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible3 = false"> </el-button>
<el-button type="primary" @click="upgradaddTo()"> </el-button>
</div>
</el-dialog>
<!-- 修改升级弹框 -->
<el-dialog title="修改" :visible.sync="dialogFormVisible4" center>
<!-- 添加修改升级弹框 -->
<el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible4" center>
<el-form :model="formupgrad">
<el-form-item label="统一地址:" :label-width="formLabelWidth">
<el-input v-model="formupgrad.wgtUrl" style="width:65%;"></el-input>
<el-form-item
label="统一地址:"
:label-width="formLabelWidth"
>
<el-input v-model="formupgrad.wgtUrl" style="width: 65%"></el-input>
</el-form-item>
<el-form-item label="安卓地址:" :label-width="formLabelWidth">
<el-input v-model="formupgrad.androidWgtUrl" style="width:65%;"></el-input>
<div class="file-box" style="margin-bottom: 10px; display: flex">
<span style="width: 200px; display: inline-block; text-align: right"
><i style="color: #f56c6c; margin-right: 2px">*</i>安卓包</span
>
<div
style="
width: 200px;
height: 148px;
border: 1px dashed #c0ccda;
border-radius: 6px;
text-align: center;
"
>
<el-upload
class="avatar-uploader"
v-model="formupgrad.androidWgtUrl"
action=""
:auto-upload="false"
:onChange="onChooseAndriod"
:show-file-list="false"
:multiple="false"
>
<div
v-if="formupgrad.androidWgtUrl"
class="flex flex-col flex-xy-center"
>
<img
src="../../assets/img/android.png"
style="width: 50px; height: 50px"
/>
<span style="margin-top: 10px">{{
formupgrad.androidWgtUrl | name
}}</span>
</div>
<i
v-if="!formupgrad.androidWgtUrl && percentage <= 0"
class="el-icon-plus avatar-uploader-icon iconss"
></i>
<el-progress
type="circle"
v-if="
!formupgrad.androidWgtUrl &&
percentage > 0 &&
percentage <= 100
&&key=='andriod'
"
:percentage="percentage"
color="#efefef"
></el-progress>
</el-upload>
</div>
</div>
<el-form-item
label="安卓地址:"
:label-width="formLabelWidth"
required
>
<el-input
v-model="formupgrad.androidWgtUrl"
style="width: 65%"
></el-input>
</el-form-item>
<el-form-item label="苹果地址:" :label-width="formLabelWidth">
<el-input v-model="formupgrad.iosWgtUrl" style="width:65%;"></el-input>
<div class="file-box" style="margin-bottom: 10px; display: flex">
<span style="width: 200px; display: inline-block; text-align: right"
>苹果包</span
>
<div
style="
width: 200px;
height: 148px;
border: 1px dashed #c0ccda;
border-radius: 6px;
text-align: center;
"
>
<el-upload
class="avatar-uploader"
v-model="formupgrad.iosWgtUrl"
action=""
:auto-upload="false"
:onChange="onChooseIos"
:show-file-list="false"
:multiple="false"
>
<div
v-if="formupgrad.iosWgtUrl"
class="flex flex-col flex-xy-center"
>
<img
src="../../assets/img/ios.png"
style="width: 50px; height: 50px"
/>
<span style="margin-top: 10px">{{
formupgrad.iosWgtUrl | name
}}</span>
</div>
<i
v-if="!formupgrad.iosWgtUrl && percentage <= 0"
class="el-icon-plus avatar-uploader-icon iconss"
></i>
<el-progress
type="circle"
v-if="
!formupgrad.iosWgtUrl && percentage > 0 && percentage <= 100&&key=='ios'
"
:percentage="percentage"
color="#efefef"
></el-progress>
</el-upload>
</div>
</div>
<el-form-item
label="苹果地址:"
:label-width="formLabelWidth"
>
<el-input
v-model="formupgrad.iosWgtUrl"
style="width: 65%"
></el-input>
</el-form-item>
<el-form-item label="安卓版本号:" :label-width="formLabelWidth">
<el-input v-model="formupgrad.version" style="width:65%;"></el-input>
<el-form-item
label="安卓版本号:"
:label-width="formLabelWidth"
required
>
<el-input
v-model="formupgrad.version"
style="width: 65%"
></el-input>
</el-form-item>
<el-form-item label="ios版本号" :label-width="formLabelWidth">
<el-input v-model="formupgrad.iosVersion" style="width:65%;"></el-input>
<el-form-item
label="ios版本号"
:label-width="formLabelWidth"
required
>
<el-input
v-model="formupgrad.iosVersion"
style="width: 65%"
></el-input>
</el-form-item>
<el-form-item label="升级方式:" :label-width="formLabelWidth">
<el-select v-model="formupgrad.method" placeholder="请选择升级方式" style="width:65%;">
<el-option v-for="item in methods" :key="item.value" :label="item.label" :value="item.value">
<el-form-item
label="升级方式:"
:label-width="formLabelWidth"
required
>
<el-select
v-model="formupgrad.method"
placeholder="请选择升级方式"
style="width: 65%"
>
<el-option
v-for="item in methods"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="升级内容:" :label-width="formLabelWidth">
<el-input v-model="formupgrad.des" style="width:65%;"></el-input>
<el-form-item
label="升级内容:"
:label-width="formLabelWidth"
required
>
<el-input v-model="formupgrad.des" style="width: 65%"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -120,54 +241,61 @@
<el-button type="primary" @click="upgradbjTo()"> </el-button>
</div>
</el-dialog>
</el-tabs>
</div>
</template>
<script>
import { getUUID } from "@/utils";
import OSS from "@/utils/oss-upload.js";
import { $getCredentials } from "@/api/oss.js";
export default {
data() {
return {
dialogTitle: "",
limit: 10,
page: 1,
state: 1,
url: '',
title: '',
type: '',
id: '',
nav: '',
keyword: '',
image_url: '',
androidWgtUrl: '',
iosWgtUrl: '',
wgtUrl: '',
version: '',
iosVersion: '',
des: '',
url: "",
title: "",
type: "",
id: "",
nav: "",
keyword: "",
image_url: "",
androidWgtUrl: "",
key: "",
//
percentage: 0,
iosWgtUrl: "",
wgtUrl: "",
version: "",
iosVersion: "",
des: "",
checkBoxData: [], //
method: 'false',
methods: [{
value: 'false',
label: '普通升级'
method: "false",
methods: [
{
value: "false",
label: "普通升级",
},
{
value: 'true',
label: '强制升级'
}
value: "true",
label: "强制升级",
},
],
formupgrad: {
id: '',
androidWgtUrl: '',
iosWgtUrl: '',
wgtUrl: '',
version: '',
des: '',
method: '',
iosVersion: ''
id: "",
androidWgtUrl: "",
iosWgtUrl: "",
wgtUrl: "",
version: "",
des: "",
method: "",
iosVersion: "",
},
formLabelWidth: '200px',
activeName: 'first',
formLabelWidth: "200px",
activeName: "first",
tableDataLoading: true,
dialogFormVisible3: false,
dialogFormVisible4: false,
@ -177,252 +305,331 @@
upgradeData: [],
upgradeData1: [],
choicenData: [],
types: [{
value: 'word',
label: '文字'
types: [
{
value: "word",
label: "文字",
},
{
value: 'url',
label: '链接'
}
value: "url",
label: "链接",
},
],
bannerData: [],
form1: {
id: '',
url: '',
image_url: ''
id: "",
url: "",
image_url: "",
},
form: {
id: '',
title: '',
url: '',
type: '',
state: '',
types: [{
value: 'word',
label: '文字'
id: "",
title: "",
url: "",
type: "",
state: "",
types: [
{
value: "word",
label: "文字",
},
{
value: 'url',
label: '链接'
}
value: "url",
label: "链接",
},
],
},
formcomp: {
id: '',
state: '',
title: '',
url: '',
image_url: ''
}
id: "",
state: "",
title: "",
url: "",
image_url: "",
},
};
},
filters: {
name(str) {
if (!str) {
return "";
}
return str.substr(str.lastIndexOf("/") + 1);
},
},
methods: {
async initOssClient() {
console.log("initOssClient");
const { data } = await $getCredentials();
if (data.code == 0) {
const res = data.data;
console.log(res);
this.ossClient = new OSS({ ...res, stsToken: res.securityToken });
}
},
onFileIosCHange(data) {
this.onFileCHange(data);
},
async onChooseAndriod(data) {
this.formupgrad.androidWgtUrl = "";
this.percentage = 0;
this.key='andriod'
const url = await this.uploadFie(data);
this.percentage = 0;
console.log(url);
if (url) {
this.formupgrad.androidWgtUrl = url;
}
},
async onChooseIos(data) {
this.formupgrad.iosWgtUrl = "";
this.percentage = 0;
this.key='ios'
const url = await this.uploadFie(data);
console.log(url);
this.percentage = 0;
if (url) {
this.formupgrad.iosWgtUrl = url;
}
},
async uploadFie(data) {
console.log(data);
const date = new Date();
const houzhui = "." + data.name.substr(data.name.lastIndexOf(".") + 1);
const name ="app/" + 'test-duanju' + houzhui;
const fileRes = await this.ossClient.partUpload(name, data.raw, (p) => {
this.percentage = Math.floor(p * 100);
console.log(this.percentage);
// UI
});
console.log("fileRes");
console.log(fileRes);
if (!fileRes) {
this.percentage = 0;
this.$notify({
title: "失败",
message: `上传阿里云失败`,
type: "error",
});
return;
}
if (fileRes.name == "cancel") {
return;
}
return fileRes.replace(
"https://sy-duanju.oss-cn-nanjing.aliyuncs.com/",
"https://short-video.hnsiyao.cn/"
);
},
handleSizeChange2(val) {
this.limit = val;
this.upgradeSelect()
this.upgradeSelect();
},
handleCurrentChange2(val) {
this.page = val;
this.upgradeSelect()
this.upgradeSelect();
},
handleClick(tab, event) {
this.upgradeSelect()
this.upgradeSelect();
},
//
addUpgrade() {
this.dialogFormVisible3 = true
this.initOssClient()
this.dialogFormVisible4 = true;
this.dialogTitle = "添加升级";
},
//
upgradaddTo() {
if (this.wgtUrl == '') {
if (this.formupgrad.wgtUrl == "") {
this.$notify({
title: '提示',
title: "提示",
duration: 1800,
message: '请输入统一地址',
type: 'warning'
message: "请输入统一地址",
type: "warning",
});
return
return;
}
if (this.androidWgtUrl == '') {
if (this.formupgrad.androidWgtUrl == "") {
this.$notify({
title: '提示',
title: "提示",
duration: 1800,
message: '请输入安卓地址',
type: 'warning'
message: "请输入安卓地址",
type: "warning",
});
return
return;
}
if (this.iosWgtUrl == '') {
if (this.formupgrad.iosWgtUrl == "") {
this.$notify({
title: '提示',
title: "提示",
duration: 1800,
message: '请输入苹果地址',
type: 'warning'
message: "请输入苹果地址",
type: "warning",
});
return
return;
}
if (this.version == '') {
if (this.formupgrad.version == "") {
this.$notify({
title: '提示',
title: "提示",
duration: 1800,
message: '请输入安卓版本号',
type: 'warning'
message: "请输入安卓版本号",
type: "warning",
});
return
return;
}
if (this.iosVersion == '') {
if (this.formupgrad.iosVersion == "") {
this.$notify({
title: '提示',
title: "提示",
duration: 1800,
message: '请输入苹果版本号',
type: 'warning'
message: "请输入苹果版本号",
type: "warning",
});
return
return;
}
if (this.method == '') {
if (this.formupgrad.method == "") {
this.$notify({
title: '提示',
title: "提示",
duration: 1800,
message: '请选择升级方式',
type: 'warning'
message: "请选择升级方式",
type: "warning",
});
return
return;
}
if (this.des == '') {
if (this.formupgrad.des == "") {
this.$notify({
title: '提示',
title: "提示",
duration: 1800,
message: '请输入升级内容',
type: 'warning'
message: "请输入升级内容",
type: "warning",
});
return
return;
}
this.$http({
url: this.$http.adornUrl('appinfo/save'),
method: 'post',
data: this.$http.adornData({
'androidWgtUrl': this.androidWgtUrl,
'iosWgtUrl': this.iosWgtUrl,
'wgtUrl': this.wgtUrl,
'version': this.version,
'iosVersion': this.iosVersion,
'method': this.method,
'des': this.des
})
}).then(({
data
}) => {
this.dialogFormVisible3 = false
if (this.dialogTitle == "添加升级") {
return this.$http({
url: this.$http.adornUrl("appinfo/save"),
method: "post",
data: this.$http.adornData({ ...this.formupgrad, id: "" }),
}).then(({ data }) => {
this.dialogFormVisible3 = false;
this.upgradeSelect();
this.$message({
message: '操作成功',
type: 'success',
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.upgradeSelect()
onClose: () => {},
});
});
}
})
})
this.upgradbjTo();
},
//
upgradebj(index, rows) {
this.initOssClient()
this.dialogFormVisible4 = true;
this.formupgrad.androidWgtUrl = rows.androidWgtUrl;
this.formupgrad.id = rows.id;
this.formupgrad.iosWgtUrl = rows.iosWgtUrl;
this.formupgrad.wgtUrl = rows.wgtUrl;
this.formupgrad.version = rows.version;
this.formupgrad.iosVersion = rows.iosVersion;
this.formupgrad.des = rows.des;
this.formupgrad.method = rows.method;
this.dialogTitle = "修改";
Object.assign(this.formupgrad, rows);
},
//
upgradbjTo() {
this.$http({
url: this.$http.adornUrl('appinfo/save'),
method: 'post',
url: this.$http.adornUrl("appinfo/save"),
method: "post",
data: this.$http.adornData({
'id': this.formupgrad.id,
'androidWgtUrl': this.formupgrad.androidWgtUrl,
'iosWgtUrl': this.formupgrad.iosWgtUrl,
'wgtUrl': this.formupgrad.wgtUrl,
'version': this.formupgrad.version,
'iosVersion': this.formupgrad.iosVersion,
'des': this.formupgrad.des,
'method': this.formupgrad.method,
})
}).then(({
data
}) => {
this.dialogFormVisible4 = false
id: this.formupgrad.id,
androidWgtUrl: this.formupgrad.androidWgtUrl,
iosWgtUrl: this.formupgrad.iosWgtUrl,
wgtUrl: this.formupgrad.wgtUrl,
version: this.formupgrad.version,
iosVersion: this.formupgrad.iosVersion,
des: this.formupgrad.des,
method: this.formupgrad.method,
}),
}).then(({ data }) => {
this.dialogFormVisible4 = false;
this.upgradeSelect();
this.$message({
message: '操作成功',
type: 'success',
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.upgradeSelect()
}
})
})
},
});
});
},
//
upgradelete(row) {
let delid = row.id
this.id = delid
this.$confirm(`确定删除此条信息?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let delid = row.id;
this.id = delid;
this.$confirm(`确定删除此条信息?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$http({
url: this.$http.adornUrl(`appinfo/delete/${this.id}`),
method: 'get',
params: this.$http.adornParams({})
}).then(({
data
}) => {
method: "get",
params: this.$http.adornParams({}),
}).then(({ data }) => {
this.$message({
message: '删除成功',
type: 'success',
message: "删除成功",
type: "success",
duration: 1500,
onClose: () => {
this.name = '';
this.upgradeSelect()
}
this.name = "";
this.upgradeSelect();
},
});
});
})
})
}).catch(() => {})
.catch(() => {});
},
//
upgradeSelect() {
this.tableDataLoading = true
this.tableDataLoading = true;
this.$http({
url: this.$http.adornUrl(`appinfo/list?page=${this.page}&limit=${this.limit}`),
method: 'get',
params: this.$http.adornParams({})
}).then(({
data
}) => {
this.tableDataLoading = false
url: this.$http.adornUrl(
`appinfo/list?page=${this.page}&limit=${this.limit}`
),
method: "get",
params: this.$http.adornParams({}),
}).then(({ data }) => {
this.tableDataLoading = false;
let returnData = data.data;
this.upgradeData1 = returnData
})
this.upgradeData1 = returnData;
});
},
},
mounted() {
console.log('···························')
this.upgradeSelect()
}
console.log("···························");
this.upgradeSelect();
this.initOssClient();
},
};
</script>
<style>
<style scoped>
/deep/ .file-box .el-upload {
width: 100%;
height: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
/deep/ .avatar-uploader {
width: 100%;
box-sizing: border-box;
height: 100%;
}
.el-upload {
width: 100%;
height: 100%;
box-sizing: border-box;
}
.customWidth {
width: 80% !important;
}
@ -431,9 +638,11 @@
display: block;
max-width: 100%;
text-align: center;
border: 1px dotted rgba(67, 79, 103, .4);
border: 1px dotted rgba(67, 79, 103, 0.4);
}
.margin-auto {
margin: auto;
}
.cards {
padding: 0 8px;
margin-bottom: 15px;
@ -444,7 +653,7 @@
justify-content: center;
height: 150px;
line-height: 150px;
text-decoration: none
text-decoration: none;
}
.bannerManin {
@ -455,7 +664,17 @@
justify-content: center;
align-items: center;
height: 113px;
color: rgba(0, 0, 0, .65);
color: rgba(0, 0, 0, 0.65);
}
.flex {
display: flex;
}
.flex-col {
flex-direction: column;
}
.flex-xy-center {
justify-content: center;
align-items: center;
}
.bannerManin span {
@ -475,13 +694,13 @@
border: 1px solid #e8e8e8;
padding: 11px;
font-size: 14px;
color: #3E8EF7;
color: #3e8ef7;
}
.bannerbtn a {
flex: 1;
text-align: center;
color: #3E8EF7 !important;
color: #3e8ef7 !important;
text-decoration: none;
}
</style>