Compare commits

...

21 Commits

Author SHA1 Message Date
ZhangYong b789ea4d53 参数 3 weeks ago
ZhangYong 68d2652986 Revert "退款查询参数" 3 weeks ago
ZhangYong 8b2a5cc8b5 退款查询参数 3 weeks ago
ZhangYong 14349424c0 表单校验问题 3 weeks ago
ZhangYong c822830384 修改选中样式 3 weeks ago
ZhangYong 0877cefc6d 修改下拉样式 3 weeks ago
ZhangYong 9adfe0f486 产品选择修复 3 weeks ago
ZhangYong 452f621d85 Merge branch 'zhangyong/feature-20260211100322-日常优化2.0' into milestone-20260212-日常优化2.0 3 weeks ago
zhangrenyuan 931f5a7939 fix: 修复多个表格组件的引用方式,确保一致性 3 weeks ago
zhangrenyuan 330899d1b1 fix: 修复表格数据更新后滚动条位置未重置的问题 3 weeks ago
zhangrenyuan 0707bcd353 fix(表格-现金管理完成): 修复表格数据刷新后滚动位置未重置的问题 3 weeks ago
zhangrenyuan c345da7f75 fix(表格-现金退款): 修复退款详情表格翻页后滚动位置未重置的问题 3 weeks ago
zhangrenyuan 791abd2819 fix(表格-现金收款): 表格数据刷新后自动滚动到顶部 3 weeks ago
zhangrenyuan 85838beedd fix(表格-退款管理和客户账户明细): 修复表格数据刷新后滚动条位置未重置的问题 3 weeks ago
zhangrenyuan 9ab38c6d8f fix(表格-消耗管理): 搜索后表格自动滚动到顶部 3 weeks ago
zhangrenyuan f4753eee8c fix(表格): 修复分页或搜索后表格滚动位置未重置的问题 3 weeks ago
ZhangYong 9cd27400df 流水账页面序号问题 3 weeks ago
zhangrenyuan 6de006de55 fix(ui): 调整表格列宽和翻译,优化活动管理界面布局 3 weeks ago
ZhangYong cf3869aa06 支付方式顺序修改 3 weeks ago
ZhangYong ec9dcffc53 活动加搜索 3 weeks ago
ZhangYong 778754bfe4 优化2.0,需求1 3 weeks ago
  1. 17
      package-lock.json
  2. 279
      src/components/MoneyManage/ProductSelect.vue
  3. 28
      src/components/locales/lang/en.js
  4. 26
      src/components/locales/lang/zh-CN.js
  5. 65
      src/views/activityManage/activity.vue
  6. 2
      src/views/audit/bean/beanAudit.vue
  7. 4
      src/views/audit/gold/rechargeAudit.vue
  8. 11
      src/views/audit/gold/refundAudit.vue
  9. 13
      src/views/channelManage/fans/fans.vue
  10. 12
      src/views/channelManage/reward/reward.vue
  11. 10
      src/views/consume/bean/articleVideo.vue
  12. 10
      src/views/consume/bean/dieHardFan.vue
  13. 10
      src/views/consume/bean/liveStream.vue
  14. 10
      src/views/consume/gold/coinConsumeDetail.vue
  15. 12
      src/views/language/languageTranslate.vue
  16. 12
      src/views/moneyManage/executor/executor.vue
  17. 185
      src/views/moneyManage/financialAccount/cashFlow.vue
  18. 16
      src/views/moneyManage/financialAccount/performanceAttribution.vue
  19. 48
      src/views/moneyManage/receiveDetail/receiveFinance.vue
  20. 10
      src/views/moneyManage/receiveDetail/receiveHead.vue
  21. 48
      src/views/moneyManage/receiveDetail/receiveManage.vue
  22. 57
      src/views/moneyManage/receiveDetail/receiveService.vue
  23. 2
      src/views/moneyManage/receiveDetail/utils/staticData.js
  24. 12
      src/views/moneyManage/refundDetail/refundCharge.vue
  25. 12
      src/views/moneyManage/refundDetail/refundFinance.vue
  26. 12
      src/views/moneyManage/refundDetail/refundHeader.vue
  27. 36
      src/views/moneyManage/refundDetail/refundService.vue
  28. 11
      src/views/permissions/rolePermission.vue
  29. 12
      src/views/permissions/userPermission.vue
  30. 16
      src/views/recharge/bean/beanOnlineRecharge.vue
  31. 16
      src/views/recharge/bean/beanSystemRecharge.vue
  32. 5
      src/views/recharge/gold/coinRechargeDetail.vue
  33. 10
      src/views/refund/gold/coinRefundDetail.vue
  34. 10
      src/views/usergold/bean/userbean.vue
  35. 10
      src/views/usergold/gold/clientCountBalance.vue
  36. 13
      src/views/usergold/gold/clientCountDetail.vue

17
package-lock.json

@ -116,6 +116,7 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
"integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
"dev": true,
"peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.2",
@ -2019,6 +2020,7 @@
"version": "6.7.2",
"resolved": "https://registry.npmmirror.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz",
"integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==",
"peer": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.7.2"
},
@ -2791,6 +2793,7 @@
"resolved": "https://mirrors.huaweicloud.com/repository/npm/@types/lodash-es/-/lodash-es-4.17.12.tgz",
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/lodash": "*"
}
@ -2801,6 +2804,7 @@
"integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~6.20.0"
}
@ -3337,6 +3341,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001688",
"electron-to-chromium": "^1.5.73",
@ -4241,13 +4246,15 @@
"version": "4.17.21",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash-es": {
"version": "4.17.21",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/lodash-es/-/lodash-es-4.17.21.tgz",
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash-unified": {
"version": "1.0.3",
@ -4717,6 +4724,7 @@
"integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/estree": "1.0.6"
},
@ -4794,6 +4802,7 @@
"resolved": "https://registry.npmmirror.com/sass/-/sass-1.86.3.tgz",
"integrity": "sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==",
"dev": true,
"peer": true,
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^5.0.2",
@ -4940,6 +4949,7 @@
"integrity": "sha512-GWANVlPM/ZfYzuPHjq0nxT+EbOEDDN3Jwhwdg1D8TU8oSkktp8w64Uq4auuGLxFSoNTRDncTq2hQHX1Ld9KHkA==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@ -4993,6 +5003,7 @@
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@ -5085,6 +5096,7 @@
"integrity": "sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.24.2",
"postcss": "^8.5.1",
@ -5176,6 +5188,7 @@
"resolved": "https://mirrors.huaweicloud.com/repository/npm/vue/-/vue-3.5.13.tgz",
"integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.5.13",
"@vue/compiler-sfc": "3.5.13",

279
src/components/MoneyManage/ProductSelect.vue

@ -28,7 +28,7 @@
<div class="product">
<div class="coinselect" @click="producthandelMenu" :class="{ 'active': productisOpen }">
<div class="cointxt">
{{ t('cash.softwareProduct') }}
{{ t('cash.softwareProduct') }}
</div>
<span class="coin-arrow">
<el-icon>
@ -81,11 +81,50 @@
<div class="ai">
<div class="checktxt">{{ t('cash.other') }}</div>
<hr class="line">
<el-radio-group v-model="selectedValue">
<el-radio v-for="ai in InfoFee" :key="ai" :label="ai" :value="ai">
{{ ai }}
</el-radio>
</el-radio-group>
<!-- Native implementation replacing el-radio-group -->
<div class="native-radio-group">
<div v-for="ai in InfoFee" :key="ai" class="radio-wrapper native-wrapper">
<div class="native-radio-item" @click="handleClick(ai)">
<span class="native-radio-input" :class="{ 'is-checked': selectedValue === ai }">
<span class="native-radio-inner"></span>
</span>
<span class="native-radio-label" :class="{ 'is-checked': selectedValue === ai }">{{ ai }}</span>
</div>
</div>
<div class="native-radio-item" @click=" showPanel = !showPanel">
<span class="native-radio-input" :class="{ 'is-checked': ifHcInfo }">
<span class="native-radio-inner"></span>
</span>
<span class="native-radio-label" :class="{ 'is-checked': ifHcInfo }">{{ t('cash.HC')
}}</span>
<div v-if="showPanel" class="native-cascader-panel" @click.stop>
<div class="cascader-menu">
<div v-for="opt in cascaderOptions" :key="opt.value" class="cascader-node"
:class="{ 'is-active': activeCascaderOption?.value === opt.value }"
@mouseenter="activeCascaderOption = opt">
<span class="cascader-label">{{ opt.label }}</span>
<el-icon class="cascader-icon">
<ArrowRight />
</el-icon>
</div>
</div>
<div class="cascader-menu sub-menu" v-if="activeCascaderOption">
<div v-for="child in activeCascaderOption.children" :key="child.value" class="cascader-node"
@click="handlePanelChange([activeCascaderOption.value, child.value])">
<span class="cascader-label">{{ child.label }}</span>
</div>
</div>
</div>
</div>
</div>
</div>
<hr class="line">
<div class="selected-value">{{ t('common.selectedValue') }}{{ selectedValue ? `${selectedValue}` :
t('common.none') }}</div>
<div class="confirm">
<el-button type="info" @click="cancelSelection">{{ t('common.cancel') }}</el-button>
<el-button type="primary" @click="confirmSelection">{{ t('common.confirm') }}</el-button>
</div>
</div>
</div>
@ -94,11 +133,13 @@
</template>
<script setup>
import { ref, watch, onMounted, computed, onUnmounted, nextTick } from 'vue';
import { ArrowDown } from '@element-plus/icons-vue';
import { ArrowDown, ArrowRight } from '@element-plus/icons-vue';
import { useFormItem } from 'element-plus';
//
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const { formItem } = useFormItem()
const searchData = ref('')
const isOpen = ref(false)
@ -127,15 +168,30 @@ const props = defineProps({
}
})
const emit = defineEmits(['update:modelValue'])
const emit = defineEmits(['update:modelValue', 'change'])
const selectedValue = ref('')
watch(selectedValue, (newVal) => {
emit('update:modelValue', newVal ? newVal : '');
selectedItem.value = newVal || '';
});
const confirmSelection = () => {
emit('update:modelValue', selectedValue.value)
emit('change', selectedValue.value)
selectedItem.value = selectedValue.value
formItem?.validate('change').catch(() => { })
isOpen.value = false
}
const cancelSelection = () => {
emit('update:modelValue', '');
emit('change', '');
console.log('点击了取消', '');
selectedItem.value = '';
selectedValue.value = '';
isOpen.value = false
showPanel.value = false
}
const AIProduct = [
@ -156,8 +212,68 @@ const superProduct = [
const InfoFee = [
t('cash.staticInfoFee'),
t('cash.BGmember'),
t('cash.HC')
]
const showPanel = ref(false)
const activeCascaderOption = ref(null)
const handleClick = (ai) => {
selectedValue.value = ai;
}
const cascaderValue = ref([])
const handlePanelChange = (val) => {
selectedValue.value = val[val.length - 1]
showPanel.value = false //
console.log('selectedValue.value', selectedValue.value);
}
const ifHcInfo = ref(false)
const checkIfHcINFO = () => {
ifHcInfo.value = cascaderOptions.some(group =>
group.children && group.children.some(child => child.value === selectedValue.value)
)
console.log('ifHcInfo.value', ifHcInfo.value);
}
//
const cascaderOptions = [
{
value: 'realTime',
label: t('cash.aiService.realTime'),
children: [
{ value: t('cash.aiService.HCInfoFeeRealTimeUS'), label: t('cash.softwareMenu.usStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeHK'), label: t('cash.softwareMenu.hkStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeMalaysiaStock'), label: t('cash.softwareMenu.malaysiaStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeAStock'), label: t('cash.softwareMenu.aStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeSingaporeStock'), label: t('cash.softwareMenu.singaporeStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeJapanStock'), label: t('cash.softwareMenu.japanStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeThailandStock'), label: t('cash.softwareMenu.thailandStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeVietnamStock'), label: t('cash.softwareMenu.vietnamStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeIndonesiaStock'), label: t('cash.softwareMenu.indonesiaStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeKoreaStock'), label: t('cash.softwareMenu.koreaStock') },
{ value: t('cash.aiService.HCInfoFeeRealTimeTaiwanStock'), label: t('cash.softwareMenu.taiwanStock') }
]
},
{
value: 'delayed',
label: t('cash.aiService.delayed'),
children: [
{ value: t('cash.aiService.HCInfoFeeDelayUS'), label: t('cash.softwareMenu.usStock') },
{ value: t('cash.aiService.HCInfoFeeDelayHK'), label: t('cash.softwareMenu.hkStock') },
{ value: t('cash.aiService.HCInfoFeeDelayMalaysiaStock'), label: t('cash.softwareMenu.malaysiaStock') },
{ value: t('cash.aiService.HCInfoFeeDelayAStock'), label: t('cash.softwareMenu.aStock') },
{ value: t('cash.aiService.HCInfoFeeDelaySingaporeStock'), label: t('cash.softwareMenu.singaporeStock') },
{ value: t('cash.aiService.HCInfoFeeDelayJapanStock'), label: t('cash.softwareMenu.japanStock') },
{ value: t('cash.aiService.HCInfoFeeDelayThailandStock'), label: t('cash.softwareMenu.thailandStock') },
{ value: t('cash.aiService.HCInfoFeeDelayVietnamStock'), label: t('cash.softwareMenu.vietnamStock') },
{ value: t('cash.aiService.HCInfoFeeDelayIndonesiaStock'), label: t('cash.softwareMenu.indonesiaStock') },
{ value: t('cash.aiService.HCInfoFeeDelayKoreaStock'), label: t('cash.softwareMenu.koreaStock') },
{ value: t('cash.aiService.HCInfoFeeDelayTaiwanStock'), label: t('cash.softwareMenu.taiwanStock') }
]
}
]
watch(selectedValue, () => {
checkIfHcINFO();
}, { immediate: true });
// 使menuData
const menuData = [
{
@ -320,7 +436,8 @@ const resetSelect = () => {
watch(() => props.modelValue, (newVal) => {
selectedItem.value = newVal;
selectedValue.value = newVal;
selectedValue.value = newVal;
checkIfHcINFO();
}, { immediate: true });
onMounted(async () => {
console.log('打开组件', props.modelValue);
@ -375,9 +492,8 @@ defineExpose({ resetSelect });
position: absolute;
top: 100%;
left: 0;
width: 160%;
width: 200%;
max-height: 700px;
overflow-y: auto;
min-height: 200px;
display: flex;
padding: 10px;
@ -457,6 +573,28 @@ defineExpose({ resetSelect });
.ai {
width: 100%;
.radio-wrapper {
position: relative;
display: inline-block;
margin-right: 32px;
}
}
.selected-value {
color: #5870ff;
font-size: 12px;
text-align: center;
}
.confirm {
width: 100%;
padding: 10px 0;
display: flex;
justify-content: center;
gap: 50px;
}
.marketprodut {
@ -513,4 +651,113 @@ defineExpose({ resetSelect });
}
}
}
/* Native Radio Styles */
.native-radio-group {
display: inline-block;
}
.native-radio-item {
position: relative;
display: inline-flex;
align-items: center;
cursor: pointer;
margin-right: 0;
}
.native-radio-input {
white-space: nowrap;
cursor: pointer;
outline: none;
display: inline-flex;
position: relative;
vertical-align: middle;
width: 14px;
height: 14px;
background-color: #fff;
border: 1px solid #dcdfe6;
border-radius: 50%;
box-sizing: border-box;
margin-right: 8px;
&.is-checked {
border-color: #409eff;
background: #409eff;
.native-radio-inner {
width: 4px;
height: 4px;
border-radius: 50%;
background-color: #fff;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
}
}
.native-radio-label {
font-size: 14px;
color: #606266;
&.is-checked {
color: #409eff;
}
}
/* Native Cascader Styles */
.native-cascader-panel {
position: absolute;
top: -36px;
left: 100px;
/* Adjust as needed */
z-index: 1000;
background: #E4F0FC;
border: 1px solid #e4e7ed;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
border-radius: 4px;
display: flex;
max-height: 100px;
}
.cascader-menu {
min-width: 150px;
padding: 6px 0;
background: #E4F0FC;
border-right: 1px solid #e4e7ed;
&:last-child {
border-right: none;
}
&.sub-menu {
/* Slightly different bg for submenu */
overflow-y: auto;
height: 150px;
}
}
.cascader-node {
padding: 8px 15px;
display: flex;
align-items: center;
justify-content: space-between;
cursor: pointer;
font-size: 14px;
color: #606266;
&:hover,
&.is-active {
background-color: #f5f7fa;
color: #409eff;
}
.cascader-icon {
font-size: 12px;
margin-left: 10px;
color: #c0c4cc;
}
}
</style>

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

@ -5,6 +5,8 @@ export default {
common: {
// Filters
name: "Name",
none: "None",
selectedValue: "Selected Value",
pleaseInputName: "Enter name",
customerName: "Customer",
customerNamePlaceholder: "Enter customer name",
@ -518,7 +520,7 @@ export default {
payAmount: "Pay Amount",
receiveCurrency: "Rcv Currency",
receiveAmount: "Rcv Amount",
toSupply: "Pending",
toSupply: "Incomplete",
pending: "Pending",
fee: "Fee",
transferVoucher: "Transfer IMG",
@ -1128,6 +1130,30 @@ export default {
superCompass: "Super Compass",
aiDetectionTool: "AI Detector",
superDetectionTool: "Super Detector",
realTime: "Real Time",
delayed: "Delay",
HCInfoFeeRealTimeUS: "HC Info Fee - Real Time - US Stock",
HCInfoFeeRealTimeHK: "HC Info Fee - Real Time - HK Stock",
HCInfoFeeRealTimeAStock: "HC Info Fee - Real Time - A Stock",
HCInfoFeeRealTimeMalaysiaStock: "HC Info Fee - Real Time - Malaysia Stock",
HCInfoFeeRealTimeSingaporeStock: "HC Info Fee - Real Time - Singapore Stock",
HCInfoFeeRealTimeJapanStock: "HC Info Fee - Real Time - Japan Stock",
HCInfoFeeRealTimeThailandStock: "HC Info Fee - Real Time - Thailand Stock",
HCInfoFeeRealTimeVietnamStock: "HC Info Fee - Real Time - Vietnam Stock",
HCInfoFeeRealTimeIndonesiaStock: "HC Info Fee - Real Time - Indonesia Stock",
HCInfoFeeRealTimeKoreaStock: "HC Info Fee - Real Time - Korea Stock",
HCInfoFeeRealTimeTaiwanStock: "HC Info Fee - Real Time - Taiwan Stock",
HCInfoFeeDelayUS: "HC Info Fee - Delay - US Stock",
HCInfoFeeDelayHK: "HC Info Fee - Delay - HK Stock",
HCInfoFeeDelayMalaysiaStock: "HC Info Fee - Delay - Malaysia Stock",
HCInfoFeeDelayAStock: "HC Info Fee - Delay - A Stock",
HCInfoFeeDelaySingaporeStock: "HC Info Fee - Delay - Singapore Stock",
HCInfoFeeDelayJapanStock: "HC Info Fee - Delay - Japan Stock",
HCInfoFeeDelayThailandStock: "HC Info Fee - Delay - Thailand Stock",
HCInfoFeeDelayVietnamStock: "HC Info Fee - Delay - Vietnam Stock",
HCInfoFeeDelayIndonesiaStock: "HC Info Fee - Delay - Indonesia Stock",
HCInfoFeeDelayKoreaStock: "HC Info Fee - Delay - Korea Stock",
HCInfoFeeDelayTaiwanStock: "HC Info Fee - Delay - Taiwan Stock",
},
markets: {
HongKong: "Hong Kong",

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

@ -5,6 +5,8 @@ export default {
common: {
// 筛选
name: "姓名",
none: "无",
selectedValue: "当前选中",
pleaseInputName: "请输入姓名",
customerName: "客户姓名",
customerNamePlaceholder: "请输入客户姓名",
@ -1141,6 +1143,30 @@ export default {
superCompass: "超级机构罗盘",
aiDetectionTool: "AI机构探测神器",
superDetectionTool: "超级机构探测神器",
realTime: "实时",
delayed: "延时",
HCInfoFeeRealTimeUS: "HC信息费-实时-美股",
HCInfoFeeRealTimeHK: "HC信息费-实时-港股",
HCInfoFeeRealTimeAStock: "HC信息费-实时-A股",
HCInfoFeeRealTimeMalaysiaStock: "HC信息费-实时-马股",
HCInfoFeeRealTimeSingaporeStock: "HC信息费-实时-新加坡股",
HCInfoFeeRealTimeJapanStock: "HC信息费-实时-日本股",
HCInfoFeeRealTimeThailandStock: "HC信息费-实时-泰国股",
HCInfoFeeRealTimeVietnamStock: "HC信息费-实时-越南股",
HCInfoFeeRealTimeIndonesiaStock: "HC信息费-实时-印尼股",
HCInfoFeeRealTimeKoreaStock: "HC信息费-实时-韩国股",
HCInfoFeeRealTimeTaiwanStock: "HC信息费-实时-台湾股",
HCInfoFeeDelayUS: "HC信息费-延时-美股",
HCInfoFeeDelayHK: "HC信息费-延时-港股",
HCInfoFeeDelayAStock: "HC信息费-延时-A股",
HCInfoFeeDelayMalaysiaStock: "HC信息费-延时-马股",
HCInfoFeeDelaySingaporeStock: "HC信息费-延时-新加坡股",
HCInfoFeeDelayJapanStock: "HC信息费-延时-日本股",
HCInfoFeeDelayThailandStock: "HC信息费-延时-泰国股",
HCInfoFeeDelayVietnamStock: "HC信息费-延时-越南股",
HCInfoFeeDelayIndonesiaStock: "HC信息费-延时-印尼股",
HCInfoFeeDelayKoreaStock: "HC信息费-延时-韩国股",
HCInfoFeeDelayTaiwanStock: "HC信息费-延时-台湾股",
},
// 市场
markets: {

65
src/views/activityManage/activity.vue

@ -1,31 +1,33 @@
<template>
<el-card class="card1" style="margin-bottom: 1vh;">
<div class="condition">
<div class="condition-item1">
<el-text size="large">{{ t('common.activityName') }}</el-text>
<el-input v-model="searchForm.activityName" style="width: 10vw" :placeholder="t('common.activityNamePlaceholder')" clearable />
<div class="condition-item">
<el-text size="large" class="label-text">{{ t('common.activityName') }}</el-text>
<el-input v-model="searchForm.activityName" class="input-width" :placeholder="t('common.activityNamePlaceholder')" clearable />
</div>
<div class="condition-item1">
<el-text size="large">{{ t('common.type') }}</el-text>
<div class="condition-item">
<el-text size="large" class="label-text">{{ t('common.type') }}</el-text>
<!-- <el-cascader v-model="searchForm.businessBelong" :options="marketOptions" placeholder="请选择所属地区" clearable
style="width: 10vw" /> -->
<el-select v-model="searchForm.businessBelong" :placeholder="t('common.typePlaceholder')" style="width: 10vw" clearable>
<el-select v-model="searchForm.businessBelong" :placeholder="t('common.typePlaceholder')" class="input-width" clearable>
<el-option :label="t('common.customerBelong')" value="客户归属地" />
<el-option :label="t('common.activityBelong')" value="活动归属地" />
</el-select>
</div>
<div class="condition-item2">
<el-text size="large">{{ t('common.startTime') }}</el-text>
<div class="condition-item">
<el-text size="large" class="label-text">{{ t('common.startTime') }}</el-text>
<el-date-picker v-model="searchForm.startTime" type="datetime" :placeholder="t('common.startTime')"
format="YYYY-MM-DD HH:mm:ss" :default-time="defaultStartTime" clearable />
format="YYYY-MM-DD HH:mm:ss" :default-time="defaultStartTime" class="input-width" clearable />
</div>
<div class="condition-item2">
<el-text size="large">{{ t('common.endTime') }}</el-text>
<div class="condition-item">
<el-text size="large" class="label-text">{{ t('common.endTime') }}</el-text>
<el-date-picker v-model="searchForm.endTime" type="datetime" :placeholder="t('common.endTime')"
format="YYYY-MM-DD HH:mm:ss" :default-time="defaultEndTime" clearable />
format="YYYY-MM-DD HH:mm:ss" :default-time="defaultEndTime" class="input-width" clearable />
</div>
<div class="condition-buttons">
<el-button type="primary" @click="getActivity">{{ t('common.search') }}</el-button>
<el-button type="success" @click="reset">{{ t('common.reset') }}</el-button>
</div>
<el-button type="primary" @click="getActivity">{{ t('common.search') }}</el-button>
<el-button type="success" @click="reset">{{ t('common.reset') }}</el-button>
</div>
</el-card>
@ -36,7 +38,7 @@
<el-button type="success" @click="showAdd = true">{{ t('common.addActivity') }}</el-button>
</div>
<div>
<el-table :data="tableData" style="width: 82vw;height:70vh;" :row-style="{ height: '50px' }">
<el-table ref="tableRef" :data="tableData" style="width: 82vw;height:70vh;" :row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left">
<template #default="scope">
<span>{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}</span>
@ -150,7 +152,7 @@
</template>
<script setup>
import { ElMessage, ElPagination } from 'element-plus';
import { onMounted, ref } from 'vue'
import { onMounted, ref, nextTick } from 'vue'
import API from "@/util/http.js"
import moment from 'moment'
import { useAdminStore } from "@/store/index.js"
@ -173,6 +175,10 @@ const getActivityStatusText = (status) => {
const activityNameReg = /^[\u4e00-\u9fa5a-zA-Z0-9,。!?、;:“”()‘’《》【】{}——~,.!?:;'()\[\]_&+=\/-]+$/;
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const pagination = ref({
pageNum: 1,
pageSize: 10,
@ -224,7 +230,9 @@ const getActivity = async function () {
data: params
})
if (res.code === 200) {
tableData.value = res.data.list
tableData.value = res.data.list || []
await nextTick()
scrollTableTop()
pagination.value.total = res.data.total
}
}
@ -514,31 +522,42 @@ onMounted(() => {
.condition {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 10px;
}
.condition-item1 {
.condition-item {
display: flex;
align-items: center;
width: 15vw;
margin-right: 10px;
}
.label-text {
white-space: nowrap;
}
.input-width {
width: 160px;
}
.condition-item2 {
.condition-buttons {
display: flex;
align-items: center;
width: 17vw;
gap: 10px;
margin-left: 10px;
}
.add-item {
display: flex;
align-items: center;
width: 17vw;
margin-bottom: 1vh;
/* 去掉固定宽度以适应英文文本 */
}
.edit-item {
display: flex;
align-items: center;
width: 17vw;
margin-bottom: 1vh;
/* 去掉固定宽度以适应英文文本 */
}
</style>

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

@ -573,10 +573,12 @@ const handleDatePickerChange = () => {
}
const handlePageSizeChange = function (val) {
pagination.value.pageSize = val
tableRef.value.setScrollTop(0)
get()
}
const handleCurrentChange = function (val) {
pagination.value.pageNum = val
tableRef.value.setScrollTop(0)
get()
}
const format3 = (num) => {

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

@ -85,7 +85,7 @@
{{ $t('audit.freeGold') }}{{ format3(stats.freeGolds.toFixed(2)) }}{{ $t('common.goldCoin') }}&nbsp;&nbsp;&nbsp;&nbsp;
</div>
<el-table :data="tableData" style="width: 82vw;height:61vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 82vw;height:61vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="$t('audit.id')" width="100px" fixed="left">
<template #default="scope">
@ -263,6 +263,7 @@ const disabledDate = (time) => {
return time.getTime() < limitDate.getTime();
}
const tableData = ref([])
const tableRef = ref(null)
//
const activeTimeRange = ref('')
const total = ref(50)
@ -606,6 +607,7 @@ const handlePagination = (type, val) => {
} else {
getObj.value.pageNum = val
}
tableRef.value.setScrollTop(0)
getRecharge()
getStats()
}

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

@ -84,9 +84,13 @@
{{ $t('audit.taskGold') }}{{ format3(stats.taskGolds.toFixed(2)) }}{{ $t('common.goldCoin') }}
</div>
<el-table :data="tableData" style="height:61vh;width:82vw" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="height:61vh;width:82vw" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column fixed="left" type="index" :label="$t('audit.id')" width="60" />
<el-table-column fixed="left" type="index" :label="$t('audit.id')" width="60">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</el-table-column>
<el-table-column fixed="left" prop="name" :label="$t('audit.name')" width="120" show-overflow-tooltip />
<el-table-column fixed="left" prop="jwcode" :label="$t('audit.jwcode')" width="120" />
<el-table-column prop="market" :label="$t('audit.market')" width="120" />
@ -268,6 +272,7 @@ const pagination = ref({
total: 0
})
const tableData = ref([])
const tableRef = ref(null)
const marketOptions = ref([])
const refundGoodsOptions = ref([])
const adminInfo = ref({})
@ -774,10 +779,12 @@ const rules = reactive({
})
const handlePageSizeChange = function (val) {
pagination.value.pageSize = val
tableRef.value.setScrollTop(0)
get()
}
const handleCurrentChange = function (val) {
pagination.value.pageNum = val
tableRef.value.setScrollTop(0)
get()
}
onMounted(async () => {

13
src/views/channelManage/fans/fans.vue

@ -1,5 +1,5 @@
<script setup>
import { computed, onMounted, ref, watch } from 'vue'
import { computed, onMounted, ref, watch, nextTick } from 'vue'
import { dayjs, ElMessage } from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
@ -42,7 +42,10 @@ const defaultTime = [
const adminData = ref({})
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
// beanConsumeFan
const beanConsumeFan = ref({
jwcode: null,
@ -230,7 +233,9 @@ const ConsumeSelectBy = async function (val) {
console.log('请求成功3', sortField)
console.log('接口响应结果', result);
if (result.code === 200 && result.data && result.data.list) {
tableData.value = result.data.list;
tableData.value = result.data.list || [];
await nextTick()
scrollTableTop()
total.value = result.data.total;
}
@ -568,7 +573,7 @@ const getTagText = (state) => {
{{ t('common.freeGoldBean') }}{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

12
src/views/channelManage/reward/reward.vue

@ -1,5 +1,5 @@
<script setup>
import {computed, onMounted, ref, watch} from 'vue'
import {computed, onMounted, ref, watch, nextTick} from 'vue'
import {dayjs, ElMessage} from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
@ -43,6 +43,10 @@ const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : ''
const adminData = ref({})
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
// beanConsumeLive
const beanConsumeLive = ref({
@ -270,7 +274,9 @@ const selectLiveBy = async function (val) {
console.log('请求成功2', sortField)
console.log('接口响应结果', result); //
if (result.code === 200 && result.data && result.data.list) {
tableData.value = result.data.list;
tableData.value = result.data.list || [];
await nextTick()
scrollTableTop()
total.value = result.data.total;
}
// beanConsumeLive.value payType 1
@ -609,7 +615,7 @@ const getTagText = (state) => {
{{ t('common.freeGoldBean') }}{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

10
src/views/consume/bean/articleVideo.vue

@ -1,5 +1,5 @@
<script setup>
import { computed, onMounted, ref, watch } from 'vue'
import { computed, onMounted, ref, watch, nextTick } from 'vue'
import { dayjs, ElMessage } from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
@ -40,6 +40,10 @@ const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : ''
const adminData = ref({})
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
// articleVideo
const beanConsumeArticle = ref({
@ -219,6 +223,8 @@ const ConsumeSelectBy = async function (val) {
return true;
});
tableData.value = filteredList;
await nextTick()
scrollTableTop()
}
@ -563,7 +569,7 @@ const getTagText = (state) => {
{{ t('common.freeGoldBean') }}{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="61vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 82vw" height="61vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

10
src/views/consume/bean/dieHardFan.vue

@ -1,5 +1,5 @@
<script setup>
import { computed, onMounted, ref, watch } from 'vue'
import { computed, onMounted, ref, watch, nextTick } from 'vue'
import { dayjs, ElMessage } from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
@ -42,6 +42,10 @@ const defaultTime = [
const adminData = ref({})
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
// beanConsumeFan
const beanConsumeFan = ref({
@ -210,6 +214,8 @@ const ConsumeSelectBy = async function (val) {
console.log('接口响应结果', result);
if (result.code === 200 && result.data && result.data.list) {
tableData.value = result.data.list;
await nextTick()
scrollTableTop()
total.value = result.data.total;
}
@ -547,7 +553,7 @@ const getTagText = (state) => {
{{ t('common.freeGoldBean') }}{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

10
src/views/consume/bean/liveStream.vue

@ -1,5 +1,5 @@
<script setup>
import {computed, onMounted, ref, watch} from 'vue'
import {computed, onMounted, ref, watch, nextTick} from 'vue'
import {dayjs, ElMessage} from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
@ -44,6 +44,10 @@ const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : ''
const adminData = ref({})
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
// beanConsumeLive
const beanConsumeLive = ref({
@ -251,6 +255,8 @@ const selectLiveBy = async function (val) {
console.log('接口响应结果', result); //
if (result.code === 200 && result.data && result.data.list) {
tableData.value = result.data.list;
await nextTick()
scrollTableTop()
total.value = result.data.total;
}
// beanConsumeLive.value payType 1
@ -588,7 +594,7 @@ const getTagText = (state) => {
{{ t('common.freeGoldBean') }}{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

10
src/views/consume/gold/coinConsumeDetail.vue

@ -1,5 +1,5 @@
<script setup>
import { computed, onMounted, ref, watch } from 'vue'
import { computed, onMounted, ref, watch, nextTick } from 'vue'
import { dayjs, ElMessage } from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
@ -58,6 +58,10 @@ const defaultTime = [
const adminData = ref({})
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
// consumeUser
const consumeUser = ref({
@ -271,6 +275,8 @@ const ConsumeSelectBy = async function (val) {
//
tableData.value = result.data.list
await nextTick()
scrollTableTop()
tableDataTotal.value = resultTotalGold.data
if (resultTotalGold.data == null) {
console.log('请求成功2', resultTotalGold)
@ -659,7 +665,7 @@ const getMarket = async function () {
{{ $t('common.taskGold') }}{{ format3(Math.abs(taskGolds)) }}
</div>
<div style="height: 65vh;">
<el-table :data="tableData" style="height: 65vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="height: 65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="$t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

12
src/views/language/languageTranslate.vue

@ -23,7 +23,7 @@
</div>
<div>
<el-table :data="tableData" style="width: 82vw;height:72vh;" :row-style="{ height: '50px' }">
<el-table ref="tableRef" :data="tableData" style="width: 82vw;height:72vh;" :row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">
<span>{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}</span>
@ -213,7 +213,7 @@
<script setup>
import { ElMessage, ElMessageBox } from 'element-plus';
import { onMounted, ref, computed } from 'vue'
import { onMounted, ref, computed, nextTick } from 'vue'
import request from "@/util/http.js"
import moment from 'moment'
import { UploadFilled } from '@element-plus/icons-vue'
@ -229,6 +229,10 @@ const { t } = useI18n()
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const pagination = ref({
pageNum: 1,
pageSize: 20,
@ -302,7 +306,9 @@ const getTranslationList = async () => {
if (res.code === 200) {
//
tableData.value = res.data.list
tableData.value = res.data.list || []
await nextTick()
scrollTableTop()
pagination.value.total = res.data.total
}
} catch (error) {

12
src/views/moneyManage/executor/executor.vue

@ -53,7 +53,7 @@
</el-card>
<el-card style="background-color: rgb(231,244,253);height:80vh;">
<el-table :data="tableData" style="height:70vh;width:82vw;">
<el-table ref="tableRef" :data="tableData" style="height:70vh;width:82vw;">
<el-table-column type="index" :label="t('common_list.id')" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
@ -111,7 +111,7 @@
</div>
</template>
</el-table-column>
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="120">
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="130">
<template #default="scope">
{{ scope.row.status === 41 ? t('common_list.refundSuccess') : t('common_list.pending') }}
</template>
@ -261,7 +261,7 @@
</el-dialog>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { ref, onMounted, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js'
import dayjs from 'dayjs'
@ -281,6 +281,10 @@ const { t } = useI18n()
const uploadUrl = 'https://api.homilychart.com/hljw/api/aws/upload'
const dateRange = ref([])
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const editRow = ref({})//
const statusList = ref([t('cash.pending'), t('cash.refundSuccess')])
const pagination = ref({
@ -355,6 +359,8 @@ const getRefund = async function () {
})
tableData.value = result.data.list || []
await nextTick()
scrollTableTop()
pagination.value.total = result.data.total || 0
} catch (error) {
ElMessage.error(error.message || t('elmessage.searchFailed'))

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

@ -1,5 +1,5 @@
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ref, reactive, onMounted, nextTick } from 'vue'
import { useRoute } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'
import request from '@/util/http.js'
@ -18,19 +18,19 @@ const { t } = useI18n()
const route = useRoute()
const paytypeList = [
t('cash.payMethods.stripe'),
t('cash.payMethods.paymentAsia'),
t('cash.payMethods.ipay88'),
t('cash.payMethods.bankTransfer'),
t('cash.payMethods.card'),
t('cash.payMethods.cash'),
t('cash.payMethods.check'),
t('cash.payMethods.grabpay'),
t('cash.payMethods.nets'),
t('cash.payMethods.transfer'),
t('cash.payMethods.paypal'),
t('cash.payMethods.stripe2'),
t('cash.payMethods.paysolution'),
t('cash.payMethods.stripe'), // Stripe
t('cash.payMethods.paymentAsia'), // PaymentAsia
t('cash.payMethods.stripe2'), // Stripe2
t('cash.payMethods.ipay88'), // Ipay88
t('cash.payMethods.grabpay'), // Grabpay
t('cash.payMethods.nets'), // Nets
t('cash.payMethods.transfer'), // E-Transfer
t('cash.payMethods.paypal'), // PayPal
t('cash.payMethods.paysolution'), // Paysolution
t('cash.payMethods.bankTransfer'),//
t('cash.payMethods.card'), //
t('cash.payMethods.cash'), //
t('cash.payMethods.check'), //
]
const payPlatformOptions = ref([...paytypeList])
@ -57,6 +57,10 @@ const queryParams = reactive({
const total = ref(0)
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const loading = ref(false)
// coinConsumeDetail.vue
@ -108,13 +112,13 @@ const fetchData = async () => {
pageSize: queryParams.pageSize,
fundsDTO: {
jwcode: queryParams.jwcode,
localMarket:queryParams.markets,
localMarket: queryParams.markets,
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') : '',
payType: normalizePayType(queryParams.payType || ''),
orderCode: queryParams.orderCode,
statuses: formatStatuses(queryParams.statuses),
markets:[],
markets: [],
}
}
@ -124,6 +128,8 @@ const fetchData = async () => {
const res = await Moneyfunds(params)
if (res.code == 200) {
tableData.value = res.data.list || []
await nextTick()
scrollTableTop()
total.value = res.data.total || 0
loading.value = false
} else {
@ -192,10 +198,10 @@ const refundFormData = ref({})
const resetRefund = () => {
refundFormData.value.refundModel = ''
refundFormData.value.refundReason = ''
refundFormData.value.permanentGold = null
refundFormData.value.freeGold = null
refundFormData.value.refundModel = ''
refundFormData.value.refundReason = ''
refundFormData.value.permanentGold = null
refundFormData.value.freeGold = null
}
const handleRefund = async () => {
@ -244,35 +250,35 @@ const exportListLoading = ref(false)
const handleExport = async () => {
const formatStatuses = (statuses) => {
// 1/
if (!Array.isArray(statuses)) {
return [];
}
// 2 null undefined
if (statuses.some(item => item === null || item === undefined)) {
return [];
}
// 3
return statuses;
};
// 1/
if (!Array.isArray(statuses)) {
return [];
}
// 2 null undefined
if (statuses.some(item => item === null || item === undefined)) {
return [];
}
// 3
return statuses;
};
try {
const params = {
const params = {
pageNum: queryParams.pageNum,
pageSize: queryParams.pageSize,
fundsDTO: {
jwcode: queryParams.jwcode,
localMarket:queryParams.markets,
localMarket: queryParams.markets,
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') : '',
payType: normalizePayType(queryParams.payType || ''),
orderCode: queryParams.orderCode,
statuses: formatStatuses(queryParams.statuses),
markets:[],
markets: [],
}
}
// TODO: URL
const res = await exportFunds( params )
const res = await exportFunds(params)
if (res.code == 200) {
console.log('导出参数', params)
@ -402,16 +408,9 @@ onMounted(async () => {
<div class="search-item">
<span class="label">{{ t('common.market') }}</span>
<!-- 下拉多选使用 el-cascader 匹配地区树结构 -->
<el-cascader
v-model="queryParams.markets"
:options="marketOptions"
:props="{ multiple: true, emitPath: false }"
collapse-tags
collapse-tags-tooltip
:placeholder="t('common.marketPlaceholder')"
clearable
style="width: 220px;"
/>
<el-cascader v-model="queryParams.markets" :options="marketOptions"
:props="{ multiple: true, emitPath: false }" collapse-tags collapse-tags-tooltip
:placeholder="t('common.marketPlaceholder')" clearable style="width: 220px;" />
</div>
<div class="search-item">
<span class="label">{{ t('common.payPlatform1') }}</span>
@ -425,22 +424,16 @@ onMounted(async () => {
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<div class="search-item">
<span class="label">{{ t('common.orderNo') }}</span>
<el-input v-model="queryParams.orderCode" :placeholder="t('common.orderNoPlaceholder')" clearable />
</div>
<div class="search-item">
<span class="label">{{ t('common.orderNo') }}</span>
<el-input v-model="queryParams.orderCode" :placeholder="t('common.orderNoPlaceholder')" clearable />
</div>
<div class="search-item" style="width: auto;">
<div class="search-item" style="width: auto;">
<span class="label">{{ t('common.payTime2') }}</span>
<el-date-picker
v-model="queryParams.timeRange"
type="datetimerange"
:range-separator="t('common.to')"
:start-placeholder="t('common.startTime')"
:end-placeholder="t('common.endTime')"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
style="width: 350px;"
/>
<el-date-picker v-model="queryParams.timeRange" type="datetimerange" :range-separator="t('common.to')"
:start-placeholder="t('common.startTime')" :end-placeholder="t('common.endTime')"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]" style="width: 350px;" />
</div>
<div class="search-btn-group">
<el-button type="primary" @click="handleSearch">{{ t('common.search') }}</el-button>
@ -455,8 +448,14 @@ onMounted(async () => {
<!-- 表格区域 -->
<el-card class="table-card">
<el-table :data="tableData" v-loading="loading" style="width: 100%; flex: 1;" :cell-style="{ textAlign: 'center' }" :header-cell-style="{ background: '#F3FAFE', color: '#333',textAlign: 'center' }">
<el-table-column type="index" :label="t('common_list.id')" width="60" align="center" fixed="left" />
<el-table ref="tableRef" :data="tableData" v-loading="loading" style="width: 100%; flex: 1;"
:cell-style="{ textAlign: 'center' }"
:header-cell-style="{ background: '#F3FAFE', color: '#333', textAlign: 'center' }">
<el-table-column type="index" :label="t('common_list.id')" width="60" align="center" fixed="left">
<template #default="scope">
<span>{{ scope.$index + 1 + (queryParams.pageNum - 1) * queryParams.pageSize }}</span>
</template>
</el-table-column>
<el-table-column prop="jwcode" :label="t('common_list.jwcode')" width="120" fixed="left" />
<el-table-column prop="name" :label="t('common_list.name')" width="150" show-overflow-tooltip />
<el-table-column prop="marketName" :label="t('common_list.market')" width="120" show-overflow-tooltip />
@ -467,14 +466,16 @@ onMounted(async () => {
{{ row.paymentAmount }} {{ row.paymentCurrency }}
</template> -->
</el-table-column>
<el-table-column prop="paymentCurrencyName" :label="t('common_list.payCurrency')" width="120" show-overflow-tooltip />
<el-table-column prop="paymentCurrencyName" :label="t('common_list.payCurrency')" width="120"
show-overflow-tooltip />
<el-table-column prop="receivedAmount" :label="t('common_list.receiveAmount')" width="150" align="right">
<!-- <template #default="{ row }">
{{ row.receivedAmount }} {{ row.receivedCurrency }}
</template> -->
</el-table-column>
<el-table-column prop="receivedCurrencyName" :label="t('common_list.receiveCurrency')" width="120" show-overflow-tooltip />
<el-table-column prop="receivedCurrencyName" :label="t('common_list.receiveCurrency')" width="120"
show-overflow-tooltip />
<el-table-column prop="handlingCharge" :label="t('common_list.fee')" width="100" align="right" />
<el-table-column prop="payType" :label="t('common_list.payModel')" width="120" align="center" />
@ -483,36 +484,28 @@ onMounted(async () => {
<el-table-column prop="status" :label="t('common_list.status')" width="120" align="center" fixed="right">
<template #default="{ row }">
<div style="display: flex; align-items: center;">
<el-tag :type="row.status === 4 ? 'success' : 'warning'" effect="plain">
{{ row.status === 4 ? t('common_list.received') : t('common_list.refunded') }}
</el-tag>
<el-popover
trigger="hover"
placement="top"
popper-class="refund-popover"
width="auto"
v-if="row.status === 6"
>
<div class="popover-content">
<div class="popover-title">{{ t('common_list.refundDetail') }}</div>
<div class="popover-item">
<span class="label">{{ t('common_list.refundAmount') }}</span>
<span class="value">{{ row.refundAmount || '-' }}</span>
<el-tag :type="row.status === 4 ? 'success' : 'warning'" effect="plain">
{{ row.status === 4 ? t('common_list.received') : t('common_list.refunded') }}
</el-tag>
<el-popover trigger="hover" placement="top" popper-class="refund-popover" width="auto"
v-if="row.status === 6">
<div class="popover-content">
<div class="popover-title">{{ t('common_list.refundDetail') }}</div>
<div class="popover-item">
<span class="label">{{ t('common_list.refundAmount') }}</span>
<span class="value">{{ row.refundAmount || '-' }}</span>
</div>
<div class="popover-item">
<span class="label">{{ t('common_list.refundCurrency') }}</span>
<span class="value">{{ row.refundCurrency || '-' }}</span>
</div>
</div>
<div class="popover-item">
<span class="label">{{ t('common_list.refundCurrency') }}</span>
<span class="value">{{ row.refundCurrency || '-' }}</span>
</div>
</div>
<template #reference>
<img
@click.stop
src="@/assets/SvgIcons/consume.svg"
style="width: 15px; height: 15px; margin-left: 5px; cursor: pointer; display: inline-block;"
>
</template>
</el-popover>
</div>
<template #reference>
<img @click.stop src="@/assets/SvgIcons/consume.svg"
style="width: 15px; height: 15px; margin-left: 5px; cursor: pointer; display: inline-block;">
</template>
</el-popover>
</div>
</template>
</el-table-column>
@ -700,6 +693,7 @@ onMounted(async () => {
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
width: 100px;
min-width: none;
.el-popper__arrow::before {
background-color: #EEF5FE !important;
border-color: #EEF5FE !important;
@ -707,14 +701,14 @@ onMounted(async () => {
}
</style>
<style scoped lang="scss">
.popover-content {
.popover-content {
.popover-title {
color: #409EFF;
font-weight: bold;
font-size: 14px;
margin-bottom: 8px;
}
.popover-item {
display: flex;
font-size: 13px;
@ -724,15 +718,18 @@ onMounted(async () => {
&:last-child {
margin-bottom: 0;
}
.label {
color: #606266;
}
.value {
color: #606266;
margin-left: 4px;
}
}
}
.cash-flow-container {
display: flex;
flex-direction: column;

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

@ -1,5 +1,5 @@
<script setup>
import { ref, reactive, onMounted, toRefs } from 'vue'
import { ref, reactive, onMounted, toRefs, nextTick } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import request from '@/util/http.js'
import dayjs from 'dayjs'
@ -49,6 +49,10 @@ const queryParams = reactive({
const total = ref(0)
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const loading = ref(false)
// coinConsumeDetail.vue
@ -101,6 +105,8 @@ const fetchData = async () => {
const res = await performanceSelect(params)
if (res.code == 200) {
tableData.value = res.data.list || []
await nextTick()
scrollTableTop()
total.value = res.data.total || 0
loading.value = false
} else {
@ -312,8 +318,12 @@ onMounted( async() => {
<!-- 表格区域 -->
<el-card class="table-card">
<el-table :data="tableData" v-loading="loading" style="width: 100%; flex: 1;" :cell-style="{ textAlign: 'center' }" :header-cell-style="{ background: '#F3FAFE', color: '#333',textAlign: 'center' }">
<el-table-column type="index" :label="t('common_list.id')" min-width="60" align="center" fixed="left" />
<el-table ref="tableRef" :data="tableData" v-loading="loading" style="width: 100%; flex: 1;" :cell-style="{ textAlign: 'center' }" :header-cell-style="{ background: '#F3FAFE', color: '#333',textAlign: 'center' }">
<el-table-column type="index" :label="t('common_list.id')" min-width="60" align="center" fixed="left" >
<template #default="scope">
<span>{{ scope.$index + 1 + (queryParams.pageNum - 1) * queryParams.pageSize }}</span>
</template>
</el-table-column>
<el-table-column prop="jwcode" :label="t('common_list.jwcode')" min-width="120" fixed="left" />
<el-table-column prop="name" :label="t('common_list.name')" min-width="150" show-overflow-tooltip />
<el-table-column prop="marketName" :label="t('common_list.market')" min-width="120" show-overflow-tooltip />

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

@ -112,7 +112,7 @@
</div>
<div class="table">
<el-table :data="tableData" style="width: 80vw;height:64vh;" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 80vw;height:64vh;" @sort-change="handleSortChange"
:row-style="{ height: '60px' }" :header-cell-style="{ textAlign: 'center' }"
:cell-style="{ textAlign: 'center' }">
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left">
@ -122,7 +122,7 @@
</el-table-column>
<el-table-column fixed="left" prop="jwcode" label="Homily ID" width="110px" />
<el-table-column fixed="left" prop="name" :label="t('common_list.name')" width="110px" />
<el-table-column prop="marketName" :label="t('common_list.market')" width="80px" />
<el-table-column prop="marketName" :label="t('common_list.market')" width="110px" />
<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="120px" />
@ -376,7 +376,7 @@
<template #footer>
<span class="dialog-footer" v-if="!ifReject">
<el-button style="background-color: #7E91FF;" @click="ifReject = true">{{ t('common.reject')
}}</el-button>
}}</el-button>
<el-button :style="{
backgroundColor: isBtnDisabled ? '#E5E5E5FF' : '#2741DEFF',
marginLeft: '60px',
@ -385,7 +385,7 @@
</span>
<span class="dialog-footer" v-if="ifReject">
<el-button style="background-color: #7E91FF;" @click="closeAuditForm">{{ t('common.cancel')
}}</el-button>
}}</el-button>
<el-button style="background-color: #2741DE; margin-left: 2.5vw;" type="primary"
@click="throttledhandelAuditReject">{{ t('common.confirm') }}</el-button>
</span>
@ -553,7 +553,7 @@
<div v-show="isRefundGold" style="display: flex; margin-bottom: 10px;">
<div style=" display: flex; align-items: center;justify-content: center; ">
<span style="color: #999999; white-space: nowrap;">{{ t('common_add.permanentGold')
}}</span>
}}</span>
<el-input style="padding-right: 10px; height: 30px; width: 70px;"
v-model="refundFormData.permanentGold" disabled />
</div>
@ -612,7 +612,7 @@
<div v-show="refundFormData.refundModel == '1'" style="display: flex; margin-bottom: 10px;">
<div style=" display: flex; align-items: center;justify-content: center; ">
<span style="color: #999999; white-space: nowrap;">{{ t('common_add.permanentGold')
}}</span>
}}</span>
<el-input style="padding-right: 10px; height: 30px; width: 70px;"
v-model="refundFormData.partRefundGold" dsabled />
</div>
@ -640,7 +640,7 @@
<script setup>
//
import { ref, watch, onMounted } from 'vue';
import { ref, watch, onMounted, nextTick } from 'vue';
import { storeToRefs } from 'pinia';
import { ElMessage, ElMessageBox } from 'element-plus';
import API from '@/util/http.js';
@ -679,6 +679,10 @@ const superAdmin = ref(false);
const tableData = ref([]);
const total = ref(0);
const pageInfo = ref({ pageSize: 10, pageNum: 1 });
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
//
const market = ref([])
@ -768,19 +772,19 @@ const customOptions = ref([
t('cash.currency.rmb'), // (CNY)
])
const paytypeList = [
t('cash.payMethods.stripe'),
t('cash.payMethods.paymentAsia'),
t('cash.payMethods.ipay88'),
t('cash.payMethods.bankTransfer'),
t('cash.payMethods.card'),
t('cash.payMethods.cash'),
t('cash.payMethods.check'),
t('cash.payMethods.grabpay'),
t('cash.payMethods.nets'),
t('cash.payMethods.transfer'),
t('cash.payMethods.paypal'),
t('cash.payMethods.stripe2'),
t('cash.payMethods.paysolution'),
t('cash.payMethods.stripe'), // Stripe
t('cash.payMethods.paymentAsia'), // PaymentAsia
t('cash.payMethods.stripe2'), // Stripe2
t('cash.payMethods.ipay88'), // Ipay88
t('cash.payMethods.grabpay'), // Grabpay
t('cash.payMethods.nets'), // Nets
t('cash.payMethods.transfer'), // E-Transfer
t('cash.payMethods.paypal'), // PayPal
t('cash.payMethods.paysolution'), // Paysolution
t('cash.payMethods.bankTransfer'),//
t('cash.payMethods.card'), //
t('cash.payMethods.cash'), //
t('cash.payMethods.check'), //
];
const paytypeOptions = ref([...paytypeList]);
@ -1000,6 +1004,8 @@ const getlist = async () => {
if (result.code === 200) {
tableData.value = result.data.list;
await nextTick()
scrollTableTop()
total.value = result.data.total;
} else {
ElMessage.error(t('elmessage.orderDataLoadFailed'));
@ -1214,7 +1220,7 @@ const openEditForm = (row) => {
...row,
paymentCurrencyOrig: row.paymentCurrency,
paymentAmountOrig: row.paymentAmount,
};
};
//
if (row.goodsName === t('cash.coinRecharge')) isEditGold.value = true;
else isEditGold.value = false;

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

@ -102,7 +102,7 @@
</div>
<div class="table">
<el-table :data="tableData" style="width: 80vw;height:64vh;" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 80vw;height:64vh;" @sort-change="handleSortChange"
:row-style="{ height: '60px' }" :header-cell-style="{ textAlign: 'center' }"
:cell-style="{ textAlign: 'center' }">
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left">
@ -521,7 +521,7 @@
<script setup>
//
import { ref, watch, onMounted } from 'vue';
import { ref, watch, onMounted, nextTick } from 'vue';
import { storeToRefs } from 'pinia';
import { ElMessage, ElMessageBox } from 'element-plus';
import API from '@/util/http.js';
@ -557,6 +557,10 @@ const { menuTree } = storeToRefs(adminStore);
const tableData = ref([]);
const total = ref(0);
const pageInfo = ref({ pageSize: 10, pageNum: 1 });
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
//
const searchData = ref({});
@ -861,6 +865,8 @@ const getlist = async () => {
if (result.code === 200) {
tableData.value = result.data.list;
await nextTick()
scrollTableTop()
total.value = result.data.total;
} else {
ElMessage.error(t('elmessage.orderDataLoadFailed'));

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

@ -112,7 +112,7 @@
</div>
<div class="table">
<el-table :data="tableData" style="width: 80vw;height:64vh;" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 80vw;height:64vh;" @sort-change="handleSortChange"
:row-style="{ height: '60px' }" :header-cell-style="{ textAlign: 'center' }"
:cell-style="{ textAlign: 'center' }">
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left">
@ -122,7 +122,7 @@
</el-table-column>
<el-table-column fixed="left" prop="jwcode" label="Homily ID" width="110px" />
<el-table-column fixed="left" prop="name" :label="t('common_list.name')" width="110px" />
<el-table-column prop="marketName" :label="t('common_list.market')" width="80px" />
<el-table-column prop="marketName" :label="t('common_list.market')" width="110px" />
<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="120px" />
@ -376,7 +376,7 @@
<template #footer>
<span class="dialog-footer" v-if="!ifReject">
<el-button style="background-color: #7E91FF;" @click="ifReject = true">{{ t('common.reject')
}}</el-button>
}}</el-button>
<el-button :style="{
backgroundColor: isBtnDisabled ? '#E5E5E5FF' : '#2741DEFF',
marginLeft: '60px',
@ -385,7 +385,7 @@
</span>
<span class="dialog-footer" v-if="ifReject">
<el-button style="background-color: #7E91FF;" @click="closeAuditForm">{{ t('common.cancel')
}}</el-button>
}}</el-button>
<el-button style="background-color: #2741DE; margin-left: 2.5vw;" type="primary"
@click="throttledhandelAuditReject">{{ t('common.confirm') }}</el-button>
</span>
@ -553,7 +553,7 @@
<div v-show="isRefundGold" style="display: flex; margin-bottom: 10px;">
<div style=" display: flex; align-items: center;justify-content: center; ">
<span style="color: #999999; white-space: nowrap;">{{ t('common_add.permanentGold')
}}</span>
}}</span>
<el-input style="padding-right: 10px; height: 30px; width: 70px;"
v-model="refundFormData.permanentGold" disabled />
</div>
@ -612,7 +612,7 @@
<div v-show="refundFormData.refundModel == '1'" style="display: flex; margin-bottom: 10px;">
<div style=" display: flex; align-items: center;justify-content: center; ">
<span style="color: #999999; white-space: nowrap;">{{ t('common_add.permanentGold')
}}</span>
}}</span>
<el-input style="padding-right: 10px; height: 30px; width: 70px;"
v-model="refundFormData.partRefundGold" dsabled />
</div>
@ -640,7 +640,7 @@
<script setup>
//
import { ref, watch, onMounted } from 'vue';
import { ref, watch, onMounted, nextTick } from 'vue';
import { storeToRefs } from 'pinia';
import { ElMessage, ElMessageBox } from 'element-plus';
import API from '@/util/http.js';
@ -679,6 +679,10 @@ const superAdmin = ref(false);
const tableData = ref([]);
const total = ref(0);
const pageInfo = ref({ pageSize: 10, pageNum: 1 });
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
//
const market = ref([])
@ -768,19 +772,19 @@ const customOptions = ref([
t('cash.currency.rmb'), // (CNY)
])
const paytypeList = [
t('cash.payMethods.stripe'),
t('cash.payMethods.paymentAsia'),
t('cash.payMethods.ipay88'),
t('cash.payMethods.bankTransfer'),
t('cash.payMethods.card'),
t('cash.payMethods.cash'),
t('cash.payMethods.check'),
t('cash.payMethods.grabpay'),
t('cash.payMethods.nets'),
t('cash.payMethods.transfer'),
t('cash.payMethods.paypal'),
t('cash.payMethods.stripe2'),
t('cash.payMethods.paysolution'),
t('cash.payMethods.stripe'), // Stripe
t('cash.payMethods.paymentAsia'), // PaymentAsia
t('cash.payMethods.stripe2'), // Stripe2
t('cash.payMethods.ipay88'), // Ipay88
t('cash.payMethods.grabpay'), // Grabpay
t('cash.payMethods.nets'), // Nets
t('cash.payMethods.transfer'), // E-Transfer
t('cash.payMethods.paypal'), // PayPal
t('cash.payMethods.paysolution'), // Paysolution
t('cash.payMethods.bankTransfer'),//
t('cash.payMethods.card'), //
t('cash.payMethods.cash'), //
t('cash.payMethods.check'), //
];
const paytypeOptions = ref([...paytypeList]);
@ -1000,6 +1004,8 @@ const getlist = async () => {
if (result.code === 200) {
tableData.value = result.data.list;
await nextTick()
scrollTableTop()
total.value = result.data.total;
} else {
ElMessage.error(t('elmessage.orderDataLoadFailed'));
@ -1214,7 +1220,7 @@ const openEditForm = (row) => {
...row,
paymentCurrencyOrig: row.paymentCurrency,
paymentAmountOrig: row.paymentAmount,
};
};
//
if (row.goodsName === t('cash.coinRecharge')) isEditGold.value = true;
else isEditGold.value = false;

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

@ -80,7 +80,7 @@
</div>
<div class="table">
<el-table :data="tableData" style="width: 80vw;height:64vh;" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 80vw;height:64vh;" @sort-change="handleSortChange"
:row-style="{ height: '60px' }" :header-cell-style="{ textAlign: 'center' }"
:cell-style="{ textAlign: 'center' }">
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left">
@ -213,12 +213,12 @@
</el-form-item>
<el-form-item :label="t('common_add.activity')" required prop="activity">
<el-select v-model="addFormData.activity" :placeholder="t('common_add.activityPlaceholder')"
clearable>
filterable clearable>
<el-option v-for="item in activityList" :key="item.id" :label="item.activityName"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="t('common_add.productName')" required @change="ifGold" prop="goodsName">
<el-form-item :label="t('common_add.productName')" required prop="goodsName">
<ProductSelect ref="productSelectRef" v-model="addFormData.goodsName"></ProductSelect>
</el-form-item>
<el-form-item v-show="!isGold" :label="t('common_add.productNum')" required>
@ -430,7 +430,7 @@
</template>
<script setup>
import { ref, watch, onMounted, computed } from 'vue';
import { ref, watch, onMounted, computed, nextTick } from 'vue';
import { storeToRefs } from 'pinia';
import { ElMessage, ElMessageBox } from 'element-plus'
import API from '@/util/http.js'
@ -457,6 +457,10 @@ const adminStore = useAdminStore();
const { menuTree } = storeToRefs(adminStore);
const adminData = ref({}) //
const tableData = ref([]) //
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const total = ref(0) //
const pageInfo = ref({ pageSize: 10, pageNum: 1 }) //
const numUnitList = ref([t('cash.year'), t('cash.month')])
@ -579,6 +583,8 @@ const getlist = async () => {
})
if (result.code == 200) {
tableData.value = result.data.list
await nextTick()
scrollTableTop()
total.value = result.data.total
} else {
ElMessage.error(t('elmessage.dataException'))
@ -615,6 +621,7 @@ const ifGold = () => {
addFormData.value.goodNum = 0
} else {
isGold.value = false
console.log('12312312',addFormData.value.goodsName);
numUnitList.value = [t('cash.unit'), t('cash.year'), t('cash.month')]
const selectItems = ref([
t('cash.aiService.aiTracking'),
@ -627,7 +634,27 @@ const ifGold = () => {
t('cash.aiService.superPulse'),
t('cash.aiService.superCompass'),
t('cash.aiService.aiDetectionTool'),
t('cash.aiService.superDetectionTool')
t('cash.aiService.superDetectionTool'),
t('cash.aiService.HCInfoFeeDelayUS'),
t('cash.aiService.HCInfoFeeDelayHK'),
t('cash.aiService.HCInfoFeeDelayAStock'),
t('cash.aiService.HCInfoFeeDelaySingaporeStock'),
t('cash.aiService.HCInfoFeeDelayJapanStock'),
t('cash.aiService.HCInfoFeeDelayThailandStock'),
t('cash.aiService.HCInfoFeeDelayIndonesiaStock'),
t('cash.aiService.HCInfoFeeDelayVietnamStock'),
t('cash.aiService.HCInfoFeeDelayKoreaStock'),
t('cash.aiService.HCInfoFeeDelayTaiwanStock'),
t('cash.aiService.HCInfoFeeRealTimeUS'),
t('cash.aiService.HCInfoFeeRealTimeHK'),
t('cash.aiService.HCInfoFeeRealTimeAStock'),
t('cash.aiService.HCInfoFeeRealTimeSingaporeStock'),
t('cash.aiService.HCInfoFeeRealTimeJapanStock'),
t('cash.aiService.HCInfoFeeRealTimeThailandStock'),
t('cash.aiService.HCInfoFeeRealTimeIndonesiaStock'),
t('cash.aiService.HCInfoFeeRealTimeVietnamStock'),
t('cash.aiService.HCInfoFeeRealTimeKoreaStock'),
t('cash.aiService.HCInfoFeeRealTimeTaiwanStock'),
])
if (selectItems.value.includes(addFormData.value.goodsName)) {
if (addOrEdit.value == 1) {
@ -644,6 +671,10 @@ const ifGold = () => {
}
}
watch(() => addFormData.value.goodsName, () => {
ifGold()
})
//
const isGroup = ref(false)
const ifGroup = () => {
@ -922,17 +953,17 @@ const customOptions = ref([
const paytypeOptions = ref([
t('cash.payMethods.stripe'), // Stripe
t('cash.payMethods.paymentAsia'), // PaymentAsia
t('cash.payMethods.stripe2'), // Stripe2
t('cash.payMethods.ipay88'), // Ipay88
t('cash.payMethods.grabpay'), // Grabpay
t('cash.payMethods.nets'), // Nets
t('cash.payMethods.transfer'), // E-Transfer
t('cash.payMethods.paypal'), // PayPal
t('cash.payMethods.paysolution'), // Paysolution
t('cash.payMethods.bankTransfer'),//
t('cash.payMethods.card'), //
t('cash.payMethods.cash'), //
t('cash.payMethods.check'), //
t('cash.payMethods.paysolution'), // Paysolution
t('cash.payMethods.stripe2'), // Stripe2
])
const MoneyAddressOptions = ref([
t('cash.markets.Malaysia'), // 西
@ -1192,17 +1223,17 @@ const getAdminData = async () => {
const paytypeList = ref([
t('cash.payMethods.stripe'), // Stripe
t('cash.payMethods.paymentAsia'), // PaymentAsia
t('cash.payMethods.stripe2'), // Stripe2
t('cash.payMethods.ipay88'), // Ipay88
t('cash.payMethods.bankTransfer'),//
t('cash.payMethods.card'), //
t('cash.payMethods.cash'), //
t('cash.payMethods.check'), //
t('cash.payMethods.grabpay'), // Grabpay
t('cash.payMethods.nets'), // Nets
t('cash.payMethods.transfer'), // E-Transfer
t('cash.payMethods.paypal'), // PayPal
t('cash.payMethods.stripe2'), // Stripe2
t('cash.payMethods.paypal'), // PayPal
t('cash.payMethods.paysolution'), // Paysolution
t('cash.payMethods.bankTransfer'),//
t('cash.payMethods.card'), //
t('cash.payMethods.cash'), //
t('cash.payMethods.check'), //
])
const getMarket = async function () {
try {

2
src/views/moneyManage/receiveDetail/utils/staticData.js

@ -164,7 +164,7 @@ export const productList = [
"label": t('cash.aiService.superHunting')
},
{
"value": "超级机构脉",
"value": "超级机构脉",
"label": t('cash.aiService.superPulse')
},
{

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

@ -44,7 +44,7 @@
</el-card>
<el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);">
<el-table :data="tableData" style="height:73vh;width:82vw">
<el-table ref="tableRef" :data="tableData" style="height:73vh;width:82vw">
<el-table-column type="index" :label="t('common_list.id')" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
@ -72,7 +72,7 @@
<el-table-column prop="refundReason" :label="t('common_list.refundReason')" width="120"
show-overflow-tooltip />
<el-table-column prop="remark" :label="t('common_list.remark')" width="150" show-overflow-tooltip />
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="120">
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="130">
<template #default="scope">
{{
[20].includes(scope.row.status) ? t('cash.statusList.pending') :
@ -352,7 +352,7 @@
</el-dialog>
</template>
<script setup>
import { ref, onMounted, computed } from 'vue'
import { ref, onMounted, computed, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js'
const uploadUrl = 'https://api.homilychart.com/hljw/api/aws/upload'
@ -394,6 +394,10 @@ const pagination = ref({
const market = ref([])
const showAudit2 = ref(false)
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const showSteps = ref(false)
const submitter = ref('')//
const areaFinance = ref('')//
@ -513,6 +517,8 @@ const getRefund = async function () {
})
tableData.value = result.data.list || []
await nextTick()
scrollTableTop()
pagination.value.total = result.data.total || 0
} catch (error) {
ElMessage.error(error.message || t('elmessage.searchFailed'))

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

@ -41,7 +41,7 @@
</el-card>
<el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);">
<el-table :data="tableData" style="height:73vh;width:82vw">
<el-table ref="tableRef" :data="tableData" style="height:73vh;width:82vw">
<el-table-column type="index" :label="t('common_list.id')" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
@ -66,7 +66,7 @@
<el-table-column prop="submitter" :label="t('common_list.submitter')" width="120" />
<el-table-column prop="refundReason" :label="t('common_list.refundReason')" width="120" show-overflow-tooltip />
<el-table-column prop="remark" :label="t('common_list.remark')" width="150" show-overflow-tooltip />
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="120">
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="130">
<template #default="scope">
{{
[10].includes(scope.row.status) ? t('cash.statusList.pending') :
@ -330,7 +330,7 @@
</el-dialog>
</template>
<script setup>
import { ref, onMounted, computed } from 'vue'
import { ref, onMounted, computed, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js'
const uploadUrl = 'https://api.homilychart.com/hljw/api/aws/upload'
@ -372,6 +372,10 @@ const pagination = ref({
})
const market = ref([])
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const showAudit = ref(false)
const auditRow = ref({})//
const showSteps = ref(false)
@ -487,6 +491,8 @@ const getRefund = async function () {
})
tableData.value = result.data.list || []
await nextTick()
scrollTableTop()
pagination.value.total = result.data.total || 0
} catch (error) {
ElMessage.error(error.message || t('elmessage.searchFailed'))

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

@ -41,7 +41,7 @@
</el-card>
<el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);">
<el-table :data="tableData" style="height:73vh;width:82vw">
<el-table ref="tableRef" :data="tableData" style="height:73vh;width:82vw">
<el-table-column type="index" :label="t('common_list.id')" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
@ -66,7 +66,7 @@
<el-table-column prop="submitter" :label="t('common_list.submitter')" width="120" />
<el-table-column prop="refundReason" :label="t('common_list.refundReason')" width="120" show-overflow-tooltip />
<el-table-column prop="remark" :label="t('common_list.remark')" width="150" show-overflow-tooltip />
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="120">
<el-table-column prop="status" :label="t('common_list.orderStatus')" width="130">
<template #default="scope">
{{
[30].includes(scope.row.status) ? t('cash.statusList.pending') :
@ -341,7 +341,7 @@
</template>
<script setup>
import BackgroundSvg from '@/assets/images/refund-progress.png'
import { ref, onMounted } from 'vue'
import { ref, onMounted, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js'
const uploadUrl = 'https://api.homilychart.com/hljw/api/aws/upload'
@ -388,6 +388,10 @@ const pagination = ref({
})
const showAudit2 = ref(false)
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const showSteps = ref(false)
const uploadRef = ref(null)
const submitter = ref('')//
@ -539,6 +543,8 @@ const getRefund = async function () {
})
tableData.value = result.data.list || []
await nextTick()
scrollTableTop()
pagination.value.total = result.data.total || 0
} catch (error) {
ElMessage.error(error.message || t('elmessage.searchFailed'))

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

@ -57,7 +57,7 @@
</el-card>
<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 ref="tableRef" :data="tableData" style="height:73vh;width:82vw;background-color: rgb(243,250,254);">
<el-table-column type="index" :label="t('common_list.id')" width="60" fixed="left">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
@ -248,7 +248,7 @@
</el-dialog>
</template>
<script setup>
import { ref, onMounted, computed } from 'vue'
import { ref, onMounted, computed, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js'
const uploadUrl = 'https://api.homilychart.com/hljw/api/aws/upload'
@ -296,6 +296,10 @@ const pagination = ref({
total: 0
})
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const showEdit = ref(false)
const uploadRef = ref(null)
const showBack = ref(false)
@ -373,6 +377,8 @@ const getRefund = async function () {
})
tableData.value = result.data.list || []
await nextTick()
scrollTableTop()
pagination.value.total = result.data.total || 0
} catch (error) {
ElMessage.error(error.message || t('elmessage.searchFailed'))
@ -567,19 +573,19 @@ const currencies = computed(() => [
t('cash.currency.rmb'),
])
const channelOptions = computed(() => [
t('cash.payMethods.stripe'),
t('cash.payMethods.paymentAsia'),
t('cash.payMethods.ipay88'),
t('cash.payMethods.bankTransfer'),
t('cash.payMethods.card'),
t('cash.payMethods.cash'),
t('cash.payMethods.check'),
t('cash.payMethods.grabpay'),
t('cash.payMethods.nets'),
t('cash.payMethods.transfer'),
t('cash.payMethods.paypal'),
t('cash.payMethods.stripe2'),
t('cash.payMethods.paysolution'),
t('cash.payMethods.stripe'), // Stripe
t('cash.payMethods.paymentAsia'), // PaymentAsia
t('cash.payMethods.stripe2'), // Stripe2
t('cash.payMethods.ipay88'), // Ipay88
t('cash.payMethods.grabpay'), // Grabpay
t('cash.payMethods.nets'), // Nets
t('cash.payMethods.transfer'), // E-Transfer
t('cash.payMethods.paypal'), // PayPal
t('cash.payMethods.paysolution'), // Paysolution
t('cash.payMethods.bankTransfer'),//
t('cash.payMethods.card'), //
t('cash.payMethods.cash'), //
t('cash.payMethods.check'), //
])
const reset = function () {

11
src/views/permissions/rolePermission.vue

@ -17,6 +17,11 @@ import { useI18n } from 'vue-i18n'
const Ref = ref(null)
const { t } = useI18n()
const roleData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const roleTotal = ref(100)
const treeRef = ref(null)
const admin = ref({
@ -68,7 +73,9 @@ const getRoleList = async function (val) {
}
}
})
roleData.value = result.data.list
roleData.value = result.data.list || []
await nextTick()
scrollTableTop()
console.log('roleData', roleData.value)
roleTotal.value = result.data.total
} catch (error) {
@ -685,7 +692,7 @@ onMounted(async function () {
</el-button>
</div>
<div>
<el-table :data="roleData" style="width: 82vw;height:71.3vh" show-overflow-tooltip
<el-table ref="tableRef" :data="roleData" style="width: 82vw;height:71.3vh" show-overflow-tooltip
:row-style="{ height: '56px' }">
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left">
<template #default="scope">

12
src/views/permissions/userPermission.vue

@ -1,5 +1,5 @@
<script setup>
import { computed, onMounted, ref } from 'vue'
import { computed, onMounted, ref, nextTick } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { InfoFilled } from '@element-plus/icons-vue'
import _ from 'lodash'
@ -19,6 +19,10 @@ const { adminData, menuTree } = storeToRefs(adminStore)
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const total = ref(100)
const handleDialogClose = function () {
closeUserAddVisible()
@ -165,7 +169,9 @@ const getPermission = async function (val) {
}
}
})
tableData.value = result.data.list
tableData.value = result.data.list || []
await nextTick()
scrollTableTop()
console.log('tableData', tableData.value)
total.value = result.data.total
} catch (error) {
@ -952,7 +958,7 @@ onMounted(async function () {
</div>
<div>
<el-table :data="tableData" style="width: 82vw;height:71.3vh" show-overflow-tooltip
<el-table ref="tableRef" :data="tableData" style="width: 82vw;height:71.3vh" show-overflow-tooltip
>
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left">
<template #default="scope">

16
src/views/recharge/bean/beanOnlineRecharge.vue

@ -1,5 +1,5 @@
<script setup>
import { ref, onMounted, reactive, computed } from 'vue'
import { ref, onMounted, reactive, computed, nextTick } from 'vue'
import ElementPlus from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import { AiFillRead } from 'vue-icons-plus/ai'
@ -24,6 +24,10 @@ const selectData = ref({
const permanentBeans = ref(0)
const num = ref(0)
const money = ref(0)
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
//
const getTotalBeans = async () => {
@ -151,7 +155,7 @@ const reset = () => {
}
//
const search = () => {
const search = async () => {
getObj.value.pageNum = 1
//
getObj.value.pageNum = 1
@ -162,8 +166,8 @@ const search = () => {
return
}
}
get()
getTotalBeans()
await get()
await getTotalBeans()
}
//
const get = async () => {
@ -191,6 +195,8 @@ const get = async () => {
if (result.code == 200) {
tableData.value = result.data.list
total.value = result.data.total
await nextTick()
scrollTableTop()
} else {
ElMessage.error(result.message)
}
@ -413,7 +419,7 @@ onMounted(async function () {
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div>
<el-table :data="tableData" style="width:80vw;" height="65vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width:80vw;" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

16
src/views/recharge/bean/beanSystemRecharge.vue

@ -1,5 +1,5 @@
<script setup>
import { ref, onMounted, reactive, computed, watch } from 'vue'
import { ref, onMounted, reactive, computed, watch, nextTick } from 'vue'
import ElementPlus from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import { AiFillRead } from 'vue-icons-plus/ai'
@ -41,6 +41,10 @@ const defaultTime = [
//
const formatTime = (val) => val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : ''
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
//
const market = ref([])
const getTime = ref([])
@ -165,7 +169,7 @@ const reset = () => {
}
//
const search = () => {
const search = async () => {
//
getObj.value.pageNum = 1
if (selectData.value.jwcode) {
@ -175,8 +179,8 @@ const search = () => {
return
}
}
get()
getTotalBeans()
await get()
await getTotalBeans()
}
//
const get = async () => {
@ -205,6 +209,8 @@ const get = async () => {
if (result.code == 200) {
tableData.value = result.data.list
total.value = result.data.total
await nextTick()
scrollTableTop()
} else {
ElMessage.error(result.message)
}
@ -406,7 +412,7 @@ onMounted(async function () {
{{ t('common.freeGoldBean') }}{{ format3(freeBean) }}
</div>
<div>
<el-table :data="tableData" style="width: 82vw;height:65vh;" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="width: 82vw;" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

5
src/views/recharge/gold/coinRechargeDetail.vue

@ -48,6 +48,7 @@ const defaultTime = [
//
//
const tableData = ref([])
const tableRef = ref(null)
//
const activeTimeRange = ref('')
//
@ -437,10 +438,12 @@ const getToday = function () {
}
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
tableRef.value.setScrollTop(0)
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
tableRef.value.setScrollTop(0)
get()
}
//
@ -672,7 +675,7 @@ const getTagText = (state) => {
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 66vh;">
<el-table :data="tableData" height="66vh" @sort-change="handleSortChange">
<el-table ref="tableRef" :data="tableData" height="66vh" @sort-change="handleSortChange">
<el-table-column type="index" :label="$t('common_list.id')" width="80px" fixed="left">
<template #default="scope">
<span>{{

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

@ -1,6 +1,6 @@
<script setup>
// 退
import { computed, onMounted, ref,watch } from 'vue'
import { computed, onMounted, ref,watch,nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import moment from 'moment'
import API from '@/util/http.js'
@ -67,6 +67,10 @@ const handleDatePickerChange = () => {
}
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
// ======================================
// detail
const refundUser = ref({
@ -211,6 +215,8 @@ const getSelectBy = async function (val) {
freeGold: (Number(item.freeGold) || 0),
taskGold: (Number(item.taskGold) || 0)
}))
await nextTick()
scrollTableTop()
console.log('tableData', tableData.value)
//
total.value = result.data.total
@ -583,7 +589,7 @@ const getMarket = async function () {
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 65vh; ">
<el-table :data="tableData" style="height: 65vh" @sort-change="handleSortChange"
<el-table ref="tableRef" :data="tableData" style="height: 65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="$t('common_list.id')" width="80px" fixed="left">
<template #default="scope">

10
src/views/usergold/bean/userbean.vue

@ -20,7 +20,7 @@
{{ t('common.freeGoldBean') }}{{ format3(stats.freeBean) }}{{ t('common.goldBean') }}&nbsp;&nbsp;&nbsp;&nbsp;
{{ t('common.consumeGoldBean') }}{{ format3(stats.consumeSum) }}{{ t('common.goldBean') }}&nbsp;&nbsp;&nbsp;&nbsp;
</div>
<el-table :data="tableData" height="73vh" @sort-change="handleSortChange" :row-style="{ height: '50px' }">
<el-table ref="tableRef" :data="tableData" height="73vh" @sort-change="handleSortChange" :row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">
<span>{{
@ -48,7 +48,7 @@
</template>
<script setup>
import { ref, onMounted, watch } from 'vue'
import { ref, onMounted, watch, nextTick } from 'vue'
import API from '@/util/http.js'
import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia";
@ -70,6 +70,10 @@ const {t} = useI18n()
const canLook = ref(findMenuById(menuTree.value, permissionMapping.gold_bean_customer_details))
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
const marketOptions = ref([])
const searchObj = ref({
jwcode: '',
@ -119,6 +123,8 @@ const get = async function () {
})
if (res.code === 200) {
tableData.value = res.data.list
await nextTick()
scrollTableTop()
pagination.value.total = res.data.total
}
} catch (error) {

10
src/views/usergold/gold/clientCountBalance.vue

@ -13,7 +13,7 @@ const { adminData, menuTree, flag } = storeToRefs(adminStore)
get()
}
})
import { onMounted, ref,watch } from 'vue'
import { onMounted, ref, watch, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import moment from 'moment'
import API from '@/util/http.js'
@ -36,6 +36,10 @@ const markets = ref([])
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
//
const goldtotal = ref(0)
@ -164,6 +168,8 @@ const get = async function (val) {
console.log('总数据请求成功', result)
//
tableData.value = result.data.list
await nextTick()
scrollTableTop()
console.log('tableData', tableData.value)
//
@ -425,7 +431,7 @@ const format3 = (num) => {
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 69vh; overflow-y: auto">
<el-table :data="tableData" @cellClick="cellClick" style="width: 82vw; height:69vh"
<el-table ref="tableRef" :data="tableData" @cellClick="cellClick" style="width: 82vw; height:69vh"
@sort-change="handleSortChange" :row-style="{ height: '50px' }">
<el-table-column type="index" :label="$t('common_list.id')" width="100px" fixed="left">
<template #default="scope">

13
src/views/usergold/gold/clientCountDetail.vue

@ -1,5 +1,5 @@
<script setup>
import { onMounted, ref, watch } from 'vue'
import { onMounted, ref, watch, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import moment from 'moment'
@ -105,6 +105,10 @@ const markets = ref([])
//
const tableData = ref([])
const tableRef = ref(null)
const scrollTableTop = () => {
tableRef.value?.setScrollTop?.(0)
}
//
// const sumGoldTotal = ref(0)
const permanentGold = ref(0)
@ -185,6 +189,8 @@ const get = async function (val) {
})
console.log('响应数据', result)
tableData.value = result.data.list
await nextTick()
scrollTableTop()
total.value = result.data.total
const totalResult = await API({
url: '/goldDetail/getTotal',
@ -550,8 +556,9 @@ const format3 = (num) => {
{{ $t('common.taskGold') }}{{ format3(totalTaskGold || 0) }}&nbsp;&nbsp;
<a style="color:#b1b1b1; font-size: small;">{{ $t('common.netGoldChangeTip') }}</a>
</div>
<div style="height: 65vh; ">
<el-table :data="tableData" style="height: 65vh" @sort-change="handleSortChange" :row-style="{ height: '50px' }">
<div style="height: 65vh;">
<el-table ref="tableRef" :data="tableData" style="height: 65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="$t('common_list.id')" width="80px" fixed="left">
<template #default="scope">
<span>{{

Loading…
Cancel
Save