diff --git a/src/api/utils.ts b/src/api/utils.ts index 85c0f95..c97fcba 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", - "/know-sub/file/uploade", + "/know-sub/file/upload", { data }, { headers: { "Content-Type": "multipart/form-data" } } ); diff --git a/src/components/WangEditor/index.vue b/src/components/WangEditor/index.vue index d254b5a..356abc8 100644 --- a/src/components/WangEditor/index.vue +++ b/src/components/WangEditor/index.vue @@ -86,8 +86,8 @@ export default { "justifyRight", // 右对齐 "undo", // 撤销 "redo", // 重做 - "clearStyle", // 清除格式 - "fullScreen" // 全屏 + "clearStyle" // 清除格式 + // "fullScreen" // 全屏 ] }; const editorConfig = { @@ -115,7 +115,7 @@ export default { uploadFile(form).then(res => { if (res.code === 200) { insertFn( - `/virtual-patient-manage/fileManage/downloadFile?fileId=${res.data.id}`, + `/know-sub/file/downloadFile?fileId=${res.data}`, "", "" ); diff --git a/src/layout/components/appHeader/index.vue b/src/layout/components/appHeader/index.vue index fc1059f..618d08e 100644 --- a/src/layout/components/appHeader/index.vue +++ b/src/layout/components/appHeader/index.vue @@ -137,7 +137,7 @@ const changeRouter = item => { }; onMounted(() => { const userInfo: any = getUserInfo(); - userName.value = JSON.parse(userInfo).name; + userName.value = JSON.parse(userInfo).username; }); </script> @@ -192,7 +192,7 @@ onMounted(() => { <span class="user-set-main"> <!-- <img class="head" :src="userAvatar" :style="avatarsStyle" /> --> <el-avatar :size="36" :src="userAvatar" /> - <p>{{ "欢迎您,凯迪凯迪" }}</p> + <p>{{ `欢迎您,${userName}` }}</p> <el-icon><CaretBottom /></el-icon> </span> <template #dropdown> diff --git a/src/layout/components/tag/index.vue b/src/layout/components/tag/index.vue index 3cf0f1a..6825a7d 100644 --- a/src/layout/components/tag/index.vue +++ b/src/layout/components/tag/index.vue @@ -1,19 +1,40 @@ <template> <div class="tabs-container"> - <div class="tabs-content"> + <div ref="parentDiv" class="tabs-content"> <div @click="goHome" class="home"> <homeIcon /> </div> <div + ref="childDiv" @click="clickTabls(item)" class="tabs-item" :class="[activePath === item.path ? 'actived' : '']" - v-for="(item, index) in tabs.list" + v-for="(item, index) in tabList" :key="index" > - <span>{{ item.title }}</span> + <div class="title">{{ item.title }}</div> <closeIcon @click.stop="closeTabs(item.path)" /> </div> + + <el-dropdown v-if="overTags.length > 0" class="over-item" trigger="click"> + <div> + <el-icon><ArrowDown /></el-icon> + </div> + <template #dropdown> + <div class="drop-meun"> + <div + @click="clickTabls(item)" + :class="[activePath === item.path ? 'actived' : '']" + class="drop-meun-item" + v-for="(item, index) in overTags" + :key="index" + > + <span>{{ item.title }}</span> + <closeIcon class="icon" @click.stop="closeTabs(item.path)" /> + </div> + </div> + </template> + </el-dropdown> </div> </div> </template> @@ -24,11 +45,18 @@ import { onBeforeRouteUpdate, useRoute, useRouter } from "vue-router"; import { useTabsStore } from "@/store/modules/tabs"; import homeIcon from "@/assets/svg/home/home.svg"; import closeIcon from "@/assets/svg/home/close.svg"; +import { ArrowDown } from "@element-plus/icons-vue"; import { onMounted } from "vue"; +import { computed } from "vue"; const route = useRoute(); const router = useRouter(); const activePath = ref(route.fullPath); const tabs = useTabsStore(); +const parentDiv = ref(null); +const childDivs = ref([]); +const overTags = ref([]); +const overIndex = ref(0); +const isOverflowing = ref(false); // 设置标签 const setTags = (route: any) => { const isExist = tabs.list.some(item => { @@ -50,6 +78,14 @@ onBeforeRouteUpdate(to => { const goHome = () => { router.push("/home"); }; + +const tabList = computed(() => { + if (overTags.value.length > 0) { + return tabs.list.slice(0, overIndex.value); + } else { + return tabs.list; + } +}); // 关闭全部标签 const closeAll = () => { tabs.clearTabs(); @@ -88,6 +124,9 @@ const closeTabs = (path: string) => { const index = tabs.list.findIndex(item => item.path === path); tabs.delTabsItem(index); const item = tabs.list[index] || tabs.list[index - 1]; + if (overIndex.value !== 0) { + overTags.value = tabs.list.slice(overIndex.value); + } router.push(item ? item.path : "/home"); }; @@ -96,10 +135,42 @@ watch( () => route.fullPath, (newVal, oldVal) => { activePath.value = newVal; + getTagsWidth(); } ); +const getTagsWidth = () => { + childDivs.value = parentDiv.value.querySelectorAll(".tabs-item"); + + let totalWidth = 55; + childDivs.value.forEach(div => { + totalWidth += div.offsetWidth; + }); + + const residueW = parentDiv.value.offsetWidth - totalWidth; + if (residueW > 100) return; + + if (overIndex.value === 0) { + overIndex.value = childDivs.value.length; + } + overTags.value = tabs.list.slice(overIndex.value); +}; +// const getResizeTabs = () => { +// overTags.value = []; +// overIndex.value = 0; +// childDivs.value = parentDiv.value.querySelectorAll(".tabs-item"); + +// let totalWidth = 55; +// childDivs.value.forEach((div, index) => { +// totalWidth += div.offsetWidth; +// if (parentDiv.value.offsetWidth < totalWidth) { +// overIndex.value = index; +// overTags.value = tabs.list.slice(overIndex.value); +// } +// }); +// }; onMounted(() => { console.log("222", tabs.list); + // window.addEventListener("resize", getResizeTabs); }); </script> @@ -115,11 +186,13 @@ onMounted(() => { background: #ffffff; border-radius: 8px 8px 8px 8px; display: flex; + overflow: hidden; + position: relative; .home { display: flex; align-items: center; justify-content: center; - width: 68px; + min-width: 68px; cursor: pointer; border-right: 1px solid #eaeaea; } @@ -131,14 +204,59 @@ onMounted(() => { font-size: 16px; color: #333333; cursor: pointer; - span { + .title { margin-right: 16px; + min-width: 65px; } } .actived { background: #f5f5f5; border-bottom: 1px solid #0052d9; } + .over-item { + width: 69px; + height: 53px; + background: #f5f5f5; + border-radius: 0px 8px 8px 0px; + position: absolute; + right: 0; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + } + } +} +.drop-meun { + width: 214px; + height: 369px; + background: #ffffff; + box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.15); + border-radius: 8px 8px 8px 8p; + padding: 16px 0px; + .drop-meun-item { + padding-left: 16px; + margin-bottom: 8px; + height: 38px; + line-height: 38px; + display: flex; + font-size: 14px; + color: #333333; + position: relative; + align-items: center; + cursor: pointer; + .icon { + position: absolute; + right: 16px; + cursor: pointer; + } + .drop-meun-item:hover { + background-color: #f5f5f5; + } + } + .actived { + border-left: 1px solid #0052d9; + background-color: #f5f5f5; } } </style> diff --git a/src/layout/index.vue b/src/layout/index.vue index 356705a..fcef563 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -68,8 +68,7 @@ onBeforeMount(() => { position: relative; width: 100%; height: 100%; - background-image: url("../assets/home/home_bg.png"); - background-size: 100% 100%; + &::after { display: table; clear: both; @@ -101,6 +100,8 @@ onBeforeMount(() => { height: 100vh; min-height: 100%; overflow-y: hidden; + background-image: url("../assets/home/home_bg.png"); + background-size: 100% 100%; /* main-content 属性动画 */ transition: margin-left var(--pure-transition-duration); diff --git a/src/style/element-plus.scss b/src/style/element-plus.scss index 78cb444..90b3195 100644 --- a/src/style/element-plus.scss +++ b/src/style/element-plus.scss @@ -189,4 +189,8 @@ .el-dialog__header { padding: 0 !important; margin: 0 !important; -} \ No newline at end of file +} +.is-disabled span { + color: #999999; +} + diff --git a/src/views/knowledgeCentre/approval/index.vue b/src/views/knowledgeCentre/approval/index.vue index cdebc8f..156d22f 100644 --- a/src/views/knowledgeCentre/approval/index.vue +++ b/src/views/knowledgeCentre/approval/index.vue @@ -1,6 +1,5 @@ <script setup lang="ts"> import { onActivated, onMounted, reactive, ref } from "vue"; -import { ArrowDown } from "@element-plus/icons-vue"; import { useRouter } from "vue-router"; import TransferRecords from "../compontents/TransferRecords.vue"; import Details from "../compontents/Details.vue"; @@ -167,6 +166,7 @@ const handleCommand = command => { }; const changeStatus = item => { seachForm.processStatus = item.id; + search(); }; const add = () => { router.push("/knowledgeCentre/addSubmission"); @@ -233,7 +233,6 @@ onActivated(() => { onMounted(() => { getDepartmentList(); getApplicationSubLibrary(); - getData(); }); </script> diff --git a/src/views/knowledgeCentre/compontents/Details.vue b/src/views/knowledgeCentre/compontents/Details.vue index 23fc610..e25e239 100644 --- a/src/views/knowledgeCentre/compontents/Details.vue +++ b/src/views/knowledgeCentre/compontents/Details.vue @@ -94,7 +94,10 @@ const closeDialog = () => { `发布日期:${formData.knowledgeInfo.publishDate}` }}</span> </div> - <div class="basicInfo_item"> + <div + v-if="formData.knowledgeInfo.autoLoseEffect" + class="basicInfo_item" + > <span v-if="formData.knowledgeInfo.autoLoseEffect === 1">{{ `时效性:长期有效` }}</span> diff --git a/src/views/knowledgeCentre/compontents/SubmitReview.vue b/src/views/knowledgeCentre/compontents/SubmitReview.vue new file mode 100644 index 0000000..7d0dd58 --- /dev/null +++ b/src/views/knowledgeCentre/compontents/SubmitReview.vue @@ -0,0 +1,100 @@ +<template> + <el-dialog + width="600" + append-to-body + v-model="dialogVisible" + :center="true" + custom-class="SubmitReview" + ><!-- 使用自定义头部组件 --> + <template v-slot:header> + <div class="SubmitReview-header"> + <img :src="successIcon" alt="" /> + <span>提交审核</span> + </div> + </template> + <div class="SubmitReview-content"> + <div class="label">报送说明</div> + <el-input + v-model="reason" + maxlength="200" + :rows="4" + placeholder="请输入" + show-word-limit + type="textarea" + /> + <div class="footer-btn"> + <div class="cancel_btn" @click="dialogVisible = false">取消</div> + <!-- <div class="determine_btn">确定</div> --> + <el-button + size="large" + @click="submit" + style="width: 140px; margin: 0" + class="footer-btn" + type="primary" + >确定</el-button + > + </div> + </div> + </el-dialog> +</template> +<script setup lang="ts"> +import { ref } from "vue"; +import successIcon from "@/assets/knowledge/success.png"; +import { message } from "@/utils/message"; +const dialogVisible = ref(false); +const reason = ref(""); +defineExpose({ + open() { + dialogVisible.value = true; + } +}); +const closeDialog = () => { + dialogVisible.value = false; +}; +const emit = defineEmits(["submitOk"]); +const submit = () => { + if (reason.value) { + emit("submitOk", reason.value); + closeDialog(); + } else { + message("请填写原因", { type: "error" }); + } +}; +</script> +<style lang="scss" scoped> +.SubmitReview-header { + display: flex; + align-items: center; + padding: 0 24px; + height: 76px; + border-bottom: 1px solid rgba(91, 139, 255, 0.3); + position: relative; + width: 100%; + span { + font-weight: bold; + font-size: 20px; + color: #333333; + } + img { + width: 28px; + height: 28px; + margin-right: 16px; + } +} +:deep(.el-dialog__header) { + padding: 0; + margin: 0; +} +.SubmitReview-content { + .label { + font-size: 16px; + color: #333333; + margin-bottom: 16px; + } + .desc { + margin-top: 8px; + font-size: 14px; + color: #b4b4b4; + } +} +</style> diff --git a/src/views/knowledgeCentre/compontents/TransferRecords.vue b/src/views/knowledgeCentre/compontents/TransferRecords.vue index 9eea9c3..08cf247 100644 --- a/src/views/knowledgeCentre/compontents/TransferRecords.vue +++ b/src/views/knowledgeCentre/compontents/TransferRecords.vue @@ -52,7 +52,7 @@ const getDetails = async id => { <div class="line" /> <div class="content"> <div class="content-title">{{ title }}</div> - <div class="record_list"> + <div v-if="recordList.length > 0" class="record_list"> <div class="record_list_item" v-for="(item, index) in recordList" @@ -88,6 +88,7 @@ const getDetails = async id => { </div> </div> </div> + <el-empty v-else description="暂无流转记录" /> </div> </div> </el-drawer> diff --git a/src/views/knowledgeCentre/submission/MainTemplate.vue b/src/views/knowledgeCentre/submission/MainTemplate.vue index 17c59bb..472bdad 100644 --- a/src/views/knowledgeCentre/submission/MainTemplate.vue +++ b/src/views/knowledgeCentre/submission/MainTemplate.vue @@ -1,11 +1,12 @@ <script setup lang="ts"> import { ElMessage, UploadProps } from "element-plus"; -import { computed, reactive, ref } from "vue"; +import { computed, onMounted, reactive, ref } from "vue"; import { Plus } from "@element-plus/icons-vue"; import WangEditor from "@/components/WangEditor/index.vue"; import { useKnowledgeCentreStoreHooks } from "@/store/modules/knowledgeCentre"; import { message } from "@/utils/message"; +import { getUserInfo } from "@/utils/auth"; const ruleFormRef = ref(); const formData = reactive({ operate: "", @@ -34,7 +35,10 @@ const formData = reactive({ }, fileList: [] }); - +let userInfo = reactive({ + username: "", + deptName: "" +}); defineExpose({ getDetails(data) { refWangEditor.value.initText(data.knowledgeContext.context); @@ -174,6 +178,10 @@ const reset = () => { refWangEditor.value.initText(""); refWangEditor.value.initTitle(""); }; +onMounted(() => { + const obj: any = getUserInfo(); + userInfo = JSON.parse(obj); +}); </script> <template> @@ -190,12 +198,20 @@ const reset = () => { <span>报送知识</span> </div> <el-row> - <!-- <el-form-item class="ml-2" label="报送人姓名" prop="normalResult"> - <el-input v-model="formData.normalResult" placeholder="请输入" /> + <el-form-item class="ml-2" label="报送人姓名" prop="username"> + <el-input + disabled + v-model="userInfo.username" + placeholder="请输入" + /> + </el-form-item> + <el-form-item class="ml-8" label="报送人部门" prop="deptName"> + <el-input + disabled + v-model="userInfo.deptName" + placeholder="请输入" + /> </el-form-item> - <el-form-item class="ml-8" label="报送人部门" prop="normalResult"> - <el-input v-model="formData.normalResult" placeholder="请输入" /> - </el-form-item> --> </el-row> </div> <div class="Editortext"> diff --git a/src/views/knowledgeCentre/submission/add/index.vue b/src/views/knowledgeCentre/submission/add/index.vue index 4609fbe..ebe605f 100644 --- a/src/views/knowledgeCentre/submission/add/index.vue +++ b/src/views/knowledgeCentre/submission/add/index.vue @@ -4,14 +4,30 @@ import { saveKnowledge } from "@/api/knowledgeCentre"; import { useTabsStore } from "@/store/modules/tabs"; import { message } from "@/utils/message"; import { useRoute, useRouter } from "vue-router"; +import SubmitReview from "../../compontents/SubmitReview.vue"; +import { ref } from "vue"; +import { reactive } from "vue"; defineOptions({ name: "addSubmission" }); const router = useRouter(); const route = useRoute(); const tabs = useTabsStore(); +const SubmitReviewRef = ref(); +let paramsInfo = reactive({}); const save = async params => { - const res: any = await saveKnowledge(params); + paramsInfo = params; + if (params.operate === 1) { + submitOk(undefined); + } else { + SubmitReviewRef.value.open(); + } +}; +const submitOk = async val => { + const res: any = await saveKnowledge({ + ...paramsInfo, + remark: val + }); if (res.code === 200) { message("新增成功", { type: "success" }); tabs.closeCurrentTag({ @@ -25,5 +41,6 @@ const save = async params => { <template> <div> <MainTemplate @save="save" /> + <SubmitReview @submitOk="submitOk" ref="SubmitReviewRef" /> </div> </template> diff --git a/src/views/knowledgeCentre/submission/edit/index.vue b/src/views/knowledgeCentre/submission/edit/index.vue index 72ddf9e..181736f 100644 --- a/src/views/knowledgeCentre/submission/edit/index.vue +++ b/src/views/knowledgeCentre/submission/edit/index.vue @@ -3,8 +3,9 @@ import MainTemplate from "../MainTemplate.vue"; import { updateKnowledge, queryKnowledgeDetail } from "@/api/knowledgeCentre"; import { useTabsStore } from "@/store/modules/tabs"; import { message } from "@/utils/message"; -import { onMounted, ref } from "vue"; +import { onMounted, reactive, ref } from "vue"; import { useRoute, useRouter } from "vue-router"; +import SubmitReview from "../../compontents/SubmitReview.vue"; defineOptions({ name: "editSubmission" }); @@ -12,9 +13,20 @@ const router = useRouter(); const route = useRoute(); const tabs = useTabsStore(); const MainTemplateRef = ref(); +const SubmitReviewRef = ref(); +let paramsInfo = reactive({}); const save = async params => { + paramsInfo = params; + if (params.operate === 1) { + submitOk(undefined); + } else { + SubmitReviewRef.value.open(); + } +}; +const submitOk = async val => { const res: any = await updateKnowledge({ - ...params, + ...paramsInfo, + remark: val, knowledgeId: route.query.id }); if (res.code === 200) { @@ -25,7 +37,6 @@ const save = async params => { }); } }; - const getDeatils = async () => { const res: any = await queryKnowledgeDetail({ knowledgeId: route.query.id @@ -40,5 +51,6 @@ onMounted(() => { <template> <div> <MainTemplate ref="MainTemplateRef" @save="save" /> + <SubmitReview @submitOk="submitOk" ref="SubmitReviewRef" /> </div> </template> diff --git a/src/views/knowledgeCentre/submission/index.vue b/src/views/knowledgeCentre/submission/index.vue index 4e37ede..be75e54 100644 --- a/src/views/knowledgeCentre/submission/index.vue +++ b/src/views/knowledgeCentre/submission/index.vue @@ -232,7 +232,7 @@ const openDetails = row => { DetailsRef.value.open(row.id); }; const openWithdraw = row => { - withdrawRef.value.open(row); + withdrawRef.value.open(row.id); }; const handleDelete = row => { KnowledgeDeleteRef.value.open(row.id); @@ -285,7 +285,6 @@ onActivated(() => { onMounted(() => { getDepartmentList(); getApplicationSubLibrary(); - getData(); }); </script> diff --git a/vite.config.ts b/vite.config.ts index 6e4f5c1..945ba43 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -46,7 +46,7 @@ export default ({ command, mode }: ConfigEnv): UserConfigExport => { proxy: { // 类型: Record<string, string | ProxyOp 为开发服务器配置自定义代理规则 "/know-sub/": { - target: "http://192.168.10.25:9201/", + target: "http://192.168.10.27:9201/", changeOrigin: true, secure: false // eslint-disable-next-line no-shadow