【招生用户端】 新增# 客户管理:对接编辑接口
parent
fed8c9e1a5
commit
b4a860c1c5
|
@ -54,10 +54,19 @@ export const conversitionMap: Record<ConverSuccessEnum, string> = {
|
||||||
[ConverSuccessEnum.YES]: '是',
|
[ConverSuccessEnum.YES]: '是',
|
||||||
[ConverSuccessEnum.NO]: '否'
|
[ConverSuccessEnum.NO]: '否'
|
||||||
}
|
}
|
||||||
|
export enum SexEnum {
|
||||||
|
MALE = 1,
|
||||||
|
FEMALE = 2
|
||||||
|
}
|
||||||
|
export const sexMap: Record<SexEnum, string> = {
|
||||||
|
[SexEnum.MALE]: '男',
|
||||||
|
[SexEnum.FEMALE]: '女'
|
||||||
|
}
|
||||||
|
|
||||||
const keys: Record<string, any> = {
|
const keys: Record<string, any> = {
|
||||||
conversionMap: conversionMap,
|
conversionMap: conversionMap,
|
||||||
ClueSourceMap: ClueSourceMap
|
ClueSourceMap: ClueSourceMap,
|
||||||
|
sexMap: sexMap
|
||||||
}
|
}
|
||||||
const generateConverOptions = (key: string) => {
|
const generateConverOptions = (key: string) => {
|
||||||
const mapKey = keys[key]
|
const mapKey = keys[key]
|
||||||
|
@ -70,3 +79,4 @@ const generateConverOptions = (key: string) => {
|
||||||
}
|
}
|
||||||
export const conversionOptions = generateConverOptions('conversionMap')
|
export const conversionOptions = generateConverOptions('conversionMap')
|
||||||
export const clueSourceOptions = generateConverOptions('ClueSourceMap')
|
export const clueSourceOptions = generateConverOptions('ClueSourceMap')
|
||||||
|
export const sexOptions = generateConverOptions('sexMap')
|
||||||
|
|
|
@ -236,13 +236,21 @@ export function validateGoodsTime(args: any) {
|
||||||
}
|
}
|
||||||
/**身份证号 */
|
/**身份证号 */
|
||||||
export function validateIdCard(rule: any, value: any, callback: any) {
|
export function validateIdCard(rule: any, value: any, callback: any) {
|
||||||
if (value === '') {
|
console.log(value)
|
||||||
callback(new Error('请输入身份证号'))
|
if (value) {
|
||||||
} else if (!idCardReg.test(value)) {
|
if (!idCardReg.test(value)) {
|
||||||
callback(new Error('身份证号格式有误'))
|
callback(new Error('身份证号格式有误'))
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
|
// if (value === '') {
|
||||||
|
// callback(new Error('请输入身份证号'))
|
||||||
|
// } else if (!idCardReg.test(value)) {
|
||||||
|
// callback(new Error('身份证号格式有误'))
|
||||||
|
// } else {
|
||||||
|
// callback()
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
/**服务类别 */
|
/**服务类别 */
|
||||||
export function validateGoodsIds(rule: any, value: any, callback: any) {
|
export function validateGoodsIds(rule: any, value: any, callback: any) {
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
<template>
|
<template>
|
||||||
<ProDialog ref="proDialogRef" @handle-cancel="handleCancel" @handle-confirm="handleConfirm">
|
<ProDialog ref="proDialogRef" @handle-cancel="handleCancel" @handle-confirm="handleConfirm">
|
||||||
<el-form v-model="form" label-postion="right" :label-width="100">
|
<el-form ref="formRef" :rules="rules" :model="form" label-postion="right" :label-width="100">
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="学生名字">
|
<el-form-item label="学生名字" prop="studentName">
|
||||||
<el-input v-model="form.studentName" placeholder="请输入" maxlength="20" show-word-limit />
|
<el-input v-model="form.studentName" placeholder="请输入" maxlength="20" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="性别">
|
<el-form-item label="性别" prop="sex">
|
||||||
<el-radio-group v-model="form.sex">
|
<el-radio-group v-model="form.sex">
|
||||||
<el-radio v-for="option in sexOptions" :key="option.value" :label="option.value">{{ option.label }}</el-radio>
|
<el-radio v-for="option in sexOptions" :key="option.value" :label="option.value">{{ option.label }}</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
|
@ -17,36 +17,36 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="身份证号码">
|
<el-form-item label="身份证号码" prop="idCard">
|
||||||
<el-input v-model="form.idCard" placeholder="请输入" maxlength="18" show-word-limit />
|
<el-input v-model="form.idCard" placeholder="请输入" maxlength="18" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="报读专业">
|
<el-form-item label="报读专业" prop="major">
|
||||||
<el-input v-model="form.major" placeholder="请输入" maxlength="50" show-word-limit />
|
<el-input v-model="form.major" placeholder="请输入" maxlength="50" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="毕业院校">
|
<el-form-item label="毕业院校" prop="graduationSchool">
|
||||||
<el-input v-model="form.graduationSchool" placeholder="请输入" maxlength="50" show-word-limit />
|
<el-input v-model="form.graduationSchool" placeholder="请输入" maxlength="50" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="家庭地址">
|
<el-form-item label="家庭地址" prop="homeAddress">
|
||||||
<el-input v-model="form.homeAddress" placeholder="请输入" maxlength="100" show-word-limit />
|
<el-input v-model="form.homeAddress" placeholder="请输入" maxlength="100" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="家长姓名">
|
<el-form-item label="家长姓名" prop="parentName">
|
||||||
<el-input v-model="form.parentName" placeholder="请输入" maxlength="20" show-word-limit />
|
<el-input v-model="form.parentName" placeholder="请输入" maxlength="20" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="家长电话">
|
<el-form-item label="家长电话" prop="parentPhone">
|
||||||
<el-input v-model="form.parentPhone" placeholder="请输入" maxlength="11" show-word-limit />
|
<el-input v-model="form.parentPhone" placeholder="请输入" maxlength="11" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -77,17 +77,17 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { customerDetail } from '@/api/customer'
|
import type { FormInstance } from 'element-plus'
|
||||||
import ProDialog, { type IParams } from '@/components/ProDialog/index.vue'
|
import ProDialog, { type IParams } from '@/components/ProDialog/index.vue'
|
||||||
import { clueSourceOptions } from '@/enums'
|
import { customerDetail, customerEdit } from '@/api/customer'
|
||||||
|
import { clueSourceOptions, sexOptions } from '@/enums'
|
||||||
|
import { validateIdCard } from '@/utils/validate'
|
||||||
|
import feedback from '@/utils/feedback'
|
||||||
|
|
||||||
const emit = defineEmits(['refreshList'])
|
const emit = defineEmits(['refreshList'])
|
||||||
const proDialogRef = ref<InstanceType<typeof ProDialog>>()
|
|
||||||
|
|
||||||
const sexOptions = ref([
|
const proDialogRef = ref<InstanceType<typeof ProDialog>>()
|
||||||
{ label: '男', value: 1 },
|
const formRef = ref<FormInstance>()
|
||||||
{ label: '女', value: 2 }
|
|
||||||
])
|
|
||||||
const form = ref({
|
const form = ref({
|
||||||
id: '',
|
id: '',
|
||||||
studentName: '',
|
studentName: '',
|
||||||
|
@ -102,7 +102,9 @@ const form = ref({
|
||||||
recruitTeacherName: '',
|
recruitTeacherName: '',
|
||||||
listSource: 0
|
listSource: 0
|
||||||
})
|
})
|
||||||
|
const rules = reactive({
|
||||||
|
idCard: { validator: validateIdCard, trigger: 'blur' }
|
||||||
|
})
|
||||||
const fetchDetail = async (id: number) => {
|
const fetchDetail = async (id: number) => {
|
||||||
try {
|
try {
|
||||||
const result = await customerDetail({ id })
|
const result = await customerDetail({ id })
|
||||||
|
@ -124,8 +126,15 @@ const handleCancel = (callback: () => void) => {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
const handleConfirm = (callback: () => void) => {
|
const handleConfirm = (callback: () => void) => {
|
||||||
|
formRef.value?.validate(async valid => {
|
||||||
|
if (!valid) return
|
||||||
|
try {
|
||||||
|
await customerEdit(form.value)
|
||||||
|
feedback.msgSuccess('编辑成功')
|
||||||
callback()
|
callback()
|
||||||
emit('refreshList')
|
emit('refreshList')
|
||||||
|
} catch (error) {}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
defineExpose({
|
defineExpose({
|
||||||
openDialog
|
openDialog
|
||||||
|
|
|
@ -18,7 +18,8 @@ import { usePaging } from '@/hooks/usePaging'
|
||||||
import { customerLists } from '@/api/customer'
|
import { customerLists } from '@/api/customer'
|
||||||
|
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
studentName: ''
|
studentName: '',
|
||||||
|
parentPhone: ''
|
||||||
})
|
})
|
||||||
const { pager, getLists, resetPage, resetParams } = usePaging({
|
const { pager, getLists, resetPage, resetParams } = usePaging({
|
||||||
fetchFun: customerLists,
|
fetchFun: customerLists,
|
||||||
|
|
|
@ -3,8 +3,11 @@
|
||||||
<el-tabs v-model="activeTab">
|
<el-tabs v-model="activeTab">
|
||||||
<el-tab-pane label="成交用户" name="complete">
|
<el-tab-pane label="成交用户" name="complete">
|
||||||
<ProTable ref="proTableRef" :columns="columns" :tableData="tableData" :loading="loading" :maxHeight="530">
|
<ProTable ref="proTableRef" :columns="columns" :tableData="tableData" :loading="loading" :maxHeight="530">
|
||||||
|
<template #sex="{ row }">
|
||||||
|
<span>{{ sexMap[row.sex as SexEnum] }}</span>
|
||||||
|
</template>
|
||||||
<template #listSource="{ row }">
|
<template #listSource="{ row }">
|
||||||
{{ ClueSourceMap[row.listSource] }}
|
{{ ClueSourceMap[row.listSource as CluseSourceEnum] }}
|
||||||
</template>
|
</template>
|
||||||
<template #operation="{ row }">
|
<template #operation="{ row }">
|
||||||
<slot name="operation" :row="row" />
|
<slot name="operation" :row="row" />
|
||||||
|
@ -16,15 +19,30 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ClueSourceMap } from '@/enums'
|
import { ClueSourceMap, CluseSourceEnum, SexEnum, sexMap } from '@/enums'
|
||||||
|
import type { PropType } from 'vue'
|
||||||
|
|
||||||
|
interface ICustomer {
|
||||||
|
id: number
|
||||||
|
studentName: string
|
||||||
|
sex: SexEnum
|
||||||
|
idCard: string
|
||||||
|
major: string
|
||||||
|
graduationSchool: string
|
||||||
|
homeAddress: string
|
||||||
|
parentName: string
|
||||||
|
parentPhone: string
|
||||||
|
telemarketingTeacherName: string
|
||||||
|
recruitTeacherName: string
|
||||||
|
listSource: CluseSourceEnum
|
||||||
|
}
|
||||||
defineProps({
|
defineProps({
|
||||||
loading: {
|
loading: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
},
|
},
|
||||||
tableData: {
|
tableData: {
|
||||||
type: Array,
|
type: Array as PropType<ICustomer[]>,
|
||||||
default: () => []
|
default: () => []
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
<el-form-item label="学生名字">
|
<el-form-item label="学生名字">
|
||||||
<el-input class="w-[280px]" placeholder="请输入" v-model="modelValue.studentName" clearable @keyup.enter="$emit('resetPage')" />
|
<el-input class="w-[280px]" placeholder="请输入" v-model="modelValue.studentName" clearable @keyup.enter="$emit('resetPage')" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="家长电话">
|
||||||
|
<el-input class="w-[280px]" placeholder="请输入" v-model="modelValue.parentPhone" clearable @keyup.enter="$emit('resetPage')" />
|
||||||
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="$emit('resetPage')">查询</el-button>
|
<el-button type="primary" @click="$emit('resetPage')">查询</el-button>
|
||||||
<el-button @click="$emit('resetParams')">重置</el-button>
|
<el-button @click="$emit('resetParams')">重置</el-button>
|
||||||
|
@ -17,7 +20,8 @@ defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({
|
default: () => ({
|
||||||
studentName: ''
|
studentName: '',
|
||||||
|
parentPhone: ''
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue