【招生主控端】 新增# 对接账号中心接口

master
kaeery 2025-02-26 15:59:43 +08:00
parent 967288bbb9
commit cb3627ebca
4 changed files with 105 additions and 38 deletions

View File

@ -2,17 +2,21 @@ import request from '@/utils/request'
// 添加账号 // 添加账号
export function accountAdd(params: Record<string, any>) { export function accountAdd(params: Record<string, any>) {
return request.post({ url: 'api/client/add', params }) return request.post({ url: '/client/add', params })
} }
// 编辑账号 // 编辑账号
export function accountEdit(params: Record<string, any>) { export function accountEdit(params: Record<string, any>) {
return request.post({ url: 'api/client/edit', params }) return request.post({ url: '/client/edit', params })
} }
// 账号详情 // 账号详情
export function accountDetail(params: Record<string, any>) { export function accountDetail(params: Record<string, any>) {
return request.post({ url: 'api/client/detail', params }) return request.get({ url: '/client/detail', params })
} }
// 账号列表 // 账号列表
export function accountList(params: Record<string, any>) { export function accountList(params: Record<string, any>) {
return request.post({ url: 'api/client/list', params }) return request.get({ url: '/client/list', params })
}
// 账号状态
export function accountStatus(params: Record<string, any>) {
return request.post({ url: '/client/updateStatus', params })
} }

View File

@ -1,5 +1,5 @@
export enum StatusEnum { export enum StatusEnum {
Normal = 1, Normal = 0,
Stop = 2, Stop = 1,
Expired = 3 Expired = 2
} }

View File

@ -1,14 +1,20 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="400px" @confirm="handleSubmit" @close="handleClose"> <popup ref="popupRef" :title="popupTitle" :async="true" width="480px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules">
<el-form-item label="账号名称" prop="accountName"> <el-form-item label="账号名称" prop="account">
<el-input v-model="formData.accountName" placeholder="请输入账号名称" clearable :maxlength="20" show-word-limit /> <el-input v-model="formData.account" placeholder="请输入账号名称" clearable :maxlength="20" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="账号名额" prop="accountNumber"> <el-form-item v-if="formData.id == ''" label="账号密码" prop="password">
<el-input-number v-model="formData.accountNumber" :min="1" :max="9999" style="width: 100%" /> <el-input v-model="formData.password" placeholder="请输入账号密码" clearable :maxlength="20" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="有效期" prop="range"> <el-form-item label="客户名称" prop="clientName">
<el-input v-model="formData.clientName" placeholder="请输入客户名称" clearable :maxlength="20" show-word-limit />
</el-form-item>
<el-form-item label="账号名额" prop="quota">
<el-input-number v-model="formData.quota" :min="1" :max="99999" style="width: 100%" />
</el-form-item>
<el-form-item label="有效期" prop="range" class="range">
<daterange-picker <daterange-picker
type="datetimerange" type="datetimerange"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
@ -19,9 +25,6 @@
v-model:endTime="formData.range.endTime" v-model:endTime="formData.range.endTime"
/> />
</el-form-item> </el-form-item>
<el-form-item label="账号状态" prop="status">
<el-switch v-model="formData.status" :active-value="StatusEnum.Normal" :inactive-value="StatusEnum.Stop" />
</el-form-item>
</el-form> </el-form>
</popup> </popup>
</div> </div>
@ -31,7 +34,7 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { accountAdd, accountDetail, accountEdit } from '@/api/account_center' import { accountAdd, accountDetail, accountEdit } from '@/api/account_center'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import { StatusEnum } from '@/enums' import { omit } from 'lodash-es'
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
@ -43,13 +46,14 @@ const popupTitle = computed(() => {
}) })
const formData = reactive({ const formData = reactive({
id: '', id: '',
accountName: '', account: '',
accountNumber: '', password: '',
clientName: '',
quota: 1,
range: { range: {
startTime: '', startTime: '',
endTime: '' endTime: ''
}, }
status: 1
}) })
const validaeRange = (rule: any, value: any, callback: any) => { const validaeRange = (rule: any, value: any, callback: any) => {
if (value.startTime == '' || value.endTime == '') { if (value.startTime == '' || value.endTime == '') {
@ -59,29 +63,44 @@ const validaeRange = (rule: any, value: any, callback: any) => {
} }
} }
const formRules = { const formRules = {
accountName: [ account: [
{ {
required: true, required: true,
message: '请输入账号名称', message: '请输入账号名称',
trigger: ['blur'] trigger: ['blur']
} }
], ],
accountNumber: [ password: [
{
required: true,
message: '请输入账号密码',
trigger: ['blur']
}
],
clientName: [
{
required: true,
message: '请输入客户名称',
trigger: ['blur']
}
],
quota: [
{ {
required: true, required: true,
message: '请输入账号名额', message: '请输入账号名额',
trigger: ['blur'] trigger: ['blur']
} }
], ],
range: [{ validator: validaeRange, trigger: 'change' }], range: [{ validator: validaeRange, trigger: 'change' }]
status: { required: true, message: '请选择账号状态', trigger: 'change' }
} }
const shortcuts = [ const shortcuts = [
{ {
text: '今天', text: '今天',
value: () => { value: () => {
const end = new Date()
const start = new Date() const start = new Date()
const end = new Date()
start.setHours(0, 0, 0, 0)
end.setHours(23, 59, 59, 999)
return [start, end] return [start, end]
} }
}, },
@ -91,6 +110,8 @@ const shortcuts = [
const start = new Date() const start = new Date()
const end = new Date() const end = new Date()
end.setDate(end.getDate() + 7) end.setDate(end.getDate() + 7)
start.setHours(0, 0, 0, 0)
end.setHours(23, 59, 59, 999)
return [start, end] return [start, end]
} }
}, },
@ -100,6 +121,8 @@ const shortcuts = [
const start = new Date() const start = new Date()
const end = new Date() const end = new Date()
end.setMonth(end.getMonth() + 1) end.setMonth(end.getMonth() + 1)
start.setHours(0, 0, 0, 0)
end.setHours(23, 59, 59, 999)
return [start, end] return [start, end]
} }
}, },
@ -109,6 +132,8 @@ const shortcuts = [
const start = new Date() const start = new Date()
const end = new Date() const end = new Date()
end.setMonth(end.getMonth() + 3) end.setMonth(end.getMonth() + 3)
start.setHours(0, 0, 0, 0)
end.setHours(23, 59, 59, 999)
return [start, end] return [start, end]
} }
}, },
@ -118,6 +143,8 @@ const shortcuts = [
const start = new Date() const start = new Date()
const end = new Date() const end = new Date()
end.setMonth(end.getMonth() + 6) end.setMonth(end.getMonth() + 6)
start.setHours(0, 0, 0, 0)
end.setHours(23, 59, 59, 999)
return [start, end] return [start, end]
} }
}, },
@ -127,13 +154,21 @@ const shortcuts = [
const start = new Date() const start = new Date()
const end = new Date() const end = new Date()
end.setFullYear(end.getFullYear() + 1) end.setFullYear(end.getFullYear() + 1)
start.setHours(0, 0, 0, 0)
end.setHours(23, 59, 59, 999)
return [start, end] return [start, end]
} }
} }
] ]
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
mode.value == 'edit' ? await accountEdit(formData) : await accountAdd(formData) const { startTime, endTime } = formData.range
Object.assign(formData, {
startTime: startTime,
expirationTime: endTime
})
const newFormData = omit(formData, ['range'])
mode.value == 'edit' ? await accountEdit(newFormData) : await accountAdd(newFormData)
feedback.msgSuccess('操作成功') feedback.msgSuccess('操作成功')
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
@ -150,6 +185,8 @@ const setFormData = (data: Record<any, any>) => {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
} }
formData.range.startTime = data['startTime']
formData.range.endTime = data['expirationTime']
} }
} }
@ -170,3 +207,15 @@ defineExpose({
getDetail getDetail
}) })
</script> </script>
<style lang="scss" scoped>
:deep(.range) {
.el-form-item__label {
&::before {
content: '* ';
margin-right: 2px;
color: #f5222d;
}
}
}
</style>

View File

@ -2,7 +2,7 @@
<div class="post-lists"> <div class="post-lists">
<el-card class="!border-none" shadow="never"> <el-card class="!border-none" shadow="never">
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true"> <el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="账号名称"> <el-form-item label="客户名称">
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入" @keyup.enter="resetPage" /> <el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入" @keyup.enter="resetPage" />
</el-form-item> </el-form-item>
<el-form-item label="账号状态"> <el-form-item label="账号状态">
@ -28,22 +28,32 @@
</el-button> </el-button>
</div> </div>
<el-table class="mt-4" size="large" v-loading="pager.loading" :data="pager.lists"> <el-table class="mt-4" size="large" v-loading="pager.loading" :data="pager.lists">
<el-table-column label="账号名称" prop="accountName" min-width="100" /> <el-table-column label="客户名称" prop="account" min-width="100" />
<el-table-column label="账号名额" prop="accountNumber" min-width="100"> <el-table-column label="账号名额" prop="quota" min-width="100">
<template #default="{ row }"> <template #default="{ row }">
<span class="text-primary">{{ row.accountNumber }}</span> <span class="text-primary">{{ row.quota }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="已使用" prop="useNumber" min-width="100" /> <el-table-column label="已使用" prop="quantity" />
<el-table-column label="未使用" prop="unuseNumber" min-width="100" /> <el-table-column label="未使用" prop="">
<el-table-column label="账号状态" prop="status" min-width="100"> <template #default="{ row }">
<span>{{ row.quota - row.quantity }}</span>
</template>
</el-table-column>
<el-table-column label="账号状态" prop="status" width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-tag class="ml-2" :type="tagType(row.status)"> <el-tag class="ml-2" :type="tagType(row.status)">
{{ parseStatusText(row.status) }} {{ parseStatusText(row.status) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="账号有效期" prop="expiresDate" min-width="100" /> <el-table-column label="账号有效期" prop="" width="250">
<template #default="{ row }">
<span>{{ formatDate(row.startTime, 'YYYY-MM-DD') }}</span>
<span>{{ formatDate(row.expirationTime, 'YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="180" fixed="right"> <el-table-column label="操作" width="180" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="handleEdit(row)"></el-button> <el-button type="primary" link @click="handleEdit(row)"></el-button>
@ -63,9 +73,10 @@
<script lang="ts" setup name="post"> <script lang="ts" setup name="post">
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { accountList } from '@/api/account_center' import { accountList, accountStatus } from '@/api/account_center'
import { StatusEnum } from '@/enums' import { StatusEnum } from '@/enums'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import dayjs from 'dayjs'
const statusMap: Record<StatusEnum, string> = { const statusMap: Record<StatusEnum, string> = {
[StatusEnum.Normal]: '启用', [StatusEnum.Normal]: '启用',
@ -105,11 +116,14 @@ const handleEdit = async (data: any) => {
const handleChangeStatus = async row => { const handleChangeStatus = async row => {
const { id, status } = row const { id, status } = row
const msg = status == StatusEnum.Normal ? '停用' : '启用' const msg = status == StatusEnum.Normal ? '停用' : '启用'
const statusVal = status == StatusEnum.Normal ? StatusEnum.Stop : StatusEnum.Normal
await feedback.confirm(`确定要${msg}该账号?`) await feedback.confirm(`确定要${msg}该账号?`)
// await postDelete({ id }) await accountStatus({ id, status: statusVal })
feedback.msgSuccess(`${msg}成功`) feedback.msgSuccess(`${msg}成功`)
getLists() getLists()
} }
const formatDate = (value: string, format = 'YYYY-MM-DD HH:mm:ss') => {
return dayjs(value).format(format)
}
getLists() getLists()
</script> </script>