index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762
  1. <template>
  2. <div class="scene-management-body" v-loading.fullscreen.lock="fullscreenLoading">
  3. <div class="order-management-body">
  4. <div class="order-management-inner">
  5. <div class="base-info">
  6. <span>关键词:</span>
  7. <el-input
  8. @keyup.enter.native="()=>{currentPage=1;_getSceneData()}"
  9. v-model="searchKey"
  10. placeholder="关键词"
  11. ></el-input>
  12. <el-button type="primary" @click="()=>{currentPage=1;_getSceneData()}" color="red">搜索</el-button>
  13. <span style="margin-left:10px;">SN码:</span>
  14. <el-input
  15. @keyup.enter.native="getSceneBySN"
  16. v-model="snKey"
  17. placeholder="输入SN码下载场景数据"
  18. ></el-input>
  19. <el-button type="primary" @click="getSceneBySN" color="red">下载场景数据</el-button>
  20. </div>
  21. </div>
  22. <!-- 全部 -->
  23. <div class="scene-management_bottom">
  24. <div class="order-management-table">
  25. <div class="scene-management_tab">
  26. <ul>
  27. <li
  28. v-for="(item,index) in tabs"
  29. :key="index"
  30. :class="{'scene-management_tab_li_active':item.idx==tabIndex}"
  31. @click="clickTabItem(item.idx)"
  32. >
  33. {{item.name}}
  34. <span
  35. v-if="item.idx != -2"
  36. style="margin:0 10px;color: #999;font-weight: normal;"
  37. >/</span>
  38. </li>
  39. </ul>
  40. <div style="float: right;vertical-align: middle;">
  41. <el-button type="primary" @click="openTransfer" color="red">迁移</el-button>
  42. <el-button type="success" @click="downloadMultipleScene" color="red">下载</el-button>
  43. <el-button type="danger" @click="_deleMultipleScene" color="red">删除</el-button>
  44. </div>
  45. </div>
  46. <el-table
  47. key="order_table"
  48. ref="order_table"
  49. class="e-table"
  50. :data="scenes"
  51. style="width: 100%"
  52. @selection-change="handleSelectionChange"
  53. >
  54. <el-table-column
  55. type="selection"
  56. width="55">
  57. </el-table-column>
  58. <el-table-column label="场景封面" width="120">
  59. <template slot-scope="scope">
  60. <a :href="scope.row.webSite" target="_blank" style="cursor: pointer;">
  61. <img :src="scope.row.thumb" width="100%" height />
  62. </a>
  63. </template>
  64. </el-table-column>
  65. <el-table-column label="分类">
  66. <template slot-scope="scope">
  67. <el-select v-model="scope.row.sceneType" @change="changTypeHandle(scope.row)" placeholder="请选择">
  68. <el-option label='其他' :value="0"></el-option>
  69. <el-option label='文博' :value="1"></el-option>
  70. <el-option label='地产' :value="2"></el-option>
  71. <el-option label='电商' :value="3"></el-option>
  72. <el-option label='餐饮' :value="4"></el-option>
  73. <el-option label='家具' :value="5"></el-option>
  74. </el-select>
  75. </template>
  76. </el-table-column>
  77. <el-table-column prop="sceneName" width="200" label="标题"></el-table-column>
  78. <el-table-column label="拍摄时间" width="200">
  79. <template slot-scope="scope">
  80. <div>{{new Date(scope.row.createTime).format('yyyy-MM-dd hh:mm:ss')}}</div>
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="经纬度" width="200">
  84. <template slot-scope="scope">
  85. <div v-if="scope.row.longitude">经度:{{scope.row.longitude}}</div>
  86. <div v-if="scope.row.latitude">维度:{{scope.row.latitude }}</div>
  87. <span v-if="!scope.row.latitude&&!scope.row.longitude">/</span>
  88. </template>
  89. </el-table-column>
  90. <el-table-column prop="childName" label="设备ID" width="150"></el-table-column>
  91. <el-table-column prop="userName" label="用户名" width="150"></el-table-column>
  92. <el-table-column prop="scenekey" label="权限"></el-table-column>
  93. <el-table-column prop="viewCount" label="浏览数"></el-table-column>
  94. <el-table-column prop="sceneType" label="平台展示">
  95. <template slot-scope="scope">
  96. <el-switch
  97. @change="_updateSceneStatus(scope.row.num,scope.row.status)"
  98. v-model="scope.row.statusBoo"
  99. active-color="#13ce66"
  100. inactive-color="#ff4949"
  101. ></el-switch>
  102. </template>
  103. </el-table-column>
  104. <el-table-column prop="status" label="操作">
  105. <template slot-scope="scope">
  106. <el-button
  107. v-if="scope.row.sceneScheme>4"
  108. type="text"
  109. @click="_showDownloadSelect(scope.row.num);"
  110. class="download_btn"
  111. >下载</el-button>
  112. <el-button type="text" @click="_deleScene(scope.row.num)" class="delete_btn">删除</el-button>
  113. </template>
  114. </el-table-column>
  115. </el-table>
  116. </div>
  117. <div class="order-management-pagination">
  118. <el-pagination
  119. @current-change="handleCurrentChange"
  120. :current-page.sync="currentPage"
  121. :page-size="pageSize"
  122. layout="total, prev, pager, next, jumper"
  123. :total="total"
  124. ></el-pagination>
  125. </div>
  126. </div>
  127. </div>
  128. <el-dialog width="450px" title="迁移场景" :visible.sync="dialogTransferVisible">
  129. <el-form >
  130. <el-form-item label="当前SN码:" width="100%">
  131. <div style="max-height:300px;overflow: auto;">
  132. <p v-for="(item,i) in multipleSelection" :key="i">{{item.snCode||item.childName}}</p>
  133. </div>
  134. </el-form-item>
  135. <el-form-item label="迁往SN码:" width="100%">
  136. <el-input v-model="transferSN"></el-input>
  137. </el-form-item>
  138. </el-form>
  139. <div slot="footer" class="dialog-footer">
  140. <el-button @click="dialogTransferVisible = false">取 消</el-button>
  141. <el-button type="primary" @click="transferScene">确 定</el-button>
  142. </div>
  143. </el-dialog>
  144. <el-dialog
  145. width="500px"
  146. title="场景下载"
  147. :visible.sync="downloadDialogVisible"
  148. >
  149. <el-form :model="downloadOptions">
  150. <el-form-item label="是否下载tiles">
  151. <el-switch
  152. v-model="downloadOptions.isTiles"
  153. active-color="#13ce66"
  154. inactive-color="#ff4949">
  155. </el-switch>
  156. </el-form-item>
  157. </el-form>
  158. <span slot="footer" class="dialog-footer">
  159. <el-button @click="downloadDialogVisible = false">取 消</el-button>
  160. <el-button type="primary" @click="_downloadSingleScene">确 定</el-button>
  161. </span>
  162. </el-dialog>
  163. <el-dialog
  164. width="500px"
  165. title="下载场景"
  166. :visible.sync="download.showSta"
  167. :before-close="_handleClose"
  168. >
  169. <el-form v-if="download.showSta" label-width="100px">
  170. <div id="progressText" class>
  171. <span>{{download.downloadSta}}</span>
  172. </div>
  173. <div>
  174. <span id="downloadDataName">{{download.downloadDataName}}</span>
  175. <span id="percent">{{download.percent}}%</span>
  176. <el-progress :percentage="download.percent" :color="progressColor" :show-text="false"></el-progress>
  177. </div>
  178. </el-form>
  179. <div slot="footer" class="dialog-footer">
  180. <el-button @click="_handleClose" class="cancle-download-btn">取消下载</el-button>
  181. </div>
  182. </el-dialog>
  183. </div>
  184. </template>
  185. <script>
  186. const _sceneTypeName = {
  187. 0: '其他',
  188. 1: '文博',
  189. 2: '地产',
  190. 3: '电商',
  191. 4: '餐饮',
  192. 5: '家居'
  193. }
  194. // const serverName = 'https://test.4dkankan.com'
  195. const serverName = 'http://192.168.0.28:8887'
  196. // const serverName = 'https://www.4dage.com'
  197. export default {
  198. data () {
  199. return {
  200. getRowKeys (row) {
  201. return row.number
  202. },
  203. download: {
  204. showSta: false,
  205. downloadSta: '正在拉取数据',
  206. downloadDataName: '场景数据.zip',
  207. percent: 0,
  208. timer: 0
  209. },
  210. downloadDialogVisible: false,
  211. dialogTransferVisible: false,
  212. progressColor: '#09e1c0',
  213. tabs: [
  214. { name: '全部', idx: 0 },
  215. { name: '展示中', idx: 1 },
  216. { name: '已隐藏', idx: -2 }
  217. ],
  218. expands: [],
  219. expandedArr: [],
  220. scenes: [],
  221. currentPage: 1,
  222. key_input: '',
  223. fullscreenLoading: false,
  224. total: 0,
  225. // expressNum_input: "",
  226. searchDate: [],
  227. searchKey: '',
  228. snKey: '',
  229. searchOrderNumber: '',
  230. searchPhone: '',
  231. searchExpressNum: '',
  232. hasClickSearch: false,
  233. tabIndex: 0,
  234. pageSize: 10,
  235. value2: true,
  236. multipleSelection: '',
  237. downloadOptions: {},
  238. transferSN: ''
  239. }
  240. },
  241. watch: {
  242. currentPage () {
  243. this._getSceneData()
  244. },
  245. tabIndex () {
  246. this._getSceneData()
  247. }
  248. },
  249. methods: {
  250. async changTypeHandle (item) {
  251. this.fullscreenLoading = true
  252. await this.$http.post('/manager/scene/updateSceneType', {
  253. sceneType: item.sceneType,
  254. sceneNum: item.num
  255. })
  256. this._getSceneData()
  257. this.fullscreenLoading = false
  258. },
  259. handleSelectionChange (val) {
  260. this.multipleSelection = val
  261. },
  262. handleCurrentChange (val) {
  263. let page = val
  264. // console.log(`当前页: ${val}`)
  265. if (this.total > 0 && !this.hasClickSearch) {
  266. this._getSceneData(page)
  267. } else {
  268. this._searchOrderByPage(page)
  269. }
  270. },
  271. clickTabItem (idx) {
  272. // console.log(idx)
  273. this.tabIndex = idx
  274. this.total = 0
  275. this.hasClickSearch = false
  276. this.currentPage = 0
  277. this.$refs.searchKey = this.key_input = ''
  278. this._getSceneData(1)
  279. },
  280. async downloadMultipleScene () {
  281. if (!this.multipleSelection && this.multipleSelection.length === 0) {
  282. return this.$alert('请选择场景', '提示', {
  283. confirmButtonText: '确定'
  284. })
  285. }
  286. let arr = []
  287. arr = this.multipleSelection.map((item) => item.num)
  288. this.fullscreenLoading = true
  289. this.$confirm(`此操作将下载您选择的${arr.length}个场景, 是否继续?`, '提示', {
  290. confirmButtonText: '确定',
  291. cancelButtonText: '取消',
  292. type: 'warning'
  293. })
  294. .then(() => {
  295. this._downloadScene('', arr, this.downloadOptions.isTiles)
  296. })
  297. .catch(() => {
  298. this.$message({
  299. type: 'info',
  300. message: '已取消'
  301. })
  302. this.fullscreenLoading = false
  303. })
  304. console.log(arr)
  305. },
  306. async getSceneBySN () {
  307. if (!this.snKey) {
  308. return
  309. }
  310. this.fullscreenLoading = true
  311. let res = await this.$http.post('/manager/scene/findSceneProBySnCode', {
  312. type: '',
  313. snCode: this.snKey
  314. })
  315. this.fullscreenLoading = false
  316. let arr = []
  317. if (res.code === 0) {
  318. arr = res.data.map((item) => item.num)
  319. }
  320. if (arr.length <= 0) {
  321. return this.$message({
  322. type: 'info',
  323. message: '查询不到该SN码场景数据。'
  324. })
  325. }
  326. this.$confirm(`此操作将下载该相机下的${arr.length}个场景, 是否继续?`, '提示', {
  327. confirmButtonText: '确定',
  328. cancelButtonText: '取消',
  329. type: 'warning'
  330. })
  331. .then(() => {
  332. this._downloadScene(this.snKey, arr, this.downloadOptions.isTiles)
  333. })
  334. .catch(() => {
  335. this.$message({
  336. type: 'info',
  337. message: '已取消'
  338. })
  339. this.fullscreenLoading = false
  340. })
  341. },
  342. openTransfer () {
  343. if (!this.multipleSelection && this.multipleSelection.length === 0) {
  344. return this.$alert('请选择场景', '提示', {
  345. confirmButtonText: '确定'
  346. })
  347. }
  348. this.dialogTransferVisible = true
  349. },
  350. async transferScene () {
  351. let sceneNumArr = this.multipleSelection.map(item => {
  352. return item.num
  353. })
  354. let res = await this.$http.post('/manager/scene/moveScene', {
  355. snCode: this.transferSN,
  356. sceneNum: sceneNumArr.join(',')
  357. })
  358. if (res.code === 0) {
  359. this.$message({
  360. type: 'success',
  361. message: '迁移成功!'
  362. })
  363. this._getSceneData()
  364. } else {
  365. this.$alert(`迁移失败,${res.msg}`, '提示', {
  366. confirmButtonText: '确定'
  367. })
  368. }
  369. this.dialogTransferVisible = false
  370. },
  371. async _getSceneData () {
  372. this.fullscreenLoading = true
  373. let status = this.tabIndex === 0 ? null : this.tabIndex
  374. let res = await this.$http.post('/manager/scene/list', {
  375. type: status,
  376. searchKey: this.searchKey,
  377. pageNum: this.currentPage,
  378. pageSize: this.pageSize
  379. })
  380. this.fullscreenLoading = false
  381. if (res.code === 0) {
  382. let temp = res.data.list
  383. for (var i = 0; i < temp.length; i++) {
  384. temp[i].sceneType = _sceneTypeName[temp[i].sceneType]
  385. temp[i].scenekey = temp[i].scenekey ? '私密' : '公开'
  386. temp[i]['userName'] = temp[i]['userName']
  387. ? temp[i]['userName']
  388. : '未绑定'
  389. let gpsStr = temp[i].gps || ''
  390. if (gpsStr instanceof Object) {
  391. JSON.parse(gpsStr, (k, v) => {
  392. if (k && k === 'latitude') {
  393. temp[i].latitude = this.formatDegree(v)
  394. } else if (k && k === 'longitude') {
  395. temp[i].longitude = this.formatDegree(v)
  396. }
  397. })
  398. }
  399. if (temp[i].status === 1) {
  400. temp[i].statusBoo = true
  401. } else if (temp[i].status === -2) {
  402. temp[i].statusBoo = false
  403. } else {
  404. temp[i].statusBoo = ''
  405. }
  406. }
  407. this.scenes = temp
  408. this.total = res.data.total
  409. }
  410. },
  411. formatDegree (value) {
  412. value = Math.abs(value)
  413. var v1 = Math.floor(value) // 度
  414. var v2 = Math.floor((value - v1) * 60) // 分
  415. var v3 = Math.round(((value - v1) * 3600) % 60) // 秒
  416. return v1 + '°' + v2 + "'" + v3 + '"'
  417. },
  418. async _updateSceneStatus (num, status) {
  419. let tempStatus
  420. if (status === 1) {
  421. tempStatus = -2
  422. } else if (status === -2) {
  423. tempStatus = 1
  424. } else {
  425. this.$notify.error({
  426. title: '错误',
  427. message: '切换失败'
  428. })
  429. return
  430. }
  431. this.fullscreenLoading = true
  432. await this.$http.post('/manager/scene/updateStatus', {
  433. type: tempStatus,
  434. sceneNum: num
  435. })
  436. this._getSceneData()
  437. this.fullscreenLoading = false
  438. },
  439. _showDownloadSelect (num) {
  440. this.downloadDialogVisible = true
  441. this.downloadOptions = {
  442. activeNum: num,
  443. isTiles: false
  444. }
  445. },
  446. _downloadSingleScene () {
  447. let {activeNum: num, isTiles} = this.downloadOptions
  448. this._downloadScene('', [num], isTiles)
  449. },
  450. _downloadScene (SNCode = '', sceneArr, isTiles = true) {
  451. this.fullscreenLoading = true
  452. // let {isTiles} = this.downloadOptions
  453. // SNCode = '0223B29DFw'
  454. console.log(this.downloadOptions)
  455. let arr = sceneArr
  456. // arr = ['1ggqA2lb1', 'RQpb8C4qz', '1IgPTqRUB', '3dFKNeveg']
  457. let urlArr = arr.map(item => {
  458. return this.$http.get(`/scene/getInfo?num=${item}&t=${new Date().getTime()}`)
  459. })
  460. let allPromise = this.$http.all(urlArr)
  461. let errmsg = ''
  462. allPromise.then(res => {
  463. let temp = []
  464. res.forEach(ele => {
  465. if (ele && ele.code === 0) {
  466. this.$http.get(`/scene/addDownloadNum?sceneNum=${ele.data.num}&t=${new Date().getTime()}`)
  467. ele.data.sceneScheme = ele.data.sceneScheme === 11 ? 2 : 1 // 禁止本地端放大缩小
  468. temp.push({
  469. sceneCode: ele.data.num,
  470. sceneInfo: JSON.stringify(ele)
  471. })
  472. } else {
  473. errmsg = ele.msg
  474. }
  475. })
  476. if (temp.length <= 0) {
  477. this.downloadDialogVisible = false
  478. this.fullscreenLoading = false
  479. return this.$message({
  480. type: 'info',
  481. message: '下载失败,' + errmsg
  482. })
  483. }
  484. let snCode = SNCode ? ('SN_' + SNCode) : temp[0].sceneCode
  485. let version = ''
  486. try {
  487. console.log(JSON.parse(temp[0].sceneInfo))
  488. version = JSON.parse(temp[0].sceneInfo).data.buildType.toLowerCase() === 'v2' ? 'v2/' : ''
  489. } catch (error) {
  490. }
  491. this.downloadDialogVisible = false
  492. this.fullscreenLoading = false
  493. this.$http
  494. .post(`${serverName}/downloadData/${version}`, {
  495. sceneCodeArr: temp,
  496. isTiles: isTiles,
  497. snCode
  498. // sceneCode: sceneCode,
  499. // isTiles,
  500. // sceneInfo: JSON.stringify(resp)
  501. })
  502. .then(resp => {
  503. // 将请求发送至服务器后再轮询
  504. if (resp['sta'] === 1003) {
  505. // 文件已存在
  506. this._browserDownload(resp['data']['url']) // 调用浏览器下载文件
  507. } else {
  508. this.download.showSta = true
  509. this.download.downloadDataName = `${snCode}.zip`
  510. if (resp['sta'] === 1000 || resp['sta'] === 1002) {
  511. this._downloadHandler(resp)
  512. }
  513. if (resp['sta'] === 1001) {
  514. this._compressHandler(resp)
  515. }
  516. this.download.timer = setInterval(() => {
  517. this.$http
  518. .get(
  519. `${serverName}/downloadData/process/${version}?snCode=${snCode}`
  520. )
  521. .then(resp => {
  522. console.log(resp)
  523. if (resp['sta'] === 1000) {
  524. this._downloadHandler(resp)
  525. }
  526. if (resp['sta'] === 1001) {
  527. this._compressHandler(resp)
  528. }
  529. })
  530. }, 1000)
  531. }
  532. })
  533. })
  534. },
  535. _handleClose () {
  536. this.$confirm('取消下载?', '提示')
  537. .then(() => {
  538. this.download.showSta = false
  539. clearInterval(this.download.timer)
  540. })
  541. .catch(_ => {})
  542. },
  543. _downloadHandler (resp) {
  544. this.download.downloadSta = '正在拉取数据'
  545. this.download.percent = parseInt(resp['data']['percent'])
  546. let percent = parseInt(resp['data']['percent'])
  547. this.download.percent = percent
  548. },
  549. _compressHandler (resp) {
  550. this.download.downloadSta = '正在压缩数据'
  551. let percent = parseInt(resp['data']['percent'])
  552. this.download.percent = percent
  553. if (percent === 100) {
  554. this.download.showSta = false
  555. clearInterval(this.download.timer)
  556. this._browserDownload(resp['data']['url'])
  557. }
  558. },
  559. _browserDownload (url) {
  560. let a = document.createElement('a')
  561. let urlArr = url.split('/')
  562. let fileName = urlArr[urlArr.length - 1]
  563. a.href = url
  564. a.download = fileName
  565. a.style.display = 'none'
  566. document.body.appendChild(a)
  567. a.click()
  568. document.body.removeChild(a)
  569. },
  570. _deleMultipleScene () {
  571. if (!this.multipleSelection && this.multipleSelection.length === 0) {
  572. return this.$alert('请选择场景', '提示', {
  573. confirmButtonText: '确定'
  574. })
  575. }
  576. let sceneIdArr = this.multipleSelection.map(item => {
  577. return item.num
  578. })
  579. this.$confirm('此操作将删除您选择的多个场景, 是否继续?', '提示', {
  580. confirmButtonText: '确定',
  581. cancelButtonText: '取消',
  582. type: 'warning'
  583. })
  584. .then(async () => {
  585. this.fullscreenLoading = true
  586. let res = await this.$http.post('/manager/scene/delete', {
  587. sceneNum: sceneIdArr.join(',')
  588. })
  589. if (res.code === 0) {
  590. this.$message({
  591. type: 'success',
  592. message: '删除成功!'
  593. })
  594. this._getSceneData()
  595. } else {
  596. this.$message({
  597. type: 'error',
  598. message: res.msg
  599. })
  600. this._getSceneData()
  601. }
  602. this.fullscreenLoading = false
  603. })
  604. .catch(() => {
  605. this.$message({
  606. type: 'info',
  607. message: '已取消删除'
  608. })
  609. this.fullscreenLoading = false
  610. })
  611. },
  612. _deleScene (num) {
  613. this.$confirm('此操作将删除该场景, 是否继续?', '提示', {
  614. confirmButtonText: '确定',
  615. cancelButtonText: '取消',
  616. type: 'warning'
  617. })
  618. .then(async () => {
  619. this.fullscreenLoading = true
  620. let res = await this.$http.post('/manager/scene/delete', {
  621. sceneNum: num
  622. })
  623. if (res.code === 0) {
  624. this.$message({
  625. type: 'success',
  626. message: '删除成功!'
  627. })
  628. this._getSceneData()
  629. } else {
  630. this.$message({
  631. type: 'error',
  632. message: res.msg
  633. })
  634. this._getSceneData()
  635. }
  636. this.fullscreenLoading = false
  637. })
  638. .catch(() => {
  639. this.$message({
  640. type: 'info',
  641. message: '已取消删除'
  642. })
  643. this.fullscreenLoading = false
  644. })
  645. }
  646. },
  647. created () {
  648. this._getSceneData()
  649. }
  650. }
  651. </script>
  652. <style lang="css" scoped>
  653. @import "./style.css";
  654. </style>
  655. <style type="text/css">
  656. .el-table__expand-icon > i {
  657. display: none !important;
  658. }
  659. .delete_btn span {
  660. color: #f56c6c;
  661. }
  662. .download_btn span {
  663. color: #09e1c0;
  664. }
  665. .el-dialog__body {
  666. padding: 10px 20px;
  667. }
  668. .el-dialog__title {
  669. font-weight: 700;
  670. }
  671. .el-progress-bar {
  672. margin-top: 10px;
  673. }
  674. .el-dialog {
  675. border-radius: 7px;
  676. }
  677. .cancle-download-btn {
  678. background: #09e1c0;
  679. color: white;
  680. width: 120px;
  681. font-size: 16px;
  682. font-weight: 100;
  683. letter-spacing: 1px;
  684. border: none;
  685. }
  686. .cancle-download-btn:hover {
  687. background: #09e1c0;
  688. color: white;
  689. }
  690. .cancle-download-btn:focus {
  691. color: white;
  692. }
  693. #progressText {
  694. padding: 0 0 20px 0;
  695. font-weight: 100;
  696. }
  697. #downloadDataName,
  698. #percent {
  699. font-size: 16px;
  700. font-weight: 200;
  701. color: black;
  702. }
  703. #percent {
  704. float: right;
  705. }
  706. </style>