index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  1. <template>
  2. <div class="ws-upload">
  3. <div v-if="!remarkWord">
  4. <el-button
  5. class="upload-btn"
  6. size="small"
  7. :disabled="disabled"
  8. type="default"
  9. @click="_handleUploadClick"
  10. >{{ buttonName ? buttonName : $t('upload.uploadButton') }}</el-button
  11. >
  12. </div>
  13. <div class="trigger-group" v-if="editable && remarkWord">
  14. <el-button
  15. class="upload-btn"
  16. size="small"
  17. :disabled="disabled"
  18. type="default"
  19. @click="_handleUploadClick"
  20. >{{ buttonName ? buttonName : $t('upload.uploadButton') }}</el-button
  21. >
  22. <div class="tip">
  23. {{ $t('upload.uploadText01') }}{{ formatTxt }}
  24. 格式的文件,单个文件大小不能超过10M
  25. </div>
  26. </div>
  27. <el-upload
  28. action="#"
  29. list-type="picture-card"
  30. :http-request="_handleRequest"
  31. :file-list="fileList"
  32. :before-upload="_handleBeforeUpload"
  33. :accept="accept"
  34. :multiple="!limit || parseInt(limit) > 1"
  35. ref="elUpload"
  36. >
  37. <template v-slot:trigger>
  38. <div ref="triggerDiv">-</div>
  39. </template>
  40. <template v-slot:file="{ file }">
  41. <div class="thumbnail-group">
  42. <winsea-picture-view
  43. v-if="isPictureFile(file)"
  44. class="el-upload-list__item-thumbnail"
  45. picturesShowType="fold"
  46. :pic-small-list="_getFileImg(file)"
  47. :pic-list="_getFileImgs"
  48. :width="110"
  49. :height="110"
  50. />
  51. <img
  52. v-else
  53. class="el-upload-list__item-thumbnail"
  54. :class="getFileClass(file)"
  55. />
  56. </div>
  57. <div class="fileName" v-if="showName" :title="file.name">
  58. {{ file.name }}
  59. </div>
  60. <span
  61. class="el-upload-list__item-actions"
  62. :class="!(file.status == 'success') ? 'operate-bg' : ''"
  63. v-if="file.status == 'success' && (editable || download)"
  64. >
  65. <span class="el-upload-list__item-delete">
  66. <i
  67. class="el-icon-view"
  68. v-if="
  69. isOnlineFile(file) &&
  70. download &&
  71. !isPictureFile(file) &&
  72. !onlineEdit
  73. "
  74. @click="_handleDownload(file, 'view')"
  75. ></i>
  76. <i
  77. class="el-icon-edit"
  78. v-if="onlineEdit"
  79. @click="_handleOnline(file)"
  80. ></i>
  81. <i
  82. class="el-icon-download"
  83. @click.stop="_handleDownload(file, 'down')"
  84. ></i>
  85. <i
  86. v-if="editable"
  87. class="el-icon-delete"
  88. @click.stop="_handleRemove(file)"
  89. ></i>
  90. </span>
  91. </span>
  92. </template>
  93. </el-upload>
  94. <BaseDialog
  95. v-drag
  96. :modal="false"
  97. :visible.sync="dialogVisible"
  98. @closed="_handlePreviewClosed"
  99. :title="downloadName"
  100. append-to-body
  101. >
  102. <img v-lazy="dialogImageUrl" width="100%" />
  103. </BaseDialog>
  104. <BaseDialog
  105. width="70%"
  106. :title="pdfFileName"
  107. :visible.sync="isShowPdf"
  108. :appendToBody="true"
  109. >
  110. <pdf :loadUrl="pdfUrl" v-if="isShowPdf" />
  111. </BaseDialog>
  112. </div>
  113. </template>
  114. <script>
  115. import { getFileList, saveFiles } from '@/model/upload'
  116. import { getOssInterimCredentials } from '@/model/procurement/spare'
  117. import { uuid } from '@/utils/assist'
  118. import downloadNow from '../WsDownload/download'
  119. import { EventBus } from 'base-core-lib'
  120. import pdf from '@/components/pdf/pdf'
  121. import { mapActions } from 'vuex'
  122. export default {
  123. name: 'WsUpload',
  124. components: {
  125. pdf,
  126. },
  127. props: {
  128. appendixIds: String,
  129. editable: {
  130. // 是否为编辑模式
  131. type: Boolean,
  132. default: true,
  133. },
  134. remarkWord: {
  135. // 是否有备注要求
  136. type: Boolean,
  137. default: true,
  138. },
  139. preview: {
  140. // 是否允许预览
  141. type: Boolean,
  142. default: true,
  143. },
  144. download: {
  145. // 是否允许下载
  146. type: Boolean,
  147. default: true,
  148. },
  149. showName: {
  150. // 是否显示文件名
  151. type: Boolean,
  152. default: true,
  153. },
  154. limit: {
  155. // 文件总数量限制
  156. type: Number,
  157. default: 10,
  158. },
  159. sizeLimit: {
  160. // 文件大小限制
  161. type: Number,
  162. default: undefined,
  163. },
  164. accept: {
  165. // 限制文件类型
  166. type: String,
  167. default:
  168. '.jpg, .jpeg, .png, .gif, .pdf, .doc, .docx, .xls, .xlsx, .zip, .rar, .eml, .mpeg, .avi, .asf, .wmv, .mpv, .rmvb, .rm, .flv, .mp4, .3pg, .ppt, .pptx, .txt',
  169. },
  170. ossKey: {
  171. type: String,
  172. required: false,
  173. },
  174. compId: {
  175. // 公司ID
  176. type: String,
  177. required: true,
  178. },
  179. vesselId: {
  180. // 船舶ID
  181. type: String,
  182. default: '',
  183. required: false,
  184. },
  185. tableName: {
  186. // 要保存的表的名字
  187. type: String,
  188. required: false,
  189. },
  190. onlineEdit: false,
  191. disabled: false,
  192. buttonName: {
  193. // 要保存的表的名字
  194. type: String,
  195. },
  196. },
  197. data() {
  198. return {
  199. pdfUrl: '',
  200. pdfFileName: '',
  201. isShowPdf: false,
  202. // vesselBankFlag: localStorage.getItem("ws-pf_serviceTypeFlag") == "true" ? "B" : "V",
  203. vesselBankFlag: 'V',
  204. curFileNum: 0,
  205. tempFileList: [],
  206. initFileList: [],
  207. loading: false, // 是否正在初始化filelsit
  208. fileList: [],
  209. removeList: [],
  210. dialogImageUrl: '',
  211. dialogVisible: false,
  212. downloadName: '',
  213. loadingView: '', // loading弹出层
  214. uploadParams: {
  215. companyId: this.compId,
  216. basePath: '', //config.getUploadPath(this.ossKey, this.compId)
  217. },
  218. clientFag: localStorage.getItem('ws-pf_clientFag'),
  219. }
  220. },
  221. computed: {
  222. formatTxt() {
  223. return this.accept
  224. .replace(/\./g, '')
  225. .replace(/ /g, '')
  226. .replace(/,/g, '、')
  227. },
  228. thisAppendixIds() {
  229. return this.appendixIds
  230. },
  231. _getFileImgs() {
  232. let arr = []
  233. for (let i of this.fileList) {
  234. if (this.isPictureFile(i)) {
  235. arr.push(i.url)
  236. }
  237. }
  238. return arr
  239. },
  240. },
  241. watch: {
  242. // 监听props.appendixIds, 变化时向服务器请求
  243. async thisAppendixIds(newV, oldV) {
  244. this.getDefaultFiles(newV)
  245. },
  246. },
  247. mounted() {
  248. this.getDefaultFiles(this.appendixIds)
  249. const handleChange = this.$refs.elUpload.$refs['upload-inner'].handleChange
  250. this.$refs.elUpload.$refs['upload-inner'].handleChange = (ev) => {
  251. this.initFileList = []
  252. this.curFileNum = ev.target.files.length
  253. for (let i = 0; i < this.curFileNum; i++) {
  254. this.initFileList.push(ev.target.files[i])
  255. this.tempFileList[i] = i
  256. }
  257. handleChange(ev)
  258. }
  259. },
  260. methods: {
  261. ...mapActions('common', ['uploadShipFiles']),
  262. //pdf预览
  263. async toOpen(scope) {
  264. const data = await this.getFileList({
  265. appendixIds: scope.row.filePathId,
  266. }).toPromise()
  267. let path = data[0] ? data[0].appendixPath : ''
  268. let filePath = this.$store.getters.baseInfo.fileUrl + '/' + path
  269. this.pdfUrl = filePath
  270. this.pdfFileName = scope.row.templateName
  271. this.isShowPdf = true
  272. },
  273. // handleChangeImage(file, fileList) {
  274. // console.info(file, fileList)
  275. // this.initFileList = fileList
  276. // this.tempFileList = fileList
  277. // },
  278. // 获取图片文件
  279. _getFileImg(file) {
  280. if (!file) {
  281. return ''
  282. }
  283. if (this.isPictureFile(file)) {
  284. if (file.url.indexOf('blob') === 0 || this.vesselBankFlag === 'V') {
  285. return file.url
  286. }
  287. return file.url + '?x-oss-process=image/resize,w_120,h_120'
  288. }
  289. return ''
  290. },
  291. async getDefaultFiles(appendixIds) {
  292. this.fileList = []
  293. if (appendixIds) {
  294. this.loading = true
  295. const list = await this._getFileList(appendixIds)
  296. this.loading = false
  297. if (list) {
  298. this.fileList = list.map((item, idx) => {
  299. return {
  300. appendixId: item.appendixId,
  301. name: item.appendixName,
  302. url: this.getFilePath(item.appendixPath),
  303. uid: uuid(),
  304. }
  305. })
  306. }
  307. }
  308. },
  309. // 处理上传按钮点击
  310. _handleUploadClick() {
  311. this.$refs.triggerDiv.click()
  312. },
  313. // 处理预览
  314. _handlePreview(file) {
  315. this.dialogImageUrl = file.url
  316. this.downloadName = file.name
  317. this.dialogVisible = true
  318. },
  319. // 处理预览关闭
  320. _handlePreviewClosed() {
  321. this.dialogImageUrl = ''
  322. this.downloadName = ''
  323. },
  324. // 处理删除
  325. _handleRemove(file) {
  326. if (file.appendixId) {
  327. // 这是要删除已经存在的附件
  328. const index = this.fileList.findIndex(
  329. (itm) => itm.appendixId === file.appendixId
  330. )
  331. this.fileList.splice(index, 1)
  332. this.removeList.push(file.appendixId)
  333. } else {
  334. // 这是删除已上传但还未保存的附件
  335. const index = this.fileList.findIndex((itm) => itm.uid === file.uid)
  336. this.fileList.splice(index, 1)
  337. }
  338. this.$emit('onChange', this.fileList.length)
  339. },
  340. // 自定义上传过程
  341. _handleRequest(param) {
  342. if (this.vesselBankFlag === 'V') {
  343. //船端
  344. this._uploadFilesShip(param)
  345. }
  346. },
  347. async _uploadFilesShip(param) {
  348. return new Promise(async (resolve, reject) => {
  349. this.showLoading()
  350. const file = param.file
  351. try {
  352. const data = await this.uploadShipFiles({
  353. file: file,
  354. companyId: this.compId || '',
  355. modelId: this.isNull(this.tableName)
  356. ? ''
  357. : this.tableName.split('_')[0],
  358. vesselId: this.vesselId || '',
  359. })
  360. this.$emit(
  361. 'uploadSuccess',
  362. data,
  363. file,
  364. this.getFilePath(data.appendixPath)
  365. )
  366. const item = {
  367. appendixName: data.appendixName,
  368. appendixPath: data.appendixPath,
  369. appendixSize: this.toKB(file.size),
  370. // appendixType: "V",
  371. appendixType:
  372. localStorage.getItem('ws-pf_serviceTypeFlag') == 'true'
  373. ? 'B'
  374. : 'V',
  375. fromTableName: this.tableName,
  376. vesselId: this.vesselId || '',
  377. uid: file.uid,
  378. url: this.getFilePath(data.appendixPath),
  379. name: file.name,
  380. }
  381. let fileIndex = this.getFileIndex(item.uid)
  382. if (fileIndex >= 0) {
  383. this.tempFileList.splice(fileIndex, 1, item)
  384. this._handleSuccessOnce()
  385. }
  386. resolve()
  387. } catch (error) {
  388. this.handleError()
  389. reject()
  390. }
  391. })
  392. },
  393. // 处理单个文件上传成功
  394. _handleSuccessOnce() {
  395. this.curFileNum--
  396. if (this.curFileNum === 0) {
  397. this.fileList.push.apply(
  398. this.fileList,
  399. this.tempFileList.filter((item) => {
  400. return !this.isNull(item.uid)
  401. })
  402. )
  403. this.tempFileList = []
  404. this.$emit('onChange', this.fileList.length)
  405. this.hideLoading()
  406. }
  407. },
  408. // 处理在线编辑
  409. _handleOnline(file) {
  410. window.open(
  411. process.env.VUE_APP_BASE_API +
  412. '/office/file?fileId=' +
  413. file.appendixId +
  414. '&showSaveFlag=1'
  415. )
  416. },
  417. // 处理下载
  418. _handleDownload(file, type) {
  419. if (this.isOnlineFile(file) && type === 'view') {
  420. this.pdfUrl =
  421. file.url || this.$store.getters.baseInfo.fileUrl + file.appendixPath
  422. this.pdfFileName = file.appendixName || file.name
  423. this.isShowPdf = true
  424. return
  425. }
  426. downloadNow(file.url, file.name, this.vesselBankFlag, type)
  427. },
  428. _handleBeforeUpload(file) {
  429. let size = this.sizeLimit ? this.sizeLimit : 50
  430. if (file.size > size * 1024 * 1024) {
  431. EventBus.$emit('error', this.$t('showMessage.filesCannot') + size + 'M')
  432. return false
  433. }
  434. if (this.limit) {
  435. let limitFileNum = parseInt(this.limit)
  436. let currentFileNum = this.fileList.length + this.curFileNum
  437. if (limitFileNum > 1 && currentFileNum > limitFileNum) {
  438. this._handleExceed()
  439. return false
  440. }
  441. if (limitFileNum === 1) {
  442. this.fileList = []
  443. }
  444. }
  445. return true
  446. },
  447. //处理文件上传失败
  448. _handleError() {
  449. this.curFileNum--
  450. this.hideLoading()
  451. },
  452. _handleExceed() {
  453. EventBus.$emit('warning', `最多只能上传${this.limit}个文件`)
  454. },
  455. // 传入appendixIds 从服务器获取文件列表信息
  456. _getFileList(appendixIds) {
  457. return new Promise(async (next) => {
  458. try {
  459. next((await getFileList({ appendixIds }).toPromise()) || [])
  460. } catch (error) {
  461. next()
  462. }
  463. })
  464. },
  465. handleSaveBill() {
  466. return new Promise((resolve, reject) => {
  467. if (!this.removeList && this.fileList.length == 0) {
  468. resolve('')
  469. return
  470. }
  471. const oldAppendixIds = this.removeList.join()
  472. const newAppendixs = this.fileList
  473. const params = { newAppendixs, oldAppendixIds }
  474. // if (newAppendixs)
  475. saveFiles(params)
  476. .toPromise()
  477. .then((res) => {
  478. resolve(res.join())
  479. })
  480. .catch((err) => {
  481. EventBus.$emit('error', this.$t('showMessage.saveFilesError'))
  482. reject()
  483. })
  484. })
  485. },
  486. // 获取文件样式
  487. getFileClass(file) {
  488. const ext = this.getExtName(file.name)
  489. return 'ext ' + ext
  490. },
  491. // 是否为图片
  492. isPictureFile(file) {
  493. if (file && file.name) {
  494. const name = this.getExtName(file.name)
  495. return (
  496. name === 'jpg' ||
  497. name === 'png' ||
  498. name === 'jpeg' ||
  499. name === 'gif' ||
  500. name === 'webp' ||
  501. name === 'bmp' ||
  502. name === 'JPG' ||
  503. name === 'PNG' ||
  504. name === 'JPEG' ||
  505. name === 'GIF' ||
  506. name === 'WEBP' ||
  507. name === 'BMP'
  508. )
  509. }
  510. return false
  511. },
  512. // 是否为在线打开文件
  513. isOnlineFile(file) {
  514. if (file && file.name) {
  515. const name = this.getExtName(file.name)
  516. return name === 'pdf' || name === 'tet'
  517. }
  518. return false
  519. },
  520. getOssInter() {
  521. return new Promise(async (next) => {
  522. try {
  523. next(await getOssInterimCredentials().toPromise())
  524. } catch (error) {
  525. next()
  526. }
  527. })
  528. },
  529. getFileIndex(uid) {
  530. for (let i = 0; i < this.initFileList.length; i++) {
  531. if (this.initFileList[i].uid === uid) {
  532. return i
  533. }
  534. }
  535. return -1
  536. },
  537. // 显示loading
  538. showLoading() {
  539. this.loadingView = this.$loading({
  540. lock: true,
  541. text: 'Loading',
  542. spinner: 'el-icon-loading',
  543. background: 'rgba(0, 0, 0, 0.7)',
  544. target: document.querySelector('.div1'),
  545. })
  546. },
  547. // 隐藏loading
  548. hideLoading() {
  549. this.loadingView.close()
  550. },
  551. // 获取后缀名
  552. getExtName(url) {
  553. if (!url) {
  554. return url
  555. }
  556. url = url.substr(url.lastIndexOf('.') + 1)
  557. if (url.indexOf('?') >= 0) {
  558. url = url.substr(url.indexOf('?'))
  559. }
  560. return url
  561. },
  562. checkUrl(path) {
  563. if (path.indexOf('http://') > -1 || path.indexOf('https://') > -1) {
  564. let pathSplit = path.split('.com/')
  565. if (pathSplit) {
  566. path = pathSplit[1]
  567. }
  568. }
  569. return path
  570. },
  571. getFilePath(path) {
  572. // let sysUrl = process.env.NODE_ENV === "production"?"http://" + window.location.host+"/":"http://product-dev.winsea.com/";
  573. // let sysUrl = this.$store.getters.baseInfo.fileUrl
  574. // path = this.checkUrl(path)
  575. // if (this.clientFag === "B") {
  576. // // sysUrl+="pb/"
  577. // }
  578. // return sysUrl + this.slash(path)
  579. return path
  580. },
  581. // 字节转KB
  582. toKB(bt) {
  583. return (bt / 1024).toFixed(2) + 'KB'
  584. },
  585. clearFiles() {
  586. this.fileList = []
  587. },
  588. // 反斜杠转斜杠
  589. slash(str) {
  590. return str.replace(/\\/g, '/')
  591. },
  592. },
  593. }
  594. </script>
  595. <style lang="scss" scoped>
  596. $picture-size: 110px;
  597. $ctrl-margin-left: 10px;
  598. .archived-history
  599. .upButton
  600. /deep/
  601. .el-upload-list__item-delete:nth-last-of-type(1) {
  602. display: inline-block !important;
  603. }
  604. .el-button--default {
  605. border: 1px solid #5473e8;
  606. color: #5473e8;
  607. }
  608. .ws-upload {
  609. /*.upload-noramark-btn{*/
  610. /* padding: 0px;*/
  611. /* border: none;*/
  612. /*}*/
  613. padding-bottom: 10px;
  614. .trigger-group {
  615. margin-bottom: 10px;
  616. margin-top: 10px;
  617. .upload-btn {
  618. display: inline-block;
  619. border-radius: 4px;
  620. }
  621. .tip {
  622. // display: inline-block;
  623. margin: 0;
  624. padding: 0;
  625. font-size: 12px;
  626. line-height: 17px;
  627. color: #999;
  628. margin-bottom: 4px;
  629. margin-top: 4px;
  630. vertical-align: middle;
  631. white-space: initial;
  632. text-align: left;
  633. width: calc(100% - 100px);
  634. }
  635. }
  636. /deep/ .thumbnail-group {
  637. width: $picture-size;
  638. height: $picture-size;
  639. .el-upload-list__item-thumbnail {
  640. display: block;
  641. border-radius: 6px;
  642. border: 1px solid #ccd6e3;
  643. background-color: #fff;
  644. }
  645. }
  646. /deep/.winsea-picture-view ul {
  647. padding: 0;
  648. }
  649. /deep/ .el-upload-list__item-actions {
  650. height: $picture-size;
  651. overflow: hidden;
  652. border-radius: 6px;
  653. align-items: center;
  654. display: flex;
  655. justify-content: center;
  656. z-index: 100;
  657. height: 30px;
  658. top: 80px;
  659. }
  660. .fileName {
  661. font-size: 12px;
  662. color: #666;
  663. margin: 0;
  664. text-align: center;
  665. margin-top: 4px;
  666. margin-bottom: 4px;
  667. white-space: nowrap;
  668. overflow: hidden;
  669. text-overflow: ellipsis;
  670. }
  671. /deep/
  672. .el-upload-list--picture-card
  673. .el-upload-list__item-actions
  674. span
  675. + span {
  676. margin-left: $ctrl-margin-left;
  677. }
  678. /deep/ .el-upload.el-upload--picture-card {
  679. display: none;
  680. }
  681. /deep/ .el-upload-list__item {
  682. width: $picture-size;
  683. height: auto;
  684. border: 0;
  685. background: none;
  686. }
  687. .ws-upload-progress {
  688. width: 84%;
  689. top: 88px;
  690. }
  691. .ext {
  692. background-size: $picture-size * 0.7;
  693. background-repeat: no-repeat;
  694. background-position: center;
  695. }
  696. .doc {
  697. background-image: url('~@/assets/images/common/upload/doc.png');
  698. }
  699. .docx {
  700. background-image: url('~@/assets/images/common/upload/docx.png');
  701. }
  702. .eml {
  703. background-image: url('~@/assets/images/common/upload/eml.png');
  704. }
  705. .ppt {
  706. background-image: url('~@/assets/images/common/upload/PPT.png');
  707. }
  708. .pptx {
  709. background-image: url('~@/assets/images/common/upload/PPT.png');
  710. }
  711. .pdf {
  712. background-image: url('~@/assets/images/common/upload/pdf.png');
  713. }
  714. .txt {
  715. background-image: url('~@/assets/images/common/upload/txt.png');
  716. }
  717. .mp4,
  718. .avi,
  719. .mov,
  720. .rmvb,
  721. .rm,
  722. .flv {
  723. background-image: url('~@/assets/images/common/upload/video.jpg');
  724. background-size: $picture-size;
  725. }
  726. .rar {
  727. background-image: url('~@/assets/images/common/upload/rar.png');
  728. }
  729. .xls {
  730. background-image: url('~@/assets/images/common/upload/xls.png');
  731. }
  732. .xlsx {
  733. background-image: url('~@/assets/images/common/upload/xlsx.png');
  734. }
  735. .zip {
  736. background-image: url('~@/assets/images/common/upload/zip.png');
  737. }
  738. }
  739. // 取消ele动画
  740. /deep/ .el-list-leave-active {
  741. transition: all 0s;
  742. }
  743. /deep/ .el-list-enter-active {
  744. transition: all 0s;
  745. }
  746. /*.el-button--text{*/
  747. /* color: #666666;*/
  748. /*}*/
  749. /*.el-button--text:hover{*/
  750. /* color: #4a89f1;*/
  751. /*}*/
  752. /*.el-button--text:focus{*/
  753. /* color: #ffffff;*/
  754. /*}*/
  755. .operate-bg:hover {
  756. opacity: 0;
  757. }
  758. </style>