Browse Source

完成数据的测试,传数据库的*100,拿数据的/100,包括充值,退款,客户账户明细。存在的问题(也许是后端):1、排序;2、客户账户明细的永久金币字段

zhangrenyuan/feature-20250623164058-金币前端
zry 2 days ago
parent
commit
79e6046fae
  1. 2
      src/views/audit/rechargeAudit.vue
  2. 32
      src/views/audit/refundAudit.vue
  3. 32
      src/views/consume/coinConsumeDetail.vue
  4. 65
      src/views/recharge/addCoinRecharge.vue
  5. 73
      src/views/recharge/coinRechargeDetail.vue
  6. 325
      src/views/refund/addCoinRefund.vue
  7. 57
      src/views/refund/coinRefundDetail.vue
  8. 22
      src/views/usergold/clientCountBalance.vue
  9. 22
      src/views/usergold/clientCountDetail.vue

2
src/views/audit/rechargeAudit.vue

@ -432,7 +432,7 @@ const getActivity = async function () {
const getMarket = async function () { const getMarket = async function () {
try { try {
const result = await request({ const result = await request({
url: 'http://192.168.8.247:8081/general/market',
url: 'http://18.143.76.3:10704/general/market',
data: {} data: {}
}) })
market.value = result.data market.value = result.data

32
src/views/audit/refundAudit.vue

@ -186,21 +186,12 @@ const STATUS = {
// //
const searchForm = ref({ const searchForm = ref({
<<<<<<< HEAD
jwcode: null, // jwcode: null, //
activity: "", // activity: "", //
refundGoods: "", // 退 refundGoods: "", // 退
market: "", // market: "", //
startTime: "", // startTime: "", //
endTime: "" // endTime: "" //
=======
jwcode: '',
refundType: '',
refundGoods: '',
area: '',
startTime: '',
endTime: ''
>>>>>>> zhangrenyuan/feature-20250623164058-金币前端
}) })
// //
@ -386,13 +377,9 @@ const getProducts = async () => {
// //
const getMarket = async () => { const getMarket = async () => {
try { try {
<<<<<<< HEAD
const result = await request({ const result = await request({
url: 'http://192.168.8.247:8081/general/market' // todo
url: 'http://18.143.76.3:10704/general/market' // todo
}) })
=======
const result = await request({ url: 'http://18.143.76.3:10704/general/market' })
>>>>>>> zhangrenyuan/feature-20250623164058-金币前端
areaOptions.value = result.data || [] areaOptions.value = result.data || []
} catch (error) { } catch (error) {
console.error('获取地区列表失败', error) console.error('获取地区列表失败', error)
@ -429,14 +416,6 @@ const get = async function (val) {
status: getCurrentStatus() status: getCurrentStatus()
} }
} }
<<<<<<< HEAD
=======
//
if (dateRange.value?.length === 2) {
params.detail.startTime = moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss')
params.detail.endTime = moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss')
}
>>>>>>> zhangrenyuan/feature-20250623164058-金币前端
const result = await request({ const result = await request({
url: '/audit/audit/refund', // todo url: '/audit/audit/refund', // todo
@ -503,21 +482,12 @@ const handleSearch = function () {
// //
const resetSearch = function () { const resetSearch = function () {
searchForm.value = { searchForm.value = {
<<<<<<< HEAD
jwcode: null, jwcode: null,
activity: "", activity: "",
refundGoods: "", refundGoods: "",
market: "", market: "",
startTime: "", startTime: "",
endTime: "" endTime: ""
=======
jwcode: '',
refundType: '',
refundGoods: '',
area: adminInfo.value.area === '总部' ? '' : adminInfo.value.area,
startTime: '',
endTime: ''
>>>>>>> zhangrenyuan/feature-20250623164058-金币前端
} }
dateRange.value = [] dateRange.value = []
handleSearch() handleSearch()

32
src/views/consume/coinConsumeDetail.vue

@ -150,8 +150,7 @@ const ConsumeSelectBy = async function (val) {
// POST // POST
const result = await request({ const result = await request({
<<<<<<< HEAD
url: 'http://192.168.8.247:8081/consume/selectBy',
url: 'http://18.143.76.3:10704/consume/selectBy',
data: { data: {
pageNum: getObj.value.pageNum, pageNum: getObj.value.pageNum,
pageSize: getObj.value.pageSize, pageSize: getObj.value.pageSize,
@ -161,19 +160,6 @@ const ConsumeSelectBy = async function (val) {
sortOrder: sortOrder.value sortOrder: sortOrder.value
} }
} }
=======
// url: 'consumeUser/selectBy',
url: 'http://18.143.76.3:10704/consume/selectBy',
data: {
pageNum: getObj.value.pageNum,
pageSize: getObj.value.pageSize,
consumeUser: {
...consumeUser.value,
sortField: sortField.value,
sortOrder: sortOrder.value
}
}
>>>>>>> zhangrenyuan/feature-20250623164058-金币前端
}) })
console.log('请求成功2', sortField) console.log('请求成功2', sortField)
@ -193,19 +179,9 @@ const ConsumeSelectBy = async function (val) {
totalGoldSearch.value.goodsName = consumeUser.value.goodsName totalGoldSearch.value.goodsName = consumeUser.value.goodsName
// //
const resultTotalGold = await request({ const resultTotalGold = await request({
<<<<<<< HEAD
// url: 'http://192.168.8.247:8081/consume/statsGold',
url: 'http://192.168.8.247:8081/consume/statsGold',
data: totalGoldSearch.value
=======
// url: 'http://18.143.76.3:10704/consume/statsGold', // url: 'http://18.143.76.3:10704/consume/statsGold',
url: 'http://18.143.76.3:10704/consume/statsGold', url: 'http://18.143.76.3:10704/consume/statsGold',
// data: {
// pageNum: getObj.value.pageNum,
// pageSize: getObj.value.pageSize,
// consumeUser: consumeUser.value
// }
>>>>>>> zhangrenyuan/feature-20250623164058-金币前端
data: totalGoldSearch.value
}) })
@ -388,11 +364,7 @@ const handleSortChange = (column) => {
if (column.prop === 'permanentGold') { if (column.prop === 'permanentGold') {
sortField.value = 'permanentGold' sortField.value = 'permanentGold'
} else if (column.prop === 'taskGold') { } else if (column.prop === 'taskGold') {
<<<<<<< HEAD
sortField.value = 'taskGold' sortField.value = 'taskGold'
=======
sortField.value = 'taskGold' //
>>>>>>> zhangrenyuan/feature-20250623164058-金币前端
} else if (column.prop === 'freeGold') { } else if (column.prop === 'freeGold') {
sortField.value = 'freeGold' sortField.value = 'freeGold'
} else if (column.prop === 'createTime') { } else if (column.prop === 'createTime') {

65
src/views/recharge/addCoinRecharge.vue

@ -9,6 +9,9 @@ import moment from 'moment'
import { range, re } from 'mathjs' import { range, re } from 'mathjs'
import { utils, read } from 'xlsx' import { utils, read } from 'xlsx'
import throttle from 'lodash/throttle' import throttle from 'lodash/throttle'
// fixedAdminId
const fixedAdminId = 1;
// //
const trimJwCode = () => { const trimJwCode = () => {
if (recharge.value.jwcode) { if (recharge.value.jwcode) {
@ -52,14 +55,19 @@ const getAdminData = async function () {
// //
const recharge = ref({ const recharge = ref({
jwcode: '', // jwcode
activity: '', // activity
voucher: '', voucher: '',
rechargeWay: '客服充值', rechargeWay: '客服充值',
freeGold: '', freeGold: '',
money: null, money: null,
permanentGold: '', permanentGold: '',
Rate: null, Rate: null,
rechargeRatio: '',
rateId: null
rateId: null,
payModel: '', // payModel
payTime: null, // payTime
remark: '', // remark
rechargeRatio: ''
}) })
// //
const add = async function () { const add = async function () {
@ -69,6 +77,18 @@ const add = async function () {
// adminId // adminId
adminId: fixedAdminId adminId: fixedAdminId
} }
// 100
if (formattedRecharge.permanentGold) {
formattedRecharge.permanentGold = Number(formattedRecharge.permanentGold) * 100;
}
if (formattedRecharge.freeGold) {
formattedRecharge.freeGold = Number(formattedRecharge.freeGold) * 100;
}
if (formattedRecharge.money) {
formattedRecharge.money = Number(formattedRecharge.money) * 100;
}
if (formattedRecharge.payTime) { if (formattedRecharge.payTime) {
// 使 moment.js payTime // 使 moment.js payTime
formattedRecharge.payTime = moment(formattedRecharge.payTime).format('YYYY-MM-DD HH:mm:ss') formattedRecharge.payTime = moment(formattedRecharge.payTime).format('YYYY-MM-DD HH:mm:ss')
@ -77,7 +97,7 @@ const add = async function () {
console.log('开始添加充值信息', recharge.value) console.log('开始添加充值信息', recharge.value)
// POST // POST
const result = await API({ const result = await API({
url: 'http://192.168.8.247:8081/recharge/add',
url: 'http://18.143.76.3:10704/recharge/add',
data: formattedRecharge data: formattedRecharge
}) })
if (result.code === 0) { if (result.code === 0) {
@ -207,7 +227,7 @@ const getUser = async function (jwcode) {
// POST // POST
const result = await API({ const result = await API({
url: 'http://192.168.8.247:8081/user/selectUser',
url: 'http://18.143.76.3:10704/user/selectUser',
data: { data: {
jwcode: recharge.value.jwcode jwcode: recharge.value.jwcode
} }
@ -236,7 +256,7 @@ const getActivity = async function () {
try { try {
// POST // POST
const result = await API({ const result = await API({
url: 'http://192.168.8.247:8081/general/activity',
url: 'http://18.143.76.3:10704/general/activity',
data: { data: {
} }
@ -333,21 +353,7 @@ const payModel = [
} }
] ]
// //id
// const getActivityById = async function (row) {
// try {
// // POST
// const result = await API({
// url: '/recharge/activity/select',
// data: {
// activity: { activity: row }
// }
// })
// recharge.value.rechargeRatio = result.data[0].rechargeRatio
// console.log('', recharge.value.rechargeRatio)
// } catch (error) {
// console.log('', error)
// }
// } // }
function handleActivityChange(value) { function handleActivityChange(value) {
// //
@ -355,24 +361,7 @@ function handleActivityChange(value) {
getActivityById(value) getActivityById(value)
console.log('看看', recharge.value) console.log('看看', recharge.value)
} }
// permanentGold
// const calculatedFree = computed(() => {
// const result = recharge.value.permanentGold / recharge.value.rechargeRatio
// if (isNaN(result) || result < 1 || recharge.value.rechargeRatio == 0) {
// return 0
// } else {
// return Math.trunc(result)
// }
// })
// watch(calculatedFree, (newVal) => {
// recharge.value.freeGold = newVal
// })
// const calculatedRecharge = computed(() => {
// return recharge.value.permanentGold * Rate.value
// })
// watch(calculatedRecharge, (newVal) => {
// recharge.value.money = newVal
// })
// //
const deleteRecharge = function () { const deleteRecharge = function () {
recharge.value = { recharge.value = {

73
src/views/recharge/coinRechargeDetail.vue

@ -92,12 +92,20 @@ const delObj = ref({})
const getActivity = async function () { const getActivity = async function () {
try { try {
// POST // POST
const result = await API({ url: '/recharge/activity/select', data: {} })
const result = await API({ url: 'http://18.143.76.3:10704/general/activity', data: {} })
// //
console.log('请求成功', result) console.log('请求成功', result)
//
activity.value = result.data
//
if (Array.isArray(result.data)) {
// { value, label }
activity.value = result.data.map(item => ({ value: item, label: item }));
} else {
console.error('活动数据格式错误', result)
ElMessage.error('活动数据格式错误,请联系管理员')
}
console.log('activity', activity.value) console.log('activity', activity.value)
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
@ -200,8 +208,8 @@ const get = async function (val) {
const data = resultTotalGold.data const data = resultTotalGold.data
console.log('获取到的金币数据:', data) console.log('获取到的金币数据:', data)
permanentGolds.value = Number(data.permanentGolds) || 0
freeGolds.value = Number(data.freeGolds) || 0
permanentGolds.value = (Number(data.permanentGolds) || 0)/100
freeGolds.value = (Number(data.freeGolds) || 0)/100
} }
@ -209,6 +217,16 @@ const get = async function (val) {
console.log('请求成功', result) console.log('请求成功', result)
// //
tableData.value = result.data.list tableData.value = result.data.list
// 100
tableData.value = tableData.value.map(item => ({
...item,
//
permanentGold: (Number(item.permanentGold) || 0) / 100,
//
freeGold: (Number(item.freeGold) || 0) / 100,
//
money: (Number(item.money) || 0) / 100
}))
console.log('tableData', tableData.value) console.log('tableData', tableData.value)
// //
total.value = result.data.total total.value = result.data.total
@ -297,29 +315,6 @@ const get7Days = function () {
get() get()
} }
// =================================
//
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({
url: '/recharge/recharge/edit',
data: delObj.value
})
console.log('删除成功', result)
//
get()
} catch (error) {
console.log('请求失败', error)
//
}
}
// //
const checkNumber = function () { const checkNumber = function () {
if (typeof parseInt(getObj.value.pageNum) === 'number') { if (typeof parseInt(getObj.value.pageNum) === 'number') {
@ -364,15 +359,15 @@ const handleSortChange = (column) => {
console.log('排序字段:', column.prop) console.log('排序字段:', column.prop)
console.log('排序方式:', column.order) console.log('排序方式:', column.order)
if (column.prop === 'money') { if (column.prop === 'money') {
sortField.value = 'paid_gold'
sortField.value = 'money'
} else if (column.prop === 'freeGold') { } else if (column.prop === 'freeGold') {
sortField.value = 'free_gold'
} else if (column.prop === 'rechargeTime') {
sortField.value = 'recharge_time'
sortField.value = 'freeGold'
} else if (column.prop === 'payTime') {
sortField.value = 'payTime'
} else if (column.prop === 'createTime') { } else if (column.prop === 'createTime') {
sortField.value = 'create_time'
} else if(column.prop === 'rechargeGold'){
sortField.value = 'recharge_gold'
sortField.value = 'createTime'
} else if(column.prop === 'permanentGold'){
sortField.value = 'permanentGold'
} }
sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC' sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
console.log('传递给后端的排序字段:', sortField.value) console.log('传递给后端的排序字段:', sortField.value)
@ -398,8 +393,8 @@ const handleSortChange = (column) => {
<el-text class="mx-1" size="large">活动名称</el-text> <el-text class="mx-1" size="large">活动名称</el-text>
<el-select v-model="rechargeUser.activity" placeholder="请选择活动名称" style="width: 180px" <el-select v-model="rechargeUser.activity" placeholder="请选择活动名称" style="width: 180px"
clearable> clearable>
<el-option v-for="item in activity" :key="item.activity" :label="item.activity"
:value="item.activity" />
<el-option v-for="item in activity" :key="item.value" :label="item.label"
:value="item.value" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
@ -534,14 +529,14 @@ const handleSortChange = (column) => {
<el-table-column prop="adminName" label="提交人" width="100px" /> <el-table-column prop="adminName" label="提交人" width="100px" />
<el-table-column <el-table-column
prop="rechargeTime"
prop="payTime"
sortable sortable
label="充值时间" label="充值时间"
width="200px" width="200px"
> >
<template #default="scope"> <template #default="scope">
{{ {{
moment(scope.row.rechargeTime).format('YYYY-MM-DD HH:mm:ss')
moment(scope.row.payTime).format('YYYY-MM-DD HH:mm:ss')
}} }}
</template> </template>
</el-table-column> </el-table-column>

325
src/views/refund/addCoinRefund.vue

@ -1,3 +1,4 @@
<script setup> <script setup>
import { onMounted, reactive } from 'vue' import { onMounted, reactive } from 'vue'
import { ref, computed, watch } from 'vue' import { ref, computed, watch } from 'vue'
@ -12,6 +13,9 @@ import moment from 'moment'
const addRe = ref({ const addRe = ref({
typeR: '0' typeR: '0'
}) })
// //
const adminData = ref({}) const adminData = ref({})
const getAdminData = async function () { const getAdminData = async function () {
@ -33,30 +37,58 @@ const trimJwCode = () => {
} }
// 退 // 退
const addRefund = ref({ const addRefund = ref({
updateType: '3',
allCoin: 0,
orderCode: '',
refundGoods: '',
freeCoin: 0,
rechargeCoin: 0,
taskCoin: 0
jwcode: '',
goodsName: '',
refundType: '',
refundModel: 0,
permanentGold: '',
freeGold: '',
taskGold: '',
sumGold: 0,
remark: '',
adminId: null
}) })
// //
const cancel = function () { const cancel = function () {
addRefund.value = {}
addRefund.value.updateType = '3'
addRefund.value.rechargeCoin = 0
addRefund.value.freeCoin = 0
addRefund.value.taskCoin = 0
addRefund.value.allCoin = 0
addRe.value.typeR = 0
addRefund.value.adminId = adminData.value.adminId
addRefund.value = {
jwcode: '',
goodsName: '',
refundType: '',
refundModel: 0,
permanentGold: '',
freeGold: '',
taskGold: '',
sumGold: 0,
remark: '',
adminId: adminData.value.adminId
}
addRe.value.typeR = '0'
} }
// 退 // 退
const add = async function () { const add = async function () {
try { try {
// refundModel
addRefund.value.refundModel = parseInt(addRe.value.typeR);
// 100
const processedRefund = {
...addRefund.value,
permanentGold: (Number(addRefund.value.permanentGold) || 0) * 100,
freeGold: (Number(addRefund.value.freeGold) || 0) * 100,
taskGold: (Number(addRefund.value.taskGold) || 0) * 100,
sumGold: (Number(addRefund.value.sumGold) || 0) * 100,
adminId: 1
}
// POST // POST
const result = await API({ url: '/refund/add', data: addRefund.value })
const result = await API({ url: 'http://18.143.76.3:10704/refund/add',
data: processedRefund
})
if (result.code === 0) { if (result.code === 0) {
ElMessage.error(result.msg) ElMessage.error(result.msg)
return return
@ -64,22 +96,14 @@ const add = async function () {
console.log('请求成功', result) console.log('请求成功', result)
ElMessage.success('添加成功') ElMessage.success('添加成功')
// //
addRefund.value = {}
addRefund.value.adminId = adminData.value.adminId
addRefund.value.updateType = '3'
addRefund.value.allCoin = 0
addRefund.value.orderCode = ''
addRefund.value.refundGoods = ''
addRefund.value.freeCoin = 0
addRefund.value.rechargeCoin = 0
addRefund.value.taskCoin = 0
addRefund.value.typeR = 0
user.value = {}
cancel()
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
// //
} }
} }
// 退
const addBefore = () => { const addBefore = () => {
Ref.value.validate(async (valid) => { Ref.value.validate(async (valid) => {
if (valid) { if (valid) {
@ -87,11 +111,6 @@ const addBefore = () => {
.then(() => { .then(() => {
add() add()
console.log('添加成功') console.log('添加成功')
addRefund.value.allCoin = 0
;(addRefund.value.freeCoin = 0),
(addRefund.value.rechargeCoin = 0),
(addRefund.value.taskCoin = 0),
(addRefund.value = {})
}) })
.catch(() => { .catch(() => {
console.log('取消添加') console.log('取消添加')
@ -114,13 +133,13 @@ const startChange = (val) => {}
const rules = reactive({ const rules = reactive({
jwcode: [{ required: true, message: '请输入精网号', trigger: 'blur' }], jwcode: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
refundType: [{ required: true, message: '请选择退款类型', trigger: 'blur' }], refundType: [{ required: true, message: '请选择退款类型', trigger: 'blur' }],
orderCode: [{ required: true, message: '请选择退款商品', trigger: 'blur' }],
taskCoin: [{ required: true, message: '请输入任务金币', trigger: 'blur' }],
freeCoin: [{ required: true, message: '请输入免费金币', trigger: 'blur' }],
rechargeCoin: [
goodsName: [{ required: true, message: '请选择退款商品', trigger: 'blur' }],
taskGold: [{ required: true, message: '请输入任务金币', trigger: 'blur' }],
freeGold: [{ required: true, message: '请输入免费金币', trigger: 'blur' }],
permanentGold: [
{ required: true, message: '请输入永久金币', trigger: 'blur' } { required: true, message: '请输入永久金币', trigger: 'blur' }
], ],
allCoin: [
sumGold: [
{ required: true, message: '请选择付款方式', trigger: 'blur' }, { required: true, message: '请选择付款方式', trigger: 'blur' },
{ {
validator: (rule, value) => { validator: (rule, value) => {
@ -156,7 +175,16 @@ const getUser = async function (jwcode) {
} else if (result.data === null) { } else if (result.data === null) {
ElMessage.error("用户不存在"); ElMessage.error("用户不存在");
} else { } else {
user.value = result.data;
// 100
const processedData = {
...result.data,
historySumGold: (Number(result.data.historySumGold) || 0) / 100,
nowSumGold: (Number(result.data.nowSumGold) || 0) / 100,
nowPermanentGold: (Number(result.data.nowPermanentGold) || 0) / 100,
nowFreeGold: (Number(result.data.nowFreeGold) || 0) / 100,
nowTaskGold: (Number(result.data.nowTaskGold) || 0) / 100
}
user.value = processedData;
console.log("用户信息", user.value); console.log("用户信息", user.value);
ElMessage.success(result.msg); ElMessage.success(result.msg);
} }
@ -166,31 +194,9 @@ const getUser = async function (jwcode) {
// //
} }
} }
// const calculatedAllGold = computed(() => {
// const sum =
// Number(addRefund.value.freeCoin) +
// Number(addRefund.value.rechargeCoin) +
// Number(addRefund.value.taskCoin)
// return !isNaN(sum) ? sum : 0
// })
// watch(calculatedAllGold, (newVal) => {
// addRefund.value.allCoin = newVal
// })
// const AAA = computed(() => {
// return addRefund.value.jwcode
// })
// watch(AAA, (newVal) => {})
// 退
// const refundType = [
// {
// value: '退',
// label: '退'
// }
// ]
// 退 // 退
const refundType = ref([]) const refundType = ref([])
@ -200,14 +206,17 @@ const getRefundTypes = async function () {
try { try {
// 退 // 退
const result = await API({ const result = await API({
// url: 'http://18.143.76.3:10704/', //退
url: 'http://18.143.76.3:10704/refund/refundType', //退
data: {} }) data: {} })
console.log('退款类型请求成功', result) console.log('退款类型请求成功', result)
// refundType
refundType.value = result.data.map(item => ({
value: item.value,
label: item.label
}))
//
if (Array.isArray(result.data)) {
// { value, label }
refundType.value = result.data.map(item => ({ value: item, label: item }));
} else {
console.error('退款类型数据格式错误', result)
ElMessage.error('退款类型数据格式错误,请联系管理员')
}
console.log('退款类型', refundType.value) console.log('退款类型', refundType.value)
} catch (error) { } catch (error) {
console.log('退款类型请求失败', error) console.log('退款类型请求失败', error)
@ -215,90 +224,117 @@ const getRefundTypes = async function () {
} }
// //
const goods = ref([])
const goodsName = ref([])
const getGoods = async function (jwcode) { const getGoods = async function (jwcode) {
trimJwCode(); trimJwCode();
//
if (!addRefund.value.jwcode) {
goodsName.value = []; //
return;
}
try { try {
// POST // POST
const result = await API({ const result = await API({
// url: 'http://39.101.133.168:8828/live_mall/api/product/all', // // url: 'http://39.101.133.168:8828/live_mall/api/product/all', //
url: 'http://18.143.76.3:10704/refund/selectGoods',
data: { data: {
jwcode: addRefund.value.jwcode,
market: adminData.value.market
jwcode: addRefund.value.jwcode
} }
}) })
console.log('请求成功', result) console.log('请求成功', result)
if (result.code === 0) {
ElMessage.error(result.msg)
//
if (Array.isArray(result.data)) {
// { value, label }
goodsName.value = result.data.map(item => ({
value: item.goodsName, // 使 value
label: item.goodsName,
key: item.goodsName,
//
permanentGold: (Number(item.permanentGold) || 0) / 100,
freeGold: (Number(item.freeGold) || 0) / 100,
taskGold: (Number(item.taskGold) || 0) / 100
}));
} else { } else {
//
goods.value = result.data
console.log('用户信息', goods.value)
//ElMessage.success(result.msg)
console.error('退款类型数据格式错误', result)
ElMessage.error('退款类型数据格式错误,请联系管理员')
} }
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
ElMessage.error('查询商品失败,请检查精网号是否正确') ElMessage.error('查询商品失败,请检查精网号是否正确')
//
goodsName.value = []; //
} }
} }
const calculatedRechargeGoods = computed(() => {
return (
+addRefund.value.freeCoin +
+addRefund.value.rechargeCoin +
+addRefund.value.taskCoin
)
//
const selectedGoodsGold = ref({
permanentGold: 0,
freeGold: 0,
taskGold: 0
}) })
watch(calculatedRechargeGoods, (newVal) => {
addRefund.value.allCoin = newVal
const handleSelectionChange = (selectedOption) => {
if (selectedOption) {
//
addRefund.value.goodsName = selectedOption.value;
//
addRefund.value.permanentGold = selectedOption.permanentGold || 0;
addRefund.value.freeGold = selectedOption.freeGold || 0;
addRefund.value.taskGold = selectedOption.taskGold || 0;
//
selectedGoodsGold.value.permanentGold = Number(selectedOption.permanentGold) || 0;
selectedGoodsGold.value.freeGold = Number(selectedOption.freeGold) || 0;
selectedGoodsGold.value.taskGold = Number(selectedOption.taskGold) || 0;
} else {
//
}
console.log('选择的商品', selectedOption);
}
//
const validateGoldInput = (type, value) => {
const maxValue = selectedGoodsGold.value[type];
const inputValue = Number(value);
if (isNaN(inputValue)) {
return 0;
}
return Math.min(inputValue, maxValue);
}
//
const handlePermanentGoldInput = (value) => {
addRefund.value.permanentGold = validateGoldInput('permanentGold', value);
}
//
const handleFreeGoldInput = (value) => {
addRefund.value.freeGold = validateGoldInput('freeGold', value);
}
//
const handleTaskGoldInput = (value) => {
addRefund.value.taskGold = validateGoldInput('taskGold', value);
}
//
const calculatedRechargeGoods = computed(() => {
const permanentGold = addRefund.value.permanentGold === '' ? 0 : +addRefund.value.permanentGold;
const freeGold = addRefund.value.freeGold === '' ? 0 : +addRefund.value.freeGold;
const taskGold = addRefund.value.taskGold === '' ? 0 : +addRefund.value.taskGold;
return permanentGold + freeGold + taskGold;
}) })
watch(calculatedRechargeGoods, (newVal) => { watch(calculatedRechargeGoods, (newVal) => {
addRefund.value.allCoin = newVal
addRefund.value.sumGold = newVal
console.log('计算的总金币', newVal) console.log('计算的总金币', newVal)
}) })
// //
//
const getProductByOrderCode = async function (item) {
try {
// POST
const result = await API({
url: '/refund/searchByOrderCode?orderCode=' + item,
data: {}
})
addRefund.value.contactId = result.data.detailyId
addRefund.value.refundGoods = result.data.productName
addRefund.value.orderCode = result.data.orderCode
addRefund.value.taskCoin = (result.data.taskCoin * -1) / 100
addRefund.value.freeCoin = (result.data.freeCoin * -1) / 100
addRefund.value.rechargeCoin = (result.data.rechargeCoin * -1) / 100
addRefund.value.allCoin =
(result.data.taskCoin * -1 +
result.data.freeCoin * -1 +
result.data.rechargeCoin * -1) /
100
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) => {
getProductByOrderCode(value)
console.log('选择的订单号', value)
const selectedItem = goods.value.find((item) => item.detailId === value)
}
// //
onMounted(async function () { onMounted(async function () {
await getAdminData() await getAdminData()
await getRefundTypes()
// await getGoods()
}) })
</script> </script>
@ -340,23 +376,23 @@ onMounted(async function () {
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="orderCode" label="商品名">
<el-form-item prop="goodsName" label="商品名">
<el-select <el-select
v-model="addRefund.orderCode"
v-model="addRefund.goodsName"
placeholder="请选择" placeholder="请选择"
style="width: 300px" style="width: 300px"
@change="handleSelectionChange" @change="handleSelectionChange"
> >
<el-option <el-option
v-for="item in goods"
:key="item.value"
:label="item.productName + item.orderCode"
:value="item.orderCode"
v-for="item in goodsName"
:key="item.key"
:label="item.label"
:value="item"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="typeR" label="退款方式:">
<el-form-item prop="refundModel" label="退款方式:">
<el-radio-group v-model="addRe.typeR"> <el-radio-group v-model="addRe.typeR">
<el-radio value="0" @change="addRe.typeR = '0'">全部退款</el-radio> <el-radio value="0" @change="addRe.typeR = '0'">全部退款</el-radio>
<el-radio value="1">部分退款</el-radio> <el-radio value="1">部分退款</el-radio>
@ -364,38 +400,41 @@ onMounted(async function () {
</el-form-item> </el-form-item>
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<el-form-item prop="rechargeCoin" label="永久金币" style="float: left">
<el-form-item prop="permanentGold" label="永久金币" style="float: left">
<el-input <el-input
v-model="addRefund.rechargeCoin"
v-model="addRefund.permanentGold"
style="width: 100px" style="width: 100px"
:disabled="addRe.typeR === '0' ? true : false" :disabled="addRe.typeR === '0' ? true : false"
@input="handlePermanentGoldInput($event)"
> >
</el-input> </el-input>
<p></p> <p></p>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
prop="freeCoin"
prop="freeGold"
label="免费金币" label="免费金币"
style="margin-left: -20px; float: left" style="margin-left: -20px; float: left"
> >
<el-input <el-input
v-model="addRefund.freeCoin"
v-model="addRefund.freeGold"
style="float: left; width: 100px" style="float: left; width: 100px"
:disabled="addRe.typeR === '0' ? true : false" :disabled="addRe.typeR === '0' ? true : false"
@input="handleFreeGoldInput($event)"
/> />
<p></p> <p></p>
</el-form-item> </el-form-item>
<el-form-item prop="taskCoin" label="任务金币" style="margin-left: -20px">
<el-form-item prop="taskGold" label="任务金币" style="margin-left: -20px">
<el-input <el-input
v-model="addRefund.taskCoin"
v-model="addRefund.taskGold"
style="float: left; width: 100px" style="float: left; width: 100px"
:disabled="addRe.typeR === '0' ? true : false" :disabled="addRe.typeR === '0' ? true : false"
@input="handleTaskGoldInput($event)"
/> />
<p></p> <p></p>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item prop="allCoin" label="退款金币总数">
<el-input disabled v-model="addRefund.allCoin" style="width: 100px">
<el-form-item prop="sumGold" label="退款金币总数">
<el-input disabled v-model="addRefund.sumGold" style="width: 100px">
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="remark" label="备注"> <el-form-item prop="remark" label="备注">
@ -408,10 +447,10 @@ onMounted(async function () {
type="textarea" type="textarea"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="commitName" label="提交人">
<el-form-item prop="adminName" label="提交人">
<el-input <el-input
style="width: 300px" style="width: 300px"
:value="adminData.name"
:value="adminData.adminName"
disabled disabled
placeholder="提交人姓名" placeholder="提交人姓名"
/> />

57
src/views/refund/coinRefundDetail.vue

@ -76,14 +76,17 @@ const getRefundTypes = async function () {
try { try {
// 退 // 退
const result = await API({ const result = await API({
// url: 'http://18.143.76.3:10704/', //退
url: 'http://18.143.76.3:10704/refund/refundType', //退
data: {} }) data: {} })
console.log('退款类型请求成功', result) console.log('退款类型请求成功', result)
// refundType
refundType.value = result.data.map(item => ({
value: item.value,
label: item.label
}))
//
if (Array.isArray(result.data)) {
// { value, label }
refundType.value = result.data.map(item => ({ value: item, label: item }));
} else {
console.error('退款类型数据格式错误', result)
ElMessage.error('退款类型数据格式错误,请联系管理员')
}
console.log('退款类型', refundType.value) console.log('退款类型', refundType.value)
} catch (error) { } catch (error) {
console.log('退款类型请求失败', error) console.log('退款类型请求失败', error)
@ -142,13 +145,21 @@ const getSelectBy = async function (val) {
const data = resultTotalGold.data const data = resultTotalGold.data
console.log('获取到的金币数据:', data) console.log('获取到的金币数据:', data)
permanentGolds.value = Number(data.permanentGolds) || 0
freeGolds.value = Number(data.freeGolds) || 0
taskGolds.value = Number(data.taskGolds) || 0
permanentGolds.value = (Number(data.permanentGolds) || 0)
freeGolds.value = (Number(data.freeGolds) || 0)
taskGolds.value = (Number(data.taskGolds) || 0)
} }
// //
tableData.value = result.data.list tableData.value = result.data.list
// 100
tableData.value = tableData.value.map(item => ({
...item,
sumGold: (Number(item.sumGold) || 0) / 100,
permanentGold: (Number(item.permanentGold) || 0) / 100,
freeGold: (Number(item.freeGold) || 0) / 100,
taskGold: (Number(item.taskGold) || 0) / 100
}))
console.log('tableData', tableData.value) console.log('tableData', tableData.value)
// //
total.value = result.data.total total.value = result.data.total
@ -291,10 +302,15 @@ const getGoods = async function () {
}) })
// //
console.log('请求成功product', result) console.log('请求成功product', result)
//
goods.value = result.data
console.log('地区', market.value)
if (Array.isArray(result.data)) {
// null
const validGoods = result.data.filter(item => item && item.trim() !== '');
// 使 value label
goods.value = validGoods.map(item => ({
value: item,
label: item
}));
}
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
// //
@ -334,6 +350,7 @@ onMounted(async function () {
await getSelectBy() await getSelectBy()
await getMarket() await getMarket()
await getRefundTypes() await getRefundTypes()
await getGoods()
}) })
// //
const sortField = ref('') const sortField = ref('')
@ -418,8 +435,8 @@ const handleCurrentChange = function (val) {
<el-option <el-option
v-for="item in goods" v-for="item in goods"
:key="item.value" :key="item.value"
:label="item.name"
:value="item.name"
:label="item.label"
:value="item.value"
/> />
</el-select> </el-select>
</div> </div>
@ -475,10 +492,10 @@ const handleCurrentChange = function (val) {
<el-col> <el-col>
<el-card> <el-card>
<div> <div>
退款金币总数{{ Math.abs(sumGold) }}永久金币{{
Math.abs(permanentGolds)
}}免费金币{{ Math.abs(freeGolds) }}任务金币{{
Math.abs(taskGolds)
退款金币总数{{ Math.abs(sumGold) / 100 }}永久金币{{
Math.abs(permanentGolds) / 100
}}免费金币{{ Math.abs(freeGolds) / 100 }}任务金币{{
Math.abs(taskGolds) / 100
}} }}
</div> </div>
<!-- 设置表格容器的高度和滚动样式 --> <!-- 设置表格容器的高度和滚动样式 -->
@ -527,7 +544,7 @@ const handleCurrentChange = function (val) {
</el-table-column> </el-table-column>
<el-table-column prop="refundModel" label="退款方式" width="110px"> <el-table-column prop="refundModel" label="退款方式" width="110px">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 1 ? '全部退款' : scope.row.refundModel === 2 ? '部分退款' : '' }}
{{ scope.row.refundModel === 0 ? '全部退款' : scope.row.refundModel === 1 ? '部分退款' : '' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column

22
src/views/usergold/clientCountBalance.vue

@ -311,10 +311,10 @@ const handleCurrentChange = function (val) {
<el-col> <el-col>
<el-card> <el-card>
<div> <div>
金币总数{{ Math.abs(goldtotal) }}
永久金币{{ Math.abs(permanentGold) }}
免费金币{{ Math.abs(freeGold) }}
任务金币{{ Math.abs(taskGold) }}
金币总数{{ Math.abs(goldtotal) /100}}
永久金币{{ Math.abs(permanentGold) /100}}
免费金币{{ Math.abs(freeGold) /100}}
任务金币{{ Math.abs(taskGold) /100}}
</div> </div>
<!-- 设置表格容器的高度和滚动样式 --> <!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 626px; overflow-y: auto"> <div style="height: 626px; overflow-y: auto">
@ -351,7 +351,7 @@ const handleCurrentChange = function (val) {
(scope.row.currentPermanentGold + (scope.row.currentPermanentGold +
scope.row.currentFreeJune + scope.row.currentFreeJune +
scope.row.currentFreeDecember + scope.row.currentFreeDecember +
scope.row.currentTaskGold)
scope.row.currentTaskGold) /100
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
@ -362,7 +362,7 @@ const handleCurrentChange = function (val) {
width="110" width="110"
> >
<template #default="scope"> <template #default="scope">
<span>{{ Math.abs(scope.row.currentPermanentGold) }}</span>
<span>{{ Math.abs(scope.row.currentPermanentGold) /100 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -372,7 +372,7 @@ const handleCurrentChange = function (val) {
width="110" width="110"
> >
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.currentFreeJune }}</span>
<span>{{ scope.row.currentFreeJune /100 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -382,7 +382,7 @@ const handleCurrentChange = function (val) {
width="110" width="110"
> >
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.currentFreeDecember }}</span>
<span>{{ scope.row.currentFreeDecember /100 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -392,7 +392,7 @@ const handleCurrentChange = function (val) {
width="130" width="130"
> >
<template #default="scope"> <template #default="scope">
<span>{{ Math.abs(scope.row.currentTaskGold) }}</span>
<span>{{ Math.abs(scope.row.currentTaskGold) /100 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="rcoin" label="历史金币" width="150"> <el-table-column prop="rcoin" label="历史金币" width="150">
@ -402,13 +402,13 @@ const handleCurrentChange = function (val) {
(scope.row.sumPermanentGold || 0) + (scope.row.sumPermanentGold || 0) +
(scope.row.sumFreeJune || 0) + (scope.row.sumFreeJune || 0) +
(scope.row.sumFreeDecember || 0) + (scope.row.sumFreeDecember || 0) +
(scope.row.sumTaskGold || 0)
(scope.row.sumTaskGold || 0) /100
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="sumConsume" label="历史消费" width="150"> <el-table-column prop="sumConsume" label="历史消费" width="150">
<template #default="scope"> <template #default="scope">
<span>{{ Math.abs(scope.row.sumConsume) }}</span>
<span>{{ Math.abs(scope.row.sumConsume) /100 }}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

22
src/views/usergold/clientCountDetail.vue

@ -255,7 +255,7 @@ const sumGoldTotal = computed(() => {
const calculateFreeGold = (row) => { const calculateFreeGold = (row) => {
const freeJune = row.freeJune || 0; const freeJune = row.freeJune || 0;
const freeDecember = row.freeDecember || 0; const freeDecember = row.freeDecember || 0;
return (freeJune + freeDecember);
return (freeJune + freeDecember) ;
}; };
// //
@ -287,7 +287,7 @@ const checkNumber = function () {
// //
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '请检查输入内容'
message: '输入非法'
}) })
} }
} }
@ -447,10 +447,10 @@ onMounted(async function () {
<el-col> <el-col>
<el-card> <el-card>
<div> <div>
金币总数{{ Math.abs(sumGoldTotal) }}
永久金币{{ Math.abs( permanentGold) }}
免费金币{{ Math.abs(totalFreeGold) }}
任务金币{{ Math.abs(taskGold) }}
金币总数{{ Math.abs(sumGoldTotal) / 100}}
永久金币{{ Math.abs( permanentGold) / 100}}
免费金币{{ Math.abs(totalFreeGold) / 100}}
任务金币{{ Math.abs(taskGold) / 100}}
</div> </div>
<div style="height: 584px; overflow-y: auto"> <div style="height: 584px; overflow-y: auto">
<el-table <el-table
@ -511,8 +511,8 @@ onMounted(async function () {
<span> <span>
{{ {{
scope.row.type === 1 // scope.row.type === 1 //
? - scope.row.sumGold
: scope.row.sumGold
? - scope.row.sumGold /100
: scope.row.sumGold /100
}} }}
</span> </span>
</template> </template>
@ -525,7 +525,7 @@ onMounted(async function () {
width="110" width="110"
> >
<template #default="scope"> <template #default="scope">
<span>{{ scope.row. permanentGold }}</span>
<span>{{ scope.row. permanentGold /100 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -534,7 +534,7 @@ onMounted(async function () {
width="110" width="110"
> >
<template #default="scope"> <template #default="scope">
<span>{{ calculateFreeGold(scope.row) }}</span>
<span>{{ calculateFreeGold(scope.row) /100}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -544,7 +544,7 @@ onMounted(async function () {
width="110" width="110"
> >
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.taskGold }}</span>
<span>{{ scope.row.taskGold /100}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="adminName" label="提交人" width="110" /> <el-table-column prop="adminName" label="提交人" width="110" />

Loading…
Cancel
Save