indexCommon.vue 22 KB

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