【招生用户端】 优化# 子账号管理:账号状态

main
kaeery 2025-02-27 19:35:40 +08:00
parent 314c71a520
commit 889efd326d
3 changed files with 35 additions and 19 deletions

View File

@ -6,3 +6,7 @@ export enum DataFlowEnum {
DEFAULT = 0, DEFAULT = 0,
SPECIFIC = 1 SPECIFIC = 1
} }
export enum isDisabledEnum {
YES = 1,
NO = 0
}

View File

@ -54,8 +54,8 @@
</template> </template>
</el-form-item> </el-form-item>
</template> </template>
<el-form-item label="账号状态" prop="status"> <el-form-item label="账号状态" prop="isDisable">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.isDisable">
<el-radio v-for="option in accountStatusOptions" :key="option.value" :label="option.value">{{ option.label }}</el-radio> <el-radio v-for="option in accountStatusOptions" :key="option.value" :label="option.value">{{ option.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
@ -68,9 +68,9 @@ import { organzationLists } from '@/api/account_center/organization'
import { postLists } from '@/api/account_center/postion' import { postLists } from '@/api/account_center/postion'
import { subAccountAdd, subAccountDetail, subAccountEdit } from '@/api/account_center/sub_account' import { subAccountAdd, subAccountDetail, subAccountEdit } from '@/api/account_center/sub_account'
import ProDialog, { type IParams } from '@/components/ProDialog/index.vue' import ProDialog, { type IParams } from '@/components/ProDialog/index.vue'
import { DataFlowEnum, StatusEnum } from '@/enums' import { DataFlowEnum, isDisabledEnum } from '@/enums'
import { validateContact } from '@/utils/validate' import { validateContact } from '@/utils/validate'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance } from 'element-plus'
export interface IAccount { export interface IAccount {
organizationId: number | string organizationId: number | string
@ -78,7 +78,7 @@ export interface IAccount {
mobile: string mobile: string
postId: number[] postId: number[]
dataFlow: number dataFlow: number
accountStatus: number isDisable: number
teacher: string teacher: string
} }
const proDialogRef = ref<InstanceType<typeof ProDialog>>() const proDialogRef = ref<InstanceType<typeof ProDialog>>()
@ -97,8 +97,8 @@ const channelOptions = ref([
{ label: '组织指定', value: DataFlowEnum.SPECIFIC } { label: '组织指定', value: DataFlowEnum.SPECIFIC }
]) ])
const accountStatusOptions = ref([ const accountStatusOptions = ref([
{ label: '启用', value: 1 }, { label: '启用', value: isDisabledEnum.NO },
{ label: '停用', value: 2 } { label: '停用', value: isDisabledEnum.YES }
]) ])
const channelTooltips = ['选择默认组织则数据流向到所属组织下的所有招生老师;', '选择组织指定则可选择将数据流向到所属组织下的指定招生老师;'] const channelTooltips = ['选择默认组织则数据流向到所属组织下的所有招生老师;', '选择组织指定则可选择将数据流向到所属组织下的指定招生老师;']
const form = ref({ const form = ref({
@ -108,7 +108,7 @@ const form = ref({
mobile: '', mobile: '',
postIds: [], postIds: [],
dataFlow: 0, dataFlow: 0,
status: 1, isDisable: 0,
teacher: '' teacher: ''
}) })
const fetchPostionData = async (callback?: (params: []) => void) => { const fetchPostionData = async (callback?: (params: []) => void) => {
@ -135,7 +135,7 @@ const setDsiabled = (nodes: any[]) => {
nodes.forEach(node => { nodes.forEach(node => {
const ancestorArray = node.ancestors ? node.ancestors.split(',') : [] const ancestorArray = node.ancestors ? node.ancestors.split(',') : []
const level = ancestorArray.length - 1 const level = ancestorArray.length - 1
node.disabled = level < 2 || node.status == StatusEnum.Stop node.disabled = level < 2 || node.isDisable == isDisabledEnum.YES
if (node.children && node.children.length > 0) { if (node.children && node.children.length > 0) {
setDsiabled(node.children) setDsiabled(node.children)
} }

View File

@ -9,7 +9,7 @@
<el-button type="danger" plain :icon="Delete" :disabled="isDisabled" @click="handleBatchDelete"></el-button> <el-button type="danger" plain :icon="Delete" :disabled="isDisabled" @click="handleBatchDelete"></el-button>
</el-space> </el-space>
<el-space> <el-space>
<el-input :placeholder="`请输入${placeholder}`" v-model="searchForm.keyword" @input="handleInputChange"> <el-input :placeholder="`请输入${placeholder}`" v-model="searchForm.keyword" clearable @input="handleInputChange">
<template #prepend> <template #prepend>
<el-select v-model="selectKey" :placeholder="placeholder" class="w-[100px]"> <el-select v-model="selectKey" :placeholder="placeholder" class="w-[100px]">
<el-option v-for="option in searchOptions" :key="option.field" :label="option.label" :value="option.field" /> <el-option v-for="option in searchOptions" :key="option.field" :label="option.label" :value="option.field" />
@ -37,8 +37,13 @@
</span> </span>
</el-space> </el-space>
</template> </template>
<template #accountStatus="{ row }"> <template #isDisable="{ row }">
<el-switch v-model="row.accountStatus" :active-value="1" :inactive-value="0" :before-change="() => handleStatusChange(row)" /> <el-switch
v-model="row.isDisable"
:active-value="isDisabledEnum.NO"
:inactive-value="isDisabledEnum.YES"
:before-change="() => handleStatusChange(row)"
/>
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button link type="primary" @click="handleEdit(row)"></el-button> <el-button link type="primary" @click="handleEdit(row)"></el-button>
@ -57,7 +62,8 @@ import { Plus, Delete } from '@element-plus/icons-vue'
import accountDialog from '../components/account-list/account-dialog.vue' import accountDialog from '../components/account-list/account-dialog.vue'
import { useDebounceFn } from '@vueuse/core' import { useDebounceFn } from '@vueuse/core'
import { subAccountDelete, subAccountList } from '@/api/account_center/sub_account' import { subAccountDelete, subAccountList } from '@/api/account_center/sub_account'
import { StatusEnum } from '@/enums' import { StatusEnum, isDisabledEnum } from '@/enums'
import { omit } from 'lodash-es'
const props = defineProps({ const props = defineProps({
curOrganization: { curOrganization: {
@ -74,8 +80,8 @@ const searchOptions = shallowRef([
]) ])
const placeholder = computed(() => searchOptions.value.find(item => item.field == selectKey.value)?.label) const placeholder = computed(() => searchOptions.value.find(item => item.field == selectKey.value)?.label)
const accountStatusOptions = ref([ const accountStatusOptions = ref([
{ label: '启用', value: StatusEnum.Normal }, { label: '启用', value: isDisabledEnum.NO },
{ label: '停用', value: StatusEnum.Stop } { label: '停用', value: isDisabledEnum.YES }
]) ])
const loading = ref(false) const loading = ref(false)
const proTableRef = ref() const proTableRef = ref()
@ -86,7 +92,7 @@ const columns = reactive([
{ prop: 'mobile', label: '联系电话', width: 180 }, { prop: 'mobile', label: '联系电话', width: 180 },
{ prop: 'organizationName', label: '所属组织', width: 180 }, { prop: 'organizationName', label: '所属组织', width: 180 },
{ prop: 'postName', label: '岗位', width: 180 }, { prop: 'postName', label: '岗位', width: 180 },
{ prop: 'status', label: '账号状态', width: 180 }, { prop: 'isDisable', label: '账号状态', width: 180 },
{ prop: 'operation', label: '操作', fixed: 'right', width: 250 } { prop: 'operation', label: '操作', fixed: 'right', width: 250 }
]) ])
@ -96,8 +102,10 @@ const isDisabledAdd = computed(() => props.curOrganization.status == StatusEnum.
const fetchTableList = async (nodeId?: number) => { const fetchTableList = async (nodeId?: number) => {
loading.value = true loading.value = true
try { try {
const newParams = omit(searchForm.value, ['keyword'])
const params = { const params = {
organizationId: nodeId ?? props.curOrganization.id organizationId: nodeId ?? props.curOrganization.id,
...newParams
} }
const result = await subAccountList(params) const result = await subAccountList(params)
tableData.value = result ?? [] tableData.value = result ?? []
@ -163,7 +171,9 @@ const showAccountDialog = (row?: any) => {
const searchForm = ref({ const searchForm = ref({
keyword: '', keyword: '',
postId: '', postId: '',
status: '' isDisable: '',
username: '',
mobile: ''
}) })
const handleInputChange = useDebounceFn(() => { const handleInputChange = useDebounceFn(() => {
const formMap: Record<string, string> = { const formMap: Record<string, string> = {
@ -171,9 +181,11 @@ const handleInputChange = useDebounceFn(() => {
mobile: '' mobile: ''
} }
formMap[selectKey.value] = searchForm.value.keyword formMap[selectKey.value] = searchForm.value.keyword
searchForm.value[selectKey.value] = formMap[selectKey.value]
fetchTableList()
}, 500) }, 500)
const handleSelectChange = () => { const handleSelectChange = () => {
console.log('handleSelectChange') fetchTableList()
} }
const positionOptions = ref<any[]>([]) const positionOptions = ref<any[]>([])