9.8 KiB
9.8 KiB
重新设计 AdminCommissionManagement 页面
需求分析
- 页面现有结构:包含佣金比例设置和佣金列表两个部分
- 需要使用
index.js中的 API 方法:updateCommissionConfig():更新佣金配置viewCommissionConfig():获取佣金配置信息
- 目前只有佣金配置没有佣金列表(需要移除或调整佣金列表部分)
- 需要按照项目技术规范和设计风格重新设计页面
解决方案
- 移除或调整佣金列表部分,专注于佣金配置功能
- 使用
index.js中的 API 方法替换当前的模拟数据 - 实现完整的佣金配置表单,包含所有必要的配置项
- 确保页面设计符合项目的技术规范和设计风格
实现步骤
-
修改
AdminCommissionManagement.vue页面:- 调整页面结构,移除或简化佣金列表部分
- 实现完整的佣金配置表单,包含所有必要的配置项
- 使用
viewCommissionConfig()方法获取佣金配置数据 - 使用
updateCommissionConfig()方法保存佣金配置 - 确保页面支持中英文切换
- 确保页面响应式设计,适配不同设备尺寸
-
确保页面设计符合项目的技术规范和设计风格:
- 使用 Vue3 Composition API
- 使用 Scoped CSS + CSS 变量实现组件样式隔离与主题定制
- 使用 Element Plus 组件库
- 实现响应式布局,适配移动端、平板端和桌面端
代码修改点
文件:d:/work/Aiproject/DeotalandAi/apps/FrontendDesigner/src/views/admin/AdminCommissionManagement/AdminCommissionManagement.vue
核心修改:
-
页面结构调整:
- 移除或简化佣金列表部分
- 实现完整的佣金配置表单
-
数据绑定:
- 使用
viewCommissionConfig()方法获取佣金配置数据 - 将数据绑定到表单控件
- 使用
-
表单提交:
- 使用
updateCommissionConfig()方法保存佣金配置 - 实现表单验证
- 使用
-
响应式设计:
- 确保页面适配不同设备尺寸
- 实现响应式布局
-
中英文支持:
- 确保页面所有文本都支持中英文切换
实现细节
-
佣金配置表单:
- 佣金比例(commissionRate):1-100%,整数
- 最低提现金额(minWithdrawAmount):数字
- 提现费率(withdrawFeeRate):0-100%,小数
- 结算周期(settlementCycle):下拉选择
- 状态(status):开关控制
- 备注(remark):文本输入
-
API调用:
- 在页面挂载时调用
viewCommissionConfig()获取佣金配置数据 - 在表单提交时调用
updateCommissionConfig()保存佣金配置 - 处理API调用的成功和失败情况
- 在页面挂载时调用
-
表单验证:
- 实现表单验证规则
- 确保所有必填字段都已填写
- 确保字段值符合要求
-
响应式设计:
- 使用 Flexbox/Grid 实现响应式布局
- 使用媒体查询适配不同设备尺寸
- 确保表单控件在不同设备上都能正常显示和使用
-
中英文支持:
- 使用
t()函数包裹所有文本 - 确保所有文本都在国际化配置中定义
- 使用
预期效果
- 页面只包含佣金配置部分,移除或简化佣金列表部分
- 页面使用
index.js中的 API 方法获取和保存佣金配置 - 页面支持中英文切换
- 页面适配不同设备尺寸
- 页面设计符合项目的技术规范和设计风格
实现示例
<template>
<div class="admin-commission-management">
<h1 class="page-title">{{ t('admin.commissionManagement.title') }}</h1>
<!-- 佣金配置表单 -->
<el-card class="commission-config-card">
<template #header>
<div class="card-header">
<h2 class="card-title">{{ t('admin.commissionManagement.configTitle') }}</h2>
</div>
</template>
<div class="commission-config-content">
<el-form :model="commissionConfig" label-width="120px" :rules="rules" ref="commissionConfigRef">
<!-- 佣金比例 -->
<el-form-item :label="t('admin.commissionManagement.commissionRate')" prop="commissionRate">
<div class="rate-input-wrapper">
<el-input-number
v-model="commissionConfig.commissionRate"
:min="1"
:max="100"
:step="1"
:precision="0"
style="width: 200px"
/>
<span class="rate-suffix">%</span>
</div>
</el-form-item>
<!-- 最低提现金额 -->
<el-form-item :label="t('admin.commissionManagement.minWithdrawAmount')" prop="minWithdrawAmount">
<el-input-number
v-model="commissionConfig.minWithdrawAmount"
:min="0"
:step="10"
:precision="0"
style="width: 200px"
/>
</el-form-item>
<!-- 提现费率 -->
<el-form-item :label="t('admin.commissionManagement.withdrawFeeRate')" prop="withdrawFeeRate">
<div class="rate-input-wrapper">
<el-input-number
v-model="commissionConfig.withdrawFeeRate"
:min="0"
:max="100"
:step="0.1"
:precision="1"
style="width: 200px"
/>
<span class="rate-suffix">%</span>
</div>
</el-form-item>
<!-- 结算周期 -->
<el-form-item :label="t('admin.commissionManagement.settlementCycle')" prop="settlementCycle">
<el-select
v-model="commissionConfig.settlementCycle"
placeholder="{{ t('admin.commissionManagement.selectSettlementCycle') }}"
style="width: 200px"
>
<el-option
v-for="cycle in settlementCycles"
:key="cycle.value"
:label="cycle.label"
:value="cycle.value"
/>
</el-select>
</el-form-item>
<!-- 状态 -->
<el-form-item :label="t('admin.commissionManagement.status')" prop="status">
<el-switch
v-model="commissionConfig.status"
:active-value="1"
:inactive-value="0"
/>
</el-form-item>
<!-- 备注 -->
<el-form-item :label="t('admin.commissionManagement.remark')" prop="remark">
<el-input
v-model="commissionConfig.remark"
type="textarea"
:rows="3"
placeholder="{{ t('admin.commissionManagement.enterRemark') }}"
style="width: 400px"
/>
</el-form-item>
<!-- 保存按钮 -->
<el-form-item>
<el-button type="primary" @click="saveCommissionConfig">{{ t('admin.commissionManagement.saveConfig') }}</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { useI18n } from 'vue-i18n'
import { ElMessage } from 'element-plus'
import { AdminCommissionManagement } from './index.js'
const { t } = useI18n()
const adminCommissionManagement = new AdminCommissionManagement()
// 佣金配置表单
const commissionConfigRef = ref()
const commissionConfig = reactive({
commissionRate: 0,
minWithdrawAmount: 0,
withdrawFeeRate: 0,
settlementCycle: 0,
status: 1,
remark: ''
})
// 结算周期选项
const settlementCycles = [
{ value: 1, label: t('admin.commissionManagement.daily') },
{ value: 7, label: t('admin.commissionManagement.weekly') },
{ value: 30, label: t('admin.commissionManagement.monthly') }
]
// 表单验证规则
const rules = {
commissionRate: [
{ required: true, message: t('admin.commissionManagement.requiredCommissionRate'), trigger: 'blur' },
{ type: 'number', min: 1, max: 100, message: t('admin.commissionManagement.invalidCommissionRate'), trigger: 'blur' }
],
minWithdrawAmount: [
{ required: true, message: t('admin.commissionManagement.requiredMinWithdrawAmount'), trigger: 'blur' },
{ type: 'number', min: 0, message: t('admin.commissionManagement.invalidMinWithdrawAmount'), trigger: 'blur' }
]
}
// 获取佣金配置数据
const getCommissionConfig = async () => {
try {
const response = await adminCommissionManagement.viewCommissionConfig()
if (response.success) {
const data = response.data
commissionConfig.commissionRate = data.commissionRate
commissionConfig.minWithdrawAmount = data.minWithdrawAmount
commissionConfig.withdrawFeeRate = data.withdrawFeeRate
commissionConfig.settlementCycle = data.settlementCycle
commissionConfig.status = data.status
commissionConfig.remark = data.remark
}
} catch (error) {
console.error('获取佣金配置失败:', error)
ElMessage.error(t('admin.commissionManagement.getConfigFailed'))
}
}
// 保存佣金配置
const saveCommissionConfig = async () => {
try {
await commissionConfigRef.value.validate()
const response = await adminCommissionManagement.updateCommissionConfig(commissionConfig)
if (response.success) {
ElMessage.success(t('admin.commissionManagement.saveConfigSuccess'))
}
} catch (error) {
console.error('保存佣金配置失败:', error)
ElMessage.error(t('admin.commissionManagement.saveConfigFailed'))
}
}
// 页面挂载时获取佣金配置数据
onMounted(() => {
getCommissionConfig()
})
</script>
<style scoped>
/* 样式省略,按照项目设计风格实现 */
</style>
实现预期
- 页面只包含佣金配置部分,移除或简化佣金列表部分
- 页面使用
index.js中的 API 方法获取和保存佣金配置 - 页面支持中英文切换
- 页面适配不同设备尺寸
- 页面设计符合项目的技术规范和设计风格