diff --git a/src/api/knowledgeCentre.ts b/src/api/knowledgeCentre.ts new file mode 100644 index 0000000..3171c9e --- /dev/null +++ b/src/api/knowledgeCentre.ts @@ -0,0 +1,50 @@ +import { http } from "@/utils/http"; + +/** 查询知识库分页 */ + +export const queryKnowledgePage = (data?: object) => { + return http.request("get", "/know-sub/knowledge/queryKnowledgePage", { + params: data + }); +}; +/** 新增知识库*/ +export const saveKnowledge = (data?: object) => { + return http.request("post", "/know-sub/knowledge/saveKnowledge", { + data + }); +}; + +/** 修改知识库(*/ +export const updateKnowledge = (data?: object) => { + return http.request("post", "/know-sub/knowledge/updateKnowledge", { + data + }); +}; +/** 分页查询部门信息列表 */ + +export const queryDeptManageList = (data?: object) => { + return http.request("get", "/know-sub/deptManage/list", { + params: data + }); +}; +/** 分页查询应用子库 */ + +export const queryApplicationSubLibrary = (data?: object) => { + return http.request("get", "/know-sub/applicationSubLibrary/list", { + params: data + }); +}; +/** 删除知识库 */ + +export const deleteKnowledge = (data?: object) => { + return http.request("get", "/know-sub/knowledge/deleteKnowledge", { + params: data + }); +}; +/** 查看知识的详细信息 */ + +export const queryKnowledgeDetail = (data?: object) => { + return http.request("get", "/know-sub/knowledge/queryKnowledgeDetail", { + params: data + }); +}; diff --git a/src/api/user.ts b/src/api/user.ts index a72733c..d3f3ee8 100644 --- a/src/api/user.ts +++ b/src/api/user.ts @@ -24,7 +24,7 @@ export type RefreshTokenResult = { /** 登录 */ export const getLogin = (data?: object) => { - return http.request("post", "/virtual-patient/user/login", { + return http.request("post", "/know-sub/user/login", { data }); }; diff --git a/src/api/utils.ts b/src/api/utils.ts index 382baa7..85c0f95 100644 --- a/src/api/utils.ts +++ b/src/api/utils.ts @@ -15,7 +15,7 @@ export const queryCommonDictTree = (data?: object) => { export const uploadFile = (data?: object) => { return http.request( "post", - "/virtual-patient-manage/fileManage/uploadFile", + "/know-sub/file/uploade", { data }, { headers: { "Content-Type": "multipart/form-data" } } ); diff --git a/src/assets/knowledge/del.png b/src/assets/knowledge/del.png new file mode 100644 index 0000000..9e96054 Binary files /dev/null and b/src/assets/knowledge/del.png differ diff --git a/src/assets/knowledge/success.png b/src/assets/knowledge/success.png new file mode 100644 index 0000000..a6c295c Binary files /dev/null and b/src/assets/knowledge/success.png differ diff --git a/src/assets/knowledge/warn.png b/src/assets/knowledge/warn.png new file mode 100644 index 0000000..1668bfb Binary files /dev/null and b/src/assets/knowledge/warn.png differ diff --git a/src/assets/login/login_bg.png b/src/assets/login/login_bg.png index c3a28d1..4430095 100644 Binary files a/src/assets/login/login_bg.png and b/src/assets/login/login_bg.png differ diff --git a/src/components/WangEditor/index.vue b/src/components/WangEditor/index.vue index 6ffdbaf..d254b5a 100644 --- a/src/components/WangEditor/index.vue +++ b/src/components/WangEditor/index.vue @@ -1,26 +1,37 @@ @@ -33,6 +44,8 @@ export default { components: { Editor, Toolbar }, setup() { + const title = ref(""); + const isError = ref(false); // 编辑器实例,必须用 shallowRef,重要! const editorRef = shallowRef(); @@ -173,9 +186,14 @@ export default { if (editor == null) return; valueHtml.value = val; }; + const initTitle = val => { + title.value = val; + }; return { editorRef, mode: "simple", + title, + isError, valueHtml, toolbarConfig, editorConfig, @@ -189,8 +207,49 @@ export default { insertText, printHtml, disable, - initText + initText, + initTitle }; } }; + diff --git a/src/layout/components/appHeader/index.vue b/src/layout/components/appHeader/index.vue index d5371f4..fc1059f 100644 --- a/src/layout/components/appHeader/index.vue +++ b/src/layout/components/appHeader/index.vue @@ -9,8 +9,12 @@ import { onMounted } from "vue"; import { useRouter } from "vue-router"; import { getParentPaths } from "@/router/utils"; import { useTabsStore } from "@/store/modules/tabs"; -import { da } from "element-plus/es/locale"; +import IconParkOutline from "@iconify-icons/icon-park-outline/logout"; +import { getUserInfo } from "@/utils/auth"; +const { logout, userAvatar } = useNav(); +import { CaretBottom } from "@element-plus/icons-vue"; const { route } = useNav(); +const userName = ref(""); const router = useRouter(); const defaultActive = computed(() => !isAllEmpty(route.meta?.activePath) ? route.meta.activePath : route.path @@ -21,7 +25,8 @@ const menuData = computed(() => { id: 0, meta: { title: "首页", - icon: 0 + icon: 0, + showLink: true }, children: [], path: "/home" @@ -106,6 +111,21 @@ watch( () => route.path, () => { getCurrentRoute(); + if (route.path === "/home") return; + let flag = false; + for (const data of tabs.list) { + if (route.fullPath === data.path) { + flag = true; + } + } + + if (!flag) { + tabs.setTabsItem({ + name: route.name, + title: route.meta.title, + path: route.fullPath + }); + } }, { deep: true @@ -114,21 +134,11 @@ watch( const tabs = useTabsStore(); const changeRouter = item => { router.push(item.path); - if (item.path === "/home") return; - let flag = false; - for (const data of tabs.list) { - if (item.path === data.path) { - flag = true; - } - } - if (!flag) { - tabs.setTabsItem({ - name: item.name, - title: item.meta.title, - path: item.path - }); - } }; +onMounted(() => { + const userInfo: any = getUserInfo(); + userName.value = JSON.parse(userInfo).name; +}); @@ -176,6 +188,22 @@ const changeRouter = item => { + + + + +

{{ "欢迎您,凯迪凯迪" }}

+ +
+ +
@@ -202,6 +230,8 @@ const changeRouter = item => { } .content { margin-left: 116px; + position: relative; + flex: 1; .meun_list { display: flex; .meun_item { @@ -225,6 +255,22 @@ const changeRouter = item => { color: #0052d9; } } + .user-set { + position: absolute; + right: 0; + top: 0; + height: 36px; + .user-set-main { + display: flex; + align-items: center; + font-weight: 400; + font-size: 12px; + color: #333333; + span { + margin-left: 6px; + } + } + } } } diff --git a/src/layout/components/appMain.vue b/src/layout/components/appMain.vue index 04dcc98..3dd5932 100644 --- a/src/layout/components/appMain.vue +++ b/src/layout/components/appMain.vue @@ -3,7 +3,9 @@ import { useGlobal } from "@pureadmin/utils"; import backTop from "@/assets/svg/back_top.svg?component"; import { h, computed, Transition, defineComponent } from "vue"; import { usePermissionStoreHook } from "@/store/modules/permission"; - +import { useTabsStore } from "@/store/modules/tabs"; +import { onMounted } from "vue"; +const tabs = useTabsStore(); const props = defineProps({ fixedHeader: Boolean }); @@ -53,27 +55,19 @@ const transitionMain = defineComponent({ } } }); +onMounted(() => { + console.log(tabs.nameList); +}); diff --git a/src/layout/components/tag/index.vue b/src/layout/components/tag/index.vue index ec3a5c5..3cf0f1a 100644 --- a/src/layout/components/tag/index.vue +++ b/src/layout/components/tag/index.vue @@ -34,6 +34,7 @@ const setTags = (route: any) => { const isExist = tabs.list.some(item => { return item.path === route.fullPath; }); + if (!isExist) { tabs.setTabsItem({ name: route.name, diff --git a/src/layout/index.vue b/src/layout/index.vue index b8215a4..356705a 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -100,7 +100,7 @@ onBeforeMount(() => { min-width: 1500px; height: 100vh; min-height: 100%; - + overflow-y: hidden; /* main-content 属性动画 */ transition: margin-left var(--pure-transition-duration); diff --git a/src/router/index.ts b/src/router/index.ts index 5037a58..b2cc9ac 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -124,7 +124,7 @@ router.beforeEach((to: ToRouteType, _from, next) => { function toCorrectRoute() { whiteList.includes(to.fullPath) ? next(_from.fullPath) : next(); } - if (userInfo?.roleCode) { + if (userInfo?.id) { // 无权限跳转403页面 if (to.meta?.roles && !isOneOfArray(to.meta?.roles, userInfo?.roles)) { next({ path: "/error/403" }); diff --git a/src/router/modules/knowledgeCentre.ts b/src/router/modules/knowledgeCentre.ts index b1dbff1..157bea9 100644 --- a/src/router/modules/knowledgeCentre.ts +++ b/src/router/modules/knowledgeCentre.ts @@ -1,5 +1,6 @@ export default { path: "/knowledgeCentre", + name: "knowledgeCentre", redirect: "/knowledgeCentre/submission", meta: { title: "知识中心", @@ -13,7 +14,44 @@ export default { component: () => import("@/views/knowledgeCentre/submission/index.vue"), meta: { title: "知识报送", + showLink: true, + showParent: true, + roles: ["admin", "common"] + } + }, + + { + path: "/knowledgeCentre/addSubmission", + name: "addSubmission", + component: () => + import("@/views/knowledgeCentre/submission/add/index.vue"), + meta: { + title: "新增", + + showLink: false, + showParent: false, + roles: ["admin", "common"] + } + }, + { + path: "/knowledgeCentre/editSubmission", + name: "editSubmission", + component: () => + import("@/views/knowledgeCentre/submission/edit/index.vue"), + meta: { + title: "编辑", + showLink: false, + showParent: false, + roles: ["admin", "common"] + } + }, + { + path: "/knowledgeCentre/approval", + name: "approval", + component: () => import("@/views/knowledgeCentre/approval/index.vue"), + meta: { + title: "知识审批", showLink: true, showParent: true, roles: ["admin", "common"] diff --git a/src/store/modules/knowledgeCentre.ts b/src/store/modules/knowledgeCentre.ts new file mode 100644 index 0000000..56b6567 --- /dev/null +++ b/src/store/modules/knowledgeCentre.ts @@ -0,0 +1,21 @@ +import { defineStore } from "pinia"; +import { store } from "@/store"; +export const useKnowledgeCentreStore = defineStore({ + id: "knowledgeCentre", + state: () => ({ + departmentList: [], + applicationSubLibrary: [] + }), + actions: { + getDepartmentList(data) { + this.departmentList = data; + }, + getApplicationSubLibrary(data) { + this.applicationSubLibrary = data; + } + } +}); + +export function useKnowledgeCentreStoreHooks() { + return useKnowledgeCentreStore(store); +} diff --git a/src/style/element-plus.scss b/src/style/element-plus.scss index 6c53327..78cb444 100644 --- a/src/style/element-plus.scss +++ b/src/style/element-plus.scss @@ -186,3 +186,7 @@ overflow: auto; } +.el-dialog__header { + padding: 0 !important; + margin: 0 !important; +} \ No newline at end of file diff --git a/src/style/reset.scss b/src/style/reset.scss index 8140d71..37e2f44 100644 --- a/src/style/reset.scss +++ b/src/style/reset.scss @@ -257,12 +257,28 @@ div:focus { } } .footer-btn { - width: 188px; - height: 48px; - margin-bottom: 24px; + display: flex; + margin-top: 32px; + align-items: center; + justify-content: center; + .cancel_btn { + width: 140px; + height: 40px; + background: #FFFFFF; + box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04); + border-radius: 6px 6px 6px 6px; + border: 1px solid #0052D9; + font-size: 16px; + color: #0052D9; + line-height: 40px; + text-align: center; + margin-right: 32px; + cursor: pointer; + } + } .el-dialog { - border-radius: 20px 20px 20px 20px !important; + border-radius: 6px 6px 6px 6px !important; } .el-dialog__footer { text-align: center !important; diff --git a/src/utils/http/index.ts b/src/utils/http/index.ts index a75a1bb..6ef471a 100644 --- a/src/utils/http/index.ts +++ b/src/utils/http/index.ts @@ -75,7 +75,7 @@ class PureHttp { return config; } /** 请求白名单,放置一些不需要token的接口(通过设置请求白名单,防止token过期后再请求造成的死循环问题) */ - const whiteList = ["/virtual-patient/user/login"]; + const whiteList = ["/know-sub/user/login"]; return whiteList.some(v => config.url.indexOf(v) > -1) ? config : new Promise(resolve => { diff --git a/src/views/knowledgeCentre/approval/compontents/Approved.vue b/src/views/knowledgeCentre/approval/compontents/Approved.vue new file mode 100644 index 0000000..33c0709 --- /dev/null +++ b/src/views/knowledgeCentre/approval/compontents/Approved.vue @@ -0,0 +1,71 @@ + + + diff --git a/src/views/knowledgeCentre/approval/index.vue b/src/views/knowledgeCentre/approval/index.vue new file mode 100644 index 0000000..391d4bf --- /dev/null +++ b/src/views/knowledgeCentre/approval/index.vue @@ -0,0 +1,236 @@ + + + + diff --git a/src/views/knowledgeCentre/compontents/Details.vue b/src/views/knowledgeCentre/compontents/Details.vue new file mode 100644 index 0000000..dcebb5e --- /dev/null +++ b/src/views/knowledgeCentre/compontents/Details.vue @@ -0,0 +1,182 @@ + + + + diff --git a/src/views/knowledgeCentre/compontents/KnowledgeDelete.vue b/src/views/knowledgeCentre/compontents/KnowledgeDelete.vue new file mode 100644 index 0000000..5c0ff4a --- /dev/null +++ b/src/views/knowledgeCentre/compontents/KnowledgeDelete.vue @@ -0,0 +1,102 @@ + + + diff --git a/src/views/knowledgeCentre/compontents/TransferRecords.vue b/src/views/knowledgeCentre/compontents/TransferRecords.vue new file mode 100644 index 0000000..bbed875 --- /dev/null +++ b/src/views/knowledgeCentre/compontents/TransferRecords.vue @@ -0,0 +1,274 @@ + + + + diff --git a/src/views/knowledgeCentre/compontents/withdraw.vue b/src/views/knowledgeCentre/compontents/withdraw.vue new file mode 100644 index 0000000..2baab97 --- /dev/null +++ b/src/views/knowledgeCentre/compontents/withdraw.vue @@ -0,0 +1,93 @@ + + + diff --git a/src/views/knowledgeCentre/submission/MainTemplate.vue b/src/views/knowledgeCentre/submission/MainTemplate.vue new file mode 100644 index 0000000..17c59bb --- /dev/null +++ b/src/views/knowledgeCentre/submission/MainTemplate.vue @@ -0,0 +1,513 @@ + + + + diff --git a/src/views/knowledgeCentre/submission/add/Editortext.vue b/src/views/knowledgeCentre/submission/add/Editortext.vue new file mode 100644 index 0000000..26bca39 --- /dev/null +++ b/src/views/knowledgeCentre/submission/add/Editortext.vue @@ -0,0 +1,13 @@ + + + + diff --git a/src/views/knowledgeCentre/submission/add/index.vue b/src/views/knowledgeCentre/submission/add/index.vue new file mode 100644 index 0000000..4609fbe --- /dev/null +++ b/src/views/knowledgeCentre/submission/add/index.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/views/knowledgeCentre/submission/edit/index.vue b/src/views/knowledgeCentre/submission/edit/index.vue new file mode 100644 index 0000000..72ddf9e --- /dev/null +++ b/src/views/knowledgeCentre/submission/edit/index.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/views/knowledgeCentre/submission/index.vue b/src/views/knowledgeCentre/submission/index.vue index 7283d49..224b14d 100644 --- a/src/views/knowledgeCentre/submission/index.vue +++ b/src/views/knowledgeCentre/submission/index.vue @@ -1,12 +1,81 @@ + + + +
+ + diff --git a/src/views/login/index.vue b/src/views/login/index.vue index d2ca2c3..147d643 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -43,37 +43,30 @@ const onLogin = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate((valid, fields) => { if (valid) { - setUserInfo({ - roleCode: "1" - }); - initRouter().then(() => { - router.push("/home"); - }); - // useUserStoreHook() - // .loginByUsername({ - // userAccount: ruleForm.username, - // password: ruleForm.password - // }) - // .then((res: any) => { - // loading.value = false; - // if (res.code === 200) { - // if (res.data.roleCode === "1") { - // // initRouter().then(() => { - // // router.push("/selectCase"); - // // }); - // } else { - // // initRouter().then(() => { - // // router.push("/inquiryCase"); - // // }); - // } - - // message("登录成功", { type: "success" }); - // } - // }) - // .catch(() => { - // loading.value = false; - // message("登录失败", { type: "error" }); - // }); + // initRouter().then(() => { + // router.push("/home"); + // }); + useUserStoreHook() + .loginByUsername({ + userAccount: ruleForm.username, + password: ruleForm.password + }) + .then((res: any) => { + loading.value = false; + if (res.code === 200) { + // setUserInfo({ + // roleId: res.data.userRoleDTOList[0].roleId + // }); + initRouter().then(() => { + router.push("/home"); + }); + message("登录成功", { type: "success" }); + } + }) + .catch(() => { + loading.value = false; + message("登录失败", { type: "error" }); + }); } else { loading.value = false; return fields; @@ -116,13 +109,13 @@ onBeforeUnmount(() => {