Files
ycc-proxy-admin/apps/web-antd/src/views/agent/agent-config/list.vue
2026-02-08 17:01:33 +08:00

275 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script lang="ts" setup>
import type { AgentApi } from '#/api/agent';
import { onMounted, reactive, ref } from 'vue';
import { Page } from '@vben/common-ui';
import { Button, Card, Col, Form, InputNumber, Row, Space, message } from 'ant-design-vue';
import { getAgentConfig, updateAgentConfig } from '#/api/agent';
const loading = ref(false);
const config = ref<AgentApi.AgentConfig | null>(null);
// 使用 reactive 管理表单数据(价格配置已移除,改为产品配置表管理)
const formData = reactive<AgentApi.AgentConfig>({
level_bonus: {
normal: 0,
gold: 0,
diamond: 0,
},
upgrade_fee: {
normal_to_gold: 0,
normal_to_diamond: 0,
gold_to_diamond: 0,
},
upgrade_rebate: {
normal_to_gold_rebate: 0,
to_diamond_rebate: 0,
},
direct_parent_rebate: {
diamond: 0,
gold: 0,
normal: 0,
},
max_gold_rebate_amount: 0,
commission_freeze: {
ratio: 0,
threshold: 0,
days: 0,
},
tax_rate: 0,
tax_exemption_amount: 0,
gold_max_uplift_amount: 0,
diamond_max_uplift_amount: 0,
});
// 加载配置
async function loadConfig() {
loading.value = true;
try {
const res = await getAgentConfig();
config.value = res;
Object.assign(formData, res);
} catch (error) {
console.error('加载配置失败:', error);
} finally {
loading.value = false;
}
}
// 保存配置
async function handleSave() {
try {
const params: AgentApi.UpdateAgentConfigParams = {
level_bonus: {
normal: formData.level_bonus.normal,
gold: formData.level_bonus.gold,
diamond: formData.level_bonus.diamond,
},
upgrade_fee: {
normal_to_gold: formData.upgrade_fee.normal_to_gold,
normal_to_diamond: formData.upgrade_fee.normal_to_diamond,
},
upgrade_rebate: {
normal_to_gold_rebate: formData.upgrade_rebate.normal_to_gold_rebate,
to_diamond_rebate: formData.upgrade_rebate.to_diamond_rebate,
},
direct_parent_rebate: {
diamond: formData.direct_parent_rebate.diamond,
gold: formData.direct_parent_rebate.gold,
normal: formData.direct_parent_rebate.normal,
},
max_gold_rebate_amount: formData.max_gold_rebate_amount,
commission_freeze: {
ratio: formData.commission_freeze.ratio,
threshold: formData.commission_freeze.threshold,
days: formData.commission_freeze.days,
},
tax_rate: formData.tax_rate,
tax_exemption_amount: formData.tax_exemption_amount,
gold_max_uplift_amount: formData.gold_max_uplift_amount,
diamond_max_uplift_amount: formData.diamond_max_uplift_amount,
};
await updateAgentConfig(params);
message.success('配置保存成功');
loadConfig();
} catch (error) {
console.error('保存配置失败:', error);
}
}
// 重置配置
function handleReset() {
if (config.value) {
Object.assign(formData, config.value);
}
}
onMounted(() => {
loadConfig();
});
</script>
<template>
<Page auto-content-height>
<Card title="系统配置" :loading="loading">
<Form layout="vertical">
<Card title="等级奖金" size="small" class="mb-4">
<Row :gutter="[16, 16]">
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['level_bonus', 'normal']" label="普通代理奖金">
<InputNumber v-model:value="formData.level_bonus.normal" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['level_bonus', 'gold']" label="黄金代理奖金">
<InputNumber v-model:value="formData.level_bonus.gold" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['level_bonus', 'diamond']" label="钻石代理奖金">
<InputNumber v-model:value="formData.level_bonus.diamond" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
</Row>
</Card>
<Card title="等级最高价上调金额" size="small" class="mb-4">
<Row :gutter="[16, 16]">
<Col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
<Form.Item name="gold_max_uplift_amount" label="黄金代理最高价上调金额">
<InputNumber v-model:value="formData.gold_max_uplift_amount" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
<Form.Item name="diamond_max_uplift_amount" label="钻石代理最高价上调金额">
<InputNumber v-model:value="formData.diamond_max_uplift_amount" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
</Row>
</Card>
<Card title="升级费用" size="small" class="mb-4">
<Row :gutter="[16, 16]">
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['upgrade_fee', 'normal_to_gold']" label="普通→黄金">
<InputNumber v-model:value="formData.upgrade_fee.normal_to_gold" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['upgrade_fee', 'normal_to_diamond']" label="普通→钻石">
<InputNumber v-model:value="formData.upgrade_fee.normal_to_diamond" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
</Row>
</Card>
<Card title="升级返佣" size="small" class="mb-4">
<Row :gutter="[16, 16]">
<Col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
<Form.Item :name="['upgrade_rebate', 'normal_to_gold_rebate']" label="普通→黄金返佣">
<InputNumber v-model:value="formData.upgrade_rebate.normal_to_gold_rebate" :min="0" :precision="2"
:step="0.01" style="width: 100%" addon-after="" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
<Form.Item :name="['upgrade_rebate', 'to_diamond_rebate']" label="→钻石返佣">
<InputNumber v-model:value="formData.upgrade_rebate.to_diamond_rebate" :min="0" :precision="2"
:step="0.01" style="width: 100%" addon-after="" />
</Form.Item>
</Col>
</Row>
</Card>
<Card title="直接上级返佣配置" size="small" class="mb-4">
<Row :gutter="[16, 16]">
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['direct_parent_rebate', 'diamond']" label="直接上级是钻石的返佣金额">
<InputNumber v-model:value="formData.direct_parent_rebate.diamond" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['direct_parent_rebate', 'gold']" label="直接上级是黄金的返佣金额">
<InputNumber v-model:value="formData.direct_parent_rebate.gold" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['direct_parent_rebate', 'normal']" label="直接上级是普通的返佣金额">
<InputNumber v-model:value="formData.direct_parent_rebate.normal" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
</Row>
</Card>
<Card title="返佣限额配置" size="small" class="mb-4">
<Row :gutter="[16, 16]">
<Col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
<Form.Item name="max_gold_rebate_amount" label="黄金代理最大返佣金额">
<InputNumber v-model:value="formData.max_gold_rebate_amount" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
</Row>
</Card>
<Card title="佣金冻结配置" size="small" class="mb-4">
<Row :gutter="[16, 16]">
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['commission_freeze', 'ratio']" label="佣金冻结比例例如0.1表示10%">
<InputNumber v-model:value="formData.commission_freeze.ratio" :min="0" :max="1" :precision="4"
:step="0.0001" style="width: 100%" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['commission_freeze', 'threshold']" label="佣金冻结阈值">
<InputNumber v-model:value="formData.commission_freeze.threshold" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
<Form.Item :name="['commission_freeze', 'days']" label="佣金冻结解冻天数">
<InputNumber v-model:value="formData.commission_freeze.days" :min="0" :precision="0" :step="1"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
</Row>
</Card>
<Card title="税费配置" size="small" class="mb-4">
<Row :gutter="[16, 16]">
<Col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
<Form.Item name="tax_rate" label="税率例如0.06表示6%">
<InputNumber v-model:value="formData.tax_rate" :min="0" :max="1" :precision="4" :step="0.0001"
style="width: 100%" />
</Form.Item>
</Col>
<Col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
<Form.Item name="tax_exemption_amount" label="免税额度">
<InputNumber v-model:value="formData.tax_exemption_amount" :min="0" :precision="2" :step="0.01"
style="width: 100%" addon-after="" />
</Form.Item>
</Col>
</Row>
</Card>
<Space>
<Button type="primary" @click="handleSave">保存</Button>
<Button @click="handleReset">重置</Button>
</Space>
</Form>
</Card>
</Page>
</template>