MyFile.vue 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481
  1. <template>
  2. <div>
  3. <div class="bigBox">
  4. <div class="settingBox" @click="mouseClick">
  5. <!-- 设置盒子顶部搜索 -->
  6. <div class="topSearch">
  7. <div style="position: relative;">
  8. <el-input v-model="searchFire" class="searchFire" size="large" placeholder="搜索文件"
  9. style="width: 15rem;" />
  10. <el-icon style="color: gray;display: inline-block;position: absolute;top: 8px;right: 5px;">
  11. <Search />
  12. </el-icon>
  13. </div>
  14. <div>
  15. <el-icon style="font-size: 24px;" @click="createNewMenu(1)">
  16. <Plus />
  17. </el-icon>
  18. <!-- @click="createNewFile" -->
  19. </div>
  20. </div>
  21. <!-- 方块点击盒子 -->
  22. <div
  23. style="display: flex;justify-content: flex-start;align-items: flex-start;flex-wrap: wrap;height: 80vh;align-content: flex-start;overflow-y: auto;">
  24. <!-- v-for盒子 -->
  25. <template v-for="(item, index) in fileMenu">
  26. <div class="setBox" @click="changeFile(item, index)">
  27. <el-dropdown trigger="click" class="selectChe">
  28. <span class="el-dropdown-link">
  29. ...
  30. </span>
  31. <template #dropdown>
  32. <el-dropdown-menu>
  33. <el-dropdown-item @click="restName(item, index)">重命名</el-dropdown-item>
  34. <el-dropdown-item @click="delName(item, index)">删除</el-dropdown-item>
  35. </el-dropdown-menu>
  36. </template>
  37. </el-dropdown>
  38. <img src="../../assets/images/fileStyle.png" style="width: 72px;height: 72px;">
  39. <p class="ellipsis-text">{{ item.dirName }}</p>
  40. </div>
  41. </template>
  42. </div>
  43. <div>
  44. <p>
  45. <span style="margin-left: 5px;">{{ useSpace ? useSpace + 'G' : '0' }}/{{ allSpace ?
  46. allSpace
  47. * 1024 + 'G' : '0' }}</span>
  48. <span style="margin-left: 5px;font-size: 12px;color: blue;cursor: pointer;"
  49. @click="askApply">申请扩容</span>
  50. </p>
  51. <el-progress style="margin-left: 8px;" :percentage="percent()" />
  52. </div>
  53. </div>
  54. <!-- 右侧大盒子 -->
  55. <div class="mesBox" v-if="editOnline">
  56. <!-- 功能盒子 -->
  57. <div class="useBox">
  58. <!-- table切换 -->
  59. <div style="width: 100%;height: 24px;background-color: #7084B4;line-height: 20px;">
  60. <template v-for="(item, index) in menuList">
  61. <span @click="tableChange(item, index)"
  62. :class="['tables', { tableLis: selectedIndex === index }]">
  63. {{ item.name }}
  64. <img v-if="selectedIndex === index ? true : false"
  65. style="position: absolute;top: 4px;right: 4px;" src="../../assets/images/close.png"
  66. @click="shotdown(item)">
  67. </span>
  68. </template>
  69. </div>
  70. <!-- 众多功能 -->
  71. <div class="manyUse">
  72. <div
  73. style="display: flex;width: 92px;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;">
  74. <div style="margin-left: 5px;">
  75. <img src="../../assets/images/upload.png" style="width: 24px;height: 24px;" alt="">
  76. </div>
  77. <div style="margin-left: 5px;">
  78. <span style="color: black;cursor: pointer;" @click="uploadModal = true">上传
  79. </span>
  80. </div>
  81. </div>
  82. <div
  83. style="display: flex;width: 82px;height: 32px;justify-content: flex-start;align-items: center;">
  84. <div style="margin-left: 5px;">
  85. <el-icon
  86. style="background-color: #7084B4;width: 24px;height: 24px;border-radius: 50%;color: white;"
  87. @click="createNewMenu(0)">
  88. <Plus />
  89. </el-icon>
  90. </div>
  91. <div style="margin-left: 5px;" @click="createNewMenu(0)">
  92. <span style="font-size: 14px;">新建</span>
  93. </div>
  94. </div>
  95. <template v-for="(item, index) in useMenu">
  96. <div :class="{ 'isCheck': haveCheck }"
  97. style="display: flex;width: 82px;opacity:0.5;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;"
  98. @click="getMenu(item, index)">
  99. <div style="margin-left: 5px;">
  100. <img :src="item.img" style="width: 24px;height: 24px;" alt="">
  101. </div>
  102. <div style="margin-left: 5px;">
  103. <span style="font-size: 14px;">{{ item.name }}</span>
  104. </div>
  105. </div>
  106. </template>
  107. </div>
  108. <!-- 面包屑功能栏 -->
  109. <div class="breadBox">
  110. <!-- 左侧 -->
  111. <div style="display: flex;justify-content: space-around;align-items: center;">
  112. <!-- 前进后退 -->
  113. <div style="display: flex;justify-content: space-around;align-items: center;">
  114. <img style="display:block;width: 11px;height: 11px;" :src="blueLeft" alt=""
  115. @click="getAllTop">
  116. <img style="display:block;width: 16px;height: 16px;" :src="grayRight" alt="">
  117. </div>
  118. <!-- 面包屑 -->
  119. <div>
  120. <BreadMenu></BreadMenu>
  121. </div>
  122. </div>
  123. <!-- 右侧 -->
  124. <div>
  125. <img :src="sort" alt="">
  126. <img :src="squre" alt="">
  127. </div>
  128. </div>
  129. </div>
  130. <!-- 展示文件夹盒子 -->
  131. <!-- 文件夹 -->
  132. <div class="detailBox" @click="mouseClick">
  133. <el-collapse v-model="folder" accordion class="collapseSell">
  134. <el-collapse-item title="文件夹" name="1" class="custom-collapse-item">
  135. <el-table :data="folderList" style="width: 100%" @selection-change="handleSelectionChange1"
  136. :single-select="true" @row-click="folderClick" @row-contextmenu="folderRClick">
  137. <el-table-column type="selection" width="55" />
  138. <el-table-column label="名称" width="180">
  139. <template #default="scope">
  140. <span>
  141. <img src="../../assets/images/fileBox.png" style="width: 20px;height: 24px;"
  142. alt="">
  143. {{ scope.row.dirName }}
  144. </span>
  145. </template>
  146. </el-table-column>
  147. <el-table-column prop="createTime" label="时间" width="180" />
  148. <el-table-column prop="dirType" label="类型">
  149. <template #default="scope">
  150. <span>{{ scope.row.dirType === "1" ? "文件夹" : "未知类型" }}</span>
  151. </template>
  152. </el-table-column>
  153. <el-table-column label="大小">
  154. <template #default="scope">
  155. <span>
  156. 10KB
  157. </span>
  158. </template>
  159. </el-table-column>
  160. </el-table>
  161. </el-collapse-item>
  162. </el-collapse>
  163. <!-- 右键唤出的菜单 -->
  164. <div class="right_menu" v-if="folderVisible"
  165. :style="{ left: folderleft + 'px', top: foldertop + 'px' }">
  166. <div class="menu_item" @click="restName(null, null)">
  167. <!-- <img src="@/assets/images/textbox.png" alt="" /> -->
  168. <span>重命名</span>
  169. </div>
  170. <div class="menu_item" @click="folderClick(null, null)">
  171. <!-- <img src="@/assets/images/trash.png" alt="" /> -->
  172. <span>打开</span>
  173. </div>
  174. </div>
  175. </div>
  176. <!-- 文件 -->
  177. <div class="fileTable">
  178. <el-collapse v-model="files" accordion class="collapse" style="height: 200px;">
  179. <el-collapse-item title="文件" name="2" class="">
  180. <el-table :data="fileList" style="width: 100%" @row-contextmenu="handleRowClick"
  181. @selection-change="handleSelectionChange" @row-click="mouseClick"
  182. :default-sort="{ prop: 'createTime', order: 'descending' }">
  183. <el-table-column type="selection" width="55" />
  184. <el-table-column label="名称" width="200">
  185. <template #default="scope">
  186. <span style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
  187. <el-icon v-if="collectImg">
  188. <Star />
  189. </el-icon>
  190. <img v-else src="../../assets/images/yellowstar.png" alt="">
  191. <img :src="getImage(scope.row.fileType)" alt="">
  192. {{ scope.row.fileName }}
  193. </span>
  194. </template>
  195. </el-table-column>
  196. <el-table-column prop="createTime" label="时间" sortable width="180" />
  197. <el-table-column prop="fileType" label="类型" />
  198. <el-table-column label="大小">
  199. <template #default="scope">
  200. <span>
  201. {{ scope.row.fileSize }}KB
  202. </span>
  203. </template>
  204. </el-table-column>
  205. </el-table>
  206. </el-collapse-item>
  207. </el-collapse>
  208. <div class="setCli" v-if="cliCC">
  209. <template v-for="(item, index) in filterMouseCli()">
  210. <p @click="chooseSet(item, index)" class="chooseSet">
  211. <img :src="item.img" alt="">
  212. {{ item.name }}
  213. <span v-if="item.name == '在线编辑' || item.name == '协作' ? true : false"
  214. style="color: #7084B4;float: right;position: relative;" class="arrow">></span>
  215. </p>
  216. </template>
  217. </div>
  218. <div class="setCli1" v-if="anyP">
  219. <p @click="chooseSet1(0)" class="chooseSet">
  220. <img src="../../assets/images/user.png" alt="">
  221. 选择人员
  222. </p>
  223. <p class="chooseSet" @click="goLock">
  224. <img src="../../assets/images/archiveTray.png" alt="">
  225. 归档
  226. </p>
  227. </div>
  228. </div>
  229. </div>
  230. <div v-else>
  231. <div>
  232. <el-button @click="editOnline = true;historyPrew=false">返回</el-button>
  233. </div>
  234. <FileEdit :docId="clickRowId" :copyRow="copyRow" :historyPrew="historyPrew"
  235. :historycopyRow="historycopyRow" :onlyView="onlyView" @cancleHistoryPrew="cancleHistoryPrew"></FileEdit>
  236. </div>
  237. <!-- 扩容弹窗 -->
  238. <div>
  239. <el-dialog v-model="askTo" title="扩容申请" width="30%">
  240. <el-form>
  241. <el-form-item label="新容量">
  242. <el-input-number v-model="askNum" :min="1" :max="10" />
  243. </el-form-item>
  244. <el-form-item label="申请理由">
  245. <el-input v-model="askTalk" maxlength="150" placeholder="请输入申请理由" show-word-limit
  246. type="textarea" />
  247. </el-form-item>
  248. </el-form>
  249. <template #footer>
  250. <span class="dialog-footer">
  251. <el-button @click="askTo = false">取消</el-button>
  252. <el-button type="primary" @click="sureAsk">
  253. 确定
  254. </el-button>
  255. </span>
  256. </template>
  257. </el-dialog>
  258. </div>
  259. <!-- 新增文件夹弹窗 -->
  260. <div>
  261. <CreateFloder v-if="folderCase" :folderCase="folderCase" @getChildrenC="getChildrenC" :oneOrTwo="oneOrTwo"
  262. :impDirId="impDirId" :impSpaceId="impSpaceId" :newDirId="newDirId" :newSpaceId="newSpaceId"
  263. :getAllTop="getAllTop">
  264. </CreateFloder>
  265. </div>
  266. <!-- 文件上传 -->
  267. <div>
  268. <el-dialog v-model="uploadModal" title="文件上传" width="30%">
  269. <el-upload class="upload-demo" drag :http-request="onSuccess" multiple>
  270. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  271. <div class="el-upload__text">拖入或<em>点击上传</em></div>
  272. <template #tip>
  273. <div class="el-upload__tip">请选择或拖入文件</div>
  274. </template>
  275. </el-upload>
  276. <template #footer>
  277. <span class="dialog-footer">
  278. <el-button @click="uploadModal = false">取消</el-button>
  279. <el-button type="primary" @click="sureUpload">确认</el-button>
  280. </span>
  281. </template>
  282. </el-dialog>
  283. </div>
  284. <!-- 文件重命名 -->
  285. <div>
  286. <el-dialog v-model="fileNameChange" title="重命名" width="30%">
  287. <el-form :model="nameForm" label-width="120px">
  288. <el-form-item label="新名字">
  289. <el-input v-model="nameForm.name"></el-input>
  290. </el-form-item>
  291. </el-form>
  292. <template #footer>
  293. <span class="dialog-footer">
  294. <el-button @click="fileNameChange = false">取消</el-button>
  295. <el-button type="primary" @click="sureChangeName">
  296. 确认
  297. </el-button>
  298. </span>
  299. </template>
  300. </el-dialog>
  301. </div>
  302. <!-- 文件收藏 -->
  303. <div>
  304. <FileCollect v-if="collects" :collects="collects" @getCollects="getCollects" :copyFileName="copyFileName"
  305. :copyFileId="copyFileId"></FileCollect>
  306. </div>
  307. <!-- 中栏重命名 -->
  308. <div>
  309. <el-dialog v-model="folderName" title="重命名" width="30%">
  310. <el-input v-model="newName"></el-input>
  311. <template #footer>
  312. <span class="dialog-footer">
  313. <el-button @click="folderName = false">取消</el-button>
  314. <el-button type="primary" @click="sureFolderName">确认</el-button>
  315. </span>
  316. </template>
  317. </el-dialog>
  318. </div>
  319. <ImgPreview :previewData="previewData" :copyFileType="copyFileType" :showPreview="showPreview"
  320. @closeImgPreview="closeImgPreview"></ImgPreview>
  321. <div>
  322. <FileTree v-if="fileTrees" :fileTrees="fileTrees" :newSpaceId="newSpaceId" :fileId="clickRowId"
  323. @getChildren="getChildren" :copyOrMove="copyOrMove"></FileTree>
  324. </div>
  325. <!-- 穿梭框 -->
  326. <div>
  327. <TransferModal v-if="thanks" :thanks="thanks" :clickRowId="clickRowId" :workOrEdit="workOrEdit"
  328. @getCback="getCback"></TransferModal>
  329. </div>
  330. </div>
  331. </div>
  332. <!-- 图片预览 -->
  333. <!-- 历史版本 -->
  334. <historyList :openFile="openForwardFile" :docId="clickRowId" :name="nameForm.name" :copyRow="copyRow"
  335. @close="openForwardFile = false" :fileUserTreeData="fileUserTreeData.data" @changeMsgClose="changeMsgClose" :historyTotal="historyTotal">
  336. </historyList>
  337. <!-- 历史版本 -->
  338. </template>
  339. <script>
  340. import { ref, toRaw, onMounted } from 'vue'
  341. import myfile from '../../api/myfile/myfile'
  342. import documents from '../../api/document/document'
  343. import fileSpace from '../../api/filespace/fileSpace'
  344. import fileCount from '../../api/fileCount/fileCount'
  345. import FileTree from './components/FileTree.vue'
  346. import BreadMenu from './components/BreadMenu.vue'
  347. import FileEdit from './components/FileEdit.vue'
  348. import TransferModal from './modalComponebts/Transfer.vue'
  349. import CreateFloder from './modalComponebts/CreateFloder.vue'
  350. import FileCollect from './modalComponebts/FileCollect.vue'
  351. import ImgFile from "./jsComponents/ImgFile"
  352. import { Search } from '@element-plus/icons-vue'
  353. import blueLeft from '../../assets/images/blueLeft.png'
  354. import grayRight from "../../assets/images/grayRight.png"
  355. import sort from '../../assets/images/sort.png'
  356. import squre from '../../assets/images/squre.png'
  357. import { ElMessage } from 'element-plus'
  358. import ImgPreview from '@/components/ImgPreview/ImgPreview.vue'
  359. import { preview } from "@/api/common/common.js";
  360. import historyList from "@/components/historyList/index.vue"; //选择文件发送的列表,历史版本
  361. import { listVersion } from "@/api/biz/version";
  362. import useUserStore from "@/store/modules/user";
  363. import { useRouter, useRoute } from "vue-router";
  364. import { canPreviewFile } from "@/utils/index.js"
  365. export default {
  366. setup() {
  367. let fileTrees = ref(false)//filetree父传子
  368. let thanks = ref(false)//transfer父传子
  369. let collects = ref(false)//文件收藏父传子
  370. let folderCase = ref(false)
  371. let editOnline = ref(true)
  372. let searchFire = ref('')
  373. let selectedIndex = ref(0)
  374. let folder = ref(['1'])
  375. let files = ref(['2'])
  376. let folderList = ref([])
  377. let askTo = ref(false)
  378. let folderName = ref(false)
  379. let askNum = ref(1)
  380. let askTalk = ref('')
  381. let cliCC = ref(false)
  382. let anyP = ref(false)
  383. let uploadModal = ref(false)
  384. let collectImg = ref(true)
  385. let selectedBox = ref(-1)
  386. let newName = ref('')
  387. let clickRowId = ref(0)
  388. let trandata = ref()
  389. let folderId = ref('')
  390. let fileId = ref('')
  391. let tranvalue = ref([])
  392. let useSpace = ref(0)
  393. let allSpace = ref(0)
  394. let fileArr = ref([])
  395. let copyDirId = ref(0)//需要操作的dirid
  396. let copySpaceId = ref(0)//需要操作的spaceid
  397. let copyDocId = ref(0)//需要操作的docid
  398. let copyFileId = ref(0)//需要操作的fileid
  399. let copyFileSize = ref(0)//需要操作的filesize
  400. let copyFileType = ref('')//需要操作的文件类型
  401. let copyFileName = ref("")//需要操作的文件名
  402. let directoryId = ref('')
  403. let impSpaceId = ref("")
  404. let impDirId = ref("")
  405. let impNum = ref(0)
  406. let copyParentId = ref("")//文件夹
  407. let needBag = ref("")
  408. let copyOrMove = ref(0)//0代表复制,1代表移动
  409. let oneOrTwo = ref(0)//0代表二级,1代表一级
  410. let sortNum = ref(0)
  411. let folderTotal = ref(0)//文件夹total
  412. let fileTotal = ref(0)//文件total
  413. const openForwardFile = ref(false) //历史版本展示
  414. const historyTotal=ref(0)
  415. const historyPrew = ref(false)
  416. const fileUserTreeData = reactive({ data: {} });
  417. let fileList = ref([
  418. ])
  419. let menuList = ref([
  420. ])
  421. let useMenu = ref([
  422. // {
  423. // img: ImgFile.copy,
  424. // name: "复制"
  425. // },
  426. // {
  427. // img: ImgFile.clipboard,
  428. // name: "粘贴"
  429. // },
  430. {
  431. img: ImgFile.share,
  432. name: "分享给"
  433. },
  434. {
  435. img: ImgFile.trash,
  436. name: "删除"
  437. },
  438. ])
  439. let arrorMenu = ref([
  440. {
  441. img: ImgFile.file,
  442. name: "文件"
  443. },
  444. {
  445. img: ImgFile.folder,
  446. name: '文件夹'
  447. },
  448. {
  449. img: ImgFile.image,
  450. name: "图片"
  451. },
  452. {
  453. img: ImgFile.filmSlate,
  454. name: "视频"
  455. },
  456. {
  457. img: ImgFile.musicNotes,
  458. name: "音频"
  459. }
  460. ])
  461. let mouseCli = ref([
  462. {
  463. img: ImgFile.previewIcon,
  464. name: "预览"
  465. },
  466. {
  467. img: ImgFile.addolder,
  468. name: "移动到...",
  469. },
  470. {
  471. img: ImgFile.copy,
  472. name: "复制到...",
  473. },
  474. // {
  475. // img: ImgFile.clipboard,
  476. // name: "粘贴"
  477. // },
  478. {
  479. img: ImgFile.collect,
  480. name: "收藏"
  481. },
  482. {
  483. img: ImgFile.downLoad,
  484. name: "下载"
  485. },
  486. {
  487. img: ImgFile.textbox,
  488. name: "重命名"
  489. },
  490. // {
  491. // img: ImgFile.goon,
  492. // name: "发送"
  493. // },
  494. {
  495. img: ImgFile.share,
  496. name: "分享"
  497. },
  498. {
  499. img: ImgFile.notePencil,
  500. name: "在线编辑"
  501. },
  502. {
  503. img: ImgFile.togger,
  504. name: "协作"
  505. },
  506. {
  507. img: ImgFile.icc,
  508. name: "文字识别"
  509. },
  510. {
  511. img: ImgFile.history,
  512. name: "历史版本"
  513. },
  514. {
  515. img: ImgFile.trash,
  516. name: "删除"
  517. }
  518. ])
  519. let nameForm = ref({
  520. name: ""
  521. })
  522. let fileNameChange = ref(false)
  523. let fileMenu = ref([])
  524. let copyRow = ref({})
  525. let newDirId = ref('')
  526. let newSpaceId = ref('')
  527. let workOrEdit = ref(0)
  528. const showPreview = ref(false)//控制图片预览组件显示
  529. const previewData = ref()//需要预览的文件的数据
  530. const router = useRouter(); //注册路由
  531. const folderVisible = ref(false); //显示文件夹右键菜单
  532. const foldertop = ref(0);
  533. const folderleft = ref(0);
  534. const thisFolder = ref({}); //当前右键的文件夹
  535. const folderCheckout = ref(false)//是否有勾选
  536. const fileCheckout = ref(false)//是否有勾选
  537. const haveCheck = ref(false)//是否有勾选
  538. const onlyView = ref(false) //预览
  539. // 获取文件夹,中栏,文件
  540. function getAllTop() {
  541. documents.getTop(3).then(res => {
  542. let userMe = [res]
  543. impDirId.value = userMe[0].dirId//固定
  544. impSpaceId.value = userMe[0].spaceId//固定
  545. newSpaceId.value = userMe[0].spaceId//变化
  546. newDirId.value = userMe[0].dirId//变化
  547. let obj = {
  548. pageNum: 1,
  549. pageSize: 10
  550. }
  551. documents.getALLdocument({ parentId: userMe[0].dirId - 0, spaceId: userMe[0].spaceId, pageNum: obj.pageNum, pageSize: obj.pageSize }).then(res => {
  552. fileMenu.value = res.data
  553. folderList.value = res.data
  554. })
  555. myfile.getById(userMe[0].dirId - 0, obj).then(res => {
  556. if (res.code === 200) {
  557. fileList.value = res.rows
  558. fileTotal.value = res.total
  559. if (fileTotal.value / 10 != 1) {
  560. let x = Math.trunc(fileTotal.value / 10) + 1
  561. for (var i = 1; i <= x; i++) {
  562. obj.pageNum = i
  563. myfile.getById(userMe[0].dirId - 0, obj).then(res => {
  564. fileList.value = fileList.value.concat(res.rows)
  565. const uniqueFileList = Array.from(new Set(fileList.value.map(item => item.docId)))
  566. .map(docId => fileList.value.find(item => item.docId === docId));
  567. // 合并数组并更新 fileList.value
  568. fileList.value = uniqueFileList
  569. })
  570. }
  571. }
  572. }
  573. })
  574. })
  575. }
  576. function changeFile(row, num) {
  577. copyParentId.value = row.parentId
  578. newDirId.value = row.dirId
  579. newSpaceId.value = row.spaceId
  580. documents.getALLdocument({ parentId: row.dirId - 0, spaceId: row.spaceId - 0 }).then(res => {
  581. folderList.value = res.data
  582. // if (res.code === 200) {
  583. if (res.data.length === 0) {
  584. myfile.getById(newDirId.value)
  585. .then(res => {
  586. if (res.code === 200) {
  587. fileList.value = res.rows;
  588. }
  589. })
  590. .catch(error => {
  591. console.error("myfile.getAllFileMenu 调用失败:", error);
  592. });
  593. } else {
  594. myfile.getById(res.data[0].dirId - 0)
  595. .then(res => {
  596. if (res.code === 200) {
  597. fileList.value = res.rows;
  598. }
  599. })
  600. .catch(error => {
  601. console.error("myfile.getAllFileMenu 调用失败:", error);
  602. });
  603. }
  604. // }
  605. })
  606. this.selectedIndex = num
  607. const newItem = {
  608. name: row.dirName,
  609. choose: row.dirName
  610. };
  611. // 检查 newItem 是否已存在于 menuList 中
  612. const isItemExist = menuList.value.some(item => item.choose === newItem.choose);
  613. // 如果不存在,则添加它
  614. if (!isItemExist) {
  615. menuList.value.push(newItem);
  616. }
  617. useSpace.value = row.usedCap
  618. allSpace.value = row.spaceCap
  619. }
  620. // tableMenu切换
  621. function tableChange(row, num) {
  622. this.selectedIndex = num
  623. }
  624. // x图标事件
  625. function shotdown(row) {
  626. this.menuList = this.menuList.filter(item => item.name !== row.name)
  627. }
  628. // 文件名表格每一行点击事件
  629. function handleRowClick(row, col, e) {
  630. e.preventDefault();
  631. e.stopPropagation();
  632. console.log(e, 'xxyy');
  633. copyRow.value = row
  634. clickRowId.value = row.docId
  635. copyDirId.value = row.dirId
  636. copySpaceId.value = row.spaceId
  637. copyFileId.value = row.fileId
  638. copyFileSize.value = row.fileSize
  639. copyFileType.value = row.fileType
  640. nameForm.value.name = row.fileName
  641. copyFileName.value = row.fileName
  642. if (cliCC.value === true) {
  643. cliCC.value = false
  644. } else {
  645. cliCC.value = true
  646. }
  647. }
  648. // 申请扩容
  649. function askApply() {
  650. this.askTo = true
  651. }
  652. function sureAsk() {
  653. this.askTo = false
  654. }
  655. //mouse弹框
  656. async function chooseSet(row, index, num) {
  657. if (row.name == '在线编辑' || row.name == '协作') {
  658. cliCC.value = true
  659. } else {
  660. cliCC.value = false
  661. }
  662. if (row.name == '分享') {
  663. workOrEdit.value = num
  664. thanks.value = true
  665. } else {
  666. thanks.value = false
  667. }
  668. if (row.name == '协作') {
  669. if (anyP.value) {
  670. anyP.value = false
  671. } else {
  672. anyP.value = true
  673. }
  674. } else {
  675. anyP.value = false
  676. }
  677. if (row.name == '删除') {
  678. myfile.delMenu(clickRowId.value).then(res => {
  679. if (res.code === 200) {
  680. ElMessage({
  681. type: "success",
  682. message: "删除成功"
  683. })
  684. getAllTop()
  685. }
  686. })
  687. }
  688. if (row.name === '复制到...') {
  689. copyOrMove.value = 0
  690. fileTrees.value = true
  691. }
  692. if (row.name === '移动到...') {
  693. copyOrMove.value = 1
  694. fileTrees.value = true
  695. }
  696. if (row.name === '重命名') {
  697. fileNameChange.value = true
  698. }
  699. if (row.name === "下载") {
  700. location.href = `${import.meta.env.VITE_APP_BASE_API}/api/download/${copyFileId.value}`;
  701. }
  702. if (row.name === '收藏') {
  703. collects.value = true
  704. }
  705. if (row.name === '在线编辑') {
  706. editOnline.value = false
  707. cliCC.value = false
  708. }
  709. if (row.name === '文字识别') {
  710. router.push({
  711. path: '/identifyFont',
  712. query: {
  713. fileId: copyFileId.value,
  714. fileType: copyFileType.value
  715. }
  716. })
  717. }
  718. if (row.name === '预览') {
  719. const filePreview = canPreviewFile(copyFileType.value)
  720. if (filePreview) {
  721. onlyView.value = true
  722. editOnline.value = false
  723. cliCC.value = false
  724. } else {
  725. showPreview.value = true
  726. const res = await preview(copyFileId.value)
  727. previewData.value = URL.createObjectURL(res)
  728. }
  729. console.log('filePreview', filePreview);
  730. // console.log('res',res);
  731. showPreview.value = true
  732. const res = await preview(copyFileId.value)
  733. previewData.value = URL.createObjectURL(res)
  734. } else if (row.name === "历史版本") {
  735. const resHistory = await listVersion({docId: clickRowId.value })
  736. historyTotal.value= resHistory.total
  737. fileUserTreeData.data = resHistory.rows;
  738. openForwardFile.value = true
  739. }
  740. }
  741. function chooseSet1(num) {
  742. workOrEdit.value = num
  743. thanks.value = true
  744. anyP.value = false
  745. }
  746. function createNewMenu(num) {
  747. oneOrTwo.value = num
  748. folderCase.value = true
  749. }
  750. function cancleHistoryPrew(val){
  751. historyPrew.value=false
  752. }
  753. function createNewFile() {
  754. addFile.value = true
  755. }
  756. function arrowClick(row, num) {
  757. if (row.name === '文件') {
  758. uploadModal.value = true
  759. } else {
  760. uploadModal.value = false
  761. }
  762. }
  763. // 确认上传
  764. function sureUpload() {
  765. if (fileArr.value.length > 0) {
  766. for (var i = 1; i <= fileArr.value.length; i++) {
  767. myfile.uploadFile({
  768. spaceId: newSpaceId.value - 0,
  769. dirId: newDirId.value - 0,
  770. file: fileArr.value[i - 1]
  771. }).then(res => {
  772. if (res.code === 200) {
  773. ElMessage({
  774. message: "上传文件成功",
  775. type: "success"
  776. })
  777. getAllTop()
  778. uploadModal.value = false
  779. fileArr.value = []
  780. }
  781. })
  782. }
  783. }
  784. }
  785. function onSuccess(files, val) {
  786. fileArr.value.push(files.file)
  787. }
  788. // 筛选后缀图片
  789. function getImage(file) {
  790. if (file === '.txt') {
  791. return ImgFile.txt
  792. } else if (file === '.xlxs' || file === '.docx') {
  793. return ImgFile.xlxs
  794. } else if (file === '.pptx') {
  795. return ImgFile.pptx
  796. } else if (file === '.word') {
  797. return ImgFile.word
  798. } else if (file === '.pdf') {
  799. return ImgFile.pdf
  800. }
  801. }
  802. // 表格多选框
  803. function handleSelectionChange(val) {
  804. console.log('checkout val',val);
  805. if (val.length > 1) {
  806. // 如果选择了多项,只保留最后一项
  807. val.shift();
  808. }
  809. if (val.length === 1) {
  810. fileId.value = val[0].docId
  811. }
  812. if (val.length) {
  813. folderCheckout.value = true
  814. haveCheck.value = true
  815. } else {
  816. folderCheckout.value = false
  817. if (!fileCheckout.value) {
  818. haveCheck.value = false
  819. }
  820. }
  821. }
  822. // 文件夹
  823. function handleSelectionChange1(val) {
  824. if (val.length > 1) {
  825. // 如果选择了多项,只保留最后一项
  826. val.shift();
  827. }
  828. if (val.length === 1) {
  829. folderId.value = val[0].dirId
  830. }
  831. if (val.length) {
  832. fileCheckout.value = true
  833. haveCheck.value = true
  834. } else {
  835. fileCheckout.value = false
  836. if (!folderCheckout.value) {
  837. haveCheck.value = false
  838. }
  839. }
  840. }
  841. // 重命名
  842. function restName(row, index) {
  843. // 判断是点击打开还是右键菜单打开
  844. row = row ? row : thisFolder.value
  845. newName.value = row.dirName
  846. folderName.value = true
  847. selectedBox.value = row.dirId
  848. }
  849. function getMenu(row, num) {
  850. if (row.name === '删除') {
  851. // 文件夹删除
  852. documents.delDocument(folderId.value).then(res => {
  853. if (res.code === 200) {
  854. ElMessage({
  855. message: "删除成功",
  856. type: "success"
  857. })
  858. getAllTop()
  859. } else {
  860. ElMessage({
  861. message: "删除失败,目录应不为空",
  862. type: "error"
  863. })
  864. }
  865. })
  866. myfile.delMenu(fileId.value).then(res => {
  867. if (res.code === 200) {
  868. ElMessage({
  869. message: "删除成功",
  870. type: "success"
  871. })
  872. getAllTop()
  873. }
  874. })
  875. }
  876. }
  877. function delName(row, num) {
  878. documents.delDocument(row.dirId).then(res => {
  879. if (res.code === 200) {
  880. getAllTop()
  881. ElMessage({
  882. message: "删除成功",
  883. type: "success"
  884. })
  885. }
  886. })
  887. }
  888. // 计算百分比
  889. function percent() {
  890. let numP = 0
  891. if (useSpace.value) {
  892. numP = parseInt(useSpace.value / (allSpace.value * 1024) * 100)
  893. }
  894. return numP
  895. }
  896. // 文件夹每行点击事件
  897. function folderClick(row, list) {
  898. // 上一级dirId就是下一级的parentId
  899. // 判断是点击打开还是右键菜单打开
  900. row = row ? row : thisFolder.value
  901. newDirId.value = row.dirId
  902. newSpaceId.value = row.spaceId
  903. documents.getALLdocument({ parentId: row.dirId - 0, spaceId: row.spaceId - 0 }).then(res => {
  904. folderList.value = res.data
  905. if (res.data.length === 0) {
  906. myfile.getById(newDirId.value).then(res => {
  907. if (res.code === 200) {
  908. fileList.value = res.rows
  909. }
  910. })
  911. } else {
  912. myfile.getById(row.dirId - 0).then(res => {
  913. if (res.code === 200) {
  914. fileList.value = res.rows
  915. }
  916. })
  917. }
  918. })
  919. }
  920. // 确认文件重命名
  921. function sureChangeName() {
  922. myfile.editNewMenu({
  923. dirId: copyDirId.value - 0,
  924. docId: clickRowId.value - 0,
  925. fileId: copyFileId.value,
  926. fileName: nameForm.value.name,
  927. fileSize: copyFileSize.value - 0,
  928. fileType: copyFileType.value,
  929. remark: '',
  930. spaceId: copySpaceId.value - 0,
  931. }).then(res => {
  932. if (res.code === 200) {
  933. ElMessage({
  934. message: "重命名成功",
  935. type: "success"
  936. })
  937. fileNameChange.value = false
  938. getAllTop()
  939. }
  940. })
  941. }
  942. // 判断id
  943. function isId() {
  944. if (directoryId.value === '') {
  945. directoryId.value = 0
  946. getAllTop()
  947. }
  948. if (folderId.value === '') {
  949. folderId.value = 0
  950. getAllTop()
  951. }
  952. }
  953. // 中栏重命名
  954. function sureFolderName() {
  955. documents.editDocument({
  956. dirId: selectedBox.value - 0,
  957. name: newName.value,
  958. }).then(res => {
  959. if (res.code === 200) {
  960. getAllTop()
  961. folderName.value = false
  962. ElMessage({
  963. message: '重命名成功',
  964. type: "success"
  965. })
  966. }
  967. })
  968. }
  969. //关闭图片预览事件
  970. const closeImgPreview = () => {
  971. // console.log('close');
  972. showPreview.value = false
  973. }
  974. function getChildren(data) {
  975. fileTrees.value = data
  976. }
  977. function getCback(data) {
  978. thanks.value = data
  979. }
  980. function getChildrenC(data) {
  981. folderCase.value = data
  982. }
  983. function getCollects(data) {
  984. collects.value = data
  985. }
  986. //历史版本
  987. const forwardTreeData = reactive({ data: {} });
  988. const historycopyRow = ref({})
  989. function changeMsgClose(val, item) {
  990. if (val) {
  991. historycopyRow.value = item
  992. editOnline.value = false
  993. cliCC.value = false
  994. historyPrew.value = true
  995. }
  996. openForwardFile.value = val
  997. }
  998. //对mouseCli数组进行筛选,实现菜单的区分显示
  999. const filterMouseCli = () => {
  1000. const array = ['.doc', '.docm', '.docx', '.dot', '.dotm', '.dotx', '.epub', '.fodt', '.htm', '.html', '.mht', '.odt', '.ott', '.pdf', '.rtf', '.txt', '.djvu', '.xps', 'csv', 'fods', 'ods', 'ots', 'xls', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx', 'fodp', 'odp', 'otp', 'pot', 'potm', 'potx', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx']
  1001. const typeArr = ['.png', '.jpg', '.jpeg', '.JPG', '.mp3', '.mp4', '.pdf']
  1002. const imgTypeArr = ['.png', '.jpg', '.jpeg', '.JPG']
  1003. let arr = []
  1004. if (!(typeArr.includes(copyFileType.value) || array.includes(copyFileType.value))) {
  1005. arr = mouseCli.value.filter(item => item.name !== "预览")
  1006. } else {
  1007. arr = toRaw(mouseCli.value)
  1008. }
  1009. if (!array.includes(copyFileType.value)) {
  1010. arr = arr.filter(item => item.name !== "在线编辑" && item.name !== "协作" && item.name !== "历史版本")
  1011. }
  1012. if (!imgTypeArr.includes(copyFileType.value)) {
  1013. arr = arr.filter(item => item.name !== "文字识别")
  1014. }
  1015. return arr
  1016. }
  1017. function mouseClick() {
  1018. if (cliCC.value) {
  1019. cliCC.value = false
  1020. }
  1021. if (anyP) {
  1022. anyP.value = false
  1023. }
  1024. }
  1025. // 文件夹右键事件
  1026. const folderRClick = (row, col, e) => {
  1027. e.preventDefault();
  1028. e.stopPropagation();
  1029. let thisRow = toRaw(row)
  1030. thisFolder.value = thisRow;
  1031. // 唤出右键菜单,思路:获取鼠标位置来定位菜单
  1032. folderVisible.value = true;
  1033. foldertop.value = e.pageY;
  1034. folderleft.value = e.pageX;
  1035. };
  1036. // 关闭文件夹右键菜单
  1037. const closeRMenu = () => {
  1038. // console.log("close");
  1039. folderVisible.value = false;
  1040. };
  1041. // 归档
  1042. function goLock() {
  1043. fileCount.lockActor(clickRowId.value).then(res => {
  1044. if (res.code === 200) {
  1045. ElMessage({
  1046. type: "success",
  1047. message: "归档成功"
  1048. })
  1049. cliCC.value = false
  1050. anyP.value = false
  1051. }
  1052. })
  1053. }
  1054. onMounted(() => {
  1055. getAllTop()
  1056. // 添加监听,点击其他地方关闭文件夹右键菜单
  1057. window.addEventListener("click", closeRMenu, true);
  1058. })
  1059. return {
  1060. folderList,//文件夹的数据
  1061. fileList,//文件夹的数据
  1062. searchFire,//搜索文件的model
  1063. changeFile,//切换右侧视图的file
  1064. menuList,//右侧切换
  1065. tableChange,//改变class点击事件
  1066. selectedIndex,//当前选中下标
  1067. shotdown,//筛选出当前数据
  1068. useMenu,
  1069. arrorMenu,
  1070. blueLeft,//返回
  1071. grayRight,//前进
  1072. squre,//视图切换
  1073. sort,//排序
  1074. folder,
  1075. files,
  1076. handleRowClick,
  1077. askApply,//申请扩容
  1078. askTo,
  1079. sureAsk,
  1080. askNum,
  1081. askTalk,
  1082. cliCC,
  1083. mouseCli,//文件点击弹框
  1084. chooseSet,
  1085. trandata,
  1086. tranvalue,
  1087. anyP,
  1088. chooseSet1,
  1089. fileMenu,
  1090. createNewMenu,
  1091. // delBoser,
  1092. clickRowId,
  1093. createNewFile,
  1094. // fileUpload,
  1095. getImage,//筛选文件类型
  1096. handleSelectionChange,
  1097. handleSelectionChange1,
  1098. selectedBox,//重命名相关
  1099. restName,//重命名相关
  1100. newName,//重命名相关
  1101. getMenu,
  1102. folderId,
  1103. fileId,
  1104. // getAllMiddle,//拿到所有空间信息
  1105. delName,//删除空间信息
  1106. useSpace,//使用空间
  1107. allSpace,//总空间
  1108. percent,
  1109. arrowClick,
  1110. uploadModal,
  1111. sureUpload,
  1112. onSuccess,
  1113. fileArr,
  1114. directoryId,
  1115. folderClick,
  1116. copyDirId,//复制移动需要的↓
  1117. copyDocId,
  1118. copySpaceId,
  1119. copyFileId,
  1120. copyFileName,
  1121. copyFileSize,
  1122. copyFileType,
  1123. sureChangeName,//文件重命名
  1124. fileNameChange,//文件重命名模态框
  1125. nameForm,
  1126. collectImg,//收藏小星星
  1127. sortNum,
  1128. needBag,
  1129. isId,
  1130. editOnline,//在线编辑
  1131. copyParentId,
  1132. folderName,
  1133. sureFolderName,
  1134. copyRow,
  1135. getAllTop,
  1136. newDirId,
  1137. newSpaceId,
  1138. showPreview,//控制图片预览
  1139. closeImgPreview,//关闭预览事件
  1140. previewData,//预览文件数据
  1141. router,
  1142. fileTrees,
  1143. getChildren,//子传父
  1144. copyOrMove,
  1145. impDirId,
  1146. impNum,
  1147. impSpaceId,
  1148. //历史版本=========
  1149. openForwardFile,
  1150. forwardTreeData,
  1151. fileUserTreeData,
  1152. filterMouseCli,
  1153. changeMsgClose,
  1154. historyPrew,
  1155. historycopyRow,
  1156. thanks,
  1157. getCback,
  1158. mouseClick,
  1159. folderVisible,
  1160. foldertop,
  1161. folderleft,
  1162. thisFolder,
  1163. folderRClick,
  1164. closeRMenu,
  1165. cancleHistoryPrew,
  1166. historyTotal,
  1167. //历史版本=========
  1168. fileUserTreeData,
  1169. thanks,
  1170. getCback,
  1171. mouseClick,
  1172. workOrEdit,
  1173. folderCase,//新建文件夹传值
  1174. getChildrenC,
  1175. oneOrTwo,//父传子判断
  1176. folderCheckout,
  1177. fileCheckout,
  1178. haveCheck,
  1179. onlyView,
  1180. goLock,
  1181. collects,//收藏父传子
  1182. getCollects,//收藏子传父
  1183. folderTotal,
  1184. fileTotal,
  1185. }
  1186. },
  1187. watch: {
  1188. },
  1189. components: {
  1190. BreadMenu,
  1191. FileEdit,
  1192. ImgPreview,
  1193. FileTree,
  1194. historyList,
  1195. TransferModal,
  1196. CreateFloder,
  1197. FileCollect,
  1198. },
  1199. }
  1200. </script>
  1201. <style lang="scss" scoped>
  1202. p {
  1203. margin: 0;
  1204. padding: 0;
  1205. }
  1206. .bigBox {
  1207. width: 100%;
  1208. height: 100%;
  1209. display: flex;
  1210. justify-content: flex-start;
  1211. overflow: hidden;
  1212. }
  1213. .settingBox {
  1214. width: 25vw;
  1215. height: 92vh;
  1216. border: 1px solid black;
  1217. border-radius: 4px;
  1218. /* margin: 5px 5px; */
  1219. margin-right: 5px;
  1220. background-color: white;
  1221. }
  1222. .topSearch {
  1223. width: 100%;
  1224. height: 48px;
  1225. background-color: #EBEFF6;
  1226. display: flex;
  1227. justify-content: space-around;
  1228. align-items: center;
  1229. }
  1230. .searchFire {
  1231. width: 248px;
  1232. height: 32px;
  1233. }
  1234. .setBox {
  1235. width: 88px;
  1236. height: 112px;
  1237. text-align: center;
  1238. margin-left: 5px;
  1239. margin-top: 5px;
  1240. position: relative;
  1241. }
  1242. .setBox:hover {
  1243. background-color: #EEF9FF;
  1244. }
  1245. .setBox:hover .selectChe {
  1246. background-color: #EEF9FF;
  1247. display: block;
  1248. }
  1249. .selectChe {
  1250. display: none;
  1251. width: 20px;
  1252. height: 20px;
  1253. background: rgba(255, 255, 255, 0.7);
  1254. border-radius: 4px 4px 4px 4px;
  1255. position: absolute;
  1256. top: 2px;
  1257. right: 2px;
  1258. line-height: 10px;
  1259. }
  1260. .mesBox {
  1261. width: 75vw;
  1262. height: 92vh;
  1263. border-radius: 4px;
  1264. background-color: white;
  1265. }
  1266. .useBox {
  1267. width: 100%;
  1268. height: 96px;
  1269. }
  1270. .tables {
  1271. display: inline-block;
  1272. width: 112px;
  1273. height: 22px;
  1274. border-radius: 4px;
  1275. line-height: 21px;
  1276. text-align: center;
  1277. font-size: 12px;
  1278. margin-left: 5px;
  1279. position: relative;
  1280. white-space: nowrap;
  1281. overflow: hidden;
  1282. text-overflow: ellipsis;
  1283. }
  1284. .tableLis {
  1285. display: inline-block;
  1286. width: 112px;
  1287. height: 22px;
  1288. border-radius: 4px;
  1289. background-color: #EBEFF6;
  1290. line-height: 21px;
  1291. text-align: center;
  1292. font-size: 12px;
  1293. margin-left: 5px;
  1294. position: relative;
  1295. white-space: nowrap;
  1296. overflow: hidden;
  1297. text-overflow: ellipsis;
  1298. max-width: auto;
  1299. }
  1300. .manyUse {
  1301. width: 100%;
  1302. height: 48px;
  1303. /* background-color: gray; */
  1304. line-height: 48px;
  1305. display: flex;
  1306. justify-content: flex-start;
  1307. align-items: center;
  1308. }
  1309. .el-dropdown-link {
  1310. color: white;
  1311. }
  1312. .breadBox {
  1313. width: 100%;
  1314. height: 24px;
  1315. display: flex;
  1316. justify-content: space-between;
  1317. align-items: center;
  1318. background-color: #D9E0F0;
  1319. }
  1320. :deep(.el-collapse-item__header) {
  1321. height: 24px !important;
  1322. background-color: #EBEFF6 !important;
  1323. }
  1324. .detailBox {
  1325. width: 100%;
  1326. height: 270px;
  1327. }
  1328. :deep(.el-dialog__header) {
  1329. background-color: #ECEFF7;
  1330. margin-right: 0px;
  1331. }
  1332. .fileTable {
  1333. position: relative;
  1334. height: 100%;
  1335. /* overflow-y: auto; */
  1336. }
  1337. .setCli {
  1338. width: 156px;
  1339. max-height: 380px;
  1340. position: absolute;
  1341. top: -70px;
  1342. left: 300px;
  1343. flex-wrap: 400;
  1344. background-color: white;
  1345. border: 1px solid gray;
  1346. border-radius: 4px;
  1347. z-index: 10;
  1348. overflow-y: auto;
  1349. // font-size: 16px;
  1350. }
  1351. .setCli1 {
  1352. width: 156px;
  1353. height: auto;
  1354. position: absolute;
  1355. top: 185px;
  1356. left: 455px;
  1357. background-color: white;
  1358. border: 1px solid gray;
  1359. border-radius: 4px;
  1360. z-index: 2;
  1361. overflow-y: auto;
  1362. }
  1363. .chooseSet {
  1364. width: 140px;
  1365. height: 30px;
  1366. line-height: 30px;
  1367. margin: 5px auto;
  1368. font-size: 13px;
  1369. // display: flex;
  1370. // align-items: center;
  1371. // position: relative;
  1372. img {
  1373. margin-right: 4px;
  1374. vertical-align: middle;
  1375. }
  1376. }
  1377. .chooseSet:hover {
  1378. width: 140px;
  1379. height: 30px;
  1380. line-height: 30px;
  1381. margin: 5px auto;
  1382. font-size: 13px;
  1383. background-color: #F5F7F9;
  1384. /* color: white; */
  1385. }
  1386. :deep([data-v-69cdaa40] .el-collapse-item__header) {
  1387. padding-left: 10px;
  1388. }
  1389. :deep(.el-collapse-item__content) {
  1390. // height: 235px;
  1391. overflow-y: auto;
  1392. }
  1393. .ellipsis-text {
  1394. white-space: nowrap;
  1395. overflow: hidden;
  1396. text-overflow: ellipsis;
  1397. max-width: auto;
  1398. }
  1399. .right_menu {
  1400. width: 100px;
  1401. position: absolute;
  1402. padding: 8px;
  1403. box-shadow: 0px 2px 10px 1px rgba(199, 203, 216);
  1404. border-radius: 4px 4px 4px 4px;
  1405. border: 1px solid #c1cce3;
  1406. background-color: #fff;
  1407. z-index: 10000;
  1408. .menu_item {
  1409. width: 100%;
  1410. height: 40px;
  1411. border-radius: 4px 4px 4px 4px;
  1412. display: flex;
  1413. align-items: center;
  1414. &:hover {
  1415. background-color: #f5f7f9;
  1416. }
  1417. span {
  1418. margin-left: 4px;
  1419. }
  1420. }
  1421. }
  1422. .isCheck {
  1423. opacity: 1 !important;
  1424. }
  1425. :deep(.el-tag__content) {
  1426. display: block;
  1427. }
  1428. :deep(.el-icon el-tag__close) {
  1429. display: block;
  1430. }
  1431. :deep(.el-collapse-item__content) {
  1432. height: 100%;
  1433. border-bottom: none;
  1434. }
  1435. :deep(.el-collapse-item__wrap) {
  1436. height: 300px;
  1437. }</style>