Commit 62c0316b authored by daniel's avatar daniel

feat(gps押金): bug修复

parent be86be3f
...@@ -241,6 +241,35 @@ ...@@ -241,6 +241,35 @@
</div> </div>
</template> </template>
</n-modal> </n-modal>
<n-modal :mask-closable="false" :loading="loading" style="width: 300px" title="批量退款"
preset="card"
draggable v-model:show="showRefundModal" >
<n-form
ref="refundOrderFormRef"
:model="refundOrderValue"
:rules="refundOrderRules"
size="small"
label-placement="left"
label-width="auto"
>
<n-form-item label="退款金额" path="markNo">
<n-input-number clearable type="number" v-model:value="refundOrderValue.refundAmount" placeholder="请输入退款金额"
digits="2"
:min="0" :max="depositForm.amount" />
</n-form-item>
</n-form>
<template #footer>
<div class="flex gap-x-2 flex-row items-center" >
<n-button class="flex-1" :loading="loading" @click="onRefundCancel">
取消
</n-button>
<n-button class="flex-1"
:loading="loading" type='error' @click="onRefundSubmit">
提交退款
</n-button>
</div>
</template>
</n-modal>
</n-space> </n-space>
</script> </script>
<script> <script>
...@@ -530,7 +559,7 @@ ...@@ -530,7 +559,7 @@
{ {
type: 'selection', type: 'selection',
disabled(row) { disabled(row) {
return ![TradeStatusEnum.PAY_SUCCESS.value].includes(row.tradeStatus) return TradeStatusEnum.PAY_SUCCESS.value !== row.tradeStatus && row.refundStatus != RefundStatusEnum.REFUND_SUCCESS.value
} }
}, },
{ {
...@@ -584,7 +613,7 @@ ...@@ -584,7 +613,7 @@
type: PayTypeEnum[row.payType].color, type: PayTypeEnum[row.payType].color,
}, PayTypeEnum[row.payType].name), }, PayTypeEnum[row.payType].name),
]), ]),
row.refundStatus && h(NSpace, {}, [ row.refundStatus != null && h(NSpace, {}, [
h('span', {}, "退款状态"), h('span', {}, "退款状态"),
h(NTag, { h(NTag, {
size: "small", size: "small",
...@@ -593,7 +622,6 @@ ...@@ -593,7 +622,6 @@
type: RefundStatusEnum[row.refundStatus].color, type: RefundStatusEnum[row.refundStatus].color,
}, RefundStatusEnum[row.refundStatus].name), }, RefundStatusEnum[row.refundStatus].name),
]), ]),
]) ])
} }
}, },
...@@ -744,6 +772,8 @@ ...@@ -744,6 +772,8 @@
}) })
// 删除自助选号 // 删除自助选号
const showEditModal = ref(false) const showEditModal = ref(false)
// 退款订单的modal
const showRefundModal = ref(false)
// 订单列表 // 订单列表
const orders = ref([]) const orders = ref([])
// 反馈表单 // 反馈表单
...@@ -752,16 +782,31 @@ ...@@ -752,16 +782,31 @@
markNo: '', markNo: '',
cmptId: getCId(), cmptId: getCId(),
}) })
// 当前操作的订单
// 金额
const refundOrderValue = reactive({
refundAmount: 0,
})
// 反馈的校验规则 // 反馈的校验规则
editOrderRules = { const editOrderRules = {
markNo: { markNo: {
required: true, required: true,
message: '请输入参赛号', message: '请输入参赛号',
trigger: 'blur' trigger: 'blur'
} }
} }
// 退款订单的校验规则
const refundOrderRules = reactive({
refundAmount: {
required: true,
message: '请输入退款金额',
trigger: 'blur'
}
})
// 反馈的formRef // 反馈的formRef
const editOrderFormRef = ref(null) const editOrderFormRef = ref(null)
// 退款订单的formRef
const refundOrderFormRef = ref(null)
/***----------------订单列表 end -----------------*/ /***----------------订单列表 end -----------------*/
/***----------------押金配置 start -----------------*/ /***----------------押金配置 start -----------------*/
...@@ -850,6 +895,7 @@ ...@@ -850,6 +895,7 @@
page: 1, page: 1,
size: 1, size: 1,
cmptId: getCId(), cmptId: getCId(),
markNo: query.markNo,
} }
let paramsList = tradeStatusOptions.value.map(v => ({ let paramsList = tradeStatusOptions.value.map(v => ({
...params, ...params,
...@@ -880,7 +926,7 @@ ...@@ -880,7 +926,7 @@
let params = { let params = {
applyId: row.applyId, applyId: row.applyId,
refundAmount: row.refundAmount, refundAmount: row.refundAmount,
refundReason: row.markNo() + "gps押金退款", refundReason: row.markNo + "gps押金退款",
operatorCode: getUId(), operatorCode: getUId(),
} }
const [err, res] = await to(fetch(ORDER_REFUND_URL, { const [err, res] = await to(fetch(ORDER_REFUND_URL, {
...@@ -896,7 +942,7 @@ ...@@ -896,7 +942,7 @@
return return
} }
if (res.code === 200) { if (res.code === 200) {
message.success('退款成功') message.success('退款操作成功')
fetchOrders() fetchOrders()
} else { } else {
message.error(res.message) message.error(res.message)
...@@ -967,6 +1013,44 @@ ...@@ -967,6 +1013,44 @@
const onEditCancel = () => { const onEditCancel = () => {
showEditModal.value = false showEditModal.value = false
} }
// 退款订单相关
const onRefundCancel = () => {
showRefundModal.value = false
}
// 提交退款订单
const onRefundSubmit = async () => {
refundOrderFormRef.value?.validate(async (errors) => {
if (errors) return message.error('请检查表单是否填写完整')
loading.value = true
const [err, result] = await to(
fetch(ORDER_BATCH_REFUND_URL, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
applyIds: checkedRowKeys.value,
refundAmount: refundOrderValue.refundAmount,
operatorCode: getUId(),
cmptId: getCId()
})
}).then(res => res.json())
)
loading.value = false
if (err) {
message.error(err)
return
}
if (result.code === 200) {
// 将所有的状态改为退款中
result.data.length && confirm(result.data.map(v => v.markNo + ":" + v.result).join('\n'))
await fetchOrders()
checkedRowKeys.value = []
} else {
message.error(result.message)
}
})
}
// 富文本编辑器 .setContent() .getContent() // 富文本编辑器 .setContent() .getContent()
let editor; let editor;
/***---------------- 自助选号相关 end -----------------*/ /***---------------- 自助选号相关 end -----------------*/
...@@ -1045,6 +1129,7 @@ ...@@ -1045,6 +1129,7 @@
depositForm.value.notice = res.data.notice depositForm.value.notice = res.data.notice
depositForm.value.content = res.data.content depositForm.value.content = res.data.content
depositForm.value.roadIds = res.data.roadIds.split(',').map(v => Number(v)) depositForm.value.roadIds = res.data.roadIds.split(',').map(v => Number(v))
refundOrderValue.refundAmount = res.data.amount
editor.setContent(res.data.content) editor.setContent(res.data.content)
} }
} else { } else {
...@@ -1053,55 +1138,8 @@ ...@@ -1053,55 +1138,8 @@
} }
// 批量退款 // 批量退款
const batchRefund = async () => { const batchRefund = async () => {
let refundAmount = 0; showRefundModal.value = true
let confirmFlag = confirm('是否对选中的订单进行退款?') refundOrderValue.refundAmount = depositForm.value.amount
if (!confirmFlag) {
message.error('已取消批量退款')
checkedRowKeys.value = []
return
}
confirmFlag = confirm('是否确定全额退款吗?')
if (!confirmFlag) {
// 请输入退款金额
refundAmount = prompt('请输入退款金额')
if (!refundAmount) {
message.error('请输入退款金额')
return
}
if (Number(refundAmount) > Number(depositForm.value.amount)) {
message.error('退款金额不能大于押金金额')
return
}
}
// 批量退款 调用接口
loading.value = true
const [err, result] = await to(
fetch(ORDER_BATCH_REFUND_URL, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
applyIds: checkedRowKeys.value,
refundAmount: refundAmount > 0 ? Number(refundAmount) : null,
operatorCode: getUId(),
cmptId: getCId()
})
}).then(res => res.json())
)
loading.value = false
if (err) {
message.error(err)
return
}
if (result.code === 200) {
checkedRowKeys.value = []
result.data.length && confirm(result.data.map(v => v.markNo + ":" + v.result).join('\n'))
message.success('退款操作成功,等待微信反馈结果')
fetchOrders()
} else {
message.error(result.message)
}
} }
// 一键退款 // 一键退款
const refundAll = async () => { const refundAll = async () => {
...@@ -1131,7 +1169,6 @@ ...@@ -1131,7 +1169,6 @@
} }
if (result.code === 200) { if (result.code === 200) {
result.data.length && confirm(result.data.map(v => v.markNo + ":" + v.result).join('\n')) result.data.length && confirm(result.data.map(v => v.markNo + ":" + v.result).join('\n'))
message.success('退款操作成功,等待微信反馈结果')
fetchOrders() fetchOrders()
} else { } else {
message.error(result.message) message.error(result.message)
...@@ -1141,6 +1178,7 @@ ...@@ -1141,6 +1178,7 @@
onMounted(() => { onMounted(() => {
fetchOrders() fetchOrders()
getCmptInfo() getCmptInfo()
getDeposit()
editor = UE.getEditor('rich-text-container'); editor = UE.getEditor('rich-text-container');
}) })
...@@ -1186,6 +1224,13 @@ ...@@ -1186,6 +1224,13 @@
editOrderFormRef, editOrderFormRef,
editOrder, editOrder,
onEditCancel, onEditCancel,
// 退款订单相关
refundOrderValue,
refundOrderRules,
refundOrderFormRef,
showRefundModal,
onRefundCancel,
onRefundSubmit,
} }
} }
}) })
......
...@@ -230,7 +230,7 @@ ...@@ -230,7 +230,7 @@
<n-form-item label="组别名称" path="roadName"> <n-form-item label="组别名称" path="roadName">
<div class="flex flex-col"> <div class="flex flex-col">
<n-input v-model:value="gunRuleValue.roadName" placeholder="请输入组别名称" /> <n-input v-model:value="gunRuleValue.roadName" placeholder="请输入组别名称" />
<n-gradient-text type="warning">注:组别名仅支持数字和字母,并且不可重复</n-gradient-text> <n-gradient-text type="warning">注:导入名单里的组别名要跟设置的组别名一致</n-gradient-text>
</div> </div>
</n-form-item> </n-form-item>
<n-form-item label="出发日期" path="startTime"> <n-form-item label="出发日期" path="startTime">
...@@ -498,8 +498,8 @@ ...@@ -498,8 +498,8 @@
const uploadUrl = window.location.origin + '/api-common/v1/upload?folder=gk/gunApply' + '&cmptId=' + getCId() const uploadUrl = window.location.origin + '/api-common/v1/upload?folder=gk/gunApply' + '&cmptId=' + getCId()
const downloadWeChatImgUrl = window.location.origin + '/api-common/v1/download-wechat-image' const downloadWeChatImgUrl = window.location.origin + '/api-common/v1/download-wechat-image'
// 添加全局 loading 指令 // 添加全局 loading 指令
// const ECC_BASE_URL = "https://ecc.geexek.com" const ECC_BASE_URL = "https://ecc.geexek.com"
const ECC_BASE_URL = "http://localhost:8081" // const ECC_BASE_URL = "http://localhost:8081"
const SAVE_OR_UPDATE = ECC_BASE_URL + "/api-pick/v1/save-or-update-wave" const SAVE_OR_UPDATE = ECC_BASE_URL + "/api-pick/v1/save-or-update-wave"
// 更新名单 // 更新名单
const UPDATE_ENROLL_WAVE = ECC_BASE_URL + "/api-pick/v1/update-enroll-wave" const UPDATE_ENROLL_WAVE = ECC_BASE_URL + "/api-pick/v1/update-enroll-wave"
...@@ -760,6 +760,7 @@ ...@@ -760,6 +760,7 @@
// 更新菜单 // 更新菜单
const updateMenu = (value) => { const updateMenu = (value) => {
activeMenu.value = value activeMenu.value = value
getGunRulesStats()
} }
// 更新枪次选项 // 更新枪次选项
...@@ -925,6 +926,8 @@ ...@@ -925,6 +926,8 @@
const ruleIndex = ref(0) const ruleIndex = ref(0)
// 删除确认弹窗 // 删除确认弹窗
const showDeleteModal = ref(false) const showDeleteModal = ref(false)
// 是否是第一次加载
const isFirst = ref(false)
// 号码簿规则校验 // 号码簿规则校验
const gunRuleRules = { const gunRuleRules = {
roadName: { roadName: {
...@@ -949,7 +952,59 @@ ...@@ -949,7 +952,59 @@
ruleIndex.value = index ruleIndex.value = index
gunRuleValue.value = gunRules.value[index] gunRuleValue.value = gunRules.value[index]
getPlayers() getPlayers()
if (!isFirst.value) return
getGunRulesStats()
} }
// 获取分枪组别统计
const getGunRulesStats = async () => {
const params = {
cmptId: getCId()
}
loading.value = true;
// 发起请求
const [err, res] = await to(fetch(RULE_LIST + new URLSearchParams(params).toString(), {
method: "GET",
headers: {
'Content-Type': 'application/json'
},
}).then(res => res.json()))
loading.value = false
if (err) {
message.error(err.message)
}
if (res.code !== 200) return message.error(res.message)
// 获取所有分组的名单总数
const totalApplies = res.data.map(v => v.details.reduce((detailPre, detailCur) => detailPre + detailCur.totalReservations ?? 0, 0))
// 获取所有分组的名单总数
const request = res.data.map(v => {
const playerParams = {
cmptId: getCId(),
roadName: v.roadName,
current: 1,
size: 1,
}
return fetch(ENROLL_PAGE, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(playerParams)
}).then(res => res.json())
})
let allPlayersTotals = []
await Promise.all(request).then(list => {
allPlayersTotals = list.map(v => v.data.total)
})
// 统计数据组装
gunRules.value.forEach((v, index) => {
v.totalPlayer = allPlayersTotals[index]
v.totalApply = totalApplies[index]
})
}
// 获取分枪组别列表 // 获取分枪组别列表
const getGunRules = async () => { const getGunRules = async () => {
const params = { const params = {
...@@ -1006,6 +1061,7 @@ ...@@ -1006,6 +1061,7 @@
} else { } else {
gunRuleValue.value = initialValue gunRuleValue.value = initialValue
} }
isFirst.value = true
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment