MyFile.vue 54 KB

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