Compare commits

...

1 Commits

Author SHA1 Message Date
donghaolin 39d4107295 这是最新代码上传 5 months ago
  1. 0
      gold-system/.gitignore
  2. 0
      gold-system/.vscode/extensions.json
  3. 0
      gold-system/README.md
  4. 0
      gold-system/index.html
  5. 0
      gold-system/package-lock.json
  6. 0
      gold-system/package.json
  7. 0
      gold-system/public/vite.svg
  8. 0
      gold-system/src/App.vue
  9. 13
      gold-system/src/api/index.js
  10. 0
      gold-system/src/assets/background.jpg
  11. 0
      gold-system/src/assets/css/common.css
  12. 0
      gold-system/src/assets/vue.svg
  13. 0
      gold-system/src/assets/动漫美女.png
  14. 0
      gold-system/src/assets/金币管理系统logo.png
  15. 0
      gold-system/src/assets/韩信.png
  16. 7
      gold-system/src/main.ts
  17. 0
      gold-system/src/router/index.js
  18. 0
      gold-system/src/style.css
  19. 15
      gold-system/src/util/http.js
  20. 51
      gold-system/src/views/audit/rechargeAudit.vue
  21. 220
      gold-system/src/views/audit/refundAudit.vue
  22. 119
      gold-system/src/views/consume/addConsume.vue
  23. 65
      gold-system/src/views/consume/allConsume.vue
  24. 90
      gold-system/src/views/index.vue
  25. 18
      gold-system/src/views/login.vue
  26. 67
      gold-system/src/views/managerecharge/activity.vue
  27. 212
      gold-system/src/views/managerecharge/rate.vue
  28. 1144
      gold-system/src/views/recharge/addRecharge.vue
  29. 663
      gold-system/src/views/recharge/adminRecharge.vue
  30. 206
      gold-system/src/views/recharge/allRecharge.vue
  31. 133
      gold-system/src/views/refund/addRefund.vue
  32. 118
      gold-system/src/views/refund/allRefund.vue
  33. 76
      gold-system/src/views/usergold/index.vue
  34. 1555
      gold-system/src/views/workspace/index.vue
  35. 0
      gold-system/src/views/z.vue
  36. 0
      gold-system/src/vite-env.d.ts
  37. 0
      gold-system/tsconfig.app.json
  38. 0
      gold-system/tsconfig.json
  39. 0
      gold-system/tsconfig.node.json
  40. 0
      gold-system/vite.config.ts
  41. 2
      vue/gold-system/demo/.gitattributes
  42. 33
      vue/gold-system/demo/.gitignore
  43. 19
      vue/gold-system/demo/.mvn/wrapper/maven-wrapper.properties
  44. 2
      vue/gold-system/demo/commons/.gitattributes
  45. 33
      vue/gold-system/demo/commons/.gitignore
  46. 19
      vue/gold-system/demo/commons/.mvn/wrapper/maven-wrapper.properties
  47. 259
      vue/gold-system/demo/commons/mvnw
  48. 149
      vue/gold-system/demo/commons/mvnw.cmd
  49. 75
      vue/gold-system/demo/commons/pom.xml
  50. 13
      vue/gold-system/demo/commons/src/test/java/com/example/commons/CommonsApplicationTests.java
  51. 259
      vue/gold-system/demo/mvnw
  52. 149
      vue/gold-system/demo/mvnw.cmd
  53. 98
      vue/gold-system/demo/pom.xml
  54. 2
      vue/gold-system/demo/recharge/.gitattributes
  55. 33
      vue/gold-system/demo/recharge/.gitignore
  56. 19
      vue/gold-system/demo/recharge/.mvn/wrapper/maven-wrapper.properties
  57. 259
      vue/gold-system/demo/recharge/mvnw
  58. 149
      vue/gold-system/demo/recharge/mvnw.cmd
  59. 80
      vue/gold-system/demo/recharge/pom.xml
  60. 13
      vue/gold-system/demo/recharge/src/main/java/com/example/recharge/RechargeApplication.java
  61. 15
      vue/gold-system/demo/recharge/src/main/resources/application.yml
  62. 13
      vue/gold-system/demo/recharge/src/test/java/com/example/recharge/RechargeApplicationTests.java
  63. 9
      vue/gold-system/vue/gold-system/src/api/index.js
  64. 513
      vue/gold-system/vue/gold-system/src/views/recharge/addRecharge.vue
  65. 497
      vue/gold-system/vue/gold-system/src/views/recharge/adminRecharge.vue
  66. 1131
      vue/gold-system/vue/gold-system/src/views/workspace/index.vue

0
vue/gold-system/vue/gold-system/.gitignore → gold-system/.gitignore

0
vue/gold-system/vue/gold-system/.vscode/extensions.json → gold-system/.vscode/extensions.json

0
vue/gold-system/vue/gold-system/README.md → gold-system/README.md

0
vue/gold-system/vue/gold-system/index.html → gold-system/index.html

0
vue/gold-system/vue/gold-system/package-lock.json → gold-system/package-lock.json

0
vue/gold-system/vue/gold-system/package.json → gold-system/package.json

0
vue/gold-system/vue/gold-system/public/vite.svg → gold-system/public/vite.svg

0
vue/gold-system/vue/gold-system/src/App.vue → gold-system/src/App.vue

13
gold-system/src/api/index.js

@ -0,0 +1,13 @@
import { pa } from 'element-plus/es/locales.mjs';
import http from '../util/http.js';
const API={
post: function(url,data){
return http({url:url,method:'post',data:data})
},
postN: function(url,params){
return http({url:url,method:'post',params:params})
},
};
export default API;

0
vue/gold-system/vue/gold-system/src/assets/background.jpg → gold-system/src/assets/background.jpg

After

Width: 928  |  Height: 1133  |  Size: 567 KiB

0
vue/gold-system/vue/gold-system/src/assets/css/common.css → gold-system/src/assets/css/common.css

0
vue/gold-system/vue/gold-system/src/assets/vue.svg → gold-system/src/assets/vue.svg

0
vue/gold-system/vue/gold-system/src/assets/动漫美女.png → gold-system/src/assets/动漫美女.png

After

Width: 263  |  Height: 181  |  Size: 95 KiB

0
vue/gold-system/vue/gold-system/src/assets/金币管理系统logo.png → gold-system/src/assets/金币管理系统logo.png

After

Width: 47  |  Height: 47  |  Size: 2.0 KiB

0
vue/gold-system/vue/gold-system/src/assets/韩信.png → gold-system/src/assets/韩信.png

After

Width: 256  |  Height: 180  |  Size: 96 KiB

7
vue/gold-system/vue/gold-system/src/main.ts → gold-system/src/main.ts

@ -2,6 +2,7 @@ import { createApp } from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import 'element-plus/dist/index.css' import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue' import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import './assets/css/common.css'; // 引入公共CSS文件 import './assets/css/common.css'; // 引入公共CSS文件
@ -10,6 +11,8 @@ const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) { for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component) app.component(key, component)
}
}
app.use(ElementPlus).use(router).mount('#app');
app.use(ElementPlus, {
locale: zhCn,
}).use(router).mount('#app');

0
vue/gold-system/vue/gold-system/src/router/index.js → gold-system/src/router/index.js

0
vue/gold-system/vue/gold-system/src/style.css → gold-system/src/style.css

15
vue/gold-system/vue/gold-system/src/util/http.js → gold-system/src/util/http.js

@ -5,10 +5,13 @@ export default function (options) {
//添加到请求头部的Authorization属性中 //添加到请求头部的Authorization属性中
const token = localStorage.getItem('token'); const token = localStorage.getItem('token');
//Object.assign用于合并对象的数据 //Object.assign用于合并对象的数据
options.headers = Object.assign(
{ token: token },
options.headers || {}
);
options.data.token = token;
// options.headers = Object.assign(
// { token: token },
// options.headers || {}
// );
//axios() 返回一个promise对象,用于异步请求 //axios() 返回一个promise对象,用于异步请求
//options是一个对象,其中包含了许多用于配置请求的参数, //options是一个对象,其中包含了许多用于配置请求的参数,
//例如请求的url、请求方法(GET、POST等)、请求头等 //例如请求的url、请求方法(GET、POST等)、请求头等
@ -18,7 +21,7 @@ export default function (options) {
//status:HTTP状态码,例如200表示请求成功。 //status:HTTP状态码,例如200表示请求成功。
//data:服务器返回的数据。 //data:服务器返回的数据。
// statusText:HTTP状态文本,例如"OK"表示请求成功。 // statusText:HTTP状态文本,例如"OK"表示请求成功。
console.log(data);
// console.log(data);
if (status == 200) { if (status == 200) {
return data; return data;
} else { } else {
@ -30,7 +33,7 @@ export default function (options) {
if (e.response && e.response.status === 401) { if (e.response && e.response.status === 401) {
// 清除localStorage中的token // 清除localStorage中的token
localStorage.removeItem('token'); localStorage.removeItem('token');
// 执行重新登录的逻辑,例如跳转到登录页面
// // 执行重新登录的逻辑,例如跳转到登录页面
window.location.href = '/login'; window.location.href = '/login';
// 可以在这里返回一个特定的值或者对象,以便调用者知道需要重新登录 // 可以在这里返回一个特定的值或者对象,以便调用者知道需要重新登录
return { needsLogin: true }; return { needsLogin: true };

51
vue/gold-system/vue/gold-system/src/views/audit/rechargeAudit.vue → gold-system/src/views/audit/rechargeAudit.vue

@ -22,7 +22,7 @@ const rechargeVo = ref({});
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 5,
pageSize: 10,
}); });
// //
const total = ref(100); const total = ref(100);
@ -70,10 +70,10 @@ const payWay = [
}, },
]; ];
//
const tableHeight = computed(function () {
return (getObj.value.pageSize + 2) * 60 + "px";
});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 2) * 60 + "px";
// });
// ref // ref
const Ref = ref(null); const Ref = ref(null);
@ -106,6 +106,7 @@ const get = async function (val) {
// //
console.log("请求成功", result); console.log("请求成功", result);
console.log("这是分页", getObj.value);
// //
tableData.value = result.data.list; tableData.value = result.data.list;
console.log("tableData", tableData.value); console.log("tableData", tableData.value);
@ -117,6 +118,11 @@ const get = async function (val) {
// //
} }
}; };
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
// //
const reset = function () { const reset = function () {
rechargeVo.value.activityId = ""; rechargeVo.value.activityId = "";
@ -182,20 +188,30 @@ const get7Days = function () {
const adminAll = function () { const adminAll = function () {
console.log("adminAll"); console.log("adminAll");
rechargeVo.value.status = ""; rechargeVo.value.status = "";
getObj.value.pageNum = 1;
get(); get();
}; };
// //
const adminWait = function () { const adminWait = function () {
rechargeVo.value.status = 0; rechargeVo.value.status = 0;
getObj.value.pageNum = 1;
get(); get();
console.log("adminWait"); console.log("adminWait");
}; };
// //
const adminPass = function () { const adminPass = function () {
rechargeVo.value.status = 1; rechargeVo.value.status = 1;
getObj.value.pageNum = 1;
get(); get();
console.log("adminPass"); console.log("adminPass");
}; };
//
const adminReject = function () {
rechargeVo.value.status = 2;
getObj.value.pageNum = 1;
get();
console.log("adminReject");
};
// //
const handleClick = function (tab, event) { const handleClick = function (tab, event) {
if (tab.props.name === "all") { if (tab.props.name === "all") {
@ -204,6 +220,8 @@ const handleClick = function (tab, event) {
adminWait(); adminWait();
} else if (tab.props.name === "pass") { } else if (tab.props.name === "pass") {
adminPass(); adminPass();
} else if (tab.props.name === "reject") {
adminReject();
} }
}; };
// //
@ -257,6 +275,7 @@ const checkNumber = function () {
getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize) getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
) { ) {
console.log("输入的数字合法"); console.log("输入的数字合法");
getObj.value.pageNum = parseInt(getObj.value.pageNum);
get(); get();
} else { } else {
// //
@ -281,6 +300,11 @@ const pass = function (row) {
passObj.value.adminId = admin.value.adminId; passObj.value.adminId = admin.value.adminId;
passObj.value.auditId = row.auditId; passObj.value.auditId = row.auditId;
passObj.value.status = 1; passObj.value.status = 1;
passObj.value.rechargeId=row.rechargeId;
passObj.value.detailId=row.detailId;
passObj.value.jwcode=row.jwcode;
passObj.value.paidGold=row.paidGold;
passObj.value.freeGold=row.freeGold;
console.log("通过对象", passObj.value); console.log("通过对象", passObj.value);
}; };
@ -290,7 +314,7 @@ const passConfirm = async function () {
console.log("通过对象", passObj.value); console.log("通过对象", passObj.value);
// POST // POST
const result = await API.post( const result = await API.post(
"http://192.168.8.93:10010/audit/audit/edit",
"http://192.168.8.93:10010/audit/audit/goldedit",
passObj.value passObj.value
); );
@ -324,6 +348,8 @@ const reject = function (row) {
rejectObj.value.auditId = row.auditId; rejectObj.value.auditId = row.auditId;
rejectObj.value.status = 2; rejectObj.value.status = 2;
rejectObj.value.reson = ""; rejectObj.value.reson = "";
rejectObj.value.rechargeId=row.rechargeId;
rejectObj.value.detailId=row.detailId;
console.log("驳回对象", rejectObj.value); console.log("驳回对象", rejectObj.value);
openRejectVisible(); openRejectVisible();
}; };
@ -335,7 +361,7 @@ const rejectConfirm = async function () {
console.log("驳回对象", rejectObj.value); console.log("驳回对象", rejectObj.value);
// POST // POST
const result = await API.post( const result = await API.post(
"http://192.168.8.93:10010/audit/audit/edit",
"http://192.168.8.93:10010/audit/audit/goldedit",
rejectObj.value rejectObj.value
); );
@ -404,10 +430,10 @@ onMounted(async function () {
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="head-card-element"> <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 <el-select
v-model="rechargeVo.payWay" v-model="rechargeVo.payWay"
placeholder="请选择支付方式"
placeholder="请选择充值方式"
size="large" size="large"
style="width: 240px" style="width: 240px"
clearable clearable
@ -462,7 +488,7 @@ onMounted(async function () {
<el-col :span="3"> <el-col :span="3">
<div class="head-card-btn"> <div class="head-card-btn">
<el-button @click="reset()">重置</el-button> <el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -481,6 +507,7 @@ onMounted(async function () {
<el-tab-pane label="全部" name="all"></el-tab-pane> <el-tab-pane label="全部" name="all"></el-tab-pane>
<el-tab-pane label="待审核" name="wait"></el-tab-pane> <el-tab-pane label="待审核" name="wait"></el-tab-pane>
<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-tabs> </el-tabs>
<div> <div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%"> <el-table :data="tableData" :height="tableHeight" style="width: 100%">
@ -525,7 +552,7 @@ onMounted(async function () {
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="提交人" width="100px" /> <el-table-column prop="name" label="提交人" width="100px" />
<el-table-column prop="status" label="状态" width="100px">
<el-table-column prop="status" label="审核状态" width="100px">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.status === 1"> <span v-if="scope.row.status === 1">
<div class="status"> <div class="status">
@ -628,7 +655,7 @@ onMounted(async function () {
style="width: 80px" style="width: 80px"
> >
<el-option <el-option
v-for="item in [5, 6, 7, 8, 9, 10]"
v-for="item in [5, 10, 20, 50, 100]"
:key="item" :key="item"
:label="item" :label="item"
:value="item" :value="item"

220
vue/gold-system/vue/gold-system/src/views/audit/refundAudit.vue → gold-system/src/views/audit/refundAudit.vue

@ -22,7 +22,7 @@ const consumeDetail = ref({});
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 5,
pageSize: 10,
}); });
// //
const total = ref(100); const total = ref(100);
@ -58,10 +58,10 @@ const refundType = [
}, },
]; ];
//
const tableHeight = computed(function () {
return (getObj.value.pageSize + 1) * 50 + "px";
});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 1) * 50 + "px";
// });
// ref // ref
const Ref = ref(null); const Ref = ref(null);
@ -105,6 +105,11 @@ const get = async function (val) {
// //
} }
}; };
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
// //
const reset = function () { const reset = function () {
consumeDetail.value.area = ""; consumeDetail.value.area = "";
@ -170,20 +175,30 @@ const get7Days = function () {
const adminAll = function () { const adminAll = function () {
console.log("adminAll"); console.log("adminAll");
consumeDetail.value.status = ""; consumeDetail.value.status = "";
getObj.value.pageNum = 1;
get(); get();
}; };
// //
const adminWait = function () { const adminWait = function () {
consumeDetail.value.status = 0; consumeDetail.value.status = 0;
getObj.value.pageNum = 1;
get(); get();
console.log("adminWait"); console.log("adminWait");
}; };
// //
const adminPass = function () { const adminPass = function () {
consumeDetail.value.status = 1; consumeDetail.value.status = 1;
getObj.value.pageNum = 1;
get(); get();
console.log("adminPass"); console.log("adminPass");
}; };
//
const adminReject = function () {
consumeDetail.value.status = 2;
getObj.value.pageNum = 1;
get();
console.log('adminReject');
}
// //
const handleClick = function (tab, event) { const handleClick = function (tab, event) {
if (tab.props.name === "all") { if (tab.props.name === "all") {
@ -192,6 +207,8 @@ const handleClick = function (tab, event) {
adminWait(); adminWait();
} else if (tab.props.name === "pass") { } else if (tab.props.name === "pass") {
adminPass(); adminPass();
} else if (tab.props.name === 'reject') {
adminReject();
} }
}; };
// //
@ -241,6 +258,7 @@ const checkNumber = function () {
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("输入的数字合法"); console.log("输入的数字合法");
get(); get();
} else { } else {
@ -266,6 +284,7 @@ const pass = function (row) {
passObj.value.adminId = admin.value.adminId; passObj.value.adminId = admin.value.adminId;
passObj.value.auditId = row.auditId; passObj.value.auditId = row.auditId;
passObj.value.status = 1; passObj.value.status = 1;
passObj.value.refundId=row.refundId;
console.log("通过对象", passObj.value); console.log("通过对象", passObj.value);
}; };
@ -309,6 +328,7 @@ const reject = function (row) {
rejectObj.value.auditId = row.auditId; rejectObj.value.auditId = row.auditId;
rejectObj.value.status = 2; rejectObj.value.status = 2;
rejectObj.value.reson = ""; rejectObj.value.reson = "";
rejectObj.value.refundId=row.refundId;
console.log("驳回对象", rejectObj.value); console.log("驳回对象", rejectObj.value);
openRejectVisible(); openRejectVisible();
}; };
@ -371,57 +391,26 @@ onMounted(async function () {
<el-col :span="8"> <el-col :span="8">
<div class="head-card-element"> <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="consumeDetail.refundType"
placeholder="请选择退款类型"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in refundType"
:key="item.value"
:label="item.label"
:value="item.value"
/>
<el-select v-model="consumeDetail.refundType" placeholder="请选择退款类型" size="large" style="width: 240px"
clearable>
<el-option v-for="item in refundType" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="head-card-element"> <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="consumeDetail.refundGoods"
placeholder="请选择退款商品"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in product"
:key="item.name"
:label="item.name"
:value="item.name"
/>
<el-select v-model="consumeDetail.refundGoods" placeholder="请选择退款商品" size="large" style="width: 240px"
clearable>
<el-option v-for="item in product" :key="item.name" :label="item.name" :value="item.name" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="head-card-element"> <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="consumeDetail.area"
placeholder="请选择所属地区"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in area"
:key="item"
:label="item"
:value="item"
/>
<el-select v-model="consumeDetail.area" placeholder="请选择所属地区" size="large" style="width: 240px" clearable>
<el-option v-for="item in area" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
@ -430,16 +419,9 @@ onMounted(async function () {
<el-col :span="21"> <el-col :span="21">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">充值时间</el-text> <el-text class="mx-1" size="large">充值时间</el-text>
<el-date-picker
v-model="getTime"
type="datetimerange"
range-separator="至"
start-placeholder="起始时间"
end-placeholder="结束时间"
/>
<el-button style="margin-left: 10px" @click="getToday()"
></el-button
>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" />
<el-button style="margin-left: 10px" @click="getToday()"></el-button>
<el-button @click="getYesterday()"></el-button> <el-button @click="getYesterday()"></el-button>
<el-button @click="get7Days()">近7天</el-button> <el-button @click="get7Days()">近7天</el-button>
</div> </div>
@ -447,7 +429,7 @@ onMounted(async function () {
<el-col :span="3"> <el-col :span="3">
<div class="head-card-btn"> <div class="head-card-btn">
<el-button @click="reset()">重置</el-button> <el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -457,15 +439,11 @@ onMounted(async function () {
<el-row> <el-row>
<el-col> <el-col>
<el-card> <el-card>
<el-tabs
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="全部" name="all"></el-tab-pane> <el-tab-pane label="全部" name="all"></el-tab-pane>
<el-tab-pane label="待审核" name="wait"></el-tab-pane> <el-tab-pane label="待审核" name="wait"></el-tab-pane>
<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-tabs> </el-tabs>
<div> <div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%"> <el-table :data="tableData" :height="tableHeight" style="width: 100%">
@ -473,11 +451,7 @@ onMounted(async function () {
<el-table-column prop="jwcode" label="精网号" width="150px" /> <el-table-column prop="jwcode" label="精网号" width="150px" />
<el-table-column prop="area" label="所属地区" width="100px" /> <el-table-column prop="area" label="所属地区" width="100px" />
<el-table-column prop="refundType" label="退款类型" width="100px" /> <el-table-column prop="refundType" label="退款类型" width="100px" />
<el-table-column
prop="refundGoods"
label="退款商品"
width="200px"
/>
<el-table-column prop="refundGoods" label="退款商品" width="200px" />
<el-table-column prop="refundCoin" label="退款金币数" width="100px"> <el-table-column prop="refundCoin" label="退款金币数" width="100px">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -487,19 +461,10 @@ onMounted(async function () {
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
prop="rechargeCoin"
label="充值金币"
width="100px"
/>
<el-table-column prop="rechargeCoin" label="充值金币" width="100px" />
<el-table-column prop="freeCoin" label="免费金币" width="100px" /> <el-table-column prop="freeCoin" label="免费金币" width="100px" />
<el-table-column prop="taskCoin" label="任务金币" width="100px" /> <el-table-column prop="taskCoin" label="任务金币" width="100px" />
<el-table-column
prop="remark"
label="备注"
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip />
<el-table-column prop="name" label="提交人" width="100px" /> <el-table-column prop="name" label="提交人" width="100px" />
<el-table-column prop="status" label="审核状态" width="100px"> <el-table-column prop="status" label="审核状态" width="100px">
<template #default="scope"> <template #default="scope">
@ -523,40 +488,21 @@ onMounted(async function () {
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
prop="reson"
label="驳回理由"
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="reson" label="驳回理由" width="200px" show-overflow-tooltip />
<el-table-column prop="createTime" label="提交时间" width="200px"> <el-table-column prop="createTime" label="提交时间" 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
fixed="right"
prop="operation"
label="操作"
width="150px"
>
<el-table-column fixed="right" prop="operation" label="操作" width="150px">
<template #default="scope"> <template #default="scope">
<div class="operation"> <div class="operation">
<el-popconfirm
title="确定要通过此条记录吗?"
@confirm="passConfirm"
>
<el-popconfirm title="确定要通过此条记录吗?" @confirm="passConfirm">
<template #reference> <template #reference>
<el-button
:disabled="
scope.row.status === 1 || scope.row.status === 2
<el-button :disabled="scope.row.status === 1 || scope.row.status === 2
? true ? true
: false : false
"
type="primary"
text
@click="pass(scope.row)"
>
" type="primary" text @click="pass(scope.row)">
通过 通过
</el-button> </el-button>
</template> </template>
@ -567,16 +513,10 @@ onMounted(async function () {
</el-button> </el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
<el-button
:disabled="
scope.row.status === 1 || scope.row.status === 2
<el-button :disabled="scope.row.status === 1 || scope.row.status === 2
? true ? true
: false : false
"
type="primary"
text
@click="reject(scope.row)"
>
" type="primary" text @click="reject(scope.row)">
驳回 驳回
</el-button> </el-button>
</div> </div>
@ -587,42 +527,17 @@ onMounted(async function () {
<!-- 分页 --> <!-- 分页 -->
<div class="pagination"> <div class="pagination">
<el-pagination
background
:page-size="getObj.pageSize"
layout="slot"
:total="total"
>
<el-pagination background :page-size="getObj.pageSize" layout="slot" :total="total">
<div>{{ total }},每页</div> <div>{{ total }},每页</div>
<el-select
v-model="getObj.pageSize"
class="page-size"
@change="get()"
style="width: 80px"
>
<el-option
v-for="item in [5, 6, 7, 8, 9, 10]"
:key="item"
:label="item"
:value="item"
></el-option>
<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> </el-select>
<div></div> <div></div>
</el-pagination> </el-pagination>
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<el-pagination background layout="prev, pager, next,slot" :page-size="getObj.pageSize" :total="total"
:current-page="getObj.pageNum" @current-change="get">
<div>跳至</div> <div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<el-input v-model="getObj.pageNum" style="width: 40px" @change="checkNumber" />
<div></div> <div></div>
</el-pagination> </el-pagination>
</div> </div>
@ -631,29 +546,12 @@ onMounted(async function () {
</el-row> </el-row>
<!-- 驳回弹出框 --> <!-- 驳回弹出框 -->
<el-dialog
v-model="rejectVisible"
title="驳回理由"
width="500"
:before-close="closeRejectVisible"
>
<el-dialog v-model="rejectVisible" title="驳回理由" width="500" :before-close="closeRejectVisible">
<template #footer> <template #footer>
<el-form
:model="rejectObj"
ref="Ref"
:rules="rules"
label-width="auto"
style="max-width: 600px"
>
<el-form :model="rejectObj" ref="Ref" :rules="rules" label-width="auto" style="max-width: 600px">
<el-form-item prop="reson" label="驳回理由:"> <el-form-item prop="reson" label="驳回理由:">
<el-input
v-model="rejectObj.reson"
maxlength="150"
show-word-limit
style="width: 350px"
type="textarea"
placeholder="请输入内容"
/>
<el-input v-model="rejectObj.reson" maxlength="150" show-word-limit style="width: 350px" type="textarea"
placeholder="请输入内容" />
</el-form-item> </el-form-item>
</el-form> </el-form>

119
vue/gold-system/vue/gold-system/src/views/consume/addConsume.vue → gold-system/src/views/consume/addConsume.vue

@ -41,7 +41,12 @@ const add = async function () {
"http://192.168.8.93:10010/consume/add", "http://192.168.8.93:10010/consume/add",
addConsume.value addConsume.value
); );
if (result.code === 0) {
ElMessage.error(result.msg);
return;
} else {
ElMessage.success("添加成功");
}
// //
addConsume.value = {}; addConsume.value = {};
addConsume.value.adminId = adminData.value.adminId; addConsume.value.adminId = adminData.value.adminId;
@ -54,6 +59,8 @@ const add = async function () {
user.value = {}; user.value = {};
} catch (error) { } catch (error) {
console.log("请求失败", error); console.log("请求失败", error);
ElMessage.error("添加失败,请检查输入内容是否正确");
// //
} }
}; };
@ -62,6 +69,11 @@ const addBefore = () => {
if (valid) { if (valid) {
ElMessageBox.confirm("确认添加?") ElMessageBox.confirm("确认添加?")
.then(() => { .then(() => {
addConsume.value.freeCoin = Number(-addConsume.value.freeCoin);
addConsume.value.rechargeCoin = Number(
-addConsume.value.rechargeCoin
);
addConsume.value.taskCoin = Number(-addConsume.value.taskCoin);
add(); add();
console.log("添加成功"); console.log("添加成功");
imageUrl.value = ""; imageUrl.value = "";
@ -153,6 +165,7 @@ const getGoods = async function () {
// POST // POST
const result = await API.post("http://192.168.8.93:10010/product", {}); const result = await API.post("http://192.168.8.93:10010/product", {});
// //
console.log("请求成功", result); console.log("请求成功", result);
// //
goods.value = result.data; goods.value = result.data;
@ -169,27 +182,50 @@ getGoods();
const userGold = ref({}); const userGold = ref({});
const getUserGold = async function (jwcode) { const getUserGold = async function (jwcode) {
try { try {
const result = await API.post(
"http://192.168.8.93:10010/statistics/getMess/" + jwcode
);
// POST
const result = await API.post("http://192.168.8.93:10010/recharge/user", {
jwcode: jwcode,
});
//
console.log("请求成功", result); console.log("请求成功", result);
//
userGold.value = result.data;
console.log("userGold", userGold.value);
//
userGold.value = result.data[0];
if (result.data.code === 0) {
ElMessage.error("查询失败,请检查精网号是否正确");
}
} catch (error) { } catch (error) {
console.log("请求失败", error); console.log("请求失败", error);
ElMessage.error("无此精网号");
addConsume.value.jwcode = "";
//
} }
}; };
function calculateCoins() { function calculateCoins() {
if (
userGold.value.coreJb +
userGold.value.free6 +
userGold.value.free12 +
userGold.value.buyJb <
addConsume.value.allGold
) {
addConsume.value.allGold = 0;
addConsume.value.taskCoin = 0;
addConsume.value.freeCoin = 0;
addConsume.value.rechargeCoin = 0;
ElMessage.error("金币不足,请充值");
return;
} else {
// allGold // allGold
const originalAllGold = addConsume.value.allGold; const originalAllGold = addConsume.value.allGold;
// todayTasktodayFree // todayTasktodayFree
const todayTask = const todayTask =
typeof userGold.value.todayTask === "number" ? userGold.value.todayTask : 0;
typeof userGold.value.coreJb === "number" ? userGold.value.coreJb : 0;
const todayFree = const todayFree =
typeof userGold.value.todayFree === "number" ? userGold.value.todayFree : 0;
typeof (userGold.value.free6 + userGold.value.free12) === "number"
? userGold.value.free6 + userGold.value.free12
: 0;
// //
addConsume.value.taskCoin = Math.min(originalAllGold, todayTask); addConsume.value.taskCoin = Math.min(originalAllGold, todayTask);
@ -209,11 +245,12 @@ function calculateCoins() {
if (isNaN(addConsume.value.rechargeCoin)) addConsume.value.rechargeCoin = 0; if (isNaN(addConsume.value.rechargeCoin)) addConsume.value.rechargeCoin = 0;
console.log("计算结果", addConsume.value); console.log("计算结果", addConsume.value);
}
} }
</script> </script>
<template> <template>
<div style="margin-bottom: 20px">新增消费</div>
<div style="margin-bottom: 20px; font-weight: bolder">新增消费</div>
<el-form <el-form
:model="addConsume" :model="addConsume"
@ -258,10 +295,10 @@ function calculateCoins() {
/> />
</el-form-item> </el-form-item>
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<el-form-item prop="taskCoin" label="任务金币" style="float: left">
<el-form-item prop="rechargeCoin" label="充值金币" style="float: left">
<el-input <el-input
disabled disabled
v-model="addConsume.taskCoin"
v-model="addConsume.rechargeCoin"
style="width: 100px; margin-left: -5px" style="width: 100px; margin-left: -5px"
/> />
<p style="margin-right: 0px"></p> <p style="margin-right: 0px"></p>
@ -278,14 +315,10 @@ function calculateCoins() {
/> />
<p style="margin-right: 0px"></p> <p style="margin-right: 0px"></p>
</el-form-item> </el-form-item>
<el-form-item
prop="rechargeCoin"
label="充值金币"
style="margin-left: -20px"
>
<el-form-item prop="taskCoin" label="任务金币" style="margin-left: -20px">
<el-input <el-input
disabled disabled
v-model="addConsume.rechargeCoin"
v-model="addConsume.taskCoin"
style="width: 100px; margin-left: -5px" style="width: 100px; margin-left: -5px"
/> />
<p style="margin-right: 20px"></p> <p style="margin-right: 20px"></p>
@ -314,65 +347,74 @@ function calculateCoins() {
</el-form> </el-form>
<!-- 客户信息栏 --> <!-- 客户信息栏 -->
<el-card style="width: 700px; float: right" class="customer-info">
<el-card style="width: 850px; float: right" class="customer-info">
<el-form <el-form
:model="user" :model="user"
label-width="auto" label-width="auto"
style="max-width: 600px"
style="max-width: 1200px"
label-position="left" label-position="left"
> >
<el-text size="large" style="margin-left: 20px">客户信息</el-text> <el-text size="large" style="margin-left: 20px">客户信息</el-text>
<el-row style="margin-top: 20px"> <el-row style="margin-top: 20px">
<el-col :span="12">
<el-col :span="10">
<el-form-item label="姓名:"> <el-form-item label="姓名:">
<p>{{ user.name }}</p> <p>{{ user.name }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="14">
<el-form-item label="历史金币总数"> <el-form-item label="历史金币总数">
<p>{{ user.totalRechargeGold }}</p> <p>{{ user.totalRechargeGold }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="精网号"> <el-form-item label="精网号">
<p>{{ user.jwcode }}</p> <p>{{ user.jwcode }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="当前金币总数">
<p>{{ user.sumgold }}</p>
<el-col :span="14">
<el-form-item label="当前金币总数" style="width: 500px">
<span style="color: #2fa1ff; margin-right: 5px" v-if="user.buyJb">{{
user.buyJb + user.free6 + user.free12 + user.coreJb
}}</span>
<span
style="display: inline; white-space: nowrap; color: #b1b1b1"
v-if="user.buyJb"
>(充值金币:{{ user.buyJb }};免费金币:{{
user.free6 + user.free12
}};任务金币:{{ user.coreJb }})</span
>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="首次充值日期"> <el-form-item label="首次充值日期">
<p v-if="user.firstRechargeDate"> <p v-if="user.firstRechargeDate">
{{ moment(user.firstRechargeDate).format("YYYY-MM-DD HH:mm:ss") }} {{ moment(user.firstRechargeDate).format("YYYY-MM-DD HH:mm:ss") }}
</p> </p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="14">
<el-form-item label="充值次数"> <el-form-item label="充值次数">
<p>{{ user.rechargeTimes }}</p>
<p style="color: #2fa1ff">{{ user.rechargeTimes }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="负责客服"> <el-form-item label="负责客服">
<p>{{ adminData.name }}</p> <p>{{ adminData.name }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="14">
<el-form-item label="消费次数"> <el-form-item label="消费次数">
<p>{{ user.spendTimes }}</p>
<p style="color: #2fa1ff">{{ user.spendTimes }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="所属门店"> <el-form-item label="所属门店">
<p>{{ adminData.area }}</p> <p>{{ adminData.area }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="14">
<el-form-item label="待审核"> <el-form-item label="待审核">
<p>
<p style="color: #2fa1ff">
{{ user.A }} {{ user.A }}
</p> </p>
</el-form-item> </el-form-item>
@ -425,6 +467,11 @@ p {
float: left; float: left;
} }
.form-style2 { .form-style2 {
max-width: 50%;
max-width: 60%;
}
p {
font-size: 13px;
transform: scale(1);
} }
</style> </style>

65
vue/gold-system/vue/gold-system/src/views/consume/allConsume.vue → gold-system/src/views/consume/allConsume.vue

@ -2,6 +2,7 @@
import { ref, onMounted, reactive, computed } from "vue"; import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus"; import ElementPlus from "element-plus";
import { AiFillRead } from "vue-icons-plus/ai"; import { AiFillRead } from "vue-icons-plus/ai";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios"; import axios from "axios";
import API from "../../api/index.js"; import API from "../../api/index.js";
// //
@ -55,10 +56,10 @@ const consumeType = [
}, },
]; ];
//
const tableHeight = computed(function () {
return (getObj.value.pageSize + 1) * 41 + "px";
});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 1) * 41 + "px";
// });
// //
// ============================================================== // ==============================================================
// //
@ -98,6 +99,11 @@ const get = async function (val) {
// //
} }
}; };
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
// //
const reset = function () { const reset = function () {
detailVo.value.productName = ""; detailVo.value.productName = "";
@ -188,6 +194,7 @@ const checkNumber = function () {
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("输入的数字合法"); console.log("输入的数字合法");
get(); get();
} else { } else {
@ -235,7 +242,7 @@ getGoods();
<el-text class="mx-1" size="large">商品名称</el-text> <el-text class="mx-1" size="large">商品名称</el-text>
<el-select <el-select
v-model="detailVo.productName" v-model="detailVo.productName"
placeholder="请选择活动名称"
placeholder="请选择商品名称"
size="large" size="large"
style="width: 240px" style="width: 240px"
clearable clearable
@ -254,7 +261,7 @@ getGoods();
<el-text class="mx-1" size="large">消费平台</el-text> <el-text class="mx-1" size="large">消费平台</el-text>
<el-select <el-select
v-model="detailVo.consumePlatform" v-model="detailVo.consumePlatform"
placeholder="请选择支付方式"
placeholder="请选择消费平台"
size="large" size="large"
style="width: 240px" style="width: 240px"
clearable clearable
@ -309,7 +316,7 @@ getGoods();
<el-col :span="3"> <el-col :span="3">
<div class="head-card-btn"> <div class="head-card-btn">
<el-button @click="reset()">重置</el-button> <el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -320,15 +327,16 @@ getGoods();
<el-col> <el-col>
<el-card> <el-card>
<div> <div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%">
<el-table
:data="tableData"
:height="tableHeight"
style="width: 100%"
:default-sort="{ prop: 'createTime ', order: 'descending' }"
>
<el-table-column prop="userName" label="姓名" width="80px" /> <el-table-column prop="userName" label="姓名" width="80px" />
<el-table-column prop="jwcode" label="精网号" width="180px" /> <el-table-column prop="jwcode" label="精网号" width="180px" />
<el-table-column prop="area" label="所属地区" width="120px" /> <el-table-column prop="area" label="所属地区" width="120px" />
<el-table-column
prop="productName"
label="商品名称"
width="200px"
/>
<el-table-column prop="productName" label="商品" width="200px" />
<el-table-column <el-table-column
prop="consumePlatform" prop="consumePlatform"
label="消费平台" label="消费平台"
@ -346,19 +354,27 @@ getGoods();
> >
<template #default="scope"> <template #default="scope">
{{ {{
scope.row.taskCoin +
scope.row.freeCoin +
scope.row.rechargeCoin
scope.row.taskCoin * -1 +
scope.row.freeCoin * -1 +
scope.row.rechargeCoin * -1
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="taskCoin" label="任务金币" width="120px" />
<el-table-column prop="freeCoin" label="免费金币" width="120px" />
<el-table-column
prop="rechargeCoin"
label="充值金币"
width="120px"
/>
<el-table-column prop="taskCoin" label="任务金币" width="120px">
<template #default="scope">
{{ scope.row.taskCoin * -1 }}
</template>
</el-table-column>
<el-table-column prop="freeCoin" label="免费金币" width="120px">
<template #default="scope">
{{ scope.row.freeCoin * -1 }}
</template>
</el-table-column>
<el-table-column prop="rechargeCoin" label="充值金币" width="120px"
><template #default="scope">
{{ scope.row.rechargeCoin * -1 }}
</template>
</el-table-column>
<el-table-column <el-table-column
prop="remark" prop="remark"
label="备注" label="备注"
@ -386,7 +402,7 @@ getGoods();
style="width: 80px" style="width: 80px"
> >
<el-option <el-option
v-for="item in [5, 6, 7, 8, 9, 10]"
v-for="item in [5, 10, 20, 50, 100]"
:key="item" :key="item"
:label="item" :label="item"
:value="item" :value="item"
@ -435,6 +451,5 @@ getGoods();
.pagination { .pagination {
display: flex; display: flex;
margin-top: 20px; margin-top: 20px;
margin-left: 33%;
} }
</style> </style>

90
vue/gold-system/vue/gold-system/src/views/index.vue → gold-system/src/views/index.vue

@ -8,6 +8,10 @@ import axios from "axios";
import { ElMessageBox } from "element-plus"; import { ElMessageBox } from "element-plus";
import API from "../api/index.js"; import API from "../api/index.js";
const router = useRouter();
const imgrule1 = "../src/assets/动漫美女.png";
const messageVisible = ref(false);
// //
const adminData = ref({ const adminData = ref({
name: "", name: "",
@ -25,16 +29,17 @@ const getAdminData = async function () {
console.log("请求失败", error); console.log("请求失败", error);
} }
}; };
getAdminData();
const router = useRouter();
//
const admin = ref({
adminId: 1,
name: "客服A",
area: "新加坡",
});
//
const openMessage = function () {
messageVisible.value = true;
}
const closeMessage = function () {
messageVisible.value = false;
};
const message = function () {
openMessage();
}
function logout() { function logout() {
localStorage.removeItem("token"); localStorage.removeItem("token");
@ -42,10 +47,7 @@ function logout() {
ElMessage.success("退出成功"); ElMessage.success("退出成功");
} }
const imgrule1 = '../src/assets/动漫美女.png';
const list=[
'../src/assets/韩信.png'
];
// //
onMounted(async function () { onMounted(async function () {
// //
@ -58,23 +60,11 @@ onMounted(async function () {
<el-container> <el-container>
<el-aside style="width: 250px"> <el-aside style="width: 250px">
<div class="logo"> <div class="logo">
<img
src="../assets/金币管理系统logo.png"
alt="logo"
style="width: 30px; height: 30px"
/>
<img src="../assets/金币管理系统logo.png" alt="logo" style="width: 30px; height: 30px" />
<div style="font-size: 16px; font-weight: bold">海外金币管理系统</div> <div style="font-size: 16px; font-weight: bold">海外金币管理系统</div>
</div> </div>
<el-menu
router="true"
background-color="#08193d"
active-text-color="#ffd04b"
text-color="white"
class="el-menu-vertical-demo"
default-active="2"
@open="handleOpen"
@close="handleClose"
>
<el-menu router="true" background-color="#08193d" active-text-color="#ffd04b" text-color="white"
class="el-menu-vertical-demo" default-active="2" @open="handleOpen" @close="handleClose">
<el-menu-item index="/workspace"> <el-menu-item index="/workspace">
<el-icon> <el-icon>
<Folder /> <Folder />
@ -148,19 +138,14 @@ onMounted(async function () {
</el-aside> </el-aside>
<el-container> <el-container>
<el-header> <el-header>
<el-menu
:default-active="activeIndex"
class="el-menu-demo"
mode="horizontal"
:ellipsis="false"
@select="handleSelect"
>
<el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" :ellipsis="false"
@select="handleSelect">
<el-sub-menu index="1" class="admin"> <el-sub-menu index="1" class="admin">
<template #title> <template #title>
<el-image :preview-src-list="list" preview-teleported="true" :src="imgrule1" alt="错误" style="width: 50px; height: 50px" />
<el-image :src="imgrule1" alt="错误" style="width: 50px; height: 50px" />
<span style="margin-left: 10px">{{ adminData.name }}</span> <span style="margin-left: 10px">{{ adminData.name }}</span>
</template> </template>
<el-menu-item index="1-1">查看个人信息</el-menu-item>
<el-menu-item @click="message()">查看个人信息</el-menu-item>
<el-menu-item index="1-2" @click="logout">退出登录</el-menu-item> <el-menu-item index="1-2" @click="logout">退出登录</el-menu-item>
</el-sub-menu> </el-sub-menu>
<el-menu-item index="2"> <el-menu-item index="2">
@ -174,9 +159,40 @@ onMounted(async function () {
</el-container> </el-container>
</el-container> </el-container>
</div> </div>
<!-- 查看个人信息 -->
<el-dialog v-model="messageVisible" title="查看个人信息" width="500px">
<el-form :model="adminData">
<el-form-item label="用户姓名" label-width="100px" label-position="left">
<span class="message-font">{{ adminData.name }}</span>
</el-form-item>
<el-form-item label="精网号" label-width="100px" label-position="left">
<span class="message-font">{{ adminData.jwcode }}</span>
</el-form-item>
<el-form-item label="地区" label-width="100px" label-position="left">
<span class="message-font">{{ adminData.area }}</span>
</el-form-item>
<el-form-item label="所属门店" label-width="100px" label-position="left">
<span class="message-font">{{ adminData.store }}</span>
</el-form-item>
<el-form-item label="注册时间" label-width="100px" label-position="left">
<span class="message-font">{{ adminData.createTime }}</span>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button text @click="closeMessage()">关闭</el-button>
</div>
</template>
</el-dialog>
</template> </template>
<style scoped> <style scoped>
.message-font {
font-size: 16px;
font-weight: bold;
}
.admin { .admin {
margin-left: auto; margin-left: auto;
} }

18
vue/gold-system/vue/gold-system/src/views/login.vue → gold-system/src/views/login.vue

@ -6,7 +6,12 @@ import { useRouter } from "vue-router";
import { VscGlobe } from "vue-icons-plus/vsc"; import { VscGlobe } from "vue-icons-plus/vsc";
const router = useRouter(); // const router = useRouter(); //
const form = ref({ name: "", password: "" });
let formData = new FormData();
// FormData
// formData.append("jwcode", form.value.jwcode);
// formData.append("password", form.value.password);
const form = ref({ jwcode: "", password: "", token: "" });
// //
const login = async function () { const login = async function () {
try { try {
@ -21,12 +26,12 @@ const login = async function () {
console.log("请求成功", result); console.log("请求成功", result);
} else { } else {
form.value.password = ""; form.value.password = "";
form.value.username = "";
form.value.jwcode = "";
ElMessage.error(result.data.msg); ElMessage.error(result.data.msg);
} }
} catch (error) { } catch (error) {
console.log("请求失败", error); console.log("请求失败", error);
ElMessage.error(result.data.msg);
ElMessage.error("登录失败,请检查账号密码");
// //
} }
}; };
@ -51,11 +56,8 @@ const login = async function () {
<el-form-item> <el-form-item>
<h1 style="color: #409eff">金币系统登录</h1> <h1 style="color: #409eff">金币系统登录</h1>
</el-form-item> </el-form-item>
<el-form-item prop="username">
<el-input
v-model="form.username"
placeholder="请输入用户名"
></el-input>
<el-form-item prop="jwcode">
<el-input v-model="form.jwcode" placeholder="请输入精网号"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input <el-input

67
vue/gold-system/vue/gold-system/src/views/managerecharge/activity.vue → gold-system/src/views/managerecharge/activity.vue

@ -15,22 +15,15 @@ const getAdminData = async function () {
{} {}
); );
adminData.value = result; adminData.value = result;
addActicity.value.adminId = adminData.value.adminId;
addObj.value.adminId = adminData.value.adminId;
console.log("请求成功", result); console.log("请求成功", result);
console.log("用户信息", user.value);
console.log("用户信息", adminData.value);
} catch (error) { } catch (error) {
console.log("请求失败", error); console.log("请求失败", error);
} }
}; };
getAdminData();
// //
//
const admin = ref({
adminId: 1,
name: "赵刚",
area: "中国",
});
// //
const tableData = ref([]); const tableData = ref([]);
// //
@ -42,7 +35,7 @@ const activity = ref({});
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 5,
pageSize: 10,
}); });
// //
const addObj = ref({ const addObj = ref({
@ -51,10 +44,10 @@ const addObj = ref({
// //
// //
const delObj = ref({}); const delObj = ref({});
//
const tableHeight = computed(function () {
return (getObj.value.pageSize + 1) * 50 + "px";
});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 1) * 50 + "px";
// });
// ref // ref
const Ref = ref(null); const Ref = ref(null);
@ -98,12 +91,16 @@ const get = async function (val) {
// //
} }
}; };
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
// //
const reset = function () { const reset = function () {
getObj.value = {}; getObj.value = {};
getObj.value.pageNum = 1; getObj.value.pageNum = 1;
getObj.value.pageSize = 5;
getObj.value.pageSize = 10;
getTime.value = {}; getTime.value = {};
activity.value = {}; activity.value = {};
}; };
@ -114,15 +111,16 @@ const openAddActivityVisible = function () {
addActivityVisible.value = true; addActivityVisible.value = true;
}; };
// //
const closeAddActivityVisible = function () {
const closeAddActivityVisible = function (done) {
addActivityVisible.value = false; addActivityVisible.value = false;
}; };
// //
const addActicity = function () { const addActicity = function () {
console.log("Date", new Date());
// //
addObj.value = {}; addObj.value = {};
addObj.value.adminId = admin.value.adminId;
addObj.value.adminName = admin.value.name;
addObj.value.adminId = adminData.value.adminId;
addObj.value.adminName = adminData.value.name;
addObj.value.freeGold = "0"; addObj.value.freeGold = "0";
addObj.value.rechargeRatio = 0; addObj.value.rechargeRatio = 0;
addObj.value.startTime = null; addObj.value.startTime = null;
@ -212,7 +210,7 @@ const checkFreeGoldRadio = function (rule, value, 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();
@ -220,7 +218,7 @@ const checkStartTime = function (rule, value, 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("结束时间不能小于开始时间"));
@ -256,6 +254,7 @@ const checkNumber = function () {
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("输入的数字合法"); console.log("输入的数字合法");
get(); get();
} else { } else {
@ -276,6 +275,7 @@ const checkNumber = function () {
// //
onMounted(async function () { onMounted(async function () {
await getAdminData();
get(); get();
}); });
</script> </script>
@ -298,7 +298,7 @@ onMounted(async function () {
<el-text class="mx-1" size="large">添加时间</el-text> <el-text class="mx-1" size="large">添加时间</el-text>
<el-date-picker <el-date-picker
v-model="getTime" v-model="getTime"
type="daterange"
type="datetimerange"
range-separator="至" range-separator="至"
start-placeholder="起始时间" start-placeholder="起始时间"
end-placeholder="结束时间" end-placeholder="结束时间"
@ -306,7 +306,7 @@ onMounted(async function () {
</div> </div>
<div class="head-card-btn"> <div class="head-card-btn">
<el-button @click="reset()">重置</el-button> <el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div> </div>
</div> </div>
</el-card> </el-card>
@ -326,8 +326,16 @@ onMounted(async function () {
<div> <div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%"> <el-table :data="tableData" :height="tableHeight" style="width: 100%">
<el-table-column prop="activityName" label="活动名称" /> <el-table-column prop="activityName" label="活动名称" />
<el-table-column prop="startTime" label="开始时间" />
<el-table-column prop="endTime" label="结束时间" />
<el-table-column prop="startTime" label="开始时间">
<template #default="scope">
{{ moment(scope.row.startTime).format("YYYY-MM-DD HH:mm:ss") }}
</template>
</el-table-column>
<el-table-column prop="endTime" label="结束时间">
<template #default="scope">
{{ moment(scope.row.endTime).format("YYYY-MM-DD HH:mm:ss") }}
</template>
</el-table-column>
<el-table-column prop="rechargeRatio" label="免费兑换比"> <el-table-column prop="rechargeRatio" label="免费兑换比">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.rechargeRatio }}:1</span> <span>{{ scope.row.rechargeRatio }}:1</span>
@ -385,7 +393,7 @@ onMounted(async function () {
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div class="pagination">
<div class="pagination" style="margin-top: 20px">
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
@ -400,7 +408,7 @@ onMounted(async function () {
style="width: 80px" style="width: 80px"
> >
<el-option <el-option
v-for="item in [5, 6, 7, 8, 9, 10]"
v-for="item in [5, 10, 20, 50, 100]"
:key="item" :key="item"
:label="item" :label="item"
:value="item" :value="item"
@ -434,6 +442,7 @@ onMounted(async function () {
title="新增活动" title="新增活动"
width="500" width="500"
:before-close="closeAddActivityVisible" :before-close="closeAddActivityVisible"
:close-on-click-modal="false"
> >
<template #footer> <template #footer>
<el-form <el-form
@ -473,7 +482,7 @@ onMounted(async function () {
<el-form-item prop="startTime" label="开始时间:"> <el-form-item prop="startTime" label="开始时间:">
<el-date-picker <el-date-picker
v-model="addObj.startTime" v-model="addObj.startTime"
type="date"
type="datetime"
placeholder="请选择开始时间" placeholder="请选择开始时间"
@change="handleStartTimeChange" @change="handleStartTimeChange"
/> />
@ -482,7 +491,7 @@ onMounted(async function () {
<el-form-item prop="endTime" label="结束时间:"> <el-form-item prop="endTime" label="结束时间:">
<el-date-picker <el-date-picker
v-model="addObj.endTime" v-model="addObj.endTime"
type="date"
type="datetime"
placeholder="请选择结束时间" placeholder="请选择结束时间"
/> />
</el-form-item> </el-form-item>

212
vue/gold-system/vue/gold-system/src/views/managerecharge/rate.vue → gold-system/src/views/managerecharge/rate.vue

@ -1,6 +1,6 @@
<script setup> <script setup>
import { ref, onMounted, computed, reactive } from "vue"; import { ref, onMounted, computed, reactive } from "vue";
import { ElMessageBox } from "element-plus";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios"; import axios from "axios";
import { createApp } from "vue"; import { createApp } from "vue";
import moment from "moment"; import moment from "moment";
@ -35,11 +35,36 @@ const tableData = ref([]);
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 5,
pageSize: 10,
}); });
const total = ref(0); const total = ref(0);
// //
//
const value1 = ref({
startTime: "",
endTime: "",
}); //
function handleDateChange(value) {
if (value && value.length === 2) {
value1.value.startTime = value[0]; //
value1.value.endTime = value[1]; //
}
console.log(value1);
}
const time = ref({});
const get = async function (val) { const get = async function (val) {
//
if (value1.value != null) {
if (value1.value.startDate != "" && value1.value.endDate != "") {
time.value.startTime = value1.value[0];
time.value.endTime = value1.value[1];
}
} else {
time.value.startTime = "";
time.value.endTime = "";
}
try { try {
// //
if (typeof val === "number") { if (typeof val === "number") {
@ -50,7 +75,7 @@ const get = async function (val) {
// POST // POST
const result = await API.post("http://192.168.8.93:10010/rates/search", { const result = await API.post("http://192.168.8.93:10010/rates/search", {
...getObj.value, ...getObj.value,
rate: { ...value1.value },
rate: { ...time.value },
}); });
// //
@ -67,12 +92,15 @@ const get = async function (val) {
// //
} }
}; };
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
// //
const rateAdd = ref({
adminId: "1",
});
const rateAdd = ref({});
const addRate = async function () { const addRate = async function () {
rateAdd.value.adminId = adminData.value.adminId;
try { try {
console.log("搜索参数", getObj.value); console.log("搜索参数", getObj.value);
// POST // POST
@ -80,7 +108,9 @@ const addRate = async function () {
"http://192.168.8.93:10010/rates/add", "http://192.168.8.93:10010/rates/add",
rateAdd.value rateAdd.value
); );
if (result.code == 0) {
ElMessage.error(result.msg);
}
// //
console.log("请求成功", result); console.log("请求成功", result);
get(); get();
@ -123,14 +153,18 @@ const getEditData = async function (row) {
try { try {
console.log("搜索参数", getObj.value); console.log("搜索参数", getObj.value);
// POST // POST
const result = await API.post("http://192.168.8.93:10010/rates/search", {
rate: { rateId: row.rateId },
});
const result = await API.post(
"http://192.168.8.93:10010/rates/searchById?rateId=" + row.rateId,
{}
);
// //
console.log("请求成功", result); console.log("请求成功", result);
// //
rateEdit.value = result.data[0];
rateEdit.value = result.data;
rateEdit.value.adminId = adminData.value.adminId;
console.log("这是编辑的数值", rateEdit.value);
} catch (error) { } catch (error) {
console.log("请求失败", error); console.log("请求失败", error);
// //
@ -168,7 +202,8 @@ const deleteRate = async function (row) {
try { try {
// POST // POST
const result = await API.post( const result = await API.post(
"http://192.168.8.93:10010/rates/delete/ " + row.rateId
"http://192.168.8.93:10010/rates/delete/ " + row.rateId,
{}
); );
// //
console.log("请求成功", result); console.log("请求成功", result);
@ -211,19 +246,6 @@ const options = [
}, },
]; ];
//
const value1 = ref({
startTime: "",
endTime: "",
}); //
function handleDateChange(value) {
if (value && value.length === 2) {
value1.value.startTime = value[0]; //
value1.value.endTime = value[1]; //
}
console.log(value1);
}
function formatDate(value) { function formatDate(value) {
if (!value) return ""; if (!value) return "";
const date = new Date(value); const date = new Date(value);
@ -235,11 +257,19 @@ function formatDate(value) {
const seconds = date.getSeconds().toString().padStart(2, "0"); const seconds = date.getSeconds().toString().padStart(2, "0");
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
} }
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}`;
}
//
const tableHeight = computed(function () {
return (getObj.value.pageSize + 1) * 50 + "px";
});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 1) * 50 + "px";
// });
// //
// ref // ref
@ -301,6 +331,7 @@ const checkNumber = function () {
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("输入的数字合法"); console.log("输入的数字合法");
get(); get();
} else { } else {
@ -318,6 +349,26 @@ const checkNumber = function () {
}); });
} }
}; };
// =========================================================
//
//
const delConfirm = async function (row) {
try {
// POST
const result = await API.post(
"http://192.168.8.93:10010/rates/delete/ " + row.rateId,
{}
);
//
console.log("请求成功", result);
get();
} catch (error) {
console.log("请求失败", error);
//
}
};
</script> </script>
<template> <template>
@ -334,7 +385,6 @@ const checkNumber = function () {
range-separator="至" range-separator="至"
start-placeholder="开始时间" start-placeholder="开始时间"
end-placeholder="结束时间" end-placeholder="结束时间"
@change="handleDateChange"
:size="size" :size="size"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/> />
@ -343,7 +393,7 @@ const checkNumber = function () {
class="button-item" class="button-item"
type="primary" type="primary"
style="float: right" style="float: right"
@click="get"
@click="search()"
>查询</el-button >查询</el-button
> >
<el-button <el-button
@ -376,25 +426,54 @@ const checkNumber = function () {
:height="tableHeight" :height="tableHeight"
style="width: 100%" style="width: 100%"
> >
<el-table-column prop="currency" label="货币名称" :span="3" />
<el-table-column prop="exchangeRate" label="汇率" :span="3">
<el-table-column prop="currency" label="货币名称" :span="2" />
<el-table-column prop="exchangeRate" label="汇率" :span="2">
<template #default="scope"> <template #default="scope">
<p>{{ scope.row.exchangeRate }} 1新币</p> <p>{{ scope.row.exchangeRate }} 1新币</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="添加时间" :span="5">
<el-table-column prop="createTime" label="添加时间" :span="3">
<template #default="scope"> <template #default="scope">
<span>{{ formatDate(scope.row.createTime) }}</span> <span>{{ formatDate(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="updateTime" label="更新时间" :span="5">
<!-- <el-table-column prop="updateTime" label="更新时间" :span="3">
<template #default="scope"> <template #default="scope">
<span>{{ formatDate(scope.row.updateTime) }}</span> <span>{{ formatDate(scope.row.updateTime) }}</span>
</template> </template>
</el-table-column> -->
<el-table-column prop="adminName" label="提交人" :span="1" />
<el-table-column prop="status" label="状态">
<template #default="scope">
<span v-if="scope.row.status === 1">
<div class="status">
<span class="green-dot"></span>
<span>使用中</span>
</div>
</span>
<span v-if="scope.row.status === 0">
<div class="status">
<span class="red-dot"></span>
<span>未开始</span>
</div>
</span>
<span v-if="scope.row.status === 2">
<div class="status">
<span class="grey-dot"></span>
<span>已过期</span>
</div>
</span>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="adminName" label="更新人" :span="4" />
<el-table-column label="操作" :span="4">
<el-table-column prop="startTime" label="持续时间" :span="10">
<template #default="scope">
<span>{{ formatDateTwe(scope.row.startTime) }}</span>
<span>---</span>
<span>{{ formatDateTwe(scope.row.endTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" :span="3">
<template #default="scope"> <template #default="scope">
<el-button <el-button
type="text" type="text"
@ -404,9 +483,24 @@ const checkNumber = function () {
" "
>编辑</el-button >编辑</el-button
> >
<el-button type="text" @click="deleteRate(scope.row)"
>删除</el-button
<el-popconfirm
title="确定将此条活动删除吗?"
@confirm="delConfirm"
>
<template #reference>
<el-button type="primary" text> 删除 </el-button>
</template>
<template #actions="{ confirm, cancel }">
<el-button size="small" @click="cancel">取消</el-button>
<el-button
type="primary"
size="small"
@click="confirm(scope.row)"
> >
确定
</el-button>
</template>
</el-popconfirm>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -427,7 +521,7 @@ const checkNumber = function () {
style="width: 80px" style="width: 80px"
> >
<el-option <el-option
v-for="item in [5, 6, 7, 8, 9, 10]"
v-for="item in [5, 10, 20, 50, 100]"
:key="item" :key="item"
:label="item" :label="item"
:value="item" :value="item"
@ -457,7 +551,12 @@ const checkNumber = function () {
</el-row> </el-row>
<!-- 这是添加弹窗 --> <!-- 这是添加弹窗 -->
<el-dialog v-model="regeAdd" title="新增汇率" width="500">
<el-dialog
v-model="regeAdd"
title="新增汇率"
width="500"
:close-on-click-modal="false"
>
<template #footer> <template #footer>
<el-form <el-form
ref="Ref" ref="Ref"
@ -521,7 +620,12 @@ const checkNumber = function () {
</el-dialog> </el-dialog>
<!-- 这是编辑弹窗 --> <!-- 这是编辑弹窗 -->
<el-dialog v-model="regeEdit" title="修改汇率" width="500">
<el-dialog
v-model="regeEdit"
title="修改汇率"
width="500"
:close-on-click-modal="false"
>
<template #footer> <template #footer>
<el-form <el-form
ref="ruleFormRef" ref="ruleFormRef"
@ -555,6 +659,24 @@ const checkNumber = function () {
<el-form-item label="提交人:"> <el-form-item label="提交人:">
<el-input disabled :value="adminData.name" style="width: 240px" /> <el-input disabled :value="adminData.name" style="width: 240px" />
</el-form-item> </el-form-item>
<el-form-item label="开始时间:">
<el-date-picker
v-model="rateEdit.startTime"
type="date"
placeholder="请选择时间"
:default-value="new Date()"
value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item label="结束时间:">
<el-date-picker
v-model="rateEdit.endTime"
type="date"
placeholder="请选择时间"
:default-value="new Date()"
value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item> <el-form-item>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="edit">修改</el-button> <el-button type="primary" @click="edit">修改</el-button>
@ -581,7 +703,6 @@ p {
.pagination { .pagination {
margin-top: 20px; margin-top: 20px;
margin-left: 33%;
} }
.box-card { .box-card {
@ -614,4 +735,7 @@ p {
.pagination { .pagination {
display: flex; display: flex;
} }
.status {
display: flex;
}
</style> </style>

1144
gold-system/src/views/recharge/addRecharge.vue
File diff suppressed because it is too large
View File

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

@ -0,0 +1,663 @@
<script setup>
import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus";
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 adminData = ref({});
const getAdminData = async function () {
try {
const result = await API.post(
"http://192.168.8.93:10010/admin/userinfo",
{}
);
adminData.value = result;
rechargeVo.value.adminId = adminData.value.adminId;
console.log("请求成功", result);
console.log("用户信息", adminData.value);
} catch (error) {
console.log("请求失败", error);
}
};
//
//
const tableData = ref([]);
// ===========================================
// recharge
const rechargeVo = ref({
adminId: adminData.value.adminId,
});
//
const getObj = ref({
pageNum: 1,
pageSize: 10,
});
//
const total = ref(100);
//
const getTime = ref([]);
//
const activity = ref([]);
//
const allData = ref([]);
//
const area = ref([]);
//
const activeName = ref("all");
//
const payWay = [
{
value: "微信",
label: "微信",
},
{
value: "支付宝",
label: "支付宝",
},
{
value: "银联",
label: "银联",
},
{
value: "信用卡",
label: "信用卡",
},
{
value: "借记卡",
label: "借记卡",
},
{
value: "现金充值",
label: "现金充值",
},
];
// ==========================================================
//
const delObj = ref({});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 2) * 60 + "px";
// });
//
// ===========================================================================
//
const get = async function (val) {
try {
//
if (typeof val === "number") {
getObj.value.pageNum = val;
}
//
if (getTime.value != null) {
if (getTime.value.startDate != "" && getTime.value.endDate != "") {
rechargeVo.value.startDate = getTime.value[0];
rechargeVo.value.endDate = getTime.value[1];
}
} else {
rechargeVo.value.startDate = "";
rechargeVo.value.endDate = "";
}
console.log("搜索参数", getObj.value);
// POST
const result = await API.post(
"http://192.168.8.93:10010/recharge/recharge",
{ ...getObj.value, rechargeVo: { ...rechargeVo.value } }
);
//
console.log("请求成功", result);
//
tableData.value = result.data.list;
console.log("tableData", tableData.value);
//
total.value = result.data.total;
console.log("total", total.value);
} catch (error) {
console.log("请求失败", error);
//
}
};
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
//
const reset = function () {
rechargeVo.value.activityId = "";
rechargeVo.value.payWay = "";
rechargeVo.value.area = "";
rechargeVo.value.startDate = "";
rechargeVo.value.endDate = "";
getTime.value = {};
};
//
const getToday = function () {
const today = new Date();
const startDate = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate()
);
const endDate = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
//
const getYesterday = function () {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const startDate = new Date(
yesterday.getFullYear(),
yesterday.getMonth(),
yesterday.getDate()
);
const endDate = new Date(
yesterday.getFullYear(),
yesterday.getMonth(),
yesterday.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
// 7
const get7Days = function () {
const today = new Date();
const startDate = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() - 6
);
const endDate = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() + 1
);
getTime.value = [startDate, endDate];
console.log("getTime", getTime.value);
get();
};
//
const adminAll = function () {
console.log("adminAll");
rechargeVo.value.status = "";
getObj.value.pageNum = 1;
get();
};
//
const adminWait = function () {
rechargeVo.value.status = 0;
getObj.value.pageNum = 1;
get();
console.log("adminWait");
};
//
const adminPass = function () {
rechargeVo.value.status = 1;
getObj.value.pageNum = 1;
get();
console.log("adminPass");
};
//
const adminReject = function () {
rechargeVo.value.status = 2;
getObj.value.pageNum = 1;
get();
console.log("adminReject");
};
//
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();
}
};
//
const getActivity = async function () {
try {
// POST
const result = await API.post(
"http://192.168.8.93:10010/recharge/activity/select",
{}
);
//
console.log("请求成功", result);
//
activity.value = result.data;
console.log("activity", activity.value);
} catch (error) {
console.log("请求失败", error);
//
}
};
//
const getArea = async function () {
try {
// POST
const result = await API.post(
"http://192.168.8.93:10010/recharge/recharge",
{}
);
//
console.log("请求成功", result);
//
allData.value = result.data;
console.log("allData", allData.value);
//
area.value = [...new Set(allData.value.map((item) => item.area))];
console.log("地区", area.value);
} catch (error) {
console.log("请求失败", error);
//
}
};
// =================================
//
const del = function (row) {
delObj.value.rechargeId = row.rechargeId;
console.log("delObj1", delObj.value);
};
//
const delConfirm = async function () {
try {
console.log("delObj2", delObj.value);
const result = await API.post(
"http://192.168.8.93:10010/recharge/recharge/edit",
delObj.value
);
console.log("删除成功", result);
//
get();
} catch (error) {
console.log("请求失败", error);
//
}
};
//
const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === "number") {
console.log(
"总共有多少页" + Math.ceil(total.value / getObj.value.pageSize)
);
if (
getObj.value.pageNum > 0 &&
getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
) {
getObj.value.pageNum = parseInt(getObj.value.pageNum);
console.log("输入的数字合法");
get();
} else {
//
ElMessage({
type: "error",
message: "请检查输入内容",
});
}
} else {
//
ElMessage({
type: "error",
message: "请检查输入内容",
});
}
};
//
onMounted(async function () {
await getAdminData();
await get();
getActivity();
await getArea();
});
</script>
<template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px">
<el-row style="margin-bottom: 10px">
<el-col :span="8">
<div class="head-card-element">
<el-text class="mx-1" size="large">活动名称</el-text>
<el-select
v-model="rechargeVo.activityId"
placeholder="请选择活动名称"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in activity"
:key="item.activityId"
:label="item.activityName"
:value="item.activityId"
/>
</el-select>
</div>
</el-col>
<el-col :span="8">
<div class="head-card-element">
<el-text class="mx-1" size="large">支付方式</el-text>
<el-select
v-model="rechargeVo.payWay"
placeholder="请选择支付方式"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in payWay"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</el-col>
<el-col :span="8">
<div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text>
<el-select
v-model="rechargeVo.area"
placeholder="请选择所属地区"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in area"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="21">
<div class="head-card-element">
<el-text class="mx-1" size="large">充值时间</el-text>
<el-date-picker
v-model="getTime"
type="datetimerange"
range-separator="至"
start-placeholder="起始时间"
end-placeholder="结束时间"
/>
<el-button style="margin-left: 10px" @click="getToday()"
></el-button
>
<el-button @click="getYesterday()"></el-button>
<el-button @click="get7Days()">近7天</el-button>
</div>
</el-col>
<el-col :span="3">
<div class="head-card-btn">
<el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div>
</el-col>
</el-row>
</el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card>
<el-tabs
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane label="全部" name="all"></el-tab-pane>
<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>
</el-tabs>
<div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%">
<el-table-column prop="username" label="姓名" width="100px" />
<el-table-column prop="jwcode" label="精网号" width="130px" />
<el-table-column prop="area" label="所属地区" width="100px" />
<el-table-column
prop="activityName"
label="活动名称"
width="150px"
/>
<el-table-column
prop="paidGold"
label="充值金额"
width="120px"
sortable
/>
<el-table-column prop="paidGold" label="充值金币" width="100px" />
<el-table-column prop="freeGold" label="免费金币" width="100px" />
<el-table-column
prop="remark"
label="备注"
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="payWay" label="支付方式" width="100px" />
<el-table-column
prop="rechargeVoucher"
label="支付凭证"
width="150px"
>
<template #default="scope">
<el-image
:preview-src-list="[scope.row.rechargeVoucher]"
preview-teleported="true"
:src="scope.row.rechargeVoucher"
alt="凭证"
style="width: 50px; height: 50px"
/>
</template>
</el-table-column>
<el-table-column prop="name" label="提交人" width="100px" />
<el-table-column prop="status" label="状态" width="100px">
<template #default="scope">
<span v-if="scope.row.status === 1">
<div class="status">
<span class="green-dot"></span>
<span>已通过</span>
</div>
</span>
<span v-if="scope.row.status === 0">
<div class="status">
<span class="grey-dot"></span>
<span>待审核</span>
</div>
</span>
<span v-if="scope.row.status === 2">
<div class="status">
<span class="red-dot"></span>
<span>已驳回</span>
</div>
</span>
</template>
</el-table-column>
<el-table-column
prop="reson"
label="驳回理由"
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="rechargeTime" 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
fixed="right"
prop="operation"
label="操作"
width="150px"
>
<template #default="scope">
<el-popconfirm
title="确定将此条活动删除吗?"
@confirm="delConfirm"
>
<template #reference>
<el-button type="primary" text @click="del(scope.row)">
删除
</el-button>
</template>
<template #actions="{ confirm, cancel }">
<el-button size="small" @click="cancel">取消</el-button>
<el-button type="primary" size="small" @click="confirm">
确定
</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页 -->
<div class="pagination" style="margin-top: 20px">
<el-pagination
background
: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"
: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>
</div>
</el-card>
</el-col>
</el-row>
<!-- 编辑弹窗 -->
<el-dialog
v-model="editRechargeVisible"
title="新增活动"
width="500"
:before-close="closeEditRechargeVisible"
>
<template #footer>
<el-form :model="editObj" label-width="auto" style="max-width: 600px">
<el-form-item label="活动名称:">
<el-input
v-model="addObj.activityName"
placeholder="请输入活动名称"
style="width: 220px"
/>
</el-form-item>
<el-form-item label="免费金币:">
<el-radio-group v-model="addObj.freeGold">
<el-radio value="0">无赠送</el-radio>
<el-radio value="1">有赠送</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="免费金币兑换比:">
<el-input
v-model="addObj.rechargeRatio"
placeholder="请输入"
style="width: 80px"
/>1
<div style="color: grey">(提示当前规则每10新币可兑换1免费金币)</div>
</el-form-item>
<el-form-item label="开始时间:">
<el-time-picker v-model="addObj.startTime" />
</el-form-item>
<el-form-item label="结束时间:">
<el-time-picker v-model="addObj.endTime" />
</el-form-item>
<el-form-item label="添加人:">
<el-input v-model="addObj.adminName" disabled style="width: 220px" />
</el-form-item>
</el-form>
<div class="dialog-footer">
<el-button @click="closeAddActivityVisible">取消</el-button>
<el-button type="primary" @click="closeAddActivityVisible">
提交
</el-button>
</div>
</template>
</el-dialog>
</template>
<style scoped>
.pagination {
display: flex;
}
.status {
display: flex;
}
.head-card {
display: flex;
}
.head-card-element {
margin-right: 20px;
}
.head-card-btn {
margin-left: auto;
}
</style>

206
vue/gold-system/vue/gold-system/src/views/recharge/allRecharge.vue → gold-system/src/views/recharge/allRecharge.vue

@ -15,7 +15,7 @@ const rechargeVo = ref({});
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 5,
pageSize: 10,
}); });
// //
const total = ref(100); const total = ref(100);
@ -59,10 +59,10 @@ const payWay = [
}, },
]; ];
//
const tableHeight = computed(function () {
return (getObj.value.pageSize + 2) * 60 + "px";
});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 2) * 60 + "px";
// });
// //
// ============================================================== // ==============================================================
@ -103,6 +103,11 @@ const get = async function (val) {
// //
} }
}; };
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
// //
const reset = function () { const reset = function () {
rechargeVo.value.activityId = ""; rechargeVo.value.activityId = "";
@ -168,23 +173,27 @@ const get7Days = function () {
const adminAll = function () { const adminAll = function () {
console.log("adminAll"); console.log("adminAll");
rechargeVo.value.status = ""; rechargeVo.value.status = "";
getObj.value.pageNum = 1;
get(); get();
}; };
// //
const adminWait = function () { const adminWait = function () {
rechargeVo.value.status = 0; rechargeVo.value.status = 0;
getObj.value.pageNum = 1;
get(); get();
console.log("adminWait"); console.log("adminWait");
}; };
// //
const adminPass = function () { const adminPass = function () {
rechargeVo.value.status = 1; rechargeVo.value.status = 1;
getObj.value.pageNum = 1;
get(); get();
console.log("adminPass"); console.log("adminPass");
}; };
// //
const adminReject = function () { const adminReject = function () {
rechargeVo.value.status = 2; rechargeVo.value.status = 2;
getObj.value.pageNum = 1;
get(); get();
console.log("adminReject"); console.log("adminReject");
}; };
@ -251,6 +260,7 @@ const checkNumber = function () {
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("输入的数字合法"); console.log("输入的数字合法");
get(); get();
} else { } else {
@ -281,31 +291,61 @@ onMounted(async function () {
<el-row> <el-row>
<el-col> <el-col>
<el-card style="margin-bottom: 20px"> <el-card style="margin-bottom: 20px">
<el-row style="margin-bottom: 10px;">
<el-row style="margin-bottom: 10px">
<el-col :span="8"> <el-col :span="8">
<div class="head-card-element"> <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.activityId" placeholder="请选择活动名称" size="large" style="width: 240px"
clearable>
<el-option v-for="item in activity" :key="item.activityId" :label="item.activityName"
:value="item.activityId" />
<el-select
v-model="rechargeVo.activityId"
placeholder="请选择活动名称"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in activity"
:key="item.activityId"
:label="item.activityName"
:value="item.activityId"
/>
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="head-card-element"> <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="请选择支付方式" size="large" style="width: 240px" clearable>
<el-option v-for="item in payWay" :key="item.value" :label="item.label" :value="item.value" />
<el-select
v-model="rechargeVo.payWay"
placeholder="请选择支付方式"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in payWay"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="head-card-element"> <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.area" placeholder="请选择所属地区" size="large" style="width: 240px" clearable>
<el-option v-for="item in area" :key="item" :label="item" :value="item" />
<el-select
v-model="rechargeVo.area"
placeholder="请选择所属地区"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in area"
:key="item"
:label="item"
:value="item"
/>
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
@ -314,9 +354,16 @@ onMounted(async function () {
<el-col :span="21"> <el-col :span="21">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">充值时间</el-text> <el-text class="mx-1" size="large">充值时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" />
<el-button style="margin-left: 10px;" @click="getToday()"></el-button>
<el-date-picker
v-model="getTime"
type="datetimerange"
range-separator="至"
start-placeholder="起始时间"
end-placeholder="结束时间"
/>
<el-button style="margin-left: 10px" @click="getToday()"
></el-button
>
<el-button @click="getYesterday()"></el-button> <el-button @click="getYesterday()"></el-button>
<el-button @click="get7Days()">近7天</el-button> <el-button @click="get7Days()">近7天</el-button>
</div> </div>
@ -324,7 +371,7 @@ onMounted(async function () {
<el-col :span="3"> <el-col :span="3">
<div class="head-card-btn"> <div class="head-card-btn">
<el-button @click="reset()">重置</el-button> <el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -334,7 +381,12 @@ onMounted(async function () {
<el-row> <el-row>
<el-col> <el-col>
<el-card> <el-card>
<el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
<el-tabs
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane label="全部" name="all"></el-tab-pane> <el-tab-pane label="全部" name="all"></el-tab-pane>
<el-tab-pane label="待审核" name="wait"></el-tab-pane> <el-tab-pane label="待审核" name="wait"></el-tab-pane>
<el-tab-pane label="已通过" name="pass"></el-tab-pane> <el-tab-pane label="已通过" name="pass"></el-tab-pane>
@ -343,19 +395,46 @@ onMounted(async function () {
<div> <div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%"> <el-table :data="tableData" :height="tableHeight" style="width: 100%">
<el-table-column prop="username" label="姓名" width="100px" /> <el-table-column prop="username" label="姓名" width="100px" />
<el-table-column prop="jwcode" label="精网号" width="150px" />
<el-table-column prop="jwcode" label="精网号" width="130px" />
<el-table-column prop="area" label="所属地区" width="100px" /> <el-table-column prop="area" label="所属地区" width="100px" />
<el-table-column prop="activityName" label="活动名称" width="150px" />
<el-table-column prop="rechargeGold" label="充值金额" width="100px" />
<el-table-column prop="rechargeWay" label="充值方式" width="100px" />
<el-table-column
prop="activityName"
label="活动名称"
width="150px"
/>
<el-table-column
prop="paidGold"
label="充值金额"
width="120px"
sortable
/>
<el-table-column
prop="rechargeWay"
label="充值方式"
width="100px"
/>
<el-table-column prop="paidGold" label="充值金币" width="100px" /> <el-table-column prop="paidGold" label="充值金币" width="100px" />
<el-table-column prop="freeGold" label="免费金币" width="100px" /> <el-table-column prop="freeGold" label="免费金币" width="100px" />
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip />
<el-table-column
prop="remark"
label="备注"
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="payWay" label="支付方式" width="100px" /> <el-table-column prop="payWay" label="支付方式" width="100px" />
<el-table-column prop="rechargeVoucher" label="支付凭证" width="150px">
<el-table-column
prop="rechargeVoucher"
label="支付凭证"
width="150px"
>
<template #default="scope"> <template #default="scope">
<el-image :preview-src-list="[scope.row.rechargeVoucher]" preview-teleported="true"
:src="scope.row.rechargeVoucher" alt="凭证" style="width: 50px; height: 50px" />
<el-image
:preview-src-list="[scope.row.rechargeVoucher]"
preview-teleported="true"
:src="scope.row.rechargeVoucher"
alt="凭证"
style="width: 50px; height: 50px"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="提交人" width="100px" /> <el-table-column prop="name" label="提交人" width="100px" />
@ -381,10 +460,17 @@ onMounted(async function () {
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="reson" label="驳回理由" width="200px" show-overflow-tooltip />
<el-table-column
prop="reson"
label="驳回理由"
width="200px"
show-overflow-tooltip
/>
<el-table-column prop="rechargeTime" label="交款时间" width="200px"> <el-table-column prop="rechargeTime" label="交款时间" width="200px">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.rechargeTime).format('YYYY-MM-DD HH:mm:ss') }}
{{
moment(scope.row.rechargeTime).format("YYYY-MM-DD HH:mm:ss")
}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="提交时间" width="200px" /> <el-table-column prop="createTime" label="提交时间" width="200px" />
@ -392,41 +478,49 @@ onMounted(async function () {
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div class="pagination">
<el-pagination background :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, 6, 7, 8, 9, 10]" :key="item" :label="item" :value="item"></el-option>
<div class="pagination" style="margin-top: 20px">
<el-pagination
background
: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> </el-select>
<div> </div>
<div></div>
</el-pagination> </el-pagination>
<el-pagination background layout="prev, pager, next,slot" :page-size="getObj.pageSize" :total="total"
:current-page="getObj.pageNum" @current-change="get">
<el-pagination
background
layout="prev, pager, next,slot"
:page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum"
@current-change="get"
>
<div>跳至</div> <div>跳至</div>
<el-input v-model="getObj.pageNum" style="width: 40px;" @change="checkNumber" />
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/>
<div></div> <div></div>
</el-pagination> </el-pagination>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
<!-- 分页 -->
<div class="pagination">
<el-pagination background :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, 6, 7, 8, 9, 10]" :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>
</div>
</template> </template>
<style scoped> <style scoped>

133
vue/gold-system/vue/gold-system/src/views/refund/addRefund.vue → gold-system/src/views/refund/addRefund.vue

@ -81,9 +81,6 @@ const addBefore = () => {
if (valid) { if (valid) {
ElMessageBox.confirm("确认添加?") ElMessageBox.confirm("确认添加?")
.then(() => { .then(() => {
addRefund.value.freeCoin = Number(-addRefund.value.freeCoin);
addRefund.value.rechargeCoin = Number(-addRefund.value.rechargeCoin);
addRefund.value.taskCoin = Number(-addRefund.value.taskCoin);
add(); add();
console.log("添加成功"); console.log("添加成功");
addRefund.value.allCoin = 0; addRefund.value.allCoin = 0;
@ -151,9 +148,9 @@ const getUser = async function (jwcode) {
Number(user.value.pendingSpendTimes); Number(user.value.pendingSpendTimes);
console.log("用户信息", user.value); console.log("用户信息", user.value);
if (result.data.code === 0) { if (result.data.code === 0) {
ElMessage.error(result.data.msg);
ElMessage.error(result.msg);
} else { } else {
ElMessage.success(result.data.msg);
ElMessage.success(result.msg);
} }
} catch (error) { } catch (error) {
console.log("请求失败", error); console.log("请求失败", error);
@ -197,9 +194,15 @@ const getGoods = async function (jwcode) {
try { try {
// POST // POST
const result = await API.post( const result = await API.post(
"http://192.168.8.93:10010/consume/getDeatil/" + addRefund.value.jwcode
"http://192.168.8.93:10010/consume/getDeatil/" + addRefund.value.jwcode,
{}
); );
if (result.code === 0) {
addRefund.value.jwcode = "";
ElMessage.error(result.msg);
return;
console.log("查询失败,请检查精网号是否正确");
}
// //
console.log("请求成功", result); console.log("请求成功", result);
// //
@ -209,6 +212,7 @@ const getGoods = async function (jwcode) {
console.log("请求失败", error); console.log("请求失败", error);
ElMessage.error("查询失败,请检查精网号是否正确"); ElMessage.error("查询失败,请检查精网号是否正确");
// //
addRefund.value.jwcode = "";
} }
}; };
const calculatedRechargeGoods = computed(() => { const calculatedRechargeGoods = computed(() => {
@ -228,19 +232,45 @@ watch(calculatedRechargeGoods, (newVal) => {
// //
//
const getProductByOrderCode = async function (item) {
try {
// POST
const result = await API.post(
"http://192.168.8.93:10010/refund/searchByOrderCode?orderCode=" + item,
{}
);
addRefund.value.contactId = result.data.detailId;
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.allCoin =
result.data.taskCoin * -1 +
result.data.freeCoin * -1 +
result.data.rechargeCoin * -1;
console.log("请求成功", addRefund.value);
if (result.data.code === 0) {
ElMessage.error(result.data.msg);
} else {
ElMessage.success("选择成功");
}
} catch (error) {
console.log("请求失败", error);
ElMessage.error("查询失败,请检查精网号是否正确");
//
}
};
const handleSelectionChange = (value) => { const handleSelectionChange = (value) => {
getProductByOrderCode(value);
console.log("选择的订单号", value);
const selectedItem = goods.value.find((item) => item.detailId === value); const selectedItem = goods.value.find((item) => item.detailId === value);
if (selectedItem) {
addRefund.value.contactId = selectedItem.detailId;
addRefund.value.refundGoods = selectedItem.productName;
}
console.log("选择的商品", addRefund.value.refundGoods);
console.log("选择的商品ID", addRefund.value.contactId); // ID
}; };
</script> </script>
<template> <template>
<div>新增退款</div>
<div style="font-weight: bold">新增退款</div>
<el-form <el-form
:model="addRefund" :model="addRefund"
@ -277,9 +307,9 @@ const handleSelectionChange = (value) => {
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="contactId" label="退款商品">
<el-form-item prop="contactId" label="商品">
<el-select <el-select
v-model="addRefund.contactId"
v-model="addRefund.orderCode"
placeholder="请选择" placeholder="请选择"
style="width: 300px" style="width: 300px"
@change="handleSelectionChange" @change="handleSelectionChange"
@ -287,14 +317,18 @@ const handleSelectionChange = (value) => {
<el-option <el-option
v-for="item in goods" v-for="item in goods"
:key="item.value" :key="item.value"
:label="item.productName"
:value="item.detailId"
:label="item.productName + item.orderCode"
:value="item.orderCode"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<el-form-item prop="taskCoin" label="任务金币" style="float: left">
<el-input v-model="addRefund.taskCoin" style="width: 100px" />
<el-form-item prop="rechargeCoin" label="充值金币" style="float: left">
<el-input
v-model="addRefund.rechargeCoin"
style="width: 100px"
disabled
/>
<p></p> <p></p>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -305,17 +339,15 @@ const handleSelectionChange = (value) => {
<el-input <el-input
v-model="addRefund.freeCoin" v-model="addRefund.freeCoin"
style="float: left; width: 100px" style="float: left; width: 100px"
disabled
/> />
<p></p> <p></p>
</el-form-item> </el-form-item>
<el-form-item
prop="rechargeCoin"
label="充值金币"
style="margin-left: -20px"
>
<el-form-item prop="taskCoin" label="任务金币" style="margin-left: -20px">
<el-input <el-input
v-model="addRefund.rechargeCoin"
v-model="addRefund.taskCoin"
style="float: left; width: 100px" style="float: left; width: 100px"
disabled
/> />
<p></p> <p></p>
</el-form-item> </el-form-item>
@ -347,65 +379,74 @@ const handleSelectionChange = (value) => {
</el-form> </el-form>
<!-- 客户信息栏 --> <!-- 客户信息栏 -->
<el-card style="width: 700px; float: right" class="customer-info">
<el-card style="width: 850px; float: right" class="customer-info">
<el-form <el-form
:model="user" :model="user"
label-width="auto" label-width="auto"
style="max-width: 600px"
style="max-width: 1000px"
label-position="left" label-position="left"
> >
<el-text size="large" style="margin-left: 20px">客户信息</el-text> <el-text size="large" style="margin-left: 20px">客户信息</el-text>
<el-row style="margin-top: 20px"> <el-row style="margin-top: 20px">
<el-col :span="12">
<el-col :span="10">
<el-form-item label="姓名:"> <el-form-item label="姓名:">
<p>{{ user.name }}</p> <p>{{ user.name }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="14">
<el-form-item label="历史金币总数"> <el-form-item label="历史金币总数">
<p>{{ user.totalRechargeGold }}</p> <p>{{ user.totalRechargeGold }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="精网号"> <el-form-item label="精网号">
<p>{{ user.jwcode }}</p> <p>{{ user.jwcode }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="当前金币总数">
<p>{{ user.sumgold }}</p>
<el-col :span="14">
<el-form-item label="当前金币总数" style="width: 500px">
<span style="color: #2fa1ff; margin-right: 5px" v-if="user.buyJb">{{
user.buyJb + user.free6 + user.free12 + user.coreJb
}}</span>
<span
style="display: inline; white-space: nowrap; color: #b1b1b1"
v-if="user.buyJb"
>(充值金币:{{ user.buyJb }};免费金币:{{
user.free6 + user.free12
}};任务金币:{{ user.coreJb }})</span
>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="首次充值日期"> <el-form-item label="首次充值日期">
<p v-if="user.firstRechargeDate"> <p v-if="user.firstRechargeDate">
{{ moment(user.firstRechargeDate).format("YYYY-MM-DD HH:mm:ss") }} {{ moment(user.firstRechargeDate).format("YYYY-MM-DD HH:mm:ss") }}
</p> </p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="14">
<el-form-item label="充值次数"> <el-form-item label="充值次数">
<p>{{ user.rechargeTimes }}</p>
<p style="color: #2fa1ff">{{ user.rechargeTimes }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="负责客服"> <el-form-item label="负责客服">
<p>{{ adminData.name }}</p> <p>{{ adminData.name }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="14">
<el-form-item label="消费次数"> <el-form-item label="消费次数">
<p>{{ user.spendTimes }}</p>
<p style="color: #2fa1ff">{{ user.spendTimes }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="所属门店"> <el-form-item label="所属门店">
<p>{{ adminData.area }}</p> <p>{{ adminData.area }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="14">
<el-form-item label="待审核"> <el-form-item label="待审核">
<p>
<p style="color: #2fa1ff">
{{ user.A }} {{ user.A }}
</p> </p>
</el-form-item> </el-form-item>
@ -458,6 +499,10 @@ p {
float: left; float: left;
} }
.form-style2 { .form-style2 {
max-width: 50%;
max-width: 60%;
}
p {
font-size: 13px;
transform: scale(1);
} }
</style> </style>

118
vue/gold-system/vue/gold-system/src/views/refund/allRefund.vue → gold-system/src/views/refund/allRefund.vue

@ -2,6 +2,7 @@
import { ref, onMounted, reactive, computed } from "vue"; import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus"; import ElementPlus from "element-plus";
import { AiFillRead } from "vue-icons-plus/ai"; import { AiFillRead } from "vue-icons-plus/ai";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios"; import axios from "axios";
import moment from "moment"; import moment from "moment";
import API from "../../api/index.js"; import API from "../../api/index.js";
@ -20,8 +21,6 @@ const getObj = ref({
const total = ref(100); const total = ref(100);
// //
const getTime = ref([]); const getTime = ref([]);
//
const activity = ref([]);
// //
const allData = ref([]); const allData = ref([]);
// //
@ -42,10 +41,10 @@ const consumeType = [
}, },
]; ];
//
const tableHeight = computed(function () {
return (getObj.value.pageSize + 2) * 41 + "px";
});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 2) * 45 + "px";
// });
// //
// ============================================================== // ==============================================================
@ -86,6 +85,11 @@ const get = async function (val) {
// //
} }
}; };
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
// //
const reset = function () { const reset = function () {
detail.value.refundGoods = ""; detail.value.refundGoods = "";
@ -151,23 +155,27 @@ const get7Days = function () {
const adminAll = function () { const adminAll = function () {
console.log("adminAll"); console.log("adminAll");
detail.value.auditStatus = ""; detail.value.auditStatus = "";
getObj.value.pageNum = 1;
get(); get();
}; };
// //
const adminWait = function () { const adminWait = function () {
detail.value.auditStatus = 0; detail.value.auditStatus = 0;
getObj.value.pageNum = 1;
get(); get();
console.log("adminWait"); console.log("adminWait");
}; };
// //
const adminPass = function () { const adminPass = function () {
detail.value.auditStatus = 1; detail.value.auditStatus = 1;
getObj.value.pageNum = 1;
get(); get();
console.log("adminPass"); console.log("adminPass");
}; };
// //
const adminReject = function () { const adminReject = function () {
detail.value.auditStatus = 2; detail.value.auditStatus = 2;
getObj.value.pageNum = 1;
get(); get();
console.log("adminReject"); console.log("adminReject");
}; };
@ -183,25 +191,6 @@ const handleClick = function (tab, event) {
adminReject(); adminReject();
} }
}; };
//
const getActivity = async function () {
try {
// POST
const result = await API.post(
"http://192.168.8.93:10010/recharge/activity/select",
{}
);
//
console.log("请求成功", result);
//
activity.value = result.data;
console.log("activity", activity.value);
} catch (error) {
console.log("请求失败", error);
//
}
};
// //
const getArea = async function () { const getArea = async function () {
try { try {
@ -226,7 +215,6 @@ const getArea = async function () {
// //
onMounted(async function () { onMounted(async function () {
await get(); await get();
getActivity();
await getArea(); await getArea();
}); });
// //
@ -242,7 +230,8 @@ const delConfirm = async function () {
// POST // POST
const result = await API.post( const result = await API.post(
"http://192.168.8.93:10010/refund/softDelete?detailId=" + "http://192.168.8.93:10010/refund/softDelete?detailId=" +
delObj.value.detailId
delObj.value.detailId,
{}
); );
// //
console.log("请求成功", result); console.log("请求成功", result);
@ -272,6 +261,35 @@ const getGoods = async function () {
} }
}; };
getGoods(); getGoods();
//
const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === "number") {
console.log(
"总共有多少页" + Math.ceil(total.value / getObj.value.pageSize)
);
if (
getObj.value.pageNum > 0 &&
getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
) {
getObj.value.pageNum = parseInt(getObj.value.pageNum);
console.log("输入的数字合法");
get();
} else {
//
ElMessage({
type: "error",
message: "请检查输入内容",
});
}
} else {
//
ElMessage({
type: "error",
message: "请检查输入内容",
});
}
};
</script> </script>
<template> <template>
@ -291,7 +309,6 @@ getGoods();
> >
<el-option <el-option
v-for="item in consumeType" v-for="item in consumeType"
:key="item.activityId"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
@ -303,7 +320,7 @@ getGoods();
<el-text class="mx-1" size="large">退款商品</el-text> <el-text class="mx-1" size="large">退款商品</el-text>
<el-select <el-select
v-model="detail.refundGoods" v-model="detail.refundGoods"
placeholder="请选择支付方式"
placeholder="请选择退款商品"
size="large" size="large"
style="width: 240px" style="width: 240px"
clearable clearable
@ -358,7 +375,7 @@ getGoods();
<el-col :span="3"> <el-col :span="3">
<div class="head-card-btn"> <div class="head-card-btn">
<el-button @click="reset()">重置</el-button> <el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -469,7 +486,7 @@ getGoods();
删除 删除
</el-button> </el-button>
</template> </template>
<template #actions="{ confirm, cancel }">
<template #actions="{ delConfirm, cancel }">
<el-button size="small" @click="cancel">取消</el-button> <el-button size="small" @click="cancel">取消</el-button>
<el-button type="primary" size="small" @click="delConfirm"> <el-button type="primary" size="small" @click="delConfirm">
确定 确定
@ -482,14 +499,47 @@ getGoods();
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<!-- 分页 -->
<div class="pagination" style="margin-top: 20px">
<el-pagination <el-pagination
background background
layout="prev, pager, next"
:page-size="getObj.pageSize"
layout="slot"
: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" :page-size="getObj.pageSize"
:total="total"
:current-page="getObj.pageNum" :current-page="getObj.pageNum"
@current-change="get" @current-change="get"
>
<div>跳至</div>
<el-input
v-model="getObj.pageNum"
style="width: 40px"
@change="checkNumber"
/> />
<div></div>
</el-pagination>
</div>
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
@ -511,4 +561,8 @@ getGoods();
.head-card-btn { .head-card-btn {
margin-left: auto; margin-left: auto;
} }
.pagination {
display: flex;
margin-top: 20px;
}
</style> </style>

76
vue/gold-system/vue/gold-system/src/views/usergold/index.vue → gold-system/src/views/usergold/index.vue

@ -1,7 +1,9 @@
<script setup> <script setup>
import { ref, onMounted, reactive, computed } from "vue"; import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus"; import ElementPlus from "element-plus";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios"; import axios from "axios";
import moment from "moment";
import { ta } from "element-plus/es/locales.mjs"; import { ta } from "element-plus/es/locales.mjs";
import API from "../../api/index.js"; import API from "../../api/index.js";
@ -25,7 +27,7 @@ const getAllObj = ref({});
// //
const getObj = ref({ const getObj = ref({
pageNum: 1, pageNum: 1,
pageSize: 5,
pageSize: 10,
}); });
// //
@ -44,10 +46,10 @@ const updateType = [
}, },
]; ];
//
const tableHeight = computed(function () {
return getObj.value.pageSize * 50 + "px";
});
// //
// const tableHeight = computed(function () {
// return (getObj.value.pageSize + 2) * 38 + "px";
// });
// //
// =========================================================================== // ===========================================================================
@ -90,18 +92,14 @@ const get = async function (val) {
total.value = result.data.total; total.value = result.data.total;
console.log("total", total.value); console.log("total", total.value);
// //
rechargeCoin.value = tableAllData.value.reduce(
(pre, cur) => pre + cur.rechargeCoin,
0
);
freeCoin.value = tableAllData.value.reduce(
(pre, cur) => pre + cur.freeCoin,
0
);
taskCoin.value = tableAllData.value.reduce(
(pre, cur) => pre + cur.taskCoin,
0
);
rechargeCoin.value = 0;
freeCoin.value = 0;
taskCoin.value = 0;
for (let i = 0; i < tableAllData.value.length; i++) {
rechargeCoin.value += tableAllData.value[i].rechargeCoin;
freeCoin.value += tableAllData.value[i].freeCoin;
taskCoin.value += tableAllData.value[i].taskCoin;
}
console.log( console.log(
"各金币总数", "各金币总数",
rechargeCoin.value, rechargeCoin.value,
@ -113,7 +111,11 @@ const get = async function (val) {
// //
} }
}; };
//
const search = function () {
getObj.value.pageNum = 1;
get();
};
// //
const reset = function () { const reset = function () {
detail.value.jwcode = ""; detail.value.jwcode = "";
@ -185,6 +187,7 @@ const checkNumber = function () {
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("输入的数字合法"); console.log("输入的数字合法");
get(); get();
} else { } else {
@ -252,7 +255,7 @@ onMounted(async function () {
</div> </div>
<div class="head-card-btn"> <div class="head-card-btn">
<el-button @click="reset()">重置</el-button> <el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div> </div>
</div> </div>
</el-card> </el-card>
@ -268,10 +271,10 @@ onMounted(async function () {
</div> </div>
<div> <div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%"> <el-table :data="tableData" :height="tableHeight" style="width: 100%">
<el-table-column prop="uname" label="姓名" />
<el-table-column prop="jwcode" label="精网号" />
<el-table-column prop="area" label="所属地区" />
<el-table-column prop="gold" label="更新数量">
<el-table-column prop="uname" label="姓名" width="130" />
<el-table-column prop="jwcode" label="精网号" width="170" />
<el-table-column prop="area" label="所属地区" width="170" />
<el-table-column prop="gold" label="更新数量" width="160">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
scope.row.rechargeCoin + scope.row.rechargeCoin +
@ -280,18 +283,29 @@ onMounted(async function () {
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="updateType" label="更新类型" />
<el-table-column prop="freeCoin" label="免费金币" />
<el-table-column prop="rechargeCoin" label="充值金币" />
<el-table-column prop="taskCoin" label="任务金币" />
<el-table-column prop="name" label="提交人" />
<el-table-column prop="createTime" label="更新时间" />
<el-table-column prop="updateType" label="更新类型" width="150" />
<el-table-column prop="freeCoin" label="免费金币" width="130" />
<el-table-column prop="rechargeCoin" label="充值金币" width="150" />
<el-table-column prop="taskCoin" label="任务金币" width="130" />
<el-table-column prop="name" label="提交人" width="150" />
<el-table-column
prop="createTime"
label="更新时间"
width="210"
show-overflow-tooltip
>
<template #default="scope">
<span>{{
moment(scope.row.createTime).format("YYYY-MM-DD HH:mm:ss")
}}</span>
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<!-- 分页 --> <!-- 分页 -->
<div class="pagination">
<div class="pagination" style="margin-top: 20px">
<el-pagination <el-pagination
background background
:page-size="getObj.pageSize" :page-size="getObj.pageSize"
@ -306,7 +320,7 @@ onMounted(async function () {
style="width: 80px" style="width: 80px"
> >
<el-option <el-option
v-for="item in [5, 6, 7, 8, 9, 10]"
v-for="item in [5, 10, 20, 50, 100]"
:key="item" :key="item"
:label="item" :label="item"
:value="item" :value="item"

1555
gold-system/src/views/workspace/index.vue
File diff suppressed because it is too large
View File

0
vue/gold-system/vue/gold-system/src/views/z.vue → gold-system/src/views/z.vue

0
vue/gold-system/vue/gold-system/src/vite-env.d.ts → gold-system/src/vite-env.d.ts

0
vue/gold-system/vue/gold-system/tsconfig.app.json → gold-system/tsconfig.app.json

0
vue/gold-system/vue/gold-system/tsconfig.json → gold-system/tsconfig.json

0
vue/gold-system/vue/gold-system/tsconfig.node.json → gold-system/tsconfig.node.json

0
vue/gold-system/vue/gold-system/vite.config.ts → gold-system/vite.config.ts

2
vue/gold-system/demo/.gitattributes

@ -1,2 +0,0 @@
/mvnw text eol=lf
*.cmd text eol=crlf

33
vue/gold-system/demo/.gitignore

@ -1,33 +0,0 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

19
vue/gold-system/demo/.mvn/wrapper/maven-wrapper.properties

@ -1,19 +0,0 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip

2
vue/gold-system/demo/commons/.gitattributes

@ -1,2 +0,0 @@
/mvnw text eol=lf
*.cmd text eol=crlf

33
vue/gold-system/demo/commons/.gitignore

@ -1,33 +0,0 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

19
vue/gold-system/demo/commons/.mvn/wrapper/maven-wrapper.properties

@ -1,19 +0,0 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip

259
vue/gold-system/demo/commons/mvnw

@ -1,259 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.2
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"

149
vue/gold-system/demo/commons/mvnw.cmd

@ -1,149 +0,0 @@
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.2
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
if ($env:MAVEN_USER_HOME) {
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
}
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"

75
vue/gold-system/demo/commons/pom.xml

@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>commons</artifactId>
<version>0.0.1</version>
<name>commons</name>
<description>commons</description>
<parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>

13
vue/gold-system/demo/commons/src/test/java/com/example/commons/CommonsApplicationTests.java

@ -1,13 +0,0 @@
package com.example.commons;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class CommonsApplicationTests {
@Test
void contextLoads() {
}
}

259
vue/gold-system/demo/mvnw

@ -1,259 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.2
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"

149
vue/gold-system/demo/mvnw.cmd

@ -1,149 +0,0 @@
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.2
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
if ($env:MAVEN_USER_HOME) {
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
}
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"

98
vue/gold-system/demo/pom.xml

@ -1,98 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
<name>demo</name>
<description>demo</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.6</version>
</parent>
<packaging>pom</packaging>
<modules>
<module>recharge</module>
<module>commons</module>
</modules>
<properties>
<java.version>21</java.version>
<spring-boot.version>3.3.6</spring-boot.version>
<dubbo.version>3.3.0-beta.2</dubbo.version>
<seata.version>2.0.0</seata.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.6</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>

2
vue/gold-system/demo/recharge/.gitattributes

@ -1,2 +0,0 @@
/mvnw text eol=lf
*.cmd text eol=crlf

33
vue/gold-system/demo/recharge/.gitignore

@ -1,33 +0,0 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

19
vue/gold-system/demo/recharge/.mvn/wrapper/maven-wrapper.properties

@ -1,19 +0,0 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip

259
vue/gold-system/demo/recharge/mvnw

@ -1,259 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.2
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"

149
vue/gold-system/demo/recharge/mvnw.cmd

@ -1,149 +0,0 @@
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.2
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
if ($env:MAVEN_USER_HOME) {
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
}
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"

80
vue/gold-system/demo/recharge/pom.xml

@ -1,80 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>recharge</artifactId>
<version>0.0.1</version>
<name>recharge</name>
<description>recharge</description>
<parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
</parent>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>commons</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>

13
vue/gold-system/demo/recharge/src/main/java/com/example/recharge/RechargeApplication.java

@ -1,13 +0,0 @@
package com.example.recharge;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RechargeApplication {
public static void main(String[] args) {
SpringApplication.run(RechargeApplication.class, args);
}
}

15
vue/gold-system/demo/recharge/src/main/resources/application.yml

@ -1,15 +0,0 @@
server:
port: 10010
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://39.101.133.168/hwgold?serverTimezone=GMT%2b8
username: hwgold
password: 'AGX4Z3YMxiCG3GR2'
application:
name: recharge
mybatis:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

13
vue/gold-system/demo/recharge/src/test/java/com/example/recharge/RechargeApplicationTests.java

@ -1,13 +0,0 @@
package com.example.recharge;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RechargeApplicationTests {
@Test
void contextLoads() {
}
}

9
vue/gold-system/vue/gold-system/src/api/index.js

@ -1,9 +0,0 @@
import http from '../util/http.js';
const API={
post: function(url,data){
return http({url:url,method:'post',data:data})
},
};
export default API;

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

@ -1,513 +0,0 @@
<script setup>
import { reactive } from "vue";
import { ref, computed, watch } from "vue";
import { ElMessage } from "element-plus";
import { Plus } from "@element-plus/icons-vue";
import axios from "axios";
import { ElMessageBox } from "element-plus";
import API from "../../api/index.js";
import moment from "moment";
const adminData = ref({});
const getAdminData = async function () {
try {
const result = await API.post(
"http://192.168.8.93:10010/admin/userinfo",
{}
);
adminData.value = result;
addRecharge.value.adminId = adminData.value.adminId;
addRecharge.value.area = adminData.value.area;
console.log("请求成功", result);
console.log("用户信息", user.value);
} catch (error) {
console.log("请求失败", error);
}
};
getAdminData();
//
const addRecharge = ref({
rechargeVoucher: "",
rechargeWay: "客服充值",
freeGold: 0,
rechargeGold: 0,
paidGold: "",
});
//
const add = async function () {
try {
console.log("开始添加充值信息", addRecharge.value);
// POST
const result = await API.post(
"http://192.168.8.93:10010/recharge/recharge/add",
addRecharge.value
);
if (result.code === 0) {
ElMessage.error("添加失败");
return;
}
//
console.log("请求成功", result);
//
ElMessage.success("添加成功");
//
addRecharge.value = {
adminId: adminData.value.adminId,
area: adminData.value.area,
rechargeVoucher: "",
rechargeWay: "客服充值",
freeGold: Number(0),
rechargeGold: 1,
paidGold: "",
};
user.value = {};
// addRecharge.value.adminId = adminData.value.adminId;
// addRecharge.value.area = adminData.value.area;
// addRecharge.value.rechargeVoucher = "";
// addRecharge.value.rechargeWay = "";
// addRecharge.value.freeGold = 0;
// addRecharge.value.rechargeGold = 0;
// addRecharge.value.paidGold = "";
} catch (error) {
console.log("请求失败", error);
//
}
};
const addBefore = () => {
Ref.value.validate(async (valid) => {
if (valid) {
ElMessageBox.confirm("确认添加?")
.then(() => {
add();
console.log("添加成功");
})
.catch(() => {
console.log("取消添加");
});
} else {
//
ElMessage({
type: "error",
message: "请检查输入内容",
});
}
});
};
//
//
const Ref = ref(null);
const checkFreeGoldRadio = function (rule, value, callback) {
if (value == "0" || value == null || value == "") {
callback(new Error("请输入充值金币"));
} else if (value < 0 || isNaN(value)) {
callback(new Error("请输入正确的格式"));
} else {
callback();
}
};
const rules = reactive({
jwcode: [{ required: true, message: "请输入精网号", trigger: "blur" }],
activityId: [{ required: true, message: "请选择活动名称", trigger: "blur" }],
paidGold: [{ validator: checkFreeGoldRadio, trigger: "blur" }],
rechargeGold: [
{ required: true, message: "请输入充值金额", trigger: "blur" },
],
payWay: [{ required: true, message: "请选择付款方式", trigger: "blur" }],
rechargeTime: [
{ required: true, message: "请选择交款时间", trigger: "blur" },
],
});
//
const user = ref({
firstRechargeTime: "",
});
const getUser = async function (jwcode) {
try {
// POST
const result = await API.post("http://192.168.8.93:10010/recharge/user", {
jwcode: jwcode,
});
console.log("请求成功", result);
user.value = result.data[0];
user.value.A =
Number(user.value.pendingRechargeTimes) +
Number(user.value.pendingSpendTimes);
console.log("用户信息", user.value);
console.log("用户信息", user.value.firstRechargeDate);
if (result.data.code === 0) {
ElMessage.error(result.data.msg);
} else {
ElMessage.success(result.data.msg);
}
} catch (error) {
console.log("请求失败", error);
ElMessage.error("查询失败,请检查精网号是否正确");
//
}
};
//
const activity = ref([]);
const getActivity = async function () {
try {
// POST
const result = await API.post(
"http://192.168.8.93:10010/recharge/activity/select",
{}
);
//
console.log("请求成功", result);
//
activity.value = result.data;
console.log("活动信息", activity.value);
} catch (error) {
console.log("请求失败", error);
//
}
};
getActivity();
//
const currency = ref([]);
const getCurrency = async function () {
try {
// POST
const result = await API.post("http://192.168.8.93:10010/rates/search", {});
//
console.log("货币请求成功", result);
//
currency.value = result.data;
console.log("tableData", currency.value);
// UI
} catch (error) {
console.log("请求失败", error);
//
}
};
getCurrency();
//
const imageUrl = ref("");
//
const handleAvatarSuccess = (response, uploadFile) => {
imageUrl.value = URL.createObjectURL(uploadFile.raw);
console.log("图片上传成功", response, uploadFile);
addRecharge.value.rechargeVoucher = `http://192.168.8.93:10010/upload/${response.data}`;
console.log("图片名称", addRecharge.value.rechargeVoucher);
};
//
const beforeAvatarUpload = (rawFile) => {
if (rawFile.type !== "image/jpeg" && rawFile.type !== "image/png") {
ElMessage.error("图片格式必须为jpg或png!");
return false;
} else if (rawFile.size / 1024 / 1024 > 2) {
ElMessage.error("Avatar picture size can not exceed 2MB!");
return false;
}
return true;
};
//
const options = [
{
value: "现金充值",
label: "现金充值",
},
{
value: "龙鳞卡",
label: "龙鳞卡",
},
{
value: "弘粉卡",
label: "弘粉卡",
},
];
const calculatedFreeGold = computed(() => {
if (!addRecharge.value.activityId == 0) {
const paidGold = Number(addRecharge.value.paidGold) || 0;
const activityId = Number(addRecharge.value.activityId) || 1; // 0
return Math.ceil(paidGold / activityId);
}
});
const calculatedRechargeGold = computed(() => {
if (!addRecharge.value.rateId == 0) {
const paidGold = Number(addRecharge.value.paidGold) || 0;
const rateId = Number(addRecharge.value.rateId) || 1; // 0
return Math.ceil(paidGold * rateId);
}
});
watch(calculatedFreeGold, (newVal) => {
addRecharge.value.freeGold = Number(newVal);
});
watch(calculatedRechargeGold, (newVal) => {
addRecharge.value.rechargeGold = Number(newVal);
});
//
const deleteRecharge = function () {
addRecharge.value = {
adminId: adminData.value.adminId,
area: adminData.value.area,
rechargeVoucher: "",
rechargeWay: "客服充值",
freeGold: Number(0),
rechargeGold: 0,
paidGold: "",
};
imageUrl.value = "";
};
</script>
<template>
<div>新增充值</div>
<el-form
:model="addRecharge"
ref="Ref"
:rules="rules"
label-width="auto"
style="max-width: 600px"
class="add-form"
>
<el-form-item prop="jwcode" label="精网号">
<el-input v-model="addRecharge.jwcode" style="width: 220px" />
<el-button
type="primary"
@click="getUser(addRecharge.jwcode)"
style="margin-left: 20px"
>查询</el-button
>
</el-form-item>
<el-form-item prop="activityId" label="活动名称">
<el-select
v-model="addRecharge.activityId"
placeholder="请选择"
style="width: 300px"
>
<el-option
v-for="item in activity"
:key="item.value"
:label="item.activityName"
:value="item.activityId"
/>
</el-select>
</el-form-item>
<el-form-item prop="paidGold" label="充值金币">
<el-input v-model="addRecharge.paidGold" style="width: 100px" />
<p style="margin-right: 20px"></p>
<p>免费金币</p>
<el-input v-model="addRecharge.freeGold" disabled style="width: 100px" />
<p></p>
</el-form-item>
<el-form-item prop="rechargeGold" label="充值金额">
<el-select
prop="rechargeGold"
v-model="addRecharge.rateId"
placeholder="货币名称"
style="width: 95px; margin-right: 5px"
>
<el-option
v-for="item in currency"
:key="item.value"
:label="item.currency"
:value="item.exchangeRate"
/>
</el-select>
<el-input
disabled
v-model="addRecharge.rechargeGold"
style="width: 200px"
/>
</el-form-item>
<el-form-item prop="payWay" label="收款方式">
<el-select
v-model="addRecharge.payWay"
placeholder="请选择"
style="width: 300px"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item prop="rechargeTime" label="交款时间">
<el-date-picker
v-model="addRecharge.rechargeTime"
type="date"
style="width: 300px"
/>
</el-form-item>
<el-form-item
prop="rechargeVoucher"
label="交款凭证"
style="margin-bottom: 5px"
>
<el-upload
class="avatar-uploader"
action="http://192.168.8.93:10010/upload"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
>
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
</el-upload>
<p style="margin-left: 10px; color: rgb(177, 176, 176)">
仅支持.jpg .png格式文件1MB
</p>
</el-form-item>
<el-form-item prop="remark" label="备注">
<el-input
v-model="addRecharge.remark"
style="width: 300px"
:rows="2"
maxlength="100"
show-word-limit
type="textarea"
/>
</el-form-item>
<el-form-item prop="submitter" label="提交人">
<el-input
style="width: 300px"
:value="adminData.name"
disabled
placeholder="提交人姓名"
/>
</el-form-item>
<el-button @click="deleteRecharge" style="margin-left: 280px"
>重置</el-button
>
<el-button type="primary" @click="addBefore"> 提交 </el-button>
</el-form>
<!-- 客户信息栏 -->
<el-card style="width: 700px; float: right" class="customer-info">
<el-form
:model="user"
label-width="auto"
style="max-width: 600px"
label-position="left"
>
<el-text size="large" style="margin-left: 20px">客户信息</el-text>
<el-row style="margin-top: 20px">
<el-col :span="12">
<el-form-item label="姓名:">
<p>{{ user.name }}</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="历史金币总数">
<p>{{ user.totalRechargeGold }}</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="精网号">
<p>{{ user.jwcode }}</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="当前金币总数">
<p>{{ user.sumgold }}</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="首次充值日期">
<p v-if="user.firstRechargeDate">
{{ moment(user.firstRechargeDate).format("YYYY-MM-DD HH:mm:ss") }}
</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="充值次数">
<p>{{ user.rechargeTimes }}</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="负责客服">
<p>{{ adminData.name }}</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="消费次数">
<p>{{ user.spendTimes }}</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属门店">
<p>{{ adminData.area }}</p>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="待审核">
<p>
{{ user.A }}
</p>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</template>
<style scoped>
p {
margin: 0px;
}
.el-form-item {
margin-left: 50px;
}
/* 上传图片的格式 */
.avatar-uploader .avatar {
width: 50px;
height: 50px;
display: block;
}
</style>
<style>
.avatar-uploader .el-upload {
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 50px;
height: 50px;
text-align: center;
}
.add-form {
margin-top: 50px;
max-width: 50%;
float: left;
}
.customer-info {
max-width: 50%;
}
</style>

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

@ -1,497 +0,0 @@
<script setup>
import { ref, onMounted, reactive, computed } from "vue";
import ElementPlus from "element-plus";
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({
adminId: 1,
name: '赵刚',
area: '中国'
})
//
const tableData = ref([]);
// ===========================================
// recharge
const rechargeVo = ref({
adminId: admin.value.adminId,
});
//
const getObj = ref({
pageNum: 1,
pageSize: 5,
});
//
const total = ref(100);
//
const getTime = ref([]);
//
const activity = ref([]);
//
const allData = ref([]);
//
const area = ref([]);
//
const activeName = ref('all')
//
const payWay = [
{
value: '微信',
label: '微信',
},
{
value: '支付宝',
label: '支付宝',
},
{
value: '银联',
label: '银联',
},
{
value: '信用卡',
label: '信用卡',
},
{
value: '借记卡',
label: '借记卡',
},
{
value: '现金充值',
label: '现金充值',
},
]
// ==========================================================
//
const delObj = ref({});
//
const tableHeight = computed(function () {
return (getObj.value.pageSize + 2) * 60 + 'px';
});
//
// ===========================================================================
//
const get = async function (val) {
try {
//
if (typeof val === 'number') {
getObj.value.pageNum = val;
}
//
if (getTime.value != null) {
if (getTime.value.startDate != '' && getTime.value.endDate != '') {
rechargeVo.value.startDate = getTime.value[0];
rechargeVo.value.endDate = getTime.value[1];
}
} else {
rechargeVo.value.startDate = '';
rechargeVo.value.endDate = '';
}
console.log('搜索参数', getObj.value);
// POST
const result = await API.post('http://192.168.8.93:10010/recharge/recharge', { ...getObj.value, rechargeVo: { ...rechargeVo.value } });
//
console.log('请求成功', result);
//
tableData.value = result.data.list;
console.log('tableData', tableData.value);
//
total.value = result.data.total;
console.log('total', total.value);
} catch (error) {
console.log('请求失败', error);
//
}
}
//
const reset = function () {
rechargeVo.value.activityId = '';
rechargeVo.value.payWay = '';
rechargeVo.value.area = '';
rechargeVo.value.startDate = '';
rechargeVo.value.endDate = '';
getTime.value = {};
}
//
const getToday = function () {
const today = new Date();
const startDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
const endDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
getTime.value = [startDate, endDate];
console.log('getTime', getTime.value);
get();
}
//
const getYesterday = function () {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const startDate = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate());
const endDate = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate() + 1);
getTime.value = [startDate, endDate];
console.log('getTime', getTime.value);
get();
}
// 7
const get7Days = function () {
const today = new Date();
const startDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 6);
const endDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
getTime.value = [startDate, endDate];
console.log('getTime', getTime.value);
get();
}
//
const adminAll = function () {
console.log('adminAll');
rechargeVo.value.status = '';
get();
}
//
const adminWait = function () {
rechargeVo.value.status = 0;
get();
console.log('adminWait');
}
//
const adminPass = function () {
rechargeVo.value.status = 1;
get();
console.log('adminPass');
}
//
const adminReject = function () {
rechargeVo.value.status = 2;
get();
console.log('adminReject');
}
//
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();
}
}
//
const getActivity = async function () {
try {
// POST
const result = await API.post('http://192.168.8.93:10010/recharge/activity/select', {});
//
console.log('请求成功', result);
//
activity.value = result.data;
console.log('activity', activity.value);
} catch (error) {
console.log('请求失败', error);
//
}
}
//
const getArea = async function () {
try {
// POST
const result = await API.post('http://192.168.8.93:10010/recharge/recharge', {});
//
console.log('请求成功', result);
//
allData.value = result.data;
console.log('allData', allData.value);
//
area.value = [...new Set(allData.value.map(item => item.area))]
console.log('地区', area.value);
} catch (error) {
console.log('请求失败', error);
//
}
}
// =================================
//
const del = function (row) {
delObj.value.rechargeId = row.rechargeId;
console.log('delObj1', delObj.value);
}
//
const delConfirm = async function () {
try {
console.log('delObj2', delObj.value);
const result = await API.post('http://192.168.8.93:10010/recharge/recharge/edit', delObj.value);
console.log('删除成功', result);
//
get();
} catch (error) {
console.log('请求失败', error);
//
}
}
//
const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === 'number') {
console.log('总共有多少页' + Math.ceil(total.value / getObj.value.pageSize));
if ((getObj.value.pageNum > 0) && (getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize))) {
console.log('输入的数字合法');
get();
} else {
//
ElMessage({
type: 'error',
message: '请检查输入内容',
})
}
} else {
//
ElMessage({
type: 'error',
message: '请检查输入内容',
})
}
}
//
onMounted(async function () {
await get();
getActivity();
await getArea();
})
</script>
<template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px">
<el-row style="margin-bottom: 10px;">
<el-col :span="8">
<div class="head-card-element">
<el-text class="mx-1" size="large">活动名称</el-text>
<el-select v-model="rechargeVo.activityId" placeholder="请选择活动名称" size="large"
style="width: 240px" clearable>
<el-option v-for="item in activity" :key="item.activityId" :label="item.activityName"
:value="item.activityId" />
</el-select>
</div>
</el-col>
<el-col :span="8">
<div class="head-card-element">
<el-text class="mx-1" size="large">支付方式</el-text>
<el-select v-model="rechargeVo.payWay" placeholder="请选择支付方式" size="large"
style="width: 240px" clearable>
<el-option v-for="item in payWay" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</div>
</el-col>
<el-col :span="8">
<div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text>
<el-select v-model="rechargeVo.area" placeholder="请选择所属地区" size="large"
style="width: 240px" clearable>
<el-option v-for="item in area" :key="item" :label="item" :value="item" />
</el-select>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="21">
<div class="head-card-element">
<el-text class="mx-1" size="large">充值时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator=""
start-placeholder="起始时间" end-placeholder="结束时间" />
<el-button style="margin-left: 10px;" @click="getToday()"></el-button>
<el-button @click="getYesterday()"></el-button>
<el-button @click="get7Days()">近7天</el-button>
</div>
</el-col>
<el-col :span="3">
<div class="head-card-btn">
<el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
</div>
</el-col>
</el-row>
</el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card>
<el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="全部" name="all"></el-tab-pane>
<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>
</el-tabs>
<div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%">
<el-table-column prop="username" label="姓名" width="100px" />
<el-table-column prop="jwcode" label="精网号" width="150px" />
<el-table-column prop="area" label="所属地区" width="100px" />
<el-table-column prop="activityName" label="活动名称" width="150px" />
<el-table-column prop="rechargeGold" label="充值金额" width="100px" />
<el-table-column prop="paidGold" label="充值金币" width="100px" />
<el-table-column prop="freeGold" label="免费金币" width="100px" />
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip />
<el-table-column prop="payWay" label="支付方式" width="100px" />
<el-table-column prop="rechargeVoucher" label="支付凭证" width="150px">
<template #default="scope">
<el-image :preview-src-list="[scope.row.rechargeVoucher]" preview-teleported="true" :src="scope.row.rechargeVoucher" alt="凭证" style="width: 50px; height: 50px" />
</template>
</el-table-column>
<el-table-column prop="name" label="提交人" width="100px" />
<el-table-column prop="status" label="状态" width="100px">
<template #default="scope">
<span v-if="scope.row.status === 1">
<div class="status">
<span class="green-dot"></span>
<span>已通过</span>
</div>
</span>
<span v-if="scope.row.status === 0">
<div class="status">
<span class="grey-dot"></span>
<span>待审核</span>
</div>
</span>
<span v-if="scope.row.status === 2">
<div class="status">
<span class="red-dot"></span>
<span>已驳回</span>
</div>
</span>
</template>
</el-table-column>
<el-table-column prop="reson" label="驳回理由" width="200px" show-overflow-tooltip />
<el-table-column prop="rechargeTime" 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 fixed="right" prop="operation" label="操作" width="150px">
<template #default="scope">
<el-popconfirm title="确定将此条活动删除吗?" @confirm="delConfirm">
<template #reference>
<el-button type="primary" text @click="del(scope.row)">
删除
</el-button>
</template>
<template #actions="{ confirm, cancel }">
<el-button size="small" @click="cancel">取消</el-button>
<el-button type="primary" size="small" @click="confirm">
确定
</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页 -->
<div class="pagination">
<el-pagination background :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, 6, 7, 8, 9, 10]" :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>
</div>
</el-card>
</el-col>
</el-row>
<!-- 编辑弹窗 -->
<el-dialog v-model="editRechargeVisible" title="新增活动" width="500" :before-close="closeEditRechargeVisible">
<template #footer>
<el-form :model="editObj" label-width="auto" style="max-width: 600px">
<el-form-item label="活动名称:">
<el-input v-model="addObj.activityName" placeholder="请输入活动名称" style="width: 220px;" />
</el-form-item>
<el-form-item label="免费金币:">
<el-radio-group v-model="addObj.freeGold">
<el-radio value="0">无赠送</el-radio>
<el-radio value="1">有赠送</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="免费金币兑换比:">
<el-input v-model="addObj.rechargeRatio" placeholder="请输入" style="width: 80px;" />1
<div style="color: grey;">(提示当前规则每10新币可兑换1免费金币)</div>
</el-form-item>
<el-form-item label="开始时间:">
<el-time-picker v-model="addObj.startTime" />
</el-form-item>
<el-form-item label="结束时间:">
<el-time-picker v-model="addObj.endTime" />
</el-form-item>
<el-form-item label="添加人:">
<el-input v-model="addObj.adminName" disabled style="width: 220px;" />
</el-form-item>
</el-form>
<div class="dialog-footer">
<el-button @click="closeAddActivityVisible">取消</el-button>
<el-button type="primary" @click="closeAddActivityVisible">
提交
</el-button>
</div>
</template>
</el-dialog>
</template>
<style scoped>
.pagination {
display: flex;
}
.status {
display: flex;
}
.head-card {
display: flex;
}
.head-card-element {
margin-right: 20px;
}
.head-card-btn {
margin-left: auto;
}
</style>

1131
vue/gold-system/vue/gold-system/src/views/workspace/index.vue
File diff suppressed because it is too large
View File

Loading…
Cancel
Save