index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785
  1. <template>
  2. <div class="container">
  3. <!-- 搜索标题 -->
  4. <div class="searchTitle">
  5. <el-icon @click="goBack">
  6. <ArrowLeftBold />
  7. </el-icon>
  8. <div class="colLine"></div>
  9. <div class="searchTitle_text">“{{ searchText }}”的搜索结果</div>
  10. </div>
  11. <!-- 搜索选项 -->
  12. <div class="searchType">
  13. <div class="searchFor">
  14. <div class="search_title">搜索范围:</div>
  15. <el-tabs v-model="searchFor" class="demo-tabs" @tab-change="changeSearchFor">
  16. <el-tab-pane label="全部" name=""></el-tab-pane>
  17. <el-tab-pane label="公共" name="1"></el-tab-pane>
  18. <el-tab-pane label="部门" name="2"></el-tab-pane>
  19. <el-tab-pane label="个人" name="3"></el-tab-pane>
  20. </el-tabs>
  21. </div>
  22. <div class="line"></div>
  23. <div class="searchFor">
  24. <div class="search_title">分类:</div>
  25. <el-tabs v-model="searchType" class="demo-tabs" @tab-change="changeSearchType">
  26. <el-tab-pane label="全部" name="all"></el-tab-pane>
  27. <el-tab-pane label="文档" name="doc"></el-tab-pane>
  28. <el-tab-pane label="图片" name="img"></el-tab-pane>
  29. <el-tab-pane label="音频" name="audio"></el-tab-pane>
  30. <el-tab-pane label="视频" name="video"></el-tab-pane>
  31. <el-tab-pane label="压缩包" name="zip"></el-tab-pane>
  32. </el-tabs>
  33. </div>
  34. </div>
  35. <!-- 排序显示 -->
  36. <div class="statistics">
  37. <div class="left_box">
  38. <div class="dataNum">共查询到{{ total }}个相关结果</div>
  39. </div>
  40. <div class="right_box">
  41. <img src="@/assets/images/sort.png" @click="changeSort" v-if="isAsc == 'asc'" alt="" />
  42. <img src="@/assets/images/Frame_188.png" @click="changeSort" v-else alt="" />
  43. <img v-if="isList" src="@/assets/images/squre.png" alt="" @click="changeShow" />
  44. <img v-else src="@/assets/images/Frame_187.png" alt="" @click="changeShow" />
  45. </div>
  46. </div>
  47. <!-- 文件列表 -->
  48. <div class="fileList">
  49. <div>
  50. <div v-if="isList" style="height: calc(98vh - 220px);overflow-y: hidden;">
  51. <!-- 表格 -->
  52. <el-table :data="tableData" style="width: 100%;height:calc(98vh - 220px);" ref="container"
  53. @scroll="handleScroll" @row-click="clickRow">
  54. <el-table-column label="名称" width="400">
  55. <template #default="scope">
  56. <div class="flie_name">
  57. <img class="table_icon" :src="setIcon(scope.row.fileType)" alt="" style="" />
  58. {{ scope.row.fileName }}
  59. </div>
  60. </template>
  61. </el-table-column>
  62. <el-table-column prop="space.spaceName" label="所属空间" width="300" />
  63. <el-table-column prop="createTime" label="时间" width="200" />
  64. <el-table-column prop="fileType" label="类型" width="200" />
  65. <el-table-column prop="fileSize" label="大小" width="200">
  66. <template #default="scope">
  67. <div>{{ formatFileSize(scope.row.fileSize) }}</div>
  68. </template>
  69. </el-table-column>
  70. <el-table-column prop="dir.dirPath" label="文件夹" width="200">
  71. <template #default="scope">
  72. <div class="folder">
  73. {{ scope.row.dir ? scope.row.dir.dirPath : "" }}
  74. </div>
  75. </template>
  76. </el-table-column>
  77. </el-table>
  78. <!-- <div class="pageBox">
  79. <Pagination :total="total" :page="page" :limit="limit" @pagination="pagination"></Pagination>
  80. </div> -->
  81. </div>
  82. <div v-else>
  83. <!-- 平铺 -->
  84. <div class="tile_box" @scroll="handleScrollG">
  85. <div class="file_box" v-for="item in tableData" :key="item" @click="clickRow(item)">
  86. <img class="big_file_img" :src="setIcon(item.fileType)" alt="" />
  87. <el-tooltip
  88. class="box-item"
  89. effect="dark"
  90. :content="item.fileName "
  91. :show-after='1000'
  92. placement="bottom"
  93. >
  94. <span class="missing">{{ item.fileName }}</span>
  95. </el-tooltip>
  96. <!-- <span class="missing">{{ item.fileName }}</span> -->
  97. <!-- <span class="missingPass">{{ item.fileName }}</span> -->
  98. </div>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. <ImgPreview :previewData="previewData" :copyFileType="copyFileType" :showPreview="showPreview"
  105. @closeImgPreview="closeImgPreview"></ImgPreview>
  106. <div v-loading.fullscreen="loadingPreview" v-if="loadingPreview" class="lodingBox"></div>
  107. </template>
  108. <script setup>
  109. import { onMounted, ref, toRaw, inject, watch } from "vue";
  110. import { search } from "@/api/search/search.js";
  111. import { flieSearch } from "@/api/search/search.js";
  112. import { useRoute, useRouter, onBeforeRouteUpdate } from "vue-router";
  113. import Pagination from "@/components/Pagination/index.vue";
  114. import ImgPreview from '@/components/ImgPreview/ImgPreview.vue'
  115. import { canPreviewFile, rightMenuRole } from "@/utils/index.js"
  116. import { preview } from "@/api/common/common.js";
  117. import { ElMessageBox, ElMessage } from "element-plus";
  118. //---------------导入图片--------------------------
  119. import file_DOC from "@/assets/images/fileType/file_DOC.png";
  120. import file_pdf from "@/assets/images/fileType/file_pdf.png";
  121. import file_PPT from "@/assets/images/fileType/file_PPT.png";
  122. import file_TXT from "@/assets/images/fileType/file_TXT.png";
  123. import file_XLSX from "@/assets/images/fileType/file_XLSX.png";
  124. import file_pic from "@/assets/images/fileType/file_pic.png";
  125. import file_audio from "@/assets/images/fileType/file_audio.png";
  126. import file_video from "@/assets/images/fileType/file_video.png";
  127. import file_zip from "@/assets/images/fileType/file_zip.png";
  128. //----------------------------------------
  129. const searchFor = ref(""); //搜索范围
  130. const searchType = ref("all"); //搜索对象
  131. const fileTypes = ref()
  132. const checkState = ref(false); //勾选框状态
  133. const activeNames = ref(["folder", "file"]);
  134. const isList = ref(true); //控制显示方式
  135. const isContent = ref(false); //内容搜索
  136. // const total = ref(0); //数据总条数
  137. const searchText = ref(""); //搜索ipt的值
  138. const baseData = ref(); //搜索出的原始数据
  139. const isAsc = ref("asc");
  140. const router = useRouter(); //注册路由
  141. const route = useRoute(); //注册路由
  142. //---------分页--------------
  143. const total = ref(0);
  144. const page = ref(1);
  145. const limit = ref(2); //pagesize
  146. //---------------------------
  147. const container = ref(null)
  148. const historyParams = history.state.params
  149. console.log('historyParams', historyParams);
  150. const loadingPreview = ref(false)
  151. const showPreview = ref(false)//控制图片预览组件显示
  152. const previewData = ref()
  153. const copyFileType = ref()
  154. const reload = inject("reload");
  155. const addFileTab = inject("addFileTab");
  156. const tableData = ref([]);
  157. // 切换搜索范围
  158. const changeSearchFor = async(name) => {
  159. numnum = 1
  160. numG = 1
  161. const typeArr = setType(searchType.value);
  162. let baseDataObj = toRaw(baseData.value);
  163. fileTypes.value = ''
  164. if (name == 'all') {
  165. fileTypes.value = ''
  166. } else if(name == '1') {
  167. fileTypes.value = 1
  168. // tableData.value = toRaw(baseDataObj).filter(
  169. // (item) => item.space.spaceType == name && typeArr.includes(item.fileType)
  170. // );
  171. }else if(name == '2'){
  172. fileTypes.value = 2
  173. }else if(name == '3'){
  174. fileTypes.value = 3
  175. }
  176. if(isList.value){
  177. let res = await flieSearch({
  178. keyword:searchText.value,
  179. type:fileTypes.value,
  180. isAsc: isAsc.value,
  181. pageSize: 20,
  182. pageNum: 1,
  183. })
  184. total.value = res.total;
  185. tableData.value = res.rows
  186. baseData.value = res.rows
  187. console.log(res,'filter',fileTypes.value);
  188. }else{
  189. let res = await flieSearch({
  190. keyword:searchText.value,
  191. type:fileTypes.value,
  192. isAsc: isAsc.value,
  193. pageSize: 80,
  194. pageNum: numG,
  195. })
  196. total.value = res.total;
  197. tableData.value = res.rows
  198. baseData.value = res.rows
  199. console.log(res,'filter',fileTypes.value);
  200. }
  201. changeSearchType(searchType.value)
  202. };
  203. // 切换搜索分类
  204. const changeSearchType = (name) => {
  205. numnum = 1
  206. numG = 1
  207. let baseDataObj = toRaw(baseData.value);
  208. console.log('baseDataObj',baseDataObj);
  209. if (name == 'all') {
  210. tableData.value = baseDataObj
  211. } else {
  212. // 获取分类具体数据
  213. console.log(name, 'name');
  214. console.log(searchFor.value, 'searchFor');
  215. const typeArr = setType(name);
  216. console.log(typeArr, '类型');
  217. tableData.value = toRaw(baseDataObj).filter((item) => {
  218. console.log(item, '遍历');
  219. return typeArr.includes(item.fileType) && (item.space.spaceType == searchFor.value || searchFor.value =='');
  220. });
  221. console.log(tableData.value, '数组');
  222. }
  223. };
  224. const changeShow = () => {
  225. isList.value = !isList.value;
  226. };
  227. const changeSort = async () => {
  228. numnum = 1
  229. numG = 1
  230. isAsc.value == "asc" ? (isAsc.value = "desc") : (isAsc.value = "asc");
  231. let query ={}
  232. if(isList.value){
  233. query = {
  234. keyword: searchText.value,
  235. isAsc: isAsc.value,
  236. type:fileTypes.value,
  237. orderByColumn: "createTime",
  238. pageSize: 20,
  239. pageNum: 1,
  240. };
  241. }else{
  242. query = {
  243. keyword: searchText.value,
  244. isAsc: isAsc.value,
  245. type:fileTypes.value,
  246. orderByColumn: "createTime",
  247. pageSize: 80,
  248. pageNum: 1,
  249. };
  250. }
  251. const res = await flieSearch(query);
  252. baseData.value = res.rows;
  253. tableData.value = res.rows;
  254. // changeSearchFor('');
  255. // console.log("res", res);
  256. console.log(searchFor.value,'search');
  257. };
  258. // 根据选项对数据处理,返回处理后的数据
  259. const fliterListData = (dataList) => {
  260. return dataList;
  261. };
  262. // 回退
  263. const goBack = () => {
  264. router.back();
  265. };
  266. //分页
  267. const handleSizeChange = (val) => {
  268. limit.value = val;
  269. };
  270. const handleCurrentChange = (val) => {
  271. page.value = val;
  272. };
  273. const pagination = async (obj) => {
  274. console.log(obj, 'page');
  275. isAsc.value == "asc" ? (isAsc.value = "desc") : (isAsc.value = "asc");
  276. const query = {
  277. keyword: searchText.value,
  278. isAsc: isAsc.value,
  279. page: obj.page,
  280. size: obj.limit,
  281. orderByColumn: "createTime",
  282. };
  283. const res = await flieSearch(query);
  284. baseData.value = res.rows;
  285. tableData.value = res.rows;
  286. changeSearchFor(searchFor.value);
  287. };
  288. // 点击预览事件
  289. const clickRow =async (row)=>{
  290. console.log('row',row);
  291. const typeArr = ['.png', '.jpg', '.jpeg', '.JPG','.PNG', '.mp3', '.mp4']
  292. // loadingPreview.value = true
  293. const filePreview = canPreviewFile(row.fileType)
  294. if (filePreview) {
  295. loadingPreview.value = false
  296. addFileTab(row, 0,0);
  297. } else if(typeArr.some(item=>item == row.fileType)) {
  298. const res = await preview(row.docId)
  299. copyFileType.value = row.fileType
  300. showPreview.value = true
  301. previewData.value = URL.createObjectURL(res)
  302. }else{
  303. ElMessage.error("该文件格式不支持预览!");
  304. }
  305. loadingPreview.value = false
  306. }
  307. //关闭图片预览事件
  308. const closeImgPreview = () => {
  309. // console.log('close');
  310. showPreview.value = false
  311. }
  312. // 设置图标
  313. const setIcon = (fileType) => {
  314. switch (fileType) {
  315. case ".docx":
  316. return file_DOC;
  317. break;
  318. case ".pdf":
  319. return file_pdf;
  320. break;
  321. case ".ppt":
  322. return file_PPT;
  323. break;
  324. case ".txt":
  325. return file_TXT;
  326. break;
  327. case ".xlsx":
  328. return file_XLSX;
  329. break;
  330. case ".csv":
  331. return file_XLSX;
  332. break;
  333. case ".png":
  334. return file_pic;
  335. break;
  336. case ".mp3":
  337. return file_audio;
  338. break;
  339. case ".mp4":
  340. return file_video;
  341. break;
  342. case ".zip":
  343. return file_zip;
  344. break;
  345. default:
  346. return file_DOC;
  347. break;
  348. }
  349. };
  350. // 设置分类
  351. const setType = (fileType) => {
  352. switch (fileType) {
  353. case "doc":
  354. return [".txt", ".ppt", ".pdf", ".docx", ".csv", ".wps", ".xls", '.pptxs', '.dll', '.pptx', '.doc'];
  355. break;
  356. case "img":
  357. return [".png",".PNG", ".jpg", ".jpeg"];
  358. break;
  359. case "audio":
  360. return [".mp3"];
  361. break;
  362. case "video":
  363. return [".mp4", '.qlv'];
  364. break;
  365. case "zip":
  366. return [".zip", ".rar", ".7z"];
  367. break;
  368. default:
  369. return [""];
  370. break;
  371. }
  372. };
  373. function formatFileSize(fileSize) {
  374. if (fileSize >= 1024 * 1024 * 1024) {
  375. // 大于等于1GB,显示GB
  376. return (fileSize / (1024 * 1024 * 1024)).toFixed(2) + "GB";
  377. } else if (fileSize >= 1024 * 1024) {
  378. // 大于等于1MB,显示MB
  379. return (fileSize / (1024 * 1024)).toFixed(2) + "MB";
  380. } else if (fileSize >= 1024) {
  381. // 大于等于1KB,显示KB
  382. return (fileSize / 1024).toFixed(2) + "KB";
  383. } else {
  384. // 小于1KB,显示字节
  385. return fileSize + "B";
  386. }
  387. }
  388. let numnum = 1
  389. let numG = 1
  390. async function handleScroll(e) {
  391. console.log(e, '出发了');
  392. const tableContainer = e.target;
  393. const scrollPosition = tableContainer.scrollTop + tableContainer.clientHeight;
  394. const contentHeight = tableContainer.scrollHeight;
  395. // console.log(scrollPosition, contentHeight, '对比');
  396. if (scrollPosition + 0.40005 >= contentHeight) {
  397. console.log('到底了');
  398. numnum++
  399. const query = {
  400. keyword: searchText.value,
  401. type:fileTypes.value,
  402. isAsc: isAsc.value,
  403. orderByColumn: "createTime",
  404. pageSize: 20,
  405. pageNum: numnum,
  406. };
  407. const res = await flieSearch(query);
  408. tableData.value = [...tableData.value, ...res.rows]
  409. }
  410. }
  411. async function handleScrollG(e) {
  412. if(tableData.value.length >= total.value) return
  413. console.log(e, '出发了');
  414. const tableContainer = e.target;
  415. const scrollPosition = tableContainer.scrollTop + tableContainer.clientHeight;
  416. const contentHeight = tableContainer.scrollHeight;
  417. // console.log(scrollPosition, contentHeight, '对比');
  418. if (scrollPosition + 0.40005 >= contentHeight) {
  419. numG++
  420. const query = {
  421. keyword: searchText.value,
  422. type:fileTypes.value,
  423. isAsc: isAsc.value,
  424. orderByColumn: "createTime",
  425. pageSize: 90,
  426. pageNum: numG,
  427. };
  428. const res = await flieSearch(query);
  429. tableData.value = [...tableData.value, ...res.rows]
  430. }
  431. }
  432. watch(() => isList.value, (newValue, oldValue) => {
  433. // console.log('editableTabs 发生改变了', newValue, oldValue);
  434. numG = 1
  435. if(!newValue){
  436. console.log('切换到宫格了');
  437. const query = {
  438. keyword: searchText.value,
  439. isAsc: isAsc.value,
  440. orderByColumn: "createTime",
  441. pageSize: 90,
  442. pageNum: numG,
  443. };
  444. flieSearch(query).then(res=>{
  445. tableData.value = [ ...res.rows]
  446. });
  447. }
  448. });
  449. onMounted(() => {
  450. let antherContainer = container.value.$el.querySelector('.el-scrollbar__wrap')
  451. antherContainer.addEventListener('scroll', handleScroll);
  452. const JparData = history.state.clickRowId
  453. const parData = JSON.parse(JparData)
  454. searchText.value = parData.searchText;
  455. let searchData = parData.searchData;
  456. baseData.value = searchData.rows;
  457. tableData.value = searchData.rows;
  458. console.log('tableData',tableData.value);
  459. total.value = searchData.total;
  460. changeSearchFor('');
  461. });
  462. // onBeforeRouteUpdate((to, from) => {
  463. // console.log('to', to);
  464. // console.log('from', from);
  465. // })
  466. // watch(() => history, (newValue, oldValue) => {
  467. // console.log('history 发生改变了', newValue, oldValue);
  468. // }, {
  469. // immediate: true,
  470. // deep: true
  471. // });
  472. </script>
  473. <style lang="scss" scoped>
  474. .container {
  475. height: calc(98vh - 48px - 8px - 32px - 8px);
  476. background-color: #fff;
  477. border-radius: 4px;
  478. overflow: hidden;
  479. }
  480. .lodingBox {
  481. position: absolute;
  482. top: 0;
  483. left: 0;
  484. width: 100vh;
  485. height: 100vh;
  486. z-index: 10000000;
  487. }
  488. .searchTitle {
  489. width: 100%;
  490. height: 40px;
  491. padding-left: 8px;
  492. display: flex;
  493. align-items: center;
  494. .colLine {
  495. margin-left: 5px;
  496. height: 100%;
  497. border-right: 1px solid #c1cce3;
  498. }
  499. .searchTitle_text {
  500. font-size: 16px;
  501. font-weight: 400;
  502. line-height: 24px;
  503. margin-left: 16px;
  504. }
  505. }
  506. .searchType {
  507. width: 100%;
  508. height: 40px;
  509. box-sizing: border-box;
  510. background-color: #f5f7f9;
  511. border-top: 1px solid #c1cce3;
  512. border-bottom: 1px solid #c1cce3;
  513. padding-left: 16px;
  514. display: flex;
  515. align-items: center;
  516. .searchFor {
  517. height: 100%;
  518. display: flex;
  519. // align-items: center;
  520. .search_title {
  521. height: 100%;
  522. line-height: 40px;
  523. font-size: 14px;
  524. font-weight: 500;
  525. font-family: Inter-Medium;
  526. }
  527. }
  528. .line {
  529. width: 1px;
  530. height: 24px;
  531. border-left: 1px solid #c1cce3;
  532. margin: 0 16px;
  533. }
  534. }
  535. .statistics {
  536. width: 100%;
  537. height: 40px;
  538. // background-color: #ccc;
  539. padding-left: 16px;
  540. display: flex;
  541. justify-content: space-between;
  542. align-items: center;
  543. .left_box {
  544. display: flex;
  545. align-items: center;
  546. .dataNum {
  547. margin-left: 4px;
  548. font-size: 14px;
  549. font-weight: 400;
  550. }
  551. }
  552. .right_box {
  553. width: 50px;
  554. display: flex;
  555. justify-content: space-between;
  556. margin-right: 30px;
  557. img {
  558. cursor: pointer;
  559. }
  560. }
  561. }
  562. .fileList {
  563. height: 100%;
  564. .content_box {
  565. width: 100%;
  566. height: 100%;
  567. padding: 16px;
  568. .oneBox {
  569. width: 100%;
  570. height: 120px;
  571. border-bottom: 1px dashed #c1cce3;
  572. .fileName {
  573. font-size: 16px;
  574. color: #2e6bc8;
  575. text-decoration: underline;
  576. font-family: Inter-SemiBold;
  577. }
  578. .flieTime {
  579. font-size: 12px;
  580. font-weight: 400;
  581. color: #06286c;
  582. line-height: 20px;
  583. }
  584. .flieContent {
  585. width: 100%;
  586. font-size: 14px;
  587. color: #000000;
  588. font-weight: 400;
  589. line-height: 22px;
  590. display: -webkit-box;
  591. -webkit-box-orient: vertical;
  592. text-overflow: ellipsis;
  593. -webkit-line-clamp: 3; //例如超过3行显示省略号
  594. overflow: hidden;
  595. em {
  596. color: #dd2025;
  597. }
  598. }
  599. }
  600. }
  601. }
  602. //表格文本超出隐藏
  603. ::v-deep .flie_name,
  604. .folder {
  605. /*第一步: 溢出隐藏 */
  606. overflow: hidden;
  607. /* 第二步:让文本不会换行, 在同一行继续 */
  608. white-space: nowrap;
  609. /* 第三步:用省略号来代表未显示完的文本 */
  610. text-overflow: ellipsis;
  611. }
  612. // tag间距
  613. :deep(.el-tabs__item) {
  614. padding: 0 16px !important;
  615. color: #505870 !important;
  616. font-weight: 400 !important;
  617. }
  618. // tag选中颜色
  619. :deep(.el-tabs__item.is-active) {
  620. color: #2e6bc8 !important;
  621. font-weight: normal;
  622. font-family: Inter-SemiBold;
  623. }
  624. :deep(.el-tabs__active-bar) {
  625. background-color: #2e6bc8;
  626. }
  627. :deep(.el-table__inner-wrapper::before) {
  628. background-color: #fff !important;
  629. }
  630. :deep(.el-collapse,
  631. .el-collapse-item__wrap) {
  632. border: none;
  633. }
  634. .table_icon {
  635. height: 27px;
  636. width: 27px;
  637. vertical-align: middle;
  638. }
  639. :deep(.el-collapse-item__content) {
  640. padding-bottom: 0;
  641. }
  642. :deep(.el-collapse-item__header) {
  643. background-color: #ebeff6 !important;
  644. width: 100% !important;
  645. height: 24px !important;
  646. }
  647. :deep(.el-collapse-item__arrow ){
  648. position: relative;
  649. color: #2e6bc8;
  650. right: 97%;
  651. }
  652. :deep(.el-table td.el-table__cell ){
  653. border: none;
  654. font-size: 14px !important;
  655. font-weight: 400 !important;
  656. color: #000 !important;
  657. }
  658. :deep(.el-table__row) {
  659. height: 35px !important;
  660. }
  661. :deep(.el-table .el-table__header-wrapper th) {
  662. border-bottom: none;
  663. border-right: 1px solid #c1cce3;
  664. background-color: #fff !important;
  665. color: #505870;
  666. font-size: 14px;
  667. }
  668. .collapseItem_title {
  669. position: relative;
  670. left: 40px;
  671. color: #2e6bc8;
  672. font-family: Inter-Medium;
  673. font-size: 12px;
  674. }
  675. // 表格右边3个靠右对齐
  676. ::v-deep .el-table__header thead tr th {
  677. font-family: Inter-Medium;
  678. font-size: 14px;
  679. color: #505870;
  680. // text-align: right;
  681. }
  682. //平铺
  683. .tile_box {
  684. width: 100%;
  685. height: calc(98vh - 220px);
  686. display: flex;
  687. flex-wrap: wrap;
  688. overflow-y:auto ;
  689. align-items: flex-start;
  690. align-content: flex-start;
  691. .file_box {
  692. width: 116px;
  693. min-height: 138px;
  694. // border: 1px solid #000;
  695. display: flex;
  696. flex-direction: column;
  697. align-items: center;
  698. .big_file_img {
  699. width: 100px;
  700. height: 100px;
  701. }
  702. span {
  703. font-size: 14px;
  704. font-weight: 400;
  705. line-height: 22px;
  706. }
  707. }
  708. }
  709. .missing {
  710. width: 90px;
  711. white-space: nowrap;
  712. overflow: hidden;
  713. text-overflow: ellipsis
  714. }
  715. // .missing:hover~.missingPass {
  716. // display: block;
  717. // }
  718. .missingPass {
  719. display: none;
  720. width: 140px;
  721. background-color: black;
  722. border-radius: 5px;
  723. color: white;
  724. text-align: center;
  725. z-index: 30 important;
  726. margin-left: 25px;
  727. font-size: 14px;
  728. }
  729. // :deep(.cell) {
  730. // text-align: center;
  731. // }
  732. // :deep(.el-table td.el-table__cell div) {
  733. // text-align: center;
  734. // }
  735. </style>