indexCommon.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812
  1. <template>
  2. <div class="common-layout">
  3. <el-container>
  4. <el-header
  5. class="nav"
  6. style="position: sticky; top: 0; left: 0; width: 100%; z-index: 999"
  7. >
  8. <div class="nav-top">
  9. <div>
  10. <img class="logoImg" src="@/assets/images/logos.png" /><span
  11. >聚合智慧文档管理系统</span
  12. >
  13. </div>
  14. <div class="search">
  15. <el-input
  16. v-model="searchText"
  17. maxlength="32"
  18. class="w-50 m-2"
  19. size="small"
  20. placeholder="搜索文件"
  21. suffix-icon="Search"
  22. clearable
  23. @change="toSearch"
  24. @@keyup.enter="toSearch"
  25. />
  26. </div>
  27. <div>
  28. <el-dropdown
  29. @command="handleCommand"
  30. class="right-menu-item hover-effect"
  31. trigger="click"
  32. >
  33. <div class="avatar-wrapper">
  34. <img
  35. :src="
  36. userStore.avatar
  37. ? userStore.avatar
  38. : '@/assets/images/profile.png'
  39. "
  40. class="head-img"
  41. /><span>{{ userStore.name }}</span>
  42. </div>
  43. <template #dropdown>
  44. <el-dropdown-menu>
  45. <router-link to="/user/profile">
  46. <el-dropdown-item>个人中心</el-dropdown-item>
  47. </router-link>
  48. <el-dropdown-item divided command="logout">
  49. <span>退出登录</span>
  50. </el-dropdown-item>
  51. </el-dropdown-menu>
  52. </template>
  53. </el-dropdown>
  54. </div>
  55. </div>
  56. </el-header>
  57. <el-container>
  58. <el-aside width="92px" class="asides">
  59. <div class="aside-con">
  60. <router-link
  61. :to="item.path"
  62. v-for="(item, index) in menuList.data"
  63. :key="index"
  64. @click="clickPath(index, item)"
  65. ><div
  66. style="position: relative"
  67. :class="
  68. $route.path == item.path
  69. ? 'acitve-img-style img-style'
  70. : 'img-style'
  71. "
  72. >
  73. <img
  74. :src="$route.path == item.path ? item.beimgs : item.imgs"
  75. />
  76. <div class="text-style" v-if="$route.path != item.path">
  77. {{ item.label }}
  78. </div>
  79. <span
  80. class="yuandian"
  81. v-if="
  82. websoctStore.messOne?.fromId &&
  83. item.path == '/index' &&
  84. $route.path != item.path &&
  85. clickId !== index
  86. "
  87. ></span>
  88. </div> </router-link
  89. ><br />
  90. </div>
  91. </el-aside>
  92. <el-main class="main">
  93. <div class="tab_box">
  94. <!-- <el-tabs
  95. v-model="editableTabsValue"
  96. @tab-change="clickTab"
  97. @tab-add="addTab"
  98. type="card"
  99. class="common-tabs"
  100. > -->
  101. <el-tabs
  102. v-model="editableTabsValue"
  103. @tab-add="addTab"
  104. type="card"
  105. class="common-tabs"
  106. >
  107. <el-tab-pane label="首页"> </el-tab-pane>
  108. <el-tab-pane
  109. v-for="(item, index) in toRaw(editableTabs)"
  110. :key="item.path"
  111. :label="item.label"
  112. :name="item.path"
  113. :data-item="JSON.stringify(item)"
  114. >
  115. <template #label>
  116. <!-- <div class="tab_pane" @click="paneClick(item)">
  117. <div class="tab_text">{{ item.label }}</div>
  118. <img
  119. src="@/assets/images/close.png"
  120. @click="closeTab(item, index, $event)"
  121. alt=""
  122. />
  123. </div> -->
  124. <router-link
  125. :key="item"
  126. :data-path="item.path"
  127. :to="{
  128. path: item.path,
  129. query: {row:item.clickRowId},
  130. }"
  131. @click="paneClick(item)"
  132. class="tags-view-item"
  133. >
  134. {{item.label}}
  135. </router-link>
  136. </template>
  137. </el-tab-pane>
  138. <!-- 文件的iframe -->
  139. <div v-for="item in iFrameData" :key="item.id">
  140. <el-tab-pane :label="item.name" v-if="item.src">
  141. <template #label>
  142. <div class="tab_pane" @click="filePaneClick(item)">
  143. <div class="tab_text">{{ item.name }}</div>
  144. <img
  145. src="@/assets/images/close.png"
  146. @click="closeFileTab(item, index, $event)"
  147. alt=""
  148. />
  149. </div>
  150. </template>
  151. </el-tab-pane>
  152. </div>
  153. </el-tabs>
  154. </div>
  155. <div v-show="isAlive">
  156. <router-view v-slot="{ Component }">
  157. <KeepAlive :exclude="['identifyFont', 'allback', 'search']">
  158. <component :is="Component" />
  159. </KeepAlive>
  160. </router-view>
  161. </div>
  162. <div v-show="!isAlive" style="width: 100%">
  163. <div v-for="item in iFrameData" :key="item.id">
  164. <div style="width: 100%" v-show="item.show">
  165. <iframe
  166. :src="item.src"
  167. frameborder="0"
  168. :id="`iframe${item.id}`"
  169. width="100%"
  170. height="1000px"
  171. class="iframeBox"
  172. v-show="item.show"
  173. ></iframe>
  174. </div>
  175. </div>
  176. </div>
  177. </el-main>
  178. </el-container>
  179. </el-container>
  180. </div>
  181. </template>
  182. <script setup>
  183. import { nextTick, onMounted, provide, ref } from "vue";
  184. import { ElMessageBox, ElMessage } from "element-plus";
  185. import useAppStore from "@/store/modules/app";
  186. import useUserStore from "@/store/modules/user";
  187. import useSettingsStore from "@/store/modules/settings";
  188. import Cookies from "js-cookie";
  189. import chat from "@/assets/images/chat.png";
  190. import bechat from "@/assets/images/bechat.png";
  191. import zuijin from "@/assets/images/zuijin.png";
  192. import bezuijin from "@/assets/images/bezuijin.png";
  193. import colloect from "@/assets/images/colloect.png";
  194. import becolloect from "@/assets/images/becolloect.png";
  195. import system from "@/assets/images/system.png";
  196. import issystem from "@/assets/images/issystem.png";
  197. import my from "@/assets/images/my.png";
  198. import bemy from "@/assets/images/bemy.png";
  199. import bumen from "@/assets/images/bumen.png";
  200. import bebumen from "@/assets/images/bebumen.png";
  201. import common from "@/assets/images/common.png";
  202. import becommon from "@/assets/images/becommon.png";
  203. import chuanshu from "@/assets/images/chuanshu.png";
  204. import bechuanshu from "@/assets/images/bechuanshu.png";
  205. import highsearch from "@/assets/images/highsearch.png";
  206. import behighsearch from "@/assets/images/behighsearch.png";
  207. import manyBody from "@/assets/images/manyBody.png";
  208. import manyBodyFalse from "@/assets/images/manyBodyFalse.png";
  209. import { AppMain, Navbar, Settings, TagsView } from "./components";
  210. import { flieSearch } from "@/api/search/search.js";
  211. import { useRouter, useRoute } from "vue-router";
  212. import useWebsoctStore from "@/store/modules/websocket";
  213. import { toRaw } from "@vue/reactivity";
  214. import iFrame from "@/components/iFrame/index.vue";
  215. const websoctStore = useWebsoctStore();
  216. const router = useRouter(); //注册路由
  217. const route = useRoute();
  218. const appStore = useAppStore();
  219. const userStore = useUserStore();
  220. const settingsStore = useSettingsStore();
  221. const searchText = ref(""); //搜索ipt的值
  222. const selectValue = ref(1); //文档空间类型
  223. const wangzhi = import.meta.env.VITE_APP_BASE_API;
  224. const isAlive = ref(true);
  225. const toFileData = ref();
  226. const uid = useUserStore().uid;
  227. const iFrameData = ref([
  228. {
  229. id: 1,
  230. // src: `http://192.168.1.9:81/fileEdit?clickRowId=1197`,
  231. // src: `${window.location.origin}/fileEdit?clickRowId=1197`,
  232. src: ``,
  233. show: false,
  234. name: "file1",
  235. },
  236. {
  237. id: 2,
  238. src: ``,
  239. // src: `http://192.168.1.9:81/fileEdit?clickRowId=1198`,
  240. show: false,
  241. name: "file2",
  242. },
  243. {
  244. id: 3,
  245. src: ``,
  246. show: false,
  247. name: "",
  248. },
  249. {
  250. id: 4,
  251. src: ``,
  252. show: false,
  253. name: "",
  254. },
  255. ]);
  256. //--------tabs-----------------
  257. let tabIndex = 2;
  258. const editableTabsValue = ref("/index");
  259. const editableTabs = ref([]);
  260. // const removeTab = (targetName) => {
  261. // const tabs = editableTabs.value;
  262. // let activeName = editableTabsValue.value;
  263. // if (activeName === targetName) {
  264. // tabs.forEach((tab, index) => {
  265. // if (tab.name === targetName) {
  266. // const nextTab = tabs[index + 1] || tabs[index - 1];
  267. // if (nextTab) {
  268. // activeName = nextTab.name;
  269. // }
  270. // }
  271. // });
  272. // }
  273. // editableTabsValue.value = activeName;
  274. // editableTabs.value = tabs.filter((tab) => tab.name !== targetName);
  275. // };
  276. //-------------------------
  277. function reload() {
  278. isAlive.value = false;
  279. console.log(11);
  280. nextTick(() => {
  281. isAlive.value = true;
  282. });
  283. }
  284. provide("reload", reload);
  285. function toggleSideBar() {
  286. appStore.toggleSideBar();
  287. }
  288. const logingName = ref("");
  289. onMounted(() => {
  290. logingName.value = Cookies.get("username");
  291. // console.log('router',router)
  292. });
  293. function handleCommand(command) {
  294. switch (command) {
  295. case "setLayout":
  296. setLayout();
  297. break;
  298. case "logout":
  299. logout();
  300. break;
  301. default:
  302. break;
  303. }
  304. }
  305. function logout() {
  306. ElMessageBox.confirm("确定注销并退出系统吗?", "提示", {
  307. confirmButtonText: "确定",
  308. cancelButtonText: "取消",
  309. type: "warning",
  310. })
  311. .then(() => {
  312. userStore.logOut().then(() => {
  313. location.href = "/index";
  314. });
  315. })
  316. .catch(() => {});
  317. }
  318. // 跳转到全文搜索
  319. const toSearch = async () => {
  320. if (!searchText.value) return;
  321. // console.log('searchText = ',searchText.value);
  322. const query = {
  323. keyword: searchText.value,
  324. isAsc: "asc",
  325. orderByColumn: "createTime",
  326. pageSize: 3,
  327. pageNum: 1,
  328. };
  329. const res = await flieSearch(query);
  330. // console.log("res", res);
  331. if (res) {
  332. // console.log("res", res);
  333. // console.log("router", route.path);
  334. if (route.path != "/search") {
  335. router.push({
  336. path: "/search",
  337. query: {
  338. searchData: JSON.stringify(res),
  339. searchText: searchText.value,
  340. },
  341. });
  342. } else {
  343. router.replace({
  344. path: "/allback",
  345. query: {
  346. searchData: JSON.stringify(res),
  347. searchText: searchText.value,
  348. },
  349. });
  350. }
  351. }
  352. };
  353. const emits = defineEmits(["setLayout"]);
  354. function setLayout() {
  355. emits("setLayout");
  356. }
  357. const clickId = ref("");
  358. const menuList = reactive({
  359. data: [
  360. {
  361. label: "会话消息",
  362. path: "/index",
  363. imgs: chat,
  364. beimgs: bechat,
  365. },
  366. // {
  367. // label: "接口",
  368. // path: "/swagger",
  369. // imgs: chat,
  370. // beimgs: bechat,
  371. // disabled:true
  372. // },
  373. {
  374. label: "最近文件",
  375. path: "/recent",
  376. imgs: zuijin,
  377. beimgs: bezuijin,
  378. },
  379. {
  380. label: "收藏文件",
  381. path: "/collect",
  382. imgs: colloect,
  383. beimgs: becolloect,
  384. },
  385. {
  386. label: "我的文件",
  387. path: "/myfile",
  388. imgs: my,
  389. beimgs: bemy,
  390. },
  391. {
  392. label: "部门文件",
  393. path: "/department",
  394. imgs: bumen,
  395. beimgs: bebumen,
  396. },
  397. {
  398. label: "公共文件",
  399. path: "/publicment",
  400. imgs: common,
  401. beimgs: becommon,
  402. },
  403. {
  404. label: "高级搜索",
  405. path: "/highsearch",
  406. imgs: highsearch,
  407. beimgs: behighsearch,
  408. },
  409. {
  410. label: "传输列表",
  411. path: "/transFile",
  412. imgs: chuanshu,
  413. beimgs: bechuanshu,
  414. },
  415. {
  416. label: "系统管理",
  417. path: "/admin",
  418. imgs: system,
  419. beimgs: issystem,
  420. },
  421. {
  422. label: "我的协作",
  423. path: "/myjoin",
  424. imgs: manyBody,
  425. beimgs: manyBodyFalse,
  426. },
  427. ],
  428. });
  429. const clickPath = (index, items) => {
  430. items = toRaw(items);
  431. // toFileData.value = null
  432. console.log("clickPathitems", items);
  433. // editableTabs.value = arr;
  434. const arr = toRaw(editableTabs.value);
  435. if (!arr.some((item) => item.label == items.label)) {
  436. editableTabs.value.push({ label: items.label, path: items.path });
  437. //需要jSON去转 否则页面无变化 离谱得很
  438. editableTabs.value = JSON.parse(JSON.stringify(editableTabs.value));
  439. } else {
  440. toFileData.value = null;
  441. clickTab(items.path);
  442. }
  443. editableTabsValue.value = items.path;
  444. // console.log("editableTabs", editableTabs.value);
  445. };
  446. const clickTab = (item) => {
  447. console.log("item", toRaw(item));
  448. setTimeout(() => {
  449. console.log("toFileData.value", toFileData.value);
  450. if (toFileData.value) {
  451. console.log(
  452. "tofolder",
  453. JSON.stringify(toRaw(toFileData.value.clickRowId))
  454. );
  455. router.push({
  456. path: toFileData.value.path,
  457. query: {
  458. row: JSON.stringify(toRaw(toFileData.value.clickRowId)),
  459. },
  460. });
  461. // router.push({
  462. // path: toFileData.value.path,
  463. // query: {
  464. // row: toFileData.value.row,
  465. // },
  466. // });
  467. return;
  468. }
  469. let regExp = new RegExp(/^\//);
  470. let regFile = new RegExp(/^tofile/);
  471. if (!regExp.test(toRaw(item))) {
  472. const data = JSON.parse(toRaw(item));
  473. console.log("data", data);
  474. router.push({
  475. // path: "/fileEdit" + data.docId,
  476. path: "/fileEdit",
  477. query: {
  478. clickRowId: data.docId,
  479. // row:JSON.stringify(toFileData.value)
  480. // copyRow: JSON.stringify(data),
  481. },
  482. });
  483. } else {
  484. router.push({
  485. path: item,
  486. });
  487. }
  488. }, 0);
  489. };
  490. const paneClick = (item) => {
  491. // 可以拿到当前的标签对象
  492. isAlive.value = true;
  493. console.log("paneItem", item);
  494. if (item.clickRowId) {
  495. // 判断是菜单还是目录
  496. toFileData.value = item;
  497. } else {
  498. toFileData.value = null;
  499. }
  500. clickTab(item.path);
  501. console.log("isAlive", isAlive.value);
  502. };
  503. // 点击文件标签
  504. const filePaneClick = (item) => {
  505. console.log("filePaneClickitem", item);
  506. const row = toRaw(item);
  507. const arr = iFrameData.value.map((par) => {
  508. if (par.id === row.id) {
  509. par.show = true;
  510. // document.getElementById('iframe'+par.id).window.document.iframe[0]
  511. const outIframe = document.getElementById("iframe" + par.id);
  512. const inIframe =
  513. outIframe.contentDocument.getElementsByTagName("iframe")[0];
  514. setTimeout(() => {
  515. inIframe.style.height = outIframe.style.height =
  516. outIframe.parentElement.offsetHeight + "px";
  517. inIframe.style.width = outIframe.style.width =
  518. outIframe.parentElement.offsetWidth + "px";
  519. // console.log('dom',outIframe.parentElement.offsetWidth);
  520. // console.log('inIframe',inIframe);
  521. }, 500);
  522. } else {
  523. par.show = false;
  524. }
  525. return toRaw(par);
  526. });
  527. iFrameData.value = arr;
  528. // console.log("Clicknewfilearr", iFrameData.value);
  529. isAlive.value = false;
  530. // console.log("isAlive", isAlive.value);
  531. };
  532. // 创建文件的标签
  533. const addFileTab = (data) => {
  534. console.log("fileTabdata", data);
  535. const thisData = toRaw(data);
  536. const oldIFrameData = iFrameData.value;
  537. const canAdd = oldIFrameData.some((par) => par.src == "");
  538. if (!canAdd) return ElMessage.error("已到最大数量,请先关闭其他文件!");
  539. const arr = oldIFrameData.map((par) => {
  540. if (!par.src) {
  541. if (thisData.docId) {
  542. par.src = `${window.location.origin}/fileEdit?clickRowId=${thisData.docId}`;
  543. par.name = data.fileName;
  544. thisData.docId = "";
  545. }
  546. }
  547. return toRaw(par);
  548. });
  549. iFrameData.value = arr;
  550. // console.log("addFileTab", arr);
  551. };
  552. //创建tab标签事件
  553. const addTab = (data) => {
  554. // console.log("addTab", data);
  555. const arr = toRaw(editableTabs.value);
  556. if (!arr.some((item) => item.label == data.fileName)) {
  557. // editableTabs.value.push({
  558. // label: data.fileName,
  559. // path: JSON.stringify(data),
  560. // });
  561. editableTabs.value.push({
  562. label: data.fileName,
  563. path: JSON.stringify(data),
  564. });
  565. //需要jSON去转 否则页面无变化 离谱得很
  566. editableTabs.value = JSON.parse(JSON.stringify(editableTabs.value));
  567. // editableTabsValue.value = data.path;
  568. }
  569. };
  570. const addFolderAdd = (data) => {
  571. console.log("data", data);
  572. const arr = toRaw(editableTabs.value);
  573. if (!arr.some((item) => item.label == data.row.dirName)) {
  574. editableTabs.value.push({
  575. label: data.name,
  576. path: data.path,
  577. clickRowId: data.row,
  578. });
  579. //需要jSON去转 否则页面无变化 离谱得很
  580. editableTabs.value = JSON.parse(JSON.stringify(editableTabs.value));
  581. }
  582. console.log("editableTabs", toRaw(editableTabs.value));
  583. };
  584. provide("addTab", addTab);
  585. provide("addFolderAdd", addFolderAdd);
  586. provide("addFileTab", addFileTab);
  587. // TODO 删除tab事件
  588. const closeTab = (item, index, e) => {
  589. e.preventDefault();
  590. e.stopPropagation();
  591. editableTabs.value.splice(index, 1);
  592. editableTabs.value = JSON.parse(JSON.stringify(editableTabs.value));
  593. const nextTab =
  594. editableTabs.value[index + 1] || editableTabs.value[index - 1];
  595. clickTab(nextTab.path);
  596. // console.log("item", item);
  597. // console.log("index", index);
  598. // console.log("e", e);
  599. };
  600. // TODO 删除tab事件
  601. const closeFileTab = (item, index, e) => {
  602. e.preventDefault();
  603. e.stopPropagation();
  604. const data = toRaw(item);
  605. console.log("closeFileTab", data);
  606. const arr = iFrameData.value.map((par) => {
  607. if (par.id === data.id) {
  608. par.src = "";
  609. par.show = false;
  610. par.name = "";
  611. }
  612. return toRaw(par);
  613. });
  614. iFrameData.value = arr;
  615. // console.log("index", index);
  616. // console.log("e", e);
  617. };
  618. </script>
  619. <style lang="scss" scoped>
  620. @import "@/assets/styles/mixin.scss";
  621. @import "@/assets/styles/variables.module.scss";
  622. //整体布局css
  623. .common-layout,
  624. .el-container {
  625. height: 94vh;
  626. }
  627. :deep .el-main {
  628. --el-main-padding: 8px !important;
  629. }
  630. .nav {
  631. background: #06286c;
  632. height: 48px;
  633. .nav-top {
  634. width: 98%;
  635. display: flex;
  636. justify-content: space-between;
  637. & > div:first-child {
  638. font-family: "Inter-SemiBold";
  639. }
  640. & > div:first-child,
  641. & > div:last-child {
  642. display: flex;
  643. align-items: center;
  644. color: #fff;
  645. & > img {
  646. width: 48px;
  647. height: 48px;
  648. }
  649. }
  650. .logoImg {
  651. width: 150px !important;
  652. height: 100%;
  653. margin-right: 10px;
  654. }
  655. }
  656. .head-img {
  657. border-radius: 12px;
  658. width: 24px;
  659. height: 24px;
  660. margin-right: 10px;
  661. }
  662. .avatar-wrapper {
  663. color: #fff;
  664. display: flex;
  665. align-items: center;
  666. }
  667. .search {
  668. .w-50,
  669. :deep .el-input {
  670. width: 400px;
  671. height: 32px;
  672. border-radius: 4px;
  673. margin-top: 8px;
  674. background: #6f85b5 !important;
  675. --el-input-border-color: #6f85b5;
  676. }
  677. ::v-deep .el-input__inner {
  678. color: #fff !important;
  679. }
  680. }
  681. :deep .el-input__wrapper {
  682. background: #1f3f7e !important;
  683. }
  684. }
  685. .asides {
  686. padding: 8px 10px !important;
  687. font-size: 14px;
  688. color: #000;
  689. background: #fff;
  690. }
  691. .main {
  692. background: #c7cbd8;
  693. }
  694. // tabs标签
  695. .tab_box {
  696. width: 100%;
  697. height: 32px;
  698. border-radius: 4px 4px 4px 4px;
  699. background-color: #fff;
  700. margin-bottom: 8px;
  701. .common-tabs {
  702. height: 32px;
  703. // display: flex;
  704. // align-items: center;
  705. }
  706. .tab_pane {
  707. display: flex;
  708. align-items: center;
  709. justify-content: space-between;
  710. img {
  711. margin-left: 8px;
  712. width: 10px;
  713. height: 10px;
  714. }
  715. }
  716. }
  717. :deep(.common-tabs .el-tabs__item) {
  718. height: 24px !important;
  719. padding: 0px 8px !important;
  720. margin-top: 4px !important;
  721. margin-left: 4px !important;
  722. border: 1px solid #c1cce3 !important;
  723. color: #505870 !important;
  724. font-size: 12px !important;
  725. line-height: 24px;
  726. font-weight: 400 !important;
  727. }
  728. // tag选中颜色
  729. :deep(.common-tabs .el-tabs__item.is-active) {
  730. color: #fff !important;
  731. font-weight: normal;
  732. background-color: #6f85b5;
  733. }
  734. //侧边栏css
  735. .acitve-img-style {
  736. background-color: #f5f7f9;
  737. border-radius: 4px;
  738. }
  739. .img-style {
  740. width: 72px;
  741. height: 72px;
  742. display: flex;
  743. margin-bottom: 8px;
  744. flex-direction: column;
  745. align-items: center;
  746. justify-content: center;
  747. & > img {
  748. width: 40px;
  749. height: 40px;
  750. }
  751. }
  752. .text-style {
  753. text-align: center;
  754. color: #000;
  755. }
  756. </style>
  757. <style lang="scss" scoped>
  758. .el-popper.is-light.type_popper {
  759. background-color: #1f3f7e !important;
  760. border-radius: 4px 4px 4px 4px !important;
  761. border: none !important;
  762. // padding: 0 16px !important;
  763. // box-sizing: border-box !important;
  764. }
  765. .el-popper__arrow::before {
  766. content: none;
  767. }
  768. //鼠标移动上去的选中色
  769. .type_popper {
  770. .el-select-dropdown__item.hover,
  771. .el-select-dropdown__item:hover {
  772. background: #6f85b5 !important;
  773. }
  774. //下拉框的文本颜色
  775. .el-select-dropdown__item {
  776. color: #a4b0d8 !important;
  777. }
  778. //选中之后的颜色
  779. .el-select-dropdown__item.selected {
  780. background: #6f85b5 !important;
  781. color: #fff !important;
  782. }
  783. }
  784. .yuandian {
  785. width: 8px;
  786. height: 8px;
  787. position: absolute;
  788. right: 8px;
  789. top: 6px;
  790. background: #fa5151;
  791. border-radius: 4px;
  792. }
  793. ::v-deep .qualityManual-container-office {
  794. width: 1000px !important;
  795. height: 1000px !important;
  796. iframe {
  797. width: 1000px !important;
  798. height: 1000px !important;
  799. }
  800. }
  801. </style>