indexCommon.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. <template>
  2. <div class="common-layout">
  3. <el-container>
  4. <el-header class="nav">
  5. <div class="nav-top">
  6. <div>
  7. <img src="@/assets/images/logos.png" /><span>DOMINO'S File</span>
  8. </div>
  9. <div class="search">
  10. <el-input
  11. v-model="searchText"
  12. class="w-50 m-2"
  13. size="small"
  14. placeholder="搜索文件"
  15. suffix-icon="Search"
  16. clearable
  17. @change="toSearch"
  18. />
  19. </div>
  20. <div>
  21. <el-dropdown
  22. @command="handleCommand"
  23. class="right-menu-item hover-effect"
  24. trigger="click"
  25. >
  26. <div class="avatar-wrapper">
  27. <img
  28. src="@/assets/images/profile.jpg"
  29. class="head-img"
  30. /><span>{{ logingName }}</span>
  31. </div>
  32. <template #dropdown>
  33. <el-dropdown-menu>
  34. <el-dropdown-item divided command="logout">
  35. <span>退出登录</span>
  36. </el-dropdown-item>
  37. </el-dropdown-menu>
  38. </template>
  39. </el-dropdown>
  40. </div>
  41. </div>
  42. </el-header>
  43. <el-container>
  44. <el-aside width="92px" class="asides">
  45. <div class="aside-con">
  46. <router-link
  47. :to="item.path"
  48. v-for="(item, index) in menuList.data"
  49. :key="index"
  50. @click="clickPath(index)"
  51. ><div
  52. :class="
  53. $route.path == item.path
  54. ? 'acitve-img-style img-style'
  55. : 'img-style'
  56. "
  57. >
  58. <img :src="clickId == index ? item.beimgs : item.imgs" />
  59. <div class="text-style" v-if="clickId != index">
  60. {{ item.label }}
  61. </div>
  62. </div> </router-link
  63. ><br />
  64. </div>
  65. </el-aside>
  66. <el-main class="main">
  67. <router-view></router-view>
  68. </el-main>
  69. </el-container>
  70. </el-container>
  71. </div>
  72. </template>
  73. <script setup>
  74. import { onMounted, ref } from "vue";
  75. import { ElMessageBox } from "element-plus";
  76. import useAppStore from "@/store/modules/app";
  77. import useUserStore from "@/store/modules/user";
  78. import useSettingsStore from "@/store/modules/settings";
  79. import Cookies from "js-cookie";
  80. import chat from "@/assets/images/chat.png";
  81. import bechat from "@/assets/images/bechat.png";
  82. import zuijin from "@/assets/images/zuijin.png";
  83. import bezuijin from "@/assets/images/bezuijin.png";
  84. import colloect from "@/assets/images/colloect.png";
  85. import becolloect from "@/assets/images/becolloect.png";
  86. import my from "@/assets/images/my.png";
  87. import bemy from "@/assets/images/bemy.png";
  88. import bumen from "@/assets/images/bumen.png";
  89. import bebumen from "@/assets/images/bebumen.png";
  90. import common from "@/assets/images/common.png";
  91. import becommon from "@/assets/images/becommon.png";
  92. import chuanshu from "@/assets/images/chuanshu.png";
  93. import bechuanshu from "@/assets/images/bechuanshu.png";
  94. import { AppMain, Navbar, Settings, TagsView } from "./components";
  95. import { search } from "@/api/search/search.js";
  96. import { useRouter } from "vue-router";
  97. const router = useRouter(); //注册路由
  98. const appStore = useAppStore();
  99. const userStore = useUserStore();
  100. const settingsStore = useSettingsStore();
  101. const searchText = ref(""); //搜索ipt的值
  102. const selectValue = ref(1); //文档空间类型
  103. function toggleSideBar() {
  104. appStore.toggleSideBar();
  105. }
  106. const logingName = ref("");
  107. onMounted(() => {
  108. logingName.value = Cookies.get("username");
  109. // console.log('router',router)
  110. });
  111. function handleCommand(command) {
  112. switch (command) {
  113. case "setLayout":
  114. setLayout();
  115. break;
  116. case "logout":
  117. logout();
  118. break;
  119. default:
  120. break;
  121. }
  122. }
  123. function logout() {
  124. ElMessageBox.confirm("确定注销并退出系统吗?", "提示", {
  125. confirmButtonText: "确定",
  126. cancelButtonText: "取消",
  127. type: "warning",
  128. })
  129. .then(() => {
  130. userStore.logOut().then(() => {
  131. location.href = "/index";
  132. });
  133. })
  134. .catch(() => {});
  135. }
  136. // 跳转到全文搜索
  137. const toSearch = async () => {
  138. // console.log('searchText = ',searchText.value);
  139. const query = {
  140. keyword: searchText.value,
  141. page: 1,
  142. size: 10,
  143. type: selectValue.value,
  144. };
  145. const res = await search(query);
  146. console.log("res", res);
  147. if (res) {
  148. router.push({
  149. path: "/search",
  150. query: { searchData: JSON.stringify(res) },
  151. });
  152. }
  153. };
  154. const emits = defineEmits(["setLayout"]);
  155. function setLayout() {
  156. emits("setLayout");
  157. }
  158. const clickId = ref("");
  159. const menuList = reactive({
  160. data: [
  161. {
  162. label: "会话消息",
  163. path: "/index",
  164. imgs: chat,
  165. beimgs: bechat,
  166. },
  167. {
  168. label: "接口",
  169. path: "/swagger",
  170. imgs: chat,
  171. beimgs: bechat,
  172. },
  173. {
  174. label: "最近文件",
  175. path: "/recent",
  176. imgs: zuijin,
  177. beimgs: bezuijin,
  178. },
  179. {
  180. label: "收藏文件",
  181. path: "/collect",
  182. imgs: colloect,
  183. beimgs: becolloect,
  184. },
  185. {
  186. label: "我的文件",
  187. path: "/myfile",
  188. imgs: my,
  189. beimgs: bemy,
  190. },
  191. {
  192. label: "部门文件",
  193. path: "/department",
  194. imgs: bumen,
  195. beimgs: bebumen,
  196. },
  197. {
  198. label: "公共文件",
  199. path: "/swagger",
  200. imgs: common,
  201. beimgs: becommon,
  202. },
  203. {
  204. label: "高级搜索",
  205. path: "/highsearch",
  206. imgs: common,
  207. beimgs: becommon,
  208. },
  209. {
  210. label: "传输列表",
  211. path: "/ws",
  212. imgs: chuanshu,
  213. beimgs: bechuanshu,
  214. },
  215. ],
  216. });
  217. const clickPath = (index) => {
  218. clickId.value = index;
  219. };
  220. </script>
  221. <style lang="scss" scoped>
  222. @import "@/assets/styles/mixin.scss";
  223. @import "@/assets/styles/variables.module.scss";
  224. //整体布局css
  225. .common-layout,
  226. .el-container {
  227. height: 100vh;
  228. }
  229. :deep .el-main {
  230. --el-main-padding: 8px !important;
  231. }
  232. .nav {
  233. background: #06286c;
  234. height: 48px;
  235. .nav-top {
  236. width: 98%;
  237. display: flex;
  238. justify-content: space-between;
  239. & > div:first-child {
  240. font-family: "Inter-SemiBold";
  241. }
  242. & > div:first-child,
  243. & > div:last-child {
  244. display: flex;
  245. align-items: center;
  246. color: #fff;
  247. & > img {
  248. width: 48px;
  249. height: 48px;
  250. }
  251. }
  252. }
  253. .head-img {
  254. border-radius: 12px;
  255. width: 24px;
  256. height: 24px;
  257. margin-right: 10px;
  258. }
  259. .avatar-wrapper {
  260. color: #fff;
  261. display: flex;
  262. align-items: center;
  263. }
  264. .search {
  265. .w-50,
  266. :deep .el-input {
  267. width: 400px;
  268. height: 32px;
  269. border-radius: 4px;
  270. margin-top: 8px;
  271. background: #6f85b5 !important;
  272. --el-input-border-color: #6f85b5;
  273. }
  274. ::v-deep .el-input__inner {
  275. color: #fff !important;
  276. }
  277. }
  278. :deep .el-input__wrapper {
  279. background: #1f3f7e !important;
  280. }
  281. }
  282. .asides {
  283. padding: 8px 10px !important;
  284. font-size: 14px;
  285. color: #000;
  286. background: #fff;
  287. }
  288. .main {
  289. background: #c7cbd8;
  290. }
  291. //侧边栏css
  292. .acitve-img-style {
  293. background-color: #f5f7f9;
  294. border-radius: 4px;
  295. }
  296. .img-style {
  297. width: 72px;
  298. height: 72px;
  299. display: flex;
  300. margin-bottom: 8px;
  301. flex-direction: column;
  302. align-items: center;
  303. justify-content: center;
  304. & > img {
  305. width: 40px;
  306. height: 40px;
  307. }
  308. }
  309. .text-style {
  310. text-align: center;
  311. color: #000;
  312. }
  313. </style>
  314. <style lang="scss">
  315. .el-popper.is-light.type_popper {
  316. background-color: #1f3f7e !important;
  317. border-radius: 4px 4px 4px 4px !important;
  318. border: none !important;
  319. // padding: 0 16px !important;
  320. // box-sizing: border-box !important;
  321. }
  322. .el-popper__arrow::before{
  323. content: none;
  324. }
  325. //鼠标移动上去的选中色
  326. .type_popper {
  327. .el-select-dropdown__item.hover,
  328. .el-select-dropdown__item:hover {
  329. background: #6F85B5 !important;
  330. }
  331. //下拉框的文本颜色
  332. .el-select-dropdown__item {
  333. color: #A4B0D8 !important;
  334. }
  335. //选中之后的颜色
  336. .el-select-dropdown__item.selected {
  337. background: #6F85B5 !important;
  338. color: #fff !important;
  339. }
  340. }
  341. </style>