Commit 012a9720 authored by daniel's avatar daniel

feat(gpsDeposit): 批量退款联调

parent d7b4661f
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
<div style="min-width: 520px" v-if="tabIndex===2" > <div style="min-width: 520px" v-if="tabIndex===2" >
<n-tabs type="segment" <n-tabs type="segment"
@update:value="updateStatus" :value="query.status" animated pane-style="padding:0;"> @update:value="updateStatus" :value="query.tradeStatus" animated pane-style="padding:0;">
<n-tab-pane <n-tab-pane
v-for="item in tradeStatusOptions" v-for="item in tradeStatusOptions"
:name="item.value" :name="item.value"
...@@ -141,11 +141,11 @@ ...@@ -141,11 +141,11 @@
</div> </div>
<div class="w-full gap-x-2 flex flex-row items-center mt-3"> <div class="w-full gap-x-2 flex flex-row items-center mt-3">
<n-space v-if="tabIndex===2"> <n-space v-if="tabIndex===2">
<n-button type="primary" @click="refundAll"> <n-button type="error" @click="refundAll">
一键归还 一键退款
</n-button> </n-button>
<n-button v-if="checkedRowKeys.length" @click="batchRefund" type="error"> <n-button v-if="checkedRowKeys.length" @click="batchRefund" type="error">
批量退款 批量退款{{checkedRowKeys.length>0?'(已选择'+checkedRowKeys.length+'条订单)':''}}
</n-button> </n-button>
</n-space> </n-space>
<n-space v-if="tabIndex===3"> <n-space v-if="tabIndex===3">
...@@ -214,24 +214,33 @@ ...@@ -214,24 +214,33 @@
</n-button> </n-button>
</template> </template>
</n-card> </n-card>
<n-modal <n-modal :mask-closable="false" :loading="loading" style="width: 300px" title="修改订单"
v-model:show="showModal" preset="card"
preset="dialog" draggable v-model:show="showEditModal" >
title="确认" <n-form
content="是否确定开始随机分配?" ref="editOrderFormRef"
positive-text="确认" :model="editOrderValue"
negative-text="取消" :rules="editOrderRules"
@positive-click size="small"
/> label-placement="left"
<n-modal label-width="auto"
v-model:show="showBatchModal" >
preset="dialog" <n-form-item label="参赛号" path="markNo">
title="批量退款" <n-input clearable type="text" v-model:value="editOrderValue.markNo" placeholder="请输入参赛号" />
content="是否确定对选中的用户进行退款?" </n-form-item>
positive-text="确认" </n-form>
negative-text="取消" <template #footer>
@positive-click="batchRefund" <div class="flex gap-x-2 flex-row items-center" >
/> <n-button class="flex-1" :loading="loading" @click="onEditCancel">
取消
</n-button>
<n-button class="flex-1"
:loading="loading" type='primary' @click="editOrder">
保存
</n-button>
</div>
</template>
</n-modal>
</n-space> </n-space>
</script> </script>
<script> <script>
...@@ -412,8 +421,8 @@ ...@@ -412,8 +421,8 @@
const { useMessage, useNotification, dateZhCN, NButton, NTag, zhCN, NSpace, NImageGroup, NImage, NText } = naive const { useMessage, useNotification, dateZhCN, NButton, NTag, zhCN, NSpace, NImageGroup, NImage, NText } = naive
// 添加全局 loading 指令 // 添加全局 loading 指令
const uploadUrl = window.location.origin + '/api-common/v1/upload?folder=' + 'gk/invoice' + '&cmptId=' + getCId() const uploadUrl = window.location.origin + '/api-common/v1/upload?folder=' + 'gk/invoice' + '&cmptId=' + getCId()
const BASE_ECC_URL = "https://ecc.geexek.com" // const BASE_ECC_URL = "https://ecc.geexek.com"
// const BASE_ECC_URL = "http://localhost:8081" const BASE_ECC_URL = "http://localhost:8081"
// 随机分配名单 // 随机分配名单
const RANDOM_ASSIGN_URL = BASE_ECC_URL + '/api-pick/v1/pick-up-batch?cmptId=' + getCId() const RANDOM_ASSIGN_URL = BASE_ECC_URL + '/api-pick/v1/pick-up-batch?cmptId=' + getCId()
...@@ -424,11 +433,16 @@ ...@@ -424,11 +433,16 @@
// 获取订单 // 获取订单
const GET_ORDER_PAGE_URL = BASE_ECC_URL + "/api-order/v1/order-list" const GET_ORDER_PAGE_URL = BASE_ECC_URL + "/api-order/v1/order-list"
// 删除订单 // 删除订单
const DELETE_ORDER_URL = BASE_ECC_URL + "/api-order/v1/delete-order" const DELETE_ORDER_URL = BASE_ECC_URL + "/api-order/v1/delete"
// 订单退款 // 订单退款
const ORDER_REFUND_URL = BASE_ECC_URL + "/api-refund/v1/refund" const ORDER_REFUND_URL = BASE_ECC_URL + "/api-refund/v1/refund"
// 批量退款 // 批量退款
const ORDER_BATCH_REFUND_URL = BASE_ECC_URL + "/api-refund/v1/batch-refund" const ORDER_BATCH_REFUND_URL = BASE_ECC_URL + "/api-refund/v1/batch-refund"
// 一键退款
const ORDER_REFUN_ALL_URL = BASE_ECC_URL + "/api-refund/v1/refund-all"
// 编辑订单
const EDIT_ORDER_URL = BASE_ECC_URL + "/api-order/v1/edit"
// 一键退款
// 获取赛事信息 // 获取赛事信息
const GET_CMPT_URL = "https://timerbackend.geexek.com/getCmpt.do?cmptId=" + getCId() const GET_CMPT_URL = "https://timerbackend.geexek.com/getCmpt.do?cmptId=" + getCId()
...@@ -691,6 +705,14 @@ ...@@ -691,6 +705,14 @@
await deleteOrder(row) await deleteOrder(row)
} }
}, '删除订单'), }, '删除订单'),
// 编辑订单
[TradeStatusEnum.WAIT_PAY.value, TradeStatusEnum.PAY_SUCCESS.value].includes(row.tradeStatus) && h(NButton, {
type: 'primary',
size: 'small',
onClick: () => {
openEditModal(row)
}
}, '编辑订单'),
]) ])
} }
...@@ -721,10 +743,24 @@ ...@@ -721,10 +743,24 @@
tradeStatus: undefined, tradeStatus: undefined,
}) })
// 删除自助选号 // 删除自助选号
const showModal = ref(false) const showEditModal = ref(false)
const showBatchModal = ref(false)
// 订单列表 // 订单列表
const orders = ref([]) const orders = ref([])
// 反馈表单
const editOrderValue = reactive({
id: undefined,
markNo: '',
})
// 反馈的校验规则
editOrderRules = {
markNo: {
required: true,
message: '请输入参赛号',
trigger: 'blur'
}
}
// 反馈的formRef
const editOrderFormRef = ref(null)
/***----------------订单列表 end -----------------*/ /***----------------订单列表 end -----------------*/
/***----------------押金配置 start -----------------*/ /***----------------押金配置 start -----------------*/
...@@ -749,6 +785,7 @@ ...@@ -749,6 +785,7 @@
message: '请输入押金金额', message: '请输入押金金额',
}, },
} }
/***----------------押金配置 end -----------------*/ /***----------------押金配置 end -----------------*/
/***----------------订单列表 start -----------------*/ /***----------------订单列表 start -----------------*/
function handleCheck(rowKeys) { function handleCheck(rowKeys) {
...@@ -768,12 +805,9 @@ ...@@ -768,12 +805,9 @@
tabIndex.value = value tabIndex.value = value
if (value === TabEnum.ORDER.value) { if (value === TabEnum.ORDER.value) {
fetchOrders() fetchOrders()
getOrderStats()
} else { } else {
getDeposit() getDeposit()
} }
// 全部状态下不获取统计
// getOrderStats()
} }
// 获取自助选号分页列表 // 获取自助选号分页列表
const fetchOrders = async () => { const fetchOrders = async () => {
...@@ -793,6 +827,7 @@ ...@@ -793,6 +827,7 @@
}, },
body: JSON.stringify(params) body: JSON.stringify(params)
}).then(res => res.json())) }).then(res => res.json()))
getOrderStats()
loading.value = false loading.value = false
if (err) { if (err) {
message.error(err) message.error(err)
...@@ -844,7 +879,7 @@ ...@@ -844,7 +879,7 @@
let params = { let params = {
applyId: row.applyId, applyId: row.applyId,
refundAmount: row.refundAmount, refundAmount: row.refundAmount,
refundReason: getCId() + "_gps押金退款_" + row.markNo, 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, {
...@@ -862,7 +897,6 @@ ...@@ -862,7 +897,6 @@
if (res.code === 200) { if (res.code === 200) {
message.success('退款成功') message.success('退款成功')
fetchOrders() fetchOrders()
getOrderStats()
} else { } else {
message.error(res.message) message.error(res.message)
} }
...@@ -890,18 +924,54 @@ ...@@ -890,18 +924,54 @@
if (res.code === 200) { if (res.code === 200) {
message.success('删除成功') message.success('删除成功')
fetchOrders() fetchOrders()
getOrderStats()
} else { } else {
message.error(res.message) message.error(res.message)
} }
} }
// 打开编辑订单
const openEditModal = (row) => {
editOrderValue.id = row.id
editOrderValue.markNo = row.markNo
editOrderFormRef.value?.resetFields()
showEditModal.value = true
}
// 编辑订单
const editOrder = async () => {
editOrderFormRef.value?.validate(async (errors) => {
if (errors) return message.error('请检查表单是否填写完整')
loading.value = true
const [err, res] = await to(fetch(EDIT_ORDER_URL, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(editOrderValue)
}).then(res => res.json()))
loading.value = false
if (err) {
message.error(err)
return
}
if (res.code === 200) {
message.success('编辑成功')
fetchOrders()
showEditModal.value = false
} else {
message.error(res.message)
}
})
}
// 取消编辑订单
const onEditCancel = () => {
showEditModal.value = false
}
// 富文本编辑器 .setContent() .getContent() // 富文本编辑器 .setContent() .getContent()
let editor; let editor;
/***---------------- 自助选号相关 end -----------------*/ /***---------------- 自助选号相关 end -----------------*/
/***---------------- 押金交互相关 start -----------------*/ /***---------------- 押金交互相关 start -----------------*/
// todo 保存押金配置 // 保存押金配置
const saveDeposit = () => { const saveDeposit = () => {
depositFormRef.value?.validate(async (errors) => { depositFormRef.value?.validate(async (errors) => {
if (errors) return message.error('请检查表单是否填写完整') if (errors) return message.error('请检查表单是否填写完整')
...@@ -930,9 +1000,7 @@ ...@@ -930,9 +1000,7 @@
message.error(res.message) message.error(res.message)
} }
}) })
} }
// 获取赛事信息 // 获取赛事信息
const getCmptInfo = async () => { const getCmptInfo = async () => {
loading.value = true loading.value = true
...@@ -971,7 +1039,6 @@ ...@@ -971,7 +1039,6 @@
} }
if (res.code === 200) { if (res.code === 200) {
if (res.data) { if (res.data) {
// depositForm.value = res.data
depositForm.value.id = res.data.id depositForm.value.id = res.data.id
depositForm.value.amount = res.data.amount depositForm.value.amount = res.data.amount
depositForm.value.status = res.data.status depositForm.value.status = res.data.status
...@@ -984,21 +1051,95 @@ ...@@ -984,21 +1051,95 @@
message.error(res.message) message.error(res.message)
} }
} }
// todo 批量退款 // 批量退款
const batchRefund = () => { const batchRefund = async () => {
message.success('功能未实现') let refundAmount = 0;
let confirmFlag = confirm('是否对选中的订单进行退款?')
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 confirmFlag = confirm('是否确定发起一键退款,该操作会将已归还设备的押金全额退款?')
if (!confirmFlag) {
message.error('已取消一键退款')
return
}
loading.value = true
// 批量退款 调用接口
const [err, result] = await to(
fetch(ORDER_REFUN_ALL_URL, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
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'))
message.success('退款操作成功,等待微信反馈结果')
fetchOrders()
} else {
message.error(result.message)
} }
// todo 批量退款
const refundAll = () => {
message.success('功能未实现')
} }
/***---------------- 押金交互相关 end -----------------*/ /***---------------- 押金交互相关 end -----------------*/
onMounted(() => { onMounted(() => {
// getDeposit()
fetchOrders() fetchOrders()
getOrderStats()
getCmptInfo() getCmptInfo()
editor = UE.getEditor('rich-text-container'); editor = UE.getEditor('rich-text-container');
}) })
...@@ -1020,8 +1161,7 @@ ...@@ -1020,8 +1161,7 @@
pagination, pagination,
orderColumns, orderColumns,
isConfigTab, isConfigTab,
showModal, showEditModal,
showBatchModal,
checkedRowKeys, checkedRowKeys,
fetchOrders, fetchOrders,
updateStatus, updateStatus,
...@@ -1040,7 +1180,12 @@ ...@@ -1040,7 +1180,12 @@
getDeposit, getDeposit,
batchRefund, batchRefund,
refundAll, refundAll,
// 编辑相关
editOrderValue,
editOrderRules,
editOrderFormRef,
editOrder,
onEditCancel,
} }
} }
}) })
......
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