8 Commits

  1. 7
      gold-system/package-lock.json
  2. 1
      gold-system/package.json
  3. 2
      gold-system/src/router/index.js
  4. 49
      gold-system/src/views/audit/rechargeAudit.vue
  5. 577
      gold-system/src/views/audit/refundAudit.vue
  6. 379
      gold-system/src/views/consume/allConsume.vue
  7. 68
      gold-system/src/views/goldBeen/goldenBeenBalance.vue
  8. 257
      gold-system/src/views/goldBeen/goldenBeenConsum.vue
  9. 455
      gold-system/src/views/goldBeen/goldenBeenDetail.vue
  10. 494
      gold-system/src/views/goldBeen/onLineDetail.vue
  11. 37
      gold-system/src/views/index.vue
  12. 83
      gold-system/src/views/login.vue
  13. 363
      gold-system/src/views/managerecharge/activity.vue
  14. 513
      gold-system/src/views/managerecharge/rate.vue
  15. 429
      gold-system/src/views/permissions/index.vue
  16. 51
      gold-system/src/views/recharge/adminRecharge.vue
  17. 71
      gold-system/src/views/recharge/allRecharge.vue
  18. 47
      gold-system/src/views/refund/allRefund.vue
  19. 47
      gold-system/src/views/usergold/index.vue
  20. 109
      gold-system/src/views/usergoldInfo/index.vue
  21. 2
      gold-system/stats.html

7
gold-system/package-lock.json

@ -29,6 +29,7 @@
"@types/vue": "^2.0.0", "@types/vue": "^2.0.0",
"@vitejs/plugin-legacy": "^6.0.2", "@vitejs/plugin-legacy": "^6.0.2",
"@vitejs/plugin-vue": "^5.1.4", "@vitejs/plugin-vue": "^5.1.4",
"file-saver": "^2.0.5",
"rollup-plugin-visualizer": "^5.14.0", "rollup-plugin-visualizer": "^5.14.0",
"sass": "^1.86.3", "sass": "^1.86.3",
"terser": "^5.38.1", "terser": "^5.38.1",
@ -3642,6 +3643,12 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==",
"dev": true
},
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.1.1", "version": "7.1.1",
"resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",

1
gold-system/package.json

@ -33,6 +33,7 @@
"@types/vue": "^2.0.0", "@types/vue": "^2.0.0",
"@vitejs/plugin-legacy": "^6.0.2", "@vitejs/plugin-legacy": "^6.0.2",
"@vitejs/plugin-vue": "^5.1.4", "@vitejs/plugin-vue": "^5.1.4",
"file-saver": "^2.0.5",
"rollup-plugin-visualizer": "^5.14.0", "rollup-plugin-visualizer": "^5.14.0",
"sass": "^1.86.3", "sass": "^1.86.3",
"terser": "^5.38.1", "terser": "^5.38.1",

2
gold-system/src/router/index.js

@ -49,6 +49,8 @@ const router = createRouter({
{ path: '/goldenBeenBalance', name: "goldenBeenBalance", component: () => import("../views/goldBeen/goldenBeenBalance.vue") }, { path: '/goldenBeenBalance', name: "goldenBeenBalance", component: () => import("../views/goldBeen/goldenBeenBalance.vue") },
//金豆充值明细 //金豆充值明细
{ path: '/goldenBeenDetail', name: "goldenBeenDetail", component: () => import("../views/goldBeen/goldenBeenDetail.vue") }, { path: '/goldenBeenDetail', name: "goldenBeenDetail", component: () => import("../views/goldBeen/goldenBeenDetail.vue") },
//线上充值明细
{ path: '/onLineDetail', name: "onLineDetail", component: () => import("../views/goldBeen/onLineDetail.vue") },
//金豆消费明细 //金豆消费明细
{ path: '/goldenBeenConsum', name: "goldenBeenConsum", component: () => import("../views/goldBeen/goldenBeenConsum.vue") } { path: '/goldenBeenConsum', name: "goldenBeenConsum", component: () => import("../views/goldBeen/goldenBeenConsum.vue") }
] ]

49
gold-system/src/views/audit/rechargeAudit.vue

@ -395,7 +395,14 @@ const checkNumber = function () {
}) })
} }
} }
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
// ==================================== // ====================================
// //
const pass = function (row) { const pass = function (row) {
@ -508,6 +515,7 @@ onMounted(async function () {
await getAdminData() await getAdminData()
await getActivity() await getActivity()
await get() await get()
await getArea()
}) })
// //
const sortField = ref('') const sortField = ref('')
@ -840,41 +848,12 @@ const handleSortChange = (column) => {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

577
gold-system/src/views/audit/refundAudit.vue

@ -1,73 +1,73 @@
<script setup> <script setup>
import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus";
import request from "@/util/http";
import { ElMessage, ElMessageBox } from "element-plus";
import { AiFillRead } from "vue-icons-plus/ai";
import axios from "axios";
import moment from "moment";
import API from "../../api/index.js";
import { ref, onMounted, reactive, computed } from 'vue'
import ElementPlus from 'element-plus'
import request from '@/util/http'
import { ElMessage, ElMessageBox } from 'element-plus'
import { AiFillRead } from 'vue-icons-plus/ai'
import axios from 'axios'
import moment from 'moment'
import API from '../../api/index.js'
// //
// //
const admin = ref({ const admin = ref({
adminId: 1, adminId: 1,
name: "赵刚",
area: "中国",
});
name: '赵刚',
area: '中国'
})
// //
const adminData = ref({});
const adminData = ref({})
const getAdminData = async function () { const getAdminData = async function () {
try { try {
const result = await request({ const result = await request({
url: "/admin/userinfo",
data: {},
});
adminData.value = result;
console.log("请求成功", result);
console.log("用户信息", adminData.value);
url: '/admin/userinfo',
data: {}
})
adminData.value = result
console.log('请求成功', result)
console.log('用户信息', adminData.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
} }
};
}
// //
const tableData = ref([]);
const tableData = ref([])
// ====================================== // ======================================
// detail // detail
const detail = ref({});
const detail = ref({})
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 50,
});
pageSize: 50
})
// //
const total = ref(100);
const total = ref(100)
// //
const getTime = ref([]);
const getTime = ref([])
// //
const product = ref([]);
const product = ref([])
// //
const allData = ref([]);
const allData = ref([])
// //
const area = ref([]);
const area = ref([])
// ====================================== // ======================================
// //
const rejectVisible = ref(false);
const rejectVisible = ref(false)
// //
const rejectObj = ref({});
const rejectObj = ref({})
// //
const passObj = ref({});
const passObj = ref({})
// //
const activeName = ref("all");
const activeName = ref('all')
// 退 // 退
const refundType = [ const refundType = [
{ {
value: "退款商品",
label: "退款商品",
},
];
value: '退款商品',
label: '退款商品'
}
]
// // // //
// const tableHeight = computed(function () { // const tableHeight = computed(function () {
@ -75,421 +75,425 @@ const refundType = [
// }); // });
// ref // ref
const Ref = ref(null);
const Ref = ref(null)
// //
// //
// //
const trueGold = ref(0);
const trueCount = ref(0);
const trueGold = ref(0)
const trueCount = ref(0)
// //
const pendingCount = ref(0);
const pendingCount = ref(0)
// //
const pendingGold = ref(0);
const pendingGold = ref(0)
// //
const approvedCount = ref(0);
const approvedCount = ref(0)
// //
const approvedGold = ref(0);
const approvedGold = ref(0)
// //
const rejectedCount = ref(0);
const rejectedCount = ref(0)
// //
const rejectedGold = ref(0);
const rejectedGold = ref(0)
// ================================================================== // ==================================================================
// //
const get = async function (val) { const get = async function (val) {
try { try {
// //
if (adminData.value.area === "泰国") {
rechargeVo.value.areas = ["泰国", "越南"];
} else if (adminData.value.area !== "总部") {
rechargeVo.value.area = adminData.value.area;
if (adminData.value.area === '泰国') {
rechargeVo.value.areas = ['泰国', '越南']
} else if (adminData.value.area !== '总部') {
rechargeVo.value.area = adminData.value.area
} }
// //
if (typeof val === "number") {
getObj.value.pageNum = val;
if (typeof val === 'number') {
getObj.value.pageNum = val
} }
// //
if (getTime.value != null) { if (getTime.value != null) {
if (getTime.value.startDate != "" && getTime.value.endDate != "") {
detail.value.startDate = getTime.value[0];
detail.value.endDate = getTime.value[1];
if (getTime.value.startDate != '' && getTime.value.endDate != '') {
detail.value.startDate = getTime.value[0]
detail.value.endDate = getTime.value[1]
} }
} else { } else {
detail.value.startDate = "";
detail.value.endDate = "";
detail.value.startDate = ''
detail.value.endDate = ''
} }
detail.value.sortField = sortField.value;
detail.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
detail.value.sortField = sortField.value
detail.value.sortOrder = sortOrder.value
console.log('搜索参数', getObj.value)
// POST // POST
const result = await request({ const result = await request({
url: "/audit/audit/refund",
url: '/audit/audit/refund',
data: { data: {
pageNum: getObj.value.pageNum, pageNum: getObj.value.pageNum,
pageSize: getObj.value.pageSize, pageSize: getObj.value.pageSize,
detail: { detail: {
...detail.value,
},
},
});
const detailWithoutSort = { ...detail.value };
delete detailWithoutSort.sortField;
delete detailWithoutSort.sortOrder;
...detail.value
}
}
})
const detailWithoutSort = { ...detail.value }
delete detailWithoutSort.sortField
delete detailWithoutSort.sortOrder
const result2 = await request({ const result2 = await request({
url: "/refund/RefundA",
data: detailWithoutSort,
});
url: '/refund/RefundA',
data: detailWithoutSort
})
// //
if (result2.data) { if (result2.data) {
result2.data.forEach((item) => { result2.data.forEach((item) => {
switch (item.status) { switch (item.status) {
case "待审核":
case '待审核':
// item.raudit 0 // item.raudit 0
pendingCount.value = item.raudit || 0;
pendingCount.value = item.raudit || 0
// item.sumRaudit 0 // item.sumRaudit 0
pendingGold.value = item.sumRaudit || 0;
break;
case "已通过":
approvedCount.value = item.raudit || 0;
approvedGold.value = item.sumRaudit || 0;
break;
case "已驳回":
rejectedCount.value = item.raudit || 0;
rejectedGold.value = item.sumRaudit || 0;
break;
pendingGold.value = item.sumRaudit || 0
break
case '已通过':
approvedCount.value = item.raudit || 0
approvedGold.value = item.sumRaudit || 0
break
case '已驳回':
rejectedCount.value = item.raudit || 0
rejectedGold.value = item.sumRaudit || 0
break
} }
});
})
} }
trueGold.value =
pendingGold.value + approvedGold.value + rejectedGold.value;
trueGold.value = pendingGold.value + approvedGold.value + rejectedGold.value
trueCount.value = trueCount.value =
pendingCount.value + approvedCount.value + rejectedCount.value;
pendingCount.value + approvedCount.value + rejectedCount.value
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
tableData.value = result.data.list;
console.log("tableData", tableData.value);
tableData.value = result.data.list
console.log('tableData', tableData.value)
// //
total.value = result.data.total;
console.log("total", total.value);
total.value = result.data.total
console.log('total', total.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1;
get();
};
getObj.value.pageNum = 1
get()
}
// //
const reset = function () { const reset = function () {
detail.value.area = "";
detail.value.jwcode = "";
detail.value.refundType = "";
detail.value.refundGoods = "";
detail.value.startDate = "";
detail.value.endDate = "";
sortField.value = "";
sortOrder.value = "";
getTime.value = {};
};
detail.value.area = ''
detail.value.jwcode = ''
detail.value.refundType = ''
detail.value.refundGoods = ''
detail.value.startDate = ''
detail.value.endDate = ''
sortField.value = ''
sortOrder.value = ''
getTime.value = {}
}
// //
const getToday = function () { const getToday = function () {
const today = new Date();
const today = new Date()
const startDate = new Date( const startDate = new Date(
today.getFullYear(), today.getFullYear(),
today.getMonth(), today.getMonth(),
today.getDate() today.getDate()
);
)
const endDate = new Date( const endDate = new Date(
today.getFullYear(), today.getFullYear(),
today.getMonth(), today.getMonth(),
today.getDate() + 1 today.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
)
getTime.value = [startDate, endDate]
console.log('getTime', getTime.value)
get()
}
// //
const getYesterday = function () { const getYesterday = function () {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const yesterday = new Date()
yesterday.setDate(yesterday.getDate() - 1)
const startDate = new Date( const startDate = new Date(
yesterday.getFullYear(), yesterday.getFullYear(),
yesterday.getMonth(), yesterday.getMonth(),
yesterday.getDate() yesterday.getDate()
);
)
const endDate = new Date( const endDate = new Date(
yesterday.getFullYear(), yesterday.getFullYear(),
yesterday.getMonth(), yesterday.getMonth(),
yesterday.getDate() + 1 yesterday.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
)
getTime.value = [startDate, endDate]
console.log('getTime', getTime.value)
get()
}
// 7 // 7
const get7Days = function () { const get7Days = function () {
const today = new Date();
const today = new Date()
const startDate = new Date( const startDate = new Date(
today.getFullYear(), today.getFullYear(),
today.getMonth(), today.getMonth(),
today.getDate() - 6 today.getDate() - 6
);
)
const endDate = new Date( const endDate = new Date(
today.getFullYear(), today.getFullYear(),
today.getMonth(), today.getMonth(),
today.getDate() + 1 today.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
)
getTime.value = [startDate, endDate]
console.log('getTime', getTime.value)
get()
}
// //
const adminAll = function () { const adminAll = function () {
console.log("adminAll");
detail.value.status = "";
getObj.value.pageNum = 1;
get();
};
console.log('adminAll')
detail.value.status = ''
getObj.value.pageNum = 1
get()
}
// //
const adminWait = async function () { const adminWait = async function () {
detail.value.status = 0;
getObj.value.pageNum = 1;
await get();
console.log("adminWait");
trueGold.value = pendingGold.value;
trueCount.value = pendingCount.value;
};
detail.value.status = 0
getObj.value.pageNum = 1
await get()
console.log('adminWait')
trueGold.value = pendingGold.value
trueCount.value = pendingCount.value
}
// //
const adminPass = async function () { const adminPass = async function () {
detail.value.status = 1;
getObj.value.pageNum = 1;
await get();
console.log("adminPass");
trueGold.value = approvedGold.value;
trueCount.value = approvedCount.value;
};
detail.value.status = 1
getObj.value.pageNum = 1
await get()
console.log('adminPass')
trueGold.value = approvedGold.value
trueCount.value = approvedCount.value
}
// //
const adminReject = async function () { const adminReject = async function () {
detail.value.status = 2;
getObj.value.pageNum = 1;
await get();
console.log("adminReject");
trueGold.value = rejectedGold.value;
trueCount.value = rejectedCount.value;
};
detail.value.status = 2
getObj.value.pageNum = 1
await get()
console.log('adminReject')
trueGold.value = rejectedGold.value
trueCount.value = rejectedCount.value
}
// //
const handleClick = function (tab, event) { const handleClick = function (tab, event) {
if (tab.props.name === "all") {
adminAll();
} else if (tab.props.name === "wait") {
adminWait();
} else if (tab.props.name === "pass") {
adminPass();
} else if (tab.props.name === "reject") {
adminReject();
if (tab.props.name === 'all') {
adminAll()
} else if (tab.props.name === 'wait') {
adminWait()
} else if (tab.props.name === 'pass') {
adminPass()
} else if (tab.props.name === 'reject') {
adminReject()
} }
};
}
// //
const getProduct = async function () { const getProduct = async function () {
try { try {
// POST // POST
const result = await request({ const result = await request({
url: "/product",
data: {},
});
url: '/product',
data: {}
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
product.value = result.data;
console.log("产品", product.value);
product.value = result.data
console.log('产品', product.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const getArea = async function () { const getArea = async function () {
try { try {
// POST // POST
const result = await request({ const result = await request({
url: "/recharge/user/search",
data: {},
});
url: '/recharge/user/search',
data: {}
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
area.value = result.data;
console.log("地区", area.value);
area.value = result.data
console.log('地区', area.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const checkNumber = function () { const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === "number") {
console.log(
"总共有多少页" + Math.ceil(total.value / getObj.value.pageSize)
);
if (typeof parseInt(getObj.value.pageNum) === 'number') {
console.log('总共有多少页' + Math.ceil(total.value / getObj.value.pageSize))
if ( if (
getObj.value.pageNum > 0 && getObj.value.pageNum > 0 &&
getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize) getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
) { ) {
getObj.value.pageNum = parseInt(getObj.value.pageNum);
console.log("输入的数字合法");
get();
getObj.value.pageNum = parseInt(getObj.value.pageNum)
console.log('输入的数字合法')
get()
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
};
}
// ==================================== // ====================================
// //
const pass = function (row) { const pass = function (row) {
// //
passObj.value.adminId = adminData.value.adminId;
passObj.value.auditId = row.auditId;
passObj.value.status = 1;
passObj.value.refundId = row.refundId;
passObj.value.adminName = row.adminName;
passObj.value.username = row.username;
passObj.value.area = row.area;
console.log("通过对象", passObj.value);
};
passObj.value.adminId = adminData.value.adminId
passObj.value.auditId = row.auditId
passObj.value.status = 1
passObj.value.refundId = row.refundId
passObj.value.adminName = row.adminName
passObj.value.username = row.username
passObj.value.area = row.area
console.log('通过对象', passObj.value)
}
// //
const passConfirm = async function () { const passConfirm = async function () {
try { try {
console.log("通过对象", passObj.value);
console.log('通过对象', passObj.value)
// POST // POST
const result = await request({ const result = await request({
url: "/audit/audit/edit",
data: passObj.value,
});
url: '/audit/audit/edit',
data: passObj.value
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
get();
get()
// //
ElMessage({ ElMessage({
type: "success",
message: "通过成功!",
});
type: 'success',
message: '通过成功!'
})
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const openRejectVisible = function () { const openRejectVisible = function () {
rejectVisible.value = true;
};
rejectVisible.value = true
}
// //
const closeRejectVisible = function () { const closeRejectVisible = function () {
rejectVisible.value = false;
};
rejectVisible.value = false
}
// //
const reject = function (row) { const reject = function (row) {
// //
rejectObj.value.adminId = adminData.value.adminId;
rejectObj.value.auditId = row.auditId;
rejectObj.value.status = 2;
rejectObj.value.reson = "";
rejectObj.value.refundId = row.refundId;
console.log("驳回对象", rejectObj.value);
openRejectVisible();
};
rejectObj.value.adminId = adminData.value.adminId
rejectObj.value.auditId = row.auditId
rejectObj.value.status = 2
rejectObj.value.reson = ''
rejectObj.value.refundId = row.refundId
console.log('驳回对象', rejectObj.value)
openRejectVisible()
}
// //
const rejectConfirm = async function () { const rejectConfirm = async function () {
Ref.value.validate(async (valid) => { Ref.value.validate(async (valid) => {
if (valid) { if (valid) {
try { try {
console.log("驳回对象", rejectObj.value);
console.log('驳回对象', rejectObj.value)
// POST // POST
const result = await request({ const result = await request({
url: "/audit/audit/edit",
data: rejectObj.value,
});
url: '/audit/audit/edit',
data: rejectObj.value
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
get();
get()
// //
closeRejectVisible();
closeRejectVisible()
// //
ElMessage({ ElMessage({
type: "success",
message: "驳回成功!",
});
type: 'success',
message: '驳回成功!'
})
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
});
};
})
}
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
// //
const rules = reactive({ const rules = reactive({
reson: [{ required: true, message: "请输入驳回理由", trigger: "blur" }],
});
reson: [{ required: true, message: '请输入驳回理由', trigger: 'blur' }]
})
// //
onMounted(async function () { onMounted(async function () {
await getAdminData();
await get();
getProduct();
await getArea();
await getArea();
});
await getAdminData()
await get()
getProduct()
await getArea()
await getArea()
})
// //
const sortField = ref("");
const sortOrder = ref("");
const sortField = ref('')
const sortOrder = ref('')
// //
const handleSortChange = (column) => { const handleSortChange = (column) => {
console.log("排序字段:", column.prop);
console.log("排序方式:", column.order);
if (column.prop === "rechargeCoin") {
sortField.value = "recharge_coin";
} else if (column.prop === "taskCoin") {
sortField.value = "task_coin";
} else if (column.prop === "freeCoin") {
sortField.value = "free_coin";
} else if (column.prop === "createTime") {
sortField.value = "create_time";
console.log('排序字段:', column.prop)
console.log('排序方式:', column.order)
if (column.prop === 'rechargeCoin') {
sortField.value = 'recharge_coin'
} else if (column.prop === 'taskCoin') {
sortField.value = 'task_coin'
} else if (column.prop === 'freeCoin') {
sortField.value = 'free_coin'
} else if (column.prop === 'createTime') {
sortField.value = 'create_time'
} }
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
get()
}
</script> </script>
<template> <template>
@ -735,7 +739,7 @@ const handleSortChange = (column) => {
width="200px" width="200px"
> >
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.createTime).format("YYYY-MM-DD HH:mm:ss") }}
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -794,41 +798,12 @@ const handleSortChange = (column) => {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

379
gold-system/src/views/consume/allConsume.vue

@ -1,71 +1,71 @@
<script setup> <script setup>
import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus";
import { AiFillRead } from "vue-icons-plus/ai";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios";
import API from "../../api/index.js";
import request from "@/util/http";
import { ref, onMounted, reactive, computed } from 'vue'
import ElementPlus from 'element-plus'
import { AiFillRead } from 'vue-icons-plus/ai'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import API from '../../api/index.js'
import request from '@/util/http'
// //
// //
const adminData = ref({});
const adminData = ref({})
const getAdminData = async function () { const getAdminData = async function () {
try { try {
const result = await request({ const result = await request({
url: "/admin/userinfo",
data: {},
});
adminData.value = result;
console.log("请求成功", result);
console.log("用户信息", adminData.value);
url: '/admin/userinfo',
data: {}
})
adminData.value = result
console.log('请求成功', result)
console.log('用户信息', adminData.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
} }
};
}
// //
const tableData = ref([]);
const tableData = ref([])
// ====================================== // ======================================
// detailVo // detailVo
const detailVo = ref({});
const detailVo = ref({})
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 50,
});
pageSize: 50
})
// //
const total = ref(100);
const total = ref(100)
// //
const getTime = ref([]);
const getTime = ref([])
// //
const activity = ref([]);
const activity = ref([])
// //
const allData = ref([]);
const allData = ref([])
// //
const area = ref([]);
const area = ref([])
// //
const activeName = ref("all");
const activeName = ref('all')
// //
const consumePlatform = [ const consumePlatform = [
{ {
value: "4",
label: "金币系统",
value: '4',
label: '金币系统'
}, },
{ {
value: "1",
label: "ERP系统",
value: '1',
label: 'ERP系统'
}, },
{ {
value: "2",
label: "Homily Chart",
value: '2',
label: 'Homily Chart'
}, },
{ {
value: "3",
label: "Homily Link",
},
];
value: '3',
label: 'Homily Link'
}
]
// // // //
// const tableHeight = computed(function () { // const tableHeight = computed(function () {
@ -73,254 +73,260 @@ const consumePlatform = [
// }); // });
// //
// //
const tableDataTotal = ref({});
const rechargeCoin = ref(0);
const freeCoin = ref(0);
const taskCoin = ref(0);
const totalCoin = ref(0);
const tableDataTotal = ref({})
const rechargeCoin = ref(0)
const freeCoin = ref(0)
const taskCoin = ref(0)
const totalCoin = ref(0)
// ========================================================================================================================================================= // =========================================================================================================================================================
// //
const get = async function (val) { const get = async function (val) {
try { try {
// //
if (adminData.value.area != "总部") {
detailVo.value.area = adminData.value.area;
if (adminData.value.area != '总部') {
detailVo.value.area = adminData.value.area
} }
// //
if (typeof val === "number") {
getObj.value.pageNum = val;
if (typeof val === 'number') {
getObj.value.pageNum = val
} }
// //
if (getTime.value != null) { if (getTime.value != null) {
if (getTime.value.startDate != "" && getTime.value.endDate != "") {
detailVo.value.startDate = getTime.value[0];
detailVo.value.endDate = getTime.value[1];
if (getTime.value.startDate != '' && getTime.value.endDate != '') {
detailVo.value.startDate = getTime.value[0]
detailVo.value.endDate = getTime.value[1]
} }
} else { } else {
detailVo.value.startDate = "";
detailVo.value.endDate = "";
detailVo.value.startDate = ''
detailVo.value.endDate = ''
} }
detailVo.value.sortField = sortField.value;
detailVo.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
detailVo.value.sortField = sortField.value
detailVo.value.sortOrder = sortOrder.value
console.log('搜索参数', getObj.value)
// POST // POST
const result = await request({ const result = await request({
url: "/consume/select",
url: '/consume/select',
data: { data: {
...getObj.value, ...getObj.value,
consumeDetail: { ...detailVo.value },
},
});
consumeDetail: { ...detailVo.value }
}
})
// //
// detail.value // detail.value
const detailWithoutSort = { ...detailVo.value };
delete detailWithoutSort.sortField;
delete detailWithoutSort.sortOrder;
const detailWithoutSort = { ...detailVo.value }
delete detailWithoutSort.sortField
delete detailWithoutSort.sortOrder
const result2 = await request({ const result2 = await request({
url: "/consume/SumConsume",
url: '/consume/SumConsume',
data: { data: {
...detailWithoutSort,
},
});
...detailWithoutSort
}
})
// //
console.log("请求成功", result);
console.log("请求成功2", result2);
console.log('请求成功', result)
console.log('请求成功2', result2)
// //
tableData.value = result.data.list;
tableDataTotal.value = result2.data;
tableData.value = result.data.list
tableDataTotal.value = result2.data
if (result2.data == null) { if (result2.data == null) {
console.log("请求成功2", result2);
console.log('请求成功2', result2)
tableDataTotal.value = { tableDataTotal.value = {
sumRcion: 0, sumRcion: 0,
sumFcion: 0, sumFcion: 0,
sumTcion: 0, sumTcion: 0,
sumcion: 0,
};
sumcion: 0
}
} }
console.log("tableDataT", tableDataTotal);
console.log('tableDataT', tableDataTotal)
// //
rechargeCoin.value = parseFloat( rechargeCoin.value = parseFloat(
(tableDataTotal.value.sumRcion / 100).toFixed(2) (tableDataTotal.value.sumRcion / 100).toFixed(2)
);
)
freeCoin.value = parseFloat( freeCoin.value = parseFloat(
(tableDataTotal.value.sumFcion / 100).toFixed(2) (tableDataTotal.value.sumFcion / 100).toFixed(2)
);
)
taskCoin.value = parseFloat( taskCoin.value = parseFloat(
(tableDataTotal.value.sumTcion / 100).toFixed(2) (tableDataTotal.value.sumTcion / 100).toFixed(2)
);
)
totalCoin.value = parseFloat( totalCoin.value = parseFloat(
(tableDataTotal.value.sumcion / 100).toFixed(2) (tableDataTotal.value.sumcion / 100).toFixed(2)
);
console.log("tableData", tableData.value);
)
console.log('tableData', tableData.value)
// //
total.value = result.data.total;
console.log("total", total.value);
total.value = result.data.total
console.log('total', total.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1;
get();
};
getObj.value.pageNum = 1
get()
}
// //
const reset = function () { const reset = function () {
detailVo.value.productName = "";
detailVo.value.consumePlatform = "";
detailVo.value.consumeType = "";
detailVo.value.startDate = "";
detailVo.value.endDate = "";
sortField.value = "";
sortOrder.value = "";
getTime.value = {};
};
detailVo.value.productName = ''
detailVo.value.consumePlatform = ''
detailVo.value.consumeType = ''
detailVo.value.startDate = ''
detailVo.value.endDate = ''
sortField.value = ''
sortOrder.value = ''
getTime.value = {}
}
// //
const getToday = function () { const getToday = function () {
const today = new Date();
const today = new Date()
const startDate = new Date( const startDate = new Date(
today.getFullYear(), today.getFullYear(),
today.getMonth(), today.getMonth(),
today.getDate() today.getDate()
);
)
const endDate = new Date( const endDate = new Date(
today.getFullYear(), today.getFullYear(),
today.getMonth(), today.getMonth(),
today.getDate() + 1 today.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
)
getTime.value = [startDate, endDate]
console.log('getTime', getTime.value)
get()
}
// //
const getYesterday = function () { const getYesterday = function () {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const yesterday = new Date()
yesterday.setDate(yesterday.getDate() - 1)
const startDate = new Date( const startDate = new Date(
yesterday.getFullYear(), yesterday.getFullYear(),
yesterday.getMonth(), yesterday.getMonth(),
yesterday.getDate() yesterday.getDate()
);
)
const endDate = new Date( const endDate = new Date(
yesterday.getFullYear(), yesterday.getFullYear(),
yesterday.getMonth(), yesterday.getMonth(),
yesterday.getDate() + 1 yesterday.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
)
getTime.value = [startDate, endDate]
console.log('getTime', getTime.value)
get()
}
// 7 // 7
const get7Days = function () { const get7Days = function () {
const today = new Date();
const today = new Date()
const startDate = new Date( const startDate = new Date(
today.getFullYear(), today.getFullYear(),
today.getMonth(), today.getMonth(),
today.getDate() - 6 today.getDate() - 6
);
)
const endDate = new Date( const endDate = new Date(
today.getFullYear(), today.getFullYear(),
today.getMonth(), today.getMonth(),
today.getDate() + 1 today.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
)
getTime.value = [startDate, endDate]
console.log('getTime', getTime.value)
get()
}
// //
const handleClick = function (tab, event) { const handleClick = function (tab, event) {
if (tab.props.name === "all") {
adminAll();
} else if (tab.props.name === "wait") {
adminWait();
} else if (tab.props.name === "pass") {
adminPass();
} else if (tab.props.name === "reject") {
adminReject();
if (tab.props.name === 'all') {
adminAll()
} else if (tab.props.name === 'wait') {
adminWait()
} else if (tab.props.name === 'pass') {
adminPass()
} else if (tab.props.name === 'reject') {
adminReject()
} }
};
}
// //
onMounted(async function () { onMounted(async function () {
await getAdminData();
await get();
await getAdminData()
await get()
// getActivity(); // getActivity();
// await getArea(); // await getArea();
});
})
// //
const checkNumber = function () { const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === "number") {
console.log(
"总共有多少页" + Math.ceil(total.value / getObj.value.pageSize)
);
if (typeof parseInt(getObj.value.pageNum) === 'number') {
console.log('总共有多少页' + Math.ceil(total.value / getObj.value.pageSize))
if ( if (
getObj.value.pageNum > 0 && getObj.value.pageNum > 0 &&
getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize) getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
) { ) {
getObj.value.pageNum = parseInt(getObj.value.pageNum);
console.log("输入的数字合法");
get();
getObj.value.pageNum = parseInt(getObj.value.pageNum)
console.log('输入的数字合法')
get()
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
};
}
// //
const goods = ref([]);
const goods = ref([])
const getGoods = async function () { const getGoods = async function () {
try { try {
// POST // POST
const result = await request({ const result = await request({
url: "/product",
data: {},
});
url: '/product',
data: {}
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
goods.value = result.data;
console.log("allData", allData.value);
console.log("地区", area.value);
goods.value = result.data
console.log('allData', allData.value)
console.log('地区', area.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
getGoods();
}
getGoods()
// //
const sortField = ref("");
const sortOrder = ref("");
const sortField = ref('')
const sortOrder = ref('')
// //
const handleSortChange = (column) => { const handleSortChange = (column) => {
console.log("排序字段:", column.prop);
console.log("排序方式:", column.order);
if (column.prop === "rechargeCoin") {
sortField.value = "recharge_coin";
} else if (column.prop === "taskCoin") {
sortField.value = "task_coin";
} else if (column.prop === "freeCoin") {
sortField.value = "free_coin";
} else if (column.prop === "createTime") {
sortField.value = "create_time";
console.log('排序字段:', column.prop)
console.log('排序方式:', column.order)
if (column.prop === 'rechargeCoin') {
sortField.value = 'recharge_coin'
} else if (column.prop === 'taskCoin') {
sortField.value = 'task_coin'
} else if (column.prop === 'freeCoin') {
sortField.value = 'free_coin'
} else if (column.prop === 'createTime') {
sortField.value = 'create_time'
} }
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
get()
}
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
</script> </script>
<template> <template>
@ -545,41 +551,12 @@ const handleSortChange = (column) => {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next, slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

68
gold-system/src/views/goldBeen/goldenBeenBalance.vue

@ -24,7 +24,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" @click="getInit({})"
<el-button type="primary" size="small" @click="search()"
>查询</el-button >查询</el-button
> >
<el-button type="primary" size="small" @click="reset(ruleFormRef)" <el-button type="primary" size="small" @click="reset(ruleFormRef)"
@ -57,53 +57,42 @@
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120" /> <el-table-column fixed="left" prop="jwcode" label="精网号" width="120" />
<el-table-column prop="ipAddress" label="所属地区" width="120" /> <el-table-column prop="ipAddress" label="所属地区" width="120" />
<el-table-column prop="jinbi" label="金豆数量" width="120">
<el-table-column prop="jinbi" sortable label="金豆数量" width="120">
</el-table-column> </el-table-column>
<el-table-column prop="jinbiBuy" label="付费金豆" width="120">
<el-table-column prop="jinbiBuy" sortable label="付费金豆" width="120">
</el-table-column> </el-table-column>
<el-table-column prop="jinbiFree" label="免费金豆" width="120">
<el-table-column prop="jinbiFree" sortable label="免费金豆" width="120">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
sortable sortable
width="120"
prop="jinbiCostTotal" prop="jinbiCostTotal"
label="历史消费" label="历史消费"
></el-table-column> ></el-table-column>
<el-table-column
sortable
prop="jinbiCostbeenTotal"
width="160"
label="历史付费金豆"
></el-table-column>
<el-table-column
sortable
prop="jinbifreebeenTotal"
width="160"
label="历史免费金豆"
></el-table-column>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<div class="pagination"> <div class="pagination">
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="handlePageSizeChange"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
:current-page="getObj.pageNum"
@current-change="handlePageChange"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
> >
<div>跳至</div>
<el-input v-model="getObj.pageNum" style="width: 40px" />
<div></div>
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
@ -129,6 +118,14 @@ let getObj = ref({
jinbiCostTotal: 0, jinbiCostTotal: 0,
jinbiFree: 0 jinbiFree: 0
}) })
const search = function () {
getInit({})
getCount()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
getInit({})
}
// //
const getInit = async function ({ const getInit = async function ({
sortField = '', sortField = '',
@ -165,14 +162,9 @@ const handleSortChange = (column) => {
getInit({ sortField: prop, sortOrder: 'ASC' }) getInit({ sortField: prop, sortOrder: 'ASC' })
} else if (order === 'descending') { } else if (order === 'descending') {
getInit({ sortField: prop, sortOrder: 'DESC' }) getInit({ sortField: prop, sortOrder: 'DESC' })
} else {
getInit({})
} }
} }
const handlePageChange = (val: number): void => {
getObj.value.pageNum = val
getInit({})
}
const handlePageSizeChange = (val) => { const handlePageSizeChange = (val) => {
getObj.value.pageSize = val getObj.value.pageSize = val
getObj.value.pageNum = 1 getObj.value.pageNum = 1

257
gold-system/src/views/goldBeen/goldenBeenConsum.vue

@ -1,16 +1,16 @@
<template> <template>
<div class="filter-box"> <div class="filter-box">
<el-form>
<el-form-item label="精网号">
<el-form :model="detailY" ref="ruleFormRef">
<el-form-item prop="jwcode" label="精网号">
<el-input <el-input
v-model="detailY.jwcode" v-model="detailY.jwcode"
placeholder="请输入精网号" placeholder="请输入精网号"
style="width: 220px" style="width: 220px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="地区">
<el-form-item prop="ipAddress" label="地区">
<el-select <el-select
v-model="detailY.area"
v-model="detailY.ipAddress"
placeholder="请选择所属地区" placeholder="请选择所属地区"
style="width: 240px" style="width: 240px"
clearable clearable
@ -23,27 +23,28 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="商品名称">
<el-form-item prop="sourceType" label="消费类型">
<el-select <el-select
v-model="detailY.good"
placeholder="请选择商品"
v-model="detailY.sourceType"
placeholder="请选择消费类型"
style="width: 240px" style="width: 240px"
clearable clearable
> >
<el-option <el-option
v-for="item in goodList"
:key="item"
:label="item"
:value="item"
v-for="item in consumList"
:key="item.value"
:label="item.text"
:value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="频道">
<!-- <el-form-item prop="channel" label="频道">
<el-select <el-select
v-model="detailY.channel" v-model="detailY.channel"
placeholder="请选择频道" placeholder="请选择频道"
style="width: 240px" style="width: 240px"
clearable clearable
filterable
> >
<el-option <el-option
v-for="item in channelList" v-for="item in channelList"
@ -52,46 +53,34 @@
:value="item" :value="item"
/> />
</el-select> </el-select>
</el-form-item> -->
<el-form-item prop="sourceName" label="直播间">
<el-input
v-model="detailY.sourceName"
placeholder="请输入直播间"
style="width: 220px"
/>
</el-form-item> </el-form-item>
<el-form-item label="直播间">
<el-select
v-model="detailY.liveroom"
placeholder="请选择直播间"
style="width: 240px"
clearable
>
<el-option
v-for="item in liveroomList"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="消费时间">
<el-form-item prop="createTime" label="消费时间">
<el-date-picker <el-date-picker
v-model="detailY.createTime" v-model="detailY.createTime"
type="daterange" type="daterange"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY-MM-DD HH:mm:ss"
style="width: 240px" style="width: 240px"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="search">查询</el-button> <el-button type="primary" @click="search">查询</el-button>
<el-button type="success" @click="reset">重置</el-button>
<el-button type="success" @click="reset(ruleFormRef)">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div class="table-box"> <div class="table-box">
<p>金豆总数充值金豆总数合计新币数</p>
<el-table
:data="tableData"
style="width: 100%"
:default-sort="{ prop: 'createTime', order: 'descending' }"
height="584px"
>
<p>合计数:实际用户金豆数:{{ beenCount }}</p>
<el-table :data="tableData" style="width: 100%" height="584px">
<el-table-column type="index" label="序号" width="100px" fixed="left"> <el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -99,49 +88,25 @@
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="left" prop="username" label="姓名" width="150" />
<el-table-column fixed="left" prop="nickname" label="姓名" width="150" />
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120" /> <el-table-column fixed="left" prop="jwcode" label="精网号" width="120" />
<el-table-column prop="area" label="所属地区" width="120" />
<el-table-column prop="type" label="类型" width="110">
<!-- 模板内容 -->
<el-table-column prop="ipAddress" label="地区" width="120" />
<el-table-column prop="sourceType" label="消费类型" width="120">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.updateType == 1">
<span>消费</span>
</span>
<span v-if="scope.row.updateType == 0">
<span>充值</span>
</span>
<span v-if="scope.row.updateType == 2">
<span>退款</span>
</span>
<span v-if="scope.row.updateType == 3">
<span>其他</span>
</span>
<span>{{
consumList.find((item) => item.value === scope.row.sourceType)?.text
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="order" label="订单号" width="120" />
<el-table-column prop="been" label="金豆数量" width="120">
<el-table-column prop="jinbiCostTotal" label="金豆价格" width="120">
</el-table-column> </el-table-column>
<el-table-column prop="paybeen" label="付费金豆" width="120">
<!-- <el-table-column prop="chanel" label="频道" width="120">
</el-table-column> -->
<el-table-column prop="room" label="直播间" width="120">
</el-table-column> </el-table-column>
<el-table-column prop="freebeen" label="免费金豆" width="120">
</el-table-column>
<el-table-column prop="count" label="金额"></el-table-column>
<el-table-column prop="consumePlatform" label="充值平台" width="140">
<template #default="scope">
<!-- 使用非严格相等比较 -->
<span v-if="scope.row.consumePlatform == 0">初始化金币</span>
<span v-if="scope.row.consumePlatform == 1">ERP系统</span>
<span v-if="scope.row.consumePlatform == 3">Homily Link</span>
<span v-if="scope.row.consumePlatform == 2">Homily Chart</span>
<span v-if="scope.row.consumePlatform == 4">金币系统</span>
</template>
</el-table-column>
<el-table-column prop="notes" label="备注" width="210"></el-table-column>
<el-table-column <el-table-column
prop="createTime" prop="createTime"
sortable="“custom”"
label="充值时间"
label="消费时间"
width="210" width="210"
show-overflow-tooltip show-overflow-tooltip
> >
@ -151,48 +116,39 @@
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column fixed="right" label="操作" min-width="120">
<template #default>
<el-tooltip class="box-item" effect="light" placement="top-start">
<template #default>
<el-button link type="primary" size="small"> 返还金豆 </el-button>
</template>
<template #content>
<div>是否申请返还该条消费</div>
<el-button size="small">确定 </el-button>
<el-button size="small">取消 </el-button>
</template>
</el-tooltip>
</template>
</el-table-column> -->
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<div class="pagination"> <div class="pagination">
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="getInit({})"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
:current-page="getObj.pageNum"
@current-change="getInit({})"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
> >
<div>跳至</div>
<el-input v-model="getObj.pageNum" style="width: 40px" />
<div></div>
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue' import { ref } from 'vue'
import type { FormInstance } from 'element-plus'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import moment from 'moment' import moment from 'moment'
import API from '@/util/http' import API from '@/util/http'
@ -202,41 +158,55 @@ const tableData = ref([])
// //
const total = ref(100) const total = ref(100)
const areaList = ref<string[]>([]) const areaList = ref<string[]>([])
const goodList = ref<string[]>(['礼物', '铁粉', '客服操作'])
const beenCount = ref(0)
const consumList = ref<any>([
{ value: 1, text: '发礼物' },
{ value: 2, text: '发红包' },
{ value: 3, text: '发福袋' },
{ value: 4, text: '付费直播' },
{ value: 5, text: '加⼊粉丝团' },
{ value: 6, text: '发弹幕' },
{ value: 7, text: '铁粉单次付费' },
{ value: 8, text: '铁粉连续包⽉' },
{ value: 9, text: '打赏⽂章' },
{ value: 10, text: '打赏视频' },
{ value: 11, text: '付费购买' }
])
const channelList = ref<string[]>([]) const channelList = ref<string[]>([])
const liveroomList = ref<string[]>([]) const liveroomList = ref<string[]>([])
const ruleFormRef = ref<FormInstance>()
// //
const detailY = ref({ const detailY = ref({
jwcode: '', jwcode: '',
area: '',
ipAddress: '',
createTime: '', createTime: '',
channel: '',
liveroom: '',
good: ''
// channel: '', //
sourceName: '', //
sourceType: '' //
}) })
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 50 pageSize: 50
}) })
// //
const getInit = async function ({
sortField = '',
sortOrder = ''
}: {
sortField?: string
sortOrder?: string
}) {
const getInit = async function () {
try { try {
console.log('搜索参数', getObj.value) console.log('搜索参数', getObj.value)
const [startTime, endTime] = detailY.value.createTime
// POST // POST
const result = await API({ const result = await API({
url: '/detailY',
url: '/dou/getSpend',
method: 'post', method: 'post',
data: { data: {
...getObj.value, ...getObj.value,
detailY: { ...detailY.value },
sortField,
sortOrder
spend: {
jwcode: detailY.value.jwcode, //
ipAddress: detailY.value.ipAddress, //
sourceName: detailY.value.sourceName, //
sourceType: detailY.value.sourceType, //
startTime, //
endTime //
}
} }
}) })
tableData.value = result.data.list tableData.value = result.data.list
@ -249,12 +219,59 @@ const getInit = async function ({
} }
} }
// //
const search = function () {}
const search = function () {
getObj.value.pageNum = 1
getInit()
getCount()
}
// //
const reset = function () {}
const reset = function (formEl) {
formEl.resetFields()
}
const handlePageSizeChange = (val) => {
getObj.value.pageSize = val
getObj.value.pageNum = 1
getInit()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
getInit()
}
//
const getCount = async () => {
const result = await API({
url: '/dou/getSpendTotal',
data: {
jwcode: detailY.value.jwcode,
ipAddress: detailY.value.ipAddress,
sourceName: detailY.value.sourceName,
sourceType: detailY.value.sourceType,
startTime: detailY.value.createTime[0],
endTime: detailY.value.createTime[1]
}
})
if (result.code == 200) {
//const { jinbiBuy, jinbiFree, jinbiCostTotal } = result.data
console.log('合计数', result.data)
beenCount.value = result.data || 0
}
}
//
const getArea = async () => {
try {
const result = await API({
url: '/dou/getIp'
})
areaList.value = result.data
} catch (error) {
console.log('请求失败', error)
}
}
// //
getInit({})
getInit()
getCount()
getArea()
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.filter-box { .filter-box {
@ -285,6 +302,6 @@ getInit({})
.pagination { .pagination {
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: 20px;
margin-top: 10px;
} }
</style> </style>

455
gold-system/src/views/goldBeen/goldenBeenDetail.vue

@ -1,16 +1,16 @@
<template> <template>
<div class="filter-box"> <div class="filter-box">
<el-form>
<el-form-item label="精网号">
<el-form :model="detailY" ref="ruleFormRef">
<el-form-item prop="jwcode" label="精网号">
<el-input <el-input
v-model="detailY.jwcode" v-model="detailY.jwcode"
placeholder="请输入精网号" placeholder="请输入精网号"
style="width: 220px" style="width: 220px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="地区">
<el-form-item prop="deptName" label="地区">
<el-select <el-select
v-model="detailY.area"
v-model="detailY.deptName"
placeholder="请选择所属地区" placeholder="请选择所属地区"
style="width: 240px" style="width: 240px"
clearable clearable
@ -23,31 +23,23 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="订单号">
<el-form-item prop="orderNo" label="订单号">
<el-input <el-input
v-model="detailY.order"
v-model="detailY.orderNo"
placeholder="请输入订单号" placeholder="请输入订单号"
style="width: 220px" style="width: 220px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="充值类型">
<el-select
<el-form-item prop="type" label="充值类型">
<el-input
v-model="detailY.type" v-model="detailY.type"
placeholder="请选择充值类型"
style="width: 240px"
clearable
>
<el-option
v-for="item in typeList"
:key="item"
:label="item"
:value="item"
/>
</el-select>
placeholder="请输入充值类型"
style="width: 220px"
/>
</el-form-item> </el-form-item>
<el-form-item label="充值平台">
<!-- <el-form-item prop="payStyle" label="充值平台">
<el-select <el-select
v-model="detailY.platform"
v-model="detailY.payStyle"
placeholder="请选择充值平台" placeholder="请选择充值平台"
style="width: 240px" style="width: 240px"
clearable clearable
@ -59,32 +51,33 @@
:value="item" :value="item"
/> />
</el-select> </el-select>
</el-form-item>
<el-form-item label="充值时间">
</el-form-item> -->
<el-form-item prop="createTime" label="充值时间">
<el-date-picker <el-date-picker
v-model="detailY.createTime" v-model="detailY.createTime"
type="daterange" type="daterange"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 240px" style="width: 240px"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
:unlinkPanels="true"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="search">查询</el-button> <el-button type="primary" @click="search">查询</el-button>
<el-button type="success" @click="reset">重置</el-button>
<el-button type="primary">导出excel</el-button>
<el-button type="success" @click="reset(ruleFormRef)">重置</el-button>
<el-button type="primary" @click="exportExcel">导出excel</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div class="table-box"> <div class="table-box">
<p>金豆总数充值金豆总数合计新币数</p>
<el-table
:data="tableData"
style="width: 100%"
:default-sort="{ prop: 'createTime', order: 'descending' }"
height="584px"
<el-card
>金豆总数充值金豆总数{{ countValue }}合计金额数:{{
priceValue
}}</el-card
> >
<el-table :data="tableData" style="width: 100%" height="584px">
<el-table-column type="index" label="序号" width="100px" fixed="left"> <el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -92,55 +85,32 @@
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="left" prop="username" label="姓名" width="150" />
<el-table-column fixed="left" prop="nickname" label="姓名" width="150" />
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120" /> <el-table-column fixed="left" prop="jwcode" label="精网号" width="120" />
<el-table-column prop="area" label="所属地区" width="120" />
<el-table-column prop="type" label="类型" width="110">
<!-- 模板内容 -->
<template #default="scope">
<span v-if="scope.row.updateType == 1">
<span>消费</span>
</span>
<span v-if="scope.row.updateType == 0">
<span>充值</span>
</span>
<span v-if="scope.row.updateType == 2">
<span>退款</span>
</span>
<span v-if="scope.row.updateType == 3">
<span>其他</span>
</span>
</template>
<el-table-column prop="ipAddress" label="地区" width="120" />
<el-table-column prop="orderNo" label="订单号" width="120" />
<el-table-column prop="money" label="金豆数量" width="120">
</el-table-column> </el-table-column>
<el-table-column prop="order" label="订单号" width="120" />
<el-table-column prop="been" label="金豆数量" width="120">
<el-table-column prop="moneyBuy" label="付费金豆" width="120">
</el-table-column> </el-table-column>
<el-table-column prop="paybeen" label="付费金豆" width="120">
<el-table-column prop="moneyFree" label="免费金豆" width="120">
</el-table-column> </el-table-column>
<el-table-column prop="freebeen" label="免费金豆" width="120">
<el-table-column prop="price" label="金额"></el-table-column>
<el-table-column prop="type" label="类型"></el-table-column>
<!-- <el-table-column prop="payStyle" label="充值平台" width="140">
</el-table-column> </el-table-column>
<el-table-column prop="count" label="金额"></el-table-column>
<el-table-column prop="consumePlatform" label="充值平台" width="140">
<template #default="scope">
<!-- 使用非严格相等比较 -->
<span v-if="scope.row.consumePlatform == 0">初始化金币</span>
<span v-if="scope.row.consumePlatform == 1">ERP系统</span>
<span v-if="scope.row.consumePlatform == 3">Homily Link</span>
<span v-if="scope.row.consumePlatform == 2">Homily Chart</span>
<span v-if="scope.row.consumePlatform == 4">金币系统</span>
</template>
</el-table-column>
<el-table-column prop="notes" label="备注" width="210"></el-table-column>
<el-table-column prop="notes" label="备注" width="210"></el-table-column> -->
<el-table-column <el-table-column
prop="createTime"
sortable="“custom”"
prop="time"
label="充值时间" label="充值时间"
width="210" width="210"
show-overflow-tooltip show-overflow-tooltip
> >
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss')
!!scope.row.time
? moment.unix(scope.row.time).format('YYYY-MM-DD HH:mm:ss')
: '-'
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
@ -150,58 +120,124 @@
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
> >
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="getInit({})"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="getInit({})"
>
<div>跳至</div>
<el-input v-model="getObj.pageNum" style="width: 40px" />
<div></div>
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
<!-- 这是导出excel的弹窗 -->
<el-dialog
v-model="dialogVisible"
title="请选择导出条件"
width="500"
:close-on-click-modal="false"
@close="
() => {
dialogVisible = false
isExport = false
}
"
>
<template #footer>
<el-form
ref="ruleFormRef"
style="max-width: 600px"
:model="excelData"
:rules="rules"
label-width="auto"
class="demo-ruleForm"
status-icon
>
<el-form-item prop="activityName" label="精网号:">
<el-input
v-model="excelData.jwcode"
placeholder="请输入精网号"
style="width: 220px"
/>
</el-form-item>
<el-form-item label="所属地区:"
><el-select
v-model="excelData.area"
placeholder="请选择所属地区"
style="width: 240px"
clearable
>
<el-option
v-for="item in areaList"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="更新时间:">
<el-radio-group v-model="excelData.timegap">
<el-radio value="1">今天</el-radio>
<el-radio value="3">近三天</el-radio>
<el-radio value="7">近一周</el-radio>
<el-radio value="30">近一个月</el-radio>
</el-radio-group>
</el-form-item>
<el-button
type="primary"
size="small"
style="margin-left: 10px"
@click="exportConfirm()"
>确定</el-button
>
</el-form>
</template>
</el-dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'
import { reactive, ref } from 'vue'
import { FormInstance } from 'element-plus'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import moment from 'moment' import moment from 'moment'
import API from '@/util/http' import API from '@/util/http'
import { utils, write } from 'xlsx'
import { saveAs } from 'file-saver'
// //
const tableData = ref([]) const tableData = ref([])
// //
const total = ref(100) const total = ref(100)
const dialogVisible = ref(false)
const excelData = reactive({
jwcode: '',
area: '',
timegap: '',
startTime: '',
endTime: ''
})
const priceValue = ref(0)
const countValue = ref(0)
const areaList = ref<string[]>([]) const areaList = ref<string[]>([])
const isExport = ref<boolean>(false)
const rules = ref({
jwcode: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
area: [{ required: true, message: '请选择所属地区', trigger: 'change' }]
})
const handlePageSizeChange = (val) => {
getObj.value.pageSize = val
getObj.value.pageNum = 1
getInit({})
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
getInit({})
}
const platformList = ref<string[]>([ const platformList = ref<string[]>([
'stripe',
'ios',
'FirstData',
'paymentasia',
'system',
'金币系统'
// 'stripe',
// 'ios',
// 'FirstData',
// 'paymentasia',
// 'system',
// ''
]) ])
const typeList = ref<string[]>([ const typeList = ref<string[]>([
'金币换金豆', '金币换金豆',
@ -213,53 +249,208 @@ const typeList = ref<string[]>([
// //
const detailY = ref({ const detailY = ref({
jwcode: '', jwcode: '',
area: '',
order: '',
platform: '',
createTime: '',
type: ''
deptName: '',
orderNo: '',
payStyle: '',
type: '',
createTime: ''
}) })
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 50 pageSize: 50
}) })
const exportExcel = function () {
dialogVisible.value = true
isExport.value = true
}
const exportConfirm = function () {
if (excelData.timegap == '1') {
excelData.startTime = moment().startOf('day').format('YYYY-MM-DD HH:mm:ss')
excelData.endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
} else if (excelData.timegap == '3') {
excelData.startTime = moment()
.subtract(3, 'days')
.startOf('day')
.format('YYYY-MM-DD HH:mm:ss')
excelData.endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
} else if (excelData.timegap == '7') {
excelData.startTime = moment()
.subtract(7, 'days')
.startOf('day')
.format('YYYY-MM-DD')
excelData.endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
} else if (excelData.timegap == '30') {
excelData.startTime = moment()
.subtract(30, 'days')
.startOf('day')
.format('YYYY-MM-DD HH:mm:ss')
excelData.endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
}
getInit(
{
sortField: '',
sortOrder: ''
},
(data) => {
console.log('导出数据', data)
//
data = data.map((item) => {
return {
姓名: item.name,
精网号: item.jwcode,
地区: item.deptName,
订单号: item.orderNo,
充值平台: item.payStyle,
金豆数量: item.count,
充值时间: moment(item.successTime).format('YYYY-MM-DD'),
金额: item.price
}
})
if (data.length == 0) {
ElMessage.error('没有数据')
isExport.value = false
dialogVisible.value = false
return
}
console.log('导出数据', data)
excelExport(data)
}
)
}
//excel
const excelExport = async function (data) {
const worksheet = utils.json_to_sheet(data)
const workbook = utils.book_new()
utils.book_append_sheet(workbook, worksheet, 'Sheet1')
const wbout = write(workbook, { bookType: 'xlsx', type: 'array' })
saveAs(
new Blob([wbout], { type: 'application/octet-stream' }),
'数据导出.xlsx'
)
isExport.value = false
dialogVisible.value = false
}
const ruleFormRef = ref<FormInstance>()
// //
const getInit = async function ({
sortField = '',
sortOrder = ''
}: {
sortField?: string
sortOrder?: string
}) {
const getInit = async function (
{
sortField = '',
sortOrder = ''
}: {
sortField?: string
sortOrder?: string
},
callback?: Function
) {
try { try {
console.log('搜索参数', getObj.value) console.log('搜索参数', getObj.value)
const [startTime, endTime] = detailY.value.createTime
console.log(startTime, endTime)
// POST // POST
const result = await API({ const result = await API({
url: '/detailY',
method: 'post',
url: '/dou/getPay',
data: { data: {
...getObj.value,
detailY: { ...detailY.value },
sortField,
sortOrder
pay: {
jwcode: isExport.value ? excelData.jwcode : detailY.value.jwcode,
deptName: isExport.value ? excelData.area : detailY.value.deptName,
startTime: isExport.value ? excelData.startTime : startTime || '',
endTime: isExport.value ? excelData.endTime : endTime || '',
payStyle: isExport.value ? '' : detailY.value.payStyle,
type: isExport.value ? '' : detailY.value.type,
orderNo: isExport.value ? '' : detailY.value.orderNo,
sortField,
sortOrder
},
pageNum: isExport.value ? '' : getObj.value.pageNum,
pageSize: isExport.value ? '' : getObj.value.pageSize
} }
}) })
tableData.value = result.data.list
console.log('tableData', tableData.value)
total.value = result.data.total
console.log('total', total.value)
if (isExport.value) {
!!callback && callback(result.data)
} else {
tableData.value = result.data.list
total.value = result.data.total
}
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
// //
} }
} }
// const handleSortChange = (column) => {
// const { prop, order } = column
// if (order === 'ascending') {
// getInit({ sortField: prop, sortOrder: 'ASC' })
// } else if (order === 'descending') {
// getInit({ sortField: prop, sortOrder: 'DESC' })
// }
// }
// //
const search = function () {}
const search = function () {
getObj.value.pageNum = 1
getInit({})
getCount()
}
// //
const reset = function () {}
//
const reset = function (formEl) {
formEl.resetFields()
}
//
const getArea = async () => {
try {
const result = await API({
url: '/dou/getPayIp'
})
areaList.value = result.data
} catch (error) {
console.log('请求失败', error)
}
}
//
const getPayType = async () => {
try {
const result = await API({
url: '/dou/getStyle'
})
platformList.value = result.data
// typeList.value = result.data
} catch (error) {
console.log('请求失败', error)
}
}
//
const getCount = async () => {
try {
const result = await API({
url: '/dou/getTotal',
data: {
jwcode: detailY.value.jwcode,
//deptName: detailY.value.deptName,
startTime: detailY.value.createTime[0],
endTime: detailY.value.createTime[1],
orderNo: detailY.value.orderNo,
type: detailY.value.type
// payStyle: detailY.value.payStyle
}
})
if (!!result.data) {
const { price, count } = result.data
console.log('金豆总数', price, count)
priceValue.value = price
countValue.value = count
} else {
priceValue.value = 0
countValue.value = 0
}
} catch (error) {
console.log('请求失败', error)
}
}
getInit({}) getInit({})
getArea()
getPayType()
getCount()
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.filter-box { .filter-box {
@ -290,6 +481,6 @@ getInit({})
.pagination { .pagination {
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: 20px;
margin-top: 10px;
} }
</style> </style>

494
gold-system/src/views/goldBeen/onLineDetail.vue

@ -0,0 +1,494 @@
<template>
<div class="filter-box">
<el-form :model="detailY" ref="ruleFormRef">
<el-form-item prop="jwcode" label="精网号">
<el-input
v-model="detailY.jwcode"
placeholder="请输入精网号"
style="width: 220px"
/>
</el-form-item>
<el-form-item prop="deptName" label="地区">
<el-select
v-model="detailY.deptName"
placeholder="请选择所属地区"
style="width: 240px"
clearable
>
<el-option
v-for="item in areaList"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item prop="orderNo" label="订单号">
<el-input
v-model="detailY.orderNo"
placeholder="请输入订单号"
style="width: 220px"
/>
</el-form-item>
<!-- <el-form-item prop="type" label="充值类型">
<el-input
v-model="detailY.type"
placeholder="请输入充值类型"
style="width: 220px"
/>
</el-form-item> -->
<el-form-item prop="payStyle" label="充值平台">
<el-select
v-model="detailY.payStyle"
placeholder="请选择充值平台"
style="width: 240px"
clearable
>
<el-option
v-for="item in platformList"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item prop="createTime" label="充值时间">
<el-date-picker
v-model="detailY.createTime"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 240px"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
:unlinkPanels="true"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="search">查询</el-button>
<el-button type="success" @click="reset(ruleFormRef)">重置</el-button>
<el-button type="primary" @click="exportExcel">导出excel</el-button>
</el-form-item>
</el-form>
</div>
<div class="table-box">
<p>金豆总数充值金豆总数{{ countValue }}合计金额数:{{ priceValue }}</p>
<el-table :data="tableData" style="width: 100%" height="584px">
<el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template>
</el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" width="150" />
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120" />
<el-table-column prop="deptName" label="地区" width="120" />
<el-table-column prop="orderNo" label="订单号" width="120" />
<el-table-column prop="count" label="金豆数量" width="120">
</el-table-column>
<!-- <el-table-column prop="moneyBuy" label="付费金豆" width="120">
</el-table-column>
<el-table-column prop="moneyFree" label="免费金豆" width="120">
</el-table-column> -->
<el-table-column prop="price" label="金额"></el-table-column>
<!-- <el-table-column prop="type" label="类型"></el-table-column> -->
<el-table-column prop="payStyle" label="充值平台" width="140">
</el-table-column>
<!-- <el-table-column prop="notes" label="备注" width="210"></el-table-column> -->
<el-table-column
prop="successTime"
label="充值时间"
width="210"
show-overflow-tooltip
>
<template #default="scope">
<span>{{
!!scope.row.successTime
? moment.unix(scope.row.time).format('YYYY-MM-DD HH:mm:ss')
: '-'
}}</span>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
:page-size="getObj.pageSize"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
>
</el-pagination>
</div>
</div>
<!-- 这是导出excel的弹窗 -->
<el-dialog
v-model="dialogVisible"
title="请选择导出条件"
width="500"
:close-on-click-modal="false"
@close="
() => {
dialogVisible = false
isExport = false
}
"
>
<template #footer>
<el-form
ref="ruleFormRef"
style="max-width: 600px"
:model="excelData"
:rules="rules"
label-width="auto"
class="demo-ruleForm"
status-icon
>
<el-form-item prop="activityName" label="精网号:">
<el-input
v-model="excelData.jwcode"
placeholder="请输入精网号"
style="width: 220px"
/>
</el-form-item>
<el-form-item label="所属地区:"
><el-select
v-model="excelData.area"
placeholder="请选择所属地区"
style="width: 240px"
clearable
>
<el-option
v-for="item in areaList"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="更新时间:">
<el-radio-group v-model="excelData.timegap">
<el-radio value="1">今天</el-radio>
<el-radio value="3">近三天</el-radio>
<el-radio value="7">近一周</el-radio>
<el-radio value="30">近一个月</el-radio>
</el-radio-group>
</el-form-item>
<el-button
type="primary"
size="small"
style="margin-left: 10px"
@click="exportConfirm()"
>确定</el-button
>
</el-form>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { reactive, ref } from 'vue'
import { FormInstance } from 'element-plus'
import { ElMessage } from 'element-plus'
import moment from 'moment'
import API from '@/util/http'
import { utils, write } from 'xlsx'
import { saveAs } from 'file-saver'
//
const tableData = ref([])
//
const total = ref(100)
const dialogVisible = ref(false)
const excelData = reactive({
jwcode: '',
area: '',
timegap: '',
startTime: '',
endTime: ''
})
const priceValue = ref(0)
const countValue = ref(0)
const areaList = ref<string[]>([])
const isExport = ref<boolean>(false)
const rules = ref({
jwcode: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
area: [{ required: true, message: '请选择所属地区', trigger: 'change' }]
})
const handlePageSizeChange = (val) => {
getObj.value.pageSize = val
getObj.value.pageNum = 1
getInit({})
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
getInit({})
}
const platformList = ref<string[]>([
// 'stripe',
// 'ios',
// 'FirstData',
// 'paymentasia',
// 'system',
// ''
])
const typeList = ref<string[]>([
'金币换金豆',
'金币换免费金豆',
'赠送金豆',
'购买金豆',
'客服操作'
])
//
const detailY = ref({
jwcode: '',
deptName: '',
orderNo: '',
payStyle: '',
type: '',
createTime: ''
})
const getObj = ref({
pageNum: 1,
pageSize: 50
})
const exportExcel = function () {
dialogVisible.value = true
isExport.value = true
}
const exportConfirm = function () {
if (excelData.timegap == '1') {
excelData.startTime = moment().startOf('day').format('YYYY-MM-DD HH:mm:ss')
excelData.endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
} else if (excelData.timegap == '3') {
excelData.startTime = moment()
.subtract(3, 'days')
.startOf('day')
.format('YYYY-MM-DD HH:mm:ss')
excelData.endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
} else if (excelData.timegap == '7') {
excelData.startTime = moment()
.subtract(7, 'days')
.startOf('day')
.format('YYYY-MM-DD')
excelData.endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
} else if (excelData.timegap == '30') {
excelData.startTime = moment()
.subtract(30, 'days')
.startOf('day')
.format('YYYY-MM-DD HH:mm:ss')
excelData.endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
}
getInit(
{
sortField: '',
sortOrder: ''
},
(data) => {
console.log('导出数据', data)
//
data = data.map((item) => {
return {
姓名: item.name,
精网号: item.jwcode,
地区: item.deptName,
订单号: item.orderNo,
充值平台: item.payStyle,
金豆数量: item.count,
充值时间: moment(item.successTime).format('YYYY-MM-DD'),
金额: item.price
}
})
if (data.length == 0) {
ElMessage.error('没有数据')
isExport.value = false
dialogVisible.value = false
return
}
console.log('导出数据', data)
excelExport(data)
}
)
}
//excel
const excelExport = async function (data) {
const worksheet = utils.json_to_sheet(data)
const workbook = utils.book_new()
utils.book_append_sheet(workbook, worksheet, 'Sheet1')
const wbout = write(workbook, { bookType: 'xlsx', type: 'array' })
saveAs(
new Blob([wbout], { type: 'application/octet-stream' }),
'数据导出.xlsx'
)
isExport.value = false
dialogVisible.value = false
}
const ruleFormRef = ref<FormInstance>()
//
const getInit = async function (
{
sortField = '',
sortOrder = ''
}: {
sortField?: string
sortOrder?: string
},
callback?: Function
) {
try {
console.log('搜索参数', getObj.value)
const [startTime, endTime] = detailY.value.createTime
console.log(startTime, endTime)
// POST
const result = await API({
url: '/dou/SearchPay',
data: {
pay: {
jwcode: isExport.value ? excelData.jwcode : detailY.value.jwcode,
deptName: isExport.value ? excelData.area : detailY.value.deptName,
startTime: isExport.value ? excelData.startTime : startTime || '',
endTime: isExport.value ? excelData.endTime : endTime || '',
payStyle: isExport.value ? '' : detailY.value.payStyle,
// type: isExport.value ? '' : detailY.value.type,
orderNo: isExport.value ? '' : detailY.value.orderNo,
sortField,
sortOrder
},
pageNum: isExport.value ? '' : getObj.value.pageNum,
pageSize: isExport.value ? '' : getObj.value.pageSize
}
})
if (isExport.value) {
!!callback && callback(result.data)
} else {
tableData.value = result.data.list
total.value = result.data.total
}
} catch (error) {
console.log('请求失败', error)
//
}
}
// const handleSortChange = (column) => {
// const { prop, order } = column
// if (order === 'ascending') {
// getInit({ sortField: prop, sortOrder: 'ASC' })
// } else if (order === 'descending') {
// getInit({ sortField: prop, sortOrder: 'DESC' })
// }
// }
//
const search = function () {
getObj.value.pageNum = 1
getInit({})
getCount()
}
//
const reset = function (formEl) {
formEl.resetFields()
}
//
const getPayPlatform = async () => {
try {
const result = await API({
url: '/dou/SearchStyle'
})
platformList.value = result.data
} catch (error) {
console.log('请求失败', error)
}
}
//
const getArea = async () => {
try {
const result = await API({
url: '/dou/SearchPayIp'
})
areaList.value = result.data
} catch (error) {
console.log('请求失败', error)
}
}
//
const getPayType = async () => {
try {
const result = await API({
url: '/dou/getStyle'
})
platformList.value = result.data
// typeList.value = result.data
} catch (error) {
console.log('请求失败', error)
}
}
//
const getCount = async () => {
try {
const result = await API({
url: '/dou/getRechargeTotal',
data: {
jwcode: detailY.value.jwcode,
deptName: detailY.value.deptName,
startTime: detailY.value.createTime[0],
endTime: detailY.value.createTime[1],
orderNo: detailY.value.orderNo,
payStyle: detailY.value.payStyle
}
})
if (!!result.data) {
console.log('合计数', result.data)
const { priceTotal, countTotal } = result.data
console.log('金豆总数', priceTotal, countTotal)
priceValue.value = priceTotal
countValue.value = countTotal
} else {
priceValue.value = 0
countValue.value = 0
}
} catch (error) {
console.log('请求失败', error)
}
}
getInit({})
getArea()
getPayType()
getCount()
getPayPlatform()
</script>
<style scoped lang="scss">
.filter-box {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px;
padding-bottom: 0px;
box-sizing: border-box;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
margin-bottom: 20px;
border-radius: 5px;
.el-form {
display: flex;
flex-wrap: wrap;
row-gap: 20px;
column-gap: 20px;
}
}
.table-box {
width: 100%;
padding: 20px;
box-sizing: border-box;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
border-radius: 5px;
}
.pagination {
display: flex;
align-items: center;
margin-top: 10px;
}
</style>

37
gold-system/src/views/index.vue

@ -101,13 +101,11 @@ const changeDataByArea = (item) => {
<div style="font-size: 16px; font-weight: bold">海外金币管理系统</div> <div style="font-size: 16px; font-weight: bold">海外金币管理系统</div>
</div> </div>
<el-menu <el-menu
router="true"
:router="true"
background-color="#08193d" background-color="#08193d"
active-text-color="#ffd04b" active-text-color="#ffd04b"
text-color="white" text-color="white"
class="el-menu-vertical-demo" class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
> >
<el-menu-item <el-menu-item
index="/workspace" index="/workspace"
@ -175,7 +173,7 @@ const changeDataByArea = (item) => {
<span>充值</span> <span>充值</span>
</template> </template>
<el-sub-menu>
<el-sub-menu index="5">
<template #title>金币充值</template> <template #title>金币充值</template>
<el-menu-item index="/addRecharge">新增充值</el-menu-item> <el-menu-item index="/addRecharge">新增充值</el-menu-item>
<el-menu-item index="/adminRecharge">客服充值明细</el-menu-item> <el-menu-item index="/adminRecharge">客服充值明细</el-menu-item>
@ -184,7 +182,7 @@ const changeDataByArea = (item) => {
</el-sub-menu> </el-sub-menu>
<el-sub-menu <el-sub-menu
index="5"
index="6"
v-if=" v-if="
adminData.permission == 1 || adminData.permission == 1 ||
adminData.permission == 2 || adminData.permission == 2 ||
@ -197,7 +195,7 @@ const changeDataByArea = (item) => {
</el-icon> </el-icon>
<span>消费</span> <span>消费</span>
</template> </template>
<el-sub-menu>
<el-sub-menu index="7">
<template #title>金币消费</template> <template #title>金币消费</template>
<el-menu-item index="/addConsume">新增消费</el-menu-item> <el-menu-item index="/addConsume">新增消费</el-menu-item>
<el-menu-item index="/allConsume">所有消费明细</el-menu-item> <el-menu-item index="/allConsume">所有消费明细</el-menu-item>
@ -205,7 +203,7 @@ const changeDataByArea = (item) => {
</el-sub-menu> </el-sub-menu>
<el-sub-menu <el-sub-menu
index="6"
index="8"
v-if=" v-if="
adminData.permission == 1 || adminData.permission == 1 ||
adminData.permission == 2 || adminData.permission == 2 ||
@ -218,19 +216,20 @@ const changeDataByArea = (item) => {
</el-icon> </el-icon>
<span>退款</span> <span>退款</span>
</template> </template>
<el-sub-menu>
<el-sub-menu index="9">
<template #title>金币退款</template> <template #title>金币退款</template>
<el-menu-item index="/addRefund">新增退款</el-menu-item> <el-menu-item index="/addRefund">新增退款</el-menu-item>
<el-menu-item index="/allRefund">退款明细</el-menu-item> <el-menu-item index="/allRefund">退款明细</el-menu-item>
</el-sub-menu> </el-sub-menu>
</el-sub-menu> </el-sub-menu>
<el-sub-menu index="7">
<el-sub-menu index="10">
<template #title <template #title
><el-icon> <Folder /> </el-icon></template ><el-icon> <Folder /> </el-icon></template
> >
<el-menu-item index="/addGoldenBeen">金豆充值</el-menu-item> <el-menu-item index="/addGoldenBeen">金豆充值</el-menu-item>
<!-- <el-menu-item index="/goldenBeenDetail">金豆充值明细</el-menu-item>
<el-menu-item index="/goldenBeenConsum">金豆消费明细</el-menu-item> -->
<el-menu-item index="/goldenBeenDetail">金豆充值明细</el-menu-item>
<el-menu-item index="/onLineDetail">线上充值明细</el-menu-item>
<el-menu-item index="/goldenBeenConsum">金豆消费明细</el-menu-item>
<el-menu-item index="/goldenBeenBalance">客户金豆余额</el-menu-item> <el-menu-item index="/goldenBeenBalance">客户金豆余额</el-menu-item>
</el-sub-menu> </el-sub-menu>
<el-menu-item <el-menu-item
@ -283,13 +282,8 @@ const changeDataByArea = (item) => {
background: white; background: white;
" "
> >
<el-menu
:default-active="activeIndex"
class="el-menu-demo"
mode="horizontal"
:ellipsis="false"
>
<el-sub-menu index="1" class="area" :disabled="isWorkspace">
<el-menu class="el-menu-demo" mode="horizontal" :ellipsis="false">
<el-sub-menu index="1" class="area">
<template #title> <template #title>
<VscGlobe /> <VscGlobe />
<!-- {{ currentArea }} --> <!-- {{ currentArea }} -->
@ -303,12 +297,7 @@ const changeDataByArea = (item) => {
</el-menu-item> --> </el-menu-item> -->
</el-sub-menu> </el-sub-menu>
</el-menu> </el-menu>
<el-menu
:default-active="activeIndex"
class="el-menu-demo"
mode="horizontal"
:ellipsis="false"
>
<el-menu class="el-menu-demo" mode="horizontal" :ellipsis="false">
<el-sub-menu index="1" class="admin"> <el-sub-menu index="1" class="admin">
<template #title> <template #title>
<el-image <el-image

83
gold-system/src/views/login.vue

@ -1,71 +1,71 @@
<script setup> <script setup>
import { ref, onMounted, reactive, computed } from "vue";
import { ElMessage } from "element-plus";
import axios from "axios";
import request from "@/util/http";
import { useRouter } from "vue-router";
import { VscGlobe } from "vue-icons-plus/vsc";
import { ref, onMounted, reactive, computed } from 'vue'
import { ElMessage } from 'element-plus'
import axios from 'axios'
import request from '@/util/http'
import { useRouter } from 'vue-router'
import { VscGlobe } from 'vue-icons-plus/vsc'
// //
var url = window.location.href; //
var url = window.location.href //
//machineId= //machineId=
var machineId = null;
var machineId = null
// machineId // machineId
function getMachineId() { function getMachineId() {
var parts = url.split("machineId=");
var parts = url.split('machineId=')
if (parts.length > 1) { if (parts.length > 1) {
machineId = parts[1].split("&")[0]; // &
machineId = parts[1].split('&')[0] // &
} }
// machineId = decodeURIComponent(machineId); //machineId // machineId = decodeURIComponent(machineId); //machineId
console.log("MachineId字符串:", machineId); // machineId
console.log('MachineId字符串:', machineId) // machineId
// machineId // machineId
if (machineId) { if (machineId) {
localStorage.setItem("machineId", machineId);
localStorage.setItem('machineId', machineId)
} }
} }
getMachineId();
getMachineId()
const router = useRouter(); //
let formData = new FormData();
const router = useRouter() //
let formData = new FormData()
// FormData // FormData
// formData.append("jwcode", form.value.jwcode); // formData.append("jwcode", form.value.jwcode);
// formData.append("password", form.value.password); // formData.append("password", form.value.password);
const form = ref({ jwcode: "", password: "", token: "", machineId: machineId });
const form = ref({ jwcode: '', password: '', token: '', machineId: machineId })
// //
const login = async function () { const login = async function () {
try { try {
const result = await request({ const result = await request({
url: "/admin/login",
data: form.value,
});
console.log("resultresult", result);
url: '/admin/login',
data: form.value
})
console.log('resultresult', result)
if (result.code == 200) { if (result.code == 200) {
localStorage.setItem("token", result.msg);
localStorage.setItem("permission", result.data.permission);
localStorage.setItem('token', result.msg)
localStorage.setItem('permission', result.data.permission)
if ( if (
result.data.permission == "5" ||
result.data.permission == "1" ||
result.data.permission == "2" ||
result.data.permission == "3"
result.data.permission == '5' ||
result.data.permission == '1' ||
result.data.permission == '2' ||
result.data.permission == '3'
) { ) {
router.push("/usergold");
} else if (result.data.permission == "4") {
router.push("/noPermission");
router.push('/usergold')
} else if (result.data.permission == '4') {
router.push('/noPermission')
} }
ElMessage.success("登录成功");
console.log("请求成功", result);
ElMessage.success('登录成功')
console.log('请求成功', result)
} else { } else {
form.value.password = "";
form.value.jwcode = "";
ElMessage.error(result.msg);
form.value.password = ''
form.value.jwcode = ''
ElMessage.error(result.msg)
} }
} catch (error) { } catch (error) {
console.log("请求失败", error);
ElMessage.error("登录失败,请检查账号密码");
console.log('请求失败', error)
ElMessage.error('登录失败,请检查账号密码')
// //
} }
};
}
</script> </script>
<template> <template>
<el-row class="login-page"> <el-row class="login-page">
@ -79,12 +79,7 @@ const login = async function () {
<!-- <div style="height: 100vh; width: 1000px" class="container"></div> --> <!-- <div style="height: 100vh; width: 1000px" class="container"></div> -->
<el-col :span="6" :offset="3" class="form"> <el-col :span="6" :offset="3" class="form">
<!-- 登录表单 --> <!-- 登录表单 -->
<el-form
:model="form"
size="large"
autocomplete="off"
@keyup.enter.native="login()"
>
<el-form :model="form" size="large" autocomplete="off">
<el-form-item> <el-form-item>
<h1 style="color: #409eff">金币系统登录</h1> <h1 style="color: #409eff">金币系统登录</h1>
</el-form-item> </el-form-item>
@ -101,7 +96,7 @@ const login = async function () {
<el-form-item class="flex"> </el-form-item> <el-form-item class="flex"> </el-form-item>
<!-- 登录按钮 --> <!-- 登录按钮 -->
<el-form-item> <el-form-item>
<button class="button" @click="login()">
<button type="button" class="button" @click="login()">
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
fill="none" fill="none"

363
gold-system/src/views/managerecharge/activity.vue

@ -1,180 +1,177 @@
<script setup> <script setup>
import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios";
import moment from "moment";
import API from "../../api/index.js";
import _ from "lodash";
import request from "@/util/http";
import { ref, onMounted, reactive, computed } from 'vue'
import ElementPlus from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import moment from 'moment'
import API from '../../api/index.js'
import _ from 'lodash'
import request from '@/util/http'
// //
const adminData = ref({});
const adminData = ref({})
const getAdminData = async function () { const getAdminData = async function () {
try { try {
const result = await request(
{
url: "/admin/userinfo",
data:{}}
);
adminData.value = result;
addObj.value.adminId = adminData.value.adminId;
console.log("请求成功", result);
console.log("用户信息", adminData.value);
const result = await request({
url: '/admin/userinfo',
data: {}
})
adminData.value = result
addObj.value.adminId = adminData.value.adminId
console.log('请求成功', result)
console.log('用户信息', adminData.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
} }
};
}
// //
// //
const tableData = ref([]);
const tableData = ref([])
// //
const total = ref(100);
const total = ref(100)
// //
const getTime = ref([]);
const getTime = ref([])
// //
const activity = ref({});
const activity = ref({})
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 10,
});
pageSize: 10
})
// //
const addObj = ref({ const addObj = ref({
add: "",
});
add: ''
})
// //
// //
const delObj = ref({});
const delObj = ref({})
// // // //
// const tableHeight = computed(function () { // const tableHeight = computed(function () {
// return (getObj.value.pageSize + 1) * 50 + "px"; // return (getObj.value.pageSize + 1) * 50 + "px";
// }); // });
// ref // ref
const Ref = ref(null);
const Ref = ref(null)
// //
// //
const get = async function (val) { const get = async function (val) {
try { try {
// //
if (typeof val === "number") {
getObj.value.pageNum = val;
if (typeof val === 'number') {
getObj.value.pageNum = val
} }
// //
if (getTime.value != null) { if (getTime.value != null) {
if (getTime.value.startDate != "" && getTime.value.endDate != "") {
activity.value.startDate = getTime.value[0];
activity.value.endDate = getTime.value[1];
if (getTime.value.startDate != '' && getTime.value.endDate != '') {
activity.value.startDate = getTime.value[0]
activity.value.endDate = getTime.value[1]
} }
} else { } else {
activity.value.startDate = "";
activity.value.endDate = "";
activity.value.startDate = ''
activity.value.endDate = ''
} }
console.log("搜索参数", getObj.value);
console.log('搜索参数', getObj.value)
// POST // POST
const result = await request(
{
url: "/recharge/activity/select",
data:{
const result = await request({
url: '/recharge/activity/select',
data: {
...getObj.value, ...getObj.value,
activity: { ...activity.value },
}}
);
activity: { ...activity.value }
}
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
tableData.value = result.data.list;
console.log("tableData", tableData.value);
tableData.value = result.data.list
console.log('tableData', tableData.value)
// //
total.value = result.data.total;
console.log("total", total.value);
total.value = result.data.total
console.log('total', total.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1;
get();
};
getObj.value.pageNum = 1
get()
}
// //
const reset = function () { const reset = function () {
getObj.value = {};
getObj.value.pageNum = 1;
getObj.value.pageSize = 10;
getTime.value = {};
activity.value = {};
};
getObj.value = {}
getObj.value.pageNum = 1
getObj.value.pageSize = 10
getTime.value = {}
activity.value = {}
}
// //
const addActivityVisible = ref(false);
const addActivityVisible = ref(false)
// //
const openAddActivityVisible = function () { const openAddActivityVisible = function () {
addActivityVisible.value = true;
};
addActivityVisible.value = true
}
// //
const closeAddActivityVisible = function (done) { const closeAddActivityVisible = function (done) {
addActivityVisible.value = false;
};
addActivityVisible.value = false
}
// //
const addActicity = function () { const addActicity = function () {
console.log("Date", new Date());
console.log('Date', new Date())
// //
addObj.value = {};
addObj.value.adminId = adminData.value.adminId;
addObj.value.adminName = adminData.value.name;
addObj.value.freeGold = "0";
addObj.value.rechargeRatio = 0;
addObj.value.startTime = null;
addObj.value.endTime = null;
openAddActivityVisible();
};
addObj.value = {}
addObj.value.adminId = adminData.value.adminId
addObj.value.adminName = adminData.value.name
addObj.value.freeGold = '0'
addObj.value.rechargeRatio = 0
addObj.value.startTime = null
addObj.value.endTime = null
openAddActivityVisible()
}
// //
const add = async function () { const add = async function () {
Ref.value.validate(async (valid) => { Ref.value.validate(async (valid) => {
console.log("valid", valid);
console.log('valid', valid)
if (valid) { if (valid) {
try { try {
console.log("添加对象", addObj.value);
console.log('添加对象', addObj.value)
// POST // POST
const result = await request(
{
url: "/recharge/activity/add",
data: addObj.value}
);
const result = await request({
url: '/recharge/activity/add',
data: addObj.value
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
get();
get()
// //
closeAddActivityVisible();
closeAddActivityVisible()
// //
ElMessage({ ElMessage({
type: "success",
message: "活动添加成功!",
});
type: 'success',
message: '活动添加成功!'
})
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
});
};
})
}
// 使 _.throttle trailing false // 使 _.throttle trailing false
const throttledAdd = _.throttle(add, 5000, { trailing: false });
const throttledAdd = _.throttle(add, 5000, { trailing: false })
// //
// let onceFunction = true; // let onceFunction = true;
// //
@ -191,117 +188,132 @@ const throttledAdd = _.throttle(add, 5000, { trailing: false });
// ========================================================= // =========================================================
// //
const del = function (row) { const del = function (row) {
delObj.value.activityId = row.activityId;
console.log("delObj", delObj.value);
};
delObj.value.activityId = row.activityId
console.log('delObj', delObj.value)
}
// //
const delConfirm = async function () { const delConfirm = async function () {
try { try {
console.log("delObj", delObj.value);
console.log('delObj', delObj.value)
// POST // POST
const result = await request(
{
url: "/recharge/activity/edit",
data: delObj.value}
);
//
console.log("请求成功", result);
//
get();
const result = await request({
url: '/recharge/activity/edit',
data: delObj.value
})
if (result.code == 200) {
ElMessage({
type: 'success',
message: '删除成功'
})
//
console.log('请求成功', result)
//
get()
} else {
ElMessage({
type: 'error',
message: '删除失败'
})
}
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
// //
// //
const handleStartTimeChange = () => { const handleStartTimeChange = () => {
Ref.value.validateField("endTime");
};
Ref.value.validateField('endTime')
}
const checkFreeGoldRadio = function (rule, value, callback) { const checkFreeGoldRadio = function (rule, value, callback) {
if (addObj.value.freeGold == 1) { if (addObj.value.freeGold == 1) {
if (value == "0" || value == null || value == "") {
callback(new Error("请输入免费金币兑换比"));
if (value == '0' || value == null || value == '') {
callback(new Error('请输入免费金币兑换比'))
} else if (value < 0 || isNaN(value)) { } else if (value < 0 || isNaN(value)) {
callback(new Error("请输入正确的格式"));
callback(new Error('请输入正确的格式'))
} else { } else {
callback();
callback()
} }
} else { } else {
callback();
callback()
} }
};
}
const checkStartTime = function (rule, value, callback) { const checkStartTime = function (rule, value, callback) {
if (value < new Date()) { if (value < new Date()) {
callback(new Error("开始时间不能小于当前时间"));
callback(new Error('开始时间不能小于当前时间'))
} else { } else {
callback();
callback()
} }
};
}
const checkEndTime = function (rule, value, callback) { const checkEndTime = function (rule, value, callback) {
if (value < new Date()) { if (value < new Date()) {
callback(new Error("结束时间不能小于当前时间"));
callback(new Error('结束时间不能小于当前时间'))
} else if (value <= addObj.value.startTime) { } else if (value <= addObj.value.startTime) {
callback(new Error("结束时间不能小于开始时间"));
callback(new Error('结束时间不能小于开始时间'))
} else { } else {
callback();
callback()
} }
};
}
const rules = reactive({ const rules = reactive({
activityName: [ activityName: [
{ required: true, message: "请输入活动名称", trigger: "blur" },
{ required: true, message: '请输入活动名称', trigger: 'blur' }
], ],
freeGold: [ freeGold: [
{ required: true, message: "请选择是否赠送免费金币", trigger: "blur" },
{ required: true, message: '请选择是否赠送免费金币', trigger: 'blur' }
], ],
rechargeRatio: [{ validator: checkFreeGoldRadio, trigger: "blur" }],
rechargeRatio: [{ validator: checkFreeGoldRadio, trigger: 'blur' }],
startTime: [ startTime: [
{ required: true, message: "请选择开始时间", trigger: "blur" },
{ validator: checkStartTime, trigger: "blur" },
{ required: true, message: '请选择开始时间', trigger: 'blur' },
{ validator: checkStartTime, trigger: 'blur' }
], ],
endTime: [ endTime: [
{ required: true, message: "请选择结束时间", trigger: "blur" },
{ validator: checkEndTime, trigger: "blur" },
],
});
{ required: true, message: '请选择结束时间', trigger: 'blur' },
{ validator: checkEndTime, trigger: 'blur' }
]
})
// //
const checkNumber = function () { const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === "number") {
console.log(
"总共有多少页" + Math.ceil(total.value / getObj.value.pageSize)
);
if (typeof parseInt(getObj.value.pageNum) === 'number') {
console.log('总共有多少页' + Math.ceil(total.value / getObj.value.pageSize))
if ( if (
getObj.value.pageNum > 0 && getObj.value.pageNum > 0 &&
getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize) getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
) { ) {
getObj.value.pageNum = parseInt(getObj.value.pageNum);
console.log("输入的数字合法");
get();
getObj.value.pageNum = parseInt(getObj.value.pageNum)
console.log('输入的数字合法')
get()
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
};
}
// //
onMounted(async function () { onMounted(async function () {
await getAdminData();
get();
});
await getAdminData()
get()
})
</script> </script>
<template> <template>
@ -364,12 +376,12 @@ onMounted(async function () {
<el-table-column prop="activityName" label="活动名称" /> <el-table-column prop="activityName" label="活动名称" />
<el-table-column prop="startTime" label="开始时间"> <el-table-column prop="startTime" label="开始时间">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.startTime).format("YYYY-MM-DD HH:mm:ss") }}
{{ moment(scope.row.startTime).format('YYYY-MM-DD HH:mm:ss') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="endTime" label="结束时间"> <el-table-column prop="endTime" label="结束时间">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.endTime).format("YYYY-MM-DD HH:mm:ss") }}
{{ moment(scope.row.endTime).format('YYYY-MM-DD HH:mm:ss') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="rechargeRatio" label="免费兑换比"> <el-table-column prop="rechargeRatio" label="免费兑换比">
@ -402,7 +414,7 @@ onMounted(async function () {
<el-table-column prop="name" label="添加人" /> <el-table-column prop="name" label="添加人" />
<el-table-column prop="createTime" label="添加时间"> <el-table-column prop="createTime" label="添加时间">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.createTime).format("YYYY-MM-DD HH:mm:ss") }}
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="operation" label="操作"> <el-table-column prop="operation" label="操作">
@ -433,41 +445,12 @@ onMounted(async function () {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next, slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

513
gold-system/src/views/managerecharge/rate.vue

@ -1,322 +1,327 @@
<script setup> <script setup>
import { ref, onMounted, computed, reactive } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios";
import { createApp } from "vue";
import moment from "moment";
import API from "../../api/index.js";
import _ from "lodash";
import request from "@/util/http";
import { ref, onMounted, computed, reactive } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import { createApp } from 'vue'
import moment from 'moment'
import API from '../../api/index.js'
import _ from 'lodash'
import request from '@/util/http'
// //
const adminData = ref({ const adminData = ref({
name: "",
});
name: ''
})
const getAdminData = async function () { const getAdminData = async function () {
try { try {
const result = await request(
{
url: "/admin/userinfo",
data:{}}
);
adminData.value = result;
rateAdd.value.adminId = adminData.value.adminId;
rateEdit.value.adminId = adminData.value.adminId;
console.log("请求成功", result);
console.log("用户信息", user.value);
const result = await request({
url: '/admin/userinfo',
data: {}
})
adminData.value = result
rateAdd.value.adminId = adminData.value.adminId
rateEdit.value.adminId = adminData.value.adminId
console.log('请求成功', result)
console.log('用户信息', user.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
} }
};
getAdminData();
}
getAdminData()
const regeAdd = ref(false);
const regeEdit = ref(false);
const regeAdd = ref(false)
const regeEdit = ref(false)
// //
const tableData = ref([]);
const tableData = ref([])
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 10,
});
const total = ref(0);
pageSize: 10
})
const total = ref(0)
// //
// //
const value1 = ref({ const value1 = ref({
startTime: "",
endTime: "",
}); //
startTime: '',
endTime: ''
}) //
function handleDateChange(value) { function handleDateChange(value) {
if (value && value.length === 2) { if (value && value.length === 2) {
value1.value.startTime = value[0]; //
value1.value.endTime = value[1]; //
value1.value.startTime = value[0] //
value1.value.endTime = value[1] //
} }
console.log(value1);
console.log(value1)
} }
const time = ref({});
const time = ref({})
const get = async function (val) { const get = async function (val) {
// //
if (value1.value != null) { if (value1.value != null) {
if (value1.value.startDate != "" && value1.value.endDate != "") {
time.value.startTime = value1.value[0];
time.value.endTime = value1.value[1];
if (value1.value.startDate != '' && value1.value.endDate != '') {
time.value.startTime = value1.value[0]
time.value.endTime = value1.value[1]
} }
} else { } else {
time.value.startTime = "";
time.value.endTime = "";
time.value.startTime = ''
time.value.endTime = ''
} }
try { try {
// //
if (typeof val === "number") {
getObj.value.pageNum = val;
if (typeof val === 'number') {
getObj.value.pageNum = val
} }
console.log("搜索参数", getObj.value);
console.log('搜索参数', getObj.value)
// POST // POST
const result = await request({ const result = await request({
url: "/rates/search", data:{
...getObj.value,
rate: { ...time.value },}
});
url: '/rates/search',
data: {
...getObj.value,
rate: { ...time.value }
}
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
tableData.value = result.data.list;
console.log("tableData", tableData.value);
tableData.value = result.data.list
console.log('tableData', tableData.value)
// UI // UI
// //
total.value = result.data.total;
console.log("total", total.value);
total.value = result.data.total
console.log('total', total.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1;
get();
};
getObj.value.pageNum = 1
get()
}
// //
const rateAdd = ref({});
const rateAdd = ref({})
const addRate = async function () { const addRate = async function () {
rateAdd.value.adminId = adminData.value.adminId;
rateAdd.value.adminId = adminData.value.adminId
if (rateAdd.value.startTime) { if (rateAdd.value.startTime) {
const date = new Date(rateAdd.value.startTime);
date.setHours(0, 0, 0, 0);
const date = new Date(rateAdd.value.startTime)
date.setHours(0, 0, 0, 0)
rateAdd.value.startTime = `${date.getFullYear()}-${String( rateAdd.value.startTime = `${date.getFullYear()}-${String(
date.getMonth() + 1 date.getMonth() + 1
).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")} 00:00:00`;
).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} 00:00:00`
} }
if (rateAdd.value.endTime) { if (rateAdd.value.endTime) {
const date = new Date(rateAdd.value.endTime);
date.setHours(23, 59, 59, 999);
const date = new Date(rateAdd.value.endTime)
date.setHours(23, 59, 59, 999)
rateAdd.value.endTime = `${date.getFullYear()}-${String( rateAdd.value.endTime = `${date.getFullYear()}-${String(
date.getMonth() + 1 date.getMonth() + 1
).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")} 23:59:59`;
).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} 23:59:59`
} }
try { try {
console.log("搜索参数", getObj.value);
console.log('搜索参数', getObj.value)
// POST // POST
const result = await request(
{
url: "/rates/add",
data: rateAdd.value}
);
const result = await request({
url: '/rates/add',
data: rateAdd.value
})
if (result.code == 0) { if (result.code == 0) {
ElMessage.error(result.msg);
ElMessage.error(result.msg)
} }
// //
console.log("请求成功", result);
get();
console.log('请求成功', result)
get()
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
const add = () => { const add = () => {
Ref.value.validate(async (valid) => { Ref.value.validate(async (valid) => {
if (valid) { if (valid) {
ElMessageBox.confirm("确认添加?")
ElMessageBox.confirm('确认添加?')
.then(() => { .then(() => {
addRate();
rateAdd.value = {};
addRate()
rateAdd.value = {}
value1.value = { value1.value = {
startTime: "",
endTime: "",
};
regeAdd.value = false;
startTime: '',
endTime: ''
}
regeAdd.value = false
}) })
.catch(() => { .catch(() => {
regeAdd.value = false;
});
regeAdd.value = false
})
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
});
};
})
}
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
// 使 _.throttle trailing false // 使 _.throttle trailing false
const throttledAdd = _.throttle(add, 5000, { trailing: false });
const throttledAdd = _.throttle(add, 5000, { trailing: false })
// //
const rateEdit = ref({});
const rateEdit = ref({})
// //
const getEditData = async function (row) { const getEditData = async function (row) {
try { try {
console.log("搜索参数", getObj.value);
console.log('搜索参数', getObj.value)
// POST // POST
const result = await request(
{
url: "/rates/searchById?rateId=" + row.rateId,
data:{}}
);
const result = await request({
url: '/rates/searchById?rateId=' + row.rateId,
data: {}
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
rateEdit.value = result.data;
rateEdit.value.adminId = adminData.value.adminId;
console.log("这是编辑的数值", rateEdit.value);
rateEdit.value = result.data
rateEdit.value.adminId = adminData.value.adminId
console.log('这是编辑的数值', rateEdit.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
const editRate = async function () { const editRate = async function () {
if (rateEdit.value.startTime) { if (rateEdit.value.startTime) {
const date = new Date(rateEdit.value.startTime);
date.setHours(0, 0, 0, 0);
const date = new Date(rateEdit.value.startTime)
date.setHours(0, 0, 0, 0)
rateEdit.value.startTime = `${date.getFullYear()}-${String( rateEdit.value.startTime = `${date.getFullYear()}-${String(
date.getMonth() + 1 date.getMonth() + 1
).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")} 00:00:00`;
).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} 00:00:00`
} }
if (rateEdit.value.endTime) { if (rateEdit.value.endTime) {
const date = new Date(rateEdit.value.endTime);
date.setHours(23, 59, 59, 999);
const date = new Date(rateEdit.value.endTime)
date.setHours(23, 59, 59, 999)
rateEdit.value.endTime = `${date.getFullYear()}-${String( rateEdit.value.endTime = `${date.getFullYear()}-${String(
date.getMonth() + 1 date.getMonth() + 1
).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")} 23:59:59`;
).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} 23:59:59`
} }
try { try {
console.log("搜索参数", rateEdit.value);
console.log('搜索参数', rateEdit.value)
// POST // POST
const result = await request(
{
url: "/rates/update",
data: rateEdit.value}
);
const result = await request({
url: '/rates/update',
data: rateEdit.value
})
// //
console.log("请求成功", result);
get();
console.log('请求成功', result)
get()
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
const edit = () => { const edit = () => {
ElMessageBox.confirm("确认修改?")
ElMessageBox.confirm('确认修改?')
.then(() => { .then(() => {
editRate();
regeEdit.value = false;
editRate()
regeEdit.value = false
}) })
.catch(() => { .catch(() => {
regeEdit.value = false;
});
};
regeEdit.value = false
})
}
// //
const deleteRate = async function (row) { const deleteRate = async function (row) {
try { try {
// POST // POST
const result = await request(
{
url: "/rates/delete/ " + row.rateId,
data:{}}
);
const result = await request({
url: '/rates/delete/ ' + row.rateId,
data: {}
})
// //
console.log("请求成功", result);
get();
console.log('请求成功', result)
get()
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
onMounted(async function () { onMounted(async function () {
get();
});
get()
})
// //
function handlePageChange(currentPage, pageSize) { function handlePageChange(currentPage, pageSize) {
get();
get()
} }
// //
const options = [ const options = [
{ {
value: "USD",
label: "USD",
value: 'USD',
label: 'USD'
}, },
{ {
value: "HKD",
label: "HKD",
value: 'HKD',
label: 'HKD'
}, },
{ {
value: "THB",
label: "THB",
value: 'THB',
label: 'THB'
}, },
{ {
value: "VND",
label: "VND",
value: 'VND',
label: 'VND'
}, },
{ {
value: "CAD",
label: "CAD",
value: 'CAD',
label: 'CAD'
}, },
{ {
value: "MYR",
label: "MYR",
value: 'MYR',
label: 'MYR'
}, },
{ {
value: "KRW",
label: "KRW",
value: 'KRW',
label: 'KRW'
}, },
{ {
value: "JPY",
label: "JPY",
value: 'JPY',
label: 'JPY'
}, },
{ {
value: "CNY",
label: "CNY",
},
];
value: 'CNY',
label: 'CNY'
}
]
function formatDate(value) { function formatDate(value) {
if (!value) return "";
const date = new Date(value);
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, "0");
const day = date.getDate().toString().padStart(2, "0");
const hours = date.getHours().toString().padStart(2, "0");
const minutes = date.getMinutes().toString().padStart(2, "0");
const seconds = date.getSeconds().toString().padStart(2, "0");
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
if (!value) return ''
const date = new Date(value)
const year = date.getFullYear()
const month = (date.getMonth() + 1).toString().padStart(2, '0')
const day = date.getDate().toString().padStart(2, '0')
const hours = date.getHours().toString().padStart(2, '0')
const minutes = date.getMinutes().toString().padStart(2, '0')
const seconds = date.getSeconds().toString().padStart(2, '0')
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
} }
function formatDateTwe(value) { function formatDateTwe(value) {
if (!value) return "";
const date = new Date(value);
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, "0");
const day = date.getDate().toString().padStart(2, "0");
return `${year}-${month}-${day}`;
if (!value) return ''
const date = new Date(value)
const year = date.getFullYear()
const month = (date.getMonth() + 1).toString().padStart(2, '0')
const day = date.getDate().toString().padStart(2, '0')
return `${year}-${month}-${day}`
} }
// // // //
@ -326,82 +331,80 @@ function formatDateTwe(value) {
// //
// ref // ref
const Ref = ref(null);
const Ref = ref(null)
const handleStartTimeChange = () => { const handleStartTimeChange = () => {
Ref.value.validateField("endTime");
};
Ref.value.validateField('endTime')
}
const checkStartTime = function (rule, value, callback) { const checkStartTime = function (rule, value, callback) {
if (value <= new Date()) { if (value <= new Date()) {
callback(new Error("开始时间不能小于当前时间"));
callback(new Error('开始时间不能小于当前时间'))
} else { } else {
callback();
callback()
} }
};
}
const checkEndTime = function (rule, value, callback) { const checkEndTime = function (rule, value, callback) {
if (value <= new Date()) { if (value <= new Date()) {
callback(new Error("结束时间不能小于当前时间"));
callback(new Error('结束时间不能小于当前时间'))
} else if (value <= rateAdd.value.startTime) { } else if (value <= rateAdd.value.startTime) {
callback(new Error("结束时间不能小于开始时间"));
callback(new Error('结束时间不能小于开始时间'))
} else { } else {
callback();
callback()
} }
};
}
const checkFreeGoldRadio = function (rule, value, callback) { const checkFreeGoldRadio = function (rule, value, callback) {
if (value == "0" || value == null || value == "") {
callback(new Error("请输入汇率比"));
if (value == '0' || value == null || value == '') {
callback(new Error('请输入汇率比'))
} else if (value < 0 || isNaN(value)) { } else if (value < 0 || isNaN(value)) {
callback(new Error("请输入正确的格式"));
callback(new Error('请输入正确的格式'))
} else { } else {
callback();
callback()
} }
};
}
const rules = reactive({ const rules = reactive({
currency: [{ required: true, message: "请选择货币名称", trigger: "blur" }],
exchangeRate: [{ validator: checkFreeGoldRadio, trigger: "blur" }],
currency: [{ required: true, message: '请选择货币名称', trigger: 'blur' }],
exchangeRate: [{ validator: checkFreeGoldRadio, trigger: 'blur' }],
startTime: [ startTime: [
{ required: true, message: "请选择开始时间", trigger: "blur" },
{ validator: checkStartTime, trigger: "blur" },
{ required: true, message: '请选择开始时间', trigger: 'blur' },
{ validator: checkStartTime, trigger: 'blur' }
], ],
endTime: [ endTime: [
{ required: true, message: "请选择结束时间", trigger: "blur" },
{ validator: checkEndTime, trigger: "blur" },
],
});
{ required: true, message: '请选择结束时间', trigger: 'blur' },
{ validator: checkEndTime, trigger: 'blur' }
]
})
// //
const handledelete = function () { const handledelete = function () {
value1.value = {};
startTime.value = "";
endTime.value = "";
};
value1.value = {}
startTime.value = ''
endTime.value = ''
}
// //
const checkNumber = function () { const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === "number") {
console.log(
"总共有多少页" + Math.ceil(total.value / getObj.value.pageSize)
);
if (typeof parseInt(getObj.value.pageNum) === 'number') {
console.log('总共有多少页' + Math.ceil(total.value / getObj.value.pageSize))
if ( if (
getObj.value.pageNum > 0 && getObj.value.pageNum > 0 &&
getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize) getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
) { ) {
getObj.value.pageNum = parseInt(getObj.value.pageNum);
console.log("输入的数字合法");
get();
getObj.value.pageNum = parseInt(getObj.value.pageNum)
console.log('输入的数字合法')
get()
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
};
}
// ========================================================= // =========================================================
// //
@ -410,26 +413,37 @@ const checkNumber = function () {
const delConfirm = async function (row) { const delConfirm = async function (row) {
try { try {
// POST // POST
const result = await request(
{
url: "/rates/delete/ " + row.rateId,
data:{}}
);
//
console.log("请求成功", result);
get();
const result = await request({
url: '/rates/delete/ ' + row.rateId,
data: {}
})
if (result.code == 200) {
ElMessage({
type: 'success',
message: '删除成功'
})
//
console.log('请求成功', result)
//
get()
} else {
ElMessage({
type: 'error',
message: '删除失败'
})
}
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
function handleInput(value) { function handleInput(value) {
// 7使 // 7使
rateAdd.value.exchangeRate = value rateAdd.value.exchangeRate = value
.replace(/(\.\d{7})\d+/, "$1")
.replace(/^(\d+)(\.\d{0,7})?$/, "$1$2");
.replace(/(\.\d{7})\d+/, '$1')
.replace(/^(\d+)(\.\d{0,7})?$/, '$1$2')
} }
</script> </script>
@ -549,8 +563,10 @@ function handleInput(value) {
<el-button <el-button
type="text" type="text"
@click=" @click="
regeEdit = true;
getEditData(scope.row);
() => {
regeEdit = true
getEditData(scope.row)
}
" "
>编辑</el-button >编辑</el-button
> >
@ -581,41 +597,12 @@ function handleInput(value) {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next, slot"
:page-size="getObj.pageSize"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

429
gold-system/src/views/permissions/index.vue

@ -1,165 +1,163 @@
<script setup> <script setup>
import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios";
import moment from "moment";
import { ta } from "element-plus/es/locales.mjs";
import API from "../../api/index.js";
import { UserFilled } from "@element-plus/icons-vue";
import _ from "lodash";
import request from "@/util/http";
import { ref, onMounted, reactive, computed } from 'vue'
import ElementPlus from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import moment from 'moment'
import { ta } from 'element-plus/es/locales.mjs'
import API from '../../api/index.js'
import { UserFilled } from '@element-plus/icons-vue'
import _ from 'lodash'
import request from '@/util/http'
// //
const tableData = ref([]);
const tableData = ref([])
// =========================================== // ===========================================
// //
const total = ref(100);
const total = ref(100)
// detailY // detailY
const admin = ref({});
const admin = ref({})
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 10,
});
pageSize: 10
})
// //
const permissionAddVisible = ref(false);
const permissionAddVisible = ref(false)
// //
const permissionEditVisible = ref(false);
const permissionEditVisible = ref(false)
// //
const area = ref([]);
const area = ref([])
// //
const store = ref([]);
const store = ref([])
// //
const permissionAddObj = ref({});
const permissionAddObj = ref({})
// //
const addAdmin = ref({});
const addAdmin = ref({})
// //
const permissionEditObj = ref({});
const permissionEditObj = ref({})
// //
const delObj = ref({});
const delObj = ref({})
// //
const get = async function (val) { const get = async function (val) {
try { try {
// //
if (typeof val === "number") {
getObj.value.pageNum = val;
if (typeof val === 'number') {
getObj.value.pageNum = val
} }
console.log("搜索参数", getObj.value);
console.log('搜索参数', getObj.value)
// POST // POST
const result = await request({ const result = await request({
url: "/admin/search",
url: '/admin/search',
data: { data: {
...getObj.value, ...getObj.value,
admin: { ...admin.value },
},
});
tableData.value = result.data.list;
console.log("tableData", tableData.value);
total.value = result.data.total;
admin: { ...admin.value }
}
})
tableData.value = result.data.list
console.log('tableData', tableData.value)
total.value = result.data.total
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
} }
};
}
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1;
get();
};
getObj.value.pageNum = 1
get()
}
// //
const reset = function () { const reset = function () {
admin.value = {};
};
admin.value = {}
}
// //
const getArea = async function () { const getArea = async function () {
try { try {
const result = await request({ const result = await request({
url: "/admin/area",
data: {},
});
area.value = result.data;
url: '/admin/area',
data: {}
})
area.value = result.data
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const getStore = async function () { const getStore = async function () {
try { try {
const result = await request({ const result = await request({
url: "/admin/store",
data: {},
});
store.value = result.data;
url: '/admin/store',
data: {}
})
store.value = result.data
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
const checkNumber = function () { const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === "number") {
console.log(
"总共有多少页" + Math.ceil(total.value / getObj.value.pageSize)
);
if (typeof parseInt(getObj.value.pageNum) === 'number') {
console.log('总共有多少页' + Math.ceil(total.value / getObj.value.pageSize))
if ( if (
getObj.value.pageNum > 0 && getObj.value.pageNum > 0 &&
getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize) getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
) { ) {
getObj.value.pageNum = parseInt(getObj.value.pageNum);
console.log("输入的数字合法");
get();
getObj.value.pageNum = parseInt(getObj.value.pageNum)
console.log('输入的数字合法')
get()
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
};
}
// //
const openPermissionAddVisible = function () { const openPermissionAddVisible = function () {
permissionAddVisible.value = true;
};
permissionAddVisible.value = true
}
// //
const closePermissionAddVisible = function () { const closePermissionAddVisible = function () {
permissionAddVisible.value = false;
};
permissionAddVisible.value = false
}
// //
const permissionAddInit = function () { const permissionAddInit = function () {
permissionAddObj.value = {};
openPermissionAddVisible();
};
permissionAddObj.value = {}
openPermissionAddVisible()
}
// //
const getAdminByJwcodeWithoutPermission = async function () { const getAdminByJwcodeWithoutPermission = async function () {
try { try {
const result = await request({ const result = await request({
url: "/admin/selectNo",
data: permissionAddObj.value,
});
url: '/admin/selectNo',
data: permissionAddObj.value
})
if (result.code == 200) { if (result.code == 200) {
permissionAddObj.value = result.data[0];
ElMessage.success("精网号查询成功");
permissionAddObj.value = result.data[0]
ElMessage.success('精网号查询成功')
} else { } else {
ElMessage.error(result.msg);
ElMessage.error(result.msg)
} }
console.log("精网号查询没有权限的用户", permissionAddObj.value);
console.log('精网号查询没有权限的用户', permissionAddObj.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
}
// //
// const permissionAdd = async function () { // const permissionAdd = async function () {
// try { // try {
@ -205,210 +203,218 @@ const getAdminByJwcodeWithoutPermission = async function () {
// }; // };
const permissionAdd = async function () { const permissionAdd = async function () {
Ref.value.validate(async (valid) => { Ref.value.validate(async (valid) => {
console.log("valid", valid);
console.log('valid', valid)
if (valid) { if (valid) {
try { try {
addAdmin.value.adminFlag = 1;
addAdmin.value.status1 = 1;
addAdmin.value.adminFlag = 1
addAdmin.value.status1 = 1
const result = await request({ const result = await request({
url: "/admin/add",
data: addAdmin.value,
});
url: '/admin/add',
data: addAdmin.value
})
if (result.code == 200) { if (result.code == 200) {
ElMessage.success("添加成功");
ElMessage.success('添加成功')
} else { } else {
ElMessage.error(result.msg);
ElMessage.error(result.msg)
} }
addAdmin.value = {};
get();
addAdmin.value = {}
get()
closePermissionAddVisible();
closePermissionAddVisible()
} catch (error) { } catch (error) {
console.log("新增用户权限失败", error);
console.log('新增用户权限失败', error)
// //
ElMessage.error("新增用户权限失败");
closePermissionAddVisible();
ElMessage.error('新增用户权限失败')
closePermissionAddVisible()
} }
} else { } else {
// //
ElMessage({ ElMessage({
type: "error",
message: "请检查输入内容",
});
type: 'error',
message: '请检查输入内容'
})
} }
});
};
})
}
// //
const rules = reactive({ const rules = reactive({
jwcode: [{ required: true, message: "请输入精网号", trigger: "blur" }],
name: [{ required: true, message: "请输入用户名", trigger: "blur" }],
store: [{ required: true, message: "请输入职称", trigger: "blur" }],
machineId: [{ required: true, message: "请输入精网号", trigger: "blur" }],
area: [{ required: true, message: "请选择所属地区", trigger: "blur" }],
permission: [{ required: true, message: "请选择权限", trigger: "blur" }],
});
jwcode: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
name: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
store: [{ required: true, message: '请输入职称', trigger: 'blur' }],
machineId: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
area: [{ required: true, message: '请选择所属地区', trigger: 'blur' }],
permission: [{ required: true, message: '请选择权限', trigger: 'blur' }]
})
// //
// ref // ref
const Ref = ref(null);
const Ref = ref(null)
// 使 _.throttle trailing false // 使 _.throttle trailing false
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, { const throttledPermissionAdd = _.throttle(permissionAdd, 5000, {
trailing: false,
});
trailing: false
})
// //
const permissionList = [ const permissionList = [
{ {
label: "总部",
value: "1",
label: '总部',
value: '1'
}, },
{ {
label: "地区经理",
value: "5",
label: '地区经理',
value: '5'
}, },
{ {
label: "财务",
value: "3",
label: '财务',
value: '3'
}, },
{ {
label: "客服",
value: "2",
},
];
label: '客服',
value: '2'
}
]
// //
// //
const areaList = ref([]);
const areaList = ref([])
const getAreas = async function () { const getAreas = async function () {
try { try {
// POST // POST
const result = await request({ const result = await request({
url: "/recharge/user/search",
data: {},
});
url: '/recharge/user/search',
data: {}
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
// //
areaList.value = result.data;
console.log("地区", area.value);
areaList.value = result.data
console.log('地区', area.value)
} catch (error) { } catch (error) {
console.log("请求失败", error);
console.log('请求失败', error)
// //
} }
};
getAreas();
}
getAreas()
// //
const openPermissionEditVisible = function () { const openPermissionEditVisible = function () {
permissionEditVisible.value = true;
};
permissionEditVisible.value = true
}
// //
const closePermissionEditVisible = function () { const closePermissionEditVisible = function () {
permissionEditVisible.value = false;
};
permissionEditVisible.value = false
}
// //
const permissionEditInit = function (row) { const permissionEditInit = function (row) {
permissionEditObj.value = {};
permissionEditObj.value.jwcode = row.jwcode;
permissionEditObj.value.name = row.name;
permissionEditObj.value.area = row.area;
permissionEditObj.value.store = row.store;
permissionEditObj.value.permission = row.permission;
console.log("编辑用户权限", permissionEditObj.value);
openPermissionEditVisible();
};
permissionEditObj.value = {}
permissionEditObj.value.jwcode = row.jwcode
permissionEditObj.value.name = row.name
permissionEditObj.value.area = row.area
permissionEditObj.value.store = row.store
permissionEditObj.value.permission = row.permission
console.log('编辑用户权限', permissionEditObj.value)
openPermissionEditVisible()
}
// //
const permissionEdit = async function () { const permissionEdit = async function () {
try { try {
const result = await request({ const result = await request({
url: "/admin/update",
data: permissionEditObj.value,
});
url: '/admin/update',
data: permissionEditObj.value
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
ElMessage.success("编辑用户权限成功");
ElMessage.success('编辑用户权限成功')
get();
get()
closePermissionEditVisible();
closePermissionEditVisible()
} catch (error) { } catch (error) {
console.log("编辑用户权限失败", error);
console.log('编辑用户权限失败', error)
// //
ElMessage.error("编辑用户权限失败");
ElMessage.error('编辑用户权限失败')
closePermissionEditVisible();
closePermissionEditVisible()
} }
};
}
const throttledPermissionEdit = _.throttle(permissionEdit, 5000, { const throttledPermissionEdit = _.throttle(permissionEdit, 5000, {
trailing: false,
});
trailing: false
})
// //
const del = function (row) { const del = function (row) {
delObj.value = {};
console.log(row, "删除初始化");
delObj.value.jwcode = row.jwcode;
};
delObj.value = {}
console.log(row, '删除初始化')
delObj.value.jwcode = row.jwcode
}
// //
const delConfirm = async function () { const delConfirm = async function () {
try { try {
delObj.value.permission = "4";
console.log(delObj.value);
delObj.value.permission = '4'
console.log(delObj.value)
const result = await request({ const result = await request({
url: "/admin/update",
data: delObj.value,
});
url: '/admin/update',
data: delObj.value
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
ElMessage.success("删除权限成功");
delObj.value = {};
get();
ElMessage.success('删除权限成功')
delObj.value = {}
get()
} catch (error) { } catch (error) {
console.log("删除权限失败", error);
console.log('删除权限失败', error)
// //
ElMessage.error("删除权限失败");
ElMessage.error('删除权限失败')
} }
};
}
// //
const editStatus = async function (row) { const editStatus = async function (row) {
try { try {
console.log(row);
console.log(row)
permissionEditObj.value = {};
permissionEditObj.value.jwcode = row.jwcode;
permissionEditObj.value.status1 = row.status1;
permissionEditObj.value = {}
permissionEditObj.value.jwcode = row.jwcode
permissionEditObj.value.status1 = row.status1
console.log("修改用户权限状态", permissionEditObj.value);
console.log('修改用户权限状态', permissionEditObj.value)
const result = await request({ const result = await request({
url: "/admin/update",
data: permissionEditObj.value,
});
url: '/admin/update',
data: permissionEditObj.value
})
// //
console.log("请求成功", result);
console.log('请求成功', result)
ElMessage.success( ElMessage.success(
permissionEditObj.value.status1 == 1 ? "启用成功" : "禁用成功"
);
permissionEditObj.value = {};
get();
permissionEditObj.value.status1 == 1 ? '启用成功' : '禁用成功'
)
permissionEditObj.value = {}
get()
} catch (error) { } catch (error) {
console.log("修改用户权限失败", error);
console.log('修改用户权限失败', error)
// //
} }
};
}
// //
onMounted(async function () { onMounted(async function () {
await get();
await getArea();
await getStore();
});
await get()
await getArea()
await getStore()
})
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
</script> </script>
<template> <template>
@ -566,41 +572,12 @@ onMounted(async function () {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

51
gold-system/src/views/recharge/adminRecharge.vue

@ -229,6 +229,14 @@ const getToday = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
get() get()
} }
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
// //
const getYesterday = function () { const getYesterday = function () {
const yesterday = new Date() const yesterday = new Date()
@ -531,8 +539,8 @@ const handleSortChange = (column) => {
<el-tab-pane label="已通过" name="pass"></el-tab-pane> <el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane> <el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<div> <div>
充值金额{{ trueRGold }}新币永久金币{{
trueRGold
充值金额{{ trueRGold.toFixed(2) }}新币永久金币{{
trueRGold.toFixed(2)
}}金币免费金币{{ trueFGold }}金币 }}金币免费金币{{ trueFGold }}金币
</div> </div>
</el-tabs> </el-tabs>
@ -695,41 +703,12 @@ const handleSortChange = (column) => {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

71
gold-system/src/views/recharge/allRecharge.vue

@ -316,12 +316,13 @@ const getActivity = async function () {
// //
// //
const getArea = async function () { const getArea = async function () {
console.log('888888888880000000')
try { try {
// POST // POST
const result = await API.post({ url: '/recharge/user/search', data: {} })
const result = await API({ url: '/recharge/user/search', data: {} })
// //
console.log('请求成功', result)
console.log('请求成功地区', result.data)
// //
area.value = result.data area.value = result.data
console.log('地区', area.value) console.log('地区', area.value)
@ -360,12 +361,21 @@ const checkNumber = function () {
// //
onMounted(async function () { onMounted(async function () {
await getAdminData()
await get()
await getActivity()
await getArea()
await getPayWay()
getAdminData()
get()
getActivity()
getPayWay()
}) })
getArea()
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
// //
const sortField = ref('') const sortField = ref('')
const sortOrder = ref('') const sortOrder = ref('')
@ -494,9 +504,9 @@ const handleSortChange = (column) => {
<el-tab-pane label="已通过" name="pass"></el-tab-pane> <el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane> <el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<div> <div>
充值金额{{ trueRGold / 100 }}新币永久金币{{
trueRGold / 100
}}金币免费金币{{ totalFcoin / 100 }}金币
充值金额{{ (trueRGold / 100).toFixed(2) }}新币永久金币{{
(trueRGold / 100).toFixed(2)
}}金币免费金币{{ (totalFcoin / 100).toFixed(2) }}金币
</div> </div>
</el-tabs> </el-tabs>
<!-- 设置表格容器的高度和滚动样式 --> <!-- 设置表格容器的高度和滚动样式 -->
@ -588,7 +598,7 @@ const handleSortChange = (column) => {
<template #default="scope"> <template #default="scope">
<el-image <el-image
:preview-src-list="[scope.row.rechargeVoucher]" :preview-src-list="[scope.row.rechargeVoucher]"
preview-teleported="true"
:preview-teleported="true"
:src="scope.row.rechargeVoucher" :src="scope.row.rechargeVoucher"
alt="凭证" alt="凭证"
style="width: 50px; height: 50px" style="width: 50px; height: 50px"
@ -650,41 +660,12 @@ const handleSortChange = (column) => {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

47
gold-system/src/views/refund/allRefund.vue

@ -418,6 +418,14 @@ const handleSortChange = (column) => {
sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC' sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
get() get()
} }
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
</script> </script>
<template> <template>
@ -677,41 +685,12 @@ const handleSortChange = (column) => {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

47
gold-system/src/views/usergold/index.vue

@ -496,6 +496,14 @@ const handleSortChange = (column) => {
sortField.value = 'gold' sortField.value = 'gold'
} }
sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC' sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
}
get()
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get() get()
} }
</script> </script>
@ -797,41 +805,12 @@ const handleSortChange = (column) => {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>

109
gold-system/src/views/usergoldInfo/index.vue

@ -10,6 +10,7 @@ import API from '@/util/http'
// //
// //
const adminData = ref({}) const adminData = ref({})
const dialogVisible = ref(false)
const getAdminData = async function () { const getAdminData = async function () {
try { try {
const result = await API({ url: '/admin/userinfo', data: {} }) const result = await API({ url: '/admin/userinfo', data: {} })
@ -28,6 +29,9 @@ const tableAllData = ref([])
const rechargeCoin = ref(0) const rechargeCoin = ref(0)
const freeCoin = ref(0) const freeCoin = ref(0)
const taskCoin = ref(0) const taskCoin = ref(0)
//
const tableCountData = ref([])
const userInfo = ref({})
// =========================================== // ===========================================
// //
const total = ref(100) const total = ref(100)
@ -144,7 +148,13 @@ const reset = function () {
sortOrder.value = '' sortOrder.value = ''
get() get()
} }
const cellClick = function (row, column) {
console.log('cellClick', column.label)
if (column.label == '姓名') {
dialogVisible.value = true
userInfo.value = row
}
}
// //
const checkNumber = function () { const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === 'number') { if (typeof parseInt(getObj.value.pageNum) === 'number') {
@ -222,6 +232,14 @@ onMounted(async function () {
await getAdminData() await getAdminData()
await get() await get()
}) })
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
</script> </script>
<template> <template>
@ -279,6 +297,7 @@ onMounted(async function () {
<div style="height: 626px; overflow-y: auto"> <div style="height: 626px; overflow-y: auto">
<el-table <el-table
:data="tableData" :data="tableData"
@cellClick="cellClick"
style="width: 100%" style="width: 100%"
height="715px" height="715px"
@sort-change="handleSortChange" @sort-change="handleSortChange"
@ -380,48 +399,55 @@ onMounted(async function () {
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
layout="slot"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
>
<div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 10, 20, 50, 100]"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
<div></div>
</el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div>
</el-pagination>
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
<!-- 客户信息弹框 -->
<el-dialog
title="客户信息"
v-model="dialogVisible"
width="50%"
@before-close="dialogVisible = false"
>
<el-card>
<div class="custom-box">
<div>姓名{{ userInfo.name }}</div>
<br />
<div>精网号{{ userInfo.jwcode }}</div>
<div>地区{{ userInfo.area }}</div>
<div>历史充值{{ userInfo.rcoin }}</div>
<div>历史消费{{ userInfo.scoin }}</div>
</div>
</el-card>
<!-- t -->
<div style="height: 450px; overflow-y: auto">
<el-table :data="tableCountData" style="width: 100%" height="715px">
<el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template>
</el-table-column>
<el-table-column prop="" label="商品" width="120" />
<el-table-column sortable prop="" label="消费金币总数" width="180" />
<el-table-column sortable prop="" label="永久金币" width="120" />
<el-table-column sortable prop="" label="免费金币" width="120" />
<el-table-column sortable prop="" label="任务金币" width="120" />
<el-table-column sortable prop="" label="时间" width="120" />
</el-table>
</div>
</el-dialog>
</template> </template>
<style scoped>
<style scoped lang="scss">
.pagination { .pagination {
display: flex; display: flex;
} }
@ -441,4 +467,15 @@ onMounted(async function () {
.head-card-btn { .head-card-btn {
margin-left: auto; margin-left: auto;
} }
.custom-box {
display: flex;
flex-wrap: wrap;
row-gap: 5px;
div:nth-child(1) {
flex: 1 0 100%;
}
div {
margin-right: 20px;
}
}
</style> </style>

2
gold-system/stats.html
File diff suppressed because it is too large
View File

Loading…
Cancel
Save