index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927
  1. <template>
  2. <!-- <TopTabs></TopTabs> -->
  3. <div class="page">
  4. <el-collapse v-model="activeNames" @change="handleChange">
  5. <div v-if="isList">
  6. <el-collapse-item name="folder" class="collapse_Item">
  7. <template #title>
  8. <span class="collapseItem_title">文件夹</span>
  9. </template>
  10. <!-- 表格 -->
  11. <el-table
  12. :data="tableFolderData"
  13. style="width: 100%"
  14. height="42.5vh"
  15. :scrollbar-always-on="true"
  16. @row-click="changeFile"
  17. >
  18. <el-table-column fixed prop="date" label="名称" width="500">
  19. <template #default="scope">
  20. <div>
  21. <img
  22. class="table_icon"
  23. src="@/assets/images/fileBox.png"
  24. alt=""
  25. style=""
  26. />
  27. <span class="shouzhi">{{ scope.row.dirName }}</span>
  28. </div>
  29. </template>
  30. </el-table-column>
  31. <el-table-column prop="createTime" label="时间" width="200" />
  32. <el-table-column prop="state" label="类型" width="180"
  33. >文件夹</el-table-column
  34. >
  35. <!-- <el-table-column prop="city" label="大小" width="160" /> -->
  36. </el-table>
  37. </el-collapse-item>
  38. <el-collapse-item name="file" class="collapse_Item">
  39. <template #title>
  40. <span class="collapseItem_title">文件</span>
  41. </template>
  42. <!-- 表格 -->
  43. <el-table
  44. :data="tableFileData"
  45. style="width: 100%"
  46. height="40vh"
  47. :scrollbar-always-on="true"
  48. @row-contextmenu="handleRowClick"
  49. >
  50. <el-table-column fixed prop="date" label="名称" width="500">
  51. <template #default="scope">
  52. <div>
  53. <img
  54. class="table_icon"
  55. :src="setIcon(scope.row==null ? '':scope.row.fileType)"
  56. alt=""
  57. style=""
  58. />
  59. <span class="shouzhi"> {{ scope.row==null ? '': scope.row.fileName }}</span>
  60. </div>
  61. <!-- <span
  62. style="
  63. white-space: nowrap;
  64. overflow: hidden;
  65. text-overflow: ellipsis;
  66. "
  67. >
  68. <el-icon
  69. v-if="scope.row.isFavorite == 'N' || !scope.row.isFavorite"
  70. @click.stop="collectByStar(scope.row, false)"
  71. >
  72. <Star />
  73. </el-icon>
  74. <img
  75. v-else
  76. @click.stop="delCollect(scope.row, false)"
  77. src="../../../assets/images/yellowstar.png"
  78. alt=""
  79. />
  80. <img
  81. :src="setIcon(scope.row.fileType)"
  82. class="table_icon"
  83. alt=""
  84. />
  85. <el-tooltip
  86. class="box-item"
  87. effect="dark"
  88. :content="scope.row.fileName"
  89. placement="top"
  90. :show-after="1000"
  91. >
  92. {{ scope.row.fileName }}
  93. </el-tooltip>
  94. </span> -->
  95. </template>
  96. </el-table-column>
  97. <el-table-column prop="createTime" label="时间" width="200" />
  98. <el-table-column prop="fileType" label="类型" width="180" />
  99. <el-table-column label="大小">
  100. <template #default="scope">
  101. <span>
  102. {{ formatFileSize(scope.row==null?'':scope.row.fileSize) }}
  103. </span>
  104. </template>
  105. </el-table-column>
  106. </el-table>
  107. </el-collapse-item>
  108. <div
  109. class="setCli"
  110. v-if="cliCC"
  111. :style="{ left: xz + 'px', top: yz + 'px' }"
  112. >
  113. <template v-for="(item, index) in filterMouseCli()" :key="index">
  114. <p @click="chooseSet(item, index, 1)" class="chooseSet shouzhi" style="margin: 0;">
  115. <img :src="item.img" alt="" />
  116. {{ item.name }}
  117. <span
  118. v-if="
  119. item.name == '在线编辑' || item.name == '协作' ? true : false
  120. "
  121. style="color: #7084b4; float: right; position: relative"
  122. class="arrow"
  123. >></span
  124. >
  125. </p>
  126. </template>
  127. </div>
  128. <div
  129. class="setCli1"
  130. v-if="anyP"
  131. :style="{ left: xz + 155 + 'px', top: yz + 'px' }"
  132. >
  133. <p @click="chooseSet1(0)" class="chooseSet">
  134. <img src="../../../assets/images/user.png" alt="" />
  135. 选择人员
  136. </p>
  137. <p class="chooseSet" @click="goLock">
  138. <img src="../../../assets/images/archiveTray.png" alt="" />
  139. 归档
  140. </p>
  141. </div>
  142. </div>
  143. <div v-else>
  144. <el-collapse-item name="folder">
  145. <template #title>
  146. <span class="collapseItem_title">文件夹</span>
  147. </template>
  148. <!-- 平铺 -->
  149. <el-scrollbar height="360px">
  150. <div class="tile_box">
  151. <div class="file_box" v-for="item in tableData" :key="item">
  152. <img
  153. class="big_file_img"
  154. src="@/assets/images/fileBox.png"
  155. alt=""
  156. />
  157. <span>Inceptos</span>
  158. </div>
  159. </div>
  160. </el-scrollbar>
  161. </el-collapse-item>
  162. <el-collapse-item name="file">
  163. <template #title>
  164. <span class="collapseItem_title">文件</span>
  165. </template>
  166. <!-- 平铺 -->
  167. <el-scrollbar height="360px">
  168. <div class="tile_box">
  169. <div class="file_box" v-for="item in 20" :key="item">
  170. <img
  171. class="big_file_img"
  172. src="@/assets/images/fileType//file_DOC.png"
  173. alt=""
  174. />
  175. <span>Inceptos</span>
  176. </div>
  177. </div>
  178. </el-scrollbar>
  179. </el-collapse-item>
  180. </div>
  181. </el-collapse>
  182. <div>
  183. <FileTree
  184. v-if="fileTrees"
  185. :fileTrees="fileTrees"
  186. :newSpaceId="newSpaceId"
  187. :fileId="clickRowId"
  188. @getChildren="getChildren"
  189. :copyOrMove="copyOrMove"
  190. ></FileTree>
  191. </div>
  192. <ImgPreview
  193. :previewData="previewData"
  194. :copyFileType="copyFileType"
  195. :showPreview="showPreview"
  196. @closeImgPreview="closeImgPreview"
  197. ></ImgPreview>
  198. <div
  199. v-loading.fullscreen="loadingPreview"
  200. v-if="loadingPreview"
  201. class="lodingBox"
  202. ></div>
  203. <!-- 文件收藏 -->
  204. <div>
  205. <FileCollect
  206. v-if="collects"
  207. :collects="collects"
  208. @getCollects="getCollects"
  209. :copyFileName="copyFileName"
  210. :copyFileId="copyFileId"
  211. @refreshFile="refreshFile"
  212. :isFolder="isFolder"
  213. :clickRow="clickRow"
  214. ></FileCollect>
  215. </div>
  216. </div>
  217. </template>
  218. <script setup>
  219. import { onMounted, ref, toRaw, inject } from "vue";
  220. // import TopTabs from "@/components/TopTabs/index.vue"
  221. import { listRecent, getRecent } from "@/api/biz/recent";
  222. import { getInfo, getInfoByDirId } from "@/api/biz/info";
  223. import { getSpace } from "@/api/biz/space";
  224. import { getDir } from "@/api/biz/dir";
  225. import documents from "@/api/document/document";
  226. import ImgFile from "@/views/myfile/jsComponents/ImgFile";
  227. import FileTree from "@/views/myfile/components/FileTree.vue";
  228. import FileCollect from "@/views/myfile/modalComponebts/FileCollect.vue";
  229. import myfile from "@/api/myfile/myfile";
  230. import { getLeveldetail } from "@/api/level/level";
  231. import { canPreviewFile, rightMenuRole } from "@/utils/index.js";
  232. import { preview } from "@/api/common/common.js";
  233. import { delFavorite } from "@/api/biz/favorite.js";
  234. import ImgPreview from "@/components/ImgPreview/ImgPreview.vue";
  235. const activeNames = ref(["folder", "file"]);
  236. const isList = ref(true); //控制显示方式
  237. const tableFolderData = ref([]);
  238. const tableFileData = ref([]);
  239. const thisFolder = ref(); //当前文件夹
  240. const newDirId = ref();
  241. const newSpaceId = ref();
  242. const cliCC = ref(false); //文件右键菜单
  243. const clickRow = ref(); //当前右键的文件
  244. let xz = ref(0);
  245. let yz = ref(0);
  246. let anyP = ref(false);
  247. const thisFolderRole = ref(); //文件夹权限
  248. const workOrEdit = ref();
  249. const thanks = ref();
  250. const selectedIndex = ref();
  251. const editOnline = ref();
  252. const isFolder = ref();
  253. const copyRow = ref();
  254. const clickRowId = ref();
  255. const copyDirId = ref();
  256. const copySpaceId = ref();
  257. const copyFileId = ref();
  258. const copyFileSize = ref();
  259. const copyFileType = ref();
  260. const copyParentId = ref();
  261. const copyFileName = ref();
  262. const loadingPreview = ref(false);
  263. const onlyView = ref(false);
  264. const showPreview = ref(false);
  265. const previewData = ref();
  266. const fileTrees = ref(false);
  267. const copyOrMove = ref();
  268. const backFolder = ref();
  269. const copyFolderName = ref();
  270. const addFolderAdd = inject("addFolderAdd");
  271. const addFileTab = inject("addFileTab");
  272. let collects = ref(false);
  273. const spacePath = ref();
  274. let menuList = ref([
  275. {
  276. name: "我的空间",
  277. choose: "我的空间",
  278. },
  279. ]);
  280. let nameForm = ref({
  281. name: "",
  282. });
  283. let mouseCli = ref([
  284. {
  285. img: ImgFile.previewIcon,
  286. name: "预览",
  287. },
  288. {
  289. img: ImgFile.downLoad,
  290. name: "下载",
  291. },
  292. {
  293. img: ImgFile.addolder,
  294. name: "打开文件所在位置",
  295. },
  296. ]);
  297. const addTab = inject("addTab");
  298. //----引入图片----
  299. import file_DOC from "../../../assets/images/fileType/file_DOC.png";
  300. import file_pdf from "../../../assets/images/fileType/file_pdf.png";
  301. import file_PPT from "../../../assets/images/fileType/file_PPT.png";
  302. import file_TXT from "../../../assets/images/fileType/file_TXT.png";
  303. import file_XLSX from "../../../assets/images/fileType/file_XLSX.png";
  304. import file_pic from "../../../assets/images/fileType/file_pic.png";
  305. import file_audio from "../../../assets/images/fileType/file_audio.png";
  306. import file_video from "../../../assets/images/fileType/file_video.png";
  307. import file_zip from "../../../assets/images/fileType/file_zip.png";
  308. // -------
  309. onMounted(() => {
  310. getList();
  311. window.addEventListener("click", closeRMenu, true);
  312. });
  313. const getList = async () => {
  314. const resY = await listRecent({ isFolder: "Y" });
  315. const resN = await listRecent({ isFolder: "N" });
  316. if (resY.code === 200) {
  317. var arr = [];
  318. resY.rows.map(async (item) => {
  319. const detail = await getDir(item.relaId);
  320. if(detail.data!=null) tableFolderData.value.push(JSON.parse(JSON.stringify(detail.data)));
  321. });
  322. console.log("resYarr", arr);
  323. // tableFolderData.value = resY.rows;
  324. console.log("tableData.value = ", toRaw(tableFolderData.value));
  325. }
  326. if (resN.code === 200) {
  327. var arr = [];
  328. resN.rows.map(async (item) => {
  329. const detail = await getInfo(item.relaId);
  330. tableFileData.value.push(detail.data);
  331. });
  332. console.log("resNarr", arr);
  333. // tableFileData.value = resN.rows;
  334. console.log("tableFileData.value = ", tableFileData.value);
  335. }
  336. };
  337. const getFileDetail = () => {};
  338. const handleChange = (val) => {
  339. // console.log(val);
  340. };
  341. function changeFile(row, num) {
  342. row = toRaw(row);
  343. if (row) {
  344. backFolder.value = thisFolder.value;
  345. thisFolder.value = row;
  346. } else {
  347. row = thisFolder.value;
  348. }
  349. thisFolder.value = row;
  350. console.log("changeFilerow2", row);
  351. if (row.isEncrypt === "Y") {
  352. getLeveldetailFn(row.encryptLevel);
  353. } else {
  354. thisFolderRole.value = null;
  355. }
  356. copyParentId.value = row.parentId;
  357. newDirId.value = row.dirId;
  358. newSpaceId.value = row.spaceId;
  359. documents
  360. .getALLdocument({ parentId: row.dirId - 0, spaceId: row.spaceId - 0 })
  361. .then((res) => {
  362. tableFolderData.value = res.data;
  363. // if (res.code === 200) {
  364. if (res.data.length === 0) {
  365. myfile
  366. .getById(newDirId.value)
  367. .then((res) => {
  368. if (res.code === 200) {
  369. tableFileData.value = res.rows;
  370. }
  371. })
  372. .catch((error) => {
  373. console.error("myfile.getAllFileMenu 调用失败:", error);
  374. });
  375. } else {
  376. myfile
  377. .getById(row.dirId - 0)
  378. .then((res) => {
  379. if (res.code === 200) {
  380. tableFileData.value = res.rows;
  381. }
  382. })
  383. .catch((error) => {
  384. console.error("myfile.getAllFileMenu 调用失败:", error);
  385. });
  386. }
  387. // }
  388. });
  389. selectedIndex.value = num;
  390. const newItem = {
  391. name: row.dirName,
  392. choose: row.dirName,
  393. dirIds: row.dirId,
  394. spaceIds: row.spaceId,
  395. };
  396. // 检查 newItem 是否已存在于 menuList 中
  397. const isItemExist = menuList.value.some(
  398. (item) => item.choose === newItem.choose
  399. );
  400. // 如果不存在,则添加它
  401. if (!isItemExist) {
  402. menuList.value.push(newItem);
  403. }
  404. }
  405. // 文件名表格每一行点击事件
  406. function handleRowClick(row, col, e) {
  407. console.log("row", row);
  408. isFolder.value = "N";
  409. clickRow.value = row;
  410. e.preventDefault();
  411. e.stopPropagation();
  412. xz.value = e.pageX;
  413. yz.value = e.pageY;
  414. copyRow.value = row;
  415. clickRowId.value = row.docId;
  416. copyDirId.value = row.dirId;
  417. copySpaceId.value = row.spaceId;
  418. copyFileId.value = row.fileId;
  419. copyFileSize.value = row.fileSize;
  420. copyFileType.value = row.fileType;
  421. nameForm.value.name = row.fileName;
  422. copyFileName.value = row.fileName;
  423. if (cliCC.value === true) {
  424. cliCC.value = false;
  425. } else {
  426. cliCC.value = true;
  427. }
  428. }
  429. //mouse弹框
  430. async function chooseSet(row, index, num) {
  431. // 权限控制
  432. // if (thisFolderRole.value && thisFolderRole.value.roles) {
  433. // if (thisFolderRole.value.roles.l0600) {
  434. // const passArr = localStorage.getItem("passArr");
  435. // const passArrObj = JSON.parse(passArr);
  436. // if (
  437. // !passArrObj ||
  438. // !passArrObj.some((item) => item === clickRow.value.docId)
  439. // ) {
  440. // chooseRow.value = row;
  441. // chooseNum.value = num;
  442. // showInputPassword.value = true;
  443. // return;
  444. // }
  445. // // console.log('needc');
  446. // }
  447. // }
  448. console.log("chooseSetrow", row);
  449. console.log("chooseSetnum", num);
  450. if (row.name === "打开文件所在位置") {
  451. const dirData = await getDir(clickRow.value.dirId);
  452. const spaceData = await getSpace(clickRow.value.spaceId);
  453. console.log("getInfoByDirId", dirData.data);
  454. console.log("spaceData", spaceData.data);
  455. if (spaceData.data.spaceType == "3") {
  456. spacePath.value = "/myfile";
  457. } else if (spaceData.data.spaceType == "1") {
  458. spacePath.value = "/publicment";
  459. } else {
  460. spacePath.value = "/department";
  461. }
  462. const addData = {
  463. path: spacePath.value + dirData.data.dirId,
  464. name: dirData.data.dirName,
  465. clickRowId: toRaw(dirData.data),
  466. };
  467. console.log("addData", addData);
  468. addFolderAdd(addData);
  469. }
  470. if (row.name === "下载") {
  471. // location.href = `${import.meta.env.VITE_APP_BASE_API}/biz/info/download/${copyFileId.value}`;
  472. downLoadfile();
  473. }
  474. if (row.name === "预览") {
  475. loadingPreview.value = true;
  476. const filePreview = canPreviewFile(copyFileType.value);
  477. if (filePreview) {
  478. loadingPreview.value = false;
  479. // addTab(clickRow.value);
  480. addFileTab(clickRow.value,0);
  481. onlyView.value = true;
  482. // editOnline.value = false
  483. cliCC.value = false;
  484. } else {
  485. const res = await preview(copyRow.value.docId);
  486. showPreview.value = true;
  487. previewData.value = URL.createObjectURL(res);
  488. }
  489. loadingPreview.value = false;
  490. console.log("filePreview", filePreview);
  491. // // console.log('res',res);
  492. // const res = await preview(copyFileId.value)
  493. // showPreview.value = true
  494. // previewData.value = URL.createObjectURL(res)
  495. }
  496. }
  497. function chooseSet1(num) {
  498. workOrEdit.value = num;
  499. thanks.value = true;
  500. anyP.value = false;
  501. }
  502. function formatFileSize(fileSize) {
  503. if (fileSize >= 1024 * 1024 * 1024) {
  504. // 大于等于1GB,显示GB
  505. return (fileSize / (1024 * 1024 * 1024)).toFixed(2) + "GB";
  506. } else if (fileSize >= 1024 * 1024) {
  507. // 大于等于1MB,显示MB
  508. return (fileSize / (1024 * 1024)).toFixed(2) + "MB";
  509. } else if (fileSize >= 1024) {
  510. // 大于等于1KB,显示KB
  511. return (fileSize / 1024).toFixed(2) + "KB";
  512. } else {
  513. // 小于1KB,显示字节
  514. return fileSize + "B";
  515. }
  516. }
  517. const setIcon = (fileType) => {
  518. switch (fileType) {
  519. case ".docx":
  520. return file_DOC;
  521. break;
  522. case ".pdf":
  523. return file_pdf;
  524. break;
  525. case ".ppt":
  526. return file_PPT;
  527. break;
  528. case ".txt":
  529. return file_TXT;
  530. break;
  531. case ".xlsx":
  532. return file_XLSX;
  533. break;
  534. case ".csv":
  535. return file_XLSX;
  536. break;
  537. case ".png":
  538. return file_pic;
  539. break;
  540. case ".mp3":
  541. return file_audio;
  542. break;
  543. case ".mp4":
  544. return file_video;
  545. break;
  546. case ".zip":
  547. return file_zip;
  548. break;
  549. default:
  550. return file_DOC;
  551. break;
  552. }
  553. };
  554. //对mouseCli数组进行筛选,实现菜单的区分显示
  555. const filterMouseCli = () => {
  556. const canPreviewArray = [
  557. ".doc",
  558. ".wps",
  559. ".docm",
  560. ".docx",
  561. ".dot",
  562. ".dotm",
  563. ".dotx",
  564. ".epub",
  565. ".fodt",
  566. ".htm",
  567. ".html",
  568. ".mht",
  569. ".odt",
  570. ".ott",
  571. ".pdf",
  572. ".rtf",
  573. ".txt",
  574. ".djvu",
  575. ".xps",
  576. ".csv",
  577. ".fods",
  578. ".ods",
  579. ".ots",
  580. ".xls",
  581. ".xlsm",
  582. ".xlsx",
  583. ".xlt",
  584. ".xltm",
  585. ".xltx",
  586. ".fodp",
  587. ".odp",
  588. ".otp",
  589. ".pot",
  590. ".potm",
  591. ".potx",
  592. ".pps",
  593. ".ppsm",
  594. ".ppsx",
  595. ".ppt",
  596. ".pptm",
  597. ".pptx",
  598. ];
  599. const typeArr = [".png", ".jpg", ".jpeg", ".JPG", ".mp3", ".mp4"];
  600. const imgTypeArr = [".png", ".jpg", ".jpeg", ".JPG"];
  601. const canEditArr = [
  602. ".doc",
  603. ".docm",
  604. ".docx",
  605. ".dot",
  606. ".dotm",
  607. ".dotx",
  608. ".txt",
  609. ".djvu",
  610. ".xps",
  611. ".csv",
  612. ".fods",
  613. ".ods",
  614. ".ots",
  615. ".xls",
  616. ".xlsm",
  617. ".xlsx",
  618. ".xlt",
  619. ".xltm",
  620. ".xltx",
  621. ".fodp",
  622. ".odp",
  623. ".otp",
  624. ".doc",
  625. ".docm",
  626. ".docx",
  627. ".dot",
  628. ".dotm",
  629. ".dotx",
  630. ".epub",
  631. ".fodt",
  632. ".htm",
  633. ".html",
  634. ".mht",
  635. ".odt",
  636. ".ott",
  637. ".rtf",
  638. ".txt",
  639. ".djvu",
  640. ".xps",
  641. ".wps",
  642. ".pptx",
  643. ];
  644. let arr = [];
  645. if (
  646. !(
  647. typeArr.includes(copyFileType.value) ||
  648. canPreviewArray.includes(copyFileType.value)
  649. )
  650. ) {
  651. arr = mouseCli.value.filter((item) => item.name !== "预览");
  652. } else {
  653. arr = toRaw(mouseCli.value);
  654. }
  655. if (!canEditArr.includes(copyFileType.value)) {
  656. arr = arr.filter(
  657. (item) =>
  658. item.name !== "在线编辑" &&
  659. item.name !== "协作" &&
  660. item.name !== "历史版本"
  661. );
  662. }
  663. if (!imgTypeArr.includes(copyFileType.value)) {
  664. arr = arr.filter((item) => item.name !== "文字识别");
  665. }
  666. // console.log('arr',arr);
  667. // if (thisFolderRole.value) {
  668. // arr = rightMenuRole(toRaw(thisFolderRole.value), arr);
  669. // }
  670. return arr;
  671. };
  672. // 关闭文件夹右键菜单
  673. const closeRMenu = () => {
  674. // console.log("close");
  675. cliCC.value = false;
  676. };
  677. //关闭图片预览事件
  678. const closeImgPreview = () => {
  679. // console.log('close');
  680. showPreview.value = false;
  681. };
  682. function getChildren(data) {
  683. fileTrees.value = data;
  684. refreshFile();
  685. }
  686. function getCollects(data) {
  687. collects.value = data;
  688. }
  689. //star收藏事件
  690. const collectByStar = (row, isfolder) => {
  691. console.log("row", row);
  692. if (isfolder) {
  693. let thisRow = toRaw(row);
  694. isFolder.value = "Y";
  695. clickRow.value = thisRow;
  696. copyFolderName.value = row.dirName;
  697. copyFileName.value = clickRow.value.dirName;
  698. } else {
  699. isFolder.value = "N";
  700. clickRow.value = row;
  701. copyRow.value = row;
  702. clickRowId.value = row.docId;
  703. copyDirId.value = row.dirId;
  704. copyFileName.value = row.fileName;
  705. }
  706. collects.value = true;
  707. };
  708. // 取消文件收藏
  709. const delCollect = async (row, isfolder) => {
  710. const thisRow = toRaw(row);
  711. console.log("thisRow", thisRow);
  712. let query = {};
  713. if (isfolder) {
  714. query = {
  715. isFolder: "Y",
  716. relaId: thisRow.dirId,
  717. };
  718. } else {
  719. query = {
  720. isFolder: "N",
  721. relaId: thisRow.docId,
  722. };
  723. }
  724. const res = await delFavorite(query);
  725. //TODO 之后需要重新获取数据 并message提示
  726. console.log("res", res);
  727. refreshFile();
  728. };
  729. //刷新文件
  730. const refreshFile = () => {
  731. // console.log('ref',toRaw(thisFolder.value));
  732. if (toRaw(thisFolder.value) && toRaw(thisFolder.value).isFavorite) {
  733. //如果点开了文件夹
  734. // console.log(111);
  735. folderClick();
  736. } else {
  737. // console.log(222);
  738. getList();
  739. }
  740. };
  741. //获取权限详情
  742. const getLeveldetailFn = async (data) => {
  743. const res = await getLeveldetail(data);
  744. // console.log('getLeveldetailFn',res);
  745. if (res.code === 200) {
  746. thisFolderRole.value = res.data;
  747. }
  748. // console.log('thisFolderRole',thisFolderRole.value);
  749. };
  750. // 文件下载
  751. const downLoadfile = () => {
  752. myfile.fileDown(clickRow.value.docId).then((res) => {
  753. var reader = new FileReader();
  754. reader.onloadend = function (event) {
  755. //event 就是你要的返回内容
  756. //因为返回的报错格式是字符串,手动转换成对象,转换成功表示请求失败
  757. //转换失败就意味着你拿到的result是文件流,那么直接手动下载就好
  758. try {
  759. let data = JSON.parse(event.target.result);
  760. } catch (err) {
  761. const link = document.createElement("a"); // 创建a标签
  762. let blob = new Blob([res]);
  763. link.style.display = "none";
  764. link.href = URL.createObjectURL(blob); // 创建下载的链接
  765. link.setAttribute("download", clickRow.value.fileName); // 给下载后的文件命名
  766. document.body.appendChild(link);
  767. link.click(); // 点击下载
  768. document.body.removeChild(link); // 完成移除元素
  769. window.URL.revokeObjectURL(link.href); // 释放blob对象
  770. }
  771. };
  772. reader.readAsText(res);
  773. });
  774. };
  775. </script>
  776. <style lang="scss" scoped>
  777. @import "@/assets/styles/my-common.scss";
  778. .page {
  779. height: 100%;
  780. height: 100%;
  781. background-color: #fff;
  782. }
  783. .table_icon {
  784. height: 27px;
  785. width: 27px;
  786. vertical-align: middle;
  787. }
  788. .collapse_Item {
  789. height: 50%;
  790. }
  791. .setCli {
  792. width: 156px;
  793. max-height: auto;
  794. position: absolute;
  795. top: -70px;
  796. left: 300px;
  797. flex-wrap: 400;
  798. background-color: white;
  799. border: 1px solid gray;
  800. border-radius: 4px;
  801. z-index: 3;
  802. overflow-y: auto;
  803. // font-size: 16px;
  804. }
  805. .setCli1 {
  806. width: 156px;
  807. height: auto;
  808. position: absolute;
  809. background-color: white;
  810. border: 1px solid gray;
  811. border-radius: 4px;
  812. z-index: 100;
  813. overflow-y: auto;
  814. }
  815. .chooseSet {
  816. width: 140px;
  817. height: 30px;
  818. line-height: 30px;
  819. margin: 5px auto;
  820. font-size: 13px;
  821. // display: flex;
  822. // align-items: center;
  823. // position: relative;
  824. img {
  825. margin-right: 4px;
  826. vertical-align: middle;
  827. }
  828. }
  829. .chooseSet:hover {
  830. width: 140px;
  831. height: 30px;
  832. line-height: 30px;
  833. margin: 5px auto;
  834. font-size: 13px;
  835. background-color: #f5f7f9;
  836. /* color: white; */
  837. }
  838. ::v-deep .el-collapse-item__content {
  839. padding-bottom: 0;
  840. height: 50% !important;
  841. }
  842. ::v-deep .el-collapse-item__header {
  843. background-color: #ebeff6 !important;
  844. width: 100% !important;
  845. height: 24px !important;
  846. }
  847. ::v-deep .el-collapse-item__arrow {
  848. position: relative;
  849. color: #2e6bc8;
  850. right: 97%;
  851. }
  852. ::v-deep .el-table td.el-table__cell {
  853. border: none;
  854. font-size: 14px !important;
  855. font-weight: 400 !important;
  856. color: #000 !important;
  857. }
  858. ::v-deep .el-table__row {
  859. height: 35px !important;
  860. }
  861. ::v-deep .el-table .el-table__header-wrapper th {
  862. border-bottom: none;
  863. border-right: 1px solid #c1cce3;
  864. background-color: #fff !important;
  865. color: #505870;
  866. font-size: 14px;
  867. }
  868. .collapseItem_title {
  869. position: relative;
  870. left: 40px;
  871. color: #2e6bc8;
  872. font-family: Inter-Medium;
  873. font-size: 12px;
  874. }
  875. // 表格右边3个靠右对齐
  876. ::v-deep .el-table__header thead tr th {
  877. font-family: Inter-Medium;
  878. font-size: 14px;
  879. color: #505870;
  880. text-align: right;
  881. &:nth-child(1) {
  882. text-align: left;
  883. }
  884. }
  885. ::v-deep .el-table__body tbody [class*="column_"] {
  886. text-align: right;
  887. &:nth-child(4n + 1) {
  888. text-align: left;
  889. }
  890. }
  891. //平铺
  892. .tile_box {
  893. width: 100%;
  894. height: 300px;
  895. display: flex;
  896. flex-wrap: wrap;
  897. .file_box {
  898. width: 116px;
  899. min-height: 138px;
  900. // border: 1px solid #000;
  901. display: flex;
  902. flex-direction: column;
  903. align-items: center;
  904. .big_file_img {
  905. width: 100px;
  906. height: 100px;
  907. }
  908. span {
  909. font-size: 14px;
  910. font-weight: 400;
  911. line-height: 22px;
  912. }
  913. }
  914. }
  915. .shouzhi{
  916. margin-left: 5px;
  917. }
  918. </style>