Files
peko-admin-web/src/views/official/OfficialConfigView.vue
2024-01-19 10:12:54 +08:00

487 lines
22 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<section class="content">
<div class="box box-danger">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<section class="content">
<div id="configTable"></div>
<div id="toolbar">
<button id="addBtn" class="btn btn-default">
<i class="glyphicon glyphicon-plus"></i>增加
</button>
</div>
</section><!-- .content -->
</div>
<div class="box-body" style="height:150%;">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="browseTitle">官网访问数据-最近30天</h1>
</section>
<!-- .content -->
<div id="browseTable"></div>
</div>
</div>
</section>
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="modalLabel">H5官网配置</h4>
</div>
<div class="modal-body">
<form class="form-horizontal">
<input type="hidden" name="id" v-model="officialConfig.id" />
<div class="form-group">
<label class="col-sm-3 control-label">iOS下载配置:</label>
<div class="col-sm-8">
</div>
</div>
<div class="form-group">
<label for="iosVersion" class="col-sm-3 control-label">iOS版本号:</label>
<div class="col-sm-8">
<input type="text" class="form-control validate[required]" name="categoryCode" id="categoryCode"
v-model="officialConfig.iosVersion" />
</div>
</div>
<div class="form-group">
<label for="iosSkipType" class="col-sm-3 control-label">iOS跳转类型:</label>
<div class="col-sm-8">
<select name="iosSkipType" id="iosSkipType" class="form-control" data-btn-class="btn-warning" v-model="officialConfig.iosSkipType">
<option value="0">AppStore</option>
<option value="1">其它H5链接</option>
</select>
</div>
</div>
<div class="form-group">
<label for="iosSkipUrl" class="col-sm-3 control-label">iOS跳转链接:</label>
<div class="col-sm-8">
<input type="text" class="form-control validate[required]" name="iosSkipUrl" id="iosSkipUrl"
v-model="officialConfig.iosSkipUrl" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Android下载配置:</label>
<div class="col-sm-8">
</div>
</div>
<div class="form-group">
<label for="androidVersion" class="col-sm-3 control-label">Android版本号:</label>
<div class="col-sm-8">
<input type="text" class="form-control validate[required]" name="androidVersion" id="androidVersion"
v-model="officialConfig.androidVersion" />
</div>
</div>
<div class="form-group">
<label for="androidSkipType" class="col-sm-3 control-label">Android跳转类型:</label>
<div class="col-sm-8">
<select name="androidSkipType" id="androidSkipType" class="form-control" data-btn-class="btn-warning" v-model="officialConfig.androidSkipType">
<option value="0">GooglePlay</option>
<option value="1">直接下载Apk</option>
</select>
</div>
</div>
<div class="form-group" v-if="officialConfig.androidSkipType == 0">
<label for="androidSkipUrl" class="col-sm-3 control-label">Android跳转链接:</label>
<div class="col-sm-8">
<input type="text" class="form-control validate[required]" name="androidSkipUrl" id="androidSkipUrl"
v-model="officialConfig.androidSkipUrl" />
</div>
</div>
<div class="form-group">
<label for="androidNormalUrl" class="col-sm-3 control-label">Android常规包:</label>
<div class="col-sm-8">
<input type="file" style="width: 26%; display: inline-block;" id="normalFile" name="uploadFile" @change="changeFile($event)" v-if="officialConfig.androidNormalUrl == ''"/>
<span class="btn col-sm-4" id="normalUploadInfo" style="color:red;"></span>
<button class="btn btn-default col-sm-4" type="button" id="normalUploadBtn" v-if="officialConfig.androidNormalUrl == ''">上传</button>
<button class="btn btn-danger col-sm-4" type="button" id="normalDelBtn" v-if="officialConfig.androidNormalUrl != ''">删除</button>
</div>
</div>
<div class="form-group">
<label for="androidReserveUrl" class="col-sm-3 control-label">Android备用包:</label>
<div class="col-sm-8">
<input type="file" style="width: 26%; display: inline-block;" id="reserveFile" name="uploadFile" v-if="officialConfig.androidReserveUrl == ''"/>
<span class="btn col-sm-4" id="reserveUploadInfo" style="color:red;"></span>
<button class="btn btn-default col-sm-4" type="button" id="reserveUploadBtn" v-if="officialConfig.androidReserveUrl == ''">上传</button>
<button class="btn btn-danger col-sm-4" type="button" id="reserveDelBtn" v-if="officialConfig.androidReserveUrl != ''">删除</button>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">联系方式配置:</label>
<div class="col-sm-8">
</div>
</div>
<div class="form-group">
<label for="contact0" class="col-sm-3 control-label">Wechat:</label>
<div class="col-sm-8">
<input type="text" class="form-control validate[required]" name="contact0" id="contact0"
v-model="officialConfig.contact0" />
</div>
</div>
<div class="form-group">
<label for="contact1" class="col-sm-3 control-label">Line:</label>
<div class="col-sm-8">
<input type="text" class="form-control validate[required]" name="contact1" id="contact1"
v-model="officialConfig.contact1" />
</div>
</div>
<div class="form-group">
<label for="contact2" class="col-sm-3 control-label">Email:</label>
<div class="col-sm-8">
<input type="text" class="form-control validate[required]" name="contact2" id="contact2"
v-model="officialConfig.contact2" />
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="save">保存</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
import { getOfficialConfigList, saveOfficialConfig } from '@/api/official/officialConfig';
import { browseFor30Days } from '@/api/official/officialRecord';
import { uploadQiNiuFile, uploadTencentFile } from '@/api/common/upload';
import { apiResult } from '@/utils/maintainer';
import { showLoading, hideLoading } from '@/utils/maintainer';
export default {
name: 'CategoryView',
data() {
return {
files: {},
configColumns: [
{ field: 'iosVersion', title: 'iOS版本号', align: 'center', width: '15%' },
{
field: 'iosSkipType',
title: 'iOS跳转类型',
align: 'center',
width: '15%',
formatter: function (val, row, index) {
let value = '';
if (val == 0) {
value = 'AppStore';
} else {
value = '其它H5链接';
}
return value;
}
},
{ field: 'iosSkipUrl', title: 'iOS跳转链接', align: 'center', width: '15%' },
{ field: 'androidVersion', title: 'Android版本号', align: 'center', width: '15%' },
{
field: 'androidSkipType',
title: 'Android跳转类型',
align: 'center',
width: '15%',
formatter: function (val, row, index) {
let value = '';
if (val == 0) {
value = 'GooglePlay';
} else if (val == 1) {
value = '直接下载Apk';
}
return value;
}
},
{
field: 'android',
title: 'Android跳转链接',
align: 'center',
width: '15%',
formatter: function (val, row, index) {
let value = 'GooglePlay';
if (row.androidSkipUrl) {
value += row.androidSkipUrl;
} else {
value += '无';
}
value += '<br/>';
value += '常规包:';
if (row.androidNormalUrl) {
value += row.androidNormalUrl;
} else {
value += '无';
}
value += '<br/>';
value += '备用包:';
if (row.androidReserveUrl) {
value += row.androidReserveUrl;
} else {
value += '无';
}
value += '<br/>';
return value;
}
},
{
field: 'contact',
title: '联系方式',
align: 'center',
width: '15%',
formatter: function (val, row, index) {
let value = '';
value += 'Wechat';
if (row.contact0) {
value += row.contact0;
} else {
value += '无';
}
value += '<br/>';
value += 'Line';
if (row.contact1) {
value += row.contact1;
} else {
value += '无';
}
value += '<br/>';
value += 'Email';
if (row.contact2) {
value += row.contact2;
} else {
value += '无';
}
return value;
}
},
{
field: 'id',
title: '操作',
align: 'center',
width: '15%',
formatter: function (val, row, index) {
let value = '<button class="btn btn-sm btn-success opt-edit" data-id="' + val + '" data-index="' + index + '">编辑</button>';
return value;
}
}
],
browseColumns: [
{ field: 'dateTime', title: '日期', align: 'center', width: '15%' },
{ field: 'clientUv', title: '无线官网UV', align: 'center', width: '15%' },
{ field: 'clientPv', title: '无线官网PV', align: 'center', width: '15%' },
{ field: 'iosDownloadPv', title: '无线 iOS下载点击次数', align: 'center', width: '15%' },
{ field: 'androidDownloadPv', title: '无线 安卓下载点击次数', align: 'center', width: '15%' },
{ field: 'pcUv', title: 'PC官网UV', align: 'center', width: '15%' },
{ field: 'pcPv', title: 'PC官网PV', align: 'center', width: '15%' },
{ field: 'pcIosDownloadPv', title: 'PC iOS下载点击次数', align: 'center', width: '15%' },
{ field: 'pcAndroidDownloadPv', title: 'PC 安卓下载点击次数', align: 'center', width: '15%' },
],
officialConfig: {
id: 0,
iosVersion: '',
iosSkipType: 0,
iosSkipUrl: '',
androidVersion: '',
androidSkipType: 0,
androidSkipUrl: '',
androidNormalUrl: '',
androidReserveUrl: '',
contact0: '',
contact1: '',
contact2: '',
},
};
},
created() {
this.init();
this.getBrowse();
},
methods: {
changeFile(event) {
console.log(event);
let target = event.target;
let id = target.id;
this.files[id] = target.files[0];
},
uploadNormal() {
let $this = this;
uploadQiNiuFile($this.files['normalFile']).then(res => {
let data = res.data;
console.log(data);
if (data && data.length > 0) {
let path = data[0];
$this.officialConfig.androidNormalUrl = path;
$('#normalUploadInfo').html(path);
}
hideLoading();
}).catch(e => {
console.error(e);
hideLoading();
});
},
uploadReserve() {
let $this = this;
let file = $('#reserveFile').val();
if (file && file.length > 0) {
showLoading();
uploadTencentFile('reserveFile').then(res => {
let path = res.data;
if (path) {
$this.officialConfig.androidReserveUrl = path;
$('#reserveUploadInfo').html(path);
}
}).finally(() => {
hideLoading();
});
}
},
init() {
this.$nextTick(function () {
let $this = this;
$this.initTable();
$('#addBtn').click(function () {
$this.add();
});
$('#configTable').on('click', '.opt-edit', function () {
$this.edit(this);
});
$('#save').click(function () {
$this.save();
});
$('#normalDelBtn').click(function () {
$this.androidNormalUrl = '';
});
$('#reserveDelBtn').click(function () {
$this.androidReserveUrl = '';
});
$('#normalUploadBtn').click(function () {
$this.uploadNormal();
});
$('#reserveUploadBtn').click(function () {
$this.uploadReserve();
});
});
},
initTable() {
let $this = this;
TableHelper.destroy('#configTable');
$('#configTable').bootstrapTable({
columns: $this.configColumns,
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [1, 10, 20, 30, 50],
search: false,
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var param = {
pageNum: params.pageNumber,
pageSize: params.pageSize,
};
return param;
},
ajax:function(request){
getOfficialConfigList(request.data).then(res => {
let data = res.data;
request.success({
'rows': data.records,
'total': data.total
});
});
},
toolbar: '#toolbar',
});
TableHelper.destroy('#browseTable');
$('#browseTable').bootstrapTable({
columns: $this.browseColumns,
cache: false,
striped: true,
showRefresh: false,
search: false,
pageSize: 10,
pagination: true,
pageList: [1, 10, 20, 30, 50],
sidePagination: "client",
queryParamsType: "undefined",
ajax:function(request){
},
});
},
getBrowse() {
browseFor30Days().then(res => {
let data = res.data;
TableHelper.load('#browseTable', data);
});
},
add() {
this.officialConfig.id = 0;
this.officialConfig.iosVersion = '';
this.officialConfig.iosSkipType = 0;
this.officialConfig.iosSkipUrl = '';
this.officialConfig.androidVersion = '';
this.officialConfig.androidSkipType = 0;
this.officialConfig.androidSkipUrl = '';
this.officialConfig.androidNormalUrl = '';
this.officialConfig.androidReserveUrl = '';
this.officialConfig.contact0 = '';
this.officialConfig.contact1 = '';
this.officialConfig.contact2 = '';
this.show();
},
edit(obj) {
const index = $(obj).data('index');
const record = TableHelper.getData('#configTable')[index];
this.officialConfig.id = record.id;
this.officialConfig.iosVersion = record.iosVersion;
this.officialConfig.iosSkipType = record.iosSkipType;
this.officialConfig.iosSkipUrl = record.iosSkipUrl;
this.officialConfig.androidVersion = record.androidVersion;
this.officialConfig.androidSkipType = record.androidSkipType;
this.officialConfig.androidSkipUrl = record.androidSkipUrl;
this.officialConfig.androidNormalUrl = record.androidNormalUrl;
this.officialConfig.androidReserveUrl = record.androidReserveUrl;
this.officialConfig.contact0 = record.contact0;
this.officialConfig.contact1 = record.contact1;
this.officialConfig.contact2 = record.contact2;
this.show();
},
show() {
$('#editModal').modal('show');
},
save() {
let data = {
id: new Number(this.officialConfig.id),
iosVersion: this.officialConfig.iosVersion,
iosSkipType: new Number(this.officialConfig.iosSkipType),
iosSkipUrl: this.officialConfig.iosSkipUrl,
androidVersion: this.officialConfig.androidVersion,
androidSkipType: new Number(this.officialConfig.androidSkipType),
androidSkipUrl: this.officialConfig.androidSkipUrl,
androidNormalUrl: this.officialConfig.androidNormalUrl,
androidReserveUrl: this.officialConfig.androidReserveUrl,
contact0: this.officialConfig.contact0,
contact1: this.officialConfig.contact1,
contact2: this.officialConfig.contact2,
};
if (data.id == 0) {
data.id = null;
}
saveOfficialConfig(data).then(res => {
console.log(res);
apiResult(res);
TableHelper.doRefresh('#configTable');
TableHelper.doRefresh('#browseTable');
$('#editModal').modal('hide');
});
},
},
}
</script>
<style scoped></style>