|
@@ -18,8 +18,8 @@
|
|
|
<el-option v-for="item in orderTypes" :key="item.code" :value="item.code" :label="item.label"></el-option>
|
|
|
</el-select>
|
|
|
<span> 订单状态:</span>
|
|
|
- <el-select v-model="payStatus" style="width: 100px">
|
|
|
- <el-option v-for="item in payStatuses" :key="item.code" :value="item.code" :label="item.label"></el-option>
|
|
|
+ <el-select v-model="tradeState" style="width: 100px">
|
|
|
+ <el-option v-for="item in tradeStates" :key="item.code" :value="item.code" :label="item.label"></el-option>
|
|
|
</el-select>
|
|
|
<span></span>
|
|
|
<el-button type="primary" icon="Search" @click="fetchData">查询</el-button>
|
|
@@ -36,12 +36,12 @@
|
|
|
<el-table-column prop="payDatetime" label="支付时间" width="140"></el-table-column>
|
|
|
<el-table-column label="支付状态" width="80">
|
|
|
<template #default="scope">
|
|
|
- <span v-html="filterPayStatus(scope.row.payStatus)"></span>
|
|
|
+ <span v-html="filterTradeState(scope.row.tradeState)"></span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="操作">
|
|
|
<template v-slot="scope">
|
|
|
- <el-button type="danger" icon="Money" @click="doRefund(scope.row)" :disabled="scope.row.payStatus === 4">
|
|
|
+ <el-button type="danger" icon="Money" @click="doRefund(scope.row)" :disabled="scope.row.tradeState === 'REFUND'">
|
|
|
退款
|
|
|
</el-button>
|
|
|
</template>
|
|
@@ -61,7 +61,7 @@
|
|
|
</page-layer>
|
|
|
</template>
|
|
|
|
|
|
-<script>
|
|
|
+<script setup>
|
|
|
import {reactive, ref} from 'vue'
|
|
|
import {shortcuts} from '@/data/shortcuts'
|
|
|
import {selectOrdersByConditions, refundOrder} from '@/api/wxpay-refund'
|
|
@@ -71,181 +71,147 @@ import store from '@/store'
|
|
|
import {downloadExcel} from '@/utils/excel'
|
|
|
import PageLayer from "@/layout/PageLayer";
|
|
|
|
|
|
-export default {
|
|
|
- components: {PageLayer},
|
|
|
- setup() {
|
|
|
- const windowSize = store.state.app.windowSize
|
|
|
- const tableHeight = windowSize.h - 85
|
|
|
- const dateRange = ref(null)
|
|
|
- const patientId = ref(null)
|
|
|
- const patientName = ref(null)
|
|
|
- const tradeNo = ref(null)
|
|
|
- const payStatus = ref(-1)
|
|
|
- const payStatuses = initPayStatuses()
|
|
|
- const orderType = ref(-1)
|
|
|
- const orderTypes = initOrderTypes()
|
|
|
- const data = reactive({
|
|
|
- totalSize: 0,
|
|
|
- list: [],
|
|
|
+const windowSize = store.state.app.windowSize
|
|
|
+const tableHeight = windowSize.h - 85
|
|
|
+const dateRange = ref(null)
|
|
|
+const patientId = ref(null)
|
|
|
+const patientName = ref(null)
|
|
|
+const tradeNo = ref(null)
|
|
|
+const tradeState = ref('ALL')
|
|
|
+const tradeStates = initTradeStates()
|
|
|
+const orderType = ref(-1)
|
|
|
+const orderTypes = initOrderTypes()
|
|
|
+const data = reactive({
|
|
|
+ totalSize: 0,
|
|
|
+ list: [],
|
|
|
+})
|
|
|
+const pageSize = ref(30)
|
|
|
+const currentPage = ref(1)
|
|
|
+const handleSizeChange = (val) => {
|
|
|
+ pageSize.value = val
|
|
|
+ fetchData()
|
|
|
+}
|
|
|
+const handleCurrentChange = (val) => {
|
|
|
+ currentPage.value = val
|
|
|
+ fetchData()
|
|
|
+}
|
|
|
+
|
|
|
+const fetchData = () => {
|
|
|
+ if (!tradeNo.value && !dateRange.value) {
|
|
|
+ ElMessage({
|
|
|
+ message: '请选择时间范围',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2000,
|
|
|
+ showClose: true,
|
|
|
})
|
|
|
- const pageSize = ref(30)
|
|
|
- const currentPage = ref(1)
|
|
|
- const handleSizeChange = (val) => {
|
|
|
- pageSize.value = val
|
|
|
- fetchData()
|
|
|
- }
|
|
|
- const handleCurrentChange = (val) => {
|
|
|
- currentPage.value = val
|
|
|
- fetchData()
|
|
|
- }
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const param = {
|
|
|
+ patientId: patientId.value,
|
|
|
+ patientName: patientName.value,
|
|
|
+ orderType: orderType.value,
|
|
|
+ tradeState: tradeState.value,
|
|
|
+ tradeNo: tradeNo.value,
|
|
|
+ currentPage: currentPage.value,
|
|
|
+ pageSize: pageSize.value,
|
|
|
+ from: 1,
|
|
|
+ }
|
|
|
+ if (dateRange.value) {
|
|
|
+ param.start = formatDate(dateRange.value[0])
|
|
|
+ param.end = formatDate(dateRange.value[1])
|
|
|
+ }
|
|
|
+ selectOrdersByConditions(param)
|
|
|
+ .then((res) => {
|
|
|
+ data.totalSize = res.totalSize
|
|
|
+ data.list = res.list
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ data.value = {}
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
- const fetchData = () => {
|
|
|
- if (!tradeNo.value && !dateRange.value) {
|
|
|
- ElMessage({
|
|
|
- message: '请选择时间范围',
|
|
|
- type: 'warning',
|
|
|
- duration: 2000,
|
|
|
- showClose: true,
|
|
|
- })
|
|
|
- return
|
|
|
- }
|
|
|
- const param = {
|
|
|
- patientId: patientId.value,
|
|
|
- patientName: patientName.value,
|
|
|
- orderType: orderType.value,
|
|
|
- payStatus: payStatus.value,
|
|
|
- tradeNo: tradeNo.value,
|
|
|
- currentPage: currentPage.value,
|
|
|
- pageSize: pageSize.value,
|
|
|
- from: 1,
|
|
|
- }
|
|
|
- if (dateRange.value) {
|
|
|
- param.start = formatDate(dateRange.value[0])
|
|
|
- param.end = formatDate(dateRange.value[1])
|
|
|
- }
|
|
|
- selectOrdersByConditions(param)
|
|
|
- .then((res) => {
|
|
|
- data.totalSize = res.totalSize
|
|
|
- data.list = res.list
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- data.value = {}
|
|
|
- })
|
|
|
- }
|
|
|
+const exportExcel = () => {
|
|
|
+ if (!tradeNo.value && !dateRange.value) {
|
|
|
+ ElMessage({
|
|
|
+ message: '请选择时间范围',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2000,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ store.commit('app/setLoading', true)
|
|
|
+ const data = {
|
|
|
+ param: {
|
|
|
+ start: formatDate(dateRange.value[0]),
|
|
|
+ end: formatDate(dateRange.value[1]),
|
|
|
+ patientId: patientId.value,
|
|
|
+ patientName: patientName.value,
|
|
|
+ orderType: orderType.value,
|
|
|
+ tradeState: tradeState.value,
|
|
|
+ tradeNo: tradeNo.value,
|
|
|
+ currentPage: 1,
|
|
|
+ pageSize: -1,
|
|
|
+ },
|
|
|
+ url: '/wxRefund/exportExcel',
|
|
|
+ fileName: '服务号订单数据(' + formatDate(dateRange.value[0]) + ' - ' + formatDate(dateRange.value[1]) + ').xlsx',
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ downloadExcel(data)
|
|
|
+ }, 100)
|
|
|
+}
|
|
|
|
|
|
- const exportExcel = () => {
|
|
|
- if (!tradeNo.value && !dateRange.value) {
|
|
|
- ElMessage({
|
|
|
- message: '请选择时间范围',
|
|
|
- type: 'warning',
|
|
|
- duration: 2000,
|
|
|
- showClose: true,
|
|
|
+const doRefund = (row) => {
|
|
|
+ ElMessageBox.prompt('请输入退款原因:', '提示', {
|
|
|
+ confirmButtonText: '确定退款',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ })
|
|
|
+ .then(({value}) => {
|
|
|
+ const param = {
|
|
|
+ id: row.id,
|
|
|
+ totalFee: row.totalFee,
|
|
|
+ tradeNo: row.tradeNo,
|
|
|
+ refundReason: value,
|
|
|
+ refundOpDatetime: getDatetime(),
|
|
|
+ refundOpCode: store.state.user.info.code,
|
|
|
+ }
|
|
|
+ refundOrder(param).then(() => {
|
|
|
+ ElMessage({
|
|
|
+ message: '退款成功',
|
|
|
+ type: 'success',
|
|
|
+ duration: 2000,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
})
|
|
|
- return
|
|
|
- }
|
|
|
- store.commit('app/setLoading', true)
|
|
|
- const data = {
|
|
|
- param: {
|
|
|
- start: formatDate(dateRange.value[0]),
|
|
|
- end: formatDate(dateRange.value[1]),
|
|
|
- patientId: patientId.value,
|
|
|
- patientName: patientName.value,
|
|
|
- orderType: orderType.value,
|
|
|
- payStatus: payStatus.value,
|
|
|
- tradeNo: tradeNo.value,
|
|
|
- currentPage: 1,
|
|
|
- pageSize: -1,
|
|
|
- },
|
|
|
- url: '/wxRefund/exportExcel',
|
|
|
- fileName: '服务号订单数据(' + formatDate(dateRange.value[0]) + ' - ' + formatDate(dateRange.value[1]) + ').xlsx',
|
|
|
- }
|
|
|
- setTimeout(() => {
|
|
|
- downloadExcel(data)
|
|
|
- }, 100)
|
|
|
- }
|
|
|
-
|
|
|
- const doRefund = (row) => {
|
|
|
- ElMessageBox.prompt('请输入退款原因:', '提示', {
|
|
|
- confirmButtonText: '确定退款',
|
|
|
- cancelButtonText: '取消',
|
|
|
})
|
|
|
- .then(({value}) => {
|
|
|
- const param = {
|
|
|
- id: row.id,
|
|
|
- totalFee: row.totalFee,
|
|
|
- tradeNo: row.tradeNo,
|
|
|
- refundReason: value,
|
|
|
- refundOpDatetime: getDatetime(),
|
|
|
- refundOpCode: store.state.user.info.code,
|
|
|
- }
|
|
|
- refundOrder(param).then(() => {
|
|
|
- ElMessage({
|
|
|
- message: '退款成功',
|
|
|
- type: 'success',
|
|
|
- duration: 2000,
|
|
|
- showClose: true,
|
|
|
- })
|
|
|
- })
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- })
|
|
|
- }
|
|
|
- return {
|
|
|
- tableHeight,
|
|
|
- dateRange,
|
|
|
- shortcuts,
|
|
|
- patientId,
|
|
|
- patientName,
|
|
|
- tradeNo,
|
|
|
- payStatus,
|
|
|
- payStatuses,
|
|
|
- orderType,
|
|
|
- orderTypes,
|
|
|
- filterPayStatus,
|
|
|
- data,
|
|
|
- fetchData,
|
|
|
- doRefund,
|
|
|
- pageSize,
|
|
|
- currentPage,
|
|
|
- handleSizeChange,
|
|
|
- handleCurrentChange,
|
|
|
- exportExcel,
|
|
|
- }
|
|
|
- },
|
|
|
+ .catch(() => {
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
-function initPayStatuses() {
|
|
|
+function initTradeStates() {
|
|
|
return [
|
|
|
- {code: -1, label: '全部'},
|
|
|
- {code: 99, label: '初值'},
|
|
|
- {code: 0, label: '未支付'},
|
|
|
- {code: 1, label: '支付成功'},
|
|
|
- {code: 2, label: '已关闭'},
|
|
|
- {code: 4, label: '已退款'},
|
|
|
- {code: 7, label: '退款失败'},
|
|
|
+ {code: 'ALL', label: '全部'},
|
|
|
+ {code: 'NOTPAY', label: '未支付'},
|
|
|
+ {code: 'SUCCESS', label: '支付成功'},
|
|
|
+ {code: 'CLOSED', label: '已关闭'},
|
|
|
+ {code: 'REFUND', label: '已退款'},
|
|
|
]
|
|
|
}
|
|
|
|
|
|
-function filterPayStatus(val) {
|
|
|
+function filterTradeState(val) {
|
|
|
switch (val) {
|
|
|
- case 99:
|
|
|
- return '<span style="color: #909399">初值</span>'
|
|
|
- case 0:
|
|
|
+ case 'NOTPAY':
|
|
|
return '<span style="color: #909399">未支付</span>'
|
|
|
- case 1:
|
|
|
+ case 'SUCCESS':
|
|
|
return '<span style="color: #67C23A">支付成功</span>'
|
|
|
- case 2:
|
|
|
+ case 'CLOSED':
|
|
|
return '<span style="color: #909399">已关闭</span>'
|
|
|
- case 3:
|
|
|
+ case 'PAYERROR':
|
|
|
return '<span style="color: #F56C6C">支付失败</span>'
|
|
|
- case 4:
|
|
|
+ case 'REFUND':
|
|
|
return '<span style="color: #E6A23C">已退款</span>'
|
|
|
- case 5:
|
|
|
- return '<span style="color: #909399">已接收,等待扣款</span>'
|
|
|
- case 6:
|
|
|
- return '<span style="color: #67C23A">用户支付中</span>'
|
|
|
- case 7:
|
|
|
- return '<span style="color: #F56C6C">退款失败</span>'
|
|
|
+ case 'REVOKED':
|
|
|
+ return '<span style="color: #909399">已撤销</span>'
|
|
|
}
|
|
|
return '未知'
|
|
|
}
|