Browse Source

4/1日一期修改

zln
donghaolin 2 months ago
parent
commit
f963dac081
  1. 44
      gold-system/index.html
  2. 503
      gold-system/package-lock.json
  3. 2
      gold-system/package.json
  4. 10
      gold-system/src/router/index.js
  5. 5
      gold-system/src/util/http.js
  6. 197
      gold-system/src/views/audit/rechargeAudit.vue
  7. 118
      gold-system/src/views/audit/refundAudit.vue
  8. 148
      gold-system/src/views/consume/addConsume.vue
  9. 110
      gold-system/src/views/consume/allConsume.vue
  10. 37
      gold-system/src/views/index.vue
  11. 79
      gold-system/src/views/login.vue
  12. 269
      gold-system/src/views/permissions/index.vue
  13. 42
      gold-system/src/views/recharge/addRecharge.vue
  14. 121
      gold-system/src/views/recharge/adminRecharge.vue
  15. 113
      gold-system/src/views/recharge/allRecharge.vue
  16. 68
      gold-system/src/views/refund/addRefund.vue
  17. 197
      gold-system/src/views/refund/allRefund.vue
  18. 119
      gold-system/src/views/usergold/index.vue
  19. 71
      gold-system/src/views/usergoldInfo/index.vue
  20. 124
      gold-system/src/views/workspace/index.vue
  21. 2
      gold-system/vite.config.ts

44
gold-system/index.html

@ -3,44 +3,20 @@
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta
name="viewport"
content="width=device-width, initial-scale=0.9, maximum-scale=0.9, minimum-scale=0.9"
/>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>财务金币管理系统</title>
<style>
html,
body,
#app {
height: 100%;
margin: 0;
padding: 0;
}
</style>
<script>
window.onload = function () {
// 获取浏览器的缩放比例
const browserZoom =
(window.devicePixelRatio / window.screen.availWidth) *
window.innerWidth;
if (browserZoom !== 0.9) {
if (typeof document.documentElement.style.zoom === "string") {
// 支持 zoom 属性的浏览器(如 IE)
document.body.style.zoom = 0.9;
} else {
// 不支持 zoom 属性的浏览器,使用 transform
document.body.style.transform = "scale(0.9)";
document.body.style.transformOrigin = "top left";
document.body.style.width = "111.11%";
document.body.style.height = "111.11%";
}
}
};
</script>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
<style>
html,
body,
#app {
height: 100%;
margin: 0px;
padding: 0px;
}
</style>

503
gold-system/package-lock.json
File diff suppressed because it is too large
View File

2
gold-system/package.json

@ -27,7 +27,7 @@
},
"devDependencies": {
"@types/node": "^22.10.5",
"@vitejs/plugin-legacy": "^6.0.1",
"@vitejs/plugin-legacy": "^6.0.2",
"@vitejs/plugin-vue": "^5.1.4",
"terser": "^5.38.1",
"typescript": "~5.6.2",

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

@ -57,7 +57,7 @@ router.beforeEach((to, from, next) => {
} else {
if (permission == "4" && to.name != "noPermission") {
next({ name: "noPermission" });
} else if (permission == "2") {
} else if (permission == "3") {
if (to.name == "addConsume" || to.name == "allConsume"
|| to.name == "addRecharge" || to.name == "adminRecharge" || to.name == "allRecharge"
|| to.name == "addRefund" || to.name == "allRefund"
@ -66,7 +66,7 @@ router.beforeEach((to, from, next) => {
} else {
next();
}
} else if (permission == '3') {
} else if (permission == '2') {
if (to.name == "rechargeAudit" || to.name == "refundAudit"
|| to.name == "activity" || to.name == "rate"
|| to.name == "permissions") {
@ -74,6 +74,12 @@ router.beforeEach((to, from, next) => {
} else {
next();
}
} else if (permission == '5') {
if (to.name == "permissions") {
next({ name: "workspace" })
} else {
next();
}
}
else {
next();

5
gold-system/src/util/http.js

@ -1,5 +1,6 @@
import axios from 'axios';
export default function (options) {
//配置每次发送请求都从localStorage中获取名字叫token的数据,
//添加到请求头部的Authorization属性中
@ -31,10 +32,12 @@ export default function (options) {
.catch(e=>{
// 检查是否是因为token过期导致的401错误
if (e.response && e.response.status === 401) {
// 获取机器码
const machineId = localStorage.getItem('machineId');
// 清除localStorage中的token
localStorage.removeItem('token');
// // 执行重新登录的逻辑,例如跳转到登录页面
window.location.href = '/jtzy/Product/crm/hwjb2.0/index.html#/login';
router.push("/login?machineId=" + machineId);
// 可以在这里返回一个特定的值或者对象,以便调用者知道需要重新登录
return { needsLogin: true };
} else {

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

@ -98,21 +98,37 @@ const Ref = ref(null);
//
//
const totalData = ref({
totalno: 0,
totalcoin: 0,
});
const totalno = ref(0);
const totalcoin = ref(0);
//
const trueGold = ref(0);
const trueCount = ref(0);
const trueRGold = ref(0);
const trueFGold = ref(0);
//
const pendingCount = ref(0);
//
const pendingGold = ref(0);
const pendingRGold = ref(0);
const pendingFGold = ref(0);
//
const approvedCount = ref(0);
//
const approvedGold = ref(0);
const approvedRGold = ref(0);
const approvedFGold = ref(0);
//
const rejectedCount = ref(0);
//
const rejectedGold = ref(0);
const rejectedRGold = ref(0);
const rejectedFGold = ref(0);
// ==============================================================
//
const get = async function (val) {
//
totalno.value = 0;
totalcoin.value = 0;
try {
//
if (adminData.value.area != "总部") {
if (adminData.value.area === "泰国") {
rechargeVo.value.areas = ["泰国", "越南"];
} else if (adminData.value.area !== "总部") {
rechargeVo.value.area = adminData.value.area;
}
//
@ -129,6 +145,8 @@ const get = async function (val) {
rechargeVo.value.startDate = "";
rechargeVo.value.endDate = "";
}
rechargeVo.value.sortField = sortField.value;
rechargeVo.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
// POST
const result = await API.post(
@ -139,26 +157,54 @@ const get = async function (val) {
}
);
//
// rechargeVo.value status
const { status, ...rechargeVoWithoutStatus } = rechargeVo.value;
// rechargeVo.value
const detailWithoutSort = { ...rechargeVo.value };
delete detailWithoutSort.sortField;
delete detailWithoutSort.sortOrder;
delete detailWithoutSort.status;
const result2 = await API.post(
"http://54.251.137.151:10702/recharge/recharge/RechargeA",
{
...rechargeVoWithoutStatus,
...detailWithoutSort,
}
);
// result2.data[i].flag="" totalData.value = result2.data[i]0
for (let i = 0; i < result2.data.length; i++) {
if (result2.data[i].flag == "待审核") {
totalData.value = result2.data[i];
totalno.value = totalData.value.raudit;
totalcoin.value = totalData.value.sumRaudit;
break;
}
//
if (result2.data) {
result2.data.forEach((item) => {
switch (item.flag) {
case "待审核":
// item.raudit 0
pendingCount.value = item.raudit || 0;
// item.sumRaudit 0
pendingGold.value = item.sumRaudit || 0;
pendingRGold.value = item.sumRaudit1 || 0;
pendingFGold.value = item.sumRaudit2 || 0;
break;
case "已通过":
approvedCount.value = item.raudit || 0;
approvedGold.value = item.sumRaudit || 0;
approvedRGold.value = item.sumRaudit1 || 0;
approvedFGold.value = item.sumRaudit2 || 0;
break;
case "已驳回":
rejectedCount.value = item.raudit || 0;
rejectedGold.value = item.sumRaudit || 0;
rejectedRGold.value = item.sumRaudit1 || 0;
rejectedFGold.value = item.sumRaudit2 || 0;
break;
}
});
}
console.log("合计数", totalno.value);
console.log("合计数", totalData.value);
trueGold.value =
pendingGold.value + approvedGold.value + rejectedGold.value;
trueCount.value =
pendingCount.value + approvedCount.value + rejectedCount.value;
trueRGold.value =
pendingRGold.value + approvedRGold.value + rejectedRGold.value;
trueFGold.value =
pendingFGold.value + approvedFGold.value + rejectedFGold.value;
//
console.log("请求成功", result);
@ -249,25 +295,37 @@ const adminAll = function () {
get();
};
//
const adminWait = function () {
const adminWait = async function () {
rechargeVo.value.status = 0;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminWait");
trueCount.value = pendingCount.value;
trueGold.value = pendingGold.value;
trueRGold.value = pendingRGold.value;
trueFGold.value = pendingFGold.value;
};
//
const adminPass = function () {
const adminPass = async function () {
rechargeVo.value.status = 1;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminPass");
trueCount.value = approvedCount.value;
trueGold.value = approvedGold.value;
trueRGold.value = approvedRGold.value;
trueFGold.value = approvedFGold.value;
};
//
const adminReject = function () {
const adminReject = async function () {
rechargeVo.value.status = 2;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminReject");
trueCount.value = rejectedCount.value;
trueGold.value = rejectedGold.value;
trueRGold.value = rejectedRGold.value;
trueFGold.value = rejectedFGold.value;
};
//
const handleClick = function (tab, event) {
@ -459,6 +517,27 @@ onMounted(async function () {
await getArea();
await get();
});
//
const sortField = ref("");
const sortOrder = ref("");
//
const handleSortChange = (column) => {
console.log("排序字段:", column.prop);
console.log("排序方式:", column.order);
if (column.prop === "rechargeGold") {
sortField.value = "recharge_gold";
} else if (column.prop === "freeGold") {
sortField.value = "free_gold";
} else if (column.prop === "rechargeTime") {
sortField.value = "recharge_time";
} else if (column.prop === "createTime") {
sortField.value = "create_time";
} else if (column.prop === "paidGold") {
sortField.value = "paid_gold";
}
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
</script>
<template>
@ -499,10 +578,10 @@ onMounted(async function () {
</el-col>
<el-col :span="6">
<div class="head-card-element">
<el-text class="mx-1" size="large">充值方式</el-text>
<el-text class="mx-1" size="large">支付方式</el-text>
<el-select
v-model="rechargeVo.payWay"
placeholder="请选择充值方式"
placeholder="请选择支付方式"
size="large"
style="width: 240px"
clearable
@ -578,10 +657,19 @@ onMounted(async function () {
<el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<div>待审核{{ totalno }}待审核{{ totalcoin }}金币</div>
<div>
总条数{{ trueCount }}总金币数{{
trueGold
}}金币永久金币{{ trueRGold }}金币免费金币{{ trueFGold }}金币
</div>
</el-tabs>
<div style="height: 629px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="629px">
<div style="height: 540px; overflow-y: auto">
<el-table
:data="tableData"
style="width: 100%"
height="540px"
@sort-change="handleSortChange"
>
<el-table-column
type="index"
label="序号"
@ -595,7 +683,7 @@ onMounted(async function () {
</template>
</el-table-column>
<el-table-column prop="username" label="姓名" width="100px" />
<el-table-column prop="jwcode" label="精网号" width="150px" />
<el-table-column prop="jwcode" label="精网号" width="110px" />
<el-table-column prop="area" label="所属地区" width="100px" />
<el-table-column
prop="activityName"
@ -605,15 +693,34 @@ onMounted(async function () {
<el-table-column
prop="rechargeGold"
label="充值金额"
width="100px"
sortable="“custom”"
width="110px"
/>
<el-table-column
prop="rechargeWay"
label="充值方式"
width="100px"
width="110px"
/>
<el-table-column prop="paidGold" label="永久金币" width="100px" />
<el-table-column prop="freeGold" label="免费金币" width="100px" />
<el-table-column
prop="paidGold"
label="永久金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
{{ scope.row.paidGold }}
</template>
</el-table-column>
<el-table-column
prop="freeGold"
label="免费金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
{{ scope.row.freeGold }}
</template>
</el-table-column>
<el-table-column
prop="remark"
label="备注"
@ -663,14 +770,24 @@ onMounted(async function () {
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="rechargeTime" label="交款时间" width="200px">
<el-table-column
prop="rechargeTime"
label="交款时间"
sortable="“custom”"
width="200px"
>
<template #default="scope">
{{
moment(scope.row.rechargeTime).format("YYYY-MM-DD HH:mm:ss")
}}
</template>
</el-table-column>
<el-table-column prop="createTime" label="提交时间" width="200px" />
<el-table-column
prop="createTime"
label="提交时间"
sortable="“custom”"
width="200px"
/>
<el-table-column
fixed="right"
prop="operation"

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

@ -82,6 +82,9 @@ const Ref = ref(null);
//
//
//
const trueGold = ref(0);
const trueCount = ref(0);
//
const pendingCount = ref(0);
//
@ -100,8 +103,10 @@ const rejectedGold = ref(0);
const get = async function (val) {
try {
//
if (adminData.value.area != "总部") {
detail.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") {
@ -117,6 +122,8 @@ const get = async function (val) {
detail.value.startDate = "";
detail.value.endDate = "";
}
detail.value.sortField = sortField.value;
detail.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
// POST
const result = await API.post(
@ -126,10 +133,13 @@ const get = async function (val) {
detail: { ...detail.value },
}
);
const detailWithoutSort = { ...detail.value };
delete detailWithoutSort.sortField;
delete detailWithoutSort.sortOrder;
const result2 = await API.post(
"http://54.251.137.151:10702/refund/RefundA",
{
...detail.value,
...detailWithoutSort,
}
);
@ -155,6 +165,10 @@ const get = async function (val) {
});
}
trueGold.value =
pendingGold.value + approvedGold.value + rejectedGold.value;
trueCount.value =
pendingCount.value + approvedCount.value + rejectedCount.value;
//
console.log("请求成功", result);
//
@ -181,6 +195,8 @@ const reset = function () {
detail.value.refundGoods = "";
detail.value.startDate = "";
detail.value.endDate = "";
sortField.value = "";
sortOrder.value = "";
getTime.value = {};
};
//
@ -243,25 +259,31 @@ const adminAll = function () {
get();
};
//
const adminWait = function () {
const adminWait = async function () {
detail.value.status = 0;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminWait");
trueGold.value = pendingGold.value;
trueCount.value = pendingCount.value;
};
//
const adminPass = function () {
const adminPass = async function () {
detail.value.status = 1;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminPass");
trueGold.value = approvedGold.value;
trueCount.value = approvedCount.value;
};
//
const adminReject = function () {
const adminReject = async function () {
detail.value.status = 2;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminReject");
trueGold.value = rejectedGold.value;
trueCount.value = rejectedCount.value;
};
//
const handleClick = function (tab, event) {
@ -448,6 +470,25 @@ onMounted(async function () {
await getArea();
await getArea();
});
//
const sortField = ref("");
const sortOrder = ref("");
//
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";
}
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
</script>
<template>
@ -567,18 +608,19 @@ onMounted(async function () {
<el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<div>
待审核{{ pendingCount }}待审核{{
pendingGold
}}金币已通过{{ approvedCount }}已通过{{
approvedGold
}}金币已驳回{{ rejectedCount }}已驳回{{
rejectedGold
}}金币
退款记录条数{{ Math.abs(trueCount) }},退款金币总数{{
Math.abs(trueGold)
}}
</div>
</el-tabs>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 629px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="629px">
<div style="height: 540px; overflow-y: auto">
<el-table
:data="tableData"
style="width: 100%"
height="540px"
@sort-change="handleSortChange"
>
<el-table-column
type="index"
label="序号"
@ -601,7 +643,7 @@ onMounted(async function () {
fixed="left"
prop="jwcode"
label="精网号"
width="150px"
width="110px"
/>
<el-table-column prop="area" label="所属地区" width="100px" />
<el-table-column prop="refundType" label="退款类型" width="100px" />
@ -622,10 +664,33 @@ onMounted(async function () {
<el-table-column
prop="rechargeCoin"
label="永久金币"
width="100px"
/>
<el-table-column prop="freeCoin" label="免费金币" width="100px" />
<el-table-column prop="taskCoin" label="任务金币" width="100px" />
width="110px"
sortable="“custom”"
>
<template #default="scope">
{{ scope.row.rechargeCoin }}
</template>
</el-table-column>
<el-table-column
prop="freeCoin"
label="免费金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
{{ scope.row.freeCoin }}
</template>
</el-table-column>
<el-table-column
prop="taskCoin"
label="任务金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
{{ scope.row.taskCoin }}
</template>
</el-table-column>
<el-table-column
prop="remark"
label="备注"
@ -662,7 +727,12 @@ onMounted(async function () {
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="createTime" label="提交时间" width="200px">
<el-table-column
prop="createTime"
sortable="“custom”"
label="提交时间"
width="200px"
>
<template #default="scope">
{{ moment(scope.row.createTime).format("YYYY-MM-DD HH:mm:ss") }}
</template>

148
gold-system/src/views/consume/addConsume.vue

@ -37,6 +37,11 @@ const addConsume = ref({
//
const add = async function () {
try {
// 使
addConsume.value.rechargeCoin = Number(addConsume.value.rechargeCoin * 100);
addConsume.value.freeCoin = Number(addConsume.value.freeCoin * 100);
addConsume.value.taskCoin = Number(addConsume.value.taskCoin * 100);
addConsume.value.productName = indexs.value.productName;
// POST
const result = await API.post(
"http://54.251.137.151:10702/consume/add",
@ -56,6 +61,7 @@ const add = async function () {
addConsume.value.freeCoin = 0;
addConsume.value.rechargeCoin = 0;
addConsume.value.taskCoin = 0;
indexs.value = {};
console.log("请求成功", result);
user.value = {};
} catch (error) {
@ -96,11 +102,7 @@ const addBefore = () => {
//
//
const Ref = ref(null);
const checkEndTime = function (rule, value, callback) {
if (value <= new Date()) {
callback(new Error("付款时间不能小于当前时间"));
}
};
const checkFreeGoldRadio = function (rule, value, callback) {
if (value == "0" || value == null || value == "") {
callback(new Error("请输入消费金币总数"));
@ -112,7 +114,7 @@ const checkFreeGoldRadio = function (rule, value, callback) {
};
const rules = reactive({
jwcode: [{ required: true, message: "请输入精网号", trigger: "blur" }],
productId: [{ required: true, message: "请选择消费商品", trigger: "blur" }],
productName: [{ required: true, message: "请选择消费商品", trigger: "blur" }],
taskCoin: [{ required: true, message: "请输入任务金币", trigger: "blur" }],
freeCoin: [{ required: true, message: "请输入免费金币", trigger: "blur" }],
rechargeCoin: [
@ -129,6 +131,8 @@ const delteConsume = function () {
addConsume.value.freeCoin = 0;
addConsume.value.rechargeCoin = 0;
addConsume.value.taskCoin = 0;
indexs.value = {};
isHC.value = 0;
};
//
const user = ref({
@ -160,23 +164,6 @@ const getUser = async function (jwcode) {
}
};
//
const goods = ref([]);
const getGoods = async function () {
try {
// POST
const result = await API.post("http://54.251.137.151:10702/product", {});
//
console.log("请求成功", result);
//
goods.value = result.data;
} catch (error) {
console.log("请求失败", error);
//
}
};
//
const userGold = ref({});
const getUserGold = async function (jwcode) {
@ -207,10 +194,11 @@ const getUserGold = async function (jwcode) {
function calculateCoins() {
if (
userGold.value.coreJb +
(userGold.value.coreJb +
userGold.value.free6 +
userGold.value.free12 +
userGold.value.buyJb <
userGold.value.buyJb) /
100 <
addConsume.value.allGold
) {
addConsume.value.allGold = 0;
@ -219,16 +207,20 @@ function calculateCoins() {
addConsume.value.rechargeCoin = 0;
ElMessage.error("金币不足,请充值");
return;
} else {
}
//
else {
// allGold
const originalAllGold = addConsume.value.allGold;
// todayTasktodayFree
const todayTask =
typeof userGold.value.coreJb === "number" ? userGold.value.coreJb : 0;
typeof userGold.value.coreJb === "number"
? userGold.value.coreJb / 100
: 0;
const todayFree =
typeof (userGold.value.free6 + userGold.value.free12) === "number"
? userGold.value.free6 + userGold.value.free12
? (userGold.value.free6 + userGold.value.free12) / 100
: 0;
//
@ -251,10 +243,63 @@ function calculateCoins() {
console.log("计算结果", addConsume.value);
}
}
//
const goods = ref([]);
const getGoods = async function () {
try {
// POST
const result = await API.post("http://54.251.137.151:10702/product", {});
//
console.log("请求成功", result);
//
goods.value = result.data;
} catch (error) {
console.log("请求失败", error);
//
}
};
//
const index = ref([]);
const getIndexs = async function (type) {
try {
// POST
const result = await API.post("http://54.251.137.151:10702/product/index", {
type: type,
});
//
console.log("请求成功", result);
//
index.value = result.data;
} catch (error) {
console.log("请求失败", error);
//
}
};
//
const isHC = ref(0);
const handleProductSelect = (productName) => {
//
indexs.value.productName = productName;
if (productName == "homilychart") {
isHC.value = 1;
} else {
isHC.value = 0;
}
};
const indexs = ref([]);
const handleIndexSelect = (indexName) => {
indexs.value.productName = "homilychart" + indexName;
console.log("选择的指标是", indexs.value.productName);
};
//
onMounted(async function () {
await getAdminData();
await getGoods();
await getIndexs(1);
});
</script>
@ -282,20 +327,44 @@ onMounted(async function () {
>查询</el-button
>
</el-form-item>
<el-form-item prop="productId" label="商品名称">
<el-form-item
prop="productName"
label="商品名称"
style="float: left; margin-right: -30px"
>
<el-select
v-model="addConsume.productId"
v-model="addConsume.productName"
placeholder="请选择"
style="width: 300px"
@change="handleProductSelect(addConsume.productName)"
>
<el-option
v-for="item in goods"
:key="item.value"
:label="item.name"
:value="item.productId"
:value="item.name"
/>
</el-select>
</el-form-item>
<el-form-item prop="productName" label="指标" v-if="isHC == 1">
<el-select
v-model="indexs.name"
placeholder="请选择"
style="width: 100px"
@change="handleIndexSelect(indexs.name)"
>
<el-option
v-for="item in index"
:key="item.value"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
<el-form-item label="指标" v-else>
<el-select disabled placeholder="请选择" style="width: 100px">
</el-select>
</el-form-item>
<el-form-item prop="allGold" label="消费金币总数">
<el-input
v-model="addConsume.allGold"
@ -372,7 +441,12 @@ onMounted(async function () {
</el-col>
<el-col :span="14">
<el-form-item label="历史金币总数">
<p>{{ user.totalRechargeGold }}</p>
<!-- 检查 user.totalRechargeGold 是否为有效的数字 -->
<p v-if="!isNaN(Number(user.totalRechargeGold))">
{{ Number(user.totalRechargeGold) / 100 }}
</p>
<!-- 如果不是有效的数字显示默认值 -->
<p v-else></p>
</el-form-item>
</el-col>
<el-col :span="10">
@ -385,14 +459,16 @@ onMounted(async function () {
<span
style="color: #2fa1ff; margin-right: 5px"
v-if="user.buyJb !== undefined"
>{{ user.buyJb + user.free6 + user.free12 + user.coreJb }}</span
>{{
(user.buyJb + user.free6 + user.free12 + user.coreJb) / 100
}}</span
>
<span
style="display: inline; white-space: nowrap; color: #b1b1b1"
v-if="user.buyJb !== undefined"
>(永久金币:{{ user.buyJb }};免费金币:{{
user.free6 + user.free12
}};任务金币:{{ user.coreJb }})</span
>(永久金币:{{ user.buyJb / 100 }};免费金币:{{
(user.free6 + user.free12) / 100
}};任务金币:{{ user.coreJb / 100 }})</span
>
</el-form-item>
</el-col>

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

@ -48,26 +48,21 @@ const activeName = ref("all");
//
const consumePlatform = [
{
value: "HomilyLink",
label: "HomilyLink",
},
{
value: "金币系统",
value: "4",
label: "金币系统",
},
{
value: "ERP系统",
value: "1",
label: "ERP系统",
},
{
value: "金币系统",
label: "金币系统",
value: "2",
label: "Homily Chart",
},
];
const consumeType = [
{
value: "购买商品",
label: "购买商品",
value: "3",
label: "Homily Link",
},
];
@ -104,6 +99,8 @@ const get = async function (val) {
detailVo.value.startDate = "";
detailVo.value.endDate = "";
}
detailVo.value.sortField = sortField.value;
detailVo.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
// POST
const result = await API.post(
@ -114,10 +111,14 @@ const get = async function (val) {
}
);
//
// detail.value
const detailWithoutSort = { ...detailVo.value };
delete detailWithoutSort.sortField;
delete detailWithoutSort.sortOrder;
const result2 = await API.post(
"http://54.251.137.151:10702/consume/SumConsume",
{
...detailVo.value,
...detailWithoutSort,
}
);
@ -173,6 +174,8 @@ const reset = function () {
detailVo.value.consumeType = "";
detailVo.value.startDate = "";
detailVo.value.endDate = "";
sortField.value = "";
sortOrder.value = "";
getTime.value = {};
};
//
@ -294,6 +297,26 @@ const getGoods = async function () {
}
};
getGoods();
//
const sortField = ref("");
const sortOrder = ref("");
//
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";
}
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
</script>
<template>
@ -340,7 +363,7 @@ getGoods();
</div>
</el-col>
<el-col :span="8">
<div class="head-card-element">
<!-- <div class="head-card-element">
<el-text class="mx-1" size="large">消费类型</el-text>
<el-select
v-model="detailVo.consumeType"
@ -356,7 +379,7 @@ getGoods();
:value="item.value"
/>
</el-select>
</div>
</div> -->
</el-col>
</el-row>
<el-row>
@ -398,8 +421,13 @@ getGoods();
}}
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 665px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="665px">
<div style="height: 576px; overflow-y: auto">
<el-table
:data="tableData"
style="width: 100%"
height="576px"
@sort-change="handleSortChange"
>
<el-table-column
type="index"
label="序号"
@ -423,16 +451,24 @@ getGoods();
<el-table-column
prop="jwcode"
label="精网号"
width="120px"
width="110px"
fixed="left"
/>
<el-table-column prop="area" label="所属地区" width="120px" />
<el-table-column prop="productName" label="商品" width="200px" />
<el-table-column prop="area" label="所属地区" width="110px" />
<el-table-column prop="productName" label="商品" width="160px" />
<el-table-column
prop="consumePlatform"
label="消费平台"
width="120px"
/>
>
<template #default="scope">
<!-- 使用非严格相等比较 -->
<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="consumeType"
label="消费类型"
@ -441,7 +477,7 @@ getGoods();
<el-table-column
prop="rechargeTotal"
label="消费金币总数"
width="180px"
width="120px"
>
<template #default="scope">
{{
@ -453,17 +489,32 @@ getGoods();
</template>
</el-table-column>
<el-table-column prop="rechargeCoin" label="永久金币" width="120px">
<el-table-column
prop="rechargeCoin"
label="永久金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
{{ (scope.row.rechargeCoin * -1) / 100 }}
</template>
</el-table-column>
<el-table-column prop="freeCoin" label="免费金币" width="120px">
<el-table-column
prop="freeCoin"
label="免费金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
{{ (scope.row.freeCoin * -1) / 100 }}
</template>
</el-table-column>
<el-table-column prop="taskCoin" label="任务金币" width="120px">
<el-table-column
prop="taskCoin"
label="任务金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
{{ (scope.row.taskCoin * -1) / 100 }}
</template>
@ -475,8 +526,13 @@ getGoods();
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="name" label="提交人" width="120px" />
<el-table-column prop="createTime" label="消费时间" width="180px" />
<el-table-column prop="name" label="提交人" width="110px" />
<el-table-column
prop="createTime"
label="消费时间"
sortable="“custom”"
width="180px"
/>
</el-table>
</div>

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

@ -42,12 +42,16 @@ const message = function () {
openMessage();
};
// machineId
function logout() {
const machineId = localStorage.getItem("machineId");
console.log("machineId:", machineId);
localStorage.removeItem("token");
localStorage.clear();
router.push("/login");
// localStorage.clear();
router.push("/login?machineId=" + machineId);
//
window.location.reload();
// window.location.reload();
ElMessage.success("退出成功");
}
@ -56,6 +60,11 @@ onMounted(async function () {
//
getAdminData();
});
//
const handleSelect = (index) => {
console.log("Selected index:", index);
router.push(index);
};
</script>
<template>
@ -65,10 +74,11 @@ onMounted(async function () {
style="
width: 15%;
min-width: 180px;
position: fixed;
position: fixed; /* 固定位置 */
top: 0;
left: 0;
height: 2000vh;
height: 100vh; /* 高度占满视口 */
z-index: 100; /* 确保侧边栏在其他元素之上 */
"
>
<div class="logo">
@ -88,7 +98,7 @@ onMounted(async function () {
@open="handleOpen"
@close="handleClose"
>
<el-menu-item
<!-- <el-menu-item
index="/workspace"
v-if="
adminData.permission == 1 ||
@ -101,7 +111,7 @@ onMounted(async function () {
<Folder />
</el-icon>
工作台
</el-menu-item>
</el-menu-item> -->
<el-sub-menu
index="2"
@ -154,8 +164,8 @@ onMounted(async function () {
<span>金币充值</span>
</template>
<el-menu-item index="/addRecharge">新增充值</el-menu-item>
<el-menu-item index="/adminRecharge">客服充值明细</el-menu-item>
<el-menu-item index="/allRecharge">所有充值明细</el-menu-item>
<!-- <el-menu-item index="/adminRecharge">客服充值明细</el-menu-item>
<el-menu-item index="/allRecharge">所有充值明细</el-menu-item> -->
</el-sub-menu>
<el-sub-menu
@ -235,7 +245,14 @@ onMounted(async function () {
<el-container style="margin-left: 15%; min-width: 180px">
<!-- 修改 el-header 样式 -->
<el-header
style="position: fixed; top: 0; left: 15%; right: 0; z-index: 101"
style="
position: fixed;
top: 0;
left: 15%;
right: 0;
z-index: 101;
position: fixed;
"
>
<el-menu
:default-active="activeIndex"

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

@ -17,6 +17,10 @@ function getMachineId() {
}
// machineId = decodeURIComponent(machineId); //machineId
console.log("MachineId字符串:", machineId); // machineId
// machineId
if (machineId) {
localStorage.setItem("machineId", machineId);
}
}
getMachineId();
@ -45,7 +49,7 @@ const login = async function () {
result.data.data.permission == "2" ||
result.data.data.permission == "3"
) {
router.push("/workspace");
router.push("/usergold");
} else if (result.data.data.permission == "4") {
router.push("/noPermission");
}
@ -72,6 +76,7 @@ const login = async function () {
class="bg"
fit="fit"
/>
<!-- <div style="height: 100vh; width: 1000px" class="container"></div> -->
<el-col :span="6" :offset="3" class="form">
<!-- 登录表单 -->
<el-form
@ -96,13 +101,28 @@ const login = async function () {
<el-form-item class="flex"> </el-form-item>
<!-- 登录按钮 -->
<el-form-item>
<el-button
<button class="button" @click="login()">
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
height="30"
width="24"
>
<path
fill="white"
d="M23.15 2.587L18.21 0.210001C17.9308 0.075557 17.6167 0.031246 17.3113 0.083204C17.0058 0.135162 16.724 0.280818 16.505 0.500001L7.04499 9.13L2.92499 6.002C2.73912 5.86101 2.50976 5.78953 2.27669 5.79994C2.04363 5.81035 1.82156 5.902 1.64899 6.059L0.326993 7.261C0.223973 7.35465 0.141644 7.46878 0.0852761 7.59608C0.0289081 7.72339 -0.00025659 7.86106 -0.000350724 8.00028C-0.000444857 8.1395 0.0285336 8.27721 0.0847294 8.40459C0.140925 8.53197 0.2231 8.64621 0.325993 8.74L3.89899 12L0.325993 15.26C0.2231 15.3538 0.140925 15.468 0.0847294 15.5954C0.0285336 15.7228 -0.000444857 15.8605 -0.000350724 15.9997C-0.00025659 16.1389 0.0289081 16.2766 0.0852761 16.4039C0.141644 16.5312 0.223973 16.6454 0.326993 16.739L1.64999 17.94C1.82256 18.097 2.04463 18.1887 2.27769 18.1991C2.51076 18.2095 2.74012 18.138 2.92599 17.997L7.04599 14.869L16.506 23.499C16.7248 23.7182 17.0064 23.8639 17.3117 23.9159C17.6171 23.9679 17.931 23.9235 18.21 23.789L23.152 21.412C23.4062 21.2893 23.6207 21.0973 23.7707 20.8581C23.9207 20.619 24.0002 20.3423 24 20.06V3.939C24 3.65647 23.9203 3.37967 23.7699 3.14048C23.6195 2.90129 23.4046 2.70943 23.15 2.587ZM18.004 17.448L10.826 12L18.004 6.552V17.448Z"
></path>
</svg>
<p class="text">登录</p>
</button>
<!-- <el-button
class="button"
type="primary"
auto-insert-space
@click="login()"
>登录</el-button
>
> -->
</el-form-item>
</el-form>
</el-col>
@ -144,6 +164,46 @@ const login = async function () {
}
}
/* From Uiverse.io by kamehame-ha */
.button {
height: 50px;
display: flex;
justify-content: center;
align-items: center;
padding: 10px 15px;
gap: 15px;
background-color: #1b95e6;
outline: 3px #1b95e6 solid;
outline-offset: -3px;
border-radius: 5px;
border: none;
cursor: pointer;
transition: 400ms;
}
.button .text {
color: white;
font-weight: 700;
font-size: 1em;
transition: 400ms;
}
.button svg path {
transition: 400ms;
}
.button:hover {
background-color: transparent;
}
.button:hover .text {
color: #007acc;
}
.button:hover svg path {
fill: #007acc;
}
/* .box {
padding: 20px;
border-radius: 10px;
@ -154,4 +214,17 @@ const login = async function () {
left: 50%;
transform: translate(-50%, -50%);
} */
/* From Uiverse.io by marsella_3472 */
/*
More comprehensive version at shenanigans.shoghisimon.ca/collection/css
*/
/* From Uiverse.io by SelfMadeSystem */
.container {
width: 100%;
height: 100%;
background: linear-gradient(#000 1px, #0000 0),
linear-gradient(90deg, #000, #0000, #000),
linear-gradient(in oklch longer hue -2deg, #a00, #a00);
background-size: 100% 2px, 100% 100%, 100% 100%;
}
</style>

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

@ -31,6 +31,8 @@ const area = ref([]);
const store = ref([]);
//
const permissionAddObj = ref({});
//
const addAdmin = ref({});
//
const permissionEditObj = ref({});
//
@ -152,51 +154,142 @@ const getAdminByJwcodeWithoutPermission = async function () {
}
};
//
// const permissionAdd = async function () {
// try {
// if (
// permissionAddObj.value.jwcode == "" ||
// permissionAddObj.value.jwcode == null ||
// permissionAddObj.value.name == "" ||
// permissionAddObj.value.name == null
// ) {
// ElMessage.error("");
// return;
// }
// if (
// permissionAddObj.value.permisson == "" ||
// permissionAddObj.value.permission == null
// ) {
// ElMessage.error("");
// return;
// }
// console.log("", permissionAddObj.value);
// const result = await API.post(
// "http://54.251.137.151:10702/admin/update",
// permissionAddObj.value
// );
// //
// console.log("", result);
// ElMessage.success("");
// get();
// closePermissionAddVisible();
// } catch (error) {
// console.log("", error);
// //
// ElMessage.error("");
// closePermissionAddVisible();
// }
// };
const permissionAdd = async function () {
try {
if (
permissionAddObj.value.jwcode == "" ||
permissionAddObj.value.jwcode == null ||
permissionAddObj.value.name == "" ||
permissionAddObj.value.name == null
) {
ElMessage.error("请选择要添加权限的用户");
return;
}
if (
permissionAddObj.value.permisson == "" ||
permissionAddObj.value.permission == null
) {
ElMessage.error("请选择权限");
return;
Ref.value.validate(async (valid) => {
console.log("valid", valid);
if (valid) {
try {
addAdmin.value.adminFlag = 1;
addAdmin.value.status1 = 1;
const result = await API.post(
"http://54.251.137.151:10702/admin/add",
addAdmin.value
);
if (result.code == 200) {
ElMessage.success("添加成功");
} else {
ElMessage.error(result.msg);
}
addAdmin.value = {};
get();
closePermissionAddVisible();
} catch (error) {
console.log("新增用户权限失败", error);
//
ElMessage.error("新增用户权限失败");
closePermissionAddVisible();
}
} else {
//
ElMessage({
type: "error",
message: "请检查输入内容",
});
}
console.log("新增用户权限提交", permissionAddObj.value);
});
};
//
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" }],
});
//
// ref
const Ref = ref(null);
// 使 _.throttle trailing false
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, {
trailing: false,
});
//
const permissionList = [
{
label: "总部",
value: "1",
},
{
label: "地区经理",
value: "5",
},
{
label: "财务",
value: "3",
},
{
label: "客服",
value: "2",
},
];
//
//
const areaList = ref([]);
const getAreas = async function () {
try {
// POST
const result = await API.post(
"http://54.251.137.151:10702/admin/update",
permissionAddObj.value
"http://54.251.137.151:10702/recharge/user/search",
{}
);
//
console.log("请求成功", result);
ElMessage.success("添加成功");
get();
closePermissionAddVisible();
//
areaList.value = result.data;
console.log("地区", area.value);
} catch (error) {
console.log("新增用户权限失败", error);
console.log("请求失败", error);
//
ElMessage.error("新增用户权限失败");
closePermissionAddVisible();
}
};
// 使 _.throttle trailing false
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, {
trailing: false,
});
getAreas();
//
const openPermissionEditVisible = function () {
permissionEditVisible.value = true;
@ -374,9 +467,10 @@ onMounted(async function () {
<el-button
style="color: #048efb; border: 1px solid #048efb"
@click="permissionAddInit()"
>新增用户权限</el-button
>新增用户</el-button
>
</div>
<div>
<el-table :data="tableData" style="width: 100%">
<el-table-column
@ -401,6 +495,7 @@ onMounted(async function () {
<span v-if="scope.row.permission === '1'"> 总部管理员 </span>
<span v-if="scope.row.permission === '2'"> 分部财务 </span>
<span v-if="scope.row.permission === '3'"> 分部客服 </span>
<span v-if="scope.row.permission === '5'"> 分部经理 </span>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" />
@ -502,8 +597,94 @@ onMounted(async function () {
</el-card>
</el-col>
</el-row>
<!-- 新增用户权限 -->
<el-dialog
v-model="permissionAddVisible"
title="新增用户权限"
width="800px"
:close-on-click-modal="false"
>
<template #footer>
<!-- 居中显示 -->
<el-form
ref="Ref"
:rules="rules"
:model="addAdmin"
label-width="auto"
style="max-width: 600px; align-items: center"
>
<el-form-item prop="jwcode" label="精网号:">
<el-input
v-model="addAdmin.jwcode"
placeholder="请输入精网号"
style="width: 220px"
/>
</el-form-item>
<el-form-item prop="name" label="用户名:">
<el-input
v-model="addAdmin.name"
placeholder="请输入用户名"
style="width: 220px"
/>
</el-form-item>
<el-form-item prop="area" label="所属地区:">
<el-select
v-model="addAdmin.area"
placeholder="请选择所属地区"
style="width: 220px"
@change="() => Ref.value.validateField('area')"
>
<el-option
v-for="item in areaList"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</el-form-item>
<el-form-item prop="permission" label="权限类别:">
<el-select
v-model="addAdmin.permission"
placeholder="请选择权限"
style="width: 220px"
@change="() => Ref.value.validateField('permission')"
>
<el-option
v-for="item in permissionList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item prop="store" label="职称:">
<el-input
v-model="addAdmin.store"
placeholder="请输入职称"
style="width: 220px"
/>
</el-form-item>
<el-form-item prop="machineId" label="机器码:">
<el-input
v-model="addAdmin.machineId"
placeholder="请输入机器码"
style="width: 220px"
/>
</el-form-item>
</el-form>
<!-- 这是新增用户权限弹窗 -->
<div>
<el-button @click="closePermissionAddVisible()">取消</el-button>
<el-button type="primary" @click="throttledPermissionAdd()">
提交
</el-button>
</div>
</template>
</el-dialog>
<!-- 这是新增用户权限弹窗
<el-dialog
v-model="permissionAddVisible"
title="新增用户权限"
@ -598,7 +779,7 @@ onMounted(async function () {
</el-button>
</div>
</template>
</el-dialog>
</el-dialog> -->
<!-- 这是编辑用户权限弹窗 -->
<el-dialog
@ -669,6 +850,7 @@ onMounted(async function () {
>
<el-radio-group v-model="permissionEditObj.permission">
<el-radio value="1" border>总部管理员</el-radio>
<el-radio value="5" border>分部经理</el-radio>
<el-radio value="2" border>分部财务</el-radio>
<el-radio value="3" border>分部客服</el-radio>
</el-radio-group>
@ -709,4 +891,17 @@ onMounted(async function () {
.head-card-btn {
margin-left: auto;
}
/* 新增样式让弹窗内容居中 */
.el-dialog__body {
display: flex;
flex-direction: column;
align-items: center;
}
.el-dialog__footer {
display: flex;
flex-direction: column;
align-items: center;
}
</style>

42
gold-system/src/views/recharge/addRecharge.vue

@ -10,6 +10,20 @@ import { range, re } from "mathjs";
import * as xlsx from "xlsx";
import _ from "lodash";
//
const beforeAvatarUpload = (file) => {
const isJPG = file.type === "image/jpeg";
const isPNG = file.type === "image/png";
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG && !isPNG) {
ElMessage.error("上传头像图片只能是 JPG 或 PNG 格式!");
}
if (!isLt2M) {
ElMessage.error("上传头像图片大小不能超过 2MB!");
}
return (isJPG || isPNG) && isLt2M;
};
//
const imageUrl = ref("");
const rechargeVoucher = ref("");
@ -51,7 +65,7 @@ const add = async function () {
addRecharge.value
);
if (result.code === 0) {
ElMessage.error("添加失败");
ElMessage.error(result.msg);
return;
}
//
@ -123,9 +137,7 @@ const rules = reactive({
});
//
const user = ref({
firstRechargeTime: "",
});
const user = ref({});
const getUser = async function (jwcode) {
try {
// POST
@ -878,7 +890,7 @@ onMounted(async function () {
<template>
<div style="display: flex">
<div style="margin-right: 20px">新增充值</div>
<el-button type="primary" plain @click="batchInit()">批量充值</el-button>
<!-- <el-button type="primary" plain @click="batchInit()">批量充值</el-button> -->
</div>
<el-form
@ -951,9 +963,10 @@ onMounted(async function () {
</el-select>
</el-form-item>
<el-form-item prop="rechargeTime" label="交款时间">
<!-- 修改 type 属性为 datetime 以支持时分秒选择 -->
<el-date-picker
v-model="addRecharge.rechargeTime"
type="date"
type="datetime"
style="width: 300px"
/>
</el-form-item>
@ -1033,7 +1046,12 @@ onMounted(async function () {
</el-col>
<el-col :span="14">
<el-form-item label="历史金币总数">
<p>{{ user.totalRechargeGold }}</p>
<!-- 检查 user.totalRechargeGold 是否为有效的数字 -->
<p v-if="!isNaN(Number(user.totalRechargeGold))">
{{ Number(user.totalRechargeGold) / 100 }}
</p>
<!-- 如果不是有效的数字显示默认值 -->
<p v-else></p>
</el-form-item>
</el-col>
<el-col :span="10">
@ -1046,14 +1064,16 @@ onMounted(async function () {
<span
style="color: #2fa1ff; margin-right: 5px"
v-if="user.buyJb !== undefined"
>{{ user.buyJb + user.free6 + user.free12 + user.coreJb }}</span
>{{
(user.buyJb + user.free6 + user.free12 + user.coreJb) / 100
}}</span
>
<span
style="display: inline; white-space: nowrap; color: #b1b1b1"
v-if="user.buyJb !== undefined"
>(永久金币:{{ user.buyJb }};免费金币:{{
user.free6 + user.free12
}};任务金币:{{ user.coreJb }})</span
>(永久金币:{{ user.buyJb / 100 }};免费金币:{{
(user.free6 + user.free12) / 100
}};任务金币:{{ user.coreJb / 100 }})</span
>
</el-form-item>
</el-col>

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

@ -84,14 +84,26 @@ const delObj = ref({});
// });
//
//
const totalData = ref({
totalmoney: 0,
totalRcoin: 0,
totalFcoin: 0,
});
const totalmoney = ref(0);
const totalRcoin = ref(0);
const totalFcoin = ref(0);
// ===========================================================================
//
const get = async function (val) {
try {
//
if (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;
@ -106,6 +118,9 @@ const get = async function (val) {
rechargeVo.value.startDate = "";
rechargeVo.value.endDate = "";
}
//
rechargeVo.value.sortField = sortField.value;
rechargeVo.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
// POST
const result = await API.post(
@ -115,7 +130,36 @@ const get = async function (val) {
rechargeVo: { ...rechargeVo.value },
}
);
// rechargeVo.value
const detailWithoutSort = ref({
area: rechargeVo.value.area,
adminId: rechargeVo.value.adminId,
startDate: rechargeVo.value.startDate,
endDate: rechargeVo.value.endDate,
});
const result2 = await API.post(
"http://54.251.137.151:10702/recharge/recharge/RechargeA",
{
...detailWithoutSort.value,
}
);
// result2
if (!result2 || !result2.data || result2.data.length === 0) {
totalmoney.value = 0;
totalRcoin.value = 0;
totalFcoin.value = 0;
} else {
// result2.data[i].flag="" totalData.value = result2.data[i]0
for (let i = 0; i < result2.data.length; i++) {
if (result2.data[i].flag == "已通过") {
totalData.value = result2.data[i];
totalmoney.value = totalData.value.sumRaudit1;
totalRcoin.value = totalData.value.sumRaudit1;
totalFcoin.value = totalData.value.sumRaudit2;
break;
}
}
}
//
console.log("请求成功", result);
//
@ -141,6 +185,8 @@ const reset = function () {
rechargeVo.value.area = "";
rechargeVo.value.startDate = "";
rechargeVo.value.endDate = "";
sortField.value = "";
sortOrder.value = "";
getTime.value = {};
};
//
@ -332,6 +378,27 @@ onMounted(async function () {
await getActivity();
await getArea();
});
//
const sortField = ref("");
const sortOrder = ref("");
//
const handleSortChange = (column) => {
console.log("排序字段:", column.prop);
console.log("排序方式:", column.order);
if (column.prop === "paidGold") {
sortField.value = "recharge_gold";
} else if (column.prop === "freeGold") {
sortField.value = "free_gold";
} else if (column.prop === "rechargeTime") {
sortField.value = "recharge_time";
} else if (column.prop === "createTime") {
sortField.value = "create_time";
} else if (column.prop === "paidMoney") {
sortField.value = "paid_gold";
}
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
</script>
<template>
@ -359,7 +426,7 @@ onMounted(async function () {
</div>
</el-col>
<el-col :span="8">
<div class="head-card-element">
<!-- <div class="head-card-element">
<el-text class="mx-1" size="large">支付方式</el-text>
<el-select
v-model="rechargeVo.payWay"
@ -375,7 +442,7 @@ onMounted(async function () {
:value="item.value"
/>
</el-select>
</div>
</div> -->
</el-col>
<el-col :span="8">
<div class="head-card-element" v-if="adminData.area == '总部'">
@ -438,10 +505,20 @@ onMounted(async function () {
<el-tab-pane label="待审核" name="wait"></el-tab-pane>
<el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<div>
充值金额{{ totalmoney }}新币永久金币{{
totalRcoin
}}金币免费金币{{ totalFcoin }}金币
</div>
</el-tabs>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 630px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="630px">
<div style="height: 520px; overflow-y: auto">
<el-table
:data="tableData"
style="width: 100%"
height="520px"
@sort-change="handleSortChange"
>
<el-table-column
type="index"
label="序号"
@ -464,7 +541,7 @@ onMounted(async function () {
fixed="left"
prop="jwcode"
label="精网号"
width="130px"
width="110px"
/>
<el-table-column prop="area" label="所属地区" width="100px" />
<el-table-column
@ -475,12 +552,22 @@ onMounted(async function () {
<el-table-column prop="" label="货币名称" width="120px" />
<el-table-column
prop="paidGold"
sortable="“custom”"
label="充值金额"
width="120px"
sortable
/>
<el-table-column prop="paidGold" label="永久金币" width="100px" />
<el-table-column prop="freeGold" label="免费金币" width="100px" />
<el-table-column
prop="paidGold"
label="永久金币"
sortable="“custom”"
width="110px"
/>
<el-table-column
prop="freeGold"
label="免费金币"
sortable="“custom”"
width="110px"
/>
<el-table-column
prop="remark"
label="备注"
@ -532,14 +619,24 @@ onMounted(async function () {
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="rechargeTime" label="交款时间" width="200px">
<el-table-column
prop="rechargeTime"
sortable="“custom”"
label="交款时间"
width="200px"
>
<template #default="scope">
{{
moment(scope.row.rechargeTime).format("YYYY-MM-DD HH:mm:ss")
}}
</template>
</el-table-column>
<el-table-column prop="createTime" label="提交时间" width="200px" />
<el-table-column
prop="createTime"
sortable="“custom”"
label="提交时间"
width="200px"
/>
<el-table-column
fixed="right"
prop="operation"

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

@ -83,7 +83,9 @@ const totalFcoin = ref(0);
const get = async function (val) {
try {
//
if (adminData.value.area != "总部") {
if (adminData.value.area === "泰国") {
rechargeVo.value.areas = ["泰国", "越南"];
} else if (adminData.value.area !== "总部") {
rechargeVo.value.area = adminData.value.area;
}
//
@ -100,6 +102,10 @@ const get = async function (val) {
rechargeVo.value.startDate = "";
rechargeVo.value.endDate = "";
}
//
rechargeVo.value.sortField = sortField.value;
rechargeVo.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
// POST
const result = await API.post(
@ -109,22 +115,35 @@ const get = async function (val) {
rechargeVo: { ...rechargeVo.value },
}
);
// rechargeVo.value status
const { status, ...rechargeVoWithoutStatus } = rechargeVo.value;
// rechargeVo.value
const detailWithoutSort = ref({
area: rechargeVo.value.area,
adminId: rechargeVo.value.adminId,
startDate: rechargeVo.value.startDate,
endDate: rechargeVo.value.endDate,
});
const result2 = await API.post(
"http://54.251.137.151:10702/recharge/recharge/RechargeA",
{
...rechargeVoWithoutStatus,
...detailWithoutSort.value,
}
);
// result2.data[i].flag="" totalData.value = result2.data[i]0
for (let i = 0; i < result2.data.length; i++) {
if (result2.data[i].flag == "已通过") {
totalData.value = result2.data[i];
totalmoney.value = totalData.value.sumRaudit1;
totalRcoin.value = totalData.value.sumRaudit1;
totalFcoin.value = totalData.value.sumRaudit2;
break;
// result2
if (!result2 || !result2.data || result2.data.length === 0) {
totalmoney.value = 0;
totalRcoin.value = 0;
totalFcoin.value = 0;
} else {
// result2.data[i].flag="" totalData.value = result2.data[i]0
for (let i = 0; i < result2.data.length; i++) {
if (result2.data[i].flag == "已通过") {
totalData.value = result2.data[i];
totalmoney.value = totalData.value.sumRaudit1;
totalRcoin.value = totalData.value.sumRaudit1;
totalFcoin.value = totalData.value.sumRaudit2;
break;
}
}
}
@ -153,6 +172,8 @@ const reset = function () {
rechargeVo.value.area = "";
rechargeVo.value.startDate = "";
rechargeVo.value.endDate = "";
sortField.value = "";
sortOrder.value = "";
getTime.value = {};
};
//
@ -324,6 +345,27 @@ onMounted(async function () {
await getArea();
await getPayWay();
});
//
const sortField = ref("");
const sortOrder = ref("");
//
const handleSortChange = (column) => {
console.log("排序字段:", column.prop);
console.log("排序方式:", column.order);
if (column.prop === "paidGold") {
sortField.value = "recharge_gold";
} else if (column.prop === "freeGold") {
sortField.value = "free_gold";
} else if (column.prop === "rechargeTime") {
sortField.value = "recharge_time";
} else if (column.prop === "createTime") {
sortField.value = "create_time";
} else if (column.prop === "paidMoney") {
sortField.value = "paid_gold";
}
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
</script>
<template>
@ -351,7 +393,7 @@ onMounted(async function () {
</div>
</el-col>
<el-col :span="8">
<div class="head-card-element">
<!-- <div class="head-card-element">
<el-text class="mx-1" size="large">充值方式</el-text>
<el-select
v-model="rechargeVo.rechargeWay"
@ -367,7 +409,7 @@ onMounted(async function () {
:value="item"
/>
</el-select>
</div>
</div> -->
</el-col>
<el-col :span="8">
<div class="head-card-element" v-if="adminData.area == '总部'">
@ -437,8 +479,13 @@ onMounted(async function () {
</div>
</el-tabs>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 609px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="609px">
<div style="height: 520px; overflow-y: auto">
<el-table
:data="tableData"
style="width: 100%"
height="520px"
@sort-change="handleSortChange"
>
<el-table-column
type="index"
label="序号"
@ -461,7 +508,7 @@ onMounted(async function () {
fixed="left"
prop="jwcode"
label="精网号"
width="130px"
width="110px"
/>
<el-table-column prop="area" label="所属地区" width="100px" />
<el-table-column
@ -471,10 +518,10 @@ onMounted(async function () {
/>
<el-table-column prop="" label="货币名称" width="120px" />
<el-table-column
prop="paidGold"
prop="paidMoney"
label="充值金额"
width="120px"
sortable
sortable=" custom"
>
<template #default="scope">
<span>{{ scope.row.paidGold / 100 }}</span>
@ -485,12 +532,22 @@ onMounted(async function () {
label="充值方式"
width="100px"
/>
<el-table-column prop="paidGold" label="永久金币" width="100px">
<el-table-column
prop="paidGold"
label="永久金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
<span>{{ scope.row.paidGold / 100 }}</span>
</template>
</el-table-column>
<el-table-column prop="freeGold" label="免费金币" width="100px">
<el-table-column
prop="freeGold"
label="免费金币"
sortable="“custom”"
width="110px"
>
<template #default="scope">
<span>{{ scope.row.freeGold / 100 }}</span>
</template>
@ -546,14 +603,24 @@ onMounted(async function () {
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="rechargeTime" label="交款时间" width="200px">
<el-table-column
prop="rechargeTime"
sortable="“custom”"
label="交款时间"
width="200px"
>
<template #default="scope">
{{
moment(scope.row.rechargeTime).format("YYYY-MM-DD HH:mm:ss")
}}
</template>
</el-table-column>
<el-table-column prop="createTime" label="提交时间" width="200px" />
<el-table-column
prop="createTime"
sortable="“custom”"
label="提交时间"
width="200px"
/>
</el-table>
</div>

68
gold-system/src/views/refund/addRefund.vue

@ -116,10 +116,41 @@ const rules = reactive({
jwcode: [{ required: true, message: "请输入精网号", trigger: "blur" }],
refundType: [{ required: true, message: "请选择退款类型", trigger: "blur" }],
orderCode: [{ required: true, message: "请选择退款商品", trigger: "blur" }],
taskCoin: [{ required: true, message: "请输入任务金币", trigger: "blur" }],
freeCoin: [{ required: true, message: "请输入免费金币", trigger: "blur" }],
taskCoin: [
{ required: true, message: "请输入任务金币", trigger: "blur" },
{
validator: (rule, value) => {
if (Number(value) === 0) {
return Promise.reject(new Error("任务金币不能为 0"));
}
return Promise.resolve();
},
trigger: "blur",
},
],
freeCoin: [
{ required: true, message: "请输入免费金币", trigger: "blur" },
{
validator: (rule, value) => {
if (Number(value) === 0) {
return Promise.reject(new Error("免费金币不能为 0"));
}
return Promise.resolve();
},
trigger: "blur",
},
],
rechargeCoin: [
{ required: true, message: "请输入永久金币", trigger: "blur" },
{
validator: (rule, value) => {
if (Number(value) === 0) {
return Promise.reject(new Error("永久金币不能为 0"));
}
return Promise.resolve();
},
trigger: "blur",
},
],
allCoin: [
{ required: true, message: "请选择付款方式", trigger: "blur" },
@ -250,13 +281,14 @@ const getProductByOrderCode = async function (item) {
addRefund.value.contactId = result.data.detailyId;
addRefund.value.refundGoods = result.data.productName;
addRefund.value.orderCode = result.data.orderCode;
addRefund.value.taskCoin = result.data.taskCoin * -1;
addRefund.value.freeCoin = result.data.freeCoin * -1;
addRefund.value.rechargeCoin = result.data.rechargeCoin * -1;
addRefund.value.taskCoin = (result.data.taskCoin * -1) / 100;
addRefund.value.freeCoin = (result.data.freeCoin * -1) / 100;
addRefund.value.rechargeCoin = (result.data.rechargeCoin * -1) / 100;
addRefund.value.allCoin =
result.data.taskCoin * -1 +
result.data.freeCoin * -1 +
result.data.rechargeCoin * -1;
(result.data.taskCoin * -1 +
result.data.freeCoin * -1 +
result.data.rechargeCoin * -1) /
100;
console.log("请求成功", addRefund.value);
if (result.data.code === 0) {
ElMessage.error(result.data.msg);
@ -347,7 +379,8 @@ onMounted(async function () {
v-model="addRefund.rechargeCoin"
style="width: 100px"
:disabled="addRe.typeR === '0' ? true : false"
/>
>
</el-input>
<p></p>
</el-form-item>
<el-form-item
@ -414,7 +447,12 @@ onMounted(async function () {
</el-col>
<el-col :span="14">
<el-form-item label="历史金币总数">
<p>{{ user.totalRechargeGold }}</p>
<!-- 检查 user.totalRechargeGold 是否为有效的数字 -->
<p v-if="!isNaN(Number(user.totalRechargeGold))">
{{ Number(user.totalRechargeGold) / 100 }}
</p>
<!-- 如果不是有效的数字显示默认值 -->
<p v-else></p>
</el-form-item>
</el-col>
<el-col :span="10">
@ -427,14 +465,16 @@ onMounted(async function () {
<span
style="color: #2fa1ff; margin-right: 5px"
v-if="user.buyJb !== undefined"
>{{ user.buyJb + user.free6 + user.free12 + user.coreJb }}</span
>{{
(user.buyJb + user.free6 + user.free12 + user.coreJb) / 100
}}</span
>
<span
style="display: inline; white-space: nowrap; color: #b1b1b1"
v-if="user.buyJb !== undefined"
>(永久金币:{{ user.buyJb }};免费金币:{{
user.free6 + user.free12
}};任务金币:{{ user.coreJb }})</span
>(永久金币:{{ user.buyJb / 100 }};免费金币:{{
(user.free6 + user.free12) / 100
}};任务金币:{{ user.coreJb / 100 }})</span
>
</el-form-item>
</el-col>

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

@ -15,6 +15,7 @@ const getAdminData = async function () {
"http://54.251.137.151:10702/admin/userinfo",
{}
);
adminData.value = result;
console.log("请求成功", result);
console.log("用户信息", adminData.value);
@ -62,13 +63,38 @@ const consumeType = [
// });
//
//
const trueGold = ref(0);
const trueRgold = ref(0);
const trueFgold = ref(0);
const trueTgold = ref(0);
//
const pendingRgold = ref(0);
const pendingFgold = ref(0);
const pendingTgold = ref(0);
//
const pendingGold = ref(0);
//
const approvedRgold = ref(0);
const approvedFgold = ref(0);
const approvedTgold = ref(0);
//
const approvedGold = ref(0);
//
const rejectedRgold = ref(0);
const rejectedFgold = ref(0);
const rejectedTgold = ref(0);
//
const rejectedGold = ref(0);
// ==============================================================
//
const get = async function (val) {
try {
//
if (adminData.value.area != "总部") {
rechargeVo.value.area = adminData.value.area;
if (adminData.value.area === "泰国") {
detail.value.areas = ["泰国", "越南"];
} else if (adminData.value.area !== "总部") {
detail.value.area = adminData.value.area;
}
//
if (typeof val === "number") {
@ -84,13 +110,62 @@ const get = async function (val) {
detail.value.startDate = "";
detail.value.endDate = "";
}
//
detail.value.sortField = sortField.value;
detail.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
// POST
const result = await API.post("http://54.251.137.151:10702/refund/search", {
...getObj.value,
detail: { ...detail.value },
});
// detail.value
const detailWithoutSort = { ...detail.value };
delete detailWithoutSort.sortField;
delete detailWithoutSort.sortOrder;
const result2 = await API.post(
"http://54.251.137.151:10702/refund/RefundA",
{
...detailWithoutSort,
}
);
//
if (result2.data) {
result2.data.forEach((item) => {
switch (item.status) {
case "待审核":
// item.raudit 0
pendingRgold.value = item.sumRaudit1 || 0;
pendingFgold.value = item.sumRaudit2 || 0;
pendingTgold.value = item.sumRaudit3 || 0;
// item.sumRaudit 0
pendingGold.value = item.sumRaudit || 0;
break;
case "已通过":
approvedRgold.value = item.sumRaudit1 || 0;
approvedFgold.value = item.sumRaudit2 || 0;
approvedTgold.value = item.sumRaudit3 || 0;
approvedGold.value = item.sumRaudit || 0;
break;
case "已驳回":
rejectedRgold.value = item.sumRaudit1 || 0;
rejectedFgold.value = item.sumRaudit2 || 0;
rejectedTgold.value = item.sumRaudit3 || 0;
rejectedGold.value = item.sumRaudit || 0;
break;
}
});
}
trueFgold.value =
pendingFgold.value + approvedFgold.value + rejectedFgold.value;
trueRgold.value =
pendingRgold.value + approvedRgold.value + rejectedRgold.value;
trueTgold.value =
pendingTgold.value + approvedTgold.value + rejectedTgold.value;
trueGold.value =
pendingGold.value + approvedGold.value + rejectedGold.value;
//
console.log("请求成功", result);
//
@ -99,6 +174,8 @@ const get = async function (val) {
//
total.value = result.data.total;
console.log("total", total.value);
//
handleClick();
} catch (error) {
console.log("请求失败", error);
//
@ -116,6 +193,8 @@ const reset = function () {
detail.value.area = "";
detail.value.startDate = "";
detail.value.endDate = "";
sortField.value = "";
sortOrder.value = "";
getTime.value = {};
};
//
@ -175,30 +254,52 @@ const adminAll = function () {
console.log("adminAll");
detail.value.status = "";
getObj.value.pageNum = 1;
get();
trueFgold.value =
pendingFgold.value + approvedFgold.value + rejectedFgold.value;
trueRgold.value =
pendingRgold.value + approvedRgold.value + rejectedRgold.value;
trueTgold.value =
pendingTgold.value + approvedTgold.value + rejectedTgold.value;
trueGold.value = pendingGold.value + approvedGold.value + rejectedGold.value;
};
//
const adminWait = function () {
const adminWait = async function () {
detail.value.status = 0;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminWait");
trueFgold.value = pendingFgold.value;
trueRgold.value = pendingRgold.value;
trueTgold.value = pendingTgold.value;
trueGold.value = pendingGold.value;
};
//
const adminPass = function () {
const adminPass = async function () {
detail.value.status = 1;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminPass");
trueFgold.value = approvedFgold.value;
trueRgold.value = approvedRgold.value;
trueTgold.value = approvedTgold.value;
trueGold.value = approvedGold.value;
};
//
const adminReject = function () {
const adminReject = async function () {
detail.value.status = 2;
getObj.value.pageNum = 1;
get();
await get();
console.log("adminReject");
trueFgold.value = rejectedFgold.value;
trueRgold.value = rejectedRgold.value;
trueTgold.value = rejectedTgold.value;
trueGold.value = rejectedGold.value;
};
//
// tab.props.nameall
const tabName = ref("all");
const handleClick = function (tab, event) {
if (tab.props.name === "all") {
adminAll();
@ -309,6 +410,25 @@ onMounted(async function () {
await get();
await getArea();
});
//
const sortField = ref("");
const sortOrder = ref("");
//
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";
}
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
</script>
<template>
@ -416,12 +536,21 @@ onMounted(async function () {
<el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane>
</el-tabs>
<div>
退款金币总数{{ Math.abs(trueGold) }}永久金币{{
Math.abs(trueRgold)
}}免费金币{{ Math.abs(trueFgold) }}任务金币{{
Math.abs(trueTgold)
}}
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 520px; overflow-y: auto">
<el-table
:data="tableData"
v-if="(tableData.detaillFlag = 1)"
:height="tableHeight"
style="width: 100%"
@sort-change="handleSortChange"
height="520px"
>
<el-table-column
type="index"
@ -435,16 +564,26 @@ onMounted(async function () {
}}</span>
</template>
</el-table-column>
<el-table-column prop="username" label="姓名" width="150px" />
<el-table-column prop="jwcode" label="精网号" width="120px" />
<el-table-column prop="area" label="所属地区" width="120px" />
<el-table-column
prop="username"
label="姓名"
fixed="left"
width="150px"
/>
<el-table-column
prop="jwcode"
label="精网号"
fixed="left"
width="110px"
/>
<el-table-column prop="area" label="所属地区" width="110px" />
<el-table-column prop="refundType" label="退款类型" width="100px" />
<el-table-column
prop="productName"
prop="refundGoods"
label="退款商品"
width="200px"
width="110px"
/>
<el-table-column label="退款金币数" width="120px">
<el-table-column label="退款金币数" width="110px">
<template #default="scope">
{{
scope.row.rechargeCoin +
@ -456,15 +595,26 @@ onMounted(async function () {
<el-table-column
prop="rechargeCoin"
label="永久金币"
width="100px"
width="110px"
sortable="“custom”"
/>
<el-table-column
prop="freeCoin"
sortable="“custom”"
label="免费金币"
width="110px"
/>
<el-table-column
prop="taskCoin"
sortable="“custom”"
label="任务金币"
width="110px"
/>
<el-table-column prop="freeCoin" label="免费金币" width="100px" />
<el-table-column prop="taskCoin" label="任务金币" width="100px" />
<!-- 修改prop为taskGold -->
<el-table-column
prop="remark"
label="备注"
width="200px"
width="160px"
show-overflow-tooltip
/>
<el-table-column prop="adminName" label="提交人" width="100px" />
@ -497,7 +647,12 @@ onMounted(async function () {
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="createTime" label="提交时间" width="180px">
<el-table-column
prop="createTime"
sortable="“custom”"
label="提交时间"
width="180px"
>
<template #default="scope">
{{ moment(scope.row.createTime).format("YYYY-MM-DD HH:mm:ss") }}
</template>

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

@ -71,7 +71,9 @@ const num = [
const get = async function (val) {
try {
//
if (adminData.value.area != "总部") {
if (adminData.value.area === "泰国") {
detailY.value.areas = ["泰国", "越南"];
} else if (adminData.value.area !== "总部") {
detailY.value.area = adminData.value.area;
}
//
@ -88,6 +90,9 @@ const get = async function (val) {
detailY.value.startDate = "";
detailY.value.endDate = "";
}
//
detailY.value.sortField = sortField.value;
detailY.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
// POST
const result = await API.post("http://54.251.137.151:10702/detailY", {
@ -141,6 +146,9 @@ const reset = function () {
detailY.value.num = "";
detailY.value.startDate = "";
detailY.value.endDate = "";
detailY.value.area = "";
sortField.value = "";
sortOrder.value = "";
getTime.value = {};
};
//
@ -371,14 +379,26 @@ const area = [
//
const platform = [
{
value: "金币系统",
value: "4",
label: "金币系统",
},
{
value: "ERP系统",
value: "1",
label: "ERP系统",
},
{
value: "2",
label: "Homily Chart",
},
{
value: "3",
label: "Homily Link",
},
{
value: "0",
label: "初始化金币",
},
];
const TimeGet = ref("1");
@ -450,6 +470,28 @@ const get30 = function () {
putExcel.value.endDate = endDate;
console.log("putExcel", putExcel.value);
};
//
const sortField = ref("");
const sortOrder = ref("");
//
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";
} else if (column.prop === "gold") {
sortField.value = "gold";
}
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
</script>
<template>
@ -542,7 +584,7 @@ const get30 = function () {
<div class="head-card-element">
<el-text class="mx-1" size="large">平台信息</el-text>
<el-select
v-model="detailY.plateform"
v-model="detailY.consumePlatform"
placeholder="请选择平台信息"
style="width: 200px"
clearable
@ -622,8 +664,13 @@ const get30 = function () {
}}任务金币{{ Math.abs(taskCoin) }}
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 673px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="673px">
<div style="height: 584px; overflow-y: auto">
<el-table
:data="tableData"
style="width: 100%"
@sort-change="handleSortChange"
height="584px"
>
<el-table-column
type="index"
label="序号"
@ -640,32 +687,40 @@ const get30 = function () {
fixed="left"
prop="username"
label="姓名"
width="130"
width="150"
/>
<el-table-column
fixed="left"
prop="jwcode"
label="精网号"
width="170"
width="120"
/>
<el-table-column prop="area" label="所属地区" width="170" />
<el-table-column prop="area" label="所属地区" width="120" />
<el-table-column
prop="consumePlatform"
label="平台信息"
width="170"
/>
<el-table-column prop="gold" label="更新数量" width="160">
width="140"
>
<template #default="scope">
<span>{{
Math.abs(
scope.row.rechargeCoin +
scope.row.freeCoin +
scope.row.taskCoin
) / 100
}}</span>
<!-- 使用非严格相等比较 -->
<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="gold"
label="更新数量"
width="120"
sortable="“custom”"
>
<template #default="scope">
<span>{{ scope.row.gold / 100 }}</span>
</template>
</el-table-column>
<el-table-column prop="updateType" label="更新类型" width="150">
<el-table-column prop="updateType" label="更新类型" width="110">
<!-- 模板内容 -->
<template #default="scope">
<span v-if="scope.row.updateType == 1">
@ -682,25 +737,41 @@ const get30 = function () {
</span>
</template>
</el-table-column>
<el-table-column prop="rechargeCoin" label="永久金币" width="150">
<el-table-column
prop="rechargeCoin"
sortable="“custom”"
label="永久金币"
width="110"
>
<template #default="scope">
<span>{{ scope.row.rechargeCoin / 100 }}</span>
</template>
</el-table-column>
<el-table-column prop="freeCoin" label="免费金币" width="130">
<el-table-column
prop="freeCoin"
sortable="“custom”"
label="免费金币"
width="110"
>
<template #default="scope">
<span>{{ scope.row.freeCoin / 100 }}</span>
</template>
</el-table-column>
<el-table-column prop="taskCoin" label="任务金币" width="130">
<el-table-column
prop="taskCoin"
sortable="“custom”"
label="任务金币"
width="110"
>
<template #default="scope">
<span>{{ scope.row.taskCoin / 100 }}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="提交人" width="150" />
<el-table-column prop="name" label="提交人" width="110" />
<el-table-column
prop="createTime"
sortable="“custom”"
label="更新时间"
width="210"
show-overflow-tooltip

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

@ -45,6 +45,9 @@ const getObj = ref({
pageNum: 1,
pageSize: 50,
});
//
const sortField = ref("");
const sortOrder = ref("");
//
const updateType = [
@ -73,7 +76,10 @@ const updateType = [
const get = async function (val) {
try {
//
if (adminData.value.area != "总部") {
//
if (adminData.value.area === "泰国") {
detailY.value.areas = ["泰国", "越南"];
} else if (adminData.value.area !== "总部") {
detailY.value.area = adminData.value.area;
}
//
@ -90,6 +96,9 @@ const get = async function (val) {
detailY.value.startDate = "";
detailY.value.endDate = "";
}
//
detailY.value.sortField = sortField.value;
detailY.value.sortOrder = sortOrder.value;
console.log("搜索参数", getObj.value);
// POST
const result = await API.post(
@ -134,6 +143,9 @@ const search = function () {
//
const reset = function () {
detailY.value = {};
sortField.value = "";
sortOrder.value = "";
get();
};
//
@ -165,6 +177,23 @@ const checkNumber = function () {
}
};
//
const handleSortChange = (column) => {
console.log("排序字段:", column.prop);
console.log("排序方式:", column.order);
if (column.prop === "buyJb") {
sortField.value = "buy_jb";
} else if (column.prop === "taskJb") {
sortField.value = "core_jb";
} else if (column.prop === "free6") {
sortField.value = "free_6";
} else if (column.prop === "free12") {
sortField.value = "free_12";
}
sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
get();
};
//
const area = [
{
@ -252,8 +281,13 @@ onMounted(async function () {
}}任务金币{{ Math.abs(taskCoin) }}
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 715px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="715px">
<div style="height: 626px; overflow-y: auto">
<el-table
:data="tableData"
style="width: 100%"
height="715px"
@sort-change="handleSortChange"
>
<el-table-column
type="index"
label="序号"
@ -267,9 +301,14 @@ onMounted(async function () {
</template>
</el-table-column>
<el-table-column prop="name" label="姓名" width="200" />
<el-table-column prop="jwcode" label="精网号" width="170" />
<el-table-column prop="area" label="所属地区" width="200" />
<el-table-column prop="allJb" label="总金币" width="130">
<el-table-column prop="jwcode" label="精网号" width="120" />
<el-table-column prop="area" label="所属地区" width="120" />
<el-table-column
prop="allJb"
label="总金币"
width="120"
aligh="center"
>
<template #default="scope">
<span>{{
(scope.row.free12 +
@ -280,7 +319,12 @@ onMounted(async function () {
}}</span>
</template>
</el-table-column>
<el-table-column prop="buyJb" label="永久金币" width="110">
<el-table-column
prop="buyJb"
label="永久金币"
sortable="“custom”"
width="110"
>
<template #default="scope">
<span>{{ Math.abs(scope.row.buyJb) / 100 }}</span>
</template>
@ -293,8 +337,9 @@ onMounted(async function () {
</template>
</el-table-column>
<el-table-column
prop="freeJb"
prop="free6"
label=" 6月份到期免费金币"
sortable="“custom”"
width="110"
>
<template #default="scope">
@ -302,15 +347,21 @@ onMounted(async function () {
</template>
</el-table-column>
<el-table-column
prop="freeJb"
prop="free12"
label="12月份到期免费金币"
sortable="“custom”"
width="110"
>
<template #default="scope">
<span>{{ scope.row.free12 / 100 }}</span>
</template>
</el-table-column>
<el-table-column prop="coreJb" label="任务金币" width="160">
<el-table-column
prop="coreJb"
label="任务金币"
sortable="“custom”"
width="130"
>
<template #default="scope">
<span>{{ Math.abs(scope.row.coreJb) / 100 }}</span>
</template>

124
gold-system/src/views/workspace/index.vue

@ -55,6 +55,11 @@ const HCData = ref([]);
const LinkData = ref([]);
const goldData = ref([]);
//
const oneData = ref([]);
const twoData = ref([]);
const threeData = ref([]);
//
const goldType = ref("全部类型");
const platform = ref("全部平台");
@ -81,6 +86,7 @@ const gold = [
];
const list = ref([]);
const token = localStorage.getItem("token");
//
//
@ -126,6 +132,23 @@ const get = async function () {
"http://54.251.137.151:10702/statistics/b",
{}
);
//
const result10 = await API.post("http://54.251.137.151:10702/One/getOne", {
token: token,
});
const result11 = await API.post("http://54.251.137.151:10702/One/getTwo", {
token: token,
});
const result12 = await API.post(
"http://54.251.137.151:10702/One/getThree",
{
token: token,
}
);
oneData.value = result10;
twoData.value = result11;
threeData.value = result12;
console.log("oneData", oneData.value);
//
getSumCoin.value = result1.data;
@ -425,8 +448,17 @@ const getMiddleBar = async function () {
tooltip: {
trigger: "axis",
axisPointer: {
// Use axis to trigger tooltip
type: "shadow", // 'shadow' as default; can also be 'line' or 'shadow'
type: "shadow",
},
formatter: function (params) {
let total = 0;
let content = `${params[0].name}<br/>`;
params.forEach((param) => {
content += `${param.seriesName}: ${param.value}<br/>`;
total += param.value;
});
content += `总和: ${total}`;
return content;
},
},
legend: {
@ -498,8 +530,17 @@ const getMiddleBar = async function () {
tooltip: {
trigger: "axis",
axisPointer: {
// Use axis to trigger tooltip
type: "shadow", // 'shadow' as default; can also be 'line' or 'shadow'
type: "shadow",
},
formatter: function (params) {
let total = 0;
let content = `${params[0].name}<br/>`;
params.forEach((param) => {
content += `${param.seriesName}: ${param.value}<br/>`;
total += param.value;
});
content += `总和: ${total}`;
return content;
},
},
legend: {
@ -1136,30 +1177,30 @@ onMounted(async function () {
<el-card style="height: 260px">
<p>当前金币余量</p>
<p class="head-mid-font">
{{ formatNum(getSumCoin.todayTotalCoin) }}
{{ formatNum(oneData.sumgold / 100) }}
</p>
<p>
<span v-if="getSumCoin.coinDifference > 0">
<span v-if="oneData.differr > 0">
<div class="comparedWithYesterday">
<span>较前一天 {{ formatNum(getSumCoin.coinDifference) }}</span>
<span>较前一天 {{ formatNum(oneData.differr / 100) }}</span>
<span
class="red-triangle"
style="margin: 6px 0px 0px 7px"
></span>
</div>
</span>
<span v-if="getSumCoin.coinDifference < 0">
<span v-if="oneData.differr < 0">
<div class="comparedWithYesterday">
<span>较前一天 {{ formatNum(getSumCoin.coinDifference) }}</span>
<span>较前一天 {{ formatNum(oneData.differr / 100) }}</span>
<span
class="green-triangle"
style="margin: 6px 0px 0px 7px"
></span>
</div>
</span>
<span v-if="getSumCoin.coinDifference == 0">
<span v-if="oneData.differr == 0">
<div class="comparedWithYesterday">
<span>较前一天 {{ formatNum(getSumCoin.coinDifference) }}</span>
<span>较前一天 {{ formatNum(oneData.differr / 100) }}</span>
<span
class="grey-triangle"
style="margin: 6px 0px 0px 7px"
@ -1168,16 +1209,16 @@ onMounted(async function () {
</span>
</p>
<template #footer>
<span
>永久{{ formatNum(getSumCoin.todayRecharge) }} 免费{{
formatNum(getSumCoin.todayFree)
<span style="font-size: 15px"
>永久{{ formatNum(oneData.rechargegold / 100) }} 免费{{
formatNum(oneData.freegold / 100)
}}
任务{{ formatNum(getSumCoin.todayTask) }}
任务{{ formatNum(oneData.taskgold / 100) }}
</span>
<p style="font-size: 12px">
免费金币6月到期 |
{{ formatNum(statistics.free6SumCoin) }} ; 12月到期 |
{{ formatNum(statistics.free12SumCoin) }}
{{ formatNum(oneData.sfreegold / 100) }} ; 12月到期 |
{{ formatNum(oneData.dfreegold / 100) }}
</p>
</template>
</el-card>
@ -1186,17 +1227,17 @@ onMounted(async function () {
<el-card style="height: 260px">
<p>全年累计金币数</p>
<p class="head-mid-font">
{{ formatNum(Math.abs(statistics.totalSumCoin)) }}
{{ formatNum(Math.abs(twoData.totalgold / 100)) }}
</p>
<p>
折合新币累计金额
{{ formatNum(Math.abs(statistics.rechargeSumCoin)) }}
{{ formatNum(Math.abs(twoData.totalcoin / 100)) }}
</p>
<template #footer
>昨日新增
{{ formatNum(Math.abs(statistics.totalYesterdaySumCoin)) }}
{{ formatNum(Math.abs(twoData.yesterdaytotal / 100)) }}
其中充值{{
formatNum(Math.abs(statistics.rechargeYesterdaySumCoin))
formatNum(Math.abs(twoData.yesterdayrecharge / 100))
}}</template
>
</el-card>
@ -1205,20 +1246,47 @@ onMounted(async function () {
<el-card style="height: 260px">
<p>全年累计消耗金币数</p>
<p class="head-mid-font">
{{ formatNum(Math.abs(getYearConsumeCoin.yearsumCoin)) }}
{{
formatNum(
Math.abs((threeData.consumeGold + threeData.refundCoin) / 100)
)
}}
</p>
<p>
消费
{{ formatNum(Math.abs(getYearConsumeCoin.yearConsumeCoin)) }}; 退款
{{ formatNum(Math.abs(getYearConsumeCoin.yearRefundCoin)) }}
{{ formatNum(Math.abs(threeData.consumeGold / 100)) }}; 退款
{{ formatNum(Math.abs(threeData.refundCoin / 100)) }}
</p>
<template #footer
>昨日新增消耗{{
formatNum(Math.abs(getDayConsumeCoin.daysumCoin))
formatNum(
Math.abs(
threeData.yesterdayCoin !== undefined &&
threeData.yesterdayCoin !== null
? threeData.yesterdayCoin / 100
: 0
)
)
}}
; 消费{{
formatNum(
Math.abs(
threeData.yesterdayGold !== undefined &&
threeData.yesterdayGold !== null
? threeData.yesterdayGold / 100
: 0
)
)
}}
; 消费{{ formatNum(Math.abs(getDayConsumeCoin.dayConsumeCoin)) }} ;
退款{{
formatNum(Math.abs(getDayConsumeCoin.dayRefundCoin))
; 退款{{
formatNum(
Math.abs(
threeData.yesterdayrefund !== undefined &&
threeData.yesterdayrefund !== null
? threeData.yesterdayrefund / 100
: 0
)
)
}}</template
>
</el-card>

2
gold-system/vite.config.ts

@ -37,6 +37,6 @@ export default defineConfig({
},
},
},
// base: process.env.NODE_ENV === "production" ? "/jtzy/Product/other/test/hwjb/" : "/",
// base: process.env.NODE_ENV === "production" ? "/gold_html_dev/" : "/",
base: process.env.NODE_ENV === "production" ? "./" : "/",
})
Loading…
Cancel
Save