Browse Source

Merge branch 'lihuilin/feature-20250815155204-金币优化' into milestone-20250815-金币优化

milestone-20250815-金币优化
lihuilin 4 weeks ago
parent
commit
8dc4cfc111
  1. 260
      src/views/refund/gold/addCoinRefund.vue

260
src/views/refund/gold/addCoinRefund.vue

@ -1,19 +1,15 @@
<script setup> <script setup>
import { computed, onMounted, reactive, ref, watch } from 'vue'
import { computed, reactive, ref, watch } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import API from '@/util/http.js' import API from '@/util/http.js'
import moment from 'moment'
import { useAdminStore } from "@/store/index.js"; import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js" import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
import { ta } from 'element-plus/es/locales.mjs';
import { e } from 'mathjs';
const adminStore = useAdminStore(); const adminStore = useAdminStore();
const { adminData, menuTree } = storeToRefs(adminStore); const { adminData, menuTree } = storeToRefs(adminStore);
const addRe = ref({
typeR: '0'
})
const tableData = ref([]) const tableData = ref([])
const pagination = ref({ const pagination = ref({
pageNum: 1, pageNum: 1,
@ -27,12 +23,13 @@ const trimJwCode = () => {
addRefund.value.jwcode = addRefund.value.jwcode.replace(/\s/g, ''); addRefund.value.jwcode = addRefund.value.jwcode.replace(/\s/g, '');
} }
} }
// 退 // 退
const addRefund = ref({ const addRefund = ref({
jwcode: '', jwcode: '',
goodsName: '', goodsName: '',
refundType: '', refundType: '',
refundModel: 0,
refundModel: 0, // 0:退, 1:退
permanentGold: '', permanentGold: '',
freeGold: '', freeGold: '',
taskGold: '', taskGold: '',
@ -58,13 +55,22 @@ const cancel = function () {
adminId: adminData.value.id, adminId: adminData.value.id,
orderCode: '', orderCode: '',
} }
addRe.value.typeR = '0'
} }
const getRefund = async function () { const getRefund = async function () {
if (!addRefund.value.jwcode) {
ElMessage.error('请输入精网号')
return
}
addRefund.value.orderCode = ''
addRefund.value.goodsName = ''
addRefund.value.permanentGold = ''
addRefund.value.freeGold = ''
addRefund.value.taskGold = ''
let type = null let type = null
if(addRefund.value.refundType === '商品退款'){
if (addRefund.value.refundType === '商品退款') {
type = 1 type = 1
}else{
} else {
type = 0 type = 0
} }
const params = { const params = {
@ -79,13 +85,22 @@ const getRefund = async function () {
} }
try { try {
const res = await API({ const res = await API({
url: '/goldDetail/getGoldDetail',
data: {
...params
}
})
tableData.value = res.data.list
pagination.value.total = res.data.total
url: '/goldDetail/getGoldDetail',
data: {
...params
}
})
tableData.value = res.data.list
pagination.value.total = res.data.total
if (Array.isArray(res.data.list) && res.data.list.length > 0) {
orderCodes.value = res.data.list.map(item => ({
label: item.orderCode,
value: item.orderCode
}))
console.log("看看订单号们", orderCodes.value)
} else {
ElMessage.info("未查询到相关订单")
}
} catch (error) { } catch (error) {
console.log('goldDetail有错误', error) console.log('goldDetail有错误', error)
ElMessage.error('请求失败') ElMessage.error('请求失败')
@ -96,9 +111,6 @@ const getRefund = async function () {
// 退 // 退
const add = async function () { const add = async function () {
try { try {
// refundModel
addRefund.value.refundModel = parseInt(addRe.value.typeR);
if (addRefund.value.refundType === '商品退款') { if (addRefund.value.refundType === '商品退款') {
addRefund.value.type = 1 addRefund.value.type = 1
} else { } else {
@ -107,11 +119,12 @@ const add = async function () {
// 100 // 100
const processedRefund = { const processedRefund = {
...addRefund.value, ...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
permanentGold: addRefund.value.permanentGold * 100,
freeGold: addRefund.value.freeGold * 100,
taskGold: addRefund.value.taskGold * 100,
sumGold: addRefund.value.sumGold * 100
} }
console.log('提交的退款信息', processedRefund)
addDisabled.value = true addDisabled.value = true
// POST // POST
const result = await API({ const result = await API({
@ -130,38 +143,27 @@ const add = async function () {
cancel() cancel()
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
//
ElMessage.error('请求失败,请重试')
addDisabled.value = false
} }
} }
//
//
const addDisabled = ref(false) const addDisabled = ref(false)
// 退 // 退
const addBefore = () => { const addBefore = () => {
Ref.value.validate(async (valid) => { Ref.value.validate(async (valid) => {
if (valid) { if (valid) {
// try {
// await getUser(addRefund.value.jwcode);
// if (!user.value.jwcode) {
// ElMessage.error('');
// return;
// }
// } catch (error) {
// ElMessage.error('');
// return;
// }
ElMessageBox.confirm('确认退款?') ElMessageBox.confirm('确认退款?')
.then(() => { .then(() => {
add() add()
console.log('退款成功')
}) })
.catch(() => { .catch(() => {
console.log('取消退款') console.log('取消退款')
}) })
} else { } else {
//
//
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '请检查输入内容' message: '请检查输入内容'
@ -171,10 +173,7 @@ const addBefore = () => {
} }
// //
//
const Ref = ref(null) const Ref = ref(null)
const startChange = (val) => {
}
const validateJwCode = (rule, value, callback) => { const validateJwCode = (rule, value, callback) => {
if (!value) { if (!value) {
callback(new Error('精网号不能为空')); callback(new Error('精网号不能为空'));
@ -211,7 +210,6 @@ const rules = reactive({
] ]
}) })
// //
const cancelExceptJwcode = function () { const cancelExceptJwcode = function () {
addRefund.value = { addRefund.value = {
@ -226,7 +224,6 @@ const cancelExceptJwcode = function () {
remark: '', remark: '',
adminId: adminData.value.id adminId: adminData.value.id
} }
addRe.value.typeR = '0'
} }
// //
@ -292,86 +289,49 @@ const refundType = ref([
{ value: '金币退款', label: '金币退款' } { value: '金币退款', label: '金币退款' }
]); ]);
//
const goodsName = ref([]) //
const orderCodes = ref([]) //
const getGoods = async function (jwcode) {
trimJwCode();
if (!/^\d{1,9}$/.test(jwcode)) {
ElMessage.warning('精网号必须为数字且不超过九位');
return;
}
//
const goodsName = ref([])
const orderCodes = ref([])
if (!addRefund.value.jwcode) {
goodsName.value = []
orderCodes.value = []
return;
}
console.log('=======================', addRefund.value.refundType)
if (addRefund.value.refundType === '商品退款') {
addRefund.value.type = 1
} else {
addRefund.value.type = 0
}
try {
const result = await API({
url: '/refund/selectGoods',
data: {
jwcode: addRefund.value.jwcode,
type: addRefund.value.type
//
const handleOrderChange = (orderCode) => {
addRefund.value.goodsName = ''
addRefund.value.permanentGold = ''
addRefund.value.freeGold = ''
addRefund.value.taskGold = ''
const order = tableData.value.find(item => item.orderCode === orderCode)
if (order) {
addRefund.value.goodsName = order.goodsName
if (addRefund.value.refundType === '金币退款') {
selectedGoodsGold.value = {
permanentGold: Number(order.permanentGold) || 0,
freeGold: Number(order.freeGold) || 0,
taskGold: Number(order.taskGold) || 0
} }
})
if (Array.isArray(result.data)) {
//
goodsName.value = result.data.map(item => ({
orderCode: item.orderCode,
goodsName: item.goodsName,
permanentGold: Math.abs(Number((item.permanentGold) || 0) / 100),
freeGold: Math.abs(Number((item.freeGold) || 0) / 100),
taskGold: Math.abs(Number((item.taskGold) || 0) / 100),
}))
// [{label, value}]
orderCodes.value = result.data.map(item => ({
label: item.orderCode,
value: item.orderCode
}))
} else { } else {
ElMessage.error('商品数据格式错误,请联系管理员')
selectedGoodsGold.value = {
permanentGold: -Number(order.permanentGold) || 0,
freeGold: -Number(order.freeGold) || 0,
taskGold: -Number(order.taskGold) || 0
}
} }
} catch (error) {
console.log('请求失败', error)
ElMessage.error('查询商品失败,请检查精网号是否正确')
goodsName.value = []
orderCodes.value = []
}
}
//
const handleOrderChange = (orderCode) => {
const selected = goodsName.value.find(item => item.orderCode === orderCode)
if (selected) {
addRefund.value.goodsName = selected.goodsName
// 退退
if (addRe.value.typeR === '0') {
addRefund.value.permanentGold = selected.permanentGold
addRefund.value.freeGold = selected.freeGold
addRefund.value.taskGold = selected.taskGold
// 退
if (addRefund.value.refundModel === 0) {
addRefund.value.permanentGold = selectedGoodsGold.value.permanentGold.toString()
addRefund.value.freeGold = selectedGoodsGold.value.freeGold.toString()
addRefund.value.taskGold = selectedGoodsGold.value.taskGold.toString()
} }
//
} else {
addRefund.value.goodsName = ''
selectedGoodsGold.value = { selectedGoodsGold.value = {
permanentGold: selected.permanentGold,
freeGold: selected.freeGold,
taskGold: selected.taskGold
permanentGold: 0,
freeGold: 0,
taskGold: 0
} }
} else {
restGoods()
} }
} }
// //
const selectedGoodsGold = ref({ const selectedGoodsGold = ref({
permanentGold: 0, permanentGold: 0,
@ -388,15 +348,13 @@ const restGoods = () => {
addRefund.value.taskGold = '' addRefund.value.taskGold = ''
} }
// 退退退退
// 退
const handleRefundModelChange = () => { const handleRefundModelChange = () => {
if (addRe.value.typeR === '0') {
// 退
addRefund.value.permanentGold = selectedGoodsGold.value.permanentGold;
addRefund.value.freeGold = selectedGoodsGold.value.freeGold;
addRefund.value.taskGold = selectedGoodsGold.value.taskGold;
// 退
if (addRefund.value.refundModel === 0) {
addRefund.value.permanentGold = selectedGoodsGold.value.permanentGold.toString();
addRefund.value.freeGold = selectedGoodsGold.value.freeGold.toString();
addRefund.value.taskGold = selectedGoodsGold.value.taskGold.toString();
} }
} }
@ -419,6 +377,7 @@ const handleSelectionChange = (selectedOption) => {
} }
console.log('选择的商品', selectedOption); console.log('选择的商品', selectedOption);
} }
// //
const handleGoldInput = (type, value) => { const handleGoldInput = (type, value) => {
// 1. // 1.
@ -485,7 +444,6 @@ const calculatedRechargeGoods = computed(() => {
watch(calculatedRechargeGoods, (newVal) => { watch(calculatedRechargeGoods, (newVal) => {
addRefund.value.sumGold = newVal addRefund.value.sumGold = newVal
console.log('计算的总金币', newVal)
}) })
const handlePageSizeChange = function (val) { const handlePageSizeChange = function (val) {
pagination.value.pageSize = val pagination.value.pageSize = val
@ -495,7 +453,6 @@ const handleCurrentChange = function (val) {
pagination.value.pageNum = val pagination.value.pageNum = val
getRefund() getRefund()
} }
</script> </script>
<template> <template>
@ -517,7 +474,7 @@ const handleCurrentChange = function (val) {
</el-form-item> </el-form-item>
<el-form-item prop="orderCode" label="订单号"> <el-form-item prop="orderCode" label="订单号">
<el-select v-model="addRefund.orderCode" placeholder="请选择订单号" style="width: 220px;" clearable filterable <el-select v-model="addRefund.orderCode" placeholder="请选择订单号" style="width: 220px;" clearable filterable
@change="handleOrderChange">
@change="handleOrderChange">
<el-option v-for="(item, index) in orderCodes" :key="index" :label="item.label" :value="item.value" /> <el-option v-for="(item, index) in orderCodes" :key="index" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -526,31 +483,33 @@ const handleCurrentChange = function (val) {
<el-input v-model="addRefund.goodsName" style="width: 220px" disabled /> <el-input v-model="addRefund.goodsName" style="width: 220px" disabled />
</el-form-item> </el-form-item>
<el-form-item prop="refundModel" label="退款方式:"> <el-form-item prop="refundModel" label="退款方式:">
<el-radio-group v-model="addRe.typeR" @change="handleRefundModelChange">
<el-radio value="0">全部退款</el-radio>
<el-radio value="1">部分退款</el-radio>
<el-radio-group v-model="addRefund.refundModel" @change="handleRefundModelChange">
<el-radio :value="0">全部退款</el-radio>
<el-radio :value="1">部分退款</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item prop="permanentGold" label="永久金币"> <el-form-item prop="permanentGold" label="永久金币">
<el-input v-model="addRefund.permanentGold" style="width: 220px"
:disabled="addRe.typeR === '0' ? true : false" @input="handlePermanentGoldInput($event)" type="number">
<el-input v-model="addRefund.permanentGold" style="width: 220px" :disabled="addRefund.refundModel === 0"
@input="handlePermanentGoldInput($event)" type="number">
</el-input>&nbsp;&nbsp; </el-input>&nbsp;&nbsp;
</el-form-item>
<template>
</template>
</el-form-item>
<el-form-item prop="freeGold" label="免费金币"> <el-form-item prop="freeGold" label="免费金币">
<el-input v-model="addRefund.freeGold" style="float: left; width: 220px" <el-input v-model="addRefund.freeGold" style="float: left; width: 220px"
:disabled="addRe.typeR === '0' ? true : false" @input="handleFreeGoldInput($event)" type="number" />
:disabled="addRefund.refundModel === 0" @input="handleFreeGoldInput($event)" type="number" />
&nbsp;&nbsp; &nbsp;&nbsp;
</el-form-item> </el-form-item>
<div> <div>
<el-form-item prop="taskGold" label="任务金币"> <el-form-item prop="taskGold" label="任务金币">
<el-input v-model="addRefund.taskGold" style="float: left; width: 220px" <el-input v-model="addRefund.taskGold" style="float: left; width: 220px"
:disabled="addRe.typeR === '0' ? true : false" @input="handleTaskGoldInput($event)" type="number" />
:disabled="addRefund.refundModel === 0" @input="handleTaskGoldInput($event)" type="number" />
&nbsp;&nbsp; &nbsp;&nbsp;
</el-form-item> </el-form-item>
</div> </div>
@ -561,7 +520,6 @@ const handleCurrentChange = function (val) {
</el-form-item> </el-form-item>
</div> </div>
<div> <div>
<el-form-item prop="remark" label="备注"> <el-form-item prop="remark" label="备注">
<el-input v-model="addRefund.remark" style="width: 220px" :rows="3" maxlength="100" show-word-limit <el-input v-model="addRefund.remark" style="width: 220px" :rows="3" maxlength="100" show-word-limit
type="textarea" /> type="textarea" />
@ -586,12 +544,12 @@ const handleCurrentChange = function (val) {
<span style="width:5vw;">姓名</span> <span style="width:5vw;">姓名</span>
<span style="width:10vw;">{{ user.name }}</span> <span style="width:10vw;">{{ user.name }}</span>
<span style="width:10vw;">当前金币总数</span> <span style="width:10vw;">当前金币总数</span>
<span style="color: #2fa1ff;width: 5vw;" v-if="user.nowSumGold !== undefined">{{
<span style="color: #2fa1ff;width: 25vw;" v-if="user.nowSumGold !== undefined">{{
user.nowSumGold user.nowSumGold
}}</span> }}</span>
</div> </div>
</el-row> </el-row>
<el-row style="height: 2vh;width: 100%;">
<el-row style="height: 3vh;width: 100%;">
<span style="height:3vh;color: #b1b1b1;font-size: small;margin-left:50%;" <span style="height:3vh;color: #b1b1b1;font-size: small;margin-left:50%;"
v-if="user.nowPermanentGold !== undefined">(永久金币:{{ v-if="user.nowPermanentGold !== undefined">(永久金币:{{
user.nowPermanentGold user.nowPermanentGold
@ -610,7 +568,7 @@ const handleCurrentChange = function (val) {
</div> </div>
</el-row> </el-row>
<el-row> <el-row>
<span style="height:3vh;color: #b1b1b1;font-size: small;margin-left:60%;">(仅统计2025-01-01后的数据)</span>
<span style="height:3vh;color: #b1b1b1;font-size: small;margin-left:50%;">(仅统计2025-01-01后的数据)</span>
</el-row> </el-row>
<!-- 第四行所属门店 --> <!-- 第四行所属门店 -->
@ -629,10 +587,10 @@ const handleCurrentChange = function (val) {
<el-table :data="tableData" style="height:43vh;width:50vw"> <el-table :data="tableData" style="height:43vh;width:50vw">
<el-table-column type="index" label="序号" width="80"> <el-table-column type="index" label="序号" width="80">
<template #default="scope"> <template #default="scope">
<span>{{
scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize
}}</span>
</template>
<span>{{
scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize
}}</span>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="type" label="类型" width="100"> <el-table-column prop="type" label="类型" width="100">
<template #default="{ row }"> <template #default="{ row }">
@ -643,22 +601,22 @@ const handleCurrentChange = function (val) {
<el-table-column prop="orderCode" label="订单号" width="200px" show-overflow-tooltip /> <el-table-column prop="orderCode" label="订单号" width="200px" show-overflow-tooltip />
<el-table-column prop="permanentGold" label="永久金币" width="120"> <el-table-column prop="permanentGold" label="永久金币" width="120">
<template #default="{ row }"> <template #default="{ row }">
{{ row.permanentGold / 100 }}
{{ row.permanentGold }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="freeGold" label="免费金币" width="120"> <el-table-column prop="freeGold" label="免费金币" width="120">
<template #default="{ row }"> <template #default="{ row }">
{{ (row.freeGold) / 100 }}
{{ row.freeGold }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="taskGold" label="任务金币" width="120"> <el-table-column prop="taskGold" label="任务金币" width="120">
<template #default="{ row }"> <template #default="{ row }">
{{ row.taskGold / 100 }}
{{ row.taskGold }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="isRefund" label="订单状态" width="120"> <el-table-column prop="isRefund" label="订单状态" width="120">
<template #default="{ row }"> <template #default="{ row }">
{{ row.isRefund === '1' ? '已退款' : '未处理' }}
{{ row.isRefund === 1 ? '已退款' : '未处理' }}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -692,7 +650,6 @@ p {
.left { .left {
width: 35vw; width: 35vw;
display: flex; display: flex;
background-color: aliceblue;
.add-form { .add-form {
width: 100%; width: 100%;
@ -701,7 +658,7 @@ p {
} }
.right-up { .right-up {
width: 35vw;
width: 50vw;
height: 20vh; height: 20vh;
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -709,13 +666,14 @@ p {
margin-left: 5vw; margin-left: 5vw;
.customer-info { .customer-info {
width: 35vw;
height: 19vh;
height: 21vh;
padding-left: 5%; padding-left: 5%;
display: flex;
align-items: center;
.line { .line {
display: flex; display: flex;
height: 2vh;
height: 3vh;
} }
} }
} }

Loading…
Cancel
Save