This commit is contained in:
2025-04-30 10:02:22 +08:00
parent ff17e84aed
commit d7fe2a62a9
10 changed files with 6942 additions and 58 deletions

41
obfuscatorConfig.js Normal file
View File

@@ -0,0 +1,41 @@
const allObfuscatorConfig = {
excludes: [],
enable: true,
log: true,
autoExcludeNodeModules: true,
// autoExcludeNodeModules: { enable: true, manualChunks: ['vue'] }
threadPool: true,
// threadPool: { enable: true, size: 4 }
options: {
compact: true,
controlFlowFlattening: true,
controlFlowFlatteningThreshold: 1,
deadCodeInjection: false,
debugProtection: false,
debugProtectionInterval: 0,
disableConsoleOutput: false,
identifierNamesGenerator: 'hexadecimal',
log: false,
numbersToExpressions: false,
renameGlobals: false,
selfDefending: true,
simplify: true,
splitStrings: false,
ignoreImports: true,
stringArray: true,
stringArrayCallsTransform: true,
stringArrayCallsTransformThreshold: 0.5,
stringArrayEncoding: [],
stringArrayIndexShift: true,
stringArrayRotate: true,
stringArrayShuffle: true,
stringArrayWrappersCount: 1,
stringArrayWrappersChainedCalls: true,
stringArrayWrappersParametersMaxCount: 2,
stringArrayWrappersType: 'variable',
stringArrayThreshold: 0.75,
unicodeEscapeSequence: false,
}
};
export default allObfuscatorConfig;

View File

@@ -5,7 +5,7 @@
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"build": "vite build --mode=production",
"preview": "vite preview",
"commit": "git add . && git commit -m 'update' && git push"
},
@@ -26,11 +26,15 @@
"@arco-design/web-vue": "^2.57.0",
"@arco-plugins/vite-vue": "^1.4.5",
"@types/crypto-js": "^4.2.2",
"@vitejs/plugin-legacy": "^6.1.1",
"@vitejs/plugin-vue": "^5.2.3",
"rollup-plugin-visualizer": "^5.14.0",
"sass": "^1.86.3",
"tailwindcss": "^3.4.17",
"unplugin-auto-import": "^19.1.2",
"unplugin-vue-components": "^28.5.0",
"vite": "^6.3.2"
"vite": "^6.3.2",
"vite-plugin-bundle-obfuscator": "^1.5.0",
"vite-plugin-compression": "^0.5.1"
}
}

1854
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -152,6 +152,20 @@ const merchant = {
data: data
});
},
getBusinessInfo: async (data) => {
return request({
url: '/index/business/getInfo',
method: Method.POST,
data: data
});
},
rechargeOrderQR: async (data) => {
return request({
url: '/index/business/rechargeOrder',
method: Method.POST,
data: data
});
},
}
export default merchant;

View File

@@ -1,11 +1,35 @@
<script setup>
import {ref} from "vue";
import {reactive, ref} from "vue";
import {Message} from "@arco-design/web-vue";
import Api from "../../../api/index.js";
const {money} = defineProps({
money: {
type: Number,
default: null
}
});
const visible = ref(false);
const qrInfo = reactive({});
const open = () => {
if (!money) {
Message.warning('充值金额需大于0元');
return;
}
visible.value = true;
initQR();
}
const initQR = async () => {
const {data} = await Api.merchant.rechargeOrderQR({
money: money,
});
Object.assign(qrInfo, data);
}
</script>
<template>
<a-button type="primary" @click="visible=true">立即充值</a-button>
<a-button type="primary" @click="open">立即充值</a-button>
<a-modal
:footer="false"
@@ -18,7 +42,7 @@ const visible = ref(false);
<div class="py-[24px] px-[20px]">
<div class="flex justify-center gap-[15px]">
支付金额: <span class="text-[rgb(var(--arcoblue-6))]">200</span>
支付金额: <span class="text-[rgb(var(--arcoblue-6))]">{{ money }}</span>
</div>
<div class="text-center mt-[20px]">打开支付宝扫描下方二维码支付</div>
<div class="w-[200px] aspect-square mx-auto mt-[5px]">

View File

@@ -1,6 +1,10 @@
<script setup>
import {reactive} from "vue";
import Alipay from "../../../components/Alipay.vue";
const form = reactive({
money: null,
});
</script>
<template>
@@ -12,11 +16,11 @@ import Alipay from "../../../components/Alipay.vue";
<a-form>
<a-form-item label="立即充值">
<a-input-number class="w-1/2" placeholder="输入金额"></a-input-number>
<a-input-number v-model:model-value="form.money" class="w-1/2" placeholder="输入金额"></a-input-number>
</a-form-item>
<a-form-item class="mt-[40px]">
<Alipay></Alipay>
<Alipay :money="form.money"></Alipay>
</a-form-item>
</a-form>
</template>

View File

@@ -7,6 +7,13 @@ import openWithdrawalStatus from "./openWithdrawalStatus.js";
import LookWithdrawalInformationModal from "../../../components/LookWithdrawalInformationModal.vue";
import Api from "../../../../../api/index.js";
const {businessInfo} = defineProps({
businessInfo: {
type: Object,
default: {}
}
});
const withdrawalList = reactive([]);
const getData = async () => {
const {data} = await Api.merchant.getWithdrawalList();
@@ -60,7 +67,7 @@ onMounted(() => {
<a-form-item label="提现金额">
<div class="max-w-[768px] flex gap-[20px] items-center">
<a-input-number :placeholder="`最多可提现${388.88}元`"></a-input-number>
<a-input-number :placeholder="`最多可提现${businessInfo.money}元`"></a-input-number>
<a-link :hoverable="false" class="whitespace-nowrap">全部提现</a-link>
</div>
</a-form-item>

View File

@@ -1,7 +1,7 @@
<script setup>
import Recharge from "./components/Recharge.vue";
import Reflect from "./components/Reflect.vue";
import {reactive} from "vue";
import {onMounted, reactive} from "vue";
import useTableQuery from "../../../../hooks/useTableQuery.js";
import Api from "../../../../api/index.js";
@@ -57,6 +57,21 @@ const {loading, pagination, initFetchData} = useTableQuery({
console.log(vo);
}
});
const businessInfo = reactive({
money: 0,
coin: 0,
recharge: 0,
withdrawal: 0,
consume: 0,
});
const getData = async () => {
const {data} = await Api.merchant.getBusinessInfo();
Object.assign(businessInfo, data);
}
onMounted(() => {
getData();
})
</script>
<template>
@@ -70,20 +85,24 @@ const {loading, pagination, initFetchData} = useTableQuery({
<div class="flex-grow flex flex-col gap-[20px]">
<div class="mock-card grid grid-cols-5 gap-[20px]" id="statistic-card">
<div class="bg-[rgb(var(--arcoblue-1))] p-[20px]">
<a-statistic title="钱包余额(元)" :value="8.06" :precision="2" :value-from="0" animation></a-statistic>
</div>
<div class="bg-[rgb(var(--arcoblue-1))] p-[20px]">
<a-statistic title="任务款余额(元)" :value="8.06" :precision="2" :value-from="0"
<a-statistic title="钱包余额(元)" :value="businessInfo.money" :precision="2" :value-from="0"
animation></a-statistic>
</div>
<div class="bg-[rgb(var(--arcoblue-1))] p-[20px]">
<a-statistic title="累计充值(元)" :value="8.06" :precision="2" :value-from="0" animation></a-statistic>
<a-statistic title="任务款余额(元)" :value="businessInfo.coin" :precision="2" :value-from="0"
animation></a-statistic>
</div>
<div class="bg-[rgb(var(--arcoblue-1))] p-[20px]">
<a-statistic title="累计消耗(元)" :value="8.06" :precision="2" :value-from="0" animation></a-statistic>
<a-statistic title="累计充值(元)" :value="businessInfo.recharge" :precision="2" :value-from="0"
animation></a-statistic>
</div>
<div class="bg-[rgb(var(--arcoblue-1))] p-[20px]">
<a-statistic title="累计提现(元)" :value="8.06" :precision="2" :value-from="0" animation></a-statistic>
<a-statistic title="累计消耗(元)" :value="businessInfo.consume" :precision="2" :value-from="0"
animation></a-statistic>
</div>
<div class="bg-[rgb(var(--arcoblue-1))] p-[20px]">
<a-statistic title="累计提现(元)" :value="businessInfo.withdrawal" :precision="2" :value-from="0"
animation></a-statistic>
</div>
</div>
@@ -93,7 +112,7 @@ const {loading, pagination, initFetchData} = useTableQuery({
<Recharge></Recharge>
</a-tab-pane>
<a-tab-pane key="Reflect" title="我的提现">
<Reflect></Reflect>
<Reflect :businessInfo="businessInfo"></Reflect>
</a-tab-pane>
</a-tabs>
</a-card>

4949
stats.html Normal file

File diff suppressed because one or more lines are too long

View File

@@ -6,6 +6,11 @@ import vueDevTools from 'vite-plugin-vue-devtools';
import Components from 'unplugin-vue-components/vite';
import {ArcoResolver} from 'unplugin-vue-components/resolvers';
import {vitePluginForArco} from "@arco-plugins/vite-vue";
import legacy from '@vitejs/plugin-legacy';
import vitePluginBundleObfuscator from 'vite-plugin-bundle-obfuscator';
import allObfuscatorConfig from "./obfuscatorConfig.js";
import {visualizer} from 'rollup-plugin-visualizer';
import viteCompression from 'vite-plugin-compression';
// https://vite.dev/config/
export default defineConfig({
@@ -17,35 +22,38 @@ export default defineConfig({
resolvers: [ArcoResolver()],
}),
Components({
resolvers: [
ArcoResolver({
sideEffect: true
})
]
resolvers: [ArcoResolver({
sideEffect: true
})]
}),
vitePluginForArco({
style: 'css'
})
],
css: {
}),
legacy({
targets: ["defaults", "not IE 11", 'chromeAndroid>=52, iOS>=13.1']
}),
vitePluginBundleObfuscator(allObfuscatorConfig),
viteCompression({
verbose: true,
disable: false,
threshold: 10240,
algorithm: 'gzip',
ext: '.gz',
deleteOriginFile: true,
}),
visualizer({open: false}),
], css: {
postcss: {
plugins: [
tailwindcss,
]
plugins: [tailwindcss,]
}
},
resolve: {
}, resolve: {
alias: {
'@': '/src'
}
},
server: {
port: 9050,
proxy: {
}, server: {
port: 9050, proxy: {
'/baseApi': {
target: 'http://192.168.1.105',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/baseApi/, ''),
target: 'http://192.168.1.105', changeOrigin: true, rewrite: (path) => path.replace(/^\/baseApi/, ''),
}
}
}