|
|
@ -1,10 +1,6 @@ |
|
|
|
<script setup> |
|
|
|
import {onMounted, 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 {computed, onMounted, reactive, ref, watch} from 'vue' |
|
|
|
import {ElMessage, ElMessageBox} from 'element-plus' |
|
|
|
import API from '@/util/http.js' |
|
|
|
import moment from 'moment' |
|
|
|
// import _ from 'lodash' |
|
|
@ -44,7 +40,9 @@ const addRefund = ref({ |
|
|
|
taskGold: '', |
|
|
|
sumGold: 0, |
|
|
|
remark: '', |
|
|
|
adminId: null |
|
|
|
adminId: null, |
|
|
|
orderCode: '' |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
// 取消按钮 |
|
|
@ -59,7 +57,8 @@ const cancel = function () { |
|
|
|
taskGold: '', |
|
|
|
sumGold: 0, |
|
|
|
remark: '', |
|
|
|
adminId: adminData.value.id |
|
|
|
adminId: adminData.value.id, |
|
|
|
orderCode: '', |
|
|
|
} |
|
|
|
addRe.value.typeR = '0' |
|
|
|
} |
|
|
@ -157,7 +156,9 @@ const validateJwCode = (rule, value, callback) => { |
|
|
|
const rules = reactive({ |
|
|
|
jwcode: [{required: true, validator: validateJwCode, trigger: 'blur'}], |
|
|
|
refundType: [{required: true, message: '请选择退款类型', trigger: 'blur'}], |
|
|
|
goodsName: [{required: true, message: '请选择退款商品', trigger: 'blur'}], |
|
|
|
goodsName: [{required: false, message: '请选择退款商品', trigger: 'blur'}], |
|
|
|
// 订单号 |
|
|
|
orderCode: [{required: true, message: '请输入订单号', trigger: 'blur'}], |
|
|
|
taskGold: [{required: true, message: '请输入任务金币', trigger: 'blur'}], |
|
|
|
freeGold: [{required: true, message: '请输入免费金币', trigger: 'blur'}], |
|
|
|
permanentGold: [ |
|
|
@ -223,6 +224,8 @@ const getUser = async function (jwcode) { |
|
|
|
}) |
|
|
|
console.log('请求成功', result) |
|
|
|
|
|
|
|
// 重置订单信息 |
|
|
|
restGoods() |
|
|
|
//在此处错误逻辑的提示做了注释,在后续商品查询接口返回错误时,提示信息会显示在弹窗中 |
|
|
|
if (result.code === 0) { |
|
|
|
ElMessage.error(result.msg); |
|
|
@ -277,55 +280,77 @@ const refundType = ref([{value: '商品退款', label: '商品退款'}]); |
|
|
|
|
|
|
|
|
|
|
|
// 根据精网号查询商品 |
|
|
|
const goodsName = ref([]) |
|
|
|
const goodsName = ref([]) // 存储所有商品信息 |
|
|
|
const orderCodes = ref([]) // 订单号下拉 |
|
|
|
|
|
|
|
const getGoods = async function (jwcode) { |
|
|
|
trimJwCode(); |
|
|
|
// 验证精网号 |
|
|
|
|
|
|
|
// 验证精网号是否为数字 |
|
|
|
if (!/^\d{1,9}$/.test(jwcode)) { |
|
|
|
ElMessage.warning('精网号必须为数字且不超过九位'); |
|
|
|
|
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 只有精网号存在时才发送请求 |
|
|
|
if (!addRefund.value.jwcode) { |
|
|
|
goodsName.value = []; // 清空商品数据 |
|
|
|
goodsName.value = [] |
|
|
|
orderCodes.value = [] |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
// 发送POST请求 |
|
|
|
const result = await API({ |
|
|
|
url: '/refund/selectGoods', |
|
|
|
data: { |
|
|
|
jwcode: addRefund.value.jwcode |
|
|
|
} |
|
|
|
data: { jwcode: addRefund.value.jwcode } |
|
|
|
}) |
|
|
|
console.log('请求成功', result) |
|
|
|
// 检查返回的数据是否为数组 |
|
|
|
|
|
|
|
if (Array.isArray(result.data)) { |
|
|
|
// 将字符串数组转换为 { value, label } 格式 |
|
|
|
// 存储完整商品数据 |
|
|
|
goodsName.value = result.data.map(item => ({ |
|
|
|
value: item.goodsName, // 使用商品名称作为 value |
|
|
|
label: item.goodsName, |
|
|
|
key: item.goodsName, |
|
|
|
// 保留其他字段 |
|
|
|
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 |
|
|
|
})); |
|
|
|
taskGold: Math.abs(Number(item.taskGold) || 0) / 100, |
|
|
|
})) |
|
|
|
|
|
|
|
// 转换订单号数组 [{label, value}] |
|
|
|
orderCodes.value = result.data.map(item => ({ |
|
|
|
label: item.orderCode, |
|
|
|
value: item.orderCode |
|
|
|
})) |
|
|
|
} else { |
|
|
|
console.error('退款类型数据格式错误', result) |
|
|
|
ElMessage.error('退款类型数据格式错误,请联系管理员') |
|
|
|
ElMessage.error('商品数据格式错误,请联系管理员') |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
console.log('请求失败', error) |
|
|
|
ElMessage.error('查询商品失败,请检查精网号是否正确') |
|
|
|
goodsName.value = []; // 请求失败时清空商品数据 |
|
|
|
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 |
|
|
|
} |
|
|
|
// 记录选中商品金币 |
|
|
|
selectedGoodsGold.value = { |
|
|
|
permanentGold: selected.permanentGold, |
|
|
|
freeGold: selected.freeGold, |
|
|
|
taskGold: selected.taskGold |
|
|
|
} |
|
|
|
} else { |
|
|
|
addRefund.value.goodsName = '' |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 存储选中商品的金币花费信息 |
|
|
|
const selectedGoodsGold = ref({ |
|
|
|
permanentGold: 0, |
|
|
@ -333,6 +358,16 @@ const selectedGoodsGold = ref({ |
|
|
|
taskGold: 0 |
|
|
|
}) |
|
|
|
|
|
|
|
// 重置订单信息 |
|
|
|
const restGoods = () => { |
|
|
|
addRefund.value.orderCode = '' |
|
|
|
addRefund.value.goodsName = '' |
|
|
|
addRefund.value.permanentGold = '' |
|
|
|
addRefund.value.freeGold = '' |
|
|
|
addRefund.value.taskGold = '' |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 处理退款方式切换,当部分退款切换全部退款时,退款金额应自动重新填充 |
|
|
|
const handleRefundModelChange = () => { |
|
|
|
if (addRe.value.typeR === '0') { |
|
|
@ -430,7 +465,9 @@ watch(calculatedRechargeGoods, (newVal) => { |
|
|
|
addRefund.value.sumGold = newVal |
|
|
|
console.log('计算的总金币', newVal) |
|
|
|
}) |
|
|
|
// 绑定两个数据 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 挂载 |
|
|
|
onMounted(async function () { |
|
|
@ -455,13 +492,29 @@ onMounted(async function () { |
|
|
|
<el-option v-for="item in refundType" :key="item.value" :label="item.label" :value="item.value"/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="goodsName" label="商品名"> |
|
|
|
<el-select v-model="addRefund.goodsName" placeholder="请选择" style="width: 220px" |
|
|
|
@change="handleSelectionChange"> |
|
|
|
<el-option v-for="item in goodsName" :key="item.key" :label="item.label" :value="item"/> |
|
|
|
<el-form-item prop="orderCode" label="订单号"> |
|
|
|
<el-select |
|
|
|
v-model="addRefund.orderCode" |
|
|
|
placeholder="请选择订单号" |
|
|
|
style="width: 220px;" |
|
|
|
clearable |
|
|
|
filterable |
|
|
|
@change="handleOrderChange" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="(item, index) in orderCodes" |
|
|
|
:key="index" |
|
|
|
:label="item.label" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item prop="goodsName" label="商品名"> |
|
|
|
<el-input v-model="addRefund.goodsName" style="width: 220px" disabled /> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
|
|
<el-form-item prop="refundModel" label="退款方式:"> |
|
|
|
<el-radio-group v-model="addRe.typeR" @change="handleRefundModelChange"> |
|
|
|
<el-radio value="0">全部退款</el-radio> |
|
|
@ -510,7 +563,7 @@ onMounted(async function () { |
|
|
|
</el-form> |
|
|
|
|
|
|
|
<!-- 客户信息栏 --> |
|
|
|
<el-card v-if="user.jwcode" style="max-width: 800px" class="beautiful"> |
|
|
|
<el-card v-if="user.jwcode" style="max-width: 800px" class="beautiful"> |
|
|
|
<el-form :model="user" label-width="auto" style="max-width: 800px" label-position="left"> |
|
|
|
<el-text size="large" style="margin-left: 20px">客户信息</el-text> |
|
|
|
|
|
|
@ -649,6 +702,5 @@ p { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</style> |
|
|
|
|