题目管理已经完善
This commit is contained in:
parent
34e61af9cb
commit
aa02e46894
|
@ -30,3 +30,46 @@ export const useGetQuestionList = (encoding) =>
|
|||
encoding: encoding
|
||||
}
|
||||
})
|
||||
|
||||
export const useAddQuestion = (
|
||||
title,
|
||||
bankId,
|
||||
details,
|
||||
promote,
|
||||
encoding,
|
||||
userId
|
||||
) =>
|
||||
requset.post('question/add_question', {
|
||||
title,
|
||||
bankId,
|
||||
details,
|
||||
promote,
|
||||
encoding,
|
||||
userId
|
||||
})
|
||||
|
||||
export const useUpdateQuestion = (
|
||||
id,
|
||||
title,
|
||||
bankId,
|
||||
details,
|
||||
promote,
|
||||
encoding,
|
||||
userId
|
||||
) =>
|
||||
requset.post('question/update_question', {
|
||||
id,
|
||||
title,
|
||||
bankId,
|
||||
details,
|
||||
promote,
|
||||
encoding,
|
||||
userId
|
||||
})
|
||||
|
||||
export const useDeleteQuestion = (id) =>
|
||||
requset.get('question/del_question', {
|
||||
params: {
|
||||
id: id
|
||||
}
|
||||
})
|
||||
|
|
|
@ -13,3 +13,10 @@ export const useGetUserInfo = (token) =>
|
|||
token: token
|
||||
}
|
||||
})
|
||||
|
||||
export const useAdminLogout = (token) =>
|
||||
request.get('admin/logout', {
|
||||
params: {
|
||||
token: token
|
||||
}
|
||||
})
|
||||
|
|
|
@ -7,6 +7,7 @@ const router = createRouter({
|
|||
{ path: '/login', component: () => import('@/views/login/LoginPage.vue') },
|
||||
{
|
||||
path: '/',
|
||||
redirect: '/home',
|
||||
component: () => import('@/views/layout/LayoutContainer.vue'),
|
||||
|
||||
children: [
|
||||
|
@ -17,6 +18,39 @@ const router = createRouter({
|
|||
{
|
||||
path: '/question/manager',
|
||||
component: () => import('@/views/question/QuestionManager.vue')
|
||||
},
|
||||
{
|
||||
path: '/home',
|
||||
component: () => import('@/views/home/HomeindexPage.vue')
|
||||
},
|
||||
{
|
||||
path: '/manager',
|
||||
component: () => import('@/views/manager/ManagerPage.vue')
|
||||
},
|
||||
{
|
||||
path: '/interview/imageManagement',
|
||||
component: () => import('@/views/interview/ImageManagement.vue')
|
||||
},
|
||||
{
|
||||
path: '/interview/logoManagement',
|
||||
component: () => import('@/views/interview/LogoManagement.vue')
|
||||
},
|
||||
{
|
||||
path: '/interview/backgroundManagement',
|
||||
component: () => import('@/views/interview/BackgroundManagement.vue')
|
||||
},
|
||||
{
|
||||
path: '/recruitment/publicManagement',
|
||||
component: () => import('@/views/recruitment/PublicManagement.vue')
|
||||
},
|
||||
{
|
||||
path: '/recruitment/recruitmentManagement',
|
||||
component: () =>
|
||||
import('@/views/recruitment/RecruitmentManagement.vue')
|
||||
},
|
||||
{
|
||||
path: '/recruitment/jobManagement',
|
||||
component: () => import('@/views/recruitment/JobManagement.vue')
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
<script setup></script>
|
||||
|
||||
<template>我是首页</template>
|
|
@ -0,0 +1,2 @@
|
|||
<script setup></script>
|
||||
<template>我是背景管理</template>
|
|
@ -0,0 +1,2 @@
|
|||
<script setup></script>
|
||||
<template>我是形象管理</template>
|
|
@ -0,0 +1,2 @@
|
|||
<script setup></script>
|
||||
<template>我是Logo管理</template>
|
|
@ -1,25 +1,45 @@
|
|||
<script setup>
|
||||
import {
|
||||
Management,
|
||||
Discount,
|
||||
Files,
|
||||
User,
|
||||
Crop,
|
||||
DocumentCopy,
|
||||
EditPen,
|
||||
SwitchButton,
|
||||
CaretBottom
|
||||
CaretBottom,
|
||||
House,
|
||||
VideoCamera,
|
||||
View,
|
||||
DataBoard,
|
||||
SetUp,
|
||||
Phone,
|
||||
Position,
|
||||
Setting
|
||||
} from '@element-plus/icons-vue'
|
||||
import avatar from '@/assets/default.png'
|
||||
import { useUserStore } from '@/stores'
|
||||
import { useGetUserInfo } from '../../api/user'
|
||||
const userStore = useUserStore()
|
||||
import { useUserStore, useCompanyStore } from '@/stores'
|
||||
import { useAdminLogout } from '../../api/user'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const getUserInfo = async () => {
|
||||
const res = await useGetUserInfo(userStore.token)
|
||||
console.log(res)
|
||||
userStore.setUserInfo(res.data.data)
|
||||
const userStore = useUserStore()
|
||||
const companyStore = useCompanyStore()
|
||||
const router = useRouter()
|
||||
const Logout = async () => {
|
||||
console.log('登出')
|
||||
await useAdminLogout(userStore.token)
|
||||
userStore.removeToken()
|
||||
userStore.removeUserInfo()
|
||||
companyStore.removeEncoding()
|
||||
ElMessage.success('退出成功')
|
||||
router.replace('/login')
|
||||
}
|
||||
const ChangeAvatar = () => {
|
||||
console.log('更换头像')
|
||||
}
|
||||
const RestPassword = () => {
|
||||
console.log('重置密码')
|
||||
}
|
||||
getUserInfo()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -33,33 +53,39 @@ getUserInfo()
|
|||
text-color="#fff"
|
||||
router
|
||||
>
|
||||
<el-menu-item index="/article/channel">
|
||||
<el-icon><Management /></el-icon>
|
||||
<span>员工管理</span>
|
||||
<el-menu-item index="/home">
|
||||
<el-icon><House /></el-icon>
|
||||
<span>首页</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="/manager">
|
||||
<el-icon><User /></el-icon>
|
||||
<span>管理员管理</span>
|
||||
</el-menu-item>
|
||||
|
||||
<el-sub-menu index="/interview">
|
||||
<template #title>
|
||||
<el-icon><Files /></el-icon>
|
||||
<el-icon><VideoCamera /></el-icon>
|
||||
<span>个性化面试</span>
|
||||
</template>
|
||||
<el-menu-item index="">
|
||||
<el-icon><DocumentCopy /></el-icon>
|
||||
|
||||
<el-menu-item index="/interview/imageManagement">
|
||||
<el-icon><View /></el-icon>
|
||||
<span>形象管理</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="">
|
||||
<el-icon><EditPen /></el-icon>
|
||||
<el-menu-item index="/interview/backgroundManagement">
|
||||
<el-icon><DataBoard /></el-icon>
|
||||
<span>背景管理</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="">
|
||||
<el-icon><EditPen /></el-icon>
|
||||
<el-menu-item index="/interview/logoManagement">
|
||||
<el-icon><SetUp /></el-icon>
|
||||
<span>Logo管理</span>
|
||||
</el-menu-item>
|
||||
</el-sub-menu>
|
||||
|
||||
<el-sub-menu index="/question">
|
||||
<el-sub-menu index="/question/type">
|
||||
<template #title>
|
||||
<el-icon><Files /></el-icon>
|
||||
<span>个性化题库</span>
|
||||
<span>题库设置</span>
|
||||
</template>
|
||||
<el-menu-item index="/question/type">
|
||||
<el-icon><DocumentCopy /></el-icon>
|
||||
|
@ -70,6 +96,24 @@ getUserInfo()
|
|||
<span>题目管理</span>
|
||||
</el-menu-item>
|
||||
</el-sub-menu>
|
||||
<el-sub-menu index="/recruitment/publicManagement">
|
||||
<template #title>
|
||||
<el-icon><Phone /></el-icon>
|
||||
<span>招聘</span>
|
||||
</template>
|
||||
<el-menu-item index="/recruitment/publicManagement">
|
||||
<el-icon><Position /></el-icon>
|
||||
<span>招聘发布</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="/recruitment/recruitmentManagement">
|
||||
<el-icon><Setting /></el-icon>
|
||||
<span>招聘管理</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="/recruitment/jobManagement">
|
||||
<el-icon><Discount /></el-icon>
|
||||
<span>招聘管理</span>
|
||||
</el-menu-item>
|
||||
</el-sub-menu>
|
||||
</el-menu>
|
||||
</el-aside>
|
||||
<el-container>
|
||||
|
@ -87,13 +131,22 @@ getUserInfo()
|
|||
<el-dropdown-item command="profile" :icon="User"
|
||||
>基本资料</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item command="avatar" :icon="Crop"
|
||||
<el-dropdown-item
|
||||
command="avatar"
|
||||
:icon="Crop"
|
||||
@click="ChangeAvatar"
|
||||
>更换头像</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item command="password" :icon="EditPen"
|
||||
<el-dropdown-item
|
||||
command="password"
|
||||
:icon="EditPen"
|
||||
@click="RestPassword"
|
||||
>重置密码</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item command="logout" :icon="SwitchButton"
|
||||
<el-dropdown-item
|
||||
command="logout"
|
||||
:icon="SwitchButton"
|
||||
@click="Logout"
|
||||
>退出登录</el-dropdown-item
|
||||
>
|
||||
</el-dropdown-menu>
|
||||
|
@ -103,7 +156,9 @@ getUserInfo()
|
|||
<el-main>
|
||||
<router-view></router-view>
|
||||
</el-main>
|
||||
<el-footer>Ai-面试 ©2023 Created by 扬州大学开发团队</el-footer>
|
||||
<el-footer
|
||||
>Ai-面试后台管理系统 ©2023 Created by 扬州大学开发团队</el-footer
|
||||
>
|
||||
</el-container>
|
||||
</el-container>
|
||||
</template>
|
||||
|
|
|
@ -44,6 +44,7 @@ const goLogin = async () => {
|
|||
console.log(res)
|
||||
userStore.setToken(res.data.data.token)
|
||||
companyStore.setEncoding(res.data.data.encoding)
|
||||
userStore.setUserInfo(res.data.data.userInfo)
|
||||
ElMessage.success('登录成功')
|
||||
router.push('/')
|
||||
}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
<script setup></script>
|
||||
|
||||
<template>我是管理员管理</template>
|
|
@ -3,18 +3,42 @@ import { Edit, Delete, View } from '@element-plus/icons-vue'
|
|||
import { useGetQuestionList } from '@/api/question'
|
||||
import { ref } from 'vue'
|
||||
import { useCompanyStore } from '@/stores'
|
||||
import QuestionEndit from './components/QuestionEndit.vue'
|
||||
import QuestionDelDialog from './components/QuestionDelDialog.vue'
|
||||
import QuestionDetailDialog from './components/QuestionDetailDialog.vue'
|
||||
|
||||
const questionList = ref([])
|
||||
|
||||
const loading = ref(false)
|
||||
|
||||
const companyStore = useCompanyStore()
|
||||
|
||||
const getQuestionList = async () => {
|
||||
loading.value = true
|
||||
const res = await useGetQuestionList(companyStore.encoding)
|
||||
console.log(res.data.data)
|
||||
questionList.value = res.data.data
|
||||
loading.value = false
|
||||
}
|
||||
|
||||
getQuestionList()
|
||||
const questionTypeEndit = ref()
|
||||
const handleEdit = (row) => {
|
||||
questionTypeEndit.value.open(row)
|
||||
}
|
||||
const onAddEdit = () => {
|
||||
questionTypeEndit.value.open({})
|
||||
}
|
||||
const questionDelDialog = ref()
|
||||
|
||||
const handleDelete = (row) => {
|
||||
questionDelDialog.value.openDialog(row)
|
||||
}
|
||||
|
||||
const questionDetailDialog = ref()
|
||||
const showDetail = (row) => {
|
||||
console.log(row)
|
||||
questionDetailDialog.value.openDetail(row)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -49,13 +73,23 @@ getQuestionList()
|
|||
circle
|
||||
plain
|
||||
></el-button>
|
||||
<el-button type="info" :icon="View" plain>更多</el-button>
|
||||
<el-button type="info" :icon="View" plain @click="showDetail(row)"
|
||||
>更多</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<template #empty>
|
||||
<el-empty description="没有数据" />
|
||||
</template>
|
||||
</el-table>
|
||||
<ChannelEdit ref="dialog"></ChannelEdit>
|
||||
<QuestionEndit
|
||||
@getQuestionList="getQuestionList"
|
||||
ref="questionTypeEndit"
|
||||
></QuestionEndit>
|
||||
<QuestionDelDialog
|
||||
@getQuestionList="getQuestionList"
|
||||
ref="questionDelDialog"
|
||||
></QuestionDelDialog>
|
||||
<QuestionDetailDialog ref="questionDetailDialog"> </QuestionDetailDialog>
|
||||
</page-container>
|
||||
</template>
|
||||
|
|
|
@ -6,7 +6,7 @@ import { useCompanyStore } from '@/stores'
|
|||
import { ref } from 'vue'
|
||||
import QuestionTypeEdit from './components/QuestionTypeEdit.vue'
|
||||
|
||||
import QuestionDialog from './components/QuestionDialog.vue'
|
||||
import QuestionTypeDialog from './components/QuestionTypeDialog.vue'
|
||||
|
||||
const questionTypeList = ref([])
|
||||
const loading = ref(false)
|
||||
|
@ -76,9 +76,9 @@ const onAddEdit = () => {
|
|||
@getQuestionTypeList="getQuestionTypeList"
|
||||
ref="dialog"
|
||||
></QuestionTypeEdit>
|
||||
<QuestionDialog
|
||||
<QuestionTypeDialog
|
||||
@getQuestionTypeList="getQuestionTypeList"
|
||||
ref="deleteDialog"
|
||||
></QuestionDialog>
|
||||
></QuestionTypeDialog>
|
||||
</page-container>
|
||||
</template>
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { useDeleteQuestion } from '@/api/question'
|
||||
const centerDialogVisible = ref(false)
|
||||
|
||||
const info = ref({})
|
||||
|
||||
const emit = defineEmits(['getQuestionList'])
|
||||
|
||||
const openDialog = (row) => {
|
||||
info.value = row
|
||||
centerDialogVisible.value = true
|
||||
}
|
||||
|
||||
const handleDelete = async () => {
|
||||
await useDeleteQuestion(info.value.id)
|
||||
|
||||
ElMessage.success('删除成功!')
|
||||
centerDialogVisible.value = false
|
||||
emit('getQuestionList')
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
openDialog
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="centerDialogVisible"
|
||||
title="警告"
|
||||
width="30%"
|
||||
align-center
|
||||
>
|
||||
<span
|
||||
>您确定要删除题目<span class="typeNsme">{{ info.title }}</span
|
||||
>?</span
|
||||
>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="centerDialogVisible = false">取消</el-button>
|
||||
<el-button type="danger" @click="handleDelete"> 确定 </el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.dialog-footer button:first-child {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.typeNsme {
|
||||
font-weight: bold;
|
||||
color: red;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,57 @@
|
|||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
const detailVisible = ref(false)
|
||||
|
||||
const questionDetails = ref({})
|
||||
|
||||
const openDetail = (row) => {
|
||||
detailVisible.value = true
|
||||
questionDetails.value = { ...row }
|
||||
console.log(questionDetails.value)
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
openDetail
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-dialog v-model="detailVisible" title="题目详情" width="30%">
|
||||
<el-form label-width="150px" style="padding-right: 30px">
|
||||
<el-form-item label="题目标题">
|
||||
<el-input :value="questionDetails.title" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="题库类型名">
|
||||
<el-input :value="questionDetails.typeName" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="题目详情">
|
||||
<el-input
|
||||
:value="questionDetails.details"
|
||||
:autosize="{ minRows: 2, maxRows: 6 }"
|
||||
type="textarea"
|
||||
disabled
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="题目promote" prop="promote">
|
||||
<el-input
|
||||
:value="questionDetails.promote"
|
||||
:autosize="{ minRows: 2, maxRows: 6 }"
|
||||
type="textarea"
|
||||
disabled
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建人">
|
||||
<el-input :value="questionDetails.createUserName" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间">
|
||||
<el-input :value="questionDetails.createTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新人">
|
||||
<el-input :value="questionDetails.updateUserName" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新时间">
|
||||
<el-input :value="questionDetails.updateTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</template>
|
|
@ -0,0 +1,156 @@
|
|||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ArrowDown } from '@element-plus/icons-vue'
|
||||
import {
|
||||
useGetTypeList,
|
||||
useAddQuestion,
|
||||
useUpdateQuestion
|
||||
} from '@/api/question'
|
||||
import { useCompanyStore, useUserStore } from '@/stores'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
||||
const emit = defineEmits(['getQuestionList'])
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
|
||||
const open = (row) => {
|
||||
FormModel.value = { ...row }
|
||||
dialogVisible.value = true
|
||||
}
|
||||
const FormModel = ref({})
|
||||
|
||||
const rules = {
|
||||
title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
|
||||
typeName: [{ required: true, message: '请选择题库类型', trigger: 'blur' }],
|
||||
details: [{ required: true, message: '请输入题目详情', trigger: 'blur' }],
|
||||
promote: [{ required: true, message: '请输入题目的promote', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
const companyStore = useCompanyStore()
|
||||
|
||||
const typeList = ref([])
|
||||
|
||||
const getTypeList = async () => {
|
||||
const res = await useGetTypeList(companyStore.encoding)
|
||||
typeList.value = res.data.data
|
||||
}
|
||||
|
||||
const setTypeName = (item) => {
|
||||
FormModel.value.typeName = item.typeName
|
||||
FormModel.value.typeId = item.id
|
||||
}
|
||||
|
||||
const form = ref()
|
||||
|
||||
const userStore = useUserStore()
|
||||
|
||||
const updateForm = async () => {
|
||||
await form.value.validate()
|
||||
const isEndit = FormModel.value.id
|
||||
|
||||
if (isEndit) {
|
||||
//编辑
|
||||
console.log('编辑')
|
||||
await useUpdateQuestion(
|
||||
FormModel.value.id,
|
||||
FormModel.value.title,
|
||||
FormModel.value.typeId,
|
||||
FormModel.value.details,
|
||||
FormModel.value.promote,
|
||||
companyStore.encoding,
|
||||
userStore.userInfo.id
|
||||
)
|
||||
ElMessage.success('修改成功')
|
||||
emit('getQuestionList')
|
||||
dialogVisible.value = false
|
||||
} else {
|
||||
//添加
|
||||
console.log('添加')
|
||||
await useAddQuestion(
|
||||
FormModel.value.title,
|
||||
FormModel.value.typeId,
|
||||
FormModel.value.details,
|
||||
FormModel.value.promote,
|
||||
companyStore.encoding,
|
||||
userStore.userInfo.id
|
||||
)
|
||||
|
||||
ElMessage.success('添加成功')
|
||||
emit('getQuestionList')
|
||||
dialogVisible.value = false
|
||||
}
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
open
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
:title="FormModel.id ? '编辑题目' : '添加题目'"
|
||||
width="30%"
|
||||
>
|
||||
<el-form
|
||||
ref="form"
|
||||
label-width="150px"
|
||||
style="padding-right: 30px"
|
||||
:model="FormModel"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-form-item label="题目标题" prop="title">
|
||||
<el-input
|
||||
v-model="FormModel.title"
|
||||
placeholder="请输入题目标题"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="题库类型名" prop="typeName">
|
||||
<el-dropdown>
|
||||
<el-button type="primary" @click="getTypeList">
|
||||
{{ FormModel.typeName ? FormModel.typeName : '请选择题库类型'
|
||||
}}<el-icon><ArrowDown /></el-icon>
|
||||
</el-button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item
|
||||
v-for="item in typeList"
|
||||
:key="item.id"
|
||||
@click="setTypeName(item)"
|
||||
>{{ item.typeName }}</el-dropdown-item
|
||||
>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</el-form-item>
|
||||
<el-form-item label="题目详情" prop="details">
|
||||
<el-input
|
||||
v-model="FormModel.details"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }"
|
||||
type="textarea"
|
||||
placeholder="请输入题目详情"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="题目promote" prop="promote">
|
||||
<el-input
|
||||
v-model="FormModel.promote"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }"
|
||||
type="textarea"
|
||||
placeholder="请输入题目的promote"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="updateForm"
|
||||
@keydown.enter="keyDown()"
|
||||
>
|
||||
确认
|
||||
</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
|
@ -0,0 +1,3 @@
|
|||
<script setup></script>
|
||||
|
||||
<template>我是岗位管理</template>
|
|
@ -0,0 +1,2 @@
|
|||
<script setup></script>
|
||||
<template>我是招聘发布</template>
|
|
@ -0,0 +1,2 @@
|
|||
<script setup></script>
|
||||
<template>我是招聘管理</template>
|
Loading…
Reference in New Issue