@@ -5,8 +5,8 @@ | |||
<link rel="icon" type="image/svg+xml" href="/logo_1.jpg" /> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
<title>后台管理系统</title> | |||
<script type="module" crossorigin src="/assets/index-vJ16TBVk.js"></script> | |||
<link rel="stylesheet" crossorigin href="/assets/index-jOgss7zH.css"> | |||
<script type="module" crossorigin src="/assets/index-a7DrAZSU.js"></script> | |||
<link rel="stylesheet" crossorigin href="/assets/index-7KXeZgtg.css"> | |||
</head> | |||
<body> | |||
<div id="app"></div> |
@@ -39,7 +39,6 @@ | |||
selectValue.value = newVal[1] == '' ? placeholder.value : newVal[1]; | |||
selectDisabled.value = newVal[2]; | |||
mode.value = newVal[3] | |||
debugger | |||
}, { immediate: true }) | |||
@@ -1,12 +1,13 @@ | |||
<template> | |||
<a-row> | |||
<a-col :span="4" style="display: flex;align-items: center;"> | |||
<a-col :span="6" style="display: flex;align-items: center;"> | |||
<menu-unfold-outlined v-if="collapsed" class="trigger" @click="onCollapsed" /> | |||
<menu-fold-outlined v-else class="trigger" @click="onCollapsed" /> | |||
<a-input-search v-model:value="routerValue" placeholder="请输入想进入的管理页面" @keyup.enter="onSearch" | |||
@search="onSearch" style="margin-left: 10px;" /> | |||
<a-cascader v-model:value="value" :options="menuList" :show-search="{ filter }" placeholder="请搜索想进入的管理页面" | |||
:field-names="{ label: 'title', value: 'name', children: 'children' }" @change="inputChange" style="margin-left: 10px;width: 100%;"/> | |||
</a-col> | |||
<a-col :span="20"> | |||
<a-col :span="18"> | |||
<a-row type="flex" justify="end" :gutter="20"> | |||
<a-col flex="200px"> | |||
<div>{{time}}</div> | |||
@@ -34,7 +35,9 @@ | |||
import { getTime } from '@/utils/timeHelper'; | |||
import { useComputed } from '@/hooks/useComputed'; | |||
import { useMenu } from '@/hooks/useMenu'; | |||
import type { ShowSearchType } from 'ant-design-vue/es/cascader'; | |||
let { menuList, onMenu, message } = useMenu(); | |||
let routerValue : string = ref(''); | |||
const time : string = ref(''); | |||
const currentTime = () => { | |||
@@ -48,7 +51,7 @@ | |||
const onCollapsed = () => { | |||
store.commit('getCollapsed'); | |||
} | |||
onMounted(() => { | |||
onMounted(async () => { | |||
currentTime(); | |||
}); | |||
const loginOut = () => { | |||
@@ -56,47 +59,19 @@ | |||
window.location.reload(); | |||
router.replace('/login'); | |||
} | |||
const onSearch = (val) => { | |||
const result = menuList.value.some(item => deepCompareAndMarkChecked(item, val)); | |||
if(result.result == 1) { | |||
onMenu(result.path) | |||
} else { | |||
message.warning('无此页面') | |||
} | |||
const value = ref<string[]>([]); | |||
const filter : ShowSearchType['filter'] = (inputValue, path) => { | |||
const pathLabel = path.map(item => item.title).join(' / '); | |||
return pathLabel.toLowerCase().includes(inputValue.toLowerCase()); | |||
}; | |||
const inputChange = (val, selectedOptions) => { | |||
console.log(val, selectedOptions) | |||
onMenu(selectedOptions[selectedOptions.length - 1].path) | |||
} | |||
const deepCompareAndMarkChecked = (item : Object, str : String) => { | |||
let data = { | |||
result: 0, | |||
path: '' | |||
}; | |||
if (item.meta.title === str) { | |||
return data = { | |||
result: 1, | |||
path: item.path | |||
}; | |||
} | |||
if (item.children && Array.isArray(item.children)) { | |||
for (const child of item.children) { | |||
const result = deepCompareAndMarkChecked(child, str); | |||
if (result === 1) { | |||
return data = { | |||
result: 1, | |||
path: obj.path | |||
}; | |||
} | |||
} | |||
} | |||
return data = { | |||
result: 0, | |||
path: '' | |||
}; | |||
} | |||
</script> | |||
<style> |
@@ -26,6 +26,7 @@ export const useAsRouter = () => { | |||
const finalRouter = originRouter.filter(item => actionsArray.some(action => action.action === item.name)) | |||
.map((item) => ({ | |||
...item, | |||
title: actionsArray.find(action => action.action === item.name)?.name || item.meta.title, | |||
meta: { | |||
...item.meta, | |||
title: actionsArray.find(action => action.action === item.name)?.name || item.meta.title, |
@@ -8,7 +8,7 @@ import 'ant-design-vue/dist/reset.css'; | |||
import { QuillEditor } from '@vueup/vue-quill' | |||
import '@vueup/vue-quill/dist/vue-quill.snow.css'; | |||
import ACOperation from '@/components/cOperation/cOperation.vue'; | |||
import ACTable from '@/components/cTable/cTable.vue'; | |||
@@ -29,7 +29,7 @@ import { Model } from 'node_modules/echarts/index'; | |||
// debugger | |||
// await store.dispatch('permissions/FETCH_PERMISSION'); | |||
// } | |||
// // 这里假设有一个isAuth的getter来检查用户是否已登录 | |||
// if (sessionStorage.getItem('token')) { | |||
// debugger |
@@ -1,3 +1,7 @@ | |||
@import '@vueup/vue-quill/dist/vue-quill.core.css'; | |||
@import '@vueup/vue-quill/dist/vue-quill.snow.css'; | |||
@import '@vueup/vue-quill/dist/vue-quill.bubble.css'; | |||
:root { | |||
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; | |||
line-height: 1.5; |
@@ -43,7 +43,7 @@ | |||
pageSizeOptions: ['10', '20', '30', '40'], | |||
hideOnSinglePage: false, | |||
showSizeChanger: true, | |||
full_name: department_record.value.full_name | |||
full_name: position_record.value.full_name | |||
}; | |||
} catch { | |||
loading.value = false; |
@@ -147,10 +147,11 @@ | |||
if (newVal) { | |||
title.value = '编辑文章'; | |||
addOtherForm.value = { | |||
name: '' | |||
name: '', | |||
content:newVal.content | |||
} | |||
success_img.value = "http://114.132.85.7:8894" + newVal.cover_img; | |||
content.value = newVal.content | |||
success_img.value = "https://rcsc-test.jcjob.cn/img" + newVal.cover_img; | |||
createForm.value = { | |||
id: newVal.id, | |||
title: newVal.title, |
@@ -1,10 +1,13 @@ | |||
<template> | |||
<a-modal v-model:visible="openOtherModel_1" title="招聘会详情" @cancel="cancelModal" width="50%" :footer="null"> | |||
<a-typography> | |||
<a-typography-title :level="3">{{detailData.title}}</a-typography-title> | |||
<a-typography-title :level="3">{{detailData.title}}</a-typography-title> | |||
<a-typography-paragraph>发布时间:{{detailData.created_at}}</a-typography-paragraph> | |||
<a-typography-text > | |||
<div v-html="detailData.content"></div> | |||
<a-typography-text> | |||
<div class="ql-container ql-snow"> | |||
<div class="ql-editor" v-html="detailData.content"> | |||
</div> | |||
</div> | |||
</a-typography-text> | |||
</a-typography> | |||
</a-modal> | |||
@@ -19,11 +22,11 @@ | |||
const emit = defineEmits(); | |||
let props = defineProps(['detail_record']); | |||
let detailData = ref<object>({}) | |||
openOtherModel_1 = computed(() => { | |||
return store.state.openOtherModel_1; | |||
}) | |||
let detail_record = ref<Object>({}); | |||
watch(() => props.detail_record, (newVal1) => { | |||
detail_record.value = newVal1; | |||
@@ -32,21 +35,20 @@ | |||
const getData = async (val) => { | |||
try { | |||
let res = await GetRecruitmentDetail({id: detail_record.value.id}); | |||
let res = await GetRecruitmentDetail({ id: detail_record.value.id }); | |||
console.log(res) | |||
detailData.value = res.data | |||
} catch { | |||
} | |||
} | |||
const cancelModal = () => { | |||
hideOtherModal1() | |||
} | |||
</script> | |||
<style> | |||
</style> | |||
</style> |
@@ -8,7 +8,7 @@ | |||
<a-col><a-button type="primary" size="small" primary @click="edit(record)">编辑/审核</a-button></a-col> | |||
<a-col><a-button type="primary" size="small" primary @click="detail(record)">详情</a-button></a-col> | |||
<a-col><a-button type="primary" size="small" primary | |||
@click="showCompany(record)">企业申请</a-button></a-col> | |||
@click="showCompany(record)">企业审核</a-button></a-col> | |||
<a-col><a-button type="primary" size="small" primary @click="addCompany(record)">加入企业</a-button></a-col> | |||
<a-popconfirm title="是否删除该招聘会?" @confirm="delOneRole(record.id)"> | |||
<a-col><a-button type="primary" size="small" danger>删除</a-button></a-col> |