Compare commits

...

1 Commits

Author SHA1 Message Date
huangqizhen 4f4639716b 12.13现仅退款 1 month ago
  1. 80
      src/components/locales/lang/en.js
  2. 84
      src/components/locales/lang/zh-CN.js
  3. 179
      src/views/moneyManage/refundDetail/refundCharge.vue
  4. 384
      src/views/moneyManage/refundDetail/refundFinance.vue
  5. 185
      src/views/moneyManage/refundDetail/refundHeader.vue
  6. 198
      src/views/moneyManage/refundDetail/refundService.vue

80
src/components/locales/lang/en.js

@ -75,6 +75,12 @@ export default {
// Dialog Titles // Dialog Titles
will: 'Will ', will: 'Will ',
deleteRecord: 'Delete Record!', deleteRecord: 'Delete Record!',
customerName: 'Customer Name',
orderStatus: 'Order Status',
paymentCurrency: 'Payment Currency',
payType: 'Payment Method',
customerNamePlaceholder: 'Please enter the customer name',
payTime: 'Payment time'
}, },
// Message Group // Message Group
@ -162,6 +168,22 @@ export default {
executed: 'Completed', executed: 'Completed',
errorExecution: 'Error', errorExecution: 'Error',
unknownStatus: 'Unknown', unknownStatus: 'Unknown',
noPermissionRefundView: 'No permission to view refunds',
noPermissionRefundAudit: 'No permission to audit refunds',
noPermissionRefundTrack: 'No permission to track refund progress',
jwcodeTooLong: 'Homily ID must be no more than 8 digits',
noPermissionAreaRefundView: 'no refund authority view area',
noPermissionAreaRefundAudit: 'no refund authority audit area',
noPermissionAreaRefundTrack: 'no view refund district authority',
invalidJwcodeFormat: 'The fine network number format is incorrect. Please enter a positive integer.',
checkRefundModel: 'Please select the refund method',
checkRefundReason: 'Please enter the reason for the refund',
checkRefundGold: 'Please enter the number of refunded gold coins and free gold coins.',
invalidPermanentGold: 'Please enter the correct number of permanent gold coins',
invalidFreeGold: 'Please enter the correct number of free gold coins',
refundGoldExceed: "The number of refunded gold coins cannot exceed the original number of gold coins.",
refundFreeExceed: 'The number of refunded free gold coins cannot exceed the original number of free gold coins.',
}, },
// Common List Fields // Common List Fields
@ -200,6 +222,9 @@ export default {
consumeTime: 'Consumption Time', consumeTime: 'Consumption Time',
refundTime: 'Refund Time', refundTime: 'Refund Time',
updateTime: 'Update Time', updateTime: 'Update Time',
homilyId: 'Homily ID',
goodsNum: 'Quantity',
refundReason: 'Refund Reason',
}, },
// Common Export Fields // Common Export Fields
@ -275,7 +300,9 @@ export default {
'商品退款': 'Product Refund', '商品退款': 'Product Refund',
'金币退款': 'Gold Coin Refund', '金币退款': 'Gold Coin Refund',
}, },
audit: 'Audit',
waitAudit: 'Pending', waitAudit: 'Pending',
RefundSuccessful: 'Refund Successful',
passed: 'Approved', passed: 'Approved',
rejected: 'Rejected', rejected: 'Rejected',
permanentGold: 'Permanent Gold Coins', permanentGold: 'Permanent Gold Coins',
@ -435,4 +462,57 @@ export default {
refund: 'Refund', refund: 'Refund',
}, },
}, },
cash_refund: {
audit: 'Audit',
viewProgress: 'View Progress',
refundApplicationInfo: 'Refund Application Info',
refundModel: 'Refund Mode',
fullRefund: 'Full Refund',
partialRefund: 'Partial Refund',
refundReason: 'Refund Reason',
originalOrderInfo: 'Original Order Info',
jwcode: 'Homily ID',
marketName: 'Region',
goodsName: 'Product Name',
paymentCurrency: 'Payment Currency',
paymentAmount: 'Payment Amount',
payTime: 'Payment Time',
payVoucher: 'Payment Voucher',
noVoucher: 'No Voucher',
customerName: 'Customer Name',
activityName: 'Activity Name',
payType: 'Payment Method',
receivedCurrency: 'Received Currency',
receivedAmount: 'Received Amount',
receivedTime: 'Received Time',
handlingCharge: 'Handling Charge',
submitter: 'Submitter',
remark: 'Remark',
rejectionInfo: 'Rejection Info',
rejectionRemark: 'Rejection Remark',
placeholder: {
rejectionRemark: 'Please enter rejection remark',
},
reject: 'Reject',
pass: 'Approve',
cancel: 'Cancel',
confirm: 'Confirm',
submitted: 'Submitted',
withdrawn: 'withdrawn',
inProgress: 'In progress',
rejected: 'Rejected',
refundAmountError: 'The refund amount was filled in incorrectly.',
withdrawRecord: 'withdraw that message!!',
refundReasonTip: 'ps: Please indicate the user\'s refund request in the refund reason.',
},
refundProgress: {
title: 'Refund Progress',
submitter: 'Submitter',
areaFinance: 'Regional Finance',
areaCharge: 'Regional Manager',
headFinance: 'HQ Finance',
executor: 'Executor',
unknownSubmitter: 'Unknown',
notRecorded: 'Not Recorded',
},
} }

84
src/components/locales/lang/zh-CN.js

@ -70,6 +70,12 @@ export default {
// 对话框标题 // 对话框标题
will: '将要', will: '将要',
deleteRecord: '删除该翻译记录!', deleteRecord: '删除该翻译记录!',
customerName: '客户姓名',
orderStatus: '订单状态',
paymentCurrency: '付款币种',
payType: '支付方式',
customerNamePlaceholder: '请输入客户姓名',
payTime: '付款时间',
}, },
// 提示信息组 // 提示信息组
elmessage: { elmessage: {
@ -150,6 +156,23 @@ export default {
executed: '执行完成', executed: '执行完成',
errorExecution: '执行出错', errorExecution: '执行出错',
unknownStatus: '未知状态', unknownStatus: '未知状态',
oPermissionRefundView: '无查看退款权限',
noPermissionRefundAudit: '无审核退款权限',
noPermissionRefundTrack: '无查看进度权限',
jwcodeTooLong: '精网号长度不能超过8位',
noPermissionAreaRefundView: '无查看地区退款权限',
noPermissionAreaRefundAudit: '无审核地区退款权限',
noPermissionAreaRefundTrack: '无查看地区退款进度权限',
invalidJwcodeFormat: '精网号格式错误,请输入正整数',
checkRefundModel: '请选择退款方式',
checkRefundReason: '请输入退款理由',
checkRefundGold: '请输入退款金币数和免费金币数',
invalidPermanentGold: '请输入正确的永久金币数',
invalidFreeGold: '请输入正确的免费金币数',
refundGoldExceed: '退款金币数不能大于原金币数',
refundFreeExceed: '退款免费金币数不能大于原免费金币数',
// 补充已有但可能缺失的(建议统一)
}, },
// 通用列表字段组 // 通用列表字段组
@ -188,6 +211,9 @@ export default {
consumeTime: '消耗时间', consumeTime: '消耗时间',
refundTime: '退款时间', refundTime: '退款时间',
updateTime: '更新时间', updateTime: '更新时间',
homilyId: 'Homily ID',
goodsNum: '产品数量',
refundReason: '退款理由',
}, },
// 通用导出字段组 // 通用导出字段组
common_export: { common_export: {
@ -261,7 +287,9 @@ export default {
'商品退款': '商品退款', '商品退款': '商品退款',
'金币退款': '金币退款', '金币退款': '金币退款',
}, },
audit: '审核',
waitAudit: '待审核', waitAudit: '待审核',
RefundSuccessful: '退款成功',
passed: '已通过', passed: '已通过',
rejected: '已驳回', rejected: '已驳回',
permanentGold: '永久金币', permanentGold: '永久金币',
@ -425,4 +453,60 @@ export default {
refund: '退款', refund: '退款',
} }
}, },
//现金退款组
cash_refund: {
audit: '审核',
viewProgress: '查看进度',
refundApplicationInfo: '退款申请信息',
refundModel: '退款方式',
fullRefund: '全部退款',
partialRefund: '部分退款',
refundReason: '退款理由',
originalOrderInfo: '原订单信息',
jwcode: '精网号',
marketName: '所属地区',
goodsName: '产品名称',
paymentCurrency: '付款币种',
paymentAmount: '付款金额',
payTime: '付款时间',
payVoucher: '转账凭证',
noVoucher: '无转账凭证',
customerName: '客户姓名',
activityName: '活动名称',
payType: '支付方式',
receivedCurrency: '到账币种',
receivedAmount: '到账金额',
receivedTime: '到账时间',
handlingCharge: '手续费',
submitter: '提交人',
remark: '备注',
rejectionInfo: '驳回信息',
rejectionRemark: '驳回备注',
placeholder: {
rejectionRemark: '请输入驳回备注'
},
reject: '驳回',
pass: '通过',
cancel: '取消',
confirm: '确定',
submitted: '已提交',
withdrawn: '已撤回',
inProgress: '进行中',
rejected: '已驳回',
refundAmountError: '退款金额填写有误',
withdrawRecord: '撤回该信息!',
refundReasonTip: 'ps:请在退款理由表明用户的退款需求。',
},
refundProgress: {
title: '退款进度',
submitter: '提交人',
areaFinance: '地区财务',
areaCharge: '地区负责人',
headFinance: '总部财务',
executor: '指定执行人',
unknownSubmitter: '未知提交人',
notRecorded: '未记录审核人'
},
} }

179
src/views/moneyManage/refundDetail/refundCharge.vue

@ -3,96 +3,97 @@
<el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);"> <el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);">
<div class="condition"> <div class="condition">
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">精网号</el-text>
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width:9vw;" clearable />
<el-text size="large" style="width:4vw;">{{ $t('common.jwcode') }}</el-text>
<el-input v-model="searchForm.jwcode" :placeholder="$t('common.jwcodePlaceholder')" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">客户姓名</el-text>
<el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
<el-text size="large" style="width:4vw;">{{ $t('common.customerName') }}</el-text>
<el-input v-model="searchForm.name" :placeholder="$t('common.customerNamePlaceholder')" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-text size="large" style="width:4vw;">{{ $t('common.goodsName') }}</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" <el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;"
placeholder="请选择产品名称" clearable />
:placeholder="$t('common.goodsNamePlaceholder')" clearable />
</div> </div>
<div class="item1" v-if="adminData.markets === '总部'"> <div class="item1" v-if="adminData.markets === '总部'">
<el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
<el-text size="large" style="width:4vw;">{{ $t('common.market') }}</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" :placeholder="$t('common.marketPlaceholder')"
clearable @change="handleMarketChange" /> clearable @change="handleMarketChange" />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">订单状态</el-text>
<el-select v-model="searchForm.statuses" style="width:9vw;" placeholder="请选择订单状态" clearable>
<el-text size="large" style="width:4vw;">{{ $t('common.orderStatus') }}</el-text>
<el-select v-model="searchForm.statuses" style="width:9vw;" :placeholder="$t('common.orderStatus')" clearable>
<el-option v-for="item in statusList" :label="item" :value="item" :key="item" /> <el-option v-for="item in statusList" :label="item" :value="item" :key="item" />
</el-select> </el-select>
</div> </div>
</div> </div>
<div class="condition"> <div class="condition">
<div class="item2"> <div class="item2">
<el-text size="large" style="width:4vw;">付款币种</el-text>
<el-select v-model="searchForm.paymentCurrency" style="width:9vw;" placeholder="请选择付款币种" clearable>
<el-text size="large" style="width:4vw;">{{ $t('cash_refund.paymentCurrency') }}</el-text>
<el-select v-model="searchForm.paymentCurrency" style="width:9vw;" :placeholder="$t('common.payModelPlaceholder')" clearable>
<el-option v-for="item in currencies" :key="item" :label="item" :value="item" /> <el-option v-for="item in currencies" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="item2"> <div class="item2">
<el-text size="large" style="width:4vw;">支付方式</el-text>
<el-select v-model="searchForm.payType" style="width:9vw;" placeholder="请选择支付方式" clearable>
<el-text size="large" style="width:4vw;">{{ $t('common.payModel') }}</el-text>
<el-select v-model="searchForm.payType" style="width:9vw;" :placeholder="$t('common.payModelPlaceholder')" clearable>
<el-option v-for="item in channelOptions" :key="item" :label="item" :value="item" /> <el-option v-for="item in channelOptions" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="item2" style="width: 28.5vw;"> <div class="item2" style="width: 28.5vw;">
<el-text size="large" style="width:4vw;">付款时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width:22vw;" @change="handleDatePickerChange" clearable
<el-text size="large" style="width:4vw;">{{ $t('cash_refund.payTime') }}</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" :range-separator="$t('common.to')"
:start-placeholder="$t('common.startTime')" :end-placeholder="$t('common.endTime')"
style="width:22vw;" @change="handleDatePickerChange" clearable
:disabled-date="disabledDate" :default-time="defaultTime" /> :disabled-date="disabledDate" :default-time="defaultTime" />
</div> </div>
<div> <div>
<el-button type="primary" @click="getRefund">查询</el-button>
<el-button type="warning" @click="exportExcel()">导出excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
<el-button type="success" @click="reset">重置</el-button>
<el-button type="primary" @click="getRefund">{{ $t('common.search') }}</el-button>
<el-button type="warning" @click="exportExcel()">{{ $t('common.exportExcel') }}</el-button>
<el-button type="primary" @click="openExportList">{{ $t('common.viewExportList') }}</el-button>
<el-button type="success" @click="reset">{{ $t('common.reset') }}</el-button>
</div> </div>
</div> </div>
</el-card> </el-card>
<el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);"> <el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);">
<el-table :data="tableData" style="height:73vh;width:82vw"> <el-table :data="tableData" style="height:73vh;width:82vw">
<el-table-column type="index" label="序号" width="60" fixed="left">
<el-table-column type="index" :label="$t('common_list.id')" width="60" fixed="left">
<template #default="scope"> <template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }} {{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="Homily ID" width="120" fixed="left" />
<el-table-column prop="jwcode" label="姓名" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" label="所属地区" width="120" />
<el-table-column prop="goodsName" label="产品名称" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" label="产品数量" width="120" />
<el-table-column prop="refundModel" label="退款方式" width="120">
<el-table-column prop="name" :label="$t('common_list.homilyId')" width="120" fixed="left" />
<el-table-column prop="jwcode" :label="$t('common_list.name')" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" :label="$t('common_list.market')" width="120" />
<el-table-column prop="goodsName" :label="$t('common_list.goodsName')" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" :label="$t('common_list.goodsNum')" width="120" />
<el-table-column prop="refundModel" :label="$t('cash_refund.refundModel')" width="120">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 1 ? '部分退款' : '全部退款' }}
{{ scope.row.refundModel === 1 ? $t('cash_refund.partialRefund') : $t('cash_refund.fullRefund') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="submitter" label="提交人" width="120" />
<el-table-column prop="refundReason" label="退款理由" width="120" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip />
<el-table-column prop="status" label="订单状态" width="120">
<el-table-column prop="submitter" :label="$t('common_list.submitter')" width="120" />
<el-table-column prop="refundReason" :label="$t('common_list.refundReason')" width="120" show-overflow-tooltip />
<el-table-column prop="remark" :label="$t('common_list.remark')" width="150" show-overflow-tooltip />
<el-table-column prop="status" :label="$t('common.orderStatus')" width="120">
<template #default="scope"> <template #default="scope">
{{ {{
[20].includes(scope.row.status) ? '待审核' :
[30, 40].includes(scope.row.status) ? '审核通过' :
[22, 32].includes(scope.row.status) ? '已驳回' :
scope.row.status === 41 ? '退款成功' : scope.row.status
[20].includes(scope.row.status) ? $t('audit.waitAudit') :
[30, 40].includes(scope.row.status) ? $t('audit.passed') :
[22, 32].includes(scope.row.status) ? $t('audit.rejected') :
scope.row.status === 41 ? $t('audit.RefundSuccessful') : scope.row.status
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="operation" label="操作" fixed="right" width="100px">
<el-table-column :label="$t('audit.operation')" fixed="right" width="100px">
<template #default="scope"> <template #default="scope">
<div class="operation"> <div class="operation">
<el-button v-if="scope.row.status === 20" type="primary" text @click="showAudit(scope.row)"> <el-button v-if="scope.row.status === 20" type="primary" text @click="showAudit(scope.row)">
审核
{{ $t('audit.audit') }}
</el-button> </el-button>
<el-button v-else type="primary" text @click="showStep(scope.row)"> <el-button v-else type="primary" text @click="showStep(scope.row)">
查看进度
{{ $t('cash_refund.viewProgress') }}
</el-button> </el-button>
</div> </div>
</template> </template>
@ -104,126 +105,126 @@
style="margin-top: 1vh;"></el-pagination> style="margin-top: 1vh;"></el-pagination>
</el-card> </el-card>
<el-dialog v-model="showAudit2" title="审核" class="audit2" width="35vw" overflow draggable
<el-dialog v-model="showAudit2" :title="$t('cash_refund.audit')" class="audit2" width="35vw" overflow draggable
style="background-color: #F3FAFE !important;"> style="background-color: #F3FAFE !important;">
<div class="top"> <div class="top">
<el-button @click="" class="smallTitle" size="small">退款申请信息</el-button>
<el-button @click="" class="smallTitle" size="small">{{ $t('cash_refund.refundApplicationInfo') }}</el-button>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">退款方式</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.refundModel') }}</el-text>
<el-select v-model="auditRow.refundModel" size="small" style="width:10vw;" disabled> <el-select v-model="auditRow.refundModel" size="small" style="width:10vw;" disabled>
<el-option label="全部退款" :value="0"></el-option>
<el-option label="部分退款" :value="1"></el-option>
<el-option :label="$t('cash_refund.fullRefund')" :value="0"></el-option>
<el-option :label="$t('cash_refund.partialRefund')" :value="1"></el-option>
</el-select> </el-select>
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">永久金币</el-text>
<el-input v-model="auditRow.gold" size="small" style="width:10vw;" disabled />&nbsp;
<el-text style="width:4vw;" size="small">{{ $t('common.permanentGold') }}</el-text>
<el-input v-model="auditRow.gold" size="small" style="width:10vw;" disabled />&nbsp;{{ $t('common.') }}
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">免费金币</el-text>
<el-input v-model="auditRow.free" size="small" style="width:10vw;" disabled />&nbsp;
<el-text style="width:4vw;" size="small">{{ $t('common.freeGold') }}</el-text>
<el-input v-model="auditRow.free" size="small" style="width:10vw;" disabled />&nbsp;{{ $t('common.') }}
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">退款理由</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.refundReason') }}</el-text>
<el-input v-model="auditRow.refundReason" size="small" style="width:10vw;" :rows="3" maxlength="100" <el-input v-model="auditRow.refundReason" size="small" style="width:10vw;" :rows="3" maxlength="100"
show-word-limit type="textarea" disabled /> show-word-limit type="textarea" disabled />
</div> </div>
</div> </div>
<el-button @click="" class="smallTitle" size="small">原订单信息</el-button>
<el-button @click="" class="smallTitle" size="small">{{ $t('cash_refund.originalOrderInfo') }}</el-button>
<div class="center"> <div class="center">
<div class="center-left"> <div class="center-left">
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">精网号</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.jwcode') }}</el-text>
<el-input v-model="auditRow.jwcode" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.jwcode" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">所属地区</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.market') }}</el-text>
<el-input v-model="auditRow.marketName" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.marketName" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">产品名称</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.goodsName') }}</el-text>
<el-input v-model="auditRow.goodsName" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.goodsName" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款币种</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.paymentCurrency') }}</el-text>
<el-input v-model="auditRow.paymentCurrency" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.paymentCurrency" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款金额</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.paymentAmount') }}</el-text>
<el-input v-model="auditRow.paymentAmount" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.paymentAmount" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款时间</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.payTime') }}</el-text>
<el-input v-model="auditRow.payTime" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.payTime" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;">转账凭证</el-text>
<el-text style="width:4vw;">{{ $t('cash_refund.payVoucher') }}</el-text>
<img v-if="auditRow.payVoucher" :src="auditRow.payVoucher" <img v-if="auditRow.payVoucher" :src="auditRow.payVoucher"
style="width: 80px; height: 80px; object-fit: cover;"> style="width: 80px; height: 80px; object-fit: cover;">
<div v-else> <div v-else>
无转账凭证
{{ $t('cash_refund.noVoucher') }}
</div> </div>
</div> </div>
</div> </div>
<div class="center-right"> <div class="center-right">
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">客户姓名</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.customerName') }}</el-text>
<el-input v-model="auditRow.name" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.name" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">活动名称</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.activityName') }}</el-text>
<el-input v-model="auditRow.activity" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.activity" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">支付方式</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.payModel') }}</el-text>
<el-input v-model="auditRow.payType" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.payType" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账币种</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedCurrency') }}</el-text>
<el-input v-model="auditRow.receivedCurrency" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedCurrency" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账金额</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedAmount') }}</el-text>
<el-input v-model="auditRow.receivedAmount" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedAmount" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账时间</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedTime') }}</el-text>
<el-input v-model="auditRow.receivedTime" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedTime" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">手续费</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.handlingCharge') }}</el-text>
<el-input v-model="auditRow.handlingCharge" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.handlingCharge" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">提交人</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.submitter') }}</el-text>
<el-input v-model="auditRow.submitter" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.submitter" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">备注</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.remark') }}</el-text>
<el-input v-model="auditRow.remark" size="small" style="width:10vw;" :row="3" maxlength="100" <el-input v-model="auditRow.remark" size="small" style="width:10vw;" :row="3" maxlength="100"
type="textarea" show-word-limit disabled /> type="textarea" show-word-limit disabled />
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> <div class="bottom">
<el-button class="smallTitle" size="small" v-show="showReject">驳回信息</el-button>
<el-button class="smallTitle" size="small" v-show="showReject">{{ $t('cash_refund.rejectionInfo') }}</el-button>
<div class="bottom-item" v-show="showReject"> <div class="bottom-item" v-show="showReject">
<el-text style="width:4vw;" size="small">驳回备注</el-text>
<el-input v-model="addForm.remark" placeholder="请输入驳回备注" size="small" style="width:10vw;" :row="3"
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.rejectionRemark') }}</el-text>
<el-input v-model="addForm.remark" :placeholder="$t('cash_refund.placeholder.rejectionRemark')" size="small" style="width:10vw;" :row="3"
maxlength="100" type="textarea" show-word-limit clearable /> maxlength="100" type="textarea" show-word-limit clearable />
</div> </div>
<div style="text-align: center;" v-show="!showReject"> <div style="text-align: center;" v-show="!showReject">
<el-button type="default" @click="showReject = true">驳回</el-button>
<el-button type="primary" @click="handlePass">通过</el-button>
<el-button type="default" @click="showReject = true">{{ $t('common.reject') }}</el-button>
<el-button type="primary" @click="handlePass">{{ $t('common.pass') }}</el-button>
</div> </div>
<div style="text-align: center;" v-show="showReject"> <div style="text-align: center;" v-show="showReject">
<el-button type="default" @click="hideReject">取消</el-button>
<el-button type="primary" @click="handleReject">确定</el-button>
<el-button type="default" @click="hideReject">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="handleReject">{{ $t('common.confirm') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="showSteps" title="退款进度" overflow draggable width="1206px" height="506px" :style="{
<el-dialog v-model="showSteps" :title="$t('refundProgress.title')" overflow draggable width="1206px" height="506px" :style="{
backgroundImage: `url(${RefundChargeBackground})`, backgroundImage: `url(${RefundChargeBackground})`,
backgroundSize: 'cover', backgroundSize: 'cover',
backgroundPosition: 'center' backgroundPosition: 'center'
@ -234,7 +235,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
提交人<br>{{ submitter || '未知提交人' }}
{{ $t('refundProgress.submitter') }}<br>{{ submitter || $t('refundProgress.unknownSubmitter') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -245,7 +246,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
地区财务<br>{{ areaFinance || '未记录审核人' }}
{{ $t('refundProgress.areaFinance') }}<br>{{ areaFinance || $t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -258,7 +259,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
地区负责人<br>{{ areaCharge || '未记录审核人' }}
{{ $t('refundProgress.areaCharge') }}<br>{{ areaCharge || $t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -273,7 +274,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
总部财务<br>{{ headFinance || '未记录审核人' }}
{{ $t('refundProgress.headFinance') }}<br>{{ headFinance || $t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -288,7 +289,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
指定执行人<br>{{ executor || '未记录执行人' }}
{{ $t('refundProgress.executor') }}<br>{{ executor || $t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -300,38 +301,38 @@
</el-steps> </el-steps>
</div> </div>
<div class="steps-btn"> <div class="steps-btn">
<el-button type="primary" @click="showSteps = false">确定</el-button>
<el-button type="primary" @click="showSteps = false">{{ $t('common.confirm') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-dialog v-model="exportListVisible" :title="$t('common_export.exportList')" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading"> <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<el-table-column prop="fileName" :label="$t('common_export.fileName')" />
<el-table-column prop="state" :label="$t('common_export.status')">
<template #default="scope"> <template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'"> <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }} {{ getTagText(scope.row.state) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="createTime" :label="$t('common_export.createTime')">
<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') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作">
<el-table-column :label="$t('common_export.operation')">
<template #default="scope"> <template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)" <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2"> :disabled="scope.row.state !== 2">
下载
{{ $t('common_export.download') }}
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
<el-button text @click="exportListVisible = false">{{ $t('common_export.close') }}</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>

384
src/views/moneyManage/refundDetail/refundFinance.vue

@ -3,95 +3,95 @@
<el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);"> <el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);">
<div class="condition"> <div class="condition">
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">精网号</el-text>
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width:9vw;" clearable />
<el-text size="large" style="width:4vw;">{{ $t('common.jwcode') }}</el-text>
<el-input v-model="searchForm.jwcode" :placeholder="$t('common.jwcodePlaceholder')" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">客户姓名</el-text>
<el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
<el-text size="large" style="width:4vw;">{{ $t('common.customerName') }}</el-text>
<el-input v-model="searchForm.name" :placeholder="$t('common.customerNamePlaceholder')" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-text size="large" style="width:4vw;">{{ $t('common.goodsName') }}</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable /> <el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
</div> </div>
<div class="item1" v-if="adminData.markets === '总部'"> <div class="item1" v-if="adminData.markets === '总部'">
<el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
<el-text size="large" style="width:4vw;">{{ $t('common.market') }}</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" :placeholder="$t('common.marketPlaceholder')"
clearable @change="handleMarketChange" /> clearable @change="handleMarketChange" />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">订单状态</el-text>
<el-text size="large" style="width:4vw;">{{ $t('common_list.orderStatus') }}</el-text>
<el-select v-model="searchForm.statuses" style="width:9vw;" clearable> <el-select v-model="searchForm.statuses" style="width:9vw;" clearable>
<el-option v-for="item in statusList" :label="item" :value="item" :key="item" />
<el-option v-for="item in statusList" :label="t('cash_refund.' + item)" :value="item" :key="item" />
</el-select> </el-select>
</div> </div>
</div> </div>
<div class="condition"> <div class="condition">
<div class="item2"> <div class="item2">
<el-text size="large" style="width:4vw;">付款币种</el-text>
<el-text size="large" style="width:4vw;">{{ $t('cash_refund.paymentCurrency') }}</el-text>
<el-select v-model="searchForm.paymentCurrency" style="width:9vw;" clearable> <el-select v-model="searchForm.paymentCurrency" style="width:9vw;" clearable>
<el-option v-for="item in currencies" :key="item" :label="item" :value="item" /> <el-option v-for="item in currencies" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="item2"> <div class="item2">
<el-text size="large" style="width:4vw;">支付方式</el-text>
<el-text size="large" style="width:4vw;">{{ $t('common.payType') }}</el-text>
<el-select v-model="searchForm.payType" style="width:9vw;" clearable> <el-select v-model="searchForm.payType" style="width:9vw;" clearable>
<el-option v-for="item in channelOptions" :key="item" :label="item" :value="item" /> <el-option v-for="item in channelOptions" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="item2" style="width: 28.5vw;"> <div class="item2" style="width: 28.5vw;">
<el-text size="large" style="width:4vw;">付款时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width:22vw;" @change="handleDatePickerChange" clearable
<el-text size="large" style="width:4vw;">{{ $t('common.payTime') }}</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" :range-separator="$t('common.to')" :start-placeholder="$t('common.startTime')"
:end-placeholder="$t('common.endTime')" style="width:22vw;" @change="handleDatePickerChange" clearable
:disabled-date="disabledDate" :default-time="defaultTime" /> :disabled-date="disabledDate" :default-time="defaultTime" />
</div> </div>
<div> <div>
<el-button type="primary" @click="getRefund">查询</el-button>
<el-button type="warning" @click="exportExcel()">导出excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
<el-button type="success" @click="reset">重置</el-button>
<el-button type="primary" @click="getRefund">{{ $t('common.search') }}</el-button>
<el-button type="warning" @click="exportExcel()">{{ $t('common.exportExcel') }}</el-button>
<el-button type="primary" @click="openExportList">{{ $t('common.viewExportList') }}</el-button>
<el-button type="success" @click="reset">{{ $t('common.reset') }}</el-button>
</div> </div>
</div> </div>
</el-card> </el-card>
<el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);"> <el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);">
<el-table :data="tableData" style="height:73vh;width:82vw"> <el-table :data="tableData" style="height:73vh;width:82vw">
<el-table-column type="index" label="序号" width="60" fixed="left">
<el-table-column type="index" :label="$t('common_list.id')" width="60" fixed="left">
<template #default="scope"> <template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }} {{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="jwcode" label="Homily ID" width="120" fixed="left" />
<el-table-column prop="name" label="姓名" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" label="所属地区" width="120" />
<el-table-column prop="goodsName" label="产品名称" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" label="产品数量" width="120" />
<el-table-column prop="refundModel" label="退款方式" width="120">
<el-table-column prop="jwcode" :label="$t('common_list.homilyId')" width="120" fixed="left" />
<el-table-column prop="name" :label="$t('common_list.name')" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" :label="$t('common_list.market')" width="120" />
<el-table-column prop="goodsName" :label="$t('common_list.goodsName')" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" :label="$t('common_list.goodsNum')" width="120" />
<el-table-column prop="refundModel" :label="$t('cash_refund.refundModel')" width="120">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 1 ? '部分退款' : '全部退款' }}
{{ scope.row.refundModel === 1 ? t('cash_refund.partialRefund') : t('cash_refund.fullRefund') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="submitter" label="提交人" width="120" />
<el-table-column prop="refundReason" label="退款理由" width="120" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip />
<el-table-column prop="status" label="订单状态" width="120">
<el-table-column prop="submitter" :label="$t('common_list.submitter')" width="120" />
<el-table-column prop="refundReason" :label="$t('common_list.refundReason')" width="120" show-overflow-tooltip />
<el-table-column prop="remark" :label="$t('common_list.remark')" width="150" show-overflow-tooltip />
<el-table-column prop="status" :label="$t('common_list.orderStatus')" width="120">
<template #default="scope"> <template #default="scope">
{{ {{
[10].includes(scope.row.status) ? '待审核' :
[20, 30, 40].includes(scope.row.status) ? '审核通过' :
[12, 22, 32].includes(scope.row.status) ? '已驳回' :
[41].includes(scope.row.status) ? '退款成功' : scope.row.status
[10].includes(scope.row.status) ? t('audit.waitAudit') :
[20, 30, 40].includes(scope.row.status) ? t('audit.passed') :
[12, 22, 32].includes(scope.row.status) ? t('audit.rejected') :
[41].includes(scope.row.status) ? t('audit.RefundSuccessful') : scope.row.status
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="operation" label="操作" fixed="right" width="100px">
<el-table-column prop="operation" :label="$t('audit.operation')" fixed="right" width="100px">
<template #default="scope"> <template #default="scope">
<div class="operation"> <div class="operation">
<el-button v-if="scope.row.status === 10" type="primary" text @click="showAudit2(scope.row)"> <el-button v-if="scope.row.status === 10" type="primary" text @click="showAudit2(scope.row)">
审核
{{ $t('audit.audit') }}
</el-button> </el-button>
<el-button v-else type="primary" text @click="showStep(scope.row)"> <el-button v-else type="primary" text @click="showStep(scope.row)">
查看进度
{{ $t('cash_refund.viewProgress') }}
</el-button> </el-button>
</div> </div>
</template> </template>
@ -103,126 +103,126 @@
style="margin-top: 1vh;"></el-pagination> style="margin-top: 1vh;"></el-pagination>
</el-card> </el-card>
<el-dialog v-model="showAudit" title="审核" class="audit" width="35vw" overflow draggable
<el-dialog v-model="showAudit" :title="$t('audit.audit')" class="audit" width="35vw" overflow draggable
style="background-color: #F3FAFE !important;"> style="background-color: #F3FAFE !important;">
<div class="top"> <div class="top">
<el-button @click="" class="smallTitle" size="small">退款申请信息</el-button>
<el-button @click="" class="smallTitle" size="small">{{ $t('cash_refund.refundApplicationInfo') }}</el-button>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">退款方式</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.refundModel') }}</el-text>
<el-select v-model="auditRow.refundModel" size="small" style="width:10vw;" disabled> <el-select v-model="auditRow.refundModel" size="small" style="width:10vw;" disabled>
<el-option label="全部退款" :value="0"></el-option>
<el-option label="部分退款" :value="1"></el-option>
<el-option :label="$t('cash_refund.fullRefund')" :value="0"></el-option>
<el-option :label="$t('cash_refund.partialRefund')" :value="1"></el-option>
</el-select> </el-select>
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">永久金币</el-text>
<el-input v-model="auditRow.gold" size="small" style="width:10vw;" disabled />&nbsp;
<el-text style="width:4vw;" size="small">{{ $t('common_list.permanentGold') }}</el-text>
<el-input v-model="auditRow.gold" size="small" style="width:10vw;" disabled />&nbsp;{{ $t('common.') }}
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">免费金币</el-text>
<el-input v-model="auditRow.free" size="small" style="width:10vw;" disabled />&nbsp;
<el-text style="width:4vw;" size="small">{{ $t('common_list.freeGold') }}</el-text>
<el-input v-model="auditRow.free" size="small" style="width:10vw;" disabled />&nbsp;{{ $t('common.') }}
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">退款理由</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.refundReason') }}</el-text>
<el-input v-model="auditRow.refundReason" size="small" style="width:10vw;" :rows="3" maxlength="100" <el-input v-model="auditRow.refundReason" size="small" style="width:10vw;" :rows="3" maxlength="100"
show-word-limit type="textarea" disabled /> show-word-limit type="textarea" disabled />
</div> </div>
</div> </div>
<el-button @click="" class="smallTitle" size="small">原订单信息</el-button>
<el-button @click="" class="smallTitle" size="small">{{ $t('cash_refund.originalOrderInfo') }}</el-button>
<div class="center"> <div class="center">
<div class="center-left"> <div class="center-left">
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">精网号</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.jwcode') }}</el-text>
<el-input v-model="auditRow.jwcode" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.jwcode" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">所属地区</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.market') }}</el-text>
<el-input v-model="auditRow.marketName" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.marketName" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">产品名称</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.goodsName') }}</el-text>
<el-input v-model="auditRow.goodsName" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.goodsName" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款币种</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.paymentCurrency') }}</el-text>
<el-input v-model="auditRow.paymentCurrency" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.paymentCurrency" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款金额</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.paymentAmount') }}</el-text>
<el-input v-model="auditRow.paymentAmount" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.paymentAmount" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款时间</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.payTime') }}</el-text>
<el-input v-model="auditRow.payTime" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.payTime" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;">转账凭证</el-text>
<el-text style="width:4vw;">{{ $t('cash_refund.payVoucher') }}</el-text>
<img v-if="auditRow.payVoucher" :src="auditRow.payVoucher" <img v-if="auditRow.payVoucher" :src="auditRow.payVoucher"
style="width: 80px; height: 80px; object-fit: cover;"> style="width: 80px; height: 80px; object-fit: cover;">
<div v-else> <div v-else>
无转账凭证
{{ $t('cash_refund.noVoucher') }}
</div> </div>
</div> </div>
</div> </div>
<div class="center-right"> <div class="center-right">
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">客户姓名</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.customerName') }}</el-text>
<el-input v-model="auditRow.name" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.name" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">活动名称</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.activityName') }}</el-text>
<el-input v-model="auditRow.activity" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.activity" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">支付方式</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.payModel') }}</el-text>
<el-input v-model="auditRow.payType" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.payType" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账币种</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedCurrency') }}</el-text>
<el-input v-model="auditRow.receivedCurrency" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedCurrency" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账金额</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedAmount') }}</el-text>
<el-input v-model="auditRow.receivedAmount" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedAmount" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账时间</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedTime') }}</el-text>
<el-input v-model="auditRow.receivedTime" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedTime" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">手续费</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.handlingCharge') }}</el-text>
<el-input v-model="auditRow.handlingCharge" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.handlingCharge" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">提交人</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.submitter') }}</el-text>
<el-input v-model="auditRow.submitter" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.submitter" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">备注</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.remark') }}</el-text>
<el-input v-model="auditRow.remark" size="small" style="width:10vw;" :row="3" maxlength="100" <el-input v-model="auditRow.remark" size="small" style="width:10vw;" :row="3" maxlength="100"
type="textarea" show-word-limit disabled /> type="textarea" show-word-limit disabled />
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> <div class="bottom">
<el-button class="smallTitle" size="small" v-show="showReject">驳回信息</el-button>
<el-button class="smallTitle" size="small" v-show="showReject">{{ $t('cash_refund.rejectionInfo') }}</el-button>
<div class="bottom-item" v-show="showReject"> <div class="bottom-item" v-show="showReject">
<el-text style="width:4vw;" size="small">驳回备注</el-text>
<el-input v-model="addForm.remark" placeholder="请输入驳回备注" size="small" style="width:10vw;" :row="3"
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.rejectionRemark') }}</el-text>
<el-input v-model="addForm.remark" :placeholder="$t('cash_refund.placeholder.rejectionRemark')" size="small" style="width:10vw;" :row="3"
maxlength="100" type="textarea" show-word-limit clearable /> maxlength="100" type="textarea" show-word-limit clearable />
</div> </div>
<div style="text-align: center;" v-show="!showReject"> <div style="text-align: center;" v-show="!showReject">
<el-button type="default" @click="showReject = true">驳回</el-button>
<el-button type="primary" @click="handlePass">通过</el-button>
<el-button type="default" @click="showReject = true">{{ $t('common.reject') }}</el-button>
<el-button type="primary" @click="handlePass">{{ $t('common.pass') }}</el-button>
</div> </div>
<div style="text-align: center;" v-show="showReject"> <div style="text-align: center;" v-show="showReject">
<el-button type="default" @click="hideReject">取消</el-button>
<el-button type="primary" @click="handleReject">确定</el-button>
<el-button type="default" @click="hideReject">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="handleReject">{{ $t('common.confirm') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="showSteps" title="退款进度" overflow draggable width="1206px" height="506px" :style="{
<el-dialog v-model="showSteps" :title="$t('refundProgress.title')" overflow draggable width="1206px" height="506px" :style="{
backgroundImage: `url(${RefundFinanceBackground})`, backgroundImage: `url(${RefundFinanceBackground})`,
backgroundSize: 'cover', backgroundSize: 'cover',
backgroundPosition: 'center' backgroundPosition: 'center'
@ -233,108 +233,109 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
提交人<br>{{ submitter || '未知提交人' }}
{{ $t('refundProgress.submitter') }}<br>{{ submitter || t('refundProgress.unknownSubmitter') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img src="@/assets/images/refund-approved.png" alt="已完成">
<img src="@/assets/images/refund-approved.png" alt="Completed">
</template> </template>
</el-step> </el-step>
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
地区财务<br>{{ areaFinance || '未记录审核人' }}
{{ $t('refundProgress.areaFinance') }}<br>{{ areaFinance || t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img v-if="currentStep === 2" src="@/assets/images/refund-rejected.png" alt="已驳回">
<img v-else-if="currentStep === 1" src="@/assets/images/refund-approving.png" alt="待审核">
<img v-else-if="currentStep > 2" src="@/assets/images/refund-approved.png" alt="已审核">
<img v-if="currentStep === 2" src="@/assets/images/refund-rejected.png" alt="Rejected">
<img v-else-if="currentStep === 1" src="@/assets/images/refund-approving.png" alt="Pending">
<img v-else-if="currentStep > 2" src="@/assets/images/refund-approved.png" alt="Approved">
</template> </template>
</el-step> </el-step>
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
地区负责人<br>{{ areaCharge || '未记录审核人' }}
{{ $t('refundProgress.areaCharge') }}<br>{{ areaCharge || t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img v-if="currentStep === 4" src="@/assets/images/refund-rejected.png" alt="已驳回">
<img v-else-if="currentStep === 3" src="@/assets/images/refund-approving.png" alt="待审核">
<img v-if="currentStep === 4" src="@/assets/images/refund-rejected.png" alt="Rejected">
<img v-else-if="currentStep === 3" src="@/assets/images/refund-approving.png" alt="Pending">
<img v-else-if="currentStep > 3 && currentStep != 4" <img v-else-if="currentStep > 3 && currentStep != 4"
src="@/assets/images/refund-approved.png" alt="已审核">
<img v-else-if="currentStep < 3" src="@/assets/images/refund-waiting.png" alt="未开始">
src="@/assets/images/refund-approved.png" alt="Approved">
<img v-else-if="currentStep < 3" src="@/assets/images/refund-waiting.png" alt="Not Started">
</template> </template>
</el-step> </el-step>
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
总部财务<br>{{ headFinance || '未记录审核人' }}
{{ $t('refundProgress.headFinance') }}<br>{{ headFinance || t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img v-if="currentStep === 6" src="@/assets/images/refund-rejected.png" alt="已驳回">
<img v-else-if="currentStep === 5" src="@/assets/images/refund-approving.png" alt="待审核">
<img v-if="currentStep === 6" src="@/assets/images/refund-rejected.png" alt="Rejected">
<img v-else-if="currentStep === 5" src="@/assets/images/refund-approving.png" alt="Pending">
<img v-else-if="currentStep > 5 && currentStep != 6" <img v-else-if="currentStep > 5 && currentStep != 6"
src="@/assets/images/refund-approved.png" alt="已审核">
<img v-else-if="currentStep < 5" src="@/assets/images/refund-waiting.png" alt="未开始">
src="@/assets/images/refund-approved.png" alt="Approved">
<img v-else-if="currentStep < 5" src="@/assets/images/refund-waiting.png" alt="Not Started">
</template> </template>
</el-step> </el-step>
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
指定执行人<br>{{ executor || '未记录执行人' }}
{{ $t('refundProgress.executor') }}<br>{{ executor || t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img v-if="currentStep === 7" src="@/assets/images/refund-approving.png" alt="待处理">
<img v-else-if="currentStep === 8" src="@/assets/images/refund-approved.png" alt="已完成">
<img v-else-if="currentStep < 7" src="@/assets/images/refund-waiting.png" alt="未开始">
<img v-if="currentStep === 7" src="@/assets/images/refund-approving.png" alt="Pending">
<img v-else-if="currentStep === 8" src="@/assets/images/refund-approved.png" alt="Completed">
<img v-else-if="currentStep < 7" src="@/assets/images/refund-waiting.png" alt="Not Started">
</template> </template>
</el-step> </el-step>
</el-steps> </el-steps>
</div> </div>
<div class="steps-btn"> <div class="steps-btn">
<el-button type="primary" @click="showSteps = false">确定</el-button>
<el-button type="primary" @click="showSteps = false">{{ $t('common.confirm') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-dialog v-model="exportListVisible" :title="$t('common_export.exportList')" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading"> <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<el-table-column prop="fileName" :label="$t('common_export.fileName')" />
<el-table-column prop="state" :label="$t('common_export.status')">
<template #default="scope"> <template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'"> <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }} {{ getTagText(scope.row.state) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="createTime" :label="$t('common_export.createTime')">
<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') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作">
<el-table-column :label="$t('common_export.operation')">
<template #default="scope"> <template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)" <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2"> :disabled="scope.row.state !== 2">
下载
{{ $t('common_export.download') }}
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
<el-button text @click="exportListVisible = false">{{ $t('common_export.close') }}</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
@ -349,7 +350,8 @@ import { permissionMapping, findMenuById, hasMenuPermission } from "@/utils/menu
import moment from 'moment' import moment from 'moment'
import { productList, CurrencyForId } from '@/views/moneyManage/receiveDetail/utils/staticData.js' import { productList, CurrencyForId } from '@/views/moneyManage/receiveDetail/utils/staticData.js'
import RefundFinanceBackground from '@/assets/images/refund-progress.png' import RefundFinanceBackground from '@/assets/images/refund-progress.png'
import { isNumber } from 'lodash'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const currentStep = ref(0)// const currentStep = ref(0)//
const searchForm = ref({ const searchForm = ref({
@ -446,6 +448,8 @@ const payments = ref([{
label: 'Ipay88-Link平台' label: 'Ipay88-Link平台'
} }
]) ])
// status [step, isReject]
const statusStepMap = { const statusStepMap = {
10: [1, false], 10: [1, false],
12: [2, true], 12: [2, true],
@ -456,22 +460,25 @@ const statusStepMap = {
40: [7, false], 40: [7, false],
41: [8, false] 41: [8, false]
} }
const statusList = ref(['待审核', '审核通过', '已驳回', '退款成功'])
// key i18n
const statusList = ref(['waitAudit', 'passed', 'rejected', 'RefundSuccessful'])
// //
const getRefund = async function () { const getRefund = async function () {
if (!hasMenuPermission(menuTree.value, permissionMapping.view_area_finance_refund)) { if (!hasMenuPermission(menuTree.value, permissionMapping.view_area_finance_refund)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermissionAreaRefundView'))
return return
} }
try { try {
const statusParam = ref([10, 20, 22, 30, 32, 40, 41]) const statusParam = ref([10, 20, 22, 30, 32, 40, 41])
if (searchForm.value.statuses === '审核通过') {
if (searchForm.value.statuses === 'passed') {
statusParam.value = [20, 30, 40] statusParam.value = [20, 30, 40]
} else if (searchForm.value.statuses === '已驳回') {
} else if (searchForm.value.statuses === 'rejected') {
statusParam.value = [12, 22, 32] statusParam.value = [12, 22, 32]
} else if (searchForm.value.statuses === '待审核') {
} else if (searchForm.value.statuses === 'waitAudit') {
statusParam.value = [10] statusParam.value = [10]
} else if (searchForm.value.statuses === '退款成功') {
} else if (searchForm.value.statuses === 'RefundSuccessful') {
statusParam.value = [41] statusParam.value = [41]
} else { } else {
statusParam.value = [10, 20, 22, 30, 32, 40, 41] statusParam.value = [10, 20, 22, 30, 32, 40, 41]
@ -483,13 +490,12 @@ const getRefund = async function () {
if (searchForm.value.jwcode) { if (searchForm.value.jwcode) {
const isPositiveInteger = /^[1-9]\d*$/.test(searchForm.value.jwcode); const isPositiveInteger = /^[1-9]\d*$/.test(searchForm.value.jwcode);
if (!isPositiveInteger) { if (!isPositiveInteger) {
ElMessage.error('请输入正确的精网号')
ElMessage.error(t('elmessage.invalidJwcodeFormat'))
return; return;
} }
} }
// 400
if (searchForm.value.jwcode.length > 8) { if (searchForm.value.jwcode.length > 8) {
ElMessage.error('精网号长度不能超过8位')
ElMessage.error(t('elmessage.jwcodeTooLong'))
return; return;
} }
@ -497,16 +503,13 @@ const getRefund = async function () {
pageNum: pagination.value.pageNum, pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize, pageSize: pagination.value.pageSize,
cashRecordDTO: { cashRecordDTO: {
jwcode: searchForm.value.jwcode,//
name: searchForm.value.name,//
jwcode: searchForm.value.jwcode,
name: searchForm.value.name,
markets: searchForm.value.markets && searchForm.value.markets.length > 0 ? [searchForm.value.markets[searchForm.value.markets.length - 1]] : [], markets: searchForm.value.markets && searchForm.value.markets.length > 0 ? [searchForm.value.markets[searchForm.value.markets.length - 1]] : [],
goodsName: goodsName,//
statuses: statusParam.value,//1012
// 2022
// 3032
// 4041退
paymentCurrency: CurrencyForId(searchForm.value.paymentCurrency),//
payType: searchForm.value.payType,//
goodsName: goodsName,
statuses: statusParam.value,
paymentCurrency: CurrencyForId(searchForm.value.paymentCurrency),
payType: searchForm.value.payType,
startTime: dateRange.value && dateRange.value[0] ? dayjs(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : "", startTime: dateRange.value && dateRange.value[0] ? dayjs(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : "",
endTime: dateRange.value && dateRange.value[1] ? dayjs(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : "", endTime: dateRange.value && dateRange.value[1] ? dayjs(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : "",
adminId: adminData.value.id adminId: adminData.value.id
@ -522,13 +525,14 @@ const getRefund = async function () {
tableData.value = result.data.list || [] tableData.value = result.data.list || []
pagination.value.total = result.data.total || 0 pagination.value.total = result.data.total || 0
} catch (error) { } catch (error) {
ElMessage.error(error.message || '查询失败')
ElMessage.error(error.message || t('elmessage.requestFailed'))
} }
} }
// //
const handlePass = async function () { const handlePass = async function () {
if (!hasMenuPermission(menuTree.value, permissionMapping.audit_area_finance_refund)) { if (!hasMenuPermission(menuTree.value, permissionMapping.audit_area_finance_refund)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermissionAreaRefundAudit'))
return return
} }
try { try {
@ -541,28 +545,35 @@ const handlePass = async function () {
} }
const result = await API({ const result = await API({
url: '/Money/review', url: '/Money/review',
data: params
params
}) })
if (result.code === 200) { if (result.code === 200) {
ElMessage.success('审核通过')
ElMessage.success(t('elmessage.approveSuccess'))
showAudit.value = false showAudit.value = false
getRefund() getRefund()
} else {
ElMessage.error(result.msg || t('elmessage.approveFailed'))
} }
} catch (error) { } catch (error) {
ElMessage.error(error.message || '审核失败')
ElMessage.error(error.message || t('elmessage.approveFailed'))
} }
} }
// //
const handleReject = async function () { const handleReject = async function () {
if (!hasMenuPermission(menuTree.value, permissionMapping.audit_area_finance_refund)) { if (!hasMenuPermission(menuTree.value, permissionMapping.audit_area_finance_refund)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermissionAreaRefundAudit'))
return
}
if (!addForm.value.remark.trim()) {
ElMessage.warning(t('elmessage.rejectReasonPlaceholder'))
return return
} }
try { try {
const params = { const params = {
id: auditRow.value.id, id: auditRow.value.id,
status: 12, status: 12,
rejectReason: addForm.value.remark,
rejectReason: addForm.value.remark.trim(),
areaFinance: adminData.value.adminName, areaFinance: adminData.value.adminName,
auditId: auditRow.value.auditId, auditId: auditRow.value.auditId,
orderCode: auditRow.value.orderCode, orderCode: auditRow.value.orderCode,
@ -570,38 +581,36 @@ const handleReject = async function () {
} }
const result = await API({ const result = await API({
url: '/Money/review', url: '/Money/review',
data: params
params
}) })
if (result.code === 200) { if (result.code === 200) {
ElMessage.success('审核驳回')
ElMessage.success(t('elmessage.rejectSuccess'))
showAudit.value = false showAudit.value = false
getRefund() getRefund()
addForm.value.remark = '' addForm.value.remark = ''
showReject.value = false showReject.value = false
} else {
ElMessage.error(result.msg || t('elmessage.rejectFailed'))
} }
} catch (error) { } catch (error) {
ElMessage.error(error.message || '审核失败')
ElMessage.error(error.message || t('elmessage.rejectFailed'))
} }
} }
const currencies = ref(['美元(USD)', '港币(HKD)', '新币(SGD)', '马币(MYR)', '泰铢(THB)', '加币(CAD)', '越南盾(VDN)', '韩元(KRW)']) const currencies = ref(['美元(USD)', '港币(HKD)', '新币(SGD)', '马币(MYR)', '泰铢(THB)', '加币(CAD)', '越南盾(VDN)', '韩元(KRW)'])
const channelOptions = ref(["Stripe-链接收款", "PaymentAsia-链接收款", "Ipay88-链接收款", "银行转账", "刷卡", "现金", "支票", "Grabpay", "Nets", "E-Transfer", "Paypal"]) const channelOptions = ref(["Stripe-链接收款", "PaymentAsia-链接收款", "Ipay88-链接收款", "银行转账", "刷卡", "现金", "支票", "Grabpay", "Nets", "E-Transfer", "Paypal"])
const getMarket = async function () { const getMarket = async function () {
try { try {
const result = await API({ const result = await API({
url: '/market/selectMarket', url: '/market/selectMarket',
}) })
console.log('看看地区树', result)
const transformTree = (nodes) => { const transformTree = (nodes) => {
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]) ? transformTree([child])
: null; : null;
return { return {
value: child.id, value: child.id,
label: child.name, label: child.name,
@ -610,14 +619,14 @@ const getMarket = async function () {
}); });
}; };
market.value = transformTree(result.data) market.value = transformTree(result.data)
console.log('转换后的地区树==============', market.value)
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
} }
} }
const showStep = function (row) { const showStep = function (row) {
if (!hasMenuPermission(menuTree.value, permissionMapping.track_area_finance_refund_progress)) { if (!hasMenuPermission(menuTree.value, permissionMapping.track_area_finance_refund_progress)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermissionAreaRefundTrack'))
return return
} }
@ -636,18 +645,18 @@ const showStep = function (row) {
isReject.value = reject isReject.value = reject
} }
console.log('步骤条状态', currentStep.value)
showSteps.value = true showSteps.value = true
} }
const exportExcel = async function () { const exportExcel = async function () {
const statusParam = ref([10, 20, 22, 30, 32, 40, 41]) const statusParam = ref([10, 20, 22, 30, 32, 40, 41])
if (searchForm.value.statuses === '审核通过') {
if (searchForm.value.statuses === 'passed') {
statusParam.value = [20, 30, 40] statusParam.value = [20, 30, 40]
} else if (searchForm.value.statuses === '已驳回') {
} else if (searchForm.value.statuses === 'rejected') {
statusParam.value = [12, 22, 32] statusParam.value = [12, 22, 32]
} else if (searchForm.value.statuses === '待审核') {
} else if (searchForm.value.statuses === 'waitAudit') {
statusParam.value = [10] statusParam.value = [10]
} else if (searchForm.value.statuses === '退款成功') {
} else if (searchForm.value.statuses === 'RefundSuccessful') {
statusParam.value = [41] statusParam.value = [41]
} else { } else {
statusParam.value = [10, 20, 22, 30, 32, 40, 41] statusParam.value = [10, 20, 22, 30, 32, 40, 41]
@ -659,13 +668,12 @@ const exportExcel = async function () {
if (searchForm.value.jwcode) { if (searchForm.value.jwcode) {
const isPositiveInteger = /^[1-9]\d*$/.test(searchForm.value.jwcode); const isPositiveInteger = /^[1-9]\d*$/.test(searchForm.value.jwcode);
if (!isPositiveInteger) { if (!isPositiveInteger) {
ElMessage.error('请输入正确的精网号')
ElMessage.error(t('elmessage.invalidJwcodeFormat'))
return; return;
} }
} }
// 400
if (searchForm.value.jwcode.length > 8) { if (searchForm.value.jwcode.length > 8) {
ElMessage.error('精网号长度不能超过8位')
ElMessage.error(t('elmessage.jwcodeTooLong'))
return; return;
} }
@ -673,16 +681,13 @@ const exportExcel = async function () {
pageNum: pagination.value.pageNum, pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize, pageSize: pagination.value.pageSize,
cashRecordDTO: { cashRecordDTO: {
jwcode: searchForm.value.jwcode,//
name: searchForm.value.name,//
jwcode: searchForm.value.jwcode,
name: searchForm.value.name,
markets: searchForm.value.markets && searchForm.value.markets.length > 0 ? [searchForm.value.markets[searchForm.value.markets.length - 1]] : [], markets: searchForm.value.markets && searchForm.value.markets.length > 0 ? [searchForm.value.markets[searchForm.value.markets.length - 1]] : [],
goodsName: goodsName,//
statuses: statusParam.value,//1012
// 2022
// 3032
// 4041退
paymentCurrency: CurrencyForId(searchForm.value.paymentCurrency),//
payType: searchForm.value.payType,//
goodsName: goodsName,
statuses: statusParam.value,
paymentCurrency: CurrencyForId(searchForm.value.paymentCurrency),
payType: searchForm.value.payType,
startTime: dateRange.value && dateRange.value[0] ? dayjs(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : "", startTime: dateRange.value && dateRange.value[0] ? dayjs(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : "",
endTime: dateRange.value && dateRange.value[1] ? dayjs(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : "", endTime: dateRange.value && dateRange.value[1] ? dayjs(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : "",
adminId: adminData.value.id adminId: adminData.value.id
@ -691,34 +696,35 @@ const exportExcel = async function () {
const res = await API({ url: '/export/exportFinance', data: params }) const res = await API({ url: '/export/exportFinance', data: params })
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功')
ElMessage.success(t('elmessage.exportSuccess'))
} else { } else {
ElMessage.error(res.msg || '导出失败')
ElMessage.error(res.msg || t('elmessage.exportFailed'))
} }
} }
const openExportList = () => { const openExportList = () => {
getExportList() getExportList()
exportListVisible.value = true exportListVisible.value = true
} }
const getExportList = async () => { const getExportList = async () => {
exportListLoading.value = true exportListLoading.value = true
try { try {
const result = await API({ url: '/export/export' }) const result = await API({ url: '/export/export' })
if (result.code === 200) { if (result.code === 200) {
const filteredData = result.data.filter(item => {
return item.type === 12
})
const filteredData = result.data.filter(item => item.type === 12) // 12=
exportList.value = filteredData exportList.value = filteredData
} else { } else {
ElMessage.error(result.msg || '获取导出列表失败')
ElMessage.error(result.msg || t('elmessage.getExportListError'))
} }
} catch (error) { } catch (error) {
console.error('获取导出列表出错:', error) console.error('获取导出列表出错:', error)
ElMessage.error('获取导出列表失败,请稍后重试')
ElMessage.error(t('elmessage.getExportListError'))
} finally { } finally {
exportListLoading.value = false exportListLoading.value = false
} }
} }
const downloadExportFile = (item) => { const downloadExportFile = (item) => {
if (item.state === 2) { if (item.state === 2) {
const link = document.createElement('a') const link = document.createElement('a')
@ -726,81 +732,83 @@ const downloadExportFile = (item) => {
link.download = item.fileName link.download = item.fileName
link.click() link.click()
} else { } else {
ElMessage.warning('文件还在导出中,请稍后再试')
ElMessage.warning(t('elmessage.exportingInProgress'))
} }
} }
//
const getTagType = (state) => { const getTagType = (state) => {
switch (state) { switch (state) {
case 0:
return 'info';
case 1:
return 'primary';
case 2:
return 'success';
case 3:
return 'danger';
default:
return 'info';
}
}
//
case 0: return 'info';
case 1: return 'primary';
case 2: return 'success';
case 3: return 'danger';
default: return 'info';
}
}
const getTagText = (state) => { const getTagText = (state) => {
switch (state) { switch (state) {
case 0:
return '待执行';
case 1:
return '执行中';
case 2:
return '执行完成';
case 3:
return '执行出错';
default:
return '未知状态';
case 0: return t('elmessage.pendingExecution');
case 1: return t('elmessage.executing');
case 2: return t('elmessage.executed');
case 3: return t('elmessage.errorExecution');
default: return t('elmessage.unknownStatus');
} }
} }
const showAudit2 = function (row) { const showAudit2 = function (row) {
auditRow.value = row auditRow.value = row
showAudit.value = true showAudit.value = true
} }
const reset = function () { const reset = function () {
searchForm.value = { searchForm.value = {
jwcode: '', jwcode: '',
markets: [], markets: [],
statuses: [] statuses: []
} }
//
pagination.value.pageNum = 1 pagination.value.pageNum = 1
dateRange.value = [] dateRange.value = []
getRefund() getRefund()
} }
const hideReject = function () { const hideReject = function () {
showReject.value = false showReject.value = false
addForm.value.remark = '' addForm.value.remark = ''
} }
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),
] ]
const disabledDate = (time) => { const disabledDate = (time) => {
const limitDate = new Date(2025, 0, 1); const limitDate = new Date(2025, 0, 1);
return time.getTime() < limitDate.getTime(); return time.getTime() < limitDate.getTime();
} }
const handlePageSizeChange = function (val) { const handlePageSizeChange = function (val) {
pagination.value.pageSize = val pagination.value.pageSize = val
getRefund() getRefund()
} }
const handleCurrentChange = function (val) { const handleCurrentChange = function (val) {
pagination.value.pageNum = val pagination.value.pageNum = val
getRefund() getRefund()
} }
const handleDatePickerChange = () => {
//
}
onMounted(() => { onMounted(() => {
console.log('???????????????????', adminData.value)
getRefund() getRefund()
getMarket() getMarket()
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
/* 样式完全保留,仅注释微调 */
:deep(.el-table__header-wrapper), :deep(.el-table__header-wrapper),
:deep(.el-table__body-wrapper), :deep(.el-table__body-wrapper),
:deep(.el-table__cell), :deep(.el-table__cell),

185
src/views/moneyManage/refundDetail/refundHeader.vue

@ -3,96 +3,97 @@
<el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);"> <el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);">
<div class="condition"> <div class="condition">
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">精网号</el-text>
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width:9vw;" clearable />
<el-text size="large" style="width:4vw;">{{ $t('common.jwcode') }}</el-text>
<el-input v-model="searchForm.jwcode" :placeholder="$t('common.jwcodePlaceholder')" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">客户姓名</el-text>
<el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
<el-text size="large" style="width:4vw;">{{ $t('common.customerName') }}</el-text>
<el-input v-model="searchForm.name" :placeholder="$t('common.customerNamePlaceholder')" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-text size="large" style="width:4vw;">{{ $t('common.goodsName') }}</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" <el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;"
placeholder="请选择产品名称" clearable />
:placeholder="$t('common.goodsNamePlaceholder')" clearable />
</div> </div>
<div class="item1" v-if="adminData.markets === '总部'"> <div class="item1" v-if="adminData.markets === '总部'">
<el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
<el-text size="large" style="width:4vw;">{{ $t('common.market') }}</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" :placeholder="$t('common.marketPlaceholder')"
clearable @change="handleMarketChange" /> clearable @change="handleMarketChange" />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">订单状态</el-text>
<el-select v-model="searchForm.statuses" style="width:9vw;" placeholder="请选择订单状态" clearable>
<el-text size="large" style="width:4vw;">{{ $t('common.orderStatus') }}</el-text>
<el-select v-model="searchForm.statuses" style="width:9vw;" :placeholder="$t('common.orderStatus')" clearable>
<el-option v-for="item in statusList" :label="item" :value="item" :key="item" /> <el-option v-for="item in statusList" :label="item" :value="item" :key="item" />
</el-select> </el-select>
</div> </div>
</div> </div>
<div class="condition"> <div class="condition">
<div class="item2"> <div class="item2">
<el-text size="large" style="width:4vw;">付款币种</el-text>
<el-select v-model="searchForm.paymentCurrency" style="width:9vw;" placeholder="请选择付款币种" clearable>
<el-text size="large" style="width:4vw;">{{ $t('cash_refund.paymentCurrency') }}</el-text>
<el-select v-model="searchForm.paymentCurrency" style="width:9vw;" :placeholder="$t('common.payModelPlaceholder')" clearable>
<el-option v-for="item in currencies" :key="item" :label="item" :value="item" /> <el-option v-for="item in currencies" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="item2"> <div class="item2">
<el-text size="large" style="width:4vw;">支付方式</el-text>
<el-select v-model="searchForm.payType" style="width:9vw;" placeholder="请选择支付方式" clearable>
<el-text size="large" style="width:4vw;">{{ $t('common.payModel') }}</el-text>
<el-select v-model="searchForm.payType" style="width:9vw;" :placeholder="$t('common.payModelPlaceholder')" clearable>
<el-option v-for="item in channelOptions" :key="item" :label="item" :value="item" /> <el-option v-for="item in channelOptions" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="item2" style="width: 28.5vw;"> <div class="item2" style="width: 28.5vw;">
<el-text size="large" style="width:4vw;">付款时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width:22vw;" @change="handleDatePickerChange" clearable
<el-text size="large" style="width:4vw;">{{ $t('cash_refund.payTime') }}</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" :range-separator="$t('common.to')"
:start-placeholder="$t('common.startTime')" :end-placeholder="$t('common.endTime')"
style="width:22vw;" @change="handleDatePickerChange" clearable
:disabled-date="disabledDate" :default-time="defaultTime" /> :disabled-date="disabledDate" :default-time="defaultTime" />
</div> </div>
<div> <div>
<el-button type="primary" @click="getRefund">查询</el-button>
<el-button type="warning" @click="exportExcel()">导出excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
<el-button type="success" @click="reset">重置</el-button>
<el-button type="primary" @click="getRefund">{{ $t('common.search') }}</el-button>
<el-button type="warning" @click="exportExcel()">{{ $t('common.exportExcel') }}</el-button>
<el-button type="primary" @click="openExportList">{{ $t('common.viewExportList') }}</el-button>
<el-button type="success" @click="reset">{{ $t('common.reset') }}</el-button>
</div> </div>
</div> </div>
</el-card> </el-card>
<el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);"> <el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);">
<el-table :data="tableData" style="height:73vh;width:82vw"> <el-table :data="tableData" style="height:73vh;width:82vw">
<el-table-column type="index" label="序号" width="60" fixed="left">
<el-table-column type="index" :label="$t('common_list.id')" width="60" fixed="left">
<template #default="scope"> <template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }} {{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="Homily ID" width="120" fixed="left" />
<el-table-column prop="jwcode" label="姓名" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" label="所属地区" width="120" />
<el-table-column prop="goodsName" label="产品名称" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" label="产品数量" width="120" />
<el-table-column prop="refundModel" label="退款方式" width="120">
<el-table-column prop="name" :label="$t('common_list.homilyId')" width="120" fixed="left" />
<el-table-column prop="jwcode" :label="$t('common_list.name')" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" :label="$t('common_list.market')" width="120" />
<el-table-column prop="goodsName" :label="$t('common_list.goodsName')" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" :label="$t('common_list.goodsNum')" width="120" />
<el-table-column prop="refundModel" :label="$t('cash_refund.refundModel')" width="120">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 1 ? '部分退款' : '全部退款' }}
{{ scope.row.refundModel === 1 ? $t('cash_refund.partialRefund') : $t('cash_refund.fullRefund') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="submitter" label="提交人" width="120" />
<el-table-column prop="refundReason" label="退款理由" width="120" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip />
<el-table-column prop="status" label="订单状态" width="120">
<el-table-column prop="submitter" :label="$t('common_list.submitter')" width="120" />
<el-table-column prop="refundReason" :label="$t('common_list.refundReason')" width="120" show-overflow-tooltip />
<el-table-column prop="remark" :label="$t('common_list.remark')" width="150" show-overflow-tooltip />
<el-table-column prop="status" :label="$t('common.orderStatus')" width="120">
<template #default="scope"> <template #default="scope">
{{ {{
[30].includes(scope.row.status) ? '待审核' :
[40].includes(scope.row.status) ? '审核通过' :
scope.row.status === 32 ? '已驳回' :
scope.row.status === 41 ? '退款成功' : scope.row.status
[30].includes(scope.row.status) ? $t('audit.waitAudit') :
[40].includes(scope.row.status) ? $t('audit.passed') :
scope.row.status === 32 ? $t('audit.rejected') :
scope.row.status === 41 ? $t('audit.RefundSuccessful') : scope.row.status
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="operation" label="操作" fixed="right" width="100px">
<el-table-column :label="$t('audit.operation')" fixed="right" width="100px">
<template #default="scope"> <template #default="scope">
<div class="operation"> <div class="operation">
<el-button v-if="scope.row.status === 30" type="primary" text @click="showAudit(scope.row)"> <el-button v-if="scope.row.status === 30" type="primary" text @click="showAudit(scope.row)">
审核
{{ $t('audit.audit') }}
</el-button> </el-button>
<el-button v-else type="primary" text @click="showStep(scope.row)"> <el-button v-else type="primary" text @click="showStep(scope.row)">
查看进度
{{ $t('cash_refund.viewProgress') }}
</el-button> </el-button>
</div> </div>
</template> </template>
@ -104,137 +105,137 @@
style="margin-top: 1vh;"></el-pagination> style="margin-top: 1vh;"></el-pagination>
</el-card> </el-card>
<el-dialog v-model="showAudit2" title="审核" class="audit2" width="35vw" overflow draggable
<el-dialog v-model="showAudit2" :title="$t('cash_refund.audit')" class="audit2" width="35vw" overflow draggable
style="background-color: #F3FAFE !important;"> style="background-color: #F3FAFE !important;">
<div class="top"> <div class="top">
<el-button @click="" class="smallTitle" size="small">退款申请信息</el-button>
<el-button @click="" class="smallTitle" size="small">{{ $t('cash_refund.refundApplicationInfo') }}</el-button>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">退款方式</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.refundModel') }}</el-text>
<el-select v-model="auditRow.refundModel" size="small" style="width:10vw;" disabled> <el-select v-model="auditRow.refundModel" size="small" style="width:10vw;" disabled>
<el-option label="全部退款" :value="0"></el-option>
<el-option label="部分退款" :value="1"></el-option>
<el-option :label="$t('cash_refund.fullRefund')" :value="0"></el-option>
<el-option :label="$t('cash_refund.partialRefund')" :value="1"></el-option>
</el-select> </el-select>
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">永久金币</el-text>
<el-input v-model="auditRow.gold" size="small" style="width:10vw;" disabled />&nbsp;
<el-text style="width:4vw;" size="small">{{ $t('common.permanentGold') }}</el-text>
<el-input v-model="auditRow.gold" size="small" style="width:10vw;" disabled />&nbsp;{{ $t('common.') }}
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">免费金币</el-text>
<el-input v-model="auditRow.free" size="small" style="width:10vw;" disabled />&nbsp;
<el-text style="width:4vw;" size="small">{{ $t('common.freeGold') }}</el-text>
<el-input v-model="auditRow.free" size="small" style="width:10vw;" disabled />&nbsp;{{ $t('common.') }}
</div> </div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">退款理由</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.refundReason') }}</el-text>
<el-input v-model="auditRow.refundReason" size="small" style="width:10vw;" :rows="3" maxlength="100" <el-input v-model="auditRow.refundReason" size="small" style="width:10vw;" :rows="3" maxlength="100"
show-word-limit type="textarea" disabled /> show-word-limit type="textarea" disabled />
</div> </div>
</div> </div>
<el-button @click="" class="smallTitle" size="small">原订单信息</el-button>
<el-button @click="" class="smallTitle" size="small">{{ $t('cash_refund.originalOrderInfo') }}</el-button>
<div class="center"> <div class="center">
<div class="center-left"> <div class="center-left">
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">精网号</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.jwcode') }}</el-text>
<el-input v-model="auditRow.jwcode" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.jwcode" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">产品名称</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.goodsName') }}</el-text>
<el-input v-model="auditRow.goodsName" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.goodsName" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">所属地区</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.market') }}</el-text>
<el-input v-model="auditRow.marketName" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.marketName" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款币种</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.paymentCurrency') }}</el-text>
<el-input v-model="auditRow.paymentCurrency" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.paymentCurrency" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款金额</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.paymentAmount') }}</el-text>
<el-input v-model="auditRow.paymentAmount" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.paymentAmount" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;" size="small">付款时间</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.payTime') }}</el-text>
<el-input v-model="auditRow.payTime" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.payTime" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="center-item"> <div class="center-item">
<el-text style="width:4vw;">转账凭证</el-text>
<el-text style="width:4vw;">{{ $t('cash_refund.payVoucher') }}</el-text>
<img v-if="auditRow.payVoucher" :src="auditRow.payVoucher" <img v-if="auditRow.payVoucher" :src="auditRow.payVoucher"
style="width: 80px; height: 80px; object-fit: cover;"> style="width: 80px; height: 80px; object-fit: cover;">
<div v-else> <div v-else>
无转账凭证
{{ $t('cash_refund.noVoucher') }}
</div> </div>
</div> </div>
</div> </div>
<div class="center-right"> <div class="center-right">
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">客户姓名</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.customerName') }}</el-text>
<el-input v-model="auditRow.name" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.name" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">活动名称</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.activityName') }}</el-text>
<el-input v-model="auditRow.activity" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.activity" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">支付方式</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common.payModel') }}</el-text>
<el-input v-model="auditRow.payType" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.payType" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账币种</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedCurrency') }}</el-text>
<el-input v-model="auditRow.receivedCurrency" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedCurrency" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账金额</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedAmount') }}</el-text>
<el-input v-model="auditRow.receivedAmount" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedAmount" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">到账时间</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.receivedTime') }}</el-text>
<el-input v-model="auditRow.receivedTime" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.receivedTime" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">手续费</el-text>
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.handlingCharge') }}</el-text>
<el-input v-model="auditRow.handlingCharge" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.handlingCharge" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">提交人</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.submitter') }}</el-text>
<el-input v-model="auditRow.submitter" size="small" style="width:10vw;" disabled /> <el-input v-model="auditRow.submitter" size="small" style="width:10vw;" disabled />
</div> </div>
<div class="right-item"> <div class="right-item">
<el-text style="width:4vw;" size="small">备注</el-text>
<el-text style="width:4vw;" size="small">{{ $t('common_list.remark') }}</el-text>
<el-input v-model="auditRow.remark" size="small" style="width:10vw;" :row="3" maxlength="100" <el-input v-model="auditRow.remark" size="small" style="width:10vw;" :row="3" maxlength="100"
type="textarea" show-word-limit disabled /> type="textarea" show-word-limit disabled />
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> <div class="bottom">
<el-button class="smallTitle" size="small" v-show="showReject">驳回信息</el-button>
<el-button class="smallTitle" size="small" v-show="showReject">{{ $t('cash_refund.rejectionInfo') }}</el-button>
<div class="bottom-item" v-show="showReject"> <div class="bottom-item" v-show="showReject">
<el-text style="width:4vw;" size="small">驳回备注</el-text>
<el-input v-model="addForm.remark" placeholder="请输入驳回备注" size="small" style="width:10vw;" :row="3"
<el-text style="width:4vw;" size="small">{{ $t('cash_refund.rejectionRemark') }}</el-text>
<el-input v-model="addForm.remark" :placeholder="$t('cash_refund.placeholder.rejectionRemark')" size="small" style="width:10vw;" :row="3"
maxlength="100" type="textarea" show-word-limit clearable /> maxlength="100" type="textarea" show-word-limit clearable />
</div> </div>
<div class="bottom-item" v-show="showExecutor"> <div class="bottom-item" v-show="showExecutor">
<el-text style="width:4vw;" size="small">执行人</el-text>
<el-text style="width:4vw;" size="small">{{ $t('refundProgress.executor') }}</el-text>
<el-select v-model="addForm.executor" style="width:9vw;"> <el-select v-model="addForm.executor" style="width:9vw;">
<el-option v-for="item in executorList" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in executorList" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
<div style="text-align: center;" v-show="!showReject && !showExecutor"> <div style="text-align: center;" v-show="!showReject && !showExecutor">
<el-button type="default" @click="showReject = true">驳回</el-button>
<el-button type="primary" @click="showExecutor = true">通过</el-button>
<el-button type="default" @click="showReject = true">{{ $t('common.reject') }}</el-button>
<el-button type="primary" @click="showExecutor = true">{{ $t('common.pass') }}</el-button>
</div> </div>
<div style="text-align: center;" v-show="showReject"> <div style="text-align: center;" v-show="showReject">
<el-button type="default" @click="hideReject">取消</el-button>
<el-button type="primary" @click="handleReject">确定</el-button>
<el-button type="default" @click="hideReject">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="handleReject">{{ $t('common.confirm') }}</el-button>
</div> </div>
<div style="text-align: center;" v-show="showExecutor"> <div style="text-align: center;" v-show="showExecutor">
<el-button type="default" @click="hideExecutor">取消</el-button>
<el-button type="primary" @click="handlePass">确定</el-button>
<el-button type="default" @click="hideExecutor">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="handlePass">{{ $t('common.confirm') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="showSteps" title="退款进度" overflow draggable width="1206px" height="506px" :style="{
<el-dialog v-model="showSteps" :title="$t('refundProgress.title')" overflow draggable width="1206px" height="506px" :style="{
backgroundImage: `url(${BackgroundSvg})`, backgroundImage: `url(${BackgroundSvg})`,
backgroundSize: 'cover', backgroundSize: 'cover',
backgroundPosition: 'center' backgroundPosition: 'center'
@ -245,7 +246,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
提交人<br>{{ submitter || '未知提交人' }}
{{ $t('refundProgress.submitter') }}<br>{{ submitter || $t('refundProgress.unknownSubmitter') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -256,7 +257,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
地区财务<br>{{ areaFinance || '未记录审核人' }}
{{ $t('refundProgress.areaFinance') }}<br>{{ areaFinance || $t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -269,7 +270,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
地区负责人<br>{{ areaCharge || '未记录审核人' }}
{{ $t('refundProgress.areaCharge') }}<br>{{ areaCharge || $t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -284,7 +285,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
总部财务<br>{{ headFinance || '未记录审核人' }}
{{ $t('refundProgress.headFinance') }}<br>{{ headFinance || $t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -299,7 +300,7 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
指定执行人<br>{{ executor || '未记录执行人' }}
{{ $t('refundProgress.executor') }}<br>{{ executor || $t('refundProgress.notRecorded') }}
</div> </div>
</template> </template>
<template #icon> <template #icon>
@ -311,38 +312,38 @@
</el-steps> </el-steps>
</div> </div>
<div class="steps-btn"> <div class="steps-btn">
<el-button type="primary" @click="showSteps = false">确定</el-button>
<el-button type="primary" @click="showSteps = false">{{ $t('common.confirm') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-dialog v-model="exportListVisible" :title="$t('common_export.exportList')" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading"> <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<el-table-column prop="fileName" :label="$t('common_export.fileName')" />
<el-table-column prop="state" :label="$t('common_export.status')">
<template #default="scope"> <template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'"> <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }} {{ getTagText(scope.row.state) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="createTime" :label="$t('common_export.createTime')">
<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') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作">
<el-table-column :label="$t('common_export.operation')">
<template #default="scope"> <template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)" <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2"> :disabled="scope.row.state !== 2">
下载
{{ $t('common_export.download') }}
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
<el-button text @click="exportListVisible = false">{{ $t('common_export.close') }}</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>

198
src/views/moneyManage/refundDetail/refundService.vue

@ -3,107 +3,106 @@
<el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);"> <el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);">
<div class="condition"> <div class="condition">
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">精网号</el-text>
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width:9vw;" clearable />
<el-text size="large" style="width:4vw;">{{ $t('common.jwcode') }}</el-text>
<el-input v-model="searchForm.jwcode" :placeholder="$t('common.jwcodePlaceholder')" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">客户姓名</el-text>
<el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
<el-text size="large" style="width:4vw;">{{ $t('elmessage.customerName') }}</el-text>
<el-input v-model="searchForm.name" :placeholder="$t('common.customerNamePlaceholder')" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-text size="large" style="width:4vw;">{{ $t('common.goodsName') }}</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable /> <el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
</div> </div>
<div class="item1" v-if="adminData.markets === '总部'"> <div class="item1" v-if="adminData.markets === '总部'">
<el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.market" :options="market" placeholder="请选择所属地区"
<el-text size="large" style="width:4vw;">{{ $t('common.market') }}</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.market" :options="market" :placeholder="$t('common.marketPlaceholder')"
clearable @change="handleMarketChange" /> clearable @change="handleMarketChange" />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;" multiple>订单状态</el-text>
<el-text size="large" style="width:4vw;">{{ $t('common.orderStatus') }}</el-text>
<el-select v-model="searchForm.statuses" style="width:9vw;" clearable> <el-select v-model="searchForm.statuses" style="width:9vw;" clearable>
<el-option v-for="item in statusList" :key="item" :label="item" :value="item" />
<el-option v-for="item in statusList" :key="item" :label="t('cash_refund.' + item)" :value="item" />
</el-select> </el-select>
</div> </div>
</div> </div>
<div class="condition"> <div class="condition">
<div class="item2"> <div class="item2">
<el-text size="large" style="width:4vw;">付款币种</el-text>
<el-text size="large" style="width:4vw;">{{ $t('cash_refund.paymentCurrency') }}</el-text>
<el-select v-model="searchForm.paymentCurrency" style="width:9vw;" clearable> <el-select v-model="searchForm.paymentCurrency" style="width:9vw;" clearable>
<el-option v-for="item in currencies" :key="item" :label="item" :value="item" /> <el-option v-for="item in currencies" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="item2"> <div class="item2">
<el-text size="large" style="width:4vw;">支付方式</el-text>
<el-text size="large" style="width:4vw;">{{ $t('common.payType') }}</el-text>
<el-select v-model="searchForm.payType" style="width:9vw;" clearable> <el-select v-model="searchForm.payType" style="width:9vw;" clearable>
<el-option v-for="item in channelOptions" :key="item" :label="item" :value="item" /> <el-option v-for="item in channelOptions" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="item2" style="width: 28.5vw;"> <div class="item2" style="width: 28.5vw;">
<el-text size="large" style="width:4vw;">付款时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width:22vw;" :disabled-date="disabledDate" :default-time="defaultTime"
<el-text size="large" style="width:4vw;">{{ $t('common.payTime') }}</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" :range-separator="$t('common.to')" :start-placeholder="$t('common.startTime')"
:end-placeholder="$t('common.endTime')" style="width:22vw;" :disabled-date="disabledDate" :default-time="defaultTime"
clearable /> clearable />
</div> </div>
<div> <div>
<el-button type="primary" @click="getRefund">查询</el-button>
<!-- <el-button type="warning">导出excel</el-button>
<el-button type="primary">查看导出列表</el-button> -->
<el-button type="success" @click="reset">重置</el-button>
<el-button type="primary" @click="getRefund">{{ $t('common.search') }}</el-button>
<el-button type="success" @click="reset">{{ $t('common.reset') }}</el-button>
</div> </div>
</div> </div>
</el-card> </el-card>
<el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);"> <el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);">
<el-table :data="tableData" style="height:73vh;width:82vw;background-color: rgb(243,250,254);"> <el-table :data="tableData" style="height:73vh;width:82vw;background-color: rgb(243,250,254);">
<el-table-column type="index" label="序号" width="60" fixed="left">
<el-table-column type="index" :label="$t('common_list.id')" width="60" fixed="left">
<template #default="scope"> <template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }} {{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="jwcode" label="Homily ID" width="120" fixed="left" />
<el-table-column prop="name" label="姓名" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" label="所属地区" width="120" />
<el-table-column prop="activity" label="活动名称" width="120px" show-overflow-tooltip />
<el-table-column prop="goodsName" label="产品名称" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" label="产品数量" width="120" />
<el-table-column prop="paymentCurrency" label="付款币种" width="120" />
<el-table-column prop="paymentAmount" label="付款金额" width="120" />
<el-table-column prop="payType" label="支付方式" width="140" />
<el-table-column prop="payTime" label="付款时间" width="180" />
<el-table-column prop="voucher" label="转账凭证" width="110px">
<el-table-column prop="jwcode" :label="$t('common_list.homilyId')" width="120" fixed="left" />
<el-table-column prop="name" :label="$t('common_list.name')" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" :label="$t('common_list.market')" width="120" />
<el-table-column prop="activity" :label="$t('common.activityName')" width="120px" show-overflow-tooltip />
<el-table-column prop="goodsName" :label="$t('common_list.goodsName')" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" :label="$t('common_list.goodsNum')" width="120" />
<el-table-column prop="paymentCurrency" :label="$t('cash_refund.paymentCurrency')" width="120" />
<el-table-column prop="paymentAmount" :label="$t('cash_refund.paymentAmount')" width="120" />
<el-table-column prop="payType" :label="$t('common_list.payModel')" width="140" />
<el-table-column prop="payTime" :label="$t('common.payTime')" width="180" />
<el-table-column prop="voucher" :label="$t('cash_refund.payVoucher')" 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;" style="display: flex; justify-content: center; align-items: center; cursor: pointer;"
@click="previewImage(scope.row.voucher)"> @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 v-else style="display: flex; justify-content: center; align-items: center; height: 40px;">{{ $t('cash_refund.noVoucher') }}
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip />
<el-table-column prop="status" label="订单状态" width="120">
<el-table-column prop="remark" :label="$t('common_list.remark')" width="150" show-overflow-tooltip />
<el-table-column prop="status" :label="$t('common_list.orderStatus')" width="120">
<template #default="scope"> <template #default="scope">
{{ {{
[10].includes(scope.row.status) ? '已提交' :
[20, 30, 40].includes(scope.row.status) ? '进行中' :
[12, 22, 32].includes(scope.row.status) ? '已驳回' :
[11].includes(scope.row.status) ? '已撤回' :
scope.row.status === 41 ? '已退款' : scope.row.status
[10].includes(scope.row.status) ? t('cash_refund.submitted') :
[20, 30, 40].includes(scope.row.status) ? t('cash_refund.inProgress') :
[12, 22, 32].includes(scope.row.status) ? t('cash_refund.rejected') :
[11].includes(scope.row.status) ? t('cash_refund.withdrawn') :
scope.row.status === 41 ? t('audit.RefundSuccessful') :
scope.row.status
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="operation" label="操作" fixed="right" width="100px">
<el-table-column prop="operation" :label="$t('audit.operation')" fixed="right" width="100px">
<template #default="scope"> <template #default="scope">
<div class="operation"> <div class="operation">
<el-button v-if="scope.row.status === 10" type="primary" text <el-button v-if="scope.row.status === 10" type="primary" text
@click="showBackDialog(scope.row)"> @click="showBackDialog(scope.row)">
撤回
{{ $t('common.cancel') }}
</el-button> </el-button>
<el-button v-if="scope.row.status === 11" type="primary" text <el-button v-if="scope.row.status === 11" type="primary" text
@click="showEditDialog(scope.row)"> @click="showEditDialog(scope.row)">
编辑
{{ $t('common.edit') }}
</el-button> </el-button>
</div> </div>
</template> </template>
@ -115,96 +114,96 @@
style="margin-top: 1vh;"></el-pagination> style="margin-top: 1vh;"></el-pagination>
</el-card> </el-card>
<el-dialog v-model="showEdit" title="退款" class="editDialog" overflow draggable
<el-dialog v-model="showEdit" :title="$t('refund.addCoinRefund')" class="editDialog" overflow draggable
style="width: 40vw; background-color: #F3FAFE !important;"> style="width: 40vw; background-color: #F3FAFE !important;">
<div style="display: flex;"> <div style="display: flex;">
<div class="left"> <div class="left">
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">精网号</el-text>
<el-text style="width:4vw;">{{ $t('common.jwcode') }}</el-text>
<el-input v-model="editRow.jwcode" style="width:10vw;" disabled /> <el-input v-model="editRow.jwcode" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">客户姓名</el-text>
<el-text style="width:4vw;">{{ $t('elmessage.customerName') }}</el-text>
<el-input v-model="editRow.name" style="width:10vw;" disabled /> <el-input v-model="editRow.name" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">所属地区</el-text>
<el-text style="width:4vw;">{{ $t('common.market') }}</el-text>
<el-input v-model="editRow.marketName" style="width:10vw;" disabled /> <el-input v-model="editRow.marketName" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">活动名称</el-text>
<el-text style="width:4vw;">{{ $t('common.activityName') }}</el-text>
<el-input v-model="editRow.activity" style="width:10vw;" disabled /> <el-input v-model="editRow.activity" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">产品名称</el-text>
<el-text style="width:4vw;">{{ $t('common_list.goodsName') }}</el-text>
<el-input v-model="editRow.goodsName" style="width:10vw;" disabled /> <el-input v-model="editRow.goodsName" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">产品数量</el-text>
<el-text style="width:4vw;">{{ $t('common_list.goodsNum') }}</el-text>
<el-input v-model="editRow.goodsNum" style="width:10vw;" disabled /> <el-input v-model="editRow.goodsNum" style="width:10vw;" disabled />
&nbsp;
&nbsp;{{ $t('common.') }}
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">付款币种</el-text>
<el-text style="width:4vw;">{{ $t('cash_refund.paymentCurrency') }}</el-text>
<el-input v-model="editRow.paymentCurrency" style="width:10vw;" disabled /> <el-input v-model="editRow.paymentCurrency" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">付款金额</el-text>
<el-text style="width:4vw;">{{ $t('cash_refund.paymentAmount') }}</el-text>
<el-input v-model="editRow.paymentAmount" style="width:10vw;" disabled /> <el-input v-model="editRow.paymentAmount" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">支付方式</el-text>
<el-text style="width:4vw;">{{ $t('common_list.payModel') }}</el-text>
<el-input v-model="editRow.payType" style="width:10vw;" disabled /> <el-input v-model="editRow.payType" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">付款时间</el-text>
<el-text style="width:4vw;">{{ $t('common.payTime') }}</el-text>
<el-date-picker v-model="editRow.payTime" type="datetime" style="width:10vw;" disabled /> <el-date-picker v-model="editRow.payTime" type="datetime" style="width:10vw;" disabled />
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">转账凭证</el-text>
<el-text style="width:4vw;">{{ $t('cash_refund.payVoucher') }}</el-text>
<img v-if="editRow.voucher" :src="editRow.voucher" <img v-if="editRow.voucher" :src="editRow.voucher"
style="width: 80px; height: 80px; object-fit: cover;"> style="width: 80px; height: 80px; object-fit: cover;">
<div v-else> <div v-else>
无转账凭证
{{ $t('cash_refund.noVoucher') }}
</div> </div>
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">备注</el-text>
<el-text style="width:4vw;">{{ $t('common_list.remark') }}</el-text>
<el-input v-model="editRow.remark" style="width:10vw;" :rows="3" type="textarea" maxLength="100" <el-input v-model="editRow.remark" style="width:10vw;" :rows="3" type="textarea" maxLength="100"
disabled show-word-limit /> disabled show-word-limit />
</div> </div>
</div> </div>
<div class="right"> <div class="right">
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">退款类型</el-text>
<el-text style="width:4vw;">{{ $t('cash_refund.refundModel') }}</el-text>
<el-radio-group v-model="editForm.refundModel"> <el-radio-group v-model="editForm.refundModel">
<el-radio value="0">全部退款</el-radio>
<el-radio value="1">部分退款</el-radio>
<el-radio value="0">{{ $t('cash_refund.fullRefund') }}</el-radio>
<el-radio value="1">{{ $t('cash_refund.partialRefund') }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="add-item" v-show="editRow.goodsName === '金币充值' && editForm.refundModel === '1'"> <div class="add-item" v-show="editRow.goodsName === '金币充值' && editForm.refundModel === '1'">
<el-text style="width:4vw;">永久金币</el-text>
<el-input v-model="editForm.partRefundGold" style="width:5vw;" />&nbsp;&nbsp;
<el-text style="width:4vw;">{{ $t('common_list.permanentGold') }}</el-text>
<el-input v-model="editForm.partRefundGold" style="width:5vw;" />&nbsp;&nbsp;{{ $t('common.') }}
</div> </div>
<div class="add-item" v-show="editRow.goodsName === '金币充值' && editForm.refundModel === '1'"> <div class="add-item" v-show="editRow.goodsName === '金币充值' && editForm.refundModel === '1'">
<el-text style="width:4vw;">免费金币</el-text>
<el-input v-model="editForm.partRefundFree" style="width:5vw;" />&nbsp;&nbsp;
<el-text style="width:4vw;">{{ $t('common_list.freeGold') }}</el-text>
<el-input v-model="editForm.partRefundFree" style="width:5vw;" />&nbsp;&nbsp;{{ $t('common.') }}
</div> </div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">退款理由</el-text>
<el-text style="width:4vw;">{{ $t('common_list.refundReason') }}</el-text>
<el-input v-model="editForm.refundReason" style="width:10vw;" :rows="5" maxlength="150" <el-input v-model="editForm.refundReason" style="width:10vw;" :rows="5" maxlength="150"
show-word-limit type="textarea" /> show-word-limit type="textarea" />
</div> </div>
<div>ps:请在退款理由表明用户的退款需求</div>
<div>{{ $t('cash_refund.refundReasonTip') }}</div>
<div style="display:flex;justify-content: center;margin-top: 5vh;"> <div style="display:flex;justify-content: center;margin-top: 5vh;">
<el-button type="default" @click="cancelEdit">取消</el-button>
<el-button type="primary" @click="submitEdit">提交</el-button>
<el-button type="default" @click="cancelEdit">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submitEdit">{{ $t('common.submit') }}</el-button>
</div> </div>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<ConfirmDialog v-model="showBack" message="撤回该信息!" @confirm="recall" @cancel="showBack = false"
<ConfirmDialog v-model="showBack" :message="t('cash_refund.will') + t('cash_refund.withdrawRecord')" @confirm="recall" @cancel="showBack = false"
@close="showBack = false" /> @close="showBack = false" />
<el-dialog v-model="showError" overflow draggable class="back-dialog" :style="{ <el-dialog v-model="showError" overflow draggable class="back-dialog" :style="{
@ -212,13 +211,14 @@
backgroundSize: 'cover', backgroundSize: 'cover',
backgroundPosition: 'center' backgroundPosition: 'center'
}"> }">
<div class="back-text">退 </div>
<div class="back-text">{{ $t('cash_refund.refundAmountError') }}</div>
<div class="back-btn"> <div class="back-btn">
<el-button type="default" @click="showError = false">取消</el-button>
<el-button type="primary" @click="" style="margin-left: 2vw;">确定</el-button>
<el-button type="default" @click="showError = false">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="" style="margin-left: 2vw;">{{ $t('common.confirm') }}</el-button>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
@ -231,11 +231,10 @@ const adminStore = useAdminStore()
const { adminData, menuTree } = storeToRefs(adminStore) const { adminData, menuTree } = storeToRefs(adminStore)
import { permissionMapping, findMenuById, hasMenuPermission } from "@/utils/menuTreePermission.js" import { permissionMapping, findMenuById, hasMenuPermission } from "@/utils/menuTreePermission.js"
import ConfirmDialog from '@/components/dialogs/ConfirmDialog.vue' import ConfirmDialog from '@/components/dialogs/ConfirmDialog.vue'
import { pa } from 'element-plus/es/locales.mjs'
import { productList, CurrencyForId } from '@/views/moneyManage/receiveDetail/utils/staticData.js' import { productList, CurrencyForId } from '@/views/moneyManage/receiveDetail/utils/staticData.js'
import RefundRecallBackground from '@/assets/images/refund-recall.png' import RefundRecallBackground from '@/assets/images/refund-recall.png'
import { isNumber } from 'lodash'
import { re } from 'mathjs'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const dateRange = ref([]) const dateRange = ref([])
const searchForm = ref({ const searchForm = ref({
@ -264,24 +263,24 @@ const uploadRef = ref(null)
const showBack = ref(false) const showBack = ref(false)
const showError = ref(false) const showError = ref(false)
const isKF = adminData.value.adminName.includes('客服') const isKF = adminData.value.adminName.includes('客服')
const statusList = ref(['已提交', '已撤回', '进行中', '已退款', '已驳回'])
const statusList = ref(['submitted', 'withdrawn', 'inProgress', 'RefundSuccessful', 'rejected'])
// //
const getRefund = async function () { const getRefund = async function () {
if (!hasMenuPermission(menuTree.value, permissionMapping.view_customer_service_refund_pending)) { if (!hasMenuPermission(menuTree.value, permissionMapping.view_customer_service_refund_pending)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermission'))
return return
} }
try { try {
const statusParam = ref([]) const statusParam = ref([])
if (searchForm.value.statuses === '已提交') {
if (searchForm.value.statuses === 'submitted') {
statusParam.value = [10] statusParam.value = [10]
} else if (searchForm.value.statuses === '已撤回') {
} else if (searchForm.value.statuses === 'withdrawn') {
statusParam.value = [11] statusParam.value = [11]
} else if (searchForm.value.statuses === '进行中') {
} else if (searchForm.value.statuses === 'inProgress') {
statusParam.value = [20, 30, 40] statusParam.value = [20, 30, 40]
} else if (searchForm.value.statuses === '已退款') {
} else if (searchForm.value.statuses === 'RefundSuccessful') {
statusParam.value = [41] statusParam.value = [41]
} else if (searchForm.value.statuses === '已驳回') {
} else if (searchForm.value.statuses === 'rejected') {
statusParam.value = [12, 22, 32] statusParam.value = [12, 22, 32]
} }
@ -291,13 +290,13 @@ const getRefund = async function () {
if (searchForm.value.jwcode) { if (searchForm.value.jwcode) {
const isPositiveInteger = /^[1-9]\d*$/.test(searchForm.value.jwcode); const isPositiveInteger = /^[1-9]\d*$/.test(searchForm.value.jwcode);
if (!isPositiveInteger) { if (!isPositiveInteger) {
ElMessage.error('请输入正确的精网号')
ElMessage.error(t('elmessage.invalidJwcodeFormat'))
return; return;
} }
} }
// 400 // 400
if (searchForm.value.jwcode.length > 8) { if (searchForm.value.jwcode.length > 8) {
ElMessage.error('精网号长度不能超过8位')
ElMessage.error(t('elmessage.jwcodeTooLong'))
return; return;
} }
@ -330,13 +329,13 @@ const getRefund = async function () {
tableData.value = result.data.list || [] tableData.value = result.data.list || []
pagination.value.total = result.data.total || 0 pagination.value.total = result.data.total || 0
} catch (error) { } catch (error) {
ElMessage.error(error.message || '查询失败')
ElMessage.error(error.message || t('elmessage.requestFailed'))
} }
} }
// //
const recall = async function () { const recall = async function () {
if (!hasMenuPermission(menuTree.value, permissionMapping.withdraw_customer_service_refund)) { if (!hasMenuPermission(menuTree.value, permissionMapping.withdraw_customer_service_refund)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermission'))
return return
} }
try { try {
@ -351,42 +350,42 @@ const recall = async function () {
data: params data: params
}) })
if (result.code === 200) { if (result.code === 200) {
ElMessage.success(result.msg || '撤回成功')
ElMessage.success(result.msg || t('elmessage.addSuccess'))
showBack.value = false showBack.value = false
getRefund() getRefund()
} else { } else {
ElMessage.error(result.msg || '撤回失败')
ElMessage.error(result.msg || t('elmessage.operationFailed'))
} }
} catch (error) { } catch (error) {
ElMessage.error(error.message || '撤回失败')
ElMessage.error(error.message || t('elmessage.operationFailed'))
} }
} }
// //
const submitEdit = async function () { const submitEdit = async function () {
if (!hasMenuPermission(menuTree.value, permissionMapping.edit_customer_service_refund)) { if (!hasMenuPermission(menuTree.value, permissionMapping.edit_customer_service_refund)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermission'))
return return
} }
try { try {
console.log(editRow.value) console.log(editRow.value)
if(!editForm.value.refundModel) { if(!editForm.value.refundModel) {
ElMessage.error('请选择退款方式')
ElMessage.error(t('elmessage.checkRefundModel'))
return return
}else if(!editForm.value.refundReason) { }else if(!editForm.value.refundReason) {
ElMessage.error('请输入退款理由')
ElMessage.error(t('elmessage.checkRefundReason'))
return return
}else if(editForm.value.refundModel == 1 && (!editForm.value.partRefundGold || !editForm.value.partRefundFree)) { }else if(editForm.value.refundModel == 1 && (!editForm.value.partRefundGold || !editForm.value.partRefundFree)) {
ElMessage.error('请输入退款金币数和免费金币数')
ElMessage.error(t('elmessage.checkRefundGold'))
return return
}else if (editForm.value.refundModel == 1 && (editForm.value.partRefundGold || editForm.value.partRefundFree)) { }else if (editForm.value.refundModel == 1 && (editForm.value.partRefundGold || editForm.value.partRefundFree)) {
const isPositiveInteger = /^[1-9]\d*$/.test(editForm.value.partRefundGold) const isPositiveInteger = /^[1-9]\d*$/.test(editForm.value.partRefundGold)
if (!isPositiveInteger) { if (!isPositiveInteger) {
ElMessage.error('请输入正确的永久金币数')
ElMessage.error(t('elmessage.invalidPermanentGold'))
return return
} }
const isPositiveInteger1 = /^[1-9]\d*$/.test(editForm.value.partRefundFree) const isPositiveInteger1 = /^[1-9]\d*$/.test(editForm.value.partRefundFree)
if (!isPositiveInteger1) { if (!isPositiveInteger1) {
ElMessage.error('请输入正确的免费金币数')
ElMessage.error(t('elmessage.invalidFreeGold'))
return return
} }
} }
@ -410,11 +409,11 @@ const submitEdit = async function () {
} }
if (editRow.value.goodsName == '金币充值') { if (editRow.value.goodsName == '金币充值') {
if (editForm.value.partRefundGold > editRow.value.gold) { if (editForm.value.partRefundGold > editRow.value.gold) {
ElMessage.error('退款金币数不能大于原金币数')
ElMessage.error(t('elmessage.refundGoldExceed'))
return return
} }
if (editForm.value.partRefundFree > editRow.value.free) { if (editForm.value.partRefundFree > editRow.value.free) {
ElMessage.error('退款免费金币数不能大于原免费金币数')
ElMessage.error(t('elmessage.refundFreeExceed'))
return return
} }
} }
@ -423,14 +422,14 @@ const submitEdit = async function () {
data: params data: params
}) })
if (result.code === 200) { if (result.code === 200) {
ElMessage.success(result.msg || '编辑成功')
ElMessage.success(result.msg || t('elmessage.addSuccess'))
showEdit.value = false showEdit.value = false
getRefund() getRefund()
} else { } else {
ElMessage.error(result.msg || '编辑失败')
ElMessage.error(result.msg || t('elmessage.addFailed'))
} }
} catch (error) { } catch (error) {
ElMessage.error(error.message || '编辑失败')
ElMessage.error(error.message || t('elmessage.addFailed'))
} }
} }
const getMarket = async function () { const getMarket = async function () {
@ -547,6 +546,7 @@ onMounted(() => {
console.log('???????????????????', adminData.value) console.log('???????????????????', adminData.value)
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
:deep(.el-table__header-wrapper), :deep(.el-table__header-wrapper),
:deep(.el-table__body-wrapper), :deep(.el-table__body-wrapper),

Loading…
Cancel
Save