1.优化开奖逻辑
2.优化后台开奖派彩 3.优化接口规范
This commit is contained in:
@@ -41,6 +41,42 @@
|
||||
valueOnClear: 0,
|
||||
}"
|
||||
/>
|
||||
<p
|
||||
v-if="!isRootGroup"
|
||||
class="group-channel-inherit-hint"
|
||||
:style="{ paddingLeft: (baTable.form.labelWidth ?? 120) + 'px' }"
|
||||
>
|
||||
{{ t('auth.group.channel_inherit_hint') }}
|
||||
</p>
|
||||
|
||||
<!-- 顶级+超管:可选渠道;展示只读渠道名称(channel_id 仅由表单传给后端) -->
|
||||
<FormItem
|
||||
v-if="isRootGroup && adminInfo.super"
|
||||
:label="t('auth.group.channel_id')"
|
||||
v-model="baTable.form.items!.channel_id"
|
||||
type="remoteSelect"
|
||||
prop="channel_id"
|
||||
:input-attr="{
|
||||
pk: 'id',
|
||||
field: 'name',
|
||||
remoteUrl: '/admin/channel/index',
|
||||
placeholder: t('Click select'),
|
||||
emptyValues: ['', null, undefined, 0],
|
||||
valueOnClear: null,
|
||||
}"
|
||||
/>
|
||||
<template v-if="isRootGroup && adminInfo.super && channelPreviewName">
|
||||
<el-form-item :label="t('auth.group.channel_name')">
|
||||
<el-input :model-value="channelPreviewName" readonly />
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<!-- 子级:只读展示上级对应渠道名称,不提交 channel_id(由后端按父级写入) -->
|
||||
<template v-if="!isRootGroup && channelPreviewName">
|
||||
<el-form-item :label="t('auth.group.channel_name')">
|
||||
<el-input :model-value="channelPreviewName" readonly />
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<el-form-item prop="name" :label="t('auth.group.Group name')">
|
||||
<el-input
|
||||
@@ -103,7 +139,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, inject, useTemplateRef } from 'vue'
|
||||
import { reactive, inject, useTemplateRef, computed, watch } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import type baTableClass from '/@/utils/baTable'
|
||||
import FormItem from '/@/components/formItem/index.vue'
|
||||
@@ -112,6 +148,7 @@ import { buildValidatorData } from '/@/utils/validate'
|
||||
import type Node from 'element-plus/es/components/tree/src/model/node'
|
||||
import { useConfig } from '/@/stores/config'
|
||||
import { useAdminInfo } from '/@/stores/adminInfo'
|
||||
import createAxios from '/@/utils/axios'
|
||||
|
||||
const config = useConfig()
|
||||
const adminInfo = useAdminInfo()
|
||||
@@ -120,10 +157,100 @@ const treeRef = useTemplateRef('treeRef')
|
||||
const baTable = inject('baTable') as baTableClass
|
||||
|
||||
const { t } = useI18n()
|
||||
const isRootGroup = computed(() => {
|
||||
const p = baTable.form.items?.pid
|
||||
if (p === undefined || p === null || p === '') {
|
||||
return true
|
||||
}
|
||||
return Number(p) === 0
|
||||
})
|
||||
|
||||
const strFromRow = (key: string): string => {
|
||||
const row = baTable.form.items
|
||||
if (!row) return ''
|
||||
const v = row[key]
|
||||
return typeof v === 'string' ? v : ''
|
||||
}
|
||||
|
||||
const channelPreviewName = computed(() => strFromRow('channel_name'))
|
||||
|
||||
const shouldDisableCommissionRate = () => {
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* 子角色组:选择上级分组后,只拉取展示用渠道名;channel_id 由后端按父级保存,不在此写入提交字段。
|
||||
*/
|
||||
watch(
|
||||
() => baTable.form.items?.pid,
|
||||
async (pid, oldPid) => {
|
||||
const items = baTable.form.items
|
||||
if (!items || !baTable.form.operate || !['Add', 'Edit'].includes(baTable.form.operate)) {
|
||||
return
|
||||
}
|
||||
const pidNum = Number(pid ?? 0)
|
||||
const oldNum = oldPid === undefined || oldPid === null || oldPid === '' ? null : Number(oldPid)
|
||||
|
||||
if (pidNum === 0) {
|
||||
if (adminInfo.super && oldNum !== null && oldNum !== 0) {
|
||||
items.channel_id = null
|
||||
items['channel_name'] = ''
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
delete items.channel_id
|
||||
|
||||
try {
|
||||
const res = await createAxios(
|
||||
{
|
||||
url: '/admin/auth.Group/edit',
|
||||
method: 'get',
|
||||
params: { id: pidNum },
|
||||
},
|
||||
{ showErrorMessage: false, showCodeMessage: false }
|
||||
)
|
||||
const row = res.data.row
|
||||
if (row) {
|
||||
items['channel_name'] = typeof row.channel_name === 'string' ? row.channel_name : ''
|
||||
}
|
||||
} catch {
|
||||
items['channel_name'] = ''
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
/** 顶级+超管:所选渠道变更时刷新只读渠道名 */
|
||||
watch(
|
||||
() => baTable.form.items?.channel_id,
|
||||
async (cid) => {
|
||||
const items = baTable.form.items
|
||||
if (!items || !baTable.form.operate || !['Add', 'Edit'].includes(baTable.form.operate)) {
|
||||
return
|
||||
}
|
||||
if (!isRootGroup.value || !adminInfo.super) {
|
||||
return
|
||||
}
|
||||
if (cid === null || cid === undefined || cid === '') {
|
||||
items['channel_name'] = ''
|
||||
return
|
||||
}
|
||||
try {
|
||||
const res = await createAxios(
|
||||
{
|
||||
url: '/admin/auth.Group/channelBindPreview',
|
||||
method: 'get',
|
||||
params: { channel_id: cid },
|
||||
},
|
||||
{ showErrorMessage: false, showCodeMessage: false }
|
||||
)
|
||||
items['channel_name'] = typeof res.data.channel_name === 'string' ? res.data.channel_name : ''
|
||||
} catch {
|
||||
items['channel_name'] = ''
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
const rules: Partial<Record<string, FormItemRule[]>> = reactive({
|
||||
name: [buildValidatorData({ name: 'required', title: t('auth.group.Group name') })],
|
||||
commission_rate: [
|
||||
@@ -194,6 +321,14 @@ defineExpose({
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.group-channel-inherit-hint {
|
||||
margin: -6px 0 14px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
color: var(--el-text-color-secondary);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.commission-rate-alert {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user