diff --git a/.env.development b/.env.development index cec78c3..c8abb9f 100644 --- a/.env.development +++ b/.env.development @@ -3,6 +3,6 @@ # VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_dev' # VITE_API_BASE='http://54.251.137.151:10704/' # VITE_API_BASE='http://192.168.8.225:8080/' -VITE_API_BASE='http://192.168.8.94:8080/' -# VITE_API_BASE='http://192.168.8.247:8080/' +# VITE_API_BASE='http://192.168.8.94:8080/' +VITE_API_BASE='http://192.168.8.247:8081/' diff --git a/src/router/index.js b/src/router/index.js index 94c51e8..f1ac976 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -2,13 +2,13 @@ import { createRouter, createWebHashHistory } from 'vue-router'; const router = createRouter({ history: createWebHashHistory(), - routes: [ - { path: '/login', name: "login", component: () => import("../views/login.vue") }, - { path: '/', redirect: "/login" }, + routes: [//此处在做登录之前做成默认跳转工作台 + { path: '/workspace', name: "workspace", component: () => import("../views/workspace/index.vue") }, + { path: '/', redirect: "/workspace" }, // { path: '/test', component: () => import("../views/z.vue") }, { meta: { requireAuth: true }, - path: '/index', component: () => import("../views/index.vue"), + path: '/', component: () => import("../views/home.vue"), children: [ // 工作台 @@ -76,42 +76,43 @@ const router = createRouter({ }); router.beforeEach((to, from, next) => { - const token = localStorage.getItem("token"); - const permission = localStorage.getItem("permission"); - if (to.name != "login" && !token) { - next({ name: "login" }); - } else { - if (permission == "4" && to.name != "noPermission") { - next({ name: "noPermission" }); - } else if (permission == "3") { - if (to.name == "addConsume" || to.name == "allConsume" - || to.name == "addRecharge" || to.name == "adminRecharge" || to.name == "allRecharge" - || to.name == "addRefund" || to.name == "allRefund" - || to.name == "permissions") { - next({ name: "workspace" }); - } else { - next(); - } - } else if (permission == '2') { - if (to.name == "rechargeAudit" || to.name == "refundAudit" - || to.name == "activity" || to.name == "rate" - || to.name == "permissions") { - next({ name: "workspace" }) - } else { - next(); - } - } else if (permission == '5') { - if (to.name == "permissions") { - next({ name: "workspace" }) - } else { - next(); - } - } - else { - next(); - } + // const token = localStorage.getItem("token"); + // const permission = localStorage.getItem("permission"); + // if (to.name != "login" && !token) { + // next({ name: "login" }); + // } else { + // if (permission == "4" && to.name != "noPermission") { + // next({ name: "noPermission" }); + // } else if (permission == "3") { + // if (to.name == "addConsume" || to.name == "allConsume" + // || to.name == "addRecharge" || to.name == "adminRecharge" || to.name == "allRecharge" + // || to.name == "addRefund" || to.name == "allRefund" + // || to.name == "permissions") { + // next({ name: "workspace" }); + // } else { + // next(); + // } + // } else if (permission == '2') { + // if (to.name == "rechargeAudit" || to.name == "refundAudit" + // || to.name == "activity" || to.name == "rate" + // || to.name == "permissions") { + // next({ name: "workspace" }) + // } else { + // next(); + // } + // } else if (permission == '5') { + // if (to.name == "permissions") { + // next({ name: "workspace" }) + // } else { + // next(); + // } + // } + // else { + // next(); + // } - } + // } + next(); }) export default router; diff --git a/src/views/audit/refundAudit.vue b/src/views/audit/refundAudit.vue index f4bd188..c7db5cb 100644 --- a/src/views/audit/refundAudit.vue +++ b/src/views/audit/refundAudit.vue @@ -190,7 +190,7 @@ const fetchProducts = async () => { // 查地区 const fetchAreas = async () => { try { - const result = await request({ url: '/recharge/user/search' }) + const result = await request({ url: 'http://192.168.8.247:8081/general/market' }) areaOptions.value = result.data || [] } catch (error) { console.error('获取地区列表失败', error) diff --git a/src/views/home.vue b/src/views/home.vue new file mode 100644 index 0000000..d4afd98 --- /dev/null +++ b/src/views/home.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/src/views/index.vue b/src/views/index.vue index b85908f..85121ba 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -56,16 +56,16 @@ const message = function () { // 获取machineId -function logout() { - const machineId = localStorage.getItem('machineId') - console.log('machineId:', machineId) - localStorage.removeItem('token') - // localStorage.clear(); - router.push('/login?machineId=' + machineId) - //添加刷新页面的代码 - // window.location.reload(); - ElMessage.success('退出成功') -} +// function logout() { +// const machineId = localStorage.getItem('machineId') +// console.log('machineId:', machineId) +// localStorage.removeItem('token') +// // localStorage.clear(); +// router.push('/login?machineId=' + machineId) +// //添加刷新页面的代码 +// // window.location.reload(); +// ElMessage.success('退出成功') +// } // 挂载 onMounted(async function () { diff --git a/src/views/login.vue b/src/views/login.vue index f764989..efe9035 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -27,9 +27,7 @@ getMachineId() const router = useRouter() // 获取路由实例 let formData = new FormData() -// 添加表单数据到FormData对象中 -// formData.append("jwcode", form.value.jwcode); -// formData.append("password", form.value.password); + const form = ref({ jwcode: '', password: '', token: '', machineId: machineId }) //调用方法 @@ -63,7 +61,7 @@ const login = async function () { } catch (error) { console.log('请求失败', error) ElMessage.error('登录失败,请检查账号密码') - // 在这里可以处理错误逻辑,比如显示错误提示等 + } } @@ -78,7 +76,7 @@ const login = async function () { class="bg" fit="fit" /> - + @@ -113,18 +111,13 @@ const login = async function () {

登录

- +
+ - \ No newline at end of file diff --git a/src/views/permissions/permission.vue b/src/views/permissions/permission.vue index 32ca8ae..175ab05 100644 --- a/src/views/permissions/permission.vue +++ b/src/views/permissions/permission.vue @@ -157,7 +157,7 @@ const openPermissionAddVisible = function () { // 关闭新增用户权限弹窗,并刷新表单 const closePermissionAddVisible = function () { // reset() ,下面这个方法还可以重置表单验证(请输入...),reset只能重置输入,修改reset方法 - // 重置表单数据 + // 重置表单数据,当我们在新增表单点击添加后会弹出一个文本框,再点击取消,弹出的文本框应该是不显示出来的 addAdmin.value = { account: '', name: '', @@ -170,7 +170,6 @@ const closePermissionAddVisible = function () { }; permissionAddVisible.value = false; // 清除表单验证状态 - Ref.value.resetFields(); } diff --git a/src/views/recharge/coinRechargeDetail.vue b/src/views/recharge/coinRechargeDetail.vue index 3979a98..7a0e5b3 100644 --- a/src/views/recharge/coinRechargeDetail.vue +++ b/src/views/recharge/coinRechargeDetail.vue @@ -343,7 +343,7 @@ const getActivity = async function () { const getArea = async function () { try { // 发送POST请求 - const result = await API({ url: 'recharge/user/search', data: {} }) + const result = await API({ url: 'http://192.168.8.247:8081/general/market', data: {} }) // 将响应结果存储到响应式数据中 console.log('请求成功', result) // 存储地区信息 diff --git a/src/views/refund/addCoinRefund.vue b/src/views/refund/addCoinRefund.vue index e67ae21..1c947ab 100644 --- a/src/views/refund/addCoinRefund.vue +++ b/src/views/refund/addCoinRefund.vue @@ -145,27 +145,24 @@ const getUser = async function (jwcode) { const result = await API({ url: 'http://192.168.8.247:8081/user/selectUser', data: { - jwcode: addRefund.value.jwcode, - area: adminData.value.area + jwcode: addRefund.value.jwcode } }) console.log('请求成功', result) //在此处错误逻辑的提示做了注释,在后续商品查询接口返回错误时,提示信息会显示在弹窗中 if (result.code === 0) { - - //ElMessage.error(result.msg) + ElMessage.error(result.msg); + } else if (result.data === null) { + ElMessage.error("用户不存在"); } else { - user.value = result.data - user.value.A = - Number(user.value.pendingRechargeTimes) + - Number(user.value.pendingSpendTimes) - console.log('用户信息', user.value) - //ElMessage.success(result.msg) + user.value = result.data; + console.log("用户信息", user.value); + ElMessage.success(result.msg); } } catch (error) { - console.log('请求失败', error) - ElMessage.error('查询失败,请检查精网号是否正确') + console.log("请求失败", error); + ElMessage.error("查询失败,请检查精网号是否正确"); // 在这里可以处理错误逻辑,比如显示错误提示等 } } @@ -188,25 +185,46 @@ const AAA = computed(() => { watch(AAA, (newVal) => {}) // 退款类型选项 -const refundType = [ - { - value: '退款商品', - label: '退款商品' +// const refundType = [ +// { +// value: '退款商品', +// label: '退款商品' +// } +// ] + +// 退款类型 +const refundType = ref([]) + +// 获取退款类型 +const getRefundTypes = async function () { + try { + // 发送请求获取退款类型 + const result = await API({ + // url: 'http://192.168.8.247:8081/', //这里应该写上一个退款类型的接口 + data: {} }) + console.log('退款类型请求成功', result) + // 将响应结果存储到 refundType 中 + refundType.value = result.data.map(item => ({ + value: item.value, + label: item.label + })) + console.log('退款类型', refundType.value) + } catch (error) { + console.log('退款类型请求失败', error) } -] +} // 根据精网号查询商品 -// 查什么????? const goods = ref([]) const getGoods = async function (jwcode) { trimJwCode(); try { // 发送POST请求 const result = await API({ - url: '/consume/getDeatil', + url: 'http://39.101.133.168:8828/live_mall/api/product/all', data: { jwcode: addRefund.value.jwcode, - area: adminData.value.area + market: adminData.value.market } }) console.log('请求成功', result) @@ -217,7 +235,7 @@ const getGoods = async function (jwcode) { // 存储表格数据 goods.value = result.data console.log('用户信息', goods.value) - ElMessage.success(result.msg) + //ElMessage.success(result.msg) } } catch (error) { console.log('请求失败', error) @@ -403,7 +421,7 @@ onMounted(async function () { - + -

- {{ Number(user.totalRechargeGold / 100) }} +

+ {{ Number(user.historySumGold) }}

@@ -436,30 +454,30 @@ onMounted(async function () { {{ - (user.buyJb + user.free6 + user.free12 + user.coreJb) / 100 + (user.nowSumGold) }} (永久金币:{{ user.buyJb / 100 }};免费金币:{{ - (user.free6 + user.free12) / 100 - }};任务金币:{{ user.coreJb / 100 }})(永久金币:{{ user.nowPermanentGold }};免费金币:{{ + (user.nowFreeGold) + }};任务金币:{{ user.nowTaskGold}}) -

- {{ moment(user.firstRechargeDate).format('YYYY-MM-DD HH:mm:ss') }} +

+ {{ moment(user.firstRecharge).format('YYYY-MM-DD HH:mm:ss') }}

-

{{ user.rechargeTimes }}

+

{{ user.rechargeNum }}

-

{{ user.spendTimes }}

+

{{ user.consumeNum }}

-

{{ adminData.area }}

+

{{ user.market }}

- +
diff --git a/src/views/refund/coinRefundDetail.vue b/src/views/refund/coinRefundDetail.vue index 0eecb19..d327af4 100644 --- a/src/views/refund/coinRefundDetail.vue +++ b/src/views/refund/coinRefundDetail.vue @@ -42,15 +42,8 @@ const getAdminData = async function () { // 充值明细表格 const tableData = ref([]) // 搜索====================================== -// 搜索(筛选)明细 表单 -const refundUser = ref({ - jwcode: null, - refundModel: "", - market: "", - startTime: "", - endTime: "", - goodsName: "" -}) +// 搜索detail +const refundUser = ref({}) // 搜索对象 const getObj = ref({ pageNum: 1, @@ -60,36 +53,46 @@ const getObj = ref({ const total = ref(100) // 搜索对象时间 const getTime = ref([]) + // 搜索地区列表 const market = ref([]) -// 退款类型 -const consumeType = [ - { - value: '退款商品', - label: '退款商品' - } -] - - -// 方法 -// 统计合计数 - -// 待审核各种类金币数 +// 定义响应式变量存储金币合计数 +const permanentGolds = ref(0) +const freeGolds = ref(0) +const taskGolds = ref(0) -// 待审核金币数 -// 已通过各种类金币数 +// 计算总金币数 +const sumGold = computed(() => permanentGolds.value + freeGolds.value + taskGolds.value) -// 已通过金币数 +// 退款类型 +const refundType = ref([]) -// 已驳回各种类金币数 +//时间格式化 +const formatTime = (val) => val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : '' -// 已驳回金币数 +// 获取退款类型 +const getRefundTypes = async function () { + try { + // 发送请求获取退款类型 + const result = await API({ + // url: 'http://192.168.8.247:8081/', //这里应该写上一个退款类型的接口 + data: {} }) + console.log('退款类型请求成功', result) + // 将响应结果存储到 refundType 中 + refundType.value = result.data.map(item => ({ + value: item.value, + label: item.label + })) + console.log('退款类型', refundType.value) + } catch (error) { + console.log('退款类型请求失败', error) + } +} // 搜索============================================================== // 搜索方法 -const get = async function (val) { - +const getSelectBy = async function (val) { try { // 搜索参数页码赋值 if (typeof val === 'number') { @@ -99,46 +102,51 @@ const get = async function (val) { // todo 时间格式化 // 搜索参数时间赋值 if (getTime.value != null) { - if (getTime.value.startDate != '' && getTime.value.endDate != '') { - refundUser.value.startDate = getTime.value[0] - refundUser.value.endDate = getTime.value[1] + if (getTime.value.startTime != '' && getTime.value.endTime != '') { + refundUser.value.startTime = formatTime(getTime.value[0]) + refundUser.value.endTime = formatTime(getTime.value[1]) } } else { - refundUser.value.startDate = '' - refundUser.value.endDate = '' + refundUser.value.startTime = '' + refundUser.value.endTime = '' } // todo 排序后端还没有弄 // 添加排序字段和排序方式到请求参数 refundUser.value.sortField = sortField.value refundUser.value.sortOrder = sortOrder.value - console.log('搜索参数', getObj.value) // 发送POST请求 const result = await API({ url: 'http://192.168.8.247:8081/refund/selectBy', data: { - pageNum: getObj.value.pageNum, - pageSize: getObj.value.pageSize, - refundUser: refundUser.value + ...getObj.value, + refundUser: { ...refundUser.value } } }) // 复制一份 refundUser.value 并移除排序字段和排序方式 - const detailWithoutSort = {...refundUser.value} + const detailWithoutSort = { ...refundUser.value } delete detailWithoutSort.sortField delete detailWithoutSort.sortOrder - const result2 = await API({ + const resultTotalGold = await API({ url: 'http://192.168.8.247:8081/refund/statsGold', data: { - ...detailWithoutSort + ...detailWithoutSort } }) - // 将响应结果存储到响应式数据中 - console.log('请求成功', result) + console.log('resultTotalGold请求成功', resultTotalGold) + // 检查响应的 code 是否为 200 且 data 存在 + if (resultTotalGold.code === 200 && resultTotalGold.data) { + const data = resultTotalGold.data + console.log('获取到的金币数据:', data) + + permanentGolds.value = Number(data.permanentGolds) || 0 + freeGolds.value = Number(data.freeGolds) || 0 + taskGolds.value = Number(data.taskGolds) || 0 + } - console.log("") // 存储表格数据 tableData.value = result.data.list console.log('tableData', tableData.value) @@ -155,7 +163,7 @@ const get = async function (val) { // 搜索 const search = function () { getObj.value.pageNum = 1 - get() + getSelectBy() } // 重置 const reset = function () { @@ -167,58 +175,56 @@ const reset = function () { // 今天 const getToday = function () { const today = new Date() - const startDate = new Date( - today.getFullYear(), - today.getMonth(), - today.getDate() + const startTime = new Date( + today.getFullYear(), + today.getMonth(), + today.getDate() ) - const endDate = new Date( - today.getFullYear(), - today.getMonth(), - today.getDate() + 1 + const endTime = new Date( + today.getFullYear(), + today.getMonth(), + today.getDate() + 1 ) - getTime.value = [startDate, endDate] + getTime.value = [startTime, endTime] console.log('getTime', getTime.value) - get() + getSelectBy() } // 昨天 const getYesterday = function () { const yesterday = new Date() yesterday.setDate(yesterday.getDate() - 1) - const startDate = new Date( - yesterday.getFullYear(), - yesterday.getMonth(), - yesterday.getDate() + const startTime = new Date( + yesterday.getFullYear(), + yesterday.getMonth(), + yesterday.getDate() ) - const endDate = new Date( - yesterday.getFullYear(), - yesterday.getMonth(), - yesterday.getDate() + 1 + const endTime = new Date( + yesterday.getFullYear(), + yesterday.getMonth(), + yesterday.getDate() + 1 ) - getTime.value = [startDate, endDate] + getTime.value = [startTime, endTime] console.log('getTime', getTime.value) - get() + getSelectBy() } // 近7天 const get7Days = function () { const today = new Date() - const startDate = new Date( - today.getFullYear(), - today.getMonth(), - today.getDate() - 6 + const startTime = new Date( + today.getFullYear(), + today.getMonth(), + today.getDate() - 6 ) - const endDate = new Date( - today.getFullYear(), - today.getMonth(), - today.getDate() + 1 + const endTime = new Date( + today.getFullYear(), + today.getMonth(), + today.getDate() + 1 ) - getTime.value = [startDate, endDate] + getTime.value = [startTime, endTime] console.log('getTime', getTime.value) - get() + getSelectBy() } - - //点击标签页 // 设置tab.props.name默认为all const tabName = ref('all') @@ -237,26 +243,42 @@ const handleClick = function (tab, event) { // 获取地区列表的方法 const getMarket = async function () { try { - // 发送请求获取地区列表 - const result = await request({ - // todo 接口不对 - // url: '/general/market', - url: 'http://192.168.8.247:8081/general/market', // todo 换成实际接口地址 - data: {} - }) - console.log('请求地区列表成功', result) - // 存储地区数据 + // 发送POST请求 + const result = await API({ url: 'http://192.168.8.247:8081/general/market', data: {} }) + // 将响应结果存储到响应式数据中 + console.log('请求成功', result) + // 存储地区信息 market.value = result.data - console.log('地区数据', market.value) + console.log('地区', market.value) } catch (error) { - console.log('请求地区列表失败', error) - ElMessage({ - type: 'error', - message: '获取地区列表失败,请稍后重试' - }) + console.log('请求失败', error) } } +//删除气泡 +const delObj = ref({}) +const del = function (row) { + delObj.value.detailId = row.detailId + console.log('delObj', delObj.value) +} +// 删除按钮的气泡弹出框确认按钮 +const delConfirm = async function () { + try { + console.log('delObj', delObj.value) + // 发送POST请求 + const result = await API({ + url: '/refund/softDelete?detailId=' + delObj.value.detailId, + data: {} + }) + // 将响应结果存储到响应式数据中 + console.log('请求成功', result) + // 刷新表格数据 + getSelectBy() + } catch (error) { + console.log('请求失败', error) + // 在这里可以处理错误逻辑,比如显示错误提示等 + } +} // 查询商品的接口 const goods = ref([]) @@ -271,7 +293,8 @@ const getGoods = async function () { console.log('请求成功product', result) // 存储全部数据 goods.value = result.data - console.log('goods 数据', goods.value) // 修改日志输出 + + console.log('地区', market.value) } catch (error) { console.log('请求失败', error) // 在这里可以处理错误逻辑,比如显示错误提示等 @@ -289,7 +312,7 @@ const checkNumber = function () { ) { getObj.value.pageNum = parseInt(getObj.value.pageNum) console.log('输入的数字合法') - get() + getSelectBy() } else { //提示 ElMessage({ @@ -308,9 +331,9 @@ const checkNumber = function () { // 挂载 onMounted(async function () { await getAdminData() - await get() - await getMarket() - await getGoods() + await getSelectBy() + await getArea() + await getRefundTypes() }) // 新增排序字段和排序方式 const sortField = ref('') @@ -319,27 +342,27 @@ const sortOrder = ref('') const handleSortChange = (column) => { console.log('排序字段:', column.prop) console.log('排序方式:', column.order) - if (column.prop === 'rechargeCoin') { - sortField.value = 'recharge_coin' - } else if (column.prop === 'taskCoin') { - sortField.value = 'task_coin' - } else if (column.prop === 'freeCoin') { - sortField.value = 'free_coin' + if (column.prop === 'permanentGold') { + sortField.value = 'permanent_gold' + } else if (column.prop === 'taskGold') { + sortField.value = 'task_gold' + } else if (column.prop === 'freeGold') { + sortField.value = 'free_gold' } else if (column.prop === 'createTime') { sortField.value = 'create_time' } else if (column.prop === 'auditTime') { sortField.value = 'audit_time' } sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC' - get() + getSelectBy() } const handlePageSizeChange = function (val) { getObj.value.pageSize = val - get() + getSelectBy() } const handleCurrentChange = function (val) { getObj.value.pageNum = val - get() + getSelectBy() } @@ -353,11 +376,11 @@ const handleCurrentChange = function (val) { 精网号: @@ -365,18 +388,18 @@ const handleCurrentChange = function (val) {
退款类型:
@@ -385,12 +408,12 @@ const handleCurrentChange = function (val) {
退款商品: -
+
所属地区:
@@ -451,23 +474,11 @@ const handleCurrentChange = function (val) { - -
- 退款金币总数:{{ Math.abs(trueGold) }},永久金币:{{ - Math.abs(truePgold) - }},免费金币:{{ Math.abs(trueFgold) }},任务金币:{{ - Math.abs(trueTgold) + 退款金币总数:{{ Math.abs(sumGold) }},永久金币:{{ + Math.abs(permanentGolds) + }},免费金币:{{ Math.abs(freeGolds) }},任务金币:{{ + Math.abs(taskGolds) }}
@@ -492,10 +503,10 @@ const handleCurrentChange = function (val) { - - - + + + - + + + - - + + -
diff --git a/src/views/usergold/clientCountDetail.vue b/src/views/usergold/clientCountDetail.vue index b944e3d..98263d4 100644 --- a/src/views/usergold/clientCountDetail.vue +++ b/src/views/usergold/clientCountDetail.vue @@ -157,6 +157,11 @@ const get = async function (val) { console.log('搜索参数', getObj.value) // 发送POST请求 + + // 打印 jwcode 的类型和值,用于调试 + console.log('jwcode 类型:', typeof goldDetail.value.jwcode); + console.log('jwcode 值:', goldDetail.value.jwcode); + const requestData = { ...getObj.value, goldDetail: { ...goldDetail.value } }; console.log('最终请求参数', JSON.stringify(requestData, null, 2)); // 打印格式化后的请求参数 diff --git a/src/views/workspace/index.vue b/src/views/workspace/index.vue index ec6f7fc..aa3c588 100644 --- a/src/views/workspace/index.vue +++ b/src/views/workspace/index.vue @@ -223,7 +223,7 @@ const handleDateRangeChange = () => { const getAreas = async () => { try { const result = await API({ - url: '/recharge/user/search', + url: 'http://192.168.8.247:8081/general/market', data: {} }) middleCategory.value = result.data.map(item => item.name) diff --git a/vite.config.ts b/vite.config.ts index 2aaafd5..c6803fa 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -39,6 +39,9 @@ export default defineConfig(({ mode }) => { ] }) ], + server: { + host: true // 允许外部设备访问 + }, resolve: { alias: { '@': path.resolve(__dirname, './src')