28 Commits

Author SHA1 Message Date
lihuilin 3c1abbc68e 驳回理由 3 months ago
zhangrenyuan f516ebe93d Merge branch 'milestone-20251215-多语言二期2' of http://39.101.133.168:8807/huangqizhen/gold-vue into milestone-20251215-多语言二期2 3 months ago
zhangrenyuan 6b071c178f feat(国际化): 新增“请选择执行人”提示语以优化用户体验 3 months ago
zhangrenyuan 5c205ea981 fix(退款明细): 调整选择框宽度以优化界面布局 3 months ago
ZhangYong 75c0403be1 产品单位 3 months ago
ZhangYong 05161ca80b 三期需求补充 3 months ago
ZhangYong c8448276fd 金币三期需求补充 3 months ago
zhangrenyuan 3c299d9926 feat(退款管理): 新增退款成功状态并优化国际化 3 months ago
zhangrenyuan 125b4b5681 fix(收款明细): 优化精网号输入验证与查询逻辑 3 months ago
zhangrenyuan 5237ccf86b Merge branch 'milestone-20251215-多语言二期2' of http://39.101.133.168:8807/huangqizhen/gold-vue into milestone-20251215-多语言二期2 3 months ago
zhangrenyuan 265d8a77b2 feat(国际化): 更新退款进度中的地区财务翻译 3 months ago
ZhangYong fb0cdd01c2 Merge branch 'milestone-20251215-多语言二期2' of http://39.101.133.168:8807/huangqizhen/gold-vue into milestone-20251215-多语言二期2 3 months ago
ZhangYong 03b1296a6e 流水账页面 3 months ago
zhangrenyuan eb78861082 feat(国际化): 添加时间差显示的国际化支持 3 months ago
zhangrenyuan 44bf718186 feat(频道): 频道筛选去除 3 months ago
zhangrenyuan 452f74d639 Merge branch 'milestone-20251215-多语言二期2' of http://39.101.133.168:8807/huangqizhen/gold-vue into milestone-20251215-多语言二期2 3 months ago
zhangrenyuan 039ff8cc76 feat(i18n): 添加货币不匹配的国际化提示并修复金币充值字段 3 months ago
lihuilin 5b73b3234f 合并 3 months ago
lihuilin b1304698b3 合并 3 months ago
ZhangYong 6c9463c9df 客服退款显示永久金币,免费金币 3 months ago
ZhangYong 1a44b09580 Merge branch 'milestone-20251215-多语言二期2' of http://39.101.133.168:8807/huangqizhen/gold-vue into milestone-20251215-多语言二期2 3 months ago
ZhangYong dd49f4612d 执行人,退款客服多选商品 3 months ago
zhangrenyuan 0fde166058 refactor(退款详情): 移除货币选择框并调整日期选择器宽度 3 months ago
zhangrenyuan 1d57517e9e feat(表单): 为输入框添加回车键提交功能并修复表单验证时机 3 months ago
zhangrenyuan fcf364e7da 使用国际化文本替换权限错误提示信息 3 months ago
zhangrenyuan 76433cfab8 Merge branch 'feature-20251215114424-现金管理三期' into zhangrenyuan/feature-20260113104415-现金重构 3 months ago
zhangrenyuan 27344d284e fix: 添加角色频道获取逻辑并优化频道显示条件 4 months ago
zhangrenyuan fd0fb8385b fix: 新增角色表单中添加频道名称选择,优化弹窗显示逻辑 4 months ago
  1. 9
      src/components/locales/lang/en.js
  2. 12
      src/components/locales/lang/zh-CN.js
  3. 7
      src/utils/getMessage.js
  4. 6
      src/views/audit/gold/audit.vue
  5. 27
      src/views/channelManage/fans/fans.vue
  6. 33
      src/views/channelManage/reward/reward.vue
  7. 2
      src/views/consume/bean/addBeanConsume.vue
  8. 6
      src/views/consume/gold/addCoinConsume.vue
  9. 25
      src/views/moneyManage/executor/executor.vue
  10. 2
      src/views/moneyManage/financialAccount/cashFlow.vue
  11. 2
      src/views/moneyManage/financialAccount/performanceAttribution.vue
  12. 20
      src/views/moneyManage/receiveDetail/receiveFinance.vue
  13. 2
      src/views/moneyManage/receiveDetail/receiveHead.vue
  14. 28
      src/views/moneyManage/receiveDetail/receiveManage.vue
  15. 55
      src/views/moneyManage/receiveDetail/receiveService.vue
  16. 28
      src/views/moneyManage/refundDetail/refundCharge.vue
  17. 119
      src/views/moneyManage/refundDetail/refundFinance.vue
  18. 36
      src/views/moneyManage/refundDetail/refundHeader.vue
  19. 41
      src/views/moneyManage/refundDetail/refundService.vue
  20. 55
      src/views/permissions/rolePermission.vue
  21. 2
      src/views/recharge/bean/addBeanRecharge.vue
  22. 2
      src/views/recharge/gold/addCoinRecharge.vue
  23. 2
      src/views/refund/gold/addCoinRefund.vue
  24. 6
      src/views/refund/gold/coinRefundDetail.vue

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

@ -113,7 +113,7 @@ export default {
batchImport: "Batch Import", batchImport: "Batch Import",
import: "Import", import: "Import",
uploadHint: "Drag file here or click", uploadHint: "Drag file here or click",
pendingFee: "Fee Pending",
pendingFee: "Pending Payment",
viewRejectReason: "Reject Reason", viewRejectReason: "Reject Reason",
viewProgress: "View Progress", viewProgress: "View Progress",
// Buttons-Date // Buttons-Date
@ -331,6 +331,7 @@ export default {
limitJwcodeNine: "ID must be digits (max 9)", limitJwcodeNine: "ID must be digits (max 9)",
limitBalance: "Amount > balance", limitBalance: "Amount > balance",
limitRefundAmount: "Refund > Order Amount", limitRefundAmount: "Refund > Order Amount",
pleaseSelectExecutor: "Please select executor",
// Image Upload // Image Upload
onlyUploadJPGPNG: "JPG/PNG only!", onlyUploadJPGPNG: "JPG/PNG only!",
limitImageSize: "Max 1MB!", limitImageSize: "Max 1MB!",
@ -403,6 +404,7 @@ export default {
refundConfirmTitle: "Refund Confirmation", refundConfirmTitle: "Refund Confirmation",
refundConfirmContent: "Are you sure you want to refund order {orderNo}?", refundConfirmContent: "Are you sure you want to refund order {orderNo}?",
exportError: "Export failed", exportError: "Export failed",
currencyMismatch: "Payment currency and received currency mismatch",
}, },
// Common List Fields // Common List Fields
@ -1043,6 +1045,11 @@ export default {
}, },
submitting: "Changing..." submitting: "Changing..."
}, },
difftime: {
minuteAgo: " mins ago",
hourAgo: " hours ago",
yesterday: "yesterday",
}
}, },
// Cash Management // Cash Management

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

@ -113,7 +113,7 @@ export default {
batchImport: "批量导入", batchImport: "批量导入",
import: "导入", import: "导入",
uploadHint: "将文件拖到此处,或点击上传", uploadHint: "将文件拖到此处,或点击上传",
pendingFee: "待填写手续费",
pendingFee: "待到账",
viewRejectReason: "查看驳回理由", viewRejectReason: "查看驳回理由",
viewProgress: "查看进度", viewProgress: "查看进度",
// 按钮组-日期 // 按钮组-日期
@ -331,6 +331,7 @@ export default {
limitJwcodeNine: "精网号必须为数字且不超过九位", limitJwcodeNine: "精网号必须为数字且不超过九位",
limitBalance: "所填金额大于该类金币余额", limitBalance: "所填金额大于该类金币余额",
limitRefundAmount: "退款金额不能大于订单金额", limitRefundAmount: "退款金额不能大于订单金额",
pleaseSelectExecutor: "请选择执行人",
// 图片上传 // 图片上传
onlyUploadJPGPNG: "只能上传 JPG/PNG 图片!", onlyUploadJPGPNG: "只能上传 JPG/PNG 图片!",
limitImageSize: "图片大小不能超过 1MB!", limitImageSize: "图片大小不能超过 1MB!",
@ -403,6 +404,7 @@ export default {
refundConfirmTitle: "退款确认", refundConfirmTitle: "退款确认",
refundConfirmContent: "确定要对订单 {orderNo} 进行退款吗?", refundConfirmContent: "确定要对订单 {orderNo} 进行退款吗?",
exportError: "导出失败", exportError: "导出失败",
currencyMismatch: "付款币种与到账币种不一致",
}, },
// 通用列表字段组 // 通用列表字段组
@ -1054,13 +1056,18 @@ export default {
}, },
submitting: "修改中..." submitting: "修改中..."
}, },
difftime: {
minuteAgo: "分钟前",
hourAgo: "小时前",
yesterday: "昨天",
}
}, },
// 现金管理 // 现金管理
cash: { cash: {
refundProgress: "退款进度", refundProgress: "退款进度",
progress: { progress: {
areaFinance: "收款处理",
areaFinance: "地区财务",
areaCharge: "地区负责人", areaCharge: "地区负责人",
headFinance: "总部财务", headFinance: "总部财务",
executor: "指定执行人", executor: "指定执行人",
@ -1102,6 +1109,7 @@ export default {
rejected: "已驳回", rejected: "已驳回",
inProgress: "进行中", inProgress: "进行中",
received: "已到账", received: "已到账",
success: "退款成功",
}, },
unit: "个", unit: "个",
year: "年", year: "年",

7
src/utils/getMessage.js

@ -20,12 +20,13 @@ function formatTime(timeStr) {
const diffHours = Math.floor(diffMins / 60); const diffHours = Math.floor(diffMins / 60);
const diffDays = Math.floor(diffHours / 24); const diffDays = Math.floor(diffHours / 24);
const t = i18n.global.t
if (diffHours < 1) { if (diffHours < 1) {
return `${diffMins}分钟前`
return `${diffMins}${t('home.difftime.minuteAgo')}`
} else if (diffDays < 1) { } else if (diffDays < 1) {
return `${diffHours}小时前`
return `${diffHours}${t('home.difftime.hourAgo')}`
} else if (diffDays === 1) { } else if (diffDays === 1) {
return '昨天'
return t('home.difftime.yesterday')
} else { } else {
return `${msgTime.getFullYear()}-${String(msgTime.getMonth() + 1).padStart(2, '0')}-${String(msgTime.getDate()).padStart(2, '0')}` return `${msgTime.getFullYear()}-${String(msgTime.getMonth() + 1).padStart(2, '0')}-${String(msgTime.getDate()).padStart(2, '0')}`
} }

6
src/views/audit/gold/audit.vue

@ -32,7 +32,7 @@ import { useAdminStore } from '@/store/index.js';
import { hasMenuPermission, permissionMapping } from "@/utils/menuTreePermission.js"; import { hasMenuPermission, permissionMapping } from "@/utils/menuTreePermission.js";
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const adminStore = useAdminStore(); const adminStore = useAdminStore();
@ -45,12 +45,12 @@ const hasRefund = ref(false);
const navigateTo = (name) => { const navigateTo = (name) => {
if(name == 'rechargeAudit'){ if(name == 'rechargeAudit'){
if(!hasRecharge){ if(!hasRecharge){
ElMessage.error('您暂无充值审核操作权限')
ElMessage.error(t('elmessage.noPermissionText'))
return; return;
} }
}else if(name = 'refundAudit'){ }else if(name = 'refundAudit'){
if(!hasRefund){ if(!hasRefund){
ElMessage.error('您暂无退款审核操作权限')
ElMessage.error(t('elmessage.noPermissionText'))
return; return;
} }
} }

27
src/views/channelManage/fans/fans.vue

@ -57,7 +57,8 @@ const beanConsumeFan = ref({
}) })
// //
const channels = ref([]) const channels = ref([])
//
const showChannelFilter = ref(false)
const getChannel = async function () { const getChannel = async function () {
try { try {
const result = await request({ const result = await request({
@ -76,6 +77,26 @@ const getChannel = async function () {
}) })
} }
} }
const getRoleChannel = async function () {
try {
if (!adminData.value || !adminData.value.roleId) {
showChannelFilter.value = true
return
}
const result = await request({
url: '/beanConsume/getRoleChannel',
data: adminData.value.roleId
})
const data = result.data ?? result
const channelName = typeof data === 'string' ? data : data.channelName
const allLabel = t('common.all')
showChannelFilter.value = channelName === allLabel || channelName === '全部'
} catch (error) {
console.log('请求角色频道失败', error)
showChannelFilter.value = true
}
}
// // // //
// const filterChannel = (query) => { // const filterChannel = (query) => {
// if (query) { // if (query) {
@ -390,10 +411,10 @@ const handleCurrentChange = function (val) {
onMounted(async function () { onMounted(async function () {
await getAdminData() await getAdminData()
await getRoleChannel()
await ConsumeSelectBy() await ConsumeSelectBy()
await getChannel() await getChannel()
await getDept() await getDept()
}) })
@ -510,7 +531,7 @@ const getTagText = (state) => {
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="selectRow">
<div class="selectRow" v-if="showChannelFilter">
<el-text class="text">{{ t('common.channel') }}</el-text> <el-text class="text">{{ t('common.channel') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeFan.channel" :placeholder="t('common.channelPlaceholder')" clearable filterable> <el-select class="selectContent" v-model="beanConsumeFan.channel" :placeholder="t('common.channelPlaceholder')" clearable filterable>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />

33
src/views/channelManage/reward/reward.vue

@ -40,7 +40,6 @@ const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : ''
/* /*
====================数据================================= ====================数据=================================
*/ */
//
const adminData = ref({}) const adminData = ref({})
// //
const tableData = ref([]) const tableData = ref([])
@ -83,7 +82,8 @@ const getGift = async function () {
// //
const channels = ref([]) const channels = ref([])
//
const showChannelFilter = ref(false)
const getChannel = async function () { const getChannel = async function () {
try { try {
const result = await request({ const result = await request({
@ -103,6 +103,26 @@ const getChannel = async function () {
} }
} }
const getRoleChannel = async function () {
try {
if (!adminData.value || !adminData.value.roleId) {
showChannelFilter.value = true
return
}
const result = await request({
url: '/beanConsume/getRoleChannel',
data: adminData.value.roleId
})
const data = result.data ?? result
const channelName = typeof data === 'string' ? data : data.channelName
const allLabel = t('common.all')
showChannelFilter.value = channelName === allLabel || channelName === '全部'
} catch (error) {
console.log('请求角色频道失败', error)
showChannelFilter.value = true
}
}
// //
const consumeTypes = ref([ const consumeTypes = ref([
{label: t('consume.consumeTypes.1'), value: 1}, {label: t('consume.consumeTypes.1'), value: 1},
@ -402,10 +422,11 @@ const handleCurrentChange = function (val) {
onMounted(async function () { onMounted(async function () {
await getAdminData() await getAdminData()
await selectLiveBy()
await getRoleChannel()
await getDept() await getDept()
await getGift()
await selectLiveBy()
await getChannel() await getChannel()
await getGift()
}) })
@ -538,7 +559,7 @@ const getTagText = (state) => {
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item"/> <el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item"/>
</el-select> </el-select>
</div> </div>
<div class="selectRow" style="width: 14vw;">
<div class="selectRow" style="min-width: 14vw;">
<el-text class="text">{{ t('common.giftName') }}</el-text> <el-text class="text">{{ t('common.giftName') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.gift" :placeholder="t('common.giftNamePlaceholder')" clearable <el-select class="selectContent" v-model="beanConsumeLive.gift" :placeholder="t('common.giftNamePlaceholder')" clearable
filterable filterable
@ -546,7 +567,7 @@ const getTagText = (state) => {
<el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item"/> <el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item"/>
</el-select> </el-select>
</div> </div>
<div class="selectRow" style="min-width: 12vw;">
<div class="selectRow" style="min-width: 12vw;" v-if="showChannelFilter">
<el-text class="textB" size="large">{{ t('common.channel') }}</el-text> <el-text class="textB" size="large">{{ t('common.channel') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.liveChannel" :placeholder="t('common.channelPlaceholder')" clearable <el-select class="selectContent" v-model="beanConsumeLive.liveChannel" :placeholder="t('common.channelPlaceholder')" clearable
filterable allow-create default-first-option> filterable allow-create default-first-option>

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

@ -214,7 +214,7 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
<el-form :model="consumeForm" :rules="rules" ref="formRef" label-width="auto" style="max-width: 600px" <el-form :model="consumeForm" :rules="rules" ref="formRef" label-width="auto" style="max-width: 600px"
class="add-form"> class="add-form">
<el-form-item prop="jwcode" :label="t('common_add.jwcode')" label-position="left"> <el-form-item prop="jwcode" :label="t('common_add.jwcode')" label-position="left">
<el-input v-model="consumeForm.jwcode" style="width: 220px" @keyup.enter="getUser(consumeForm.jwcode)" />
<el-input v-model="consumeForm.jwcode" style="width: 220px" @keyup.enter="getUser(consumeForm.jwcode)"/>
<el-button type="primary" @click="getUser(consumeForm.jwcode)" style="margin-left: 20px">{{ t('common.search') }}</el-button> <el-button type="primary" @click="getUser(consumeForm.jwcode)" style="margin-left: 20px">{{ t('common.search') }}</el-button>
</el-form-item> </el-form-item>
<el-form-item prop="permanentBean" :label="t('common_add.permanentBean')" label-position="left"> <el-form-item prop="permanentBean" :label="t('common_add.permanentBean')" label-position="left">

6
src/views/consume/gold/addCoinConsume.vue

@ -1,5 +1,5 @@
<script setup> <script setup>
import { onMounted, reactive, ref, watch, computed } from "vue";
import { onMounted, reactive, ref, watch, computed, nextTick } from "vue";
import { ElIcon, ElMessage } from "element-plus"; import { ElIcon, ElMessage } from "element-plus";
import moment from "moment"; import moment from "moment";
import request from "@/util/http.js" import request from "@/util/http.js"
@ -383,7 +383,9 @@ function resetForm() {
} }
if (Ref.value) { if (Ref.value) {
Ref.value.clearValidate()
nextTick(() => {
Ref.value.clearValidate()
})
} }
} }

25
src/views/moneyManage/executor/executor.vue

@ -12,7 +12,7 @@
</div> </div>
<div class="search"> <div class="search">
<el-text size="large" style="width:4vw;">{{ t('common.productName') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.productName') }}</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
<el-cascader v-model="searchForm.goodsName" :props="{ multiple: false, emitPath: false }" :show-all-levels="false" collapse-tags collapse-tags-tooltip :options="productList" style="width: 10vw;" :placeholder="t('common.productNamePlaceholder')" clearable />
</div> </div>
<div class="search" v-if="adminData.markets === t('common.markets.headquarter')"> <div class="search" v-if="adminData.markets === t('common.markets.headquarter')">
<el-text size="large" style="width:4vw;">{{ t('common.market') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.market') }}</el-text>
@ -63,7 +63,13 @@
<el-table-column prop="name" :label="t('common_list.name')" width="120" fixed="left" show-overflow-tooltip /> <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="marketName" :label="t('common_list.market')" width="120" />
<el-table-column prop="goodsName" :label="t('common_list.productName')" width="120" /> <el-table-column prop="goodsName" :label="t('common_list.productName')" width="120" />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="120" />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="130px">
<template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }} {{ t('cash.unit') }}</span>
<span v-else>{{ scope.row.goodsNum }} {{ scope.row.numUnit }}</span>
</template>
</el-table-column>
<el-table-column prop="refundModel" :label="t('common_list.refundModel')" width="140"> <el-table-column prop="refundModel" :label="t('common_list.refundModel')" width="140">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 1 ? t('common_list.refundModelPart') : t('common_list.refundModelAll') }} {{ scope.row.refundModel === 1 ? t('common_list.refundModelPart') : t('common_list.refundModelAll') }}
@ -155,13 +161,12 @@
<el-option :label="t('common_add.refundModelPart')" :value="1"></el-option> <el-option :label="t('common_add.refundModelPart')" :value="1"></el-option>
</el-select> </el-select>
</div> </div>
<!-- TODO多语言 -->
<div class="dialog-item" v-if="editRow.goodsName === '金币充值'"> <div class="dialog-item" v-if="editRow.goodsName === '金币充值'">
<el-text style="width:4vw;">永久金币</el-text>
<el-text style="width:4vw;">{{ t('common_add.permanentGold') }}</el-text>
<el-input v-model="editRow.permanentGold" style="width:10vw;" disabled /> <el-input v-model="editRow.permanentGold" style="width:10vw;" disabled />
</div> </div>
<div class="dialog-item" v-if="editRow.goodsName === '金币充值'"> <div class="dialog-item" v-if="editRow.goodsName === '金币充值'">
<el-text style="width:4vw;">免费金币</el-text>
<el-text style="width:4vw;">{{ t('common_add.freeGold') }}</el-text>
<el-input v-model="editRow.freeGold" style="width:10vw;" disabled /> <el-input v-model="editRow.freeGold" style="width:10vw;" disabled />
</div> </div>
<div class="dialog-item"> <div class="dialog-item">
@ -198,8 +203,8 @@
show-word-limit clearable /> show-word-limit clearable />
</div> </div>
<div class="dialog-item"> <div class="dialog-item">
<el-text style="width:4vw;">退款理由</el-text>
<el-input v-model="editRow.rejectReason" style="width:10vw;" :row="3" disabled maxlength="100" type="textarea"
<el-text style="width:4vw;">{{ t('common_add.refundReason') }}</el-text>
<el-input v-model="editRow.refundReason" style="width:10vw;" :row="3" disabled maxlength="100" type="textarea"
show-word-limit clearable /> show-word-limit clearable />
</div> </div>
</div> </div>
@ -305,8 +310,8 @@ const getRefund = async function () {
statusesParam.value = [40, 41] statusesParam.value = [40, 41]
} }
const goodsName = searchForm.value.goodsName && searchForm.value.goodsName.length > 0
? searchForm.value.goodsName[searchForm.value.goodsName.length - 1] : ''
let goodsName = searchForm.value.goodsName && searchForm.value.goodsName.length > 0
? [searchForm.value.goodsName] : []
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);
@ -328,7 +333,7 @@ const getRefund = async function () {
jwcode: searchForm.value.jwcode, jwcode: searchForm.value.jwcode,
name: searchForm.value.name, 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,
goodsNames: goodsName,
statuses: statusesParam.value,//1012 statuses: statusesParam.value,//1012
// 2022 // 2022
// 3032 // 3032

2
src/views/moneyManage/financialAccount/cashFlow.vue

@ -93,7 +93,7 @@ const fetchData = async () => {
pageSize: queryParams.pageSize, pageSize: queryParams.pageSize,
fundsDTO: { fundsDTO: {
jwcode: queryParams.jwcode, jwcode: queryParams.jwcode,
markets: queryParams.markets,
localMarket:queryParams.markets,
startTime: queryParams.timeRange?.[0] ? dayjs(queryParams.timeRange[0]).format('YYYY-MM-DD HH:mm:ss') : '', startTime: queryParams.timeRange?.[0] ? dayjs(queryParams.timeRange[0]).format('YYYY-MM-DD HH:mm:ss') : '',
endTime: queryParams.timeRange?.[1] ? dayjs(queryParams.timeRange[1]).format('YYYY-MM-DD HH:mm:ss') : '', endTime: queryParams.timeRange?.[1] ? dayjs(queryParams.timeRange[1]).format('YYYY-MM-DD HH:mm:ss') : '',
payType: queryParams.payType, payType: queryParams.payType,

2
src/views/moneyManage/financialAccount/performanceAttribution.vue

@ -90,7 +90,7 @@ const fetchData = async () => {
pageSize: queryParams.pageSize, pageSize: queryParams.pageSize,
performanceDTO:{ performanceDTO:{
jwcode: queryParams.jwcode, jwcode: queryParams.jwcode,
adminMarket: adminData.value.markets.split(',').filter(item => item.trim() !== '') || [],
adminMarket: adminData.value.marketName.split(',').filter(item => item.trim() !== '') || [],
customerMarket: queryParams.customerMarket, customerMarket: queryParams.customerMarket,
startTime: queryParams.timeRange?.[0] ? dayjs(queryParams.timeRange[0]).format('YYYY-MM-DD HH:mm:ss') : '', startTime: queryParams.timeRange?.[0] ? dayjs(queryParams.timeRange[0]).format('YYYY-MM-DD HH:mm:ss') : '',
endTime: queryParams.timeRange?.[1] ? dayjs(queryParams.timeRange[1]).format('YYYY-MM-DD HH:mm:ss') : '', endTime: queryParams.timeRange?.[1] ? dayjs(queryParams.timeRange[1]).format('YYYY-MM-DD HH:mm:ss') : '',

20
src/views/moneyManage/receiveDetail/receiveFinance.vue

@ -129,8 +129,8 @@
<el-table-column prop="goodNum" :label="t('common_list.productNum')" width="130px"> <el-table-column prop="goodNum" :label="t('common_list.productNum')" width="130px">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{ <span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }}</span>
<span v-else>{{ scope.row.goodNum }}</span>
scope.row.permanentGold }} {{ t('cash.unit') }}</span>
<span v-else>{{ scope.row.goodNum }} {{ scope.row.numUnit }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="paymentCurrency" :label="t('common_list.payCurrency')" width="120px" /> <el-table-column prop="paymentCurrency" :label="t('common_list.payCurrency')" width="120px" />
@ -445,11 +445,11 @@
</div> </div>
</div> </div>
<el-form-item :label="t('common_add.payCurrency')"> <el-form-item :label="t('common_add.payCurrency')">
<CurrencySelect :disabled="!ifOnline" v-model="editFormData.paymentCurrency"
<CurrencySelect :disabled="ifOnline" v-model="editFormData.paymentCurrency"
:items="customOptions" :placeholder="t('common_add.payCurrency')" /> :items="customOptions" :placeholder="t('common_add.payCurrency')" />
</el-form-item> </el-form-item>
<el-form-item :label="t('common_add.payAmount')"> <el-form-item :label="t('common_add.payAmount')">
<el-input :disabled="!ifOnline" v-model="editFormData.paymentAmount"
<el-input :disabled="ifOnline" v-model="editFormData.paymentAmount"
:placeholder="t('common_add.payAmount')" /> :placeholder="t('common_add.payAmount')" />
</el-form-item> </el-form-item>
<el-form-item :label="t('common_add.payMethod')"> <el-form-item :label="t('common_add.payMethod')">
@ -1191,7 +1191,11 @@ watch(auditFormisible, (val) => {
const openEditForm = (row) => { const openEditForm = (row) => {
console.log('row.aaa', row.handlingCharge); console.log('row.aaa', row.handlingCharge);
editFormData.value = { ...row };
editFormData.value = {
...row,
paymentCurrencyOrig: row.paymentCurrency,
paymentAmountOrig: row.paymentAmount,
};
// //
if (row.goodsName === t('cash.coinRecharge')) isEditGold.value = true; if (row.goodsName === t('cash.coinRecharge')) isEditGold.value = true;
else isEditGold.value = false; else isEditGold.value = false;
@ -1215,7 +1219,7 @@ const submitEditForm = async () => {
await editFormRef.value.validate(); await editFormRef.value.validate();
if (editFormData.value.paymentCurrency != editFormData.value.receivedCurrency) { if (editFormData.value.paymentCurrency != editFormData.value.receivedCurrency) {
ElMessage.error('付款币种与到账币种不一致')
ElMessage.error(t('elmessage.currencyMismatch'))
return return
} }
@ -1235,7 +1239,9 @@ const submitEditForm = async () => {
receivedCurrency: CurrencyForId(editFormData.value.receivedCurrency), receivedCurrency: CurrencyForId(editFormData.value.receivedCurrency),
receivedAmount: editFormData.value.receivedAmount * 100 || null, // receivedAmount: editFormData.value.receivedAmount * 100 || null, //
receivedTime: editFormData.value.receivedTime, receivedTime: editFormData.value.receivedTime,
receivedRemark: editFormData.value.receivedRemark || ''
receivedRemark: editFormData.value.receivedRemark || '',
paymentCurrencyOrig: editFormData.value.paymentCurrencyOrig,
paymentAmountOrig: CurrencyForId(editFormData.value.paymentAmountOrig),
} }
}); });

2
src/views/moneyManage/receiveDetail/receiveHead.vue

@ -1033,7 +1033,7 @@ const submitEditForm = async () => {
await editFormRef.value.validate(); await editFormRef.value.validate();
if (editFormData.value.paymentCurrency != editFormData.value.receivedCurrency) { if (editFormData.value.paymentCurrency != editFormData.value.receivedCurrency) {
ElMessage.error('付款币种与到账币种不一致')
ElMessage.error(t('elmessage.currencyMismatch'))
return return
} }

28
src/views/moneyManage/receiveDetail/receiveManage.vue

@ -129,8 +129,8 @@
<el-table-column prop="goodNum" :label="t('common_list.productNum')" width="130px"> <el-table-column prop="goodNum" :label="t('common_list.productNum')" width="130px">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{ <span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }}</span>
<span v-else>{{ scope.row.goodNum }}</span>
scope.row.permanentGold }} {{ t('cash.unit') }}</span>
<span v-else>{{ scope.row.goodNum }} {{ scope.row.numUnit }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="paymentCurrency" :label="t('common_list.payCurrency')" width="120px" /> <el-table-column prop="paymentCurrency" :label="t('common_list.payCurrency')" width="120px" />
@ -445,12 +445,12 @@
</div> </div>
</div> </div>
<el-form-item :label="t('common_add.payCurrency')"> <el-form-item :label="t('common_add.payCurrency')">
<CurrencySelect :disabled="!ifOnline" v-model="editFormData.paymentCurrency"
<CurrencySelect :disabled="ifOnline" v-model="editFormData.paymentCurrency"
:items="customOptions" :placeholder="t('common_add.payCurrency')" /> :items="customOptions" :placeholder="t('common_add.payCurrency')" />
</el-form-item> </el-form-item>
<el-form-item :label="t('common_add.paymentAmount')">
<el-input :disabled="!ifOnline" v-model="editFormData.paymentAmount"
:placeholder="t('common_add.paymentAmount')" />
<el-form-item :label="t('common_add.payAmount')">
<el-input :disabled="ifOnline" v-model="editFormData.paymentAmount"
:placeholder="t('common_add.payAmount')" />
</el-form-item> </el-form-item>
<el-form-item :label="t('common_add.payMethod')"> <el-form-item :label="t('common_add.payMethod')">
<el-select disabled="true" v-model="editFormData.payType" <el-select disabled="true" v-model="editFormData.payType"
@ -822,7 +822,7 @@ const exportExcel = async function () {
// } // }
const cashRoleId = '1'; const cashRoleId = '1';
const submitterMarket = normalizeSubmitterMarket(adminData.value.markets);
const submitterMarket = adminData.value.markets;
searchData.value.status = 46; searchData.value.status = 46;
const params = { const params = {
...pageInfo.value, ...pageInfo.value,
@ -1191,7 +1191,11 @@ watch(auditFormisible, (val) => {
const openEditForm = (row) => { const openEditForm = (row) => {
console.log('row.aaa', row.handlingCharge); console.log('row.aaa', row.handlingCharge);
editFormData.value = { ...row };
editFormData.value = {
...row,
paymentCurrencyOrig: row.paymentCurrency,
paymentAmountOrig: row.paymentAmount,
};
// //
if (row.goodsName === t('cash.coinRecharge')) isEditGold.value = true; if (row.goodsName === t('cash.coinRecharge')) isEditGold.value = true;
else isEditGold.value = false; else isEditGold.value = false;
@ -1215,7 +1219,7 @@ const submitEditForm = async () => {
await editFormRef.value.validate(); await editFormRef.value.validate();
if (editFormData.value.paymentCurrency != editFormData.value.receivedCurrency) { if (editFormData.value.paymentCurrency != editFormData.value.receivedCurrency) {
ElMessage.error('付款币种与到账币种不一致')
ElMessage.error(t('elmessage.currencyMismatch'))
return return
} }
@ -1235,7 +1239,9 @@ const submitEditForm = async () => {
receivedCurrency: CurrencyForId(editFormData.value.receivedCurrency), receivedCurrency: CurrencyForId(editFormData.value.receivedCurrency),
receivedAmount: editFormData.value.receivedAmount * 100 || null, // receivedAmount: editFormData.value.receivedAmount * 100 || null, //
receivedTime: editFormData.value.receivedTime, receivedTime: editFormData.value.receivedTime,
receivedRemark: editFormData.value.receivedRemark || ''
receivedRemark: editFormData.value.receivedRemark || '',
paymentCurrencyOrig: editFormData.value.paymentCurrencyOrig,
paymentAmountOrig: CurrencyForId(editFormData.value.paymentAmountOrig),
} }
}); });
@ -1705,7 +1711,7 @@ const handlePagination = (type, val) => {
} }
:deep(.adddialog .el-form-item__label) { :deep(.adddialog .el-form-item__label) {
min-width: 80px;
min-width: 100px;
width: auto; width: auto;
font-weight: 800; font-weight: 800;
padding-bottom: 15px; padding-bottom: 15px;

55
src/views/moneyManage/receiveDetail/receiveService.vue

@ -97,15 +97,8 @@
<el-table-column prop="goodNum" :label="t('common_list.productNum')" width="130px"> <el-table-column prop="goodNum" :label="t('common_list.productNum')" width="130px">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{ <span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }}</span>
<span v-else>{{ scope.row.goodNum }}</span>
</template>
</el-table-column>
<el-table-column prop="numUnit" :label="t('common_add.numUnit')" width="130px">
<template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }}</span>
<span v-else>{{ scope.row.goodNum }}</span>
scope.row.permanentGold }} {{ t('cash.unit') }}</span>
<span v-else>{{ scope.row.goodNum }} {{ scope.row.numUnit }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="paymentCurrency" :label="t('common_list.payCurrency')" width="120px" /> <el-table-column prop="paymentCurrency" :label="t('common_list.payCurrency')" width="120px" />
@ -208,7 +201,7 @@
label-position="left"> label-position="left">
<el-form-item :label="t('common_add.jwcode')" required prop="jwcode"> <el-form-item :label="t('common_add.jwcode')" required prop="jwcode">
<el-input v-model="addFormData.jwcode" :placeholder="t('common_add.jwcodePlaceholder')" <el-input v-model="addFormData.jwcode" :placeholder="t('common_add.jwcodePlaceholder')"
@blur="jwcodeSeachMarket" />
@focus="handleJwcodeFocus" @blur="handleJwcodeBlur" @keyup.enter="handleJwcodeEnter" />
</el-form-item> </el-form-item>
<el-form-item :label="t('common_add.customerName')" required prop="name"> <el-form-item :label="t('common_add.customerName')" required prop="name">
<el-input disabled v-model="addFormData.name" <el-input disabled v-model="addFormData.name"
@ -669,19 +662,57 @@ const ifGroup = () => {
isGroup.value = false isGroup.value = false
} }
} }
//
const jwcodeQueriedInFocus = ref(false)
const handleJwcodeFocus = () => {
jwcodeQueriedInFocus.value = false
}
const handleJwcodeEnter = () => {
jwcodeQueriedInFocus.value = true
jwcodeSeachMarket()
}
const handleJwcodeBlur = () => {
if (jwcodeQueriedInFocus.value) return
jwcodeQueriedInFocus.value = true
jwcodeSeachMarket()
}
// //
const jwcodeSeachMarket = async () => { const jwcodeSeachMarket = async () => {
try { try {
const jwcode = String(addFormData.value.jwcode ?? '').replace(/\s/g, '')
addFormData.value.jwcode = jwcode
if (!jwcode) {
ElMessage.warning(t('elmessage.noEmptyJwcode'))
return
}
if (!/^[1-9]\d*$/.test(jwcode)) {
ElMessage.error(t('elmessage.checkJwcodeFormat'))
return
}
if (jwcode.length > 8) {
ElMessage.error(t('elmessage.limitJwcodeLength'))
return
}
const result = await request({ const result = await request({
url: '/cashCollection/getNameAndMarket', url: '/cashCollection/getNameAndMarket',
data: addFormData.value.jwcode
data: jwcode
}) })
if (result.code == 200) {
if (result.code == 200 && result.data && Object.keys(result.data).length > 0) {
ElMessage.success(t('elmessage.customerSuccess')) ElMessage.success(t('elmessage.customerSuccess'))
addFormData.value.market = result.data.market addFormData.value.market = result.data.market
addFormData.value.marketName = result.data.marketName addFormData.value.marketName = result.data.marketName
addFormData.value.name = result.data.name addFormData.value.name = result.data.name
} else if (result.code == 0) {
const region = result.data && result.data.market
if (region) {
ElMessage.info({
message: t('elmessage.userRegionHint', { region }),
customClass: 'custom-blue-message'
})
return
}
ElMessage.error(t('elmessage.customerNotExist'))
} else { } else {
ElMessage.error(t('elmessage.customerNotExist')) ElMessage.error(t('elmessage.customerNotExist'))
} }

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

@ -31,13 +31,13 @@
</div> </div>
</div> </div>
<div class="condition"> <div class="condition">
<div class="item2">
<!-- <div class="item2">
<el-text size="large" style="width:4vw;">{{ t('common.payCurrency') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.payCurrency') }}</el-text>
<el-select v-model="searchForm.paymentCurrency" style="width:9vw;" <el-select v-model="searchForm.paymentCurrency" style="width:9vw;"
:placeholder="t('common.payCurrencyPlaceholder')" clearable> :placeholder="t('common.payCurrencyPlaceholder')" 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;">{{ t('common.payModel') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.payModel') }}</el-text>
<el-select v-model="searchForm.payType" style="width:9vw;" <el-select v-model="searchForm.payType" style="width:9vw;"
@ -45,7 +45,7 @@
<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: 29.3vw;">
<el-text size="large" style="width:4vw;">{{ t('common.payTime') }}</el-text> <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')" <el-date-picker v-model="dateRange" type="datetimerange" :range-separator="t('common.to')"
:start-placeholder="t('common.startTime')" :end-placeholder="t('common.endTime')" :start-placeholder="t('common.startTime')" :end-placeholder="t('common.endTime')"
@ -73,7 +73,13 @@
show-overflow-tooltip /> show-overflow-tooltip />
<el-table-column prop="marketName" :label="t('common_list.market')" width="120" /> <el-table-column prop="marketName" :label="t('common_list.market')" width="120" />
<el-table-column prop="goodsName" :label="t('common_list.productName')" width="130" show-overflow-tooltip /> <el-table-column prop="goodsName" :label="t('common_list.productName')" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="120" />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="130px">
<template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }} {{ t('cash.unit') }}</span>
<span v-else>{{ scope.row.goodsNum }} {{ scope.row.numUnit }}</span>
</template>
</el-table-column>
<el-table-column prop="refundModel" :label="t('common_list.refundModel')" width="120"> <el-table-column prop="refundModel" :label="t('common_list.refundModel')" width="120">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 1 ? t('common_list.refundModelPart') : t('common_list.refundModelAll') {{ scope.row.refundModel === 1 ? t('common_list.refundModelPart') : t('common_list.refundModelAll')
@ -324,7 +330,7 @@
</el-step> </el-step>
</el-steps> </el-steps>
</div> </div>
<div class="reject-reason" v-if="isReject">驳回理由{{ rejectReason }}</div>
<div class="reject-reason" v-if="isReject">{{ t('common_list.rejectReason') }}{{ rejectReason }}</div>
<div class="steps-btn"> <div class="steps-btn">
<el-button type="primary" @click="showSteps = false">{{ t('common.confirm') }}</el-button> <el-button type="primary" @click="showSteps = false">{{ t('common.confirm') }}</el-button>
</div> </div>
@ -645,13 +651,13 @@ const getMarket = async function () {
const exportExcel = async function () { const exportExcel = async function () {
const payCurrencySelect = ref('') const payCurrencySelect = ref('')
const statuses = ref([20, 22, 30, 32, 40, 41]) // const statuses = ref([20, 22, 30, 32, 40, 41]) //
if (searchForm.value.statuses === '审核通过') {
if (searchForm.value.statuses === t('cash.statusList.passed')) {
statuses.value = [30, 40] statuses.value = [30, 40]
} else if (searchForm.value.statuses === '已驳回') {
} else if (searchForm.value.statuses === t('cash.statusList.rejected')) {
statuses.value = [22, 32] statuses.value = [22, 32]
} else if (searchForm.value.statuses === '待审核') {
} else if (searchForm.value.statuses === t('cash.statusList.pending')) {
statuses.value = [20] statuses.value = [20]
} else if (searchForm.value.statuses === '退款成功') {
} else if (searchForm.value.statuses === t('cash.statusList.success')) {
statuses.value = [41] statuses.value = [41]
} else { } else {
statuses.value = [20, 22, 30, 32, 40, 41] statuses.value = [20, 22, 30, 32, 40, 41]
@ -663,13 +669,13 @@ 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.checkJwcodeFormat'))
return return
} }
} }
// 400 // 400
if (searchForm.value.jwcode.length > 8) { if (searchForm.value.jwcode.length > 8) {
ElMessage.error('精网号长度不能超过8位')
ElMessage.error(t('elmessage.limitJwcodeLength'))
return; return;
} }

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

@ -4,11 +4,13 @@
<div class="condition"> <div class="condition">
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">{{ t('common.jwcode') }}</el-text> <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 />
<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;">{{ t('common.customerName') }}</el-text> <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 />
<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;">{{ t('common.productName') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.productName') }}</el-text>
@ -16,8 +18,8 @@
</div> </div>
<div class="item1" v-if="isHeadquarters"> <div class="item1" v-if="isHeadquarters">
<el-text size="large" style="width:4vw;">{{ t('common.market') }}</el-text> <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" />
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market"
:placeholder="t('common.marketPlaceholder')" clearable @change="handleMarketChange" />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">{{ t('common.orderStatus') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.orderStatus') }}</el-text>
@ -27,23 +29,24 @@
</div> </div>
</div> </div>
<div class="condition"> <div class="condition">
<div class="item2">
<!-- <div class="item2">
<el-text size="large" style="width:4vw;">{{ t('common.payCurrency') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.payCurrency') }}</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;">{{ t('common.payModel') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.payModel') }}</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: 29.3vw;">
<el-text size="large" style="width:4vw;">{{ t('common.payTime') }}</el-text> <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" />
<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" />
</div> </div>
<div> <div>
<el-button type="primary" @click="getRefund">{{ t('common.search') }}</el-button> <el-button type="primary" @click="getRefund">{{ t('common.search') }}</el-button>
@ -62,17 +65,26 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="jwcode" label="Homily ID" width="120" fixed="left" /> <el-table-column prop="jwcode" label="Homily ID" 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="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="marketName" :label="t('common_list.market')" width="120" />
<el-table-column prop="goodsName" :label="t('common_list.productName')" width="130" show-overflow-tooltip /> <el-table-column prop="goodsName" :label="t('common_list.productName')" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="120" />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="130px">
<template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }} {{ t('cash.unit') }}</span>
<span v-else>{{ scope.row.goodsNum }} {{ scope.row.numUnit }}</span>
</template>
</el-table-column>
<el-table-column prop="refundModel" :label="t('common_list.refundModel')" width="120"> <el-table-column prop="refundModel" :label="t('common_list.refundModel')" width="120">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 1 ? t('common_list.refundModelPart') : t('common_list.refundModelAll') }}
{{ scope.row.refundModel === 1 ? t('common_list.refundModelPart') : t('common_list.refundModelAll')
}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="submitter" :label="t('common_list.submitter')" 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="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="remark" :label="t('common_list.remark')" width="150" show-overflow-tooltip />
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="120"> <el-table-column prop="status" :label="t('common_list.orderStatus')" width="120">
<template #default="scope"> <template #default="scope">
@ -114,14 +126,16 @@
<el-option :label="t('common_add.refundModelPart')" :value="1"></el-option> <el-option :label="t('common_add.refundModelPart')" :value="1"></el-option>
</el-select> </el-select>
</div> </div>
<div class="top-item">
<el-text style="width:4vw;" size="small">{{ t('common_add.permanentGold') }}</el-text>
<el-input v-model="auditRow.permanentGold" size="small" style="width:10vw;" disabled /><span>&nbsp;{{ t('cash.unit') }}</span>
</div>
<div class="top-item">
<el-text style="width:4vw;" size="small">{{ t('common_add.freeGold') }}</el-text>
<el-input v-model="auditRow.freeGold" size="small" style="width:10vw;" disabled /><span>&nbsp;{{ t('cash.unit') }}</span>
</div>
<div class="top-item">
<el-text style="width:4vw;" size="small">{{ t('common_add.permanentGold') }}</el-text>
<el-input v-model="auditRow.permanentGold" size="small" style="width:10vw;" disabled /><span>&nbsp;{{
t('cash.unit') }}</span>
</div>
<div class="top-item">
<el-text style="width:4vw;" size="small">{{ t('common_add.freeGold') }}</el-text>
<el-input v-model="auditRow.freeGold" size="small" style="width:10vw;" disabled /><span>&nbsp;{{
t('cash.unit') }}</span>
</div>
<div class="top-item"> <div class="top-item">
<el-text style="width:4vw;" size="small">{{ t('common_add.refundReason') }}</el-text> <el-text style="width:4vw;" size="small">{{ t('common_add.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"
@ -208,8 +222,8 @@
<el-button class="smallTitle" size="small" v-show="showReject">{{ t('common.reject') }}</el-button> <el-button class="smallTitle" size="small" v-show="showReject">{{ t('common.reject') }}</el-button>
<div class="bottom-item" v-show="showReject"> <div class="bottom-item" v-show="showReject">
<el-text style="width:4vw;" size="small">{{ t('common_add.rejectReason') }}</el-text> <el-text style="width:4vw;" size="small">{{ t('common_add.rejectReason') }}</el-text>
<el-input v-model="addForm.remark" :placeholder="t('common_add.rejectReasonPlaceholder')" size="small" style="width:10vw;" :row="3"
maxlength="100" type="textarea" show-word-limit clearable />
<el-input v-model="addForm.remark" :placeholder="t('common_add.rejectReasonPlaceholder')" size="small"
style="width:10vw;" :row="3" 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">{{ t('common.reject') }}</el-button> <el-button type="default" @click="showReject = true">{{ t('common.reject') }}</el-button>
@ -222,7 +236,7 @@
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="showSteps" overflow draggable width="1206px" height="506px" :style="{
<el-dialog v-model="showSteps" overflow draggable width="1206px" height="506px" :style="{
backgroundImage: `url(${RefundFinanceBackground})`, backgroundImage: `url(${RefundFinanceBackground})`,
backgroundSize: 'cover', backgroundSize: 'cover',
backgroundPosition: 'center' backgroundPosition: 'center'
@ -244,13 +258,17 @@
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
{{ t('cash.progress.areaFinance') }}<br>{{ areaFinance || t('common.noAuditorRecorded') }}
{{ t('cash.progress.areaFinance') }}<br>{{ areaFinance || t('common.noAuditorRecorded')
}}
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img v-if="currentStep === 2" src="@/assets/images/refund-rejected.png" :alt="t('common.rejected')">
<img v-else-if="currentStep === 1" src="@/assets/images/refund-approving.png" :alt="t('common.pendingAudit')">
<img v-else-if="currentStep > 2" src="@/assets/images/refund-approved.png" :alt="t('common.passed')">
<img v-if="currentStep === 2" src="@/assets/images/refund-rejected.png"
:alt="t('common.rejected')">
<img v-else-if="currentStep === 1" src="@/assets/images/refund-approving.png"
:alt="t('common.pendingAudit')">
<img v-else-if="currentStep > 2" src="@/assets/images/refund-approved.png"
:alt="t('common.passed')">
</template> </template>
</el-step> </el-step>
@ -261,26 +279,33 @@
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img v-if="currentStep === 4" src="@/assets/images/refund-rejected.png" :alt="t('common.rejected')">
<img v-else-if="currentStep === 3" src="@/assets/images/refund-approving.png" :alt="t('common.pendingAudit')">
<img v-if="currentStep === 4" src="@/assets/images/refund-rejected.png"
:alt="t('common.rejected')">
<img v-else-if="currentStep === 3" src="@/assets/images/refund-approving.png"
:alt="t('common.pendingAudit')">
<img v-else-if="currentStep > 3 && currentStep != 4" <img v-else-if="currentStep > 3 && currentStep != 4"
src="@/assets/images/refund-approved.png" :alt="t('common.passed')"> src="@/assets/images/refund-approved.png" :alt="t('common.passed')">
<img v-else-if="currentStep < 3" src="@/assets/images/refund-waiting.png" :alt="t('common_list.activityStatus.notStarted')">
<img v-else-if="currentStep < 3" src="@/assets/images/refund-waiting.png"
:alt="t('common_list.activityStatus.notStarted')">
</template> </template>
</el-step> </el-step>
<el-step> <el-step>
<template #title> <template #title>
<div> <div>
{{ t('cash.progress.headFinance') }}<br>{{ headFinance || t('common.noAuditorRecorded') }}
{{ t('cash.progress.headFinance') }}<br>{{ headFinance || t('common.noAuditorRecorded')
}}
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img v-if="currentStep === 6" src="@/assets/images/refund-rejected.png" :alt="t('common.rejected')">
<img v-else-if="currentStep === 5" src="@/assets/images/refund-approving.png" :alt="t('common.pendingAudit')">
<img v-if="currentStep === 6" src="@/assets/images/refund-rejected.png"
:alt="t('common.rejected')">
<img v-else-if="currentStep === 5" src="@/assets/images/refund-approving.png"
:alt="t('common.pendingAudit')">
<img v-else-if="currentStep > 5 && currentStep != 6" <img v-else-if="currentStep > 5 && currentStep != 6"
src="@/assets/images/refund-approved.png" :alt="t('common.passed')"> src="@/assets/images/refund-approved.png" :alt="t('common.passed')">
<img v-else-if="currentStep < 5" src="@/assets/images/refund-waiting.png" :alt="t('common_list.activityStatus.notStarted')">
<img v-else-if="currentStep < 5" src="@/assets/images/refund-waiting.png"
:alt="t('common_list.activityStatus.notStarted')">
</template> </template>
</el-step> </el-step>
@ -291,12 +316,16 @@
</div> </div>
</template> </template>
<template #icon> <template #icon>
<img v-if="currentStep === 7" src="@/assets/images/refund-approving.png" :alt="t('common_list.pending')">
<img v-else-if="currentStep === 8" src="@/assets/images/refund-approved.png" :alt="t('common.completed')">
<img v-else-if="currentStep < 7" src="@/assets/images/refund-waiting.png" :alt="t('common_list.activityStatus.notStarted')">
<img v-if="currentStep === 7" src="@/assets/images/refund-approving.png"
:alt="t('common_list.pending')">
<img v-else-if="currentStep === 8" src="@/assets/images/refund-approved.png"
:alt="t('common.completed')">
<img v-else-if="currentStep < 7" src="@/assets/images/refund-waiting.png"
:alt="t('common_list.activityStatus.notStarted')">
</template> </template>
</el-step> </el-step>
</el-steps> </el-steps>
<div class="reject-reason" v-if="isReject">{{ t('common_list.rejectReason') }}{{ rejectReason }}</div>
</div> </div>
<div class="steps-btn"> <div class="steps-btn">
<el-button type="primary" @click="showSteps = false">{{ t('common.confirm') }}</el-button> <el-button type="primary" @click="showSteps = false">{{ t('common.confirm') }}</el-button>
@ -354,6 +383,7 @@ import { useI18n } from 'vue-i18n'
const { t } = useI18n() const { t } = useI18n()
const currentStep = ref(0)// const currentStep = ref(0)//
const rejectReason = ref('')//
const searchForm = ref({ const searchForm = ref({
jwcode: '', jwcode: '',
markets: [] markets: []
@ -506,6 +536,7 @@ const handlePass = async function () {
} }
try { try {
const params = { const params = {
rejectReason: addForm.value.remark,
id: auditRow.value.id, id: auditRow.value.id,
status: 20, status: 20,
areaFinance: adminData.value.adminName, areaFinance: adminData.value.adminName,
@ -592,6 +623,7 @@ const showStep = function (row) {
return return
} }
rejectReason.value = row.rejectReason || ''
isReject.value = false isReject.value = false
submitter.value = row.submitter || '' submitter.value = row.submitter || ''
areaFinance.value = row.areaFinance || '' areaFinance.value = row.areaFinance || ''
@ -897,6 +929,15 @@ onMounted(() => {
justify-content: center; justify-content: center;
} }
.reject-reason {
margin-top: 2vh;
width: 40%;
margin-left: 30%;
background-color: white;
padding: 1vh;
border-radius: 10px;
}
.steps-btn { .steps-btn {
height: 15vh; height: 15vh;
display: flex; display: flex;

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

@ -28,19 +28,19 @@
</div> </div>
</div> </div>
<div class="condition"> <div class="condition">
<div class="item2">
<!-- <div class="item2">
<el-text size="large" style="width:4vw;">{{ t('common.payCurrency') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.payCurrency') }}</el-text>
<el-select v-model="searchForm.paymentCurrency" style="width:9vw;" :placeholder="t('common.payCurrencyPlaceholder')" clearable> <el-select v-model="searchForm.paymentCurrency" style="width:9vw;" :placeholder="t('common.payCurrencyPlaceholder')" 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;">{{ t('common.payModel') }}</el-text> <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-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: 29.3vw;">
<el-text size="large" style="width:4vw;">{{ t('common.payTime') }}</el-text> <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')" <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 :end-placeholder="t('common.endTime')" style="width:22vw;" @change="handleDatePickerChange" clearable
@ -66,7 +66,13 @@
<el-table-column prop="jwcode" :label="t('common_list.name')" width="120" fixed="left" show-overflow-tooltip /> <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="marketName" :label="t('common_list.market')" width="120" />
<el-table-column prop="goodsName" :label="t('common_list.productName')" width="130" show-overflow-tooltip /> <el-table-column prop="goodsName" :label="t('common_list.productName')" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="120" />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="130px">
<template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }} {{ t('cash.unit') }}</span>
<span v-else>{{ scope.row.goodsNum }} {{ scope.row.numUnit }}</span>
</template>
</el-table-column>
<el-table-column prop="refundModel" :label="t('common_list.refundModel')" width="120"> <el-table-column prop="refundModel" :label="t('common_list.refundModel')" width="120">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 1 ? t('common_list.refundModelPart') : t('common_list.refundModelAll') }} {{ scope.row.refundModel === 1 ? t('common_list.refundModelPart') : t('common_list.refundModelAll') }}
@ -309,7 +315,9 @@
</template> </template>
</el-step> </el-step>
</el-steps> </el-steps>
<div class="reject-reason" v-if="isReject">{{ t('common_list.rejectReason') }}{{ rejectReason }}</div>
</div> </div>
<div class="steps-btn"> <div class="steps-btn">
<el-button type="primary" @click="showSteps = false">{{ t('common.confirm') }}</el-button> <el-button type="primary" @click="showSteps = false">{{ t('common.confirm') }}</el-button>
</div> </div>
@ -381,6 +389,7 @@ const searchForm = ref({
statuses: [] statuses: []
}) })
const isReject = ref(false)// const isReject = ref(false)//
const rejectReason = ref('')//
const addForm = ref({ const addForm = ref({
remark: '' remark: ''
}) })
@ -485,6 +494,10 @@ const executorList = ref([
{ {
value: '90047947', value: '90047947',
label: '宋彤彤' label: '宋彤彤'
},
{
value: '90047860',
label: 'zy'
} }
]) ])
// //
@ -558,8 +571,13 @@ const handlePass = async function () {
ElMessage.error(t('elmessage.noPermission')) ElMessage.error(t('elmessage.noPermission'))
return return
} }
if (!addForm.value.executor) {
ElMessage.error(t('elmessage.pleaseSelectExecutor'))
return
}
try { try {
const params = { const params = {
rejectReason: addForm.value.remark,
id: auditRow.value.id, id: auditRow.value.id,
executor: addForm.value.executor, executor: addForm.value.executor,
status: 40, status: 40,
@ -784,6 +802,7 @@ const showStep = function (row) {
return return
} }
rejectReason.value = row.rejectReason || ''
isReject.value = false isReject.value = false
submitter.value = row.submitter || '' submitter.value = row.submitter || ''
areaFinance.value = row.areaFinance || '' areaFinance.value = row.areaFinance || ''
@ -961,6 +980,15 @@ onMounted(() => {
justify-content: center; justify-content: center;
} }
.reject-reason {
margin-top: 2vh;
width: 40%;
margin-left: 30%;
background-color: white;
padding: 1vh;
border-radius: 10px;
}
.steps-btn { .steps-btn {
height: 15vh; height: 15vh;
display: flex; display: flex;

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

@ -14,8 +14,7 @@
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">{{ t('common.productName') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.productName') }}</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;"
:placeholder="t('common.productNamePlaceholder')" clearable />
<el-cascader v-model="searchForm.goodsName" :props="{ multiple: false, emitPath: false }" :show-all-levels="false" :options="productList" style="width: 10vw;" :placeholder="t('common.productNamePlaceholder')" clearable />
</div> </div>
<div class="item1" v-if="isHeadquarters"> <div class="item1" v-if="isHeadquarters">
<el-text size="large" style="width:4vw;">{{ t('common.market') }}</el-text> <el-text size="large" style="width:4vw;">{{ t('common.market') }}</el-text>
@ -70,7 +69,13 @@
<el-table-column prop="marketName" :label="t('common_list.market')" width="120" /> <el-table-column prop="marketName" :label="t('common_list.market')" width="120" />
<el-table-column prop="activity" :label="t('common_list.activity')" width="120px" show-overflow-tooltip /> <el-table-column prop="activity" :label="t('common_list.activity')" width="120px" show-overflow-tooltip />
<el-table-column prop="goodsName" :label="t('common_list.productName')" width="130" show-overflow-tooltip /> <el-table-column prop="goodsName" :label="t('common_list.productName')" width="130" show-overflow-tooltip />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="120" />
<el-table-column prop="goodsNum" :label="t('common_list.productNum')" width="130px">
<template #default="scope">
<span v-if="scope.row.goodsName == t('common_list.goldRecharge')">{{
scope.row.permanentGold }} {{ t('cash.unit') }}</span>
<span v-else>{{ scope.row.goodsNum }} {{ scope.row.numUnit }}</span>
</template>
</el-table-column>
<el-table-column prop="paymentCurrency" :label="t('common_add.payCurrency')" width="120" /> <el-table-column prop="paymentCurrency" :label="t('common_add.payCurrency')" width="120" />
<el-table-column prop="paymentAmount" :label="t('common_add.payAmount')" width="120" /> <el-table-column prop="paymentAmount" :label="t('common_add.payAmount')" width="120" />
<el-table-column prop="payType" :label="t('common_add.payMethod')" width="140" /> <el-table-column prop="payType" :label="t('common_add.payMethod')" width="140" />
@ -112,7 +117,7 @@
</el-button> </el-button>
<el-button v-if="[12, 22, 32].includes(scope.row.status)" type="primary" text <el-button v-if="[12, 22, 32].includes(scope.row.status)" type="primary" text
@click="showRejectReasonDialog(scope.row)"> @click="showRejectReasonDialog(scope.row)">
查看驳回理由
{{ t('common.viewRejectReason') }}
</el-button> </el-button>
</div> </div>
</template> </template>
@ -148,11 +153,21 @@
<el-text style="width:4vw;">{{ t('common_add.productName') }}</el-text> <el-text style="width:4vw;">{{ t('common_add.productName') }}</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" v-if="editRow.goodsName !== t('cash.coinRecharge')">
<el-text style="width:4vw;">{{ t('common_add.productNum') }}</el-text> <el-text style="width:4vw;">{{ t('common_add.productNum') }}</el-text>
<el-input v-model="editRow.goodsNum" style="width:10vw;" disabled /> <el-input v-model="editRow.goodsNum" style="width:10vw;" disabled />
&nbsp;{{ t('cash.unit') }} &nbsp;{{ t('cash.unit') }}
</div> </div>
<div class="add-item" v-if="editRow.goodsName == t('cash.coinRecharge')">
<el-text style="width:4vw;">{{ t('refund.permanentGold') }}</el-text>
<el-input v-model="editRow.gold" style="width:10vw;" disabled />
&nbsp;{{ t('cash.unit') }}
</div>
<div class="add-item" v-if="editRow.goodsName == t('cash.coinRecharge')">
<el-text style="width:4vw;">{{ t('refund.freeGold') }}</el-text>
<el-input v-model="editRow.free" style="width:10vw;" disabled />
&nbsp;{{ t('cash.unit') }}
</div>
<div class="add-item"> <div class="add-item">
<el-text style="width:4vw;">{{ t('common_add.payCurrency') }}</el-text> <el-text style="width:4vw;">{{ t('common_add.payCurrency') }}</el-text>
<el-input v-model="editRow.paymentCurrency" style="width:10vw;" disabled /> <el-input v-model="editRow.paymentCurrency" style="width:10vw;" disabled />
@ -228,7 +243,7 @@
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="showRejectReason" title="驳回理由" width="40%" style="background-color: rgb(243,250,254);">
<el-dialog v-model="showRejectReason" :title="t('common.viewRejectReason')" width="40%" style="background-color: rgb(243,250,254);">
<div>{{ rejectReason }}</div> <div>{{ rejectReason }}</div>
</el-dialog> </el-dialog>
</template> </template>
@ -260,7 +275,8 @@ const dateRange = ref([])
const searchForm = ref({ const searchForm = ref({
jwcode: '', jwcode: '',
market: [], market: [],
statuses: []
statuses: [],
goodsName: []
}) })
const market = ref([]) const market = ref([])
const backRow = ref({})// const backRow = ref({})//
@ -312,8 +328,10 @@ const getRefund = async function () {
statusParam.value = [12, 22, 32] statusParam.value = [12, 22, 32]
} }
const goodsName = searchForm.value.goodsName && searchForm.value.goodsName.length > 0
? searchForm.value.goodsName[searchForm.value.goodsName.length - 1] : ''
console.log('goodsName', searchForm.value.goodsName);
let goodsName = searchForm.value.goodsName && searchForm.value.goodsName.length > 0
? [searchForm.value.goodsName] : []
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);
@ -335,7 +353,7 @@ const getRefund = async function () {
jwcode: searchForm.value.jwcode,// jwcode: searchForm.value.jwcode,//
name: searchForm.value.name,// name: searchForm.value.name,//
markets: searchForm.value.market && searchForm.value.market.length > 0 ? [searchForm.value.market[searchForm.value.market.length - 1]] : [], markets: searchForm.value.market && searchForm.value.market.length > 0 ? [searchForm.value.market[searchForm.value.market.length - 1]] : [],
goodsName: goodsName,//
goodsNames: goodsName,//
statuses: statusParam.value,//1012 statuses: statusParam.value,//1012
// 2022 // 2022
// 3032 // 3032
@ -556,7 +574,8 @@ const reset = function () {
searchForm.value = { searchForm.value = {
jwcode: '', jwcode: '',
market: [], market: [],
statuses: []
statuses: [],
goodsName: []
} }
// //
pagination.value.pageNum = 1 pagination.value.pageNum = 1

55
src/views/permissions/rolePermission.vue

@ -32,16 +32,25 @@ const getRoleObj = ref({
pageSize: 10 pageSize: 10
}) })
const permissionAddVisible = ref(false) const permissionAddVisible = ref(false)
//
const addRole = ref({ const addRole = ref({
roleName: '', roleName: '',
parentId: null, parentId: null,
checkedKeys: [], checkedKeys: [],
market: ''
market: '',
//
channel: ''
}) })
const addRoleMarket = ref([]) const addRoleMarket = ref([])
//
const channelList = ref([t('common.all')]) const channelList = ref([t('common.all')])
//
const addHasChannel = ref(false)
//
const editHasChannel = ref(false)
const getRoleList = async function (val) { const getRoleList = async function (val) {
if (!findMenuById(menuTree.value, permissionMapping.view_role_information)) { if (!findMenuById(menuTree.value, permissionMapping.view_role_information)) {
//
ElMessage.error(t('elmessage.noPermissionText')) ElMessage.error(t('elmessage.noPermissionText'))
return return
} }
@ -119,12 +128,18 @@ const getRoleArea = async function () {
// //
const openPermissionAddVisible = function () { const openPermissionAddVisible = function () {
permissionAddVisible.value = true permissionAddVisible.value = true
//
addHasChannel.value = false
addRole.value.channel = ''
getRoles() getRoles()
getLists() getLists()
} }
const closePermissionAddVisible = function () { const closePermissionAddVisible = function () {
permissionAddVisible.value = false permissionAddVisible.value = false
//
addHasChannel.value = false
addRole.value.channel = ''
Ref.value.resetFields(); Ref.value.resetFields();
getRoleList() getRoleList()
} }
@ -331,14 +346,15 @@ const filterPermission = (tree) => {
return true return true
}) })
} }
//
//
const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => { const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => {
const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo
// //
if (allCheckedNodes.length === 0) { if (allCheckedNodes.length === 0) {
permissionEditRoleObj.value.checkedKeys = [] permissionEditRoleObj.value.checkedKeys = []
ifHasChannel.value = false
//
editHasChannel.value = false
return return
} }
@ -349,21 +365,22 @@ const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => {
console.log('编辑角色选中的权限ID:', checkedKeys) console.log('编辑角色选中的权限ID:', checkedKeys)
console.log('选中的节点数量:', allCheckedNodes.length) console.log('选中的节点数量:', allCheckedNodes.length)
if (checkedKeys.includes(124) || checkedKeys.includes(125) || checkedKeys.includes(126) || checkedKeys.includes(127)) { if (checkedKeys.includes(124) || checkedKeys.includes(125) || checkedKeys.includes(126) || checkedKeys.includes(127)) {
ifHasChannel.value = true
// ->
editHasChannel.value = true
} else { } else {
ifHasChannel.value = false
editHasChannel.value = false
} }
}; };
//
const ifHasChannel = ref(false)
//
const handleCheckChange = async (checkedNodes, checkedInfo) => { const handleCheckChange = async (checkedNodes, checkedInfo) => {
const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo
// //
if (allCheckedNodes.length === 0) { if (allCheckedNodes.length === 0) {
addRole.value.checkedKeys = [] addRole.value.checkedKeys = []
ifHasChannel.value = false
//
addHasChannel.value = false
return return
} }
@ -380,10 +397,11 @@ const handleCheckChange = async (checkedNodes, checkedInfo) => {
addRole.value.checkedKeys = Array.from(allKeys) addRole.value.checkedKeys = Array.from(allKeys)
console.log('新增角色包含所有父级的选中项:', addRole.value.checkedKeys) console.log('新增角色包含所有父级的选中项:', addRole.value.checkedKeys)
if (addRole.value.checkedKeys.includes(124)) { if (addRole.value.checkedKeys.includes(124)) {
ifHasChannel.value = true
// ->
addHasChannel.value = true
console.log('勾选了频道'); console.log('勾选了频道');
} else { } else {
ifHasChannel.value = false
addHasChannel.value = false
} }
} }
const selectParentNodes = (treeData, nodeId, checkedKeys) => { const selectParentNodes = (treeData, nodeId, checkedKeys) => {
@ -437,6 +455,12 @@ const permissionEditRoleObj = ref({
// //
const permissionEditRoleVisible = ref(false) const permissionEditRoleVisible = ref(false)
// 便
const closePermissionEditRoleVisible = () => {
permissionEditRoleVisible.value = false
editHasChannel.value = false
}
const collectIds2 = (tree) => { const collectIds2 = (tree) => {
let ids = [] let ids = []
tree.forEach((node) => { tree.forEach((node) => {
@ -481,9 +505,10 @@ const permissionEditRoleInit = async function (row) {
console.log('permissionEditRoleObj.value', permissionEditRoleObj.value); console.log('permissionEditRoleObj.value', permissionEditRoleObj.value);
if (EditIds.includes(124)) { if (EditIds.includes(124)) {
ifHasChannel.value = true
//
editHasChannel.value = true
} else { } else {
ifHasChannel.value = false
editHasChannel.value = false
} }
try { try {
let roleId = permissionEditRoleObj.value.parentId; let roleId = permissionEditRoleObj.value.parentId;
@ -745,7 +770,7 @@ onMounted(async function () {
<span style="color: #999;">{{ t('common.noData') }}</span> <span style="color: #999;">{{ t('common.noData') }}</span>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item v-show="ifHasChannel" :label="t('common_add.channelName') + ':'" required>
<el-form-item v-show="addHasChannel" :label="t('common_add.channelName') + ':'" required>
<el-select v-model="addRole.channel" :placeholder="t('common_add.channelPlaceholder')" style="width: 220px" filterable clearable> <el-select v-model="addRole.channel" :placeholder="t('common_add.channelPlaceholder')" style="width: 220px" filterable clearable>
<el-option v-for="item in channelList" :key="item" :label="item" :value="item" /> <el-option v-for="item in channelList" :key="item" :label="item" :value="item" />
</el-select> </el-select>
@ -794,7 +819,7 @@ onMounted(async function () {
</div> </div>
</el-form-item> </el-form-item>
<el-form-item v-show="ifHasChannel" :label="t('common_add.channelName') + ':'" required>
<el-form-item v-show="editHasChannel" :label="t('common_add.channelName') + ':'" required>
<el-select v-model="permissionEditRoleObj.channel" :placeholder="t('common_add.channelPlaceholder')" style="width: 220px" clearable> <el-select v-model="permissionEditRoleObj.channel" :placeholder="t('common_add.channelPlaceholder')" style="width: 220px" clearable>
<el-option v-for="item in channelList" :key="item" :label="item" :value="item" /> <el-option v-for="item in channelList" :key="item" :label="item" :value="item" />
</el-select> </el-select>
@ -802,7 +827,7 @@ onMounted(async function () {
</el-form> </el-form>
<div> <div>
<el-button @click="permissionEditRoleVisible = false">{{ t('common.cancel') }}</el-button>
<el-button @click="closePermissionEditRoleVisible">{{ t('common.cancel') }}</el-button>
<el-button type="primary" @click="permissionEditRole"> <el-button type="primary" @click="permissionEditRole">
{{ t('common.submit') }} {{ t('common.submit') }}
</el-button> </el-button>

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

@ -195,7 +195,7 @@ const handleAddForm = async () => {
<el-form :model="addForm" :rules="rules" ref="formRef" label-width="auto" style="max-width: 600px" <el-form :model="addForm" :rules="rules" ref="formRef" label-width="auto" style="max-width: 600px"
class="add-form"> class="add-form">
<el-form-item prop="jwcode" :label="t('common.jwcode')" label-position="left"> <el-form-item prop="jwcode" :label="t('common.jwcode')" label-position="left">
<el-input v-model="addForm.jwcode" style="width: 220px" @keyup.enter="getUser(addForm.jwcode)" />
<el-input v-model="addForm.jwcode" style="width: 220px" @keyup.enter="getUser(addForm.jwcode)"/>
<el-button type="primary" @click="getUser(addForm.jwcode)" style="margin-left: 20px">{{ t('common.search') }}</el-button> <el-button type="primary" @click="getUser(addForm.jwcode)" style="margin-left: 20px">{{ t('common.search') }}</el-button>
</el-form-item> </el-form-item>
<el-form-item prop="permanentBean" :label="t('recharge.permanentBean')" label-position="left"> <el-form-item prop="permanentBean" :label="t('recharge.permanentBean')" label-position="left">

2
src/views/recharge/gold/addCoinRecharge.vue

@ -654,7 +654,7 @@ onMounted(() => {
<el-form :model="recharge" ref="Ref" :rules="rules" label-width="auto" label-position="right" <el-form :model="recharge" ref="Ref" :rules="rules" label-width="auto" label-position="right"
style="min-width: 500px" class="add-form"> style="min-width: 500px" class="add-form">
<el-form-item prop="jwcode" :label="$t('common_add.jwcode')"> <el-form-item prop="jwcode" :label="$t('common_add.jwcode')">
<el-input v-model="recharge.jwcode" style="width: 220px" @keyup.enter="getUser(recharge.jwcode)" />
<el-input v-model="recharge.jwcode" style="width: 220px" @keyup.enter="getUser(recharge.jwcode)"/>
<el-button type="primary" @click="getUser(recharge.jwcode)" style="margin-left: 20px">{{ $t('common.search') }}</el-button> <el-button type="primary" @click="getUser(recharge.jwcode)" style="margin-left: 20px">{{ $t('common.search') }}</el-button>
</el-form-item> </el-form-item>
<el-form-item prop="activity" :label="$t('common_add.activity')"> <el-form-item prop="activity" :label="$t('common_add.activity')">

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

@ -471,7 +471,7 @@ onMounted(() =>{
<el-form :model="addRefund" ref="Ref" :rules="rules" label-width="auto" label-position="right" <el-form :model="addRefund" ref="Ref" :rules="rules" label-width="auto" label-position="right"
style="min-width: 500px" class="add-form"> style="min-width: 500px" class="add-form">
<el-form-item prop="jwcode" :label="$t('common_add.jwcode')"> <el-form-item prop="jwcode" :label="$t('common_add.jwcode')">
<el-input v-model="addRefund.jwcode" style="width: 220px" @keyup.enter="getUser(addRefund.jwcode)" />
<el-input v-model="addRefund.jwcode" style="width: 220px" @keyup.enter="getUser(addRefund.jwcode)"/>
<el-button type="primary" @click="getUser(addRefund.jwcode)" style="margin-left: 20px">{{ $t('common.search') }} <el-button type="primary" @click="getUser(addRefund.jwcode)" style="margin-left: 20px">{{ $t('common.search') }}
</el-button> </el-button>
</el-form-item> </el-form-item>

6
src/views/refund/gold/coinRefundDetail.vue

@ -522,7 +522,7 @@ const getMarket = async function () {
<el-input class="selectContent" v-model="refundUser.jwcode" :placeholder="$t('common.jwcodePlaceholder')" style="width: 10vw;" <el-input class="selectContent" v-model="refundUser.jwcode" :placeholder="$t('common.jwcodePlaceholder')" style="width: 10vw;"
clearable /> clearable />
</div> </div>
<div class="selectRow">
<div class="selectRow" style="width: 18vw;">
<el-text class="text" size="large">{{ $t('common.goodsName') }}</el-text> <el-text class="text" size="large">{{ $t('common.goodsName') }}</el-text>
<el-select class="selectContent" v-model="refundUser.goodsName" :placeholder="$t('common.goodsNamePlaceholder')" style="width: 10vw;" <el-select class="selectContent" v-model="refundUser.goodsName" :placeholder="$t('common.goodsNamePlaceholder')" style="width: 10vw;"
clearable filterable> clearable filterable>
@ -534,7 +534,7 @@ const getMarket = async function () {
<el-cascader class="selectContent" v-model="selectedMarketPath" :options="market" :placeholder="$t('common.marketPlaceholder')" <el-cascader class="selectContent" v-model="selectedMarketPath" :options="market" :placeholder="$t('common.marketPlaceholder')"
clearable style="width:10vw" @change="handleMarketChange" /> clearable style="width:10vw" @change="handleMarketChange" />
</div> </div>
<div class="selectRow" style="width: 12vw;">
<div class="selectRow" >
<el-text size="large">{{ $t('common.refundType') }}</el-text> <el-text size="large">{{ $t('common.refundType') }}</el-text>
<el-select class="selectContent" v-model="refundUser.refundType" :placeholder="$t('common.refundTypePlaceholder')" style="width: 10vw" <el-select class="selectContent" v-model="refundUser.refundType" :placeholder="$t('common.refundTypePlaceholder')" style="width: 10vw"
clearable> clearable>
@ -546,7 +546,7 @@ const getMarket = async function () {
</el-col> </el-col>
<el-col> <el-col>
<div class="select"> <div class="select">
<div class="selectRow" style="width: 35vw">
<div class="selectRow" style="width: 36vw">
<el-text class="text" size="large">{{ $t('common.refundTime') }}</el-text> <el-text class="text" size="large">{{ $t('common.refundTime') }}</el-text>
<el-date-picker class="selectContent" v-model="getTime" type="datetimerange" :range-separator="$t('common.to')" <el-date-picker class="selectContent" v-model="getTime" type="datetimerange" :range-separator="$t('common.to')"
:start-placeholder="$t('common.startTime')" :end-placeholder="$t('common.endTime')" style="width: 14.2vw;" @change="handleDatePickerChange" :start-placeholder="$t('common.startTime')" :end-placeholder="$t('common.endTime')" style="width: 14.2vw;" @change="handleDatePickerChange"

Loading…
Cancel
Save