Browse Source

产品名称

lihuilin/feature-20251104102812-现金二期
lihuilin 2 weeks ago
parent
commit
a4629e26b4
  1. 145
      src/views/moneyManage/executor/executor.vue
  2. 147
      src/views/moneyManage/refundDetail/refundCharge.vue
  3. 387
      src/views/moneyManage/refundDetail/refundFinance.vue
  4. 146
      src/views/moneyManage/refundDetail/refundHeader.vue
  5. 231
      src/views/moneyManage/refundDetail/refundService.vue

145
src/views/moneyManage/executor/executor.vue

@ -10,15 +10,15 @@
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width:9vw;" clearable /> <el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width:9vw;" clearable />
</div> </div>
<div class="search"> <div class="search">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
</div>
<div class="search">
<el-text size="large" style="width:4vw;">所属地区</el-text> <el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区" <el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
clearable /> clearable />
</div> </div>
<div class="search"> <div class="search">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
</div>
<div class="search">
<el-text size="large" style="width:4vw;">退款币种</el-text> <el-text size="large" style="width:4vw;">退款币种</el-text>
<el-select v-model="searchForm.refundCurrency" style="width:9vw;" clearable> <el-select v-model="searchForm.refundCurrency" style="width:9vw;" clearable>
<el-option v-for="item in currencies" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in currencies" :key="item.value" :label="item.label" :value="item.value" />
@ -53,7 +53,11 @@
<el-card style="background-color: rgb(231,244,253);height:80vh;"> <el-card style="background-color: rgb(231,244,253);height:80vh;">
<el-table :data="tableData" style="height:70vh;width:82vw;"> <el-table :data="tableData" style="height:70vh;width:82vw;">
<el-table-column type="index" label="序号" width="60" fixed="left" />
<el-table-column type="index" label="序号" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</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="姓名" width="120" fixed="left" show-overflow-tooltip /> <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="marketName" label="所属地区" width="120" />
@ -237,7 +241,7 @@ import dayjs from 'dayjs'
import { useAdminStore } from "@/store/index.js" import { useAdminStore } from "@/store/index.js"
import { storeToRefs } from "pinia" import { storeToRefs } from "pinia"
import { Delete, Download, Plus, ZoomIn } from '@element-plus/icons-vue' import { Delete, Download, Plus, ZoomIn } from '@element-plus/icons-vue'
import { productList } from '@/views/moneyManage/receiveDetail/utils/staticData.js'
const adminStore = useAdminStore() const adminStore = useAdminStore()
const { adminData, menuTree } = storeToRefs(adminStore) const { adminData, menuTree } = storeToRefs(adminStore)
import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js" import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js"
@ -525,135 +529,6 @@ const customUpload = async (options) => {
ElMessage.error(`上传失败: ${error.msg || error.message || '网络异常'}`) ElMessage.error(`上传失败: ${error.msg || error.message || '网络异常'}`)
} }
} }
const productList = [
{
"value": "金币产品",
"label": "金币产品",
"children": [
{
"value": "金币充值",
"label": "金币充值",
}
]
},
{
"value": "软件产品",
"label": "软件产品",
"children": [
{
"value": "美股",
"label": "美股",
"children": [
{
"value": "美股软件",
"label": "美股软件"
}
]
},
{
"value": "港股",
"label": "港股",
"children": [
{
"value": "港股软件",
"label": "港股软件"
}
]
},
{
"value": "A股",
"label": "A股",
"children": [
{
"value": "A股软件",
"label": "A股软件"
}
]
},
{
"value": "新加坡股",
"label": "新加坡股",
"children": [
{
"value": "新加坡股软件",
"label": "新加坡股软件"
}
]
},
{
"value": "马股",
"label": "马股",
"children": [
{
"value": "马股软件",
"label": "马股软件"
}
]
},
{
"value": "日本股",
"label": "日本股",
"children": [
{
"value": "日本股软件",
"label": "日本股软件"
}
]
},
{
"value": "泰股",
"label": "泰股",
"children": [
{
"value": "泰股软件",
"label": "泰股软件"
}
]
},
{
"value": "越南股",
"label": "越南股",
"children": [
{
"value": "越南股软件",
"label": "越南股软件"
}
]
},
{
"value": "印尼股",
"label": "印尼股",
"children": [
{
"value": "印尼股软件",
"label": "印尼股软件"
}
]
},
{
"value": "韩国股",
"label": "韩国股",
"children": [
{
"value": "韩国股软件",
"label": "韩国股软件"
}
]
},
{
"value": "台湾股",
"label": "台湾股",
"children": [
{
"value": "台湾股软件",
"label": "台湾股软件"
}
]
}
]
},
]
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),

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

@ -11,16 +11,16 @@
<el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable /> <el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
clearable @change="handleMarketChange" />
</div>
<div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text> <el-text size="large" style="width:4vw;">产品名称</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="请选择产品名称" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
clearable @change="handleMarketChange" />
</div>
<div class="item1">
<el-text size="large" style="width:4vw;">订单状态</el-text> <el-text size="large" style="width:4vw;">订单状态</el-text>
<el-select v-model="searchForm.statuses" style="width:9vw;" placeholder="请选择订单状态" clearable> <el-select v-model="searchForm.statuses" style="width:9vw;" placeholder="请选择订单状态" 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" />
@ -58,7 +58,11 @@
<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="序号" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</el-table-column>
<el-table-column prop="name" label="Homily ID" width="120" fixed="left" /> <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="jwcode" label="姓名" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" label="所属地区" width="120" /> <el-table-column prop="marketName" label="所属地区" width="120" />
@ -336,7 +340,7 @@ 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 moment from 'moment' import moment from 'moment'
import { productList } from '@/views/moneyManage/receiveDetail/utils/staticData.js'
import RefundChargeBackground from '@/assets/images/refund-progress.png' import RefundChargeBackground from '@/assets/images/refund-progress.png'
const currentStep = ref(0)// const currentStep = ref(0)//
@ -585,135 +589,6 @@ const showStep = function (row) {
console.log('步骤条状态', currentStep.value) console.log('步骤条状态', currentStep.value)
showSteps.value = true showSteps.value = true
} }
const productList = [
{
"value": "金币产品",
"label": "金币产品",
"children": [
{
"value": "金币充值",
"label": "金币充值",
}
]
},
{
"value": "软件产品",
"label": "软件产品",
"children": [
{
"value": "美股",
"label": "美股",
"children": [
{
"value": "美股软件",
"label": "美股软件"
}
]
},
{
"value": "港股",
"label": "港股",
"children": [
{
"value": "港股软件",
"label": "港股软件"
}
]
},
{
"value": "A股",
"label": "A股",
"children": [
{
"value": "A股软件",
"label": "A股软件"
}
]
},
{
"value": "新加坡股",
"label": "新加坡股",
"children": [
{
"value": "新加坡股软件",
"label": "新加坡股软件"
}
]
},
{
"value": "马股",
"label": "马股",
"children": [
{
"value": "马股软件",
"label": "马股软件"
}
]
},
{
"value": "日本股",
"label": "日本股",
"children": [
{
"value": "日本股软件",
"label": "日本股软件"
}
]
},
{
"value": "泰股",
"label": "泰股",
"children": [
{
"value": "泰股软件",
"label": "泰股软件"
}
]
},
{
"value": "越南股",
"label": "越南股",
"children": [
{
"value": "越南股软件",
"label": "越南股软件"
}
]
},
{
"value": "印尼股",
"label": "印尼股",
"children": [
{
"value": "印尼股软件",
"label": "印尼股软件"
}
]
},
{
"value": "韩国股",
"label": "韩国股",
"children": [
{
"value": "韩国股软件",
"label": "韩国股软件"
}
]
},
{
"value": "台湾股",
"label": "台湾股",
"children": [
{
"value": "台湾股软件",
"label": "台湾股软件"
}
]
}
]
},
]
const getMarket = async function () { const getMarket = async function () {
try { try {
const result = await API({ const result = await API({

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

@ -11,18 +11,18 @@
<el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable /> <el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
</div>
<div class="item1">
<el-text size="large" style="width:4vw;">所属地区</el-text> <el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区" <el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
clearable @change="handleMarketChange" /> clearable @change="handleMarketChange" />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
</div>
<div class="item1">
<el-text size="large" style="width:4vw;">订单状态</el-text> <el-text size="large" style="width:4vw;">订单状态</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="item" :value="item" :key="item" />
</el-select> </el-select>
</div> </div>
</div> </div>
@ -57,7 +57,11 @@
<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="序号" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</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="姓名" width="120" fixed="left" show-overflow-tooltip /> <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="marketName" label="所属地区" width="120" />
@ -251,7 +255,8 @@
<template #icon> <template #icon>
<img v-if="currentStep === 4" src="@/assets/images/refund-rejected.png" alt="已驳回"> <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-else-if="currentStep === 3" src="@/assets/images/refund-approving.png" alt="待审核">
<img v-else-if="currentStep > 3 && currentStep != 4" src="@/assets/images/refund-approved.png" alt="已审核">
<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="未开始"> <img v-else-if="currentStep < 3" src="@/assets/images/refund-waiting.png" alt="未开始">
</template> </template>
</el-step> </el-step>
@ -265,7 +270,8 @@
<template #icon> <template #icon>
<img v-if="currentStep === 6" src="@/assets/images/refund-rejected.png" alt="已驳回"> <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-else-if="currentStep === 5" src="@/assets/images/refund-approving.png" alt="待审核">
<img v-else-if="currentStep > 5 && currentStep != 6" src="@/assets/images/refund-approved.png" alt="已审核">
<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="未开始"> <img v-else-if="currentStep < 5" src="@/assets/images/refund-waiting.png" alt="未开始">
</template> </template>
</el-step> </el-step>
@ -291,35 +297,35 @@
</el-dialog> </el-dialog>
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间">
<template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
下载
</el-button>
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间">
<template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
下载
</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
</div>
</template> </template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
</div>
</template>
</el-dialog>
</el-dialog>
</template> </template>
<script setup> <script setup>
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
@ -333,7 +339,7 @@ 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 moment from 'moment' import moment from 'moment'
import { productList } from '@/views/moneyManage/receiveDetail/utils/staticData.js'
import RefundFinanceBackground from '@/assets/images/refund-progress.png' import RefundFinanceBackground from '@/assets/images/refund-progress.png'
const currentStep = ref(0)// const currentStep = ref(0)//
@ -441,7 +447,7 @@ const statusStepMap = {
40: [7, false], 40: [7, false],
41: [8, false] 41: [8, false]
} }
const statusList = ref(['待审核','审核通过','已驳回','退款成功'])
const statusList = ref(['待审核', '审核通过', '已驳回', '退款成功'])
// //
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)) {
@ -449,7 +455,7 @@ const getRefund = async function () {
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 === '审核通过') {
statusParam.value = [20, 30, 40] statusParam.value = [20, 30, 40]
} else if (searchForm.value.statuses === '已驳回') { } else if (searchForm.value.statuses === '已驳回') {
@ -459,7 +465,7 @@ const getRefund = async function () {
} else if (searchForm.value.statuses === '退款成功') { } else if (searchForm.value.statuses === '退款成功') {
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]
} }
const params = { const params = {
pageNum: pagination.value.pageNum, pageNum: pagination.value.pageNum,
@ -620,135 +626,6 @@ const channelOptions = ref([{
label: 'Ipay88-链接收款' label: 'Ipay88-链接收款'
} }
]) ])
const productList = [
{
"value": "金币产品",
"label": "金币产品",
"children": [
{
"value": "金币充值",
"label": "金币充值",
}
]
},
{
"value": "软件产品",
"label": "软件产品",
"children": [
{
"value": "美股",
"label": "美股",
"children": [
{
"value": "美股软件",
"label": "美股软件"
}
]
},
{
"value": "港股",
"label": "港股",
"children": [
{
"value": "港股软件",
"label": "港股软件"
}
]
},
{
"value": "A股",
"label": "A股",
"children": [
{
"value": "A股软件",
"label": "A股软件"
}
]
},
{
"value": "新加坡股",
"label": "新加坡股",
"children": [
{
"value": "新加坡股软件",
"label": "新加坡股软件"
}
]
},
{
"value": "马股",
"label": "马股",
"children": [
{
"value": "马股软件",
"label": "马股软件"
}
]
},
{
"value": "日本股",
"label": "日本股",
"children": [
{
"value": "日本股软件",
"label": "日本股软件"
}
]
},
{
"value": "泰股",
"label": "泰股",
"children": [
{
"value": "泰股软件",
"label": "泰股软件"
}
]
},
{
"value": "越南股",
"label": "越南股",
"children": [
{
"value": "越南股软件",
"label": "越南股软件"
}
]
},
{
"value": "印尼股",
"label": "印尼股",
"children": [
{
"value": "印尼股软件",
"label": "印尼股软件"
}
]
},
{
"value": "韩国股",
"label": "韩国股",
"children": [
{
"value": "韩国股软件",
"label": "韩国股软件"
}
]
},
{
"value": "台湾股",
"label": "台湾股",
"children": [
{
"value": "台湾股软件",
"label": "台湾股软件"
}
]
}
]
},
]
const getMarket = async function () { const getMarket = async function () {
try { try {
const result = await API({ const result = await API({
@ -803,107 +680,107 @@ const showStep = function (row) {
showSteps.value = true showSteps.value = true
} }
const exportExcel = async function () { const exportExcel = async function () {
const statusParam = ref([10,20,22,30,32,40,41])
if (searchForm.value.statuses === '审核通过') {
statusParam.value = [20, 30, 40]
} else if (searchForm.value.statuses === '已驳回') {
statusParam.value = [12, 22, 32]
} else if (searchForm.value.statuses === '待审核') {
statusParam.value = [10]
} else if (searchForm.value.statuses === '退款成功') {
statusParam.value = [41]
} else {
statusParam.value = [10,20,22,30,32,40,41]
}
const params = {
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize,
cashRecordDTO: {
jwcode: searchForm.value.jwcode,//
name: searchForm.value.name,//
markets: searchForm.value.markets,//
goodsNames: searchForm.value.goodsName,//
statuses: statusParam.value,//1012
// 2022
// 3032
// 4041退
paymentCurrency: searchForm.value.paymentCurrency,//
payType: searchForm.value.payType,//
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') : "",
adminId: adminData.value.id
}
const statusParam = ref([10, 20, 22, 30, 32, 40, 41])
if (searchForm.value.statuses === '审核通过') {
statusParam.value = [20, 30, 40]
} else if (searchForm.value.statuses === '已驳回') {
statusParam.value = [12, 22, 32]
} else if (searchForm.value.statuses === '待审核') {
statusParam.value = [10]
} else if (searchForm.value.statuses === '退款成功') {
statusParam.value = [41]
} else {
statusParam.value = [10, 20, 22, 30, 32, 40, 41]
}
const params = {
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize,
cashRecordDTO: {
jwcode: searchForm.value.jwcode,//
name: searchForm.value.name,//
markets: searchForm.value.markets,//
goodsNames: searchForm.value.goodsName,//
statuses: statusParam.value,//1012
// 2022
// 3032
// 4041退
paymentCurrency: searchForm.value.paymentCurrency,//
payType: searchForm.value.payType,//
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') : "",
adminId: adminData.value.id
} }
}
const res = await API({ url: '/export/exportFinance', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
}else{
ElMessage.error(res.msg || '导出失败')
}
const res = await API({ url: '/export/exportFinance', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
} else {
ElMessage.error(res.msg || '导出失败')
}
} }
const openExportList = () => { const openExportList = () => {
getExportList()
exportListVisible.value = true
getExportList()
exportListVisible.value = true
} }
const getExportList = async () => { const getExportList = async () => {
exportListLoading.value = true
try {
const result = await API({ url: '/export/export' })
if (result.code === 200) {
const filteredData = result.data.filter(item => {
return item.type === 12
})
exportList.value = filteredData
} else {
ElMessage.error(result.msg || '获取导出列表失败')
exportListLoading.value = true
try {
const result = await API({ url: '/export/export' })
if (result.code === 200) {
const filteredData = result.data.filter(item => {
return item.type === 12
})
exportList.value = filteredData
} else {
ElMessage.error(result.msg || '获取导出列表失败')
}
} catch (error) {
console.error('获取导出列表出错:', error)
ElMessage.error('获取导出列表失败,请稍后重试')
} finally {
exportListLoading.value = false
} }
} catch (error) {
console.error('获取导出列表出错:', error)
ElMessage.error('获取导出列表失败,请稍后重试')
} finally {
exportListLoading.value = false
}
} }
const downloadExportFile = (item) => { const downloadExportFile = (item) => {
if (item.state === 2) {
const link = document.createElement('a')
link.href = item.url
link.download = item.fileName
link.click()
} else {
ElMessage.warning('文件还在导出中,请稍后再试')
}
if (item.state === 2) {
const link = document.createElement('a')
link.href = item.url
link.download = item.fileName
link.click()
} else {
ElMessage.warning('文件还在导出中,请稍后再试')
}
} }
// //
const getTagType = (state) => { const getTagType = (state) => {
switch (state) {
case 0:
return 'info';
case 1:
return 'primary';
case 2:
return 'success';
case 3:
return 'danger';
default:
return 'info';
}
switch (state) {
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) {
case 0:
return '待执行';
case 1:
return '执行中';
case 2:
return '执行完成';
case 3:
return '执行出错';
default:
return '未知状态';
}
switch (state) {
case 0:
return '待执行';
case 1:
return '执行中';
case 2:
return '执行完成';
case 3:
return '执行出错';
default:
return '未知状态';
}
} }
const showAudit2 = function (row) { const showAudit2 = function (row) {
auditRow.value = row auditRow.value = row

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

@ -11,16 +11,16 @@
<el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable /> <el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
clearable @change="handleMarketChange" />
</div>
<div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text> <el-text size="large" style="width:4vw;">产品名称</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="请选择产品名称" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.markets" :options="market" placeholder="请选择所属地区"
clearable @change="handleMarketChange" />
</div>
<div class="item1">
<el-text size="large" style="width:4vw;">订单状态</el-text> <el-text size="large" style="width:4vw;">订单状态</el-text>
<el-select v-model="searchForm.statuses" style="width:9vw;" placeholder="请选择订单状态" clearable> <el-select v-model="searchForm.statuses" style="width:9vw;" placeholder="请选择订单状态" 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" />
@ -58,7 +58,11 @@
<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="序号" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</el-table-column>
<el-table-column prop="name" label="Homily ID" width="120" fixed="left" /> <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="jwcode" label="姓名" width="120" fixed="left" show-overflow-tooltip />
<el-table-column prop="marketName" label="所属地区" width="120" /> <el-table-column prop="marketName" label="所属地区" width="120" />
@ -345,6 +349,7 @@ 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 moment from 'moment' import moment from 'moment'
import { productList } from '@/views/moneyManage/receiveDetail/utils/staticData.js'
const currentStep = ref(0)// const currentStep = ref(0)//
const searchForm = ref({ const searchForm = ref({
@ -780,135 +785,6 @@ const hideExecutor = function () {
addForm.value.executor = '' addForm.value.executor = ''
showExecutor.value = false showExecutor.value = false
} }
const productList = [
{
"value": "金币产品",
"label": "金币产品",
"children": [
{
"value": "金币充值",
"label": "金币充值",
}
]
},
{
"value": "软件产品",
"label": "软件产品",
"children": [
{
"value": "美股",
"label": "美股",
"children": [
{
"value": "美股软件",
"label": "美股软件"
}
]
},
{
"value": "港股",
"label": "港股",
"children": [
{
"value": "港股软件",
"label": "港股软件"
}
]
},
{
"value": "A股",
"label": "A股",
"children": [
{
"value": "A股软件",
"label": "A股软件"
}
]
},
{
"value": "新加坡股",
"label": "新加坡股",
"children": [
{
"value": "新加坡股软件",
"label": "新加坡股软件"
}
]
},
{
"value": "马股",
"label": "马股",
"children": [
{
"value": "马股软件",
"label": "马股软件"
}
]
},
{
"value": "日本股",
"label": "日本股",
"children": [
{
"value": "日本股软件",
"label": "日本股软件"
}
]
},
{
"value": "泰股",
"label": "泰股",
"children": [
{
"value": "泰股软件",
"label": "泰股软件"
}
]
},
{
"value": "越南股",
"label": "越南股",
"children": [
{
"value": "越南股软件",
"label": "越南股软件"
}
]
},
{
"value": "印尼股",
"label": "印尼股",
"children": [
{
"value": "印尼股软件",
"label": "印尼股软件"
}
]
},
{
"value": "韩国股",
"label": "韩国股",
"children": [
{
"value": "韩国股软件",
"label": "韩国股软件"
}
]
},
{
"value": "台湾股",
"label": "台湾股",
"children": [
{
"value": "台湾股软件",
"label": "台湾股软件"
}
]
}
]
},
]
const showAudit = function (row) { const showAudit = function (row) {
auditRow.value = row auditRow.value = row
showAudit2.value = true showAudit2.value = true

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

@ -11,15 +11,15 @@
<el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable /> <el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
</div>
<div class="item1">
<el-text size="large" style="width:4vw;">所属地区</el-text> <el-text size="large" style="width:4vw;">所属地区</el-text>
<el-cascader style="width: 9vw;" v-model="searchForm.market" :options="market" placeholder="请选择所属地区" <el-cascader style="width: 9vw;" v-model="searchForm.market" :options="market" placeholder="请选择所属地区"
clearable @change="handleMarketChange" /> clearable @change="handleMarketChange" />
</div> </div>
<div class="item1"> <div class="item1">
<el-text size="large" style="width:4vw;">产品名称</el-text>
<el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" clearable />
</div>
<div class="item1">
<el-text size="large" style="width:4vw;" multiple>订单状态</el-text> <el-text size="large" style="width:4vw;" multiple>订单状态</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="item" :value="item" />
@ -43,7 +43,8 @@
<div class="item2" style="width: 28.5vw;"> <div class="item2" style="width: 28.5vw;">
<el-text size="large" style="width:4vw;">付款时间</el-text> <el-text size="large" style="width:4vw;">付款时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="起始时间" <el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width:22vw;" :disabled-date="disabledDate" :default-time="defaultTime" clearable />
end-placeholder="结束时间" style="width:22vw;" :disabled-date="disabledDate" :default-time="defaultTime"
clearable />
</div> </div>
<div> <div>
<el-button type="primary" @click="getRefund">查询</el-button> <el-button type="primary" @click="getRefund">查询</el-button>
@ -56,7 +57,11 @@
<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="序号" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</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="姓名" width="120" fixed="left" show-overflow-tooltip /> <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="marketName" label="所属地区" width="120" />
@ -68,24 +73,25 @@
<el-table-column prop="payType" label="支付方式" width="140" /> <el-table-column prop="payType" label="支付方式" width="140" />
<el-table-column prop="payTime" label="付款时间" width="180" /> <el-table-column prop="payTime" label="付款时间" width="180" />
<el-table-column prop="voucher" label="转账凭证" width="110px"> <el-table-column prop="voucher" label="转账凭证" width="110px">
<template #default="scope">
<div v-if="scope.row.voucher"
<template #default="scope">
<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 v-else style="display: flex; justify-content: center; align-items: center; height: 40px;">无转账凭证</div>
</template>
</el-table-column>
</div>
<div v-else style="display: flex; justify-content: center; align-items: center; height: 40px;">无转账凭证
</div>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" width="150" 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="status" label="订单状态" width="120">
<template #default="scope"> <template #default="scope">
{{ {{
[10].includes(scope.row.status) ? '已提交' : [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
[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
}} }}
</template> </template>
</el-table-column> </el-table-column>
@ -218,6 +224,7 @@ 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 { pa } from 'element-plus/es/locales.mjs'
import { productList } from '@/views/moneyManage/receiveDetail/utils/staticData.js'
import RefundRecallBackground from '@/assets/images/refund-recall.png' import RefundRecallBackground from '@/assets/images/refund-recall.png'
@ -248,7 +255,7 @@ 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(['已提交', '已撤回', '进行中', '已退款', '已驳回'])
// //
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)) {
@ -262,11 +269,11 @@ const getRefund = async function () {
} else if (searchForm.value.statuses === '已撤回') { } else if (searchForm.value.statuses === '已撤回') {
statusParam.value = [11] statusParam.value = [11]
} else if (searchForm.value.statuses === '进行中') { } else if (searchForm.value.statuses === '进行中') {
statusParam.value = [20,30,40]
} else if(searchForm.value.statuses === '已退款') {
statusParam.value = [20, 30, 40]
} else if (searchForm.value.statuses === '已退款') {
statusParam.value = [41] statusParam.value = [41]
} else if(searchForm.value.statuses === '已驳回') {
statusParam.value = [12,22,32]
} else if (searchForm.value.statuses === '已驳回') {
statusParam.value = [12, 22, 32]
} }
const params = { const params = {
pageNum: pagination.value.pageNum, pageNum: pagination.value.pageNum,
@ -392,31 +399,31 @@ const getMarket = async function () {
// //
const previewImage = (imageUrl) => { const previewImage = (imageUrl) => {
// 使 element-plus el-image
const imageElement = document.createElement('img');
imageElement.src = imageUrl;
imageElement.style.maxWidth = '80vw';
imageElement.style.maxHeight = '80vh';
const viewer = document.createElement('div');
viewer.style.position = 'fixed';
viewer.style.top = '0';
viewer.style.left = '0';
viewer.style.width = '100vw';
viewer.style.height = '100vh';
viewer.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
viewer.style.display = 'flex';
viewer.style.justifyContent = 'center';
viewer.style.alignItems = 'center';
viewer.style.zIndex = '9999';
viewer.style.overflow = 'auto';
viewer.appendChild(imageElement);
document.body.appendChild(viewer);
viewer.addEventListener('click', () => {
document.body.removeChild(viewer);
});
// 使 element-plus el-image
const imageElement = document.createElement('img');
imageElement.src = imageUrl;
imageElement.style.maxWidth = '80vw';
imageElement.style.maxHeight = '80vh';
const viewer = document.createElement('div');
viewer.style.position = 'fixed';
viewer.style.top = '0';
viewer.style.left = '0';
viewer.style.width = '100vw';
viewer.style.height = '100vh';
viewer.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
viewer.style.display = 'flex';
viewer.style.justifyContent = 'center';
viewer.style.alignItems = 'center';
viewer.style.zIndex = '9999';
viewer.style.overflow = 'auto';
viewer.appendChild(imageElement);
document.body.appendChild(viewer);
viewer.addEventListener('click', () => {
document.body.removeChild(viewer);
});
}; };
@ -492,135 +499,7 @@ const channelOptions = ref([{
label: 'Ipay88-链接收款' label: 'Ipay88-链接收款'
} }
]) ])
const productList = [
{
"value": "金币产品",
"label": "金币产品",
"children": [
{
"value": "金币充值",
"label": "金币充值",
}
]
},
{
"value": "软件产品",
"label": "软件产品",
"children": [
{
"value": "美股",
"label": "美股",
"children": [
{
"value": "美股软件",
"label": "美股软件"
}
]
},
{
"value": "港股",
"label": "港股",
"children": [
{
"value": "港股软件",
"label": "港股软件"
}
]
},
{
"value": "A股",
"label": "A股",
"children": [
{
"value": "A股软件",
"label": "A股软件"
}
]
},
{
"value": "新加坡股",
"label": "新加坡股",
"children": [
{
"value": "新加坡股软件",
"label": "新加坡股软件"
}
]
},
{
"value": "马股",
"label": "马股",
"children": [
{
"value": "马股软件",
"label": "马股软件"
}
]
},
{
"value": "日本股",
"label": "日本股",
"children": [
{
"value": "日本股软件",
"label": "日本股软件"
}
]
},
{
"value": "泰股",
"label": "泰股",
"children": [
{
"value": "泰股软件",
"label": "泰股软件"
}
]
},
{
"value": "越南股",
"label": "越南股",
"children": [
{
"value": "越南股软件",
"label": "越南股软件"
}
]
},
{
"value": "印尼股",
"label": "印尼股",
"children": [
{
"value": "印尼股软件",
"label": "印尼股软件"
}
]
},
{
"value": "韩国股",
"label": "韩国股",
"children": [
{
"value": "韩国股软件",
"label": "韩国股软件"
}
]
},
{
"value": "台湾股",
"label": "台湾股",
"children": [
{
"value": "台湾股软件",
"label": "台湾股软件"
}
]
}
]
},
]
const reset = function () { const reset = function () {
searchForm.value = { searchForm.value = {
jwcode: '', jwcode: '',
@ -662,8 +541,8 @@ const handleMarketChange = (value) => {
searchForm.value.market = value || [] searchForm.value.market = value || []
} }
const defaultTime = [ const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1, 23, 59, 59),
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1, 23, 59, 59),
] ]
onMounted(() => { onMounted(() => {
getRefund() getRefund()

Loading…
Cancel
Save