|
@@ -1,45 +1,68 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="agent-profit-commission-page">
|
|
<div class="agent-profit-commission-page">
|
|
|
<div class="commission-panel">
|
|
<div class="commission-panel">
|
|
|
- <div class="panel-toolbar">
|
|
|
|
|
- <el-button type="primary" icon="el-icon-plus" size="small" @click="handleAdd">新增</el-button>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <el-form
|
|
|
|
|
+ ref="queryForm"
|
|
|
|
|
+ :model="query"
|
|
|
|
|
+ inline
|
|
|
|
|
+ size="small"
|
|
|
|
|
+ class="commission-search"
|
|
|
|
|
+ @submit.native.prevent
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-form-item label="比例名称" prop="name">
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="query.name"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ placeholder="请输入比例名称"
|
|
|
|
|
+ @keyup.enter.native="handleSearch"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item class="search-actions">
|
|
|
|
|
+ <el-button @click="handleSearch">查询</el-button>
|
|
|
|
|
+ <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-form>
|
|
|
|
|
|
|
|
- <el-table v-loading="loading" :data="pagedRows" border class="commission-table" height="calc(100vh - 225px)">
|
|
|
|
|
- <el-table-column type="index" label="序号" width="135" align="center" />
|
|
|
|
|
- <el-table-column prop="name" label="盈亏比例名称" width="180" align="center" />
|
|
|
|
|
- <el-table-column prop="casino" label="真人盈亏比例" min-width="145" align="center">
|
|
|
|
|
- <template slot-scope="{ row }">{{ formatRate(row.casino) }}</template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column prop="electronics" label="电子盈亏比例" min-width="145" align="center">
|
|
|
|
|
- <template slot-scope="{ row }">{{ formatRate(row.electronics) }}</template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column prop="lottery" label="彩票盈亏比例" min-width="145" align="center">
|
|
|
|
|
- <template slot-scope="{ row }">{{ formatRate(row.lottery) }}</template>
|
|
|
|
|
|
|
+ <el-table
|
|
|
|
|
+ v-loading="loading"
|
|
|
|
|
+ :data="tableData"
|
|
|
|
|
+ border
|
|
|
|
|
+ class="commission-table"
|
|
|
|
|
+ height="calc(100vh - 255px)"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-table-column type="index" label="序号" width="70" align="center" :index="tableIndex" />
|
|
|
|
|
+ <el-table-column prop="name" label="盈亏比例名称" min-width="180" align="center" />
|
|
|
|
|
+ <el-table-column
|
|
|
|
|
+ v-for="field in rateFields"
|
|
|
|
|
+ :key="field.prop"
|
|
|
|
|
+ :prop="field.prop"
|
|
|
|
|
+ :label="field.label"
|
|
|
|
|
+ min-width="140"
|
|
|
|
|
+ align="center"
|
|
|
|
|
+ >
|
|
|
|
|
+ <template slot-scope="{ row }">{{ formatRate(row[field.prop]) }}</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="sports" label="体育盈亏比例" min-width="145" align="center">
|
|
|
|
|
- <template slot-scope="{ row }">{{ formatRate(row.sports) }}</template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column prop="esports" label="电竞盈亏比例" min-width="145" align="center">
|
|
|
|
|
- <template slot-scope="{ row }">{{ formatRate(row.esports) }}</template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column prop="fishing" label="捕鱼盈亏比例" min-width="145" align="center">
|
|
|
|
|
- <template slot-scope="{ row }">{{ formatRate(row.fishing) }}</template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column prop="chess" label="棋牌盈亏比例" min-width="145" align="center">
|
|
|
|
|
- <template slot-scope="{ row }">{{ formatRate(row.chess) }}</template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column label="是否默认" width="130" align="center">
|
|
|
|
|
|
|
+ <el-table-column label="是否默认" width="100" align="center">
|
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
|
<el-tag v-if="row.is_default" type="success" size="mini" effect="plain">是</el-tag>
|
|
<el-tag v-if="row.is_default" type="success" size="mini" effect="plain">是</el-tag>
|
|
|
<el-tag v-else type="info" size="mini" effect="plain">否</el-tag>
|
|
<el-tag v-else type="info" size="mini" effect="plain">否</el-tag>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="created_at" label="创建时间" width="180" align="center" />
|
|
|
|
|
- <el-table-column label="操作" width="150" fixed="right" align="center">
|
|
|
|
|
|
|
+ <el-table-column prop="created_at" label="创建时间" width="180" align="center">
|
|
|
|
|
+ <template slot-scope="{ row }">{{ formatDate(row.created_at) }}</template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column label="操作" width="140" fixed="right" align="center">
|
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
|
<el-button type="text" size="mini" @click="handleEdit(row)">修改</el-button>
|
|
<el-button type="text" size="mini" @click="handleEdit(row)">修改</el-button>
|
|
|
- <el-button type="text" size="mini" class="danger-action" @click="handleDelete(row)">删除</el-button>
|
|
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ type="text"
|
|
|
|
|
+ size="mini"
|
|
|
|
|
+ class="danger-action"
|
|
|
|
|
+ :disabled="Boolean(row.is_default)"
|
|
|
|
|
+ @click="handleDelete(row)"
|
|
|
|
|
+ >
|
|
|
|
|
+ 删除
|
|
|
|
|
+ </el-button>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
</el-table>
|
|
</el-table>
|
|
@@ -51,59 +74,71 @@
|
|
|
:current-page="page"
|
|
:current-page="page"
|
|
|
:page-size="limit"
|
|
:page-size="limit"
|
|
|
:page-sizes="[10, 20, 50, 100]"
|
|
:page-sizes="[10, 20, 50, 100]"
|
|
|
- :total="rows.length"
|
|
|
|
|
|
|
+ :total="total"
|
|
|
@size-change="handleSizeChange"
|
|
@size-change="handleSizeChange"
|
|
|
@current-change="handleCurrentChange"
|
|
@current-change="handleCurrentChange"
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<el-dialog
|
|
<el-dialog
|
|
|
- :title="dialogType === 'add' ? '新增' : '修改'"
|
|
|
|
|
|
|
+ :title="dialogType === 'add' ? '新增盈亏佣金比例' : '修改盈亏佣金比例'"
|
|
|
:visible.sync="dialogVisible"
|
|
:visible.sync="dialogVisible"
|
|
|
- width="50%"
|
|
|
|
|
- top="15vh"
|
|
|
|
|
|
|
+ width="620px"
|
|
|
|
|
+ top="10vh"
|
|
|
@close="resetForm"
|
|
@close="resetForm"
|
|
|
>
|
|
>
|
|
|
- <el-form ref="commissionForm" :model="form" :rules="rules" label-width="120px" size="small" class="commission-form">
|
|
|
|
|
|
|
+ <el-form
|
|
|
|
|
+ ref="commissionForm"
|
|
|
|
|
+ :model="form"
|
|
|
|
|
+ :rules="rules"
|
|
|
|
|
+ label-width="140px"
|
|
|
|
|
+ size="small"
|
|
|
|
|
+ class="commission-form"
|
|
|
|
|
+ >
|
|
|
<el-form-item label="盈亏比例名称" prop="name">
|
|
<el-form-item label="盈亏比例名称" prop="name">
|
|
|
- <el-input v-model="form.name" maxlength="30" placeholder="盈亏比例名称" />
|
|
|
|
|
|
|
+ <el-input v-model="form.name" maxlength="128" placeholder="请输入盈亏比例名称" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item v-for="field in rateFields" :key="field.prop" :label="field.label" :prop="field.prop">
|
|
<el-form-item v-for="field in rateFields" :key="field.prop" :label="field.label" :prop="field.prop">
|
|
|
<div class="rate-control">
|
|
<div class="rate-control">
|
|
|
- <el-input v-model="form[field.prop]" :placeholder="field.placeholder" />
|
|
|
|
|
|
|
+ <el-input v-model="form[field.prop]" maxlength="8" :placeholder="`请输入${field.label}`" />
|
|
|
<span class="unit">%</span>
|
|
<span class="unit">%</span>
|
|
|
</div>
|
|
</div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <div class="default-tip">
|
|
|
|
|
- <span>注意:</span>
|
|
|
|
|
- <strong>默认比例仅存在一条,如果勾选默认会覆盖掉已配置过此比例的代理</strong>
|
|
|
|
|
- </div>
|
|
|
|
|
- <el-form-item label="是否默认" prop="is_default" class="default-form-item">
|
|
|
|
|
|
|
+ <el-form-item label="是否默认" prop="is_default">
|
|
|
<el-radio-group v-model="form.is_default">
|
|
<el-radio-group v-model="form.is_default">
|
|
|
<el-radio :label="false">否</el-radio>
|
|
<el-radio :label="false">否</el-radio>
|
|
|
<el-radio :label="true">是</el-radio>
|
|
<el-radio :label="true">是</el-radio>
|
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
|
|
|
+ <div class="default-tip">
|
|
|
|
|
+ 默认方案只能有一条,设为默认后旧默认方案会自动取消。
|
|
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<div slot="footer">
|
|
<div slot="footer">
|
|
|
<el-button size="small" @click="dialogVisible = false">取消</el-button>
|
|
<el-button size="small" @click="dialogVisible = false">取消</el-button>
|
|
|
- <el-button type="primary" size="small" @click="submitForm">确定</el-button>
|
|
|
|
|
|
|
+ <el-button type="primary" size="small" :loading="submitting" @click="submitForm">确定</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
|
|
+import {
|
|
|
|
|
+ deleteAgentProfitCommissionProfile,
|
|
|
|
|
+ getAgentProfitCommissionProfiles,
|
|
|
|
|
+ saveAgentProfitCommissionProfile
|
|
|
|
|
+} from '@/api/data'
|
|
|
|
|
+
|
|
|
const emptyForm = () => ({
|
|
const emptyForm = () => ({
|
|
|
id: null,
|
|
id: null,
|
|
|
name: '',
|
|
name: '',
|
|
|
- casino: '',
|
|
|
|
|
- electronics: '',
|
|
|
|
|
- lottery: '',
|
|
|
|
|
- sports: '',
|
|
|
|
|
- esports: '',
|
|
|
|
|
- fishing: '',
|
|
|
|
|
- chess: '',
|
|
|
|
|
|
|
+ live_rate: '',
|
|
|
|
|
+ slot_rate: '',
|
|
|
|
|
+ lottery_rate: '',
|
|
|
|
|
+ sport_rate: '',
|
|
|
|
|
+ esports_rate: '',
|
|
|
|
|
+ fishing_rate: '',
|
|
|
|
|
+ chess_rate: '',
|
|
|
is_default: false
|
|
is_default: false
|
|
|
})
|
|
})
|
|
|
|
|
|
|
@@ -112,114 +147,159 @@ export default {
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
loading: false,
|
|
loading: false,
|
|
|
|
|
+ submitting: false,
|
|
|
|
|
+ query: {
|
|
|
|
|
+ name: ''
|
|
|
|
|
+ },
|
|
|
page: 1,
|
|
page: 1,
|
|
|
- limit: 10,
|
|
|
|
|
|
|
+ limit: 20,
|
|
|
|
|
+ total: 0,
|
|
|
|
|
+ tableData: [],
|
|
|
dialogVisible: false,
|
|
dialogVisible: false,
|
|
|
dialogType: 'add',
|
|
dialogType: 'add',
|
|
|
form: emptyForm(),
|
|
form: emptyForm(),
|
|
|
- rows: [
|
|
|
|
|
- { id: 1, name: '30', casino: 30, electronics: 30, lottery: 30, sports: 30, esports: 30, fishing: 30, chess: 30, is_default: true, created_at: '2026-05-29 19:10:00' },
|
|
|
|
|
- { id: 2, name: '一级代理', casino: 5, electronics: 0, lottery: 0, sports: 0, esports: 0, fishing: 0, chess: 0, is_default: false, created_at: '2025-12-02 23:11:59' },
|
|
|
|
|
- { id: 3, name: '盈亏-官方默认比例', casino: 20, electronics: 10, lottery: 0, sports: 0, esports: 0, fishing: 0, chess: 0, is_default: false, created_at: '2024-11-14 09:02:17' }
|
|
|
|
|
- ],
|
|
|
|
|
rateFields: [
|
|
rateFields: [
|
|
|
- { prop: 'casino', label: '真人盈亏比例', placeholder: '真人盈亏比例' },
|
|
|
|
|
- { prop: 'electronics', label: '电子盈亏比例', placeholder: '电子盈亏比例' },
|
|
|
|
|
- { prop: 'lottery', label: '彩票盈亏比例', placeholder: '彩票盈亏比例' },
|
|
|
|
|
- { prop: 'sports', label: '体育盈亏比例', placeholder: '体育盈亏比例' },
|
|
|
|
|
- { prop: 'esports', label: '电竞盈亏比例', placeholder: '电竞盈亏比例' },
|
|
|
|
|
- { prop: 'fishing', label: '捕鱼盈亏比例', placeholder: '捕鱼盈亏比例' },
|
|
|
|
|
- { prop: 'chess', label: '棋牌盈亏比例', placeholder: '棋牌盈亏比例' }
|
|
|
|
|
|
|
+ { prop: 'live_rate', label: '真人盈亏比例' },
|
|
|
|
|
+ { prop: 'slot_rate', label: '电子盈亏比例' },
|
|
|
|
|
+ { prop: 'lottery_rate', label: '彩票盈亏比例' },
|
|
|
|
|
+ { prop: 'sport_rate', label: '体育盈亏比例' },
|
|
|
|
|
+ { prop: 'esports_rate', label: '电竞盈亏比例' },
|
|
|
|
|
+ { prop: 'fishing_rate', label: '捕鱼盈亏比例' },
|
|
|
|
|
+ { prop: 'chess_rate', label: '棋牌盈亏比例' }
|
|
|
],
|
|
],
|
|
|
rules: {
|
|
rules: {
|
|
|
- name: [{ required: true, message: '请输入盈亏比例名称', trigger: 'blur' }],
|
|
|
|
|
- casino: [{ required: true, message: '请输入真人盈亏比例', trigger: 'blur' }, { validator: this.validateRate, trigger: 'blur' }],
|
|
|
|
|
- electronics: [{ required: true, message: '请输入电子盈亏比例', trigger: 'blur' }, { validator: this.validateRate, trigger: 'blur' }],
|
|
|
|
|
- lottery: [{ required: true, message: '请输入彩票盈亏比例', trigger: 'blur' }, { validator: this.validateRate, trigger: 'blur' }],
|
|
|
|
|
- sports: [{ required: true, message: '请输入体育盈亏比例', trigger: 'blur' }, { validator: this.validateRate, trigger: 'blur' }],
|
|
|
|
|
- esports: [{ required: true, message: '请输入电竞盈亏比例', trigger: 'blur' }, { validator: this.validateRate, trigger: 'blur' }],
|
|
|
|
|
- fishing: [{ required: true, message: '请输入捕鱼盈亏比例', trigger: 'blur' }, { validator: this.validateRate, trigger: 'blur' }],
|
|
|
|
|
- chess: [{ required: true, message: '请输入棋牌盈亏比例', trigger: 'blur' }, { validator: this.validateRate, trigger: 'blur' }]
|
|
|
|
|
|
|
+ name: [
|
|
|
|
|
+ { required: true, message: '请输入盈亏比例名称', trigger: 'blur' },
|
|
|
|
|
+ { max: 128, message: '名称最长为128个字符', trigger: 'blur' }
|
|
|
|
|
+ ]
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
- computed: {
|
|
|
|
|
- pagedRows() {
|
|
|
|
|
- const start = (this.page - 1) * this.limit
|
|
|
|
|
- return this.rows.slice(start, start + this.limit)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ created() {
|
|
|
|
|
+ this.getList()
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
- validateRate(rule, value, callback) {
|
|
|
|
|
- const rate = Number(value)
|
|
|
|
|
- if (value === '' || Number.isNaN(rate) || rate < 0 || rate > 100) {
|
|
|
|
|
- callback(new Error('请输入0-100之间的比例'))
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- callback()
|
|
|
|
|
|
|
+ tableIndex(index) {
|
|
|
|
|
+ return (this.page - 1) * this.limit + index + 1
|
|
|
|
|
+ },
|
|
|
|
|
+ getList() {
|
|
|
|
|
+ this.loading = true
|
|
|
|
|
+ getAgentProfitCommissionProfiles({
|
|
|
|
|
+ page: this.page,
|
|
|
|
|
+ limit: this.limit,
|
|
|
|
|
+ name: this.query.name || undefined
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(res => {
|
|
|
|
|
+ const data = res.data || {}
|
|
|
|
|
+ this.total = Number(data.total) || 0
|
|
|
|
|
+ this.page = Number(data.page) || this.page
|
|
|
|
|
+ this.limit = Number(data.limit) || this.limit
|
|
|
|
|
+ this.tableData = data.list || []
|
|
|
|
|
+ })
|
|
|
|
|
+ .finally(() => {
|
|
|
|
|
+ this.loading = false
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ handleSearch() {
|
|
|
|
|
+ this.page = 1
|
|
|
|
|
+ this.getList()
|
|
|
|
|
+ },
|
|
|
|
|
+ handleSizeChange(value) {
|
|
|
|
|
+ this.limit = value
|
|
|
|
|
+ this.page = 1
|
|
|
|
|
+ this.getList()
|
|
|
|
|
+ },
|
|
|
|
|
+ handleCurrentChange(value) {
|
|
|
|
|
+ this.page = value
|
|
|
|
|
+ this.getList()
|
|
|
},
|
|
},
|
|
|
formatRate(value) {
|
|
formatRate(value) {
|
|
|
- return Number(value || 0).toFixed(2).replace(/\.00$/, '')
|
|
|
|
|
|
|
+ const numberValue = Number(value)
|
|
|
|
|
+ if (Number.isNaN(numberValue)) return value || '0%'
|
|
|
|
|
+ return `${numberValue.toFixed(2).replace(/\.?0+$/, '')}%`
|
|
|
|
|
+ },
|
|
|
|
|
+ formatDate(value) {
|
|
|
|
|
+ if (!value) return '--'
|
|
|
|
|
+ return String(value).replace('T', ' ').replace(/\.\d+Z$/, '').slice(0, 19)
|
|
|
},
|
|
},
|
|
|
handleAdd() {
|
|
handleAdd() {
|
|
|
this.dialogType = 'add'
|
|
this.dialogType = 'add'
|
|
|
this.form = emptyForm()
|
|
this.form = emptyForm()
|
|
|
this.dialogVisible = true
|
|
this.dialogVisible = true
|
|
|
|
|
+ this.clearValidate()
|
|
|
},
|
|
},
|
|
|
handleEdit(row) {
|
|
handleEdit(row) {
|
|
|
this.dialogType = 'edit'
|
|
this.dialogType = 'edit'
|
|
|
- this.form = { ...row }
|
|
|
|
|
|
|
+ this.form = Object.assign(emptyForm(), row, {
|
|
|
|
|
+ is_default: Boolean(row.is_default)
|
|
|
|
|
+ })
|
|
|
this.dialogVisible = true
|
|
this.dialogVisible = true
|
|
|
|
|
+ this.clearValidate()
|
|
|
},
|
|
},
|
|
|
- handleDelete(row) {
|
|
|
|
|
- if (row.is_default) {
|
|
|
|
|
- this.$message.warning('默认比例不能删除')
|
|
|
|
|
|
|
+ clearValidate() {
|
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
|
+ if (this.$refs.commissionForm) this.$refs.commissionForm.clearValidate()
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ validateRate(rule, value, callback) {
|
|
|
|
|
+ if (value === '' || value === null || value === undefined) {
|
|
|
|
|
+ callback(new Error('请输入0-100之间的比例'))
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- this.$confirm('确定删除该盈亏佣金比例吗?', '提示', {
|
|
|
|
|
- confirmButtonText: '确定',
|
|
|
|
|
- cancelButtonText: '取消',
|
|
|
|
|
- type: 'warning'
|
|
|
|
|
- }).then(() => {
|
|
|
|
|
- this.rows = this.rows.filter(item => item.id !== row.id)
|
|
|
|
|
- this.$message.success('删除成功')
|
|
|
|
|
- if (this.page > 1 && this.pagedRows.length === 0) this.page -= 1
|
|
|
|
|
- }).catch(() => {})
|
|
|
|
|
|
|
+ if (!/^(?:100(?:\.0{1,4})?|(?:\d{1,2})(?:\.\d{1,4})?)$/.test(String(value))) {
|
|
|
|
|
+ callback(new Error('请输入0-100之间的数字,最多4位小数'))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ callback()
|
|
|
},
|
|
},
|
|
|
submitForm() {
|
|
submitForm() {
|
|
|
|
|
+ this.rateFields.forEach(field => {
|
|
|
|
|
+ this.$set(this.rules, field.prop, [{ validator: this.validateRate, trigger: 'blur' }])
|
|
|
|
|
+ })
|
|
|
this.$refs.commissionForm.validate(valid => {
|
|
this.$refs.commissionForm.validate(valid => {
|
|
|
if (!valid) return
|
|
if (!valid) return
|
|
|
- const data = { ...this.form }
|
|
|
|
|
- Object.keys(data).forEach(key => {
|
|
|
|
|
- if (key !== 'name' && key !== 'id' && key !== 'created_at' && key !== 'is_default') data[key] = data[key] === '' ? 0 : Number(data[key])
|
|
|
|
|
- })
|
|
|
|
|
- if (data.is_default) this.rows.forEach(item => { item.is_default = false })
|
|
|
|
|
- if (this.dialogType === 'add') {
|
|
|
|
|
- data.id = Date.now()
|
|
|
|
|
- data.created_at = this.formatDate(new Date())
|
|
|
|
|
- this.rows.push(data)
|
|
|
|
|
- } else {
|
|
|
|
|
- const index = this.rows.findIndex(item => item.id === data.id)
|
|
|
|
|
- if (index > -1) this.$set(this.rows, index, data)
|
|
|
|
|
|
|
+ this.submitting = true
|
|
|
|
|
+ const payload = {
|
|
|
|
|
+ name: this.form.name.trim(),
|
|
|
|
|
+ is_default: Boolean(this.form.is_default)
|
|
|
}
|
|
}
|
|
|
- this.dialogVisible = false
|
|
|
|
|
- this.$message.success(this.dialogType === 'add' ? '新增成功' : '修改成功')
|
|
|
|
|
|
|
+ this.rateFields.forEach(field => {
|
|
|
|
|
+ payload[field.prop] = String(this.form[field.prop])
|
|
|
|
|
+ })
|
|
|
|
|
+ if (this.dialogType === 'edit') payload.id = this.form.id
|
|
|
|
|
+
|
|
|
|
|
+ saveAgentProfitCommissionProfile(payload)
|
|
|
|
|
+ .then(() => {
|
|
|
|
|
+ this.$message.success(this.dialogType === 'add' ? '新增成功' : '修改成功')
|
|
|
|
|
+ this.dialogVisible = false
|
|
|
|
|
+ this.getList()
|
|
|
|
|
+ })
|
|
|
|
|
+ .finally(() => {
|
|
|
|
|
+ this.submitting = false
|
|
|
|
|
+ })
|
|
|
})
|
|
})
|
|
|
},
|
|
},
|
|
|
|
|
+ handleDelete(row) {
|
|
|
|
|
+ if (row.is_default) {
|
|
|
|
|
+ this.$message.warning('默认方案不能删除,请先设置其他方案为默认')
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ this.$confirm(`确定删除“${row.name}”吗?`, '提示', {
|
|
|
|
|
+ confirmButtonText: '确定',
|
|
|
|
|
+ cancelButtonText: '取消',
|
|
|
|
|
+ type: 'warning'
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(() => deleteAgentProfitCommissionProfile({ id: row.id }))
|
|
|
|
|
+ .then(() => {
|
|
|
|
|
+ this.$message.success('删除成功')
|
|
|
|
|
+ if (this.tableData.length === 1 && this.page > 1) this.page -= 1
|
|
|
|
|
+ this.getList()
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(() => {})
|
|
|
|
|
+ },
|
|
|
resetForm() {
|
|
resetForm() {
|
|
|
if (this.$refs.commissionForm) this.$refs.commissionForm.resetFields()
|
|
if (this.$refs.commissionForm) this.$refs.commissionForm.resetFields()
|
|
|
this.form = emptyForm()
|
|
this.form = emptyForm()
|
|
|
- },
|
|
|
|
|
- formatDate(date) {
|
|
|
|
|
- const pad = value => String(value).padStart(2, '0')
|
|
|
|
|
- return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`
|
|
|
|
|
- },
|
|
|
|
|
- handleSizeChange(value) {
|
|
|
|
|
- this.limit = value
|
|
|
|
|
- this.page = 1
|
|
|
|
|
- },
|
|
|
|
|
- handleCurrentChange(value) {
|
|
|
|
|
- this.page = value
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -235,6 +315,8 @@ export default {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.commission-panel {
|
|
.commission-panel {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
height: 100%;
|
|
height: 100%;
|
|
|
padding: 20px 20px 12px;
|
|
padding: 20px 20px 12px;
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
@@ -242,12 +324,37 @@ export default {
|
|
|
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.08);
|
|
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.08);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.panel-toolbar {
|
|
|
|
|
- height: 44px;
|
|
|
|
|
|
|
+.commission-search {
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+ padding-bottom: 8px;
|
|
|
|
|
+
|
|
|
|
|
+ ::v-deep .el-form-item {
|
|
|
|
|
+ margin-right: 22px;
|
|
|
|
|
+ margin-bottom: 14px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ::v-deep .el-form-item__label {
|
|
|
|
|
+ color: #303133;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ::v-deep .el-input {
|
|
|
|
|
+ width: 240px;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.search-actions {
|
|
|
|
|
+ margin-right: 0 !important;
|
|
|
|
|
+
|
|
|
|
|
+ ::v-deep .el-form-item__content {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ gap: 10px;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.commission-table {
|
|
.commission-table {
|
|
|
- width: 100%;
|
|
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ min-height: 0;
|
|
|
|
|
|
|
|
::v-deep th {
|
|
::v-deep th {
|
|
|
height: 44px;
|
|
height: 44px;
|
|
@@ -269,6 +376,7 @@ export default {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.commission-pagination {
|
|
.commission-pagination {
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
padding-top: 12px;
|
|
padding-top: 12px;
|
|
|
text-align: right;
|
|
text-align: right;
|
|
|
}
|
|
}
|
|
@@ -277,7 +385,7 @@ export default {
|
|
|
padding: 4px 16px 0;
|
|
padding: 4px 16px 0;
|
|
|
|
|
|
|
|
::v-deep .el-form-item {
|
|
::v-deep .el-form-item {
|
|
|
- margin-bottom: 24px;
|
|
|
|
|
|
|
+ margin-bottom: 20px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-form-item__label {
|
|
::v-deep .el-form-item__label {
|
|
@@ -312,22 +420,17 @@ export default {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.default-tip {
|
|
.default-tip {
|
|
|
- margin: -2px 0 24px 76px;
|
|
|
|
|
- color: #606266;
|
|
|
|
|
- line-height: 24px;
|
|
|
|
|
-
|
|
|
|
|
- strong {
|
|
|
|
|
- margin-left: 10px;
|
|
|
|
|
- color: #f5222d;
|
|
|
|
|
- font-size: 16px;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-.default-form-item {
|
|
|
|
|
- margin-bottom: 0 !important;
|
|
|
|
|
|
|
+ margin-top: 6px;
|
|
|
|
|
+ color: #909399;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ line-height: 20px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.danger-action {
|
|
.danger-action {
|
|
|
color: #f56c6c;
|
|
color: #f56c6c;
|
|
|
|
|
+
|
|
|
|
|
+ &.is-disabled {
|
|
|
|
|
+ color: #c0c4cc;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|