Browse Source

审核重复提交优化

youhua/chongzhi
ZhangYong 2 months ago
parent
commit
c86f0b94e9
  1. 34
      src/views/audit/bean/beanAudit.vue
  2. 98
      src/views/audit/gold/rechargeAudit.vue
  3. 105
      src/views/audit/gold/refundAudit.vue
  4. 1
      src/views/consume/bean/addBeanConsume.vue
  5. 1
      src/views/recharge/bean/addBeanRecharge.vue
  6. 7
      src/views/refund/gold/addCoinRefund.vue

34
src/views/audit/bean/beanAudit.vue

@ -59,15 +59,20 @@
<el-table-column v-if="checkTab === 'pending'" fixed="right" prop="operation" label="操作" width="400px"> <el-table-column v-if="checkTab === 'pending'" fixed="right" prop="operation" label="操作" width="400px">
<template #default="scope"> <template #default="scope">
<div class="operation"> <div class="operation">
<el-popconfirm title="确定要通过此条记录吗?" @confirm="throttledHandleApprove(scope.row)">
<el-popconfirm title="确定要通过此条记录吗?" @confirm="handleApprove(scope.row)">
<template #reference> <template #reference>
<el-button :disabled="scope.row.status === 1 || scope.row.status === 2" type="primary" text>
<el-button :disabled="clicked || cancelClicked" type="primary" text>
通过 通过
</el-button> </el-button>
</template> </template>
<template #actions="{ confirm }">
<el-button size="small">取消</el-button>
<el-button type="primary" size="small" :disabled="clicked" @click="confirm">
确认
</el-button>
</template>
</el-popconfirm> </el-popconfirm>
<el-button :disabled="scope.row.status === 1 || scope.row.status === 2" type="primary" text
@click="showRejectDialog(scope.row)">
<el-button :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
驳回 驳回
</el-button> </el-button>
</div> </div>
@ -247,8 +252,10 @@ const getStats = async () => {
ElMessage.error('无此权限') ElMessage.error('无此权限')
} }
} }
//
const clicked = ref(false);
//
const handleApprove = async (row) => { const handleApprove = async (row) => {
clicked.value = true
if (findMenuById(menuTree.value, permissionMapping.Golden_Bean_Recharge_Approval)) { if (findMenuById(menuTree.value, permissionMapping.Golden_Bean_Recharge_Approval)) {
try { try {
const params = { const params = {
@ -257,18 +264,23 @@ const handleApprove = async (row) => {
} }
await API({ url: '/beanAudit/status1', data: params }) await API({ url: '/beanAudit/status1', data: params })
ElMessage.success('审核通过成功') ElMessage.success('审核通过成功')
get()
getStats()
await get()
clicked.value = false
await getStats()
} catch (error) { } catch (error) {
console.error('审核通过失败', error) console.error('审核通过失败', error)
ElMessage.error('操作失败') ElMessage.error('操作失败')
} }
} else { } else {
ElMessage.error('无此权限') ElMessage.error('无此权限')
clicked.value = false
} }
} }
//
//
const cancelClicked = ref(false)
//
const handleReject = async () => { const handleReject = async () => {
cancelClicked.value = true
if (findMenuById(menuTree.value, permissionMapping.Golden_Bean_Recharge_Approval)) { if (findMenuById(menuTree.value, permissionMapping.Golden_Bean_Recharge_Approval)) {
if (!reason.value.trim()) { if (!reason.value.trim()) {
ElMessage.warning('请输入驳回理由') ElMessage.warning('请输入驳回理由')
@ -283,14 +295,16 @@ const handleReject = async () => {
await API({ url: '/beanAudit/status2', data: params }) await API({ url: '/beanAudit/status2', data: params })
ElMessage.success('驳回成功') ElMessage.success('驳回成功')
rejectVisible.value = false rejectVisible.value = false
get()
getStats()
await get()
cancelClicked.value = false
await getStats()
} catch (error) { } catch (error) {
console.error('驳回失败', error) console.error('驳回失败', error)
ElMessage.error('操作失败') ElMessage.error('操作失败')
} }
} else { } else {
ElMessage.error('无此权限') ElMessage.error('无此权限')
cancelClicked.value = false
} }
} }
const getToday = function () { const getToday = function () {

98
src/views/audit/gold/rechargeAudit.vue

@ -2,25 +2,21 @@
<el-card style="margin-bottom: 0.5vh;margin-top: 0.5vh"> <el-card style="margin-bottom: 0.5vh;margin-top: 0.5vh">
<el-col style="margin-bottom: 0.5vh"> <el-col style="margin-bottom: 0.5vh">
<el-text size="large">精网号</el-text> <el-text size="large">精网号</el-text>
<el-input v-model="rechargeAudit.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw"
clearable/>
<el-input v-model="rechargeAudit.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw" clearable />
<el-text size="large">活动名称</el-text> <el-text size="large">活动名称</el-text>
<el-select v-model="rechargeAudit.activity" placeholder="请选择活动名称" style="width: 12vw;margin-right:1vw"
clearable>
<el-option v-for="item in activity" :key="item" :label="item" :value="item"/>
<el-select v-model="rechargeAudit.activity" placeholder="请选择活动名称" style="width: 12vw;margin-right:1vw" clearable>
<el-option v-for="item in activity" :key="item" :label="item" :value="item" />
</el-select> </el-select>
<el-text size="large">支付方式</el-text> <el-text size="large">支付方式</el-text>
<el-select v-model="rechargeAudit.payModel" placeholder="请选择支付方式" style="width: 12vw;margin-right:1vw"
clearable>
<el-option v-for="item in payModel" :key="item.value" :label="item.label" :value="item.value"/>
<el-select v-model="rechargeAudit.payModel" placeholder="请选择支付方式" style="width: 12vw;margin-right:1vw" clearable>
<el-option v-for="item in payModel" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
<el-text size="large">所属地区</el-text> <el-text size="large">所属地区</el-text>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable
style="width:12vw"
@change="handleMarketChange"/>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable style="width:12vw"
@change="handleMarketChange" />
</el-col> </el-col>
<el-col> <el-col>
@ -28,9 +24,8 @@
{{ activeName === 'wait' ? '提交时间:' : '审核时间:' }} {{ activeName === 'wait' ? '提交时间:' : '审核时间:' }}
</el-text> </el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间" <el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" class="time-controls" style="margin-right:1vw;width:25vw"
@change="handleDatePickerChange"
:default-time="defaultTime" :disabled-date="disabledDate"/>
end-placeholder="结束时间" class="time-controls" style="margin-right:1vw;width:25vw"
@change="handleDatePickerChange" :default-time="defaultTime" :disabled-date="disabledDate" />
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button> <el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
<el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button> <el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
<el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button> <el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
@ -53,7 +48,7 @@
</div> </div>
</el-tabs> </el-tabs>
<el-table :data="tableData" style="width: 100vw;height:55vh" @sort-change="handleSortChange" <el-table :data="tableData" style="width: 100vw;height:55vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
:row-style="{ height: '50px' }">
<el-table-column type="index" label="序号" width="100px" fixed="left"> <el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{ scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize }}</span> <span>{{ scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize }}</span>
@ -73,22 +68,22 @@
<el-table-column prop="freeGold" label="免费金币" sortable="custom" width="110px"> <el-table-column prop="freeGold" label="免费金币" sortable="custom" width="110px">
<template #default="scope">{{ (scope.row.freeGold) / 100 }}</template> <template #default="scope">{{ (scope.row.freeGold) / 100 }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip/>
<el-table-column prop="payModel" label="支付方式" width="110px"/>
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip />
<el-table-column prop="payModel" label="支付方式" width="110px" />
<el-table-column prop="voucher" label="支付凭证" width="110px"> <el-table-column prop="voucher" label="支付凭证" width="110px">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.voucher" <div v-if="scope.row.voucher"
style="display: flex; justify-content: center; align-items: center; cursor: pointer;"
@click="previewImage(scope.row.voucher)">
style="display: flex; justify-content: center; align-items: center; cursor: pointer;"
@click="previewImage(scope.row.voucher)">
<img :src="scope.row.voucher" alt="支付凭证" style="width: auto; height: 40px;"> <img :src="scope.row.voucher" alt="支付凭证" style="width: auto; height: 40px;">
</div> </div>
<div v-else style="display: flex; justify-content: center; align-items: center; height: 40px;">--</div> <div v-else style="display: flex; justify-content: center; align-items: center; height: 40px;">--</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="adminName" label="提交人" width="100px"/>
<el-table-column prop="adminName" label="提交人" width="100px" />
<el-table-column prop="rejectReason" v-if="activeName === 'reject'" label="驳回理由" width="200px" <el-table-column prop="rejectReason" v-if="activeName === 'reject'" label="驳回理由" width="200px"
show-overflow-tooltip/>
<el-table-column v-if="activeName !== 'wait'" prop="auditName" label="审核人" width="100px"/>
show-overflow-tooltip />
<el-table-column v-if="activeName !== 'wait'" prop="auditName" label="审核人" width="100px" />
<el-table-column prop="payTime" sortable="custom" label="付款时间" width="200px"> <el-table-column prop="payTime" sortable="custom" label="付款时间" width="200px">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.payTime).format('YYYY-MM-DD HH:mm:ss') }} {{ moment(scope.row.payTime).format('YYYY-MM-DD HH:mm:ss') }}
@ -96,11 +91,11 @@
</el-table-column> </el-table-column>
<el-table-column prop="createTime" sortable="custom" label="提交时间" width="200px"> <el-table-column prop="createTime" sortable="custom" label="提交时间" width="200px">
<template #default="scope"> <template #default="scope">
<!-- {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}-->
<!-- {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}-->
{{ {{
activeName === 'wait' activeName === 'wait'
? moment(scope.row.auditTime).format('YYYY-MM-DD HH:mm:ss')
: moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss')
? moment(scope.row.auditTime).format('YYYY-MM-DD HH:mm:ss')
: moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss')
}} }}
</template> </template>
</el-table-column> </el-table-column>
@ -114,13 +109,18 @@
<div class="operation"> <div class="operation">
<el-popconfirm title="确定要通过此条记录吗?" @confirm="handleApprove(scope.row)"> <el-popconfirm title="确定要通过此条记录吗?" @confirm="handleApprove(scope.row)">
<template #reference> <template #reference>
<el-button :disabled="scope.row.auditStatus === 1 || scope.row.auditStatus === 2" type="primary" text>
<el-button :disabled="clicked || cancelClicked" type="primary" text>
通过 通过
</el-button> </el-button>
</template> </template>
<template #actions="{ confirm }">
<el-button size="small">取消</el-button>
<el-button type="primary" size="small" :disabled="clicked" @click="confirm">
确认
</el-button>
</template>
</el-popconfirm> </el-popconfirm>
<el-button :disabled="scope.row.auditStatus === 1 || scope.row.auditStatus === 2" type="primary" text
@click="showRejectDialog(scope.row)">
<el-button :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
驳回 驳回
</el-button> </el-button>
</div> </div>
@ -129,9 +129,8 @@
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" <el-pagination :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handlePagination('size', $event)"
@current-change="handlePagination('page', $event)"></el-pagination>
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePagination('size', $event)"
@current-change="handlePagination('page', $event)"></el-pagination>
</div> </div>
</el-card> </el-card>
@ -139,30 +138,30 @@
<el-form> <el-form>
<el-form-item label="驳回理由" required> <el-form-item label="驳回理由" required>
<el-input v-model="rejectReason" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200" <el-input v-model="rejectReason" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200"
show-word-limit/>
show-word-limit />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="rejectDialogVisible = false">取消</el-button> <el-button @click="rejectDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleReject">确定</el-button>
<el-button :disabled="cancelClicked" type="primary" @click="handleReject">确定</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import {onMounted, reactive, ref} from 'vue'
import {ElMessage} from 'element-plus'
import { onMounted, reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
import request from '@/util/http.js' import request from '@/util/http.js'
import API from '@/util/http.js' import API from '@/util/http.js'
import moment from 'moment' import moment from 'moment'
import {useAdminStore} from "@/store/index.js";
import {storeToRefs} from "pinia";
import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia";
const adminStore = useAdminStore(); const adminStore = useAdminStore();
const {adminData, menuTree} = storeToRefs(adminStore);
import {findMenuById, permissionMapping} from "@/utils/menuTreePermission.js"
const { adminData, menuTree } = storeToRefs(adminStore);
import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
import dayjs from "dayjs"; import dayjs from "dayjs";
const defaultTime = [ const defaultTime = [
@ -236,7 +235,7 @@ const stats = ref({
}) })
// //
const rules = reactive({ const rules = reactive({
rejectReason: [{required: true, message: '请输入驳回理由', trigger: 'blur'}]
rejectReason: [{ required: true, message: '请输入驳回理由', trigger: 'blur' }]
}) })
// //
const getRecharge = async function (val) { const getRecharge = async function (val) {
@ -432,8 +431,10 @@ const handlePagination = (type, val) => {
getRecharge() getRecharge()
getStats() getStats()
} }
const clicked = ref(false);
// //
const handleApprove = async (row) => { const handleApprove = async (row) => {
clicked.value = true
if (findMenuById(menuTree.value, permissionMapping.Recharge_Approval)) { if (findMenuById(menuTree.value, permissionMapping.Recharge_Approval)) {
try { try {
const params = { const params = {
@ -442,15 +443,17 @@ const handleApprove = async (row) => {
action: 1, action: 1,
rejectReason: '' rejectReason: ''
} }
await request({url: '/audit/audit', data: params})
await request({ url: '/audit/audit', data: params })
ElMessage.success('审核通过成功') ElMessage.success('审核通过成功')
await getRecharge() await getRecharge()
clicked.value = false
await getStats() await getStats()
} catch (error) { } catch (error) {
console.error('审核通过失败', error) console.error('审核通过失败', error)
ElMessage.error('操作失败') ElMessage.error('操作失败')
} }
} else { } else {
clicked.value = false
ElMessage.error('无权限') ElMessage.error('无权限')
} }
@ -464,8 +467,11 @@ const showRejectDialog = (row) => {
ElMessage.error('无权限') ElMessage.error('无权限')
} }
} }
//
const cancelClicked = ref(false)
// //
const handleReject = async () => { const handleReject = async () => {
cancelClicked.value = true
if (findMenuById(menuTree.value, permissionMapping.Recharge_Approval)) { if (findMenuById(menuTree.value, permissionMapping.Recharge_Approval)) {
if (!rejectReason.value.trim()) { if (!rejectReason.value.trim()) {
@ -480,10 +486,11 @@ const handleReject = async () => {
rejectReason: rejectReason.value rejectReason: rejectReason.value
} }
await request({url: '/audit/audit', data: params})
await request({ url: '/audit/audit', data: params })
ElMessage.success('驳回操作成功') ElMessage.success('驳回操作成功')
rejectDialogVisible.value = false rejectDialogVisible.value = false
await getRecharge() await getRecharge()
cancelClicked.value = false
await getStats() await getStats()
} catch (error) { } catch (error) {
console.error('驳回操作失败', error) console.error('驳回操作失败', error)
@ -491,6 +498,7 @@ const handleReject = async () => {
} }
} else { } else {
ElMessage.error('无权限') ElMessage.error('无权限')
cancelClicked.value = false
} }
} }
// //
@ -551,7 +559,7 @@ const handleMarketChange = (value) => {
} }
} }
const props = {multiple: true}
const props = { multiple: true }
// //
const getMarket = async function () { const getMarket = async function () {
try { try {
@ -565,8 +573,8 @@ const getMarket = async function () {
const allChildren = nodes.flatMap(node => node.children || []); const allChildren = nodes.flatMap(node => node.children || []);
return allChildren.map(child => { return allChildren.map(child => {
const grandchildren = child.children && child.children.length const grandchildren = child.children && child.children.length
? transformTree([child]) //
: null;
? transformTree([child]) //
: null;
return { return {
value: child.name, value: child.name,
label: child.name, label: child.name,

105
src/views/audit/gold/refundAudit.vue

@ -2,33 +2,30 @@
<el-card style="margin-bottom: 0.5vh;margin-top:0.5vh;width:82.5vw"> <el-card style="margin-bottom: 0.5vh;margin-top:0.5vh;width:82.5vw">
<el-col style="margin-bottom: 0.5vh"> <el-col style="margin-bottom: 0.5vh">
<el-text size="large">精网号</el-text> <el-text size="large">精网号</el-text>
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw" clearable/>
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw" clearable />
<el-text size="large">商品名</el-text> <el-text size="large">商品名</el-text>
<el-select v-model="searchForm.goodsName" placeholder="请输入商品名" style="width: 12vw;margin-right:1vw"
clearable>
<el-select v-model="searchForm.goodsName" placeholder="请输入商品名" style="width: 12vw;margin-right:1vw" clearable>
<el-option v-for="item in refundGoodsOptions" :key="item" :label="item" :value="item"></el-option> <el-option v-for="item in refundGoodsOptions" :key="item" :label="item" :value="item"></el-option>
</el-select> </el-select>
<el-text size="large">退款方式</el-text> <el-text size="large">退款方式</el-text>
<el-select v-model="searchForm.refundModel" placeholder="请选择" style="width: 12vw;margin-right:1vw" clearable> <el-select v-model="searchForm.refundModel" placeholder="请选择" style="width: 12vw;margin-right:1vw" clearable>
<el-option label="全部退款" value="0"/>
<el-option label="部分退款" value="1"/>
<el-option label="全部退款" value="0" />
<el-option label="部分退款" value="1" />
</el-select> </el-select>
<el-text size="large">所属地区</el-text> <el-text size="large">所属地区</el-text>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable
style="width:12vw"
@change="handleMarketChange"/>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable style="width:12vw"
@change="handleMarketChange" />
</el-col> </el-col>
<el-col> <el-col>
<el-text size="large"> <el-text size="large">
{{ activeName === 'wait' ? '提交时间:' : '审核时间:' }} {{ activeName === 'wait' ? '提交时间:' : '审核时间:' }}
</el-text> </el-text>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="开始时间" <el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="开始时间"
class="time-controls"
end-placeholder="结束时间" style="margin-right:1vw;width:25vw" @change="handleDatePickerChange"
:default-time="defaultTime" :disabled-date="disabledDate"/>
class="time-controls" end-placeholder="结束时间" style="margin-right:1vw;width:25vw"
@change="handleDatePickerChange" :default-time="defaultTime" :disabled-date="disabledDate" />
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button> <el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
<el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button> <el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
<el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button> <el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
@ -53,18 +50,18 @@
</div> </div>
<el-table :data="tableData" style="height:55vh" @sort-change="handleSortChange"> <el-table :data="tableData" style="height:55vh" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="60"/>
<el-table-column prop="name" label="姓名" width="120"/>
<el-table-column prop="jwcode" label="精网号" width="120"/>
<el-table-column prop="market" label="所属地区" width="120"/>
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="name" label="姓名" width="120" />
<el-table-column prop="jwcode" label="精网号" width="120" />
<el-table-column prop="market" label="所属地区" width="120" />
<el-table-column prop="refundType" label="退款类型" width="120"/>
<el-table-column prop="refundType" label="退款类型" width="120" />
<el-table-column prop="refundModel" label="退款方式" width="120"> <el-table-column prop="refundModel" label="退款方式" width="120">
<template #default="{ row }"> <template #default="{ row }">
{{ row.refundModel === 0 ? '全部退款' : '部分退款' }} {{ row.refundModel === 0 ? '全部退款' : '部分退款' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="goodsName" label="退款商品" width="120" show-overflow-tooltip/>
<el-table-column prop="goodsName" label="退款商品" width="120" show-overflow-tooltip />
<el-table-column prop="sumGold" label="退款金额" width="120" sortable="custom"> <el-table-column prop="sumGold" label="退款金额" width="120" sortable="custom">
<template #default="{ row }"> <template #default="{ row }">
{{ row.sumGold / 100 }} {{ row.sumGold / 100 }}
@ -85,18 +82,18 @@
{{ row.taskGold / 100 }} {{ row.taskGold / 100 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip/>
<el-table-column prop="adminName" label="提交人" width="120"/>
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip />
<el-table-column prop="adminName" label="提交人" width="120" />
<el-table-column v-if="checkTab === 'reject'" prop="rejectReason" label="驳回理由" width="150" <el-table-column v-if="checkTab === 'reject'" prop="rejectReason" label="驳回理由" width="150"
show-overflow-tooltip/>
<el-table-column v-if="checkTab !== 'pending'" prop="auditName" label="审核人" width="120"/>
show-overflow-tooltip />
<el-table-column v-if="checkTab !== 'pending'" prop="auditName" label="审核人" width="120" />
<el-table-column prop="createTime" label="提交时间" width="180" sortable="custom"> <el-table-column prop="createTime" label="提交时间" width="180" sortable="custom">
<template #default="{ row }"> <template #default="{ row }">
<!-- {{ moment(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}--> <!-- {{ moment(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}-->
{{ {{
checkTab === 'pending' checkTab === 'pending'
? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss')
: moment(row.createTime).format('YYYY-MM-DD HH:mm:ss')
? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss')
: moment(row.createTime).format('YYYY-MM-DD HH:mm:ss')
}} }}
</template> </template>
@ -111,13 +108,18 @@
<div class="operation"> <div class="operation">
<el-popconfirm title="确定要通过此条记录吗?" @confirm="handleApprove(scope.row)"> <el-popconfirm title="确定要通过此条记录吗?" @confirm="handleApprove(scope.row)">
<template #reference> <template #reference>
<el-button :disabled="scope.row.auditStatus === 1 || scope.row.auditStatus === 2" type="primary" text>
<el-button :disabled="clicked || cancelClicked" type="primary" text>
通过 通过
</el-button> </el-button>
</template> </template>
<template #actions="{ confirm }">
<el-button size="small">取消</el-button>
<el-button type="primary" size="small" :disabled="clicked" @click="confirm">
确认
</el-button>
</template>
</el-popconfirm> </el-popconfirm>
<el-button :disabled="scope.row.auditStatus === 1 || scope.row.auditStatus === 2" type="primary" text
@click="showRejectDialog(scope.row)">
<el-button :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
驳回 驳回
</el-button> </el-button>
</div> </div>
@ -125,16 +127,15 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination class="pagination" v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize" <el-pagination class="pagination" v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</el-card> </el-card>
<el-dialog v-model="rejectDialogVisible" title="驳回理由" width="500px"> <el-dialog v-model="rejectDialogVisible" title="驳回理由" width="500px">
<el-form> <el-form>
<el-form-item label="驳回理由" required> <el-form-item label="驳回理由" required>
<el-input v-model="rejectReason" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200" <el-input v-model="rejectReason" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200"
show-word-limit/>
show-word-limit />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -147,17 +148,17 @@
</template> </template>
<script setup> <script setup>
import {onMounted, reactive, ref} from 'vue'
import {ElMessage} from 'element-plus'
import { onMounted, reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js' import API from '@/util/http.js'
import moment from 'moment' import moment from 'moment'
import {useAdminStore} from "@/store/index.js";
import {storeToRefs} from "pinia";
import {findMenuById, permissionMapping} from "@/utils/menuTreePermission.js"
import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia";
import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
import dayjs from "dayjs"; import dayjs from "dayjs";
const adminStore = useAdminStore(); const adminStore = useAdminStore();
const {adminData, menuTree} = storeToRefs(adminStore);
const { adminData, menuTree } = storeToRefs(adminStore);
const defaultTime = [ const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1, 23, 59, 59), new Date(2000, 2, 1, 23, 59, 59),
@ -247,7 +248,7 @@ const showRejectDialog = (row) => {
// //
const getRefundGoods = async () => { const getRefundGoods = async () => {
try { try {
const res = await API({url: '/general/goods'})
const res = await API({ url: '/general/goods' })
refundGoodsOptions.value = res.data || [] refundGoodsOptions.value = res.data || []
} catch (error) { } catch (error) {
console.error('获取商品列表失败', error) console.error('获取商品列表失败', error)
@ -292,7 +293,7 @@ const get = async function (val) {
return return
} }
} }
const res = await API({url: '/audit/selectRefund', data: params})
const res = await API({ url: '/audit/selectRefund', data: params })
tableData.value = res.list || [] tableData.value = res.list || []
pagination.value.total = res.total || 0 pagination.value.total = res.total || 0
console.log('查全部的total', pagination.value.total, res.total) console.log('查全部的total', pagination.value.total, res.total)
@ -300,8 +301,10 @@ const get = async function (val) {
console.error('获取数据失败', error) console.error('获取数据失败', error)
} }
} }
const clicked = ref(false);
// //
const handleApprove = async (row) => { const handleApprove = async (row) => {
clicked.value = true
if (findMenuById(menuTree.value, permissionMapping.Refund_Approval)) { if (findMenuById(menuTree.value, permissionMapping.Refund_Approval)) {
try { try {
const params = { const params = {
@ -310,21 +313,25 @@ const handleApprove = async (row) => {
action: 1,// action1,2 action: 1,// action1,2
rejectReason: '' rejectReason: ''
} }
await API({url: '/audit/audit', data: params})
await API({ url: '/audit/audit', data: params })
ElMessage.success('审核通过成功') ElMessage.success('审核通过成功')
get()
getStats()
await get()
clicked.value = false
await getStats()
} catch (error) { } catch (error) {
console.error('审核通过失败', error) console.error('审核通过失败', error)
ElMessage.error('操作失败') ElMessage.error('操作失败')
} }
} else { } else {
ElMessage.warning('没有权限') ElMessage.warning('没有权限')
clicked.value = false
} }
} }
//
const cancelClicked = ref(false)
// //
const handleReject = async () => { const handleReject = async () => {
cancelClicked.value = true
if (findMenuById(menuTree.value, permissionMapping.Refund_Approval)) { if (findMenuById(menuTree.value, permissionMapping.Refund_Approval)) {
if (!rejectReason.value.trim()) { if (!rejectReason.value.trim()) {
@ -338,11 +345,12 @@ const handleReject = async () => {
action: 2, action: 2,
rejectReason: rejectReason.value rejectReason: rejectReason.value
} }
await API({url: '/audit/audit', data: params})
await API({ url: '/audit/audit', data: params })
ElMessage.success('驳回成功') ElMessage.success('驳回成功')
rejectDialogVisible.value = false rejectDialogVisible.value = false
get()
getStats()
await get()
cancelClicked.value = false
await getStats()
console.log('看看驳回参数', params) console.log('看看驳回参数', params)
} catch (error) { } catch (error) {
console.error('驳回失败', error) console.error('驳回失败', error)
@ -350,6 +358,7 @@ const handleReject = async () => {
} }
} else { } else {
ElMessage.warning('没有权限') ElMessage.warning('没有权限')
cancelClicked.value = false
} }
} }
@ -514,8 +523,8 @@ const getMarket = async function () {
return allChildren.map(child => { return allChildren.map(child => {
const grandchildren = child.children && child.children.length const grandchildren = child.children && child.children.length
? transformTree([child]) //
: null;
? transformTree([child]) //
: null;
return { return {
value: child.name, value: child.name,
@ -545,7 +554,7 @@ const format3 = (num) => {
} }
// //
const rules = reactive({ const rules = reactive({
reason: [{required: true, message: '请输入驳回理由', trigger: 'blur'}]
reason: [{ required: true, message: '请输入驳回理由', trigger: 'blur' }]
}) })
const handlePageSizeChange = function (val) { const handlePageSizeChange = function (val) {
pagination.value.pageSize = val pagination.value.pageSize = val

1
src/views/consume/bean/addBeanConsume.vue

@ -203,6 +203,7 @@ const handleConsumeForm = async () => {
remark: '', remark: '',
adminName: '' adminName: ''
} }
user.value = {}
}else{ }else{
ElMessage.error(result.msg) ElMessage.error(result.msg)
} }

1
src/views/recharge/bean/addBeanRecharge.vue

@ -188,6 +188,7 @@ const handleAddForm = async () => {
remark: '', remark: '',
adminName: '' adminName: ''
} }
user.value = {}
}else{ }else{
ElMessage.error(result.msg) ElMessage.error(result.msg)
} }

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

@ -81,12 +81,13 @@ const add = async function () {
taskGold: (Number(addRefund.value.taskGold) || 0) * 100, taskGold: (Number(addRefund.value.taskGold) || 0) * 100,
sumGold: (Number(addRefund.value.sumGold) || 0) * 100 sumGold: (Number(addRefund.value.sumGold) || 0) * 100
} }
addDisabled.value = true
// POST // POST
const result = await API({ const result = await API({
url: '/refund/add', url: '/refund/add',
data: processedRefund data: processedRefund
}) })
addDisabled.value = false
if (result.code === 0) { if (result.code === 0) {
ElMessage.error(result.msg) ElMessage.error(result.msg)
return return
@ -100,6 +101,8 @@ const add = async function () {
// //
} }
} }
//
const addDisabled = ref(false)
// 退 // 退
const addBefore = () => { const addBefore = () => {
@ -499,7 +502,7 @@ onMounted(async function () {
</div> </div>
<el-button type="success" @click="cancel()" style="margin-left: 200px">重置</el-button> <el-button type="success" @click="cancel()" style="margin-left: 200px">重置</el-button>
<el-button type="primary" @click="addBefore"> 提交</el-button>
<el-button type="primary" :disabled="addDisabled" @click="addBefore"> 提交</el-button>
</el-form> </el-form>
<!-- 客户信息栏 --> <!-- 客户信息栏 -->

Loading…
Cancel
Save