30 Commits
gaohao ... gyq

Author SHA1 Message Date
gyq
15354833e2 优化全局系统设置 2025-01-14 15:16:20 +08:00
gyq
21f049f65c 优化订单汇总 2025-01-14 14:31:35 +08:00
gyq
eb33ef97b1 会员列表新增订单汇总 2025-01-14 13:32:54 +08:00
gyq
65d61c5ebc 新增实名用户列表 2025-01-14 08:51:36 +08:00
gyq
93fb3bc46f 优化 2025-01-13 16:45:07 +08:00
gyq
95d1eda7a3 提现中心优化 2025-01-13 16:27:25 +08:00
gyq
67a15a9183 Merge branch 'master' of e.coding.net:g-cphe0354/duanju/video_admin into gyq 2025-01-09 17:30:13 +08:00
6f83ecd9f9 弹窗公共列表增加类型展示 2025-01-09 16:41:55 +08:00
2c65bfca6a 增加弹窗广告类型,修改内容为富文本 2025-01-09 15:54:22 +08:00
gyq
c65278cb28 优化提现统计 2025-01-09 14:59:48 +08:00
gyq
2cd5bb75dd 提现中心新增危险用户提示 2025-01-08 15:18:01 +08:00
wwz
2dc98838c7 累计提现金额 保留后两位 2025-01-07 11:09:59 +08:00
wwz
5723fb853a 处理分页问题 2025-01-07 09:48:42 +08:00
wwz
114ee304d8 提现信息页面空白 2025-01-06 22:11:07 +08:00
wwz
b58f60bb23 userId 2025-01-06 16:04:25 +08:00
6b711858e6 系统配置增加是否返回给app 2025-01-04 14:51:41 +08:00
gyq
729d4bc645 优化分页 2025-01-03 10:52:05 +08:00
cc6d86b07c Merge branch 'master' of https://e.coding.net/g-cphe0354/duanju/video_admin 2025-01-02 17:07:52 +08:00
d67b7e4342 消息中心增加首页弹窗公共 2025-01-02 17:07:49 +08:00
gyq
42e84864c4 优化支付宝提现统计 2024-12-31 15:55:59 +08:00
gyq
c5c679e1ab 财务中心新增支付宝提现统计 2024-12-31 15:34:22 +08:00
ef09b41510 处理请求多余/问题 2024-12-30 19:07:40 +08:00
697436ee71 去除请求中的// 2024-12-30 18:23:10 +08:00
757a97d254 修复上传正式apk名称判断 2024-12-28 19:59:48 +08:00
52c0552e43 Merge branch 'ymf' of https://e.coding.net/g-cphe0354/duanju/video_admin 2024-12-28 09:48:08 +08:00
f9cf68d83e 修改请求域名 2024-12-28 09:28:26 +08:00
gyq
1b130a9baa 更新 2024-12-27 17:46:46 +08:00
gyq
88156a6e4e 提现审核增加信息 2024-12-27 17:08:30 +08:00
gyq
653ab223c9 更新体现表格 2024-12-27 15:03:02 +08:00
a8f2a8c8b4 gulp打包revReplace方法换回replace 2024-12-27 13:47:05 +08:00
24 changed files with 2098 additions and 812 deletions

View File

@@ -32,14 +32,14 @@ gulp.task('create:versionCatalog', gulp.series('build', function () {
// 替换${versionPath}/static/js/manifest.js window.SITE_CONFIG.cdnUrl占位变量
gulp.task('replace:cdnUrl', gulp.series('create:versionCatalog', function () {
return gulp.src(`${versionPath}/static/js/manifest.js`)
.pipe($.revReplace(new RegExp(`"${require('./config').build.assetsPublicPath}"`, 'g'), 'window.SITE_CONFIG.cdnUrl + "/"'))
.pipe($.replace(new RegExp(`"${require('./config').build.assetsPublicPath}"`, 'g'), 'window.SITE_CONFIG.cdnUrl + "/"'))
.pipe(gulp.dest(`${versionPath}/static/js/`))
}))
// 替换${versionPath}/static/config/index-${env}.js window.SITE_CONFIG['version']配置变量
gulp.task('replace:version', gulp.series('create:versionCatalog', function () {
return gulp.src(`${versionPath}/static/config/index-${env}.js`)
.pipe($.revReplace(/window.SITE_CONFIG\['version'\] = '.*'/g, `window.SITE_CONFIG['version'] = '${version}'`))
.pipe($.replace(/window.SITE_CONFIG\['version'\] = '.*'/g, `window.SITE_CONFIG['version'] = '${version}'`))
.pipe(gulp.dest(`${versionPath}/static/config/`))
}))

2
src/api/announcement.js Normal file
View File

@@ -0,0 +1,2 @@
import {API1} from './classApi'
export const $announcement=new API1('announcement')

View File

@@ -25,4 +25,32 @@ class API {
}
}
export class API1 {
constructor(url) {
const map = {
add: 'POST',
del: 'DELETE',
update: 'PUT',
get: 'GET'
}
this.url = url
for (let key in map) {
this[key] = function (data) {
data = Array.isArray(data) ? data : {
...data
}
if (key === 'del') {
}
const par={ url:key==='get'?url+'/list':url, method: map[key] }
if(key==='get'){
par.params=data
}else{
par.data=data
}
return $http(par)
}
}
}
}
export default API

14
src/api/viplist.js Normal file
View File

@@ -0,0 +1,14 @@
import $http from "@/utils/httpRequest";
/**
* 根据交易订单号获取汇总信息
* @param {*} params
* @returns
*/
export function queryByTradeNo(params) {
return $http({
url: "/order/queryByTradeNo",
method: "get",
params
});
}

View File

@@ -25,3 +25,54 @@ export function cashOutAuditAudit(data) {
data
});
}
/**
* 提现统计
* @param {*} params
* @returns
*/
export function summary_query(params) {
return $http({
url: "/cashOutAudit/alipay/transfer/summary/query",
method: "get",
params
});
}
/**
* 实名信息列表
* @param {*} params
* @returns
*/
export function userInfo_list(params) {
return $http({
url: "/czg/userInfo/list",
method: "get",
params
});
}
/**
* 实名信息修改
* @param {*} data
* @returns
*/
export function userInfo(data) {
return $http({
url: "/czg/userInfo",
method: "put",
data
});
}
/**
* 实名删除
* @param {*} data
* @returns
*/
export function userInfoDel(data) {
return $http({
url: "/czg/userInfo",
method: "DELETE",
data
});
}

View File

@@ -2,9 +2,10 @@ export const testUrl='video-admin';
export const productUrl='dj-admin';
// const baseUrl = "http://192.168.1.7:8100/czg/"
const baseUrl = "https://video.hnsiyao.cn/czg/" //
// const baseUrl = "https://api.tianjinzhitongdaohe.com/czg/"
// const baseUrl = "https://dj-api.hnsiyao.cn/czg/" // 线上
const baseUrl = "https://web-api.hnsiyao.cn/czg/" //测试
// const baseUrl = "https://web.hnsiyao.cn/czg/" // 线上
export default{
baseUrl

View File

@@ -35,6 +35,7 @@ http.interceptors.request.use(config => {
// config.baseURL = $urlMap[$env]
const arr = config.url.split('czg/')
config.url = baseUrl + (arr.length >= 2 ? arr[1] : arr[0])
config.url = config.url.replace('czg//', 'czg/');
// config.url = "https://dj-api.hnsiyao.cn/czg/"
return config
}, error => {

View File

@@ -9,6 +9,13 @@
</el-table-column>
<el-table-column prop="value" label="内容" width="500">
</el-table-column>
<el-table-column label="是否返回给App" prop="isAppUse" width="120">
<template slot-scope="scope">
<!-- <el-switch v-model="scope.row.isAppUse" @change="updateAmendNotice($event, scope.row)"
:active-value="1" :inactive-value="0"></el-switch> -->
{{ scope.row.isAppUse == 1 ? '是' : '否' }}
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
</el-table-column>
<el-table-column label="操作" prop="id" width="120">
@@ -28,7 +35,9 @@
</el-table-column>
<el-table-column prop="value" label="内容" width="500">
<template slot-scope="scope">
<div style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;max-height:80px;">{{scope.row.value}}</div>
<div
style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;line-clamp: 3;overflow: hidden;max-height:80px;">
{{ scope.row.value }}</div>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
@@ -107,8 +116,8 @@
<el-table-column prop="value" label="内容" width="500">
<template slot-scope="scope">
<div
style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 4;overflow: hidden;">
{{scope.row.value}}</div>
style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 4;line-clamp: 4;overflow: hidden;">
{{ scope.row.value }}</div>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
@@ -161,48 +170,52 @@
</el-table>
</el-tab-pane>
<el-tab-pane label="文件上传配置" name="wenjian">
<el-table v-loading="tableDataLoading" :data="tableData">
<el-table-column fixed prop="type" label="编号" align="center" width="80">
</el-table-column>
<el-table-column prop="min" label="类型">
</el-table-column>
<el-table-column prop="value" label="内容" width="500">
<template slot-scope="scope">
<div style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;max-height:80px;">{{scope.row.value}}</div>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
</el-table-column>
<el-table-column label="操作" prop="id" width="120">
<template slot-scope="scope">
<el-button size="mini" type="primary" :disabled="!isAuth('allocationList:update')"
@click="amend(scope.$index, scope.row)">编辑
</el-button>
</template>
</el-table-column>
</el-table>
<el-table v-loading="tableDataLoading" :data="tableData">
<el-table-column fixed prop="type" label="编号" align="center" width="80">
</el-table-column>
<el-table-column prop="min" label="类型">
</el-table-column>
<el-table-column prop="value" label="内容" width="500">
<template slot-scope="scope">
<div
style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;line-clamp: 3;overflow: hidden;max-height:80px;">
{{ scope.row.value }}</div>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
</el-table-column>
<el-table-column label="操作" prop="id" width="120">
<template slot-scope="scope">
<el-button size="mini" type="primary" :disabled="!isAuth('allocationList:update')"
@click="amend(scope.$index, scope.row)">编辑
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="协议配置" name="xieyi">
<el-table v-loading="tableDataLoading" :data="tableData">
<el-table-column fixed prop="type" label="编号" align="center" width="80">
</el-table-column>
<el-table-column prop="min" label="类型">
</el-table-column>
<el-table-column prop="value" label="内容" width="500">
<template slot-scope="scope">
<div style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;max-height:80px;">{{scope.row.value}}</div>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
</el-table-column>
<el-table-column label="操作" prop="id" width="120">
<template slot-scope="scope">
<el-button size="mini" type="primary" :disabled="!isAuth('allocationList:update')"
@click="amend(scope.$index, scope.row)">编辑
</el-button>
</template>
</el-table-column>
</el-table>
<el-table v-loading="tableDataLoading" :data="tableData">
<el-table-column fixed prop="type" label="编号" align="center" width="80">
</el-table-column>
<el-table-column prop="min" label="类型">
</el-table-column>
<el-table-column prop="value" label="内容" width="500">
<template slot-scope="scope">
<div
style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;line-clamp: 3;overflow: hidden;max-height:80px;">
{{ scope.row.value }}</div>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
</el-table-column>
<el-table-column label="操作" prop="id" width="120">
<template slot-scope="scope">
<el-button size="mini" type="primary" :disabled="!isAuth('allocationList:update')"
@click="amend(scope.$index, scope.row)">编辑
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="开关配置" name="kaiguan">
<el-table v-loading="tableDataLoading" :data="tableData">
@@ -232,8 +245,8 @@
<el-table-column prop="value" label="内容">
<template slot-scope="scope">
<div
style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;max-height:80px;">
{{scope.row.value}}
style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;line-clamp: 3;overflow: hidden;max-height:80px;">
{{ scope.row.value }}
</div>
</template>
</el-table-column>
@@ -256,19 +269,22 @@
<el-input v-model="form.min" style="width:65%;" readonly></el-input>
</el-form-item>
<el-form-item label="内容:" :label-width="formLabelWidth">
<quill-editor v-if="form.conditionFrom=='xieyi'" ref="myTextEditor" v-model="form.value" :options="quillOption"
style="padding-bottom: 50px;height: 300px;width: 72%;display: inline-table;margin-bottom: 60px;">
<quill-editor v-if="form.conditionFrom == 'xieyi'" ref="myTextEditor" v-model="form.value"
:options="quillOption"
style="padding-bottom: 50px;height: 300px;width: 72%;display: inline-table;margin-bottom: 60px;">
</quill-editor>
<div v-else-if="form.conditionFrom=='image'">
<div v-else-if="form.conditionFrom == 'image'">
<!-- <el-input v-model="form.value" style="width:65%;"></el-input> -->
<el-upload class="avatar-uploader" v-model="form.value"
:action="$http.adornUrlUp('alioss/upload')" :show-file-list="false"
:action="$http.adornUrlUp('alioss/upload')" :show-file-list="false"
:on-success="handleAvatarSuccess1">
<img v-if="form.value" :src="form.value" class="avatar" style="width: 148px;height: 148px;" />
<i v-else class="el-icon-plus avatar-uploader-icon" style="font-size: 28px;color: #8c939d"></i>
<img v-if="form.value" :src="form.value" class="avatar"
style="width: 148px;height: 148px;" />
<i v-else class="el-icon-plus avatar-uploader-icon"
style="font-size: 28px;color: #8c939d"></i>
</el-upload>
</div>
<div v-else-if="form.conditionFrom=='kaiguan'">
<div v-else-if="form.conditionFrom == 'kaiguan'">
<div>
<el-radio-group v-model="form.value">
<el-radio label="是"></el-radio>
@@ -276,9 +292,17 @@
</el-radio-group>
</div>
</div>
<el-input v-else v-model="form.value" :rows="4" style="width:65%;"></el-input>
<el-input v-else v-model="form.value" :rows="4" style="width:65%;"></el-input>
<!-- <el-input v-model="form.value" style="width:65%;"></el-input> -->
</el-form-item>
<el-form-item label="是否返回给App" :label-width="formLabelWidth">
<!-- <el-switch v-model="form.isAppUse" :active-value="1" :inactive-value="0"></el-switch> -->
<el-radio-group v-model="form.isAppUse">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
@@ -289,233 +313,264 @@
</template>
<script>
import {
import {
quillEditor
} from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
import quillConfig from '../locality/quill-config.js'
export default {
components: {
quillEditor
} from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
import quillConfig from '../locality/quill-config.js'
export default {
components: {
quillEditor
},
data() {
return {
quillOption: quillConfig,
openValue: '',
closeValue: '否',
limit: 10,
page: 0,
},
data() {
return {
quillOption: quillConfig,
openValue: '是',
closeValue: '否',
limit: 10,
page: 0,
min: '',
value: '',
id: '',
condition: 'xitong',
activeName: 'first',
dialogFormVisible: false,
dialogFormVisible1: false,
tableDataLoading: true,
formLabelWidth: '200px',
form: {
id: '',
min: '',
value: '',
type: '',
isAppUse: false,
},
form2: {
id: '',
condition: 'xitong',
activeName: 'first',
dialogFormVisible: false,
dialogFormVisible1: false,
tableDataLoading: true,
formLabelWidth: '200px',
form: {
id: '',
min: '',
value: '',
type: '',
},
form2: {
id: '',
min: '',
value: '',
type: '',
},
values: [{
value: 1,
label: '是'
},
{
value: 2,
label: '否'
}
],
tableData: [],
checkBoxData: [] //多选框选择的值
min: '',
value: '',
type: '',
},
values: [{
value: 1,
label: '是'
},
{
value: 2,
label: ''
}
},
methods: {
handleSizeChange(val) {
this.limit = val;
this.dataSelect();
},
handleCurrentChange(val) {
this.page = val - 1;
this.dataSelect();
},
handleClick(tab, event) {
if (tab._props.label == '全局系统配置') {
this.condition = 'xitong'
this.dataSelect()
}
if (tab._props.label == '首页配置') {
this.condition = 'shouye'
this.dataSelect()
}
if (tab._props.label == '微信配置') {
this.condition = 'weixin'
this.dataSelect()
}
if (tab._props.label == '支付宝配置') {
this.condition = 'zhifubao'
this.dataSelect()
}
if (tab._props.label == '短信配置') {
this.condition = 'duanxin'
this.dataSelect()
}
if (tab._props.label == '任务系统配置') {
this.condition = 'renwu'
this.dataSelect()
}
if (tab._props.label == '文件上传配置') {
this.condition = 'oss'
this.dataSelect()
}
if (tab._props.label == '服务费配置') {
this.condition = 'fuwufei'
this.dataSelect()
}
if (tab._props.label == '协议配置') {
this.condition = 'xieyi'
this.dataSelect()
}
if (tab._props.label == '图片配置') {
this.condition = 'image'
this.dataSelect()
}
if (tab._props.label == '开关配置') {
this.condition = 'kaiguan'
this.dataSelect()
}
if (tab._props.label == '客服配置') {
this.condition = 'kefu'
this.dataSelect()
}
},
// 修改弹框
amend(index, rows) {
this.dialogFormVisible = true;
this.form.id = rows.id;
this.form.type = rows.type
this.form.min = rows.min;
this.form.value = rows.value;
this.form.max = rows.max;
this.form.createAt = rows.createAt;
this.form.conditionFrom = rows.conditionFrom
},
// 修改
amendNoticeTo() {
this.$http({
url: this.$http.adornUrl('common/update'),
method: 'post',
data: this.$http.adornData({
'id': this.form.id,
'type': this.form.type,
'value': this.form.value,
'min': this.form.min,
'max': this.form.max,
'createAt': this.form.createAt,
'conditionFrom': this.form.conditionFrom
})
}).then(({
data
}) => {
if (data && data.code === 0) {
this.dialogFormVisible = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dataSelect()
}
})
} else {
this.$message.error(data.msg)
}
})
},
// 修改首页
amendWhether(index, rows) {
this.dialogFormVisible1 = true;
this.form2.id = rows.id;
this.form2.type = rows.type
this.form2.min = rows.min;
this.form2.value = rows.value;
this.form2.max = rows.max;
this.form2.createAt = rows.createAt;
this.form2.conditionFrom = rows.conditionFrom
},
WhetherNoticeTo() {
this.$http({
url: this.$http.adornUrl('common/update'),
method: 'post',
data: this.$http.adornData({
'id': this.form2.id,
'type': this.form2.type,
'value': this.form2.value,
'min': this.form2.min,
'max': this.form2.max,
'createAt': this.form2.createAt,
'conditionFrom': this.form2.conditionFrom
})
}).then(({
data
}) => {
if (data && data.code === 0) {
this.dialogFormVisible1 = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dataSelect()
}
})
} else {
this.$message.error(data.msg)
}
})
},
// 获取数据列表
dataSelect() {
this.tableDataLoading = true
this.$http({
url: this.$http.adornUrl(`common/type/condition/${this.condition}`),
method: 'get',
params: this.$http.adornParams({})
}).then(({
data
}) => {
if (data && data.code === 0) {
this.tableDataLoading = false
let returnData = data.data;
this.tableData = returnData
}
})
},
handleAvatarSuccess1(file, fileList) {
this.form.value = file.data
console.log('file.data',file.data)
},
},
mounted() {
this.dataSelect()
],
tableData: [],
checkBoxData: [] //多选框选择的值
}
},
methods: {
handleSizeChange(val) {
this.limit = val;
this.dataSelect();
},
handleCurrentChange(val) {
this.page = val - 1;
this.dataSelect();
},
handleClick(tab, event) {
if (tab._props.label == '全局系统配置') {
this.condition = 'xitong'
this.dataSelect()
}
if (tab._props.label == '首页配置') {
this.condition = 'shouye'
this.dataSelect()
}
if (tab._props.label == '微信配置') {
this.condition = 'weixin'
this.dataSelect()
}
if (tab._props.label == '支付宝配置') {
this.condition = 'zhifubao'
this.dataSelect()
}
if (tab._props.label == '短信配置') {
this.condition = 'duanxin'
this.dataSelect()
}
if (tab._props.label == '任务系统配置') {
this.condition = 'renwu'
this.dataSelect()
}
if (tab._props.label == '文件上传配置') {
this.condition = 'oss'
this.dataSelect()
}
if (tab._props.label == '服务费配置') {
this.condition = 'fuwufei'
this.dataSelect()
}
if (tab._props.label == '协议配置') {
this.condition = 'xieyi'
this.dataSelect()
}
if (tab._props.label == '图片配置') {
this.condition = 'image'
this.dataSelect()
}
if (tab._props.label == '开关配置') {
this.condition = 'kaiguan'
this.dataSelect()
}
if (tab._props.label == '客服配置') {
this.condition = 'kefu'
this.dataSelect()
}
},
// 修改弹框
amend(index, rows) {
this.dialogFormVisible = true;
this.form.id = rows.id;
this.form.type = rows.type
this.form.min = rows.min;
this.form.value = rows.value;
this.form.max = rows.max;
this.form.createAt = rows.createAt;
this.form.isAppUse = rows.isAppUse;
this.form.conditionFrom = rows.conditionFrom
},
updateAmendNotice(e, row) {
this.$http({
url: this.$http.adornUrl('common/update'),
method: 'post',
data: this.$http.adornData({
...row,
isAppUse: e
})
}).then(({
data
}) => {
if (data && data.code === 0) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
}
})
this.dataSelect()
} else {
this.$message.error(data.msg)
}
})
},
// 修改
amendNoticeTo() {
this.$http({
url: this.$http.adornUrl('common/update'),
method: 'post',
data: this.$http.adornData({
'id': this.form.id,
'type': this.form.type,
'value': this.form.value,
'min': this.form.min,
'max': this.form.max,
'createAt': this.form.createAt,
'conditionFrom': this.form.conditionFrom,
isAppUse: this.form.isAppUse
})
}).then(({
data
}) => {
if (data && data.code === 0) {
this.dialogFormVisible = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
}
})
this.dataSelect()
} else {
this.$message.error(data.msg)
}
})
},
// 修改首页
amendWhether(index, rows) {
this.dialogFormVisible1 = true;
this.form2.id = rows.id;
this.form2.type = rows.type
this.form2.min = rows.min;
this.form2.value = rows.value;
this.form2.max = rows.max;
this.form2.createAt = rows.createAt;
this.form2.conditionFrom = rows.conditionFrom
},
WhetherNoticeTo() {
this.$http({
url: this.$http.adornUrl('common/update'),
method: 'post',
data: this.$http.adornData({
'id': this.form2.id,
'type': this.form2.type,
'value': this.form2.value,
'min': this.form2.min,
'max': this.form2.max,
'createAt': this.form2.createAt,
'conditionFrom': this.form2.conditionFrom
})
}).then(({
data
}) => {
if (data && data.code === 0) {
this.dialogFormVisible1 = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dataSelect()
}
})
} else {
this.$message.error(data.msg)
}
})
},
// 获取数据列表
dataSelect() {
this.tableDataLoading = true
this.$http({
url: this.$http.adornUrl(`common/type/condition/${this.condition}`),
method: 'get',
params: this.$http.adornParams({})
}).then(({
data
}) => {
if (data && data.code === 0) {
this.tableDataLoading = false
let returnData = data.data;
this.tableData = returnData
}
})
},
handleAvatarSuccess1(file, fileList) {
this.form.value = file.data
console.log('file.data', file.data)
},
},
mounted() {
this.dataSelect()
}
}
</script>
<style scoped="scoped">
.eit {
height: 120px;
}
.eit {
height: 120px;
}
</style>

View File

@@ -404,7 +404,7 @@ export default {
console.log(data);
const date = new Date();
const houzhui = "." + data.name.substr(data.name.lastIndexOf(".") + 1);
const isTest=config.baseUrl.includes('dj-api.hnsiyao.cn')?false:true
const isTest=config.baseUrl.includes('web.hnsiyao.cn')?false:true
const appName=isTest?'test-duanju':'sy-duanju'
const name = "app/" + appName + houzhui;
console.log(name);

View File

@@ -116,6 +116,7 @@
</el-option> </el-select
>&nbsp;&nbsp;&nbsp;
<el-date-picker
v-if="flag == 1"
style="width: 200px; margin-left: 10px"
v-model="info.stockDate"
align="right"
@@ -421,31 +422,24 @@
</div>
</div>
</el-col>
<el-col :span="6" class="cards">
<el-col :span="6" class="cards">
<div class="box">
<div class="box_num">
<div class="box_color">提现次数</div>
<div class="text_color">
<span>{{
orderStat.cashCount
? orderStat.cashCount
: 0
}}</span
>
orderStat.cashCount ? orderStat.cashCount : 0
}}</span>
</div>
</div>
</div>
</el-col>
<el-col :span="6" class="cards">
<el-col :span="6" class="cards">
<div class="box">
<div class="box_num">
<div class="box_color">提现总金额</div>
<div class="text_color">
<span>{{
orderStat.cashSum
? orderStat.cashSum
: 0
}}</span
<span>{{ orderStat.cashSum ? orderStat.cashSum : 0 }}</span
>
</div>
</div>

View File

@@ -1,46 +1,24 @@
<template>
<el-dialog
:title="form.id ? '修改红包' : '新增红包'"
width="500px"
:visible.sync="dialogVisible"
@close="diaClose"
:close-on-click-modal="true"
>
<el-dialog :title="form.id ? '修改红包' : '新增红包'" width="500px" :visible.sync="dialogVisible" @close="diaClose"
:close-on-click-modal="true">
<el-form :model="form" label-width="100px">
<el-form-item label="描述" required>
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="从第几次开始变化">
<el-input-number
:min="0"
stepstep-strictly
v-model="form.num"
></el-input-number>
<el-input-number :min="0" stepstep-strictly v-model="form.num"></el-input-number>
</el-form-item>
<el-form-item label="最大金额" required>
<el-input-number
:min="0"
:max="100"
v-model="form.maxAmount"
></el-input-number>
<el-input-number :min="0" :max="100" v-model="form.maxAmount"></el-input-number>
<span></span>
</el-form-item>
<el-form-item label="中奖概率" required>
<el-input-number
:min="0"
:max="1"
:step="0.1"
v-model="form.random"
></el-input-number>
<el-input-number :min="0" :max="1" :step="0.1" v-model="form.random"></el-input-number>
<span></span>
</el-form-item>
<el-form-item label="是否启用" required>
<el-switch
v-model="form.status"
:inactive-value="0"
:active-value="1"
></el-switch>
<el-switch v-model="form.status" :inactive-value="0" :active-value="1"></el-switch>
</el-form-item>
</el-form>
@@ -56,9 +34,9 @@ import { $redPackApi } from "@/api/red-pack.js";
import { isNull } from "@/utils/validate.js";
export default {
props: {
source:{
type:[String,Number],
default:1
source: {
type: [String, Number],
default: 1
}
},
data() {
@@ -82,7 +60,7 @@ export default {
console.log(item);
this.dialogVisible = true;
this.item = item;
if (item!==undefined) {
if (item !== undefined) {
this.form = {
...item,
num: item.num === "" || item.num === null ? undefined : item.num,
@@ -114,12 +92,12 @@ export default {
}
console.log(id);
const res = id
? await $redPackApi.update({ ...this.form, num: this.form.num || "" ,discType:this.source})
: await $redPackApi.add({...this.form,discType:this.source});
? await $redPackApi.update({ ...this.form, num: this.form.num || "", discType: this.source, type: this.source })
: await $redPackApi.add({ ...this.form, discType: this.source, type: this.source });
console.log(res);
const { data, msg } = res;
if (data && data.code == 0) {
this.$message.success(id?"修改成功":"添加成功");
this.$message.success(id ? "修改成功" : "添加成功");
this.$emit("refresh");
this.diaClose();
} else {
@@ -133,9 +111,11 @@ export default {
.el-form-item__label {
text-align: left;
}
::v-deep .el-form-item__label {
text-align: left;
}
.upload-file-box {
border-radius: 6px;
width: 148px;
@@ -145,6 +125,7 @@ export default {
align-items: center;
overflow: hidden;
border: 1px solid #c0c4cc;
img {
width: 100%;
height: 100%;

View File

@@ -1,6 +1,6 @@
<template>
<div>
<el-form inline>
<el-form inline @submit.native.prevent="queryHandle">
<el-form-item label="用户ID">
<el-input v-model="query.userId" placeholder="请输入用户ID" />
</el-form-item>
@@ -31,7 +31,7 @@
</el-form-item>
<el-form-item label="日期">
<el-date-picker v-model="timeValue" type="datetimerange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" @change="changeTime"
end-placeholder="结束日期" @change="changeTime" value-format="yyyy-MM-DD HH:mm:ss"
:default-time="['00:00:00', '23:59:59']">
</el-date-picker>
</el-form-item>
@@ -41,38 +41,52 @@
</el-form-item>
</el-form>
<el-table v-loading="tableData.loading" :data="tableData.list" border stripe>
<el-table-column label="提现申请ID" prop="id"></el-table-column>
<el-table-column label="用户id" prop="userId"></el-table-column>
<el-table-column label="用户名" prop="userName"></el-table-column>
<el-table-column label="提现金额" prop="money">
<el-table-column label="ID" prop="id" width="80"></el-table-column>
<el-table-column label="用户ID" prop="userId" width="100"></el-table-column>
<el-table-column label="用户名" prop="userName" width="200">
<template slot-scope="scope">
{{ scope.row.money }}
<template v-if="scope.row.relationId">
<div class="danger_user">
<div class="user_info">
<i class="icon el-icon-warning"></i>
危险用户{{ scope.row.userName }}
</div>
<el-tag type="danger" disable-transitions>{{ scope.row.relationId }}</el-tag>
</div>
</template>
<template v-else>
{{ scope.row.userName }}
</template>
</template>
</el-table-column>
<el-table-column label="手续费" prop="rate">
<template slot-scope="scope">
{{ scope.row.rate }}
</template>
</el-table-column>
<el-table-column label="是否转账" prop="isOut"></el-table-column>
<el-table-column label="会员编号" prop="relationId"></el-table-column>
<el-table-column label="支付宝信息" prop="zhifubao">
<el-table-column label="提现账号" prop="zhifubao" width="200">
<template slot-scope="scope">
{{ scope.row.zhifubaoName }} / {{ scope.row.zhifubao }}
</template>
</el-table-column>
<el-table-column label="订单编号" prop="orderNumber"></el-table-column>
<el-table-column label="订单编号" prop="orderNumber"></el-table-column>
<el-table-column label="代理用户id" prop="sysUserId"></el-table-column>
<el-table-column label="提现类型" prop="userType">
<el-table-column label="提现信息" width="200">
<template slot-scope="scope">
<span v-if="scope.row.userType == 1">用户提现</span>
<span v-if="scope.row.userType == 2">代理提现</span>
<div>提现金额{{ scope.row.money }}</div>
<div>手续费{{ scope.row.rate }}</div>
<div style="margin-top: 6px;">
提现类型
<span v-if="scope.row.userType == 1">用户提现</span>
<span v-if="scope.row.userType == 2">代理提现</span>
</div>
<div>订单编号{{ scope.row.orderNumber }}</div>
</template>
</el-table-column>
<el-table-column label="申请时间" prop="createAt"></el-table-column>
<el-table-column label="转账时间" prop="outAt"></el-table-column>
<el-table-column label="状态" prop="state">
<el-table-column label="提现统计" width="200">
<template slot-scope="scope">
<div>成功提现金额{{ scope.row.total }}</div>
<div>成功提现次数{{ scope.row.count }}</div>
<div style="margin-top: 6px;">待审提现金额合计{{ scope.row.verifyTotal }}</div>
<div>待审提现申请笔数{{ scope.row.verifyCount }}</div>
</template>
</el-table-column>
<el-table-column label="申请时间" prop="createAt" width="200"></el-table-column>
<el-table-column label="转账时间" prop="outAt" width="200"></el-table-column>
<el-table-column label="状态" prop="state" width="200">
<template slot-scope="scope">
<el-tag type="warning" v-if="scope.row.state == 0" disable-transitions>
待转账
@@ -80,18 +94,15 @@
<el-tag type="success" v-if="scope.row.state == 1" disable-transitions>
成功
</el-tag>
<template v-if="scope.row.state == 2">
<el-tag type="danger" disable-transitions>
失败
</el-tag>
原因: {{ scope.row.refund }}
</template>
<div class="tag_danger" v-if="scope.row.state == 2">
失败{{ scope.row.refund }}
</div>
<el-tag type="warning" v-if="scope.row.state == 3" disable-transitions>
待审核
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="100" fixed="right">
<el-table-column label="操作" align="center" width="100" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="mini" @click="deliverHandle(scope.row)" v-if="scope.row.state == 3">
待审核
@@ -158,7 +169,8 @@ export default {
form: {
id: "",
isAgree: "1",
refund: ""
refund: "",
userId: ''
},
rules: {
isAgree: [],
@@ -180,6 +192,7 @@ export default {
// 打开发放奖品弹窗
deliverHandle(row) {
this.form.id = row.id;
this.form.userId = row.userId
this.visible = true;
},
// 提交发放奖品
@@ -205,7 +218,7 @@ export default {
},
// 开始查询
queryHandle() {
this.page = 1;
this.tableData.page = 1;
this.cashOutAuditPage();
},
// 重置查询
@@ -254,3 +267,31 @@ export default {
}
};
</script>
<style scoped lang="scss">
.danger_user {
display: flex;
flex-direction: column;
gap: 4px;
.user_info {
display: flex;
align-items: center;
$color: #F56C6C;
color: $color;
gap: 4px;
.icon {
color: $color;
}
}
}
.tag_danger {
background-color: rgba(245, 108, 108, .1);
color: #f56c6c;
border-radius: 4px;
border: 1px solid rgba(245, 108, 108, .2);
padding: 2px 10px;
}
</style>

View File

@@ -0,0 +1,277 @@
<template>
<div>
<el-form inline @submit.native.prevent="queryHandle">
<!-- <el-form-item label="用户ID">
<el-input v-model="query.userId" placeholder="请输入用户ID" />
</el-form-item>
<el-form-item label="用户名">
<el-input v-model="query.userName" placeholder="请输入用户名" />
</el-form-item>
<el-form-item label="支付宝账号">
<el-input v-model="query.zhifubao" placeholder="请输入支付宝账号" />
</el-form-item> -->
<el-form-item>
<el-input v-model="query.alipayAccountName" placeholder="请输入支付宝账户姓名查询" />
</el-form-item>
<!-- <el-form-item label="提现类型">
<el-select v-model="query.userType">
<el-option label="全部" value=""></el-option>
<el-option label="用户提现" value="1"></el-option>
<el-option label="分销商提现" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="query.state">
<el-option label="全部" value=""></el-option>
<el-option label="待转账" value="0"></el-option>
<el-option label="成功" value="1"></el-option>
<el-option label="失败" value="2"></el-option>
<el-option label="待审核" value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="日期">
<el-date-picker v-model="timeValue" type="datetimerange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" @change="changeTime" :default-time="['00:00:00', '23:59:59']">
</el-date-picker>
</el-form-item> -->
<el-form-item>
<el-button type="primary" @click="queryHandle">查询</el-button>
<el-button @click="resetHandle">重置</el-button>
</el-form-item>
</el-form>
<el-row>
<el-col :span="6" class="cards">
<div class="box">
<div class="box_num">
<div class="box_color">成功提现次数合计</div>
<div class="text_color">
<span>{{ count }}</span>
</div>
</div>
</div>
</el-col>
<el-col :span="6" class="cards">
<div class="box">
<div class="box_num">
<div class="box_color">成功提现金额合计</div>
<div class="text_color">
<span>{{ totalMoney }}</span>
</div>
</div>
</div>
</el-col>
</el-row>
<el-table v-loading="tableData.loading" :data="tableData.list" border stripe>
<el-table-column label="用户ID" prop="userId"></el-table-column>
<el-table-column label="用户名" prop="userName"></el-table-column>
<el-table-column label="手机号" prop="phone"></el-table-column>
<el-table-column label="邀请码" prop="inviterCode"></el-table-column>
<el-table-column label="提现小计" prop="subTotal">
<template slot-scope="scope">
<div>提现金额{{ scope.row.subTotal }}</div>
<div>提现次数{{ scope.row.subCount }}</div>
</template>
</el-table-column>
<el-table-column label="提现账号" prop="zhifubao">
<template slot-scope="scope">
{{ scope.row.zhiFuBaoName }} / {{ scope.row.zhiFuBao }}
</template>
</el-table-column>
</el-table>
<!-- <div class="pagination">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]" :page-size="tableData.limit" :current-page="tableData.page"
layout="total" :total="tableData.total">
</el-pagination>
</div> -->
<el-dialog title="提现审核" width="600px" :visible.sync="visible" @close="onClose">
<el-form :model="form" :rules="rules" ref="form" label-width="80px" label-position="left">
<el-form-item label="审核" prop="isAgree">
<el-radio-group v-model="form.isAgree">
<el-radio label="1"> 同意 </el-radio>
<el-radio label="0"> 拒绝 </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="refund" v-if="form.isAgree == 0">
<el-input v-model="form.refund" placeholder="拒绝原因"></el-input>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer" style="display: flex; justify-content: flex-end;">
<el-button size="small" @click="visible = false"> </el-button>
<el-button size="small" type="primary" :loading="confirmLoading"
@click="confirmHandle">确定</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script>
import { summary_query } from "@/api/withdraw.js";
export default {
data() {
return {
timeValue: [],
query: {
userId: "",
userName: "",
userType: '',
zhifubao: "",
zhifubaoName: "",
state: "",
startTime: "",
endTime: "",
alipayAccountName: ""
},
resetQuery: {},
count: 0,
totalMoney: 0,
tableData: {
page: 1,
limit: 10,
total: 0,
list: [],
loading: false
},
visible: false,
confirmLoading: false,
form: {
id: "",
isAgree: "1",
refund: ""
},
rules: {
isAgree: [],
refund: [
{ required: true, message: "请输入拒绝原因", trigger: "blur" }
]
}
};
},
mounted() {
this.resetQuery = { ...this.query };
this.getTableData();
},
methods: {
// 关闭弹窗, 重置表单
onClose() {
this.$refs.form.resetFields();
},
// 打开发放奖品弹窗
deliverHandle(row) {
this.form.id = row.id;
this.visible = true;
},
// 提交发放奖品
confirmHandle() {
this.$refs.form.validate(async valid => {
if (valid) {
this.confirmLoading = true;
try {
const { data } = await cashOutAuditAudit(this.form);
if (data.code == 0) {
this.$message.success("审核成功");
this.visible = false;
this.getTableData();
} else {
this.$message.error(data.msg || "审核失败");
}
} catch (error) {
console.log(error);
}
this.confirmLoading = false;
}
});
},
// 开始查询
queryHandle() {
this.tableData.page = 1;
this.getTableData();
},
// 重置查询
resetHandle() {
this.query = { ...this.resetQuery };
this.timeValue = [];
this.getTableData();
},
// 确认选择日期
changeTime() {
if (this.timeValue.length == 2) {
this.query.startTime = this.timeValue[0];
this.query.endTime = this.timeValue[1];
} else {
this.query.startTime = "";
this.query.endTime = "";
}
},
// 分页数量
handleSizeChange(size) {
this.tableData.limit = size;
this.getTableData();
},
// 分页
handleCurrentChange(val) {
this.tableData.page = val;
this.getTableData();
},
// 获取列表
async getTableData() {
try {
this.tableData.loading = true;
const { data } = await summary_query({
...this.query
});
this.tableData.loading = false;
this.tableData.list = data.data.list;
this.tableData.total = data.data.count;
this.count = data.data.count;
this.totalMoney = data.data.sum;
} catch (error) {
this.tableData.loading = false;
this.tableData.list = [];
this.tableData.total = 0;
this.count = 0;
this.totalMoney = 0;
console.log('error===', error);
}
}
}
};
</script>
<style scoped lang="scss">
.box {
padding: 44px;
border: 1px solid #eee;
margin: 0 15px 25px 0;
}
.box_num {
font-size: 14px;
color: #66b1ff;
}
.box_num .box_color {
color: #333;
font-size: 14px;
margin-bottom: 15px;
}
.box_num div span {
font-size: 20px;
margin-left: 5px;
}
.text_color {
color: #4f9dec;
}
.text_color span {
margin-right: 5px;
}
</style>

View File

@@ -4,6 +4,9 @@
<el-tab-pane label="提现审核" name="withdraw">
<WithdrawManage></WithdrawManage>
</el-tab-pane>
<el-tab-pane label="提现统计" name="withdrawTotal">
<WithdrawTotal></WithdrawTotal>
</el-tab-pane>
<!-- 拒绝弹框 -->
<!-- <el-tab-pane label="提现管理" name="first">
<div style="margin: 5px; display: inline-block">
@@ -225,7 +228,7 @@
<div class="box_num">
<div class="box_color">累计提现金额</div>
<div class="text_color">
<span>{{ withdrawData.sumMoney }}</span>
<span> {{ formatMoney(withdrawData.sumMoney) }}</span>
</div>
</div>
</div>
@@ -526,6 +529,10 @@
<el-tab-pane label="现金红包抽奖金额配置" name="senven">
<div class="">
<div style="margin-bottom: 20px">
<el-select @change="redPackInit" v-model="zhuanPanType" placeholder="请选择">
<el-option v-for="item in zhuanPanTypes" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-button type="primary" @click="openPop('refAddRedPack')">添加</el-button>
</div>
<el-table :border="true" :data="redPackData">
@@ -553,7 +560,7 @@
</el-tab-pane>
</el-tabs>
<pop-add-zhuanpan ref="refAddZhuanpan" @refresh="zhuanPanRefresh" :source="zhuanPanType"></pop-add-zhuanpan>
<pop-add-red-pack ref="refAddRedPack" @refresh="redpackRefresh"></pop-add-red-pack>
<pop-add-red-pack ref="refAddRedPack" @refresh="redpackRefresh" :source="zhuanPanType"></pop-add-red-pack>
</div>
</template>
@@ -562,9 +569,10 @@ import $disc from "@/api/disc-spinning.js";
import popAddZhuanpan from "./components/pop-add-zhuanpan.vue";
import popAddRedPack from "./components/pop-add-redPack.vue";
import WithdrawManage from "./components/withdraw-manage.vue";
import WithdrawTotal from './components/withdrawTotal.vue';
import { $redPackApi } from "@/api/red-pack.js";
export default {
components: { popAddZhuanpan, popAddRedPack, WithdrawManage },
components: { popAddZhuanpan, popAddRedPack, WithdrawManage, WithdrawTotal },
data() {
return {
zhuanPanType: 1,
@@ -649,6 +657,7 @@ export default {
sumMoneyByTime: "",
money: "",
activeName: "withdraw",
// activeName: 'withdrawTotal',
formLabelWidth: "200px",
dialogFormVisible: false,
dialogFormVisible1: false,
@@ -700,6 +709,10 @@ export default {
};
},
methods: {
formatMoney(value) {
if (!value) return '0.00';
return Number(value).toFixed(2);
},
zhuanPanTypeChange() {
this.zhuanPanInit();
},
@@ -1093,7 +1106,8 @@ export default {
const { data } = await $redPackApi.getList({
page: this.page,
limit: this.limit,
source: this.zhuanPanType
source: this.zhuanPanType,
type: this.zhuanPanType
});
this.redPackData = data.data.records;
},

View File

@@ -0,0 +1,173 @@
<template>
<el-dialog
:title="title"
width="800px"
top="20px"
:visible.sync="dialogVisible"
@close="diaClose"
:close-on-click-modal="true"
>
<div>
<el-form ref="form" :rules="rules" :model="form" label-width="100px">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title"></el-input>
</el-form-item>
<el-form-item label="类型" prop="title">
<el-radio-group v-model="form.type">
<el-radio
:label="item.value"
v-for="(item, index) in types"
:key="index"
>{{ item.label }}</el-radio
>
</el-radio-group>
</el-form-item>
<el-form-item label="状态" required>
<el-switch
v-model="form.state"
:active-value="1"
:inactive-value="0"
></el-switch>
</el-form-item>
<el-form-item label="内容" prop="content">
<quill-editor
ref="myTextEditor"
v-model="form.content"
:options="quillOption"
style="
padding-bottom: 50px;
height: 300px;
width: 100%;
display: inline-table;
"
>
</quill-editor>
</el-form-item>
</el-form>
</div>
<div class="dialog-footer">
<el-button @click="diaClose"> </el-button>
<el-button type="primary" @click="confirm"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { $announcement as $api } from "@/api/announcement.js";
import { $types } from "../data.js";
import { quillEditor } from "vue-quill-editor";
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import quillConfig from "../../locality/quill-config.js";
export default {
components: {
quillEditor,
},
data() {
return {
quillOption: quillConfig,
types: $types,
dialogVisible: false,
title: "",
rules: {
title: [{ required: true, message: "请输入公告标题", trigger: "blur" }],
content: [
{ required: true, message: "请输入公告内容", trigger: "blur" },
],
},
form: {
title: "",
content: "",
state: 1,
type: "",
},
};
},
methods: {
open(item) {
console.log(item);
this.dialogVisible = true;
Object.assign(this.form, item);
this.title = item ? "修改公告" : "添加公告";
},
diaClose() {
this.dialogVisible = false;
this.form = {
title: "",
content: "",
state: 1,
type: "",
};
this.$refs.form.resetFields();
},
async confirm() {
if (!this.form.title) {
return this.$message.error("请输入公告标题");
}
if (!this.form.content) {
return this.$message.error("请输入公告内容");
}
if (this.form.type === "") {
return this.$message.error("请选择公告类型");
}
this.submit();
},
async submit() {
let res = { data: { code: 1 } };
const submitForm = {
...this.form,
};
if (this.form.id) {
res = await $api.update(submitForm);
} else {
res = await $api.add(submitForm);
}
console.log(res);
const { data } = res;
if (data.code == 0) {
this.$message.success(this.form.id ? "修改成功" : "添加成功");
this.$emit("refresh");
this.diaClose();
} else {
this.$message.error(data.msg);
}
},
},
};
</script>
<style scoped lang="scss">
.el-form-item__label {
text-align: left;
}
::v-deep .el-form-item__label {
text-align: left;
}
.dialog-footer {
padding-top: 20px;
display: flex;
justify-content: flex-end;
}
.upload-file-box {
border-radius: 6px;
width: 148px;
height: 148px;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
border: 1px solid #c0c4cc;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
</style>

View File

@@ -0,0 +1,4 @@
export const $types=[
{label:'首页',value:0},
{label:'提现',value:1}
]

View File

@@ -1,135 +1,275 @@
<template>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="公告中心" name="first">
<div style="float: right;margin-right:2%;">
<el-button style="margin: 10px 0;" :disabled="!isAuth('message:add')" size="mini" type="primary"
icon="document" @click="addNotice">添加公告</el-button>
</div>
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column prop="id" label="编号" width="80">
</el-table-column>
<el-table-column prop="title" label="标题">
</el-table-column>
<el-table-column prop="url" label="链接">
</el-table-column>
<el-table-column prop="type" label="类型">
<template slot-scope="scope">
<span style="color: #4f9dec;cursor: pointer;" v-if="scope.row.type === 'url' ">链接</span>
<span style="color: #4f9dec;cursor: pointer;" v-if="scope.row.type === 'word' ">文本</span>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
</el-table-column>
<el-table-column label="操作" width="150">
<template slot-scope="scope">
<el-button size="mini" type="primary" :disabled="!isAuth('message:update')"
@click="updates(scope.$index, scope.row)">修改
</el-button>
<el-button size="mini" type="danger" :disabled="!isAuth('message:delete')"
@click="deletes(scope.row)">删除
</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center;margin-top: 10px;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:page-sizes="[5, 10, 15, 20]" :page-size="limit" :current-page="page"
layout="total,sizes, prev, pager, next,jumper" :total="tableData.totalElements">
</el-pagination>
</div>
<!-- 添加弹框 -->
<el-dialog title="添加公告" :visible.sync="dialogFormVisible" center>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">标题</span>
<el-input style="width:50%;" v-model="title" placeholder="请输入公告标题"></el-input>
</div>
<div style="margin-bottom: 10px;" v-if="type=='url'">
<span style="width: 200px;display: inline-block;text-align: right;">链接</span>
<el-input style="width: 50%;" v-model="url" placeholder="请输入公告链接"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">类型</span>
<el-select v-model="type" placeholder="请选择公告类型" style="width:50%;">
<el-option v-for="item in types" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="releasNoticeTo()"> </el-button>
</div>
</el-dialog>
<!-- 修改弹框 -->
<el-dialog title="修改" :visible.sync="dialogFormVisible1" center>
<el-form :model="form">
<el-form-item label="标题:" :label-width="formLabelWidth">
<el-input v-model="form.title" style="width:65%;"></el-input>
</el-form-item>
<el-form-item label="链接:" :label-width="formLabelWidth">
<el-input v-model="form.url" style="width:65%;"></el-input>
</el-form-item>
<el-form-item label="类型:" :label-width="formLabelWidth">
<el-select v-model="form.type" placeholder="请选择类型" style="width:65%;">
<el-option v-for="item in types" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible1 = false"> </el-button>
<el-button type="primary" @click="amendNoticeTo()"> </el-button>
</div>
</el-dialog>
</el-tab-pane>
<el-tab-pane label="用户反馈" name="two">
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column prop="id" label="编号" width="80">
</el-table-column>
<el-table-column prop="title" label="联系方式">
</el-table-column>
<el-table-column prop="content" label="内容">
</el-table-column>
<el-table-column prop="createAt" label="创建时间" width="160">
</el-table-column>
</el-table>
<div style="text-align: center;margin-top: 10px;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]" :page-size="limit" :current-page="page"
layout="total,sizes, prev, pager, next,jumper" :total="tableData.totalCount">
</el-pagination>
</div>
</el-tab-pane>
<el-tab-pane label="用户消息" name="fourth">
<div style="float: right;margin-right:2%;">
<el-button style='margin: 10px 0;' :disabled="!isAuth('message:push')" size="mini" type="primary"
icon="document" @click="magNotice">消息推送</el-button>
</div>
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column prop="id" label="编号" width="80">
</el-table-column>
<el-table-column prop="userName" label="用户名称">
</el-table-column>
<el-table-column prop="title" label="消息标题">
</el-table-column>
<el-table-column prop="content" label="消息内容">
</el-table-column>
<el-table-column prop="createAt" label="创建时间">
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="updataDetails(scope.row)">用户详情
</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center;margin-top: 10px;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]" :page-size="limit" :current-page="page"
layout="total,sizes, prev, pager, next,jumper" :total="tableData.totalCount">
</el-pagination>
</div>
</el-tab-pane>
<!-- <el-tab-pane label="消息推送" name="seventh">
<div>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="弹窗公告" name="dialogMessage">
<div style="float: right; margin-right: 2%">
<el-button
style="margin: 10px 0"
:disabled="!isAuth('message:add')"
size="mini"
type="primary"
icon="document"
@click="refPopAddMessageOpen()"
>添加公告</el-button
>
</div>
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column prop="id" label="编号" width="80"> </el-table-column>
<el-table-column prop="title" label="标题"> </el-table-column>
<el-table-column prop="title" label="类型">
<template slot-scope="scope">
<div>{{ returnType(scope.row) }}</div>
</template>
</el-table-column>
<el-table-column prop="content" label="内容" width="480">
<template slot-scope="scope">
<div v-html="scope.row.content"></div>
</template>
</el-table-column>
<el-table-column prop="content" label="是否启用">
<template slot-scope="scope">
<el-switch :value="scope.row.state" :active-value="1" :inactive-value="0" @change="dialogMessageUpdate($event, scope.row)"> </el-switch>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间"> </el-table-column>
<el-table-column label="操作" width="150">
<template slot-scope="scope">
<el-button
size="mini"
type="primary"
:disabled="!isAuth('message:update')"
@click="refPopAddMessageOpen( scope.row)"
>修改
</el-button>
<el-button
size="mini"
type="danger"
:disabled="!isAuth('message:delete')"
@click="dialogMessagedeletes(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center; margin-top: 10px" v-if="false">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[5, 10, 15, 20]"
:page-size="limit"
:current-page="page"
layout="total,sizes, prev, pager, next,jumper"
:total="tableData.totalElements"
>
</el-pagination>
</div>
<pop-add-message ref="refPopAddMessage" @refresh="getDialogMessage"></pop-add-message>
</el-tab-pane>
<el-tab-pane label="公告中心" name="first">
<div style="float: right; margin-right: 2%">
<el-button
style="margin: 10px 0"
:disabled="!isAuth('message:add')"
size="mini"
type="primary"
icon="document"
@click="addNotice"
>添加公告</el-button
>
</div>
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column prop="id" label="编号" width="80"> </el-table-column>
<el-table-column prop="title" label="标题"> </el-table-column>
<el-table-column prop="url" label="链接"> </el-table-column>
<el-table-column prop="type" label="类型">
<template slot-scope="scope">
<span
style="color: #4f9dec; cursor: pointer"
v-if="scope.row.type === 'url'"
>链接</span
>
<span
style="color: #4f9dec; cursor: pointer"
v-if="scope.row.type === 'word'"
>文本</span
>
</template>
</el-table-column>
<el-table-column prop="createAt" label="创建时间"> </el-table-column>
<el-table-column label="操作" width="150">
<template slot-scope="scope">
<el-button
size="mini"
type="primary"
:disabled="!isAuth('message:update')"
@click="updates(scope.$index, scope.row)"
>修改
</el-button>
<el-button
size="mini"
type="danger"
:disabled="!isAuth('message:delete')"
@click="deletes(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center; margin-top: 10px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[5, 10, 15, 20]"
:page-size="limit"
:current-page="page"
layout="total,sizes, prev, pager, next,jumper"
:total="tableData.totalElements"
>
</el-pagination>
</div>
<!-- 添加弹框 -->
<el-dialog title="添加公告" :visible.sync="dialogFormVisible" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>标题</span
>
<el-input
style="width: 50%"
v-model="title"
placeholder="请输入公告标题"
></el-input>
</div>
<div style="margin-bottom: 10px" v-if="type == 'url'">
<span style="width: 200px; display: inline-block; text-align: right"
>链接</span
>
<el-input
style="width: 50%"
v-model="url"
placeholder="请输入公告链接"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>类型</span
>
<el-select
v-model="type"
placeholder="请选择公告类型"
style="width: 50%"
>
<el-option
v-for="item in types"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="releasNoticeTo()"
> </el-button
>
</div>
</el-dialog>
<!-- 修改弹框 -->
<el-dialog title="修改" :visible.sync="dialogFormVisible1" center>
<el-form :model="form">
<el-form-item label="标题:" :label-width="formLabelWidth">
<el-input v-model="form.title" style="width: 65%"></el-input>
</el-form-item>
<el-form-item label="链接:" :label-width="formLabelWidth">
<el-input v-model="form.url" style="width: 65%"></el-input>
</el-form-item>
<el-form-item label="类型:" :label-width="formLabelWidth">
<el-select
v-model="form.type"
placeholder="请选择类型"
style="width: 65%"
>
<el-option
v-for="item in types"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible1 = false"> </el-button>
<el-button type="primary" @click="amendNoticeTo()"> </el-button>
</div>
</el-dialog>
</el-tab-pane>
<el-tab-pane label="用户反馈" name="two">
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column prop="id" label="编号" width="80"> </el-table-column>
<el-table-column prop="title" label="联系方式"> </el-table-column>
<el-table-column prop="content" label="内容"> </el-table-column>
<el-table-column prop="createAt" label="创建时间" width="160">
</el-table-column>
</el-table>
<div style="text-align: center; margin-top: 10px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]"
:page-size="limit"
:current-page="page"
layout="total,sizes, prev, pager, next,jumper"
:total="tableData.totalCount"
>
</el-pagination>
</div>
</el-tab-pane>
<el-tab-pane label="用户消息" name="fourth">
<div style="float: right; margin-right: 2%">
<el-button
style="margin: 10px 0"
:disabled="!isAuth('message:push')"
size="mini"
type="primary"
icon="document"
@click="magNotice"
>消息推送</el-button
>
</div>
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column prop="id" label="编号" width="80"> </el-table-column>
<el-table-column prop="userName" label="用户名称"> </el-table-column>
<el-table-column prop="title" label="消息标题"> </el-table-column>
<el-table-column prop="content" label="消息内容"> </el-table-column>
<el-table-column prop="createAt" label="创建时间"> </el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
size="mini"
type="primary"
@click="updataDetails(scope.row)"
>用户详情
</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center; margin-top: 10px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]"
:page-size="limit"
:current-page="page"
layout="total,sizes, prev, pager, next,jumper"
:total="tableData.totalCount"
>
</el-pagination>
</div>
</el-tab-pane>
<!-- <el-tab-pane label="消息推送" name="seventh">
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column fixed prop="id" label="编号" width="80">
</el-table-column>
@@ -155,41 +295,81 @@
</el-pagination>
</div>
</el-tab-pane> -->
<!-- 消息推送 -->
<el-dialog title="消息推送" :visible.sync="dialogFormVisible2" center>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">类型</span>
<el-select v-model="flag" placeholder="请选择类型" style="width:50%">
<el-option v-for="item in flags" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>&nbsp;&nbsp;&nbsp;&nbsp;
</div>
<div style="margin-bottom: 10px;" v-if="flag == 1">
<span style="width: 200px;display: inline-block;text-align: right;">用户手机号</span>
<el-input style="width: 50%;" v-model="phone" placeholder="请输入用户手机号"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">消息标题</span>
<el-input style="width: 50%;" v-model="title" placeholder="请输入消息标题"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span
style="width: 200px;display: inline-block;text-align: right;position: relative;top: -65px;">消息内容</span>
<el-input style="width: 50%;" type="textarea" rows="4" v-model="content" placeholder="请输入消息内容">
</el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible2 = false"> </el-button>
<el-button type="primary" @click="magNoticeTo()"> </el-button>
</div>
</el-dialog>
</el-tabs>
<!-- 消息推送 -->
<el-dialog title="消息推送" :visible.sync="dialogFormVisible2" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>类型</span
>
<el-select v-model="flag" placeholder="请选择类型" style="width: 50%">
<el-option
v-for="item in flags"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-select
>&nbsp;&nbsp;&nbsp;&nbsp;
</div>
<div style="margin-bottom: 10px" v-if="flag == 1">
<span style="width: 200px; display: inline-block; text-align: right"
>用户手机号</span
>
<el-input
style="width: 50%"
v-model="phone"
placeholder="请输入用户手机号"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>消息标题</span
>
<el-input
style="width: 50%"
v-model="title"
placeholder="请输入消息标题"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span
style="
width: 200px;
display: inline-block;
text-align: right;
position: relative;
top: -65px;
"
>消息内容</span
>
<el-input
style="width: 50%"
type="textarea"
rows="4"
v-model="content"
placeholder="请输入消息内容"
>
</el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible2 = false"> </el-button>
<el-button type="primary" @click="magNoticeTo()"> </el-button>
</div>
</el-dialog>
</el-tabs>
</div>
</template>
<script>
import {$announcement} from '@/api/announcement';
import popAddMessage from './components/pop-add-message.vue';
import {$types} from './data.js';
export default {
components:{popAddMessage},
data() {
return {
noticeTypes: $types,
limit: 10,
page: 1,
state: 1,
@@ -235,7 +415,7 @@
}
],
formLabelWidth: '200px',
activeName: 'first',
activeName: 'dialogMessage',
tableDataLoading: false,
dialogFormVisible1: false,
dialogFormVisible2: false,
@@ -244,6 +424,40 @@
}
},
methods: {
returnType(row) {
const item=this.noticeTypes.find(item => item.value == row.type)
return item.label
},
dialogMessageUpdate(e,item){
$announcement.update({...item,state:e}).then(({
data
}) => {
this.getDialogMessage()
})
},
// 删除首页弹窗公告
dialogMessagedeletes(row) {
let delid = row.id
this.$confirm(`确定删除此条信息?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
$announcement.del({id:delid}).then(({
data
}) => {
this.$message({
message: '删除成功',
type: 'success',
duration: 1500
})
this.getDialogMessage()
})
}).catch(() => {})
},
refPopAddMessageOpen(item){
this.$refs.refPopAddMessage.open(item)
},
// 详情跳转
updataDetails(row) {
this.$router.push({
@@ -261,7 +475,24 @@
this.page = val;
this.dataSelect()
},
getDialogMessage() {
this.tableDataLoading = true
$announcement.get({
page: this.page,
limit: this.limit
}).then(({data}) => {
console.log(data)
this.tableDataLoading = false
this.tableData = {list:data.data}
})
},
handleClick(tab, event) {
if (tab._props.label == '首页弹窗公告') {
this.page = 1
this.limit = 10
this.state = 1
this.getDialogMessage()
}
if (tab._props.label == '公告中心') {
this.page = 1
this.limit = 10
@@ -404,6 +635,10 @@
},
// 获取数据列表
dataSelect() {
if(this.activeName == 'dialogMessage'){
this.getDialogMessage()
return
}
this.tableDataLoading = true
this.$http({
url: this.$http.adornUrl(`message/page/${this.state}/${this.page}/${this.limit}`),
@@ -583,5 +818,4 @@
</script>
<style>
</style>
</style>

View File

@@ -139,7 +139,7 @@ export default {
limit: this.limit,
});
this.tableData = data.data.records;
this.total = data.data.total;
this.total = data.data.totalCount;
},
del(item) {
this.$confirm("是否删除该任务?", "提示", {

View File

@@ -118,8 +118,8 @@ export default {
this.$message.error(res.data.msg || '修改失败')
}
},
handleSizeChange() {
this.page = 1;
handleSizeChange(limit) {
this.limit = limit;
this.init();
},
handleCurrentChange(val) {
@@ -127,8 +127,8 @@ export default {
this.init();
},
returnJumpTypeName(type) {
console.log(type)
console.log($jumpType[type])
// console.log(type)
// console.log($jumpType[type])
return $jumpType[type] ? $jumpType[type] : "";
},
returnTypeName(type) {
@@ -141,7 +141,7 @@ export default {
limit: this.limit,
});
this.tableData = data.data.records;
this.total = data.data.total;
this.total = data.data.totalCount;
},
del(item) {
this.$confirm("是否删除该任务?", "提示", {

View File

@@ -57,7 +57,7 @@
<div style="text-align: center;margin-top: 10px;">
<el-pagination @size-change="handleSizeChange1" @current-change="handleCurrentChange1"
:page-sizes="[10, 20, 30, 40]" :page-size="size" :current-page="page"
layout="total,sizes, prev, pager, next,jumper" :total="homeData.total">
layout="total,sizes, prev, pager, next,jumper" :total="homeData.totalCount">
</el-pagination>
</div>

View File

@@ -0,0 +1,204 @@
<template>
<div>
<el-form :model="queryForm" inline @submit.native.prevent="queryByTradeNo">
<el-form-item label="订单号" prop="outTradeNo">
<el-input v-model="queryForm.outTradeNo" placeholder="请输入订单号查询" style="width: 500px;"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="queryByTradeNo" :loading="loading">查询</el-button>
<el-button @click="resetHandle">重置</el-button>
</el-form-item>
</el-form>
<div class="order_info">
<div class="item">
<div class="title">
用户信息
</div>
<template v-if="orderInfo.userInfo">
<div class="row">
<span> 昵称</span>{{ orderInfo.userInfo.userName }}
</div>
<div class="row">
<span> 手机号</span>{{ orderInfo.userInfo.phone }}
</div>
<div class="row">
<span> 支付宝账号</span>{{ orderInfo.userInfo.zhiFuBao }}
</div>
<div class="row">
<span>支付宝姓名</span> {{ orderInfo.userInfo.zhiFuBaoName }}
</div>
<div class="row">
<span>状态</span>
<span v-if="orderInfo.userInfo.status == 1" style="color: #67C23A;">正常</span>
<span v-else style="color: #F56C6C;">异常</span>
</div>
<div class="row" v-if="!orderInfo.userInfo.status">
<span>异常原因</span> <span style="color: #F56C6C;">{{ orderInfo.userInfo.platform }}</span>
</div>
</template>
<div class="empty" v-else>空空如也~</div>
</div>
<div class="item">
<div class="title">
<span>实名认证信息</span>
</div>
<template v-if="orderInfo.authInfo">
<div class="row">
<span>真实姓名</span> {{ orderInfo.authInfo.certName }}
</div>
<div class="row">
<span>身份证号</span> {{ orderInfo.authInfo.certNo }}
</div>
<div class="row">
<span>银行名称</span> {{ orderInfo.authInfo.bankName }}
</div>
<div class="row">
<span>银行卡号</span> {{ orderInfo.authInfo.accountNo }}
</div>
<div class="row">
<span>预留手机号</span> {{ orderInfo.authInfo.mobile }}
</div>
</template>
<div class="empty" v-else>空空如也~</div>
</div>
<div class="item">
<div class="title">
提现信息
</div>
<template v-if="orderInfo.withdrawTotal">
<div class="row">
<span>成功合计</span> {{ orderInfo.withdrawTotal.success.total }}
</div>
<div class="row">
<span>成功笔数</span> {{ orderInfo.withdrawTotal.success.count }}
</div>
<div class="row">
<span>失败合计</span> {{ orderInfo.withdrawTotal.fail.count }}
</div>
<div class="row">
<span>失败笔数</span> {{ orderInfo.withdrawTotal.fail.count }}
</div>
<div class="row">
<span>审核中合计</span> {{ orderInfo.withdrawTotal.auditing.count }}
</div>
<div class="row">
<span>审核中笔数</span> {{ orderInfo.withdrawTotal.auditing.count }}
</div>
<div class="row">
<span>其他合计</span> {{ orderInfo.withdrawTotal.other.count }}
</div>
<div class="row">
<span>其他笔数</span> {{ orderInfo.withdrawTotal.other.count }}
</div>
</template>
<div class="empty" v-else>空空如也~</div>
</div>
<div class="item">
<div class="title">
支付信息
</div>
<template v-if="orderInfo.payTotal">
<div class="row">
<span>成功合计</span> {{ orderInfo.payTotal.success.total }}
</div>
<div class="row">
<span>成功笔数</span> {{ orderInfo.payTotal.success.count }}
</div>
<div class="row">
<span>失败合计</span> {{ orderInfo.payTotal.fail.count }}
</div>
<div class="row">
<span>失败笔数</span> {{ orderInfo.payTotal.fail.count }}
</div>
<div class="row">
<span>未付款合计</span> {{ orderInfo.payTotal.unpaid.count }}
</div>
<div class="row">
<span>未付款笔数</span> {{ orderInfo.payTotal.unpaid.count }}
</div>
</template>
<div class="empty" v-else>空空如也~</div>
</div>
</div>
</div>
</template>
<script>
import { queryByTradeNo } from '@/api/viplist.js'
export default {
data() {
return {
loading: false,
queryForm: {
// outTradeNo: '7ed7edc900884b6dabf871a330c3e13b-1075149450307057439'
outTradeNo: ''
},
orderInfo: ''
}
},
methods: {
// 重置
resetHandle() {
this.queryForm.outTradeNo = ''
this.orderInfo = ''
},
// 根据订单号查询
async queryByTradeNo() {
try {
if (!this.queryForm.outTradeNo) return
this.loading = true
const res = await queryByTradeNo({ outTradeNo: this.queryForm.outTradeNo })
if (res.data.code == 0) {
this.orderInfo = res.data.data
} else {
this.orderInfo = ''
this.$message.error(res.data.msg)
}
} catch (error) {
this.orderInfo = ''
console.log(error);
}
this.loading = false
}
}
}
</script>
<style scoped lang="scss">
.order_info {
display: grid;
grid-template-columns: repeat(2, auto);
grid-template-rows: repeat(2, auto);
grid-column-gap: 15px;
grid-row-gap: 15px;
.item {
border: 1px solid #ececec;
padding: 15px;
background-color: #fff;
.title {
font-size: 16px;
font-weight: bold;
padding-bottom: 10px;
}
.row {
margin-top: 10px;
span {
color: #999;
}
}
.empty {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
color: #999;
padding-bottom: 45px;
}
}
}
</style>

View File

@@ -0,0 +1,194 @@
<template>
<div>
<div>
<el-form :inline="true" :model="query" class="demo-form-inline">
<el-form-item label="手机号">
<el-input v-model="query.phone" placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item label="用户名">
<el-input v-model="query.name" placeholder="请输入用户名"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getTableData">查询</el-button>
<el-button @click="resetHandle">重置</el-button>
</el-form-item>
</el-form>
</div>
<div>
<el-table :data="tableData.list" v-loading="tableData.loading" border stripe>
<el-table-column label="用户ID" prop="userId"></el-table-column>
<el-table-column label="用户名" prop="name"></el-table-column>
<el-table-column label="手机号" prop="mobile"></el-table-column>
<el-table-column label="实名信息" prop="certName" width="300">
<template slot-scope="scope">
<div>姓名{{ scope.row.certName }}</div>
<div>身份证号{{ scope.row.certNo }}</div>
<div>银行卡号{{ scope.row.accountNo }}</div>
<div>开户行{{ scope.row.bankName }}</div>
</template>
</el-table-column>
<el-table-column label="操作" width="180" align="center">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="edit(scope.row)">编辑</el-button>
<el-button size="mini" type="danger" @click="del(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]" :page-size="tableData.limit" :current-page="tableData.page"
layout="total,sizes, prev, pager, next,jumper" :total="tableData.total">
</el-pagination>
</div>
<el-dialog title="编辑" width="600px" :visible.sync="visible" @close="onClose">
<el-form :model="form" :rules="rules" ref="form" label-width="100px" label-position="left">
<el-form-item label="姓名" prop="certName">
<el-input v-model="form.certName" placeholder="请输入姓名"></el-input>
</el-form-item>
<el-form-item label="身份证号" prop="certNo">
<el-input v-model="form.certNo" placeholder="请输入身份证号"></el-input>
</el-form-item>
<el-form-item label="银行卡号" prop="accountNo">
<el-input v-model="form.accountNo" placeholder="请输入银行卡号"></el-input>
</el-form-item>
<el-form-item label="预留手机号" prop="mobile">
<el-input v-model="form.mobile" placeholder="请输入预留手机号"></el-input>
</el-form-item>
<el-form-item label="开户行" prop="bankName">
<el-input v-model="form.bankName" placeholder="请输入开户行"></el-input>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer" style="display: flex; justify-content: flex-end;">
<el-button size="small" @click="visible = false"> </el-button>
<el-button size="small" type="primary" :loading="confirmLoading"
@click="confirmHandle">确定</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script>
import { userInfo_list, userInfo, userInfoDel } from "@/api/withdraw.js";
export default {
data() {
return {
query: {
phone: "",
name: "",
},
resetQuery: {},
tableData: {
page: 1,
limit: 10,
total: 0,
list: [],
loading: false
},
visible: false,
confirmLoading: false,
form: {
userId: '',
certName: "",
certNo: "",
accountNo: "",
mobile: "",
bankName: "",
},
rules: {
certName: [{ required: true, message: "请输入姓名", trigger: "blur" }],
certNo: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
accountNo: [{ required: true, message: "请输入银行卡号", trigger: "blur" }],
mobile: [{ required: true, message: "请输入预留手机号", trigger: "blur" }],
bankName: [{ required: true, message: "请输入开户行", trigger: "blur" }],
}
}
},
mounted() {
this.resetQuery = { ...this.query };
this.getTableData()
},
methods: {
// 确定编辑
confirmHandle() {
this.$refs.form.validate(async valid => {
if (valid) {
try {
this.confirmLoading = true
await userInfo(this.form)
this.visible = false
this.$message.success('编辑成功')
this.getTableData()
} catch (error) {
console.log(error);
}
this.confirmLoading = false
}
})
},
// 关闭弹窗, 重置表单
onClose() {
this.$refs.form.resetFields();
},
// 编辑
edit(row) {
this.form = { ...row }
this.visible = true
},
// 删除
del(row) {
console.log(row);
this.$confirm('是否删除该用户信息?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
try {
await userInfoDel({ userId: row.userId })
this.$message.success('删除成功')
this.getTableData()
} catch (error) {
console.log(error);
}
}).catch(() => { })
},
// 重置
resetHandle() {
this.query = { ...this.resetQuery }
this.tableData.page = 1
this.getTableData()
},
// 分页数量
handleSizeChange(size) {
this.tableData.page = 1;
this.tableData.limit = size;
this.getTableData();
},
// 分页
handleCurrentChange(val) {
this.tableData.page = val;
this.getTableData();
},
// 获取数据
async getTableData() {
try {
this.tableData.loading = true
const { data } = await userInfo_list({
page: this.tableData.page,
limit: this.tableData.limit,
phone: this.query.phone,
name: this.query.name,
})
this.tableData.list = data.data.list
this.tableData.total = data.data.totalCount
} catch (error) {
console.log(error);
}
this.tableData.loading = false
}
}
}
</script>

View File

@@ -1,69 +1,55 @@
<template>
<el-tabs v-model = "activeName" @tab-click = "handleClick">
<!-- <el-tab-pane label = "会员列表" name = "first"> -->
<div style = "margin-right:2%;text-align: right;">
<el-button style="margin-left:15px;" size="mini" type="primary" icon="document" :disabled="!isAuth('viplist:add')" @click="add">添加
</el-button>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="会员列表" name="first">
<div style="margin-right:2%;text-align: right;">
<el-button style="margin-left:15px;" size="mini" type="primary" icon="document"
:disabled="!isAuth('viplist:add')" @click="add">添加
</el-button>
</div>
<el-table v-loading = "tableDataLoading" :data = "tableData.list" >
<el-table-column fixed prop = "id" label = "编号" width = "50"></el-table-column>
<el-table-column prop = "vipNameType" label = "会员类型" width = "150">
<template slot-scope = "scope">
<span v-if = "scope.row.vipNameType == 0">月会员</span>
<span v-if = "scope.row.vipNameType == 1">季会员</span>
<span v-if = "scope.row.vipNameType == 2">年会员</span>
</template>
</el-table-column>
<el-table-column prop = "money" label = "会员价格" >
</el-table-column>
<el-table-column prop="payDiamond" label="钻石价格">
</el-table-column>
<el-table-column label = "操作" width = "180" align="center" fixed="right">
<template slot-scope = "scope">
<el-button style="margin-left:15px;" size="mini" type="primary" icon="document" :disabled="!isAuth('viplist:update')" @click="updata(scope.row)">修改
</el-button>
<el-button size = "mini" type = "danger" :disabled="!isAuth('viplist:delete')" @click = "deletes(scope.row)">删除</el-button>
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column fixed prop="id" label="编号" width="50"></el-table-column>
<el-table-column prop="vipNameType" label="会员类型" width="150">
<template slot-scope="scope">
<span v-if="scope.row.vipNameType == 0">月会员</span>
<span v-if="scope.row.vipNameType == 1">季会员</span>
<span v-if="scope.row.vipNameType == 2">年会员</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="money" label="会员价格">
</el-table-column>
<el-table-column prop="payDiamond" label="钻石价格">
</el-table-column>
<el-table-column label="操作" width="180" align="center" fixed="right">
<template slot-scope="scope">
<el-button style="margin-left:15px;" size="mini" type="primary" icon="document"
:disabled="!isAuth('viplist:update')" @click="updata(scope.row)">修改
</el-button>
<el-button size="mini" type="danger" :disabled="!isAuth('viplist:delete')"
@click="deletes(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div style = "text-align: center;margin-top: 10px;float:right">
<el-pagination @size-change = "handleSizeChange" @current-change = "handleCurrentChange" :page-sizes = "[5, 10, 15, 20]"
:page-size = "limit" :current-page = "page" layout = "total,sizes, prev, pager, next,jumper"
:total = "tableData.totalCount">
</el-pagination>
<div style="text-align: center;margin-top: 10px;float:right">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:page-sizes="[5, 10, 15, 20]" :page-size="limit" :current-page="page"
layout="total,sizes, prev, pager, next,jumper" :total="tableData.totalCount">
</el-pagination>
</div>
<!-- </el-tab-pane> -->
</el-tab-pane>
<el-tab-pane label="实名用户" name="realName">
<RealNameList ref="RealNameList" />
</el-tab-pane>
<el-tab-pane label="订单汇总" name="orderInfo">
<OrderInfo ref="OrderInfo" />
</el-tab-pane>
<el-dialog title="添加" :visible.sync="dialogFormVisible" center>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">会员类型</span>
<el-radio-group v-model="vipNameType">
<el-radio :label="0">月会员</el-radio>
<el-radio :label="1">季会员</el-radio>
<el-radio :label="2">年会员</el-radio>
</el-radio-group>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">会员价格</span>
<el-input style="width:50%;" v-model="money" type="number" min="0" placeholder="请输入会员价格" ></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">钻石价格</span>
<el-input style="width:50%;" v-model="payDiamond" type="number" min="0" placeholder="请输入钻石价格" ></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="vipAdd()"> </el-button>
</div>
</el-dialog>
<el-dialog title="修改" :visible.sync="dialogFormVisible1" center>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">会员类型</span>
<el-radio-group v-model="vipNameType">
<el-radio :label="0">月会员</el-radio>
<el-radio :label="1">季会员</el-radio>
<el-radio :label="2">年会员</el-radio>
</el-radio-group>
<span style="width: 200px;display: inline-block;text-align: right;">会员类型</span>
<el-radio-group v-model="vipNameType">
<el-radio :label="0">月会员</el-radio>
<el-radio :label="1">季会员</el-radio>
<el-radio :label="2">年会员</el-radio>
</el-radio-group>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">会员价格</span>
@@ -71,7 +57,32 @@
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">钻石价格</span>
<el-input style="width:50%;" v-model="payDiamond" type="number" min="0" placeholder="请输入钻石价格" ></el-input>
<el-input style="width:50%;" v-model="payDiamond" type="number" min="0"
placeholder="请输入钻石价格"></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="vipAdd()"> </el-button>
</div>
</el-dialog>
<el-dialog title="修改" :visible.sync="dialogFormVisible1" center>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">会员类型</span>
<el-radio-group v-model="vipNameType">
<el-radio :label="0">月会员</el-radio>
<el-radio :label="1">季会员</el-radio>
<el-radio :label="2">年会员</el-radio>
</el-radio-group>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">会员价格</span>
<el-input style="width:50%;" v-model="money" type="number" min="0" placeholder="请输入会员价格"></el-input>
</div>
<div style="margin-bottom: 10px;">
<span style="width: 200px;display: inline-block;text-align: right;">钻石价格</span>
<el-input style="width:50%;" v-model="payDiamond" type="number" min="0"
placeholder="请输入钻石价格"></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible1 = false"> </el-button>
@@ -82,229 +93,236 @@
</template>
<script>
export default {
data () {
return {
activeName:'first',
page: 1,
limit: 10,
classify: 1,
id:'',
vipNameType: -1,
money: '',
payDiamond:'',
tableDataLoading:false,
dialogFormVisible:false,
dialogFormVisible1:false,
tableData:{},
}
},
methods: {
// 多选
changeFun (val) {
this.checkBoxData = val
},
// tabs切换
handleClick (tab, event) {
if (tab._props.label == '轮播图') {
this.page = 1
this.limit = 5
this.classify = 1
this.dataSelect()
}
},
handleSizeChange (val) {
this.limit = val
this.dataSelect()
},
handleCurrentChange (val) {
this.page = val
this.dataSelect()
},
// 查询列表
select() {
this.page = 1
this.limit = 10
this.dataSelect()
},
// 添加
add(){
this.vipNameType = -1
this.money = ''
this.payDiamond = ''
this.id = ''
this.dialogFormVisible = true
},
updata(row){
this.vipNameType = row.vipNameType
this.money = row.money
this.payDiamond = row.payDiamond
this.id = row.id
this.dialogFormVisible1 = true
},
vipAdd(){
if (this.vipNameType == -1) {
this.$notify({
title: '提示',
duration: 1800,
message: '请选择会员类型',
type: 'warning'
});
return
}
if (this.money === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入会员价格',
type: 'warning'
});
return
}
if (this.payDiamond === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入钻石价格',
type: 'warning'
});
return
}
this.$http({
url: this.$http.adornUrl('vipDetails/insertVipDetails'),
method: 'post',
data: this.$http.adornData({
'vipNameType':this.vipNameType,
'money':this.money,
'payDiamond':this.payDiamond,
})
}).then(({data}) => {
if(data.code == 0){
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dialogFormVisible = false
this.dataSelect()
}
})
}else{
this.$message({
message: data.msg,
type: 'warning',
duration: 1500,
onClose: () => {
}
})
}
})
},
vipUpdata(){
if (this.money === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入会员价格',
type: 'warning'
});
return
}
if (this.payDiamond === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入钻石价格',
type: 'warning'
});
return
}
this.$http({
url: this.$http.adornUrl('vipDetails/updateVipDetails'),
method: 'post',
data: this.$http.adornData({
'vipNameType':this.vipNameType,
'money':this.money,
'payDiamond':this.payDiamond,
'id':this.id
})
}).then(({data}) => {
if(data.code == 0){
this.dialogFormVisible1 = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dataSelect()
}
})
}else{
this.$message({
message: data.msg,
type: 'warning',
duration: 1500,
onClose: () => {
}
})
}
})
},
// 删除banner图
deletes (row) {
let delid = row.id
this.$confirm(`确定删除此条信息?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$http({
url: this.$http.adornUrl(`vipDetails/deleteVipDetails?id=${delid}`),
method: 'post',
params: this.$http.adornParams({})
}).then(({data}) => {
this.$message({
message: '删除成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dataSelect()
}
})
})
}).catch(() => {
})
},
// 获取数据列表
dataSelect () {
this.tableDataLoading = true
this.$http({
url: this.$http.adornUrl('vipDetails/selectVipDetailsList'),
method: 'get',
params: this.$http.adornParams({
'page': this.page,
'limit': this.limit
})
}).then(({data}) => {
if (data && data.code === 0) {
this.tableDataLoading = false
let returnData = data.data
this.tableData = returnData
}
})
}
},
mounted () {
this.dataSelect()
import RealNameList from './components/realNameList.vue'
import OrderInfo from './components/orderInfo.vue'
export default {
components: {
RealNameList,
OrderInfo
},
data() {
return {
activeName: 'first',
// activeName: 'orderInfo',
page: 1,
limit: 10,
classify: 1,
id: '',
vipNameType: -1,
money: '',
payDiamond: '',
tableDataLoading: false,
dialogFormVisible: false,
dialogFormVisible1: false,
tableData: {},
}
},
methods: {
// 多选
changeFun(val) {
this.checkBoxData = val
},
// tabs切换
handleClick(tab, event) {
if (tab._props.label == '轮播图') {
this.page = 1
this.limit = 5
this.classify = 1
this.dataSelect()
}
},
handleSizeChange(val) {
this.limit = val
this.dataSelect()
},
handleCurrentChange(val) {
this.page = val
this.dataSelect()
},
// 查询列表
select() {
this.page = 1
this.limit = 10
this.dataSelect()
},
// 添加
add() {
this.vipNameType = -1
this.money = ''
this.payDiamond = ''
this.id = ''
this.dialogFormVisible = true
},
updata(row) {
this.vipNameType = row.vipNameType
this.money = row.money
this.payDiamond = row.payDiamond
this.id = row.id
this.dialogFormVisible1 = true
},
vipAdd() {
if (this.vipNameType == -1) {
this.$notify({
title: '提示',
duration: 1800,
message: '请选择会员类型',
type: 'warning'
});
return
}
if (this.money === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入会员价格',
type: 'warning'
});
return
}
if (this.payDiamond === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入钻石价格',
type: 'warning'
});
return
}
this.$http({
url: this.$http.adornUrl('vipDetails/insertVipDetails'),
method: 'post',
data: this.$http.adornData({
'vipNameType': this.vipNameType,
'money': this.money,
'payDiamond': this.payDiamond,
})
}).then(({ data }) => {
if (data.code == 0) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dialogFormVisible = false
this.dataSelect()
}
})
} else {
this.$message({
message: data.msg,
type: 'warning',
duration: 1500,
onClose: () => {
}
})
}
})
},
vipUpdata() {
if (this.money === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入会员价格',
type: 'warning'
});
return
}
if (this.payDiamond === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入钻石价格',
type: 'warning'
});
return
}
this.$http({
url: this.$http.adornUrl('vipDetails/updateVipDetails'),
method: 'post',
data: this.$http.adornData({
'vipNameType': this.vipNameType,
'money': this.money,
'payDiamond': this.payDiamond,
'id': this.id
})
}).then(({ data }) => {
if (data.code == 0) {
this.dialogFormVisible1 = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dataSelect()
}
})
} else {
this.$message({
message: data.msg,
type: 'warning',
duration: 1500,
onClose: () => {
}
})
}
})
},
// 删除banner图
deletes(row) {
let delid = row.id
this.$confirm(`确定删除此条信息?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$http({
url: this.$http.adornUrl(`vipDetails/deleteVipDetails?id=${delid}`),
method: 'post',
params: this.$http.adornParams({})
}).then(({ data }) => {
this.$message({
message: '删除成功',
type: 'success',
duration: 1500,
onClose: () => {
this.dataSelect()
}
})
})
}).catch(() => {
})
},
// 获取数据列表
dataSelect() {
this.tableDataLoading = true
this.$http({
url: this.$http.adornUrl('vipDetails/selectVipDetailsList'),
method: 'get',
params: this.$http.adornParams({
'page': this.page,
'limit': this.limit
})
}).then(({ data }) => {
if (data && data.code === 0) {
this.tableDataLoading = false
let returnData = data.data
this.tableData = returnData
}
})
}
},
mounted() {
this.dataSelect()
}
}
</script>
<style>
.customWidth {
width: 80% !important;
}
.customWidth {
width: 80% !important;
}
</style>

View File

@@ -83,7 +83,7 @@
:page-size="limit"
:current-page="page"
layout="total,sizes, prev, pager, next,jumper"
:total="tableData.total"
:total="tableData.totalCount"
>
</el-pagination>
</div>