多媒体信息发布平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

977 lines
26 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. <template>
  2. <div class="app-container">
  3. <el-form ref="form" :model="form" size="small">
  4. <!-- 创建标题 -->
  5. <el-row class="in_release_item" type="flex" justify="space-between">
  6. <el-col :span="3" class="item_title">创建{{ publishType === 0 ? "即时发布" : "定时发布" }}</el-col>
  7. <el-col :span="18">
  8. <div class="input_wrap">
  9. <span class="input_label">名称</span>
  10. <el-input
  11. v-model="form.name"
  12. :placeholder="changePlaceholder"
  13. class="input_name"
  14. />
  15. </div>
  16. </el-col>
  17. <el-col :span="4" class="release_right">
  18. <el-button
  19. round
  20. class="release_btn"
  21. type="primary"
  22. >发布</el-button>
  23. <el-button round type="primary">关闭</el-button>
  24. </el-col>
  25. </el-row>
  26. <!-- 第一步设置时间 -->
  27. <el-row class="in_release_item">
  28. <el-col class="step_1">第一步设置时间</el-col>
  29. <el-col class="step_form">
  30. <el-form-item
  31. label="发布时间"
  32. prop="date"
  33. :rules="[
  34. { required: true, message: '请选择发布时间', trigger: 'change' }
  35. ]"
  36. label-width="100px"
  37. >
  38. <el-date-picker
  39. v-if="publishType === 0"
  40. v-model="form.date"
  41. type="date"
  42. placeholder="选择日期"
  43. />
  44. <el-date-picker
  45. v-else
  46. v-model="form.date"
  47. type="daterange"
  48. range-separator="至"
  49. start-placeholder="开始日期"
  50. end-placeholder="结束日期"
  51. />
  52. </el-form-item>
  53. <el-form-item
  54. v-if="publishType === 1"
  55. label="设置周期"
  56. prop="timePeriod"
  57. :rules="[
  58. { required: true, message: '请设置周期:', trigger: 'change' },
  59. ]"
  60. :class="['set_weekly',{'no_margin': form.timePeriod === '每周'}]"
  61. label-width="100px"
  62. >
  63. <el-radio-group v-model="form.timePeriod" @change="clearCheckbox()">
  64. <el-radio label="每天" value="everyday" />
  65. <el-radio label="每周" value="weekly" />
  66. </el-radio-group>
  67. </el-form-item>
  68. <el-form-item
  69. v-if="form.timePeriod === '每周'"
  70. :class="{'weekly_margin': form.timePeriod === '每周'}"
  71. prop="onweek"
  72. :rules="[
  73. { required: true, message: '请选择每周开机时间', trigger: 'change' },
  74. ]"
  75. >
  76. <el-checkbox-group v-model="form.onweek">
  77. <el-checkbox label="周一" name="onweek" />
  78. <el-checkbox label="周二" name="onweek" />
  79. <el-checkbox label="周三" name="onweek" />
  80. <el-checkbox label="周四" name="onweek" />
  81. <el-checkbox label="周五" name="onweek" />
  82. <el-checkbox label="周六" name="onweek" />
  83. <el-checkbox label="周日" name="onweek" />
  84. </el-checkbox-group>
  85. </el-form-item>
  86. <!-- :rules="[
  87. { required: true, message: '请选择是否置顶', trigger: 'change' }
  88. ]" -->
  89. <el-form-item
  90. label="是否置顶"
  91. prop="isTop"
  92. label-width="100px"
  93. >
  94. <el-radio v-model="form.isTop" label="1">置顶</el-radio>
  95. </el-form-item>
  96. </el-col>
  97. </el-row>
  98. <!-- 第二步选择内容 -->
  99. <el-row class="in_release_item">
  100. <el-col class="step_1">第二步选择内容</el-col>
  101. <el-col class="step_form">
  102. <div class="step_select">
  103. <div>已选内容 0</div>
  104. <div>内容总时长0.00s</div>
  105. <div>添加BGM<el-button class="step_select_audio" type="primary" round @click="selectAudioCont">选择文件</el-button></div>
  106. </div>
  107. <div class="step_select_list">
  108. <div class="step_upload" @click="selectContVisible = true"></div>
  109. <draggable
  110. v-model="listSelectedData"
  111. class="drag_list"
  112. @end="dragEnd"
  113. >
  114. <div
  115. v-for="(item, index) in listSelectedData"
  116. :key="index"
  117. :class="['material_item', 'item_cont']"
  118. @click="selectedItem(item.id,item)"
  119. >
  120. <img v-if="item.coverImg" :src="item.coverImg" alt />
  121. <div v-if="item.type == 'audio'" class="radio_img"></div>
  122. <div class="item_format">
  123. <span class="item_type">{{ item.type }}</span>
  124. <span v-if="item.type !== 'JPG'" class="item_time">03:00</span>
  125. </div>
  126. <div class="file_name">{{ item.name }}</div>
  127. <div v-if="contentIds.includes(item.id)" class="select_handle">
  128. <div class="select_delt" @click.stop="selectDelt(item.id,index)">
  129. <svg class="font-icon icon1" aria-hidden="true">
  130. <use xlink:href="#icon-guanbi2" />
  131. </svg>
  132. </div>
  133. <div class="select_edit" @click.stop="selectEdit()">
  134. <svg class="font-icon icon1" aria-hidden="true">
  135. <use xlink:href="#icon-bianji" />
  136. </svg>
  137. </div>
  138. </div>
  139. </div>
  140. </draggable>
  141. </div>
  142. </el-col>
  143. </el-row>
  144. <!-- 第三步-选择设备 -->
  145. <el-row class="in_release_item">
  146. <el-col class="step_1">第三步选择设备</el-col>
  147. <el-col class="step_form">
  148. <el-form-item
  149. label=""
  150. prop="deviceSelect"
  151. :rules="[
  152. { required: true, message: '请选择设备', trigger: 'change' },
  153. ]"
  154. >
  155. <el-radio-group v-model="form.deviceSelect">
  156. <el-radio label="all" value="all">所有设备</el-radio>
  157. <el-radio label="other" value="other">部分设备<i v-if="form.deviceSelect === 'other'" class="radio_tip" @click="addDeviceTag()">添加</i></el-radio>
  158. </el-radio-group>
  159. </el-form-item>
  160. <div v-if="form.deviceSelect === 'all'" class="select_all_tip">所有设备都将被发送</div>
  161. <div v-if="deviceTags.length > 0 && form.deviceSelect === 'other'" class="select_other">
  162. <el-row>
  163. <el-col :span="10" class="other_tip">以下设备都将被发送<span>总计{{ deviceTags.length }}个设备</span></el-col>
  164. <el-col :span="4">
  165. <el-button round class="delt_btn" @click="clearDevice()">清空</el-button>
  166. </el-col>
  167. </el-row>
  168. <el-tag
  169. v-for="tag in deviceTags"
  170. :key="tag"
  171. closable
  172. :disable-transitions="true"
  173. :hit="false"
  174. color="#cbe3ff"
  175. @close="deltTags(tag)"
  176. >
  177. {{ tag }}
  178. </el-tag>
  179. </div>
  180. </el-col>
  181. </el-row>
  182. </el-form>
  183. <!-- 第二步选择内容 - 选择素材 -->
  184. <div class="release_layer upload_layer">
  185. <el-dialog
  186. :close-on-click-modal="false"
  187. :show-close="false"
  188. :visible.sync="selectContVisible"
  189. width="1200px"
  190. >
  191. <div slot="title" class="layer_tab_title">
  192. <span :class="{'active': activeIndex === 0}" @click="tabAll(0)">素材库</span>
  193. <span :class="{'active': activeIndex === 1}" @click="tabAll(1)">主题库</span>
  194. </div>
  195. <!-- 素材库 -->
  196. <div v-if="activeIndex === 0">
  197. <ul class="tab_item">
  198. <li
  199. v-for="(item, index) in materialTabItem"
  200. :key="index"
  201. :class="{'active': activeItemIndex === index}"
  202. @click="tab(index)"
  203. >{{ item.name }}<span>{{ item.num }}</span>
  204. </li>
  205. </ul>
  206. <div class="material_list">
  207. <div
  208. v-for="(item, index) in listData"
  209. :key="index"
  210. :class="['material_item', 'item_cont',{ 'item_multi': uploadContentIds.includes(item.id) }]"
  211. >
  212. <img v-if="item.coverImg" :src="item.coverImg" alt />
  213. <div v-if="item.type == 'audio'" class="radio_img"></div>
  214. <div class="item_format">
  215. <span class="item_type">{{ item.type }}</span>
  216. <span v-if="item.type !== 'JPG'" class="item_time">03:00</span>
  217. </div>
  218. <div class="file_name">{{ item.name }}</div>
  219. <span v-if="isMultiSelected" class="checked_btn" @click="selectedListItem(item.id, item.type)"></span>
  220. </div>
  221. </div>
  222. </div>
  223. <!-- 主题库 -->
  224. <div v-if="activeIndex === 1" class="theme_cont">
  225. <!-- 主题库list -->
  226. <ThemeGalleryList
  227. ref="ThemeGalleryList"
  228. :is-multi-selected="isMultiSelected"
  229. :mulit-text="mulitText"
  230. :show-item-info="false"
  231. />
  232. </div>
  233. <div class="upload_list_right">
  234. <div class="mulit_btn" @click="multiSelectBtn">{{ mulitText }}</div>
  235. </div>
  236. <div slot="footer" class="dialog-footer">
  237. <el-button type="primary" round @click="submitForm('form')"> </el-button>
  238. <el-button round @click="cancelContSelect"> </el-button>
  239. </div>
  240. </el-dialog>
  241. </div>
  242. <!-- 编辑播放内容 -->
  243. <div class="upload_layer">
  244. <el-dialog
  245. title="请选择播放内容"
  246. :close-on-click-modal="false"
  247. :visible.sync="listEditVisible"
  248. >
  249. <div class="total_time">
  250. 内容总时长3m15s
  251. </div>
  252. <div
  253. v-for="(item, index) in selectedData"
  254. :key="index"
  255. class="edit_material"
  256. >
  257. <div class="edit_img">
  258. <img v-if="item.coverImg" :src="item.coverImg" alt />
  259. <div v-if="item.type == 'audio'" class="radio_img"></div>
  260. <span class="">{{ index+1 }}</span>
  261. </div>
  262. <div class="edit_cont">
  263. <div class="edit_cont_base">
  264. <p>{{ item.name }}</p>
  265. <span>{{ item.type }}</span>
  266. <span>{{ item.size }}</span>
  267. </div>
  268. <div v-if="item.type === 'JPG'" class="edit_cont_set">
  269. <div class="set_time">
  270. <span>展示时长</span>
  271. <el-input v-model="time" type="text" style="width: 66px" />
  272. <em></em>
  273. </div>
  274. <div class="set_animation">
  275. <span class="set_item">切换动效</span>
  276. <el-select v-model="animation" style="width:100px">
  277. <el-option label="无动画" value="0">无动画</el-option>
  278. <el-option label="动画1" value="1">动画1</el-option>
  279. <el-option label="动画2" value="2">动画2</el-option>
  280. </el-select>
  281. </div>
  282. <div class="set_time set_audio">
  283. <span>音频</span>
  284. <p class="audio_name">audio.mp3</p>
  285. <!-- 主题库音频文件不可选择 -->
  286. <el-button type="primary" round @click="selectAudioCont">选择文件</el-button>
  287. </div>
  288. </div>
  289. <div v-else class="edit_cont_other">内容时长{{ item.time }}</div>
  290. </div>
  291. </div>
  292. <div slot="footer" class="dialog-footer">
  293. <el-button type="primary" round @click="submitForm('form')"> </el-button>
  294. <el-button round @click="listEditVisible = false"> </el-button>
  295. </div>
  296. </el-dialog>
  297. </div>
  298. <!-- 素材库 - 音频选择 -->
  299. <div class="release_layer upload_layer">
  300. <el-dialog
  301. :close-on-click-modal="false"
  302. :show-close="false"
  303. :visible.sync="selectAudioVisible"
  304. width="1200px"
  305. >
  306. <div slot="title" class="layer_tab_title">
  307. <span class="active">素材库</span>
  308. </div>
  309. <div>
  310. <ul class="tab_item">
  311. <li>音频<span>3</span></li>
  312. </ul>
  313. <div class="material_list">
  314. <div
  315. v-for="(item, index) in listData"
  316. :key="index"
  317. :class="['material_item', 'item_cont',{ 'item_multi': audioChecked === index }]"
  318. >
  319. <img v-if="item.coverImg" :src="item.coverImg" alt />
  320. <div v-if="item.type == 'audio'" class="radio_img"></div>
  321. <div class="item_format">
  322. <span class="item_type">{{ item.type }}</span>
  323. <span v-if="item.type !== 'JPG'" class="item_time">03:00</span>
  324. </div>
  325. <div class="file_name">{{ item.name }}</div>
  326. <span v-if="isMultiSelected" class="checked_btn" @click="audioCheckedHandle(index)"></span>
  327. </div>
  328. </div>
  329. </div>
  330. <div class="upload_list_right">
  331. <div class="mulit_btn" @click="multiSelectBtn('audio')">{{ mulitText }}</div>
  332. </div>
  333. <div slot="footer" class="dialog-footer">
  334. <el-button type="primary" round> </el-button>
  335. <el-button round @click="cancelContSelect('audio')"> </el-button>
  336. </div>
  337. </el-dialog>
  338. </div>
  339. <!-- 添加发布的设备 -->
  340. <div class="add_device_layer">
  341. <el-dialog
  342. title="请选择设备"
  343. :close-on-click-modal="false"
  344. :visible.sync="selectDeviceVisible"
  345. width="400px"
  346. >
  347. <el-tag
  348. v-for="tag in deviceAllTags"
  349. :key="tag"
  350. :disable-transitions="true"
  351. :hit="false"
  352. color="#cbe3ff"
  353. class="all_tags"
  354. @click="tagHandle(tag)"
  355. >
  356. {{ tag }}
  357. </el-tag>
  358. </el-dialog>
  359. </div>
  360. </div>
  361. </template>
  362. <script>
  363. import draggable from 'vuedraggable'
  364. import ThemeGalleryList from '../components/ThemeGalleryList.vue'
  365. export default {
  366. name: 'ImmediateRelease',
  367. components: {
  368. draggable,
  369. ThemeGalleryList
  370. },
  371. data() {
  372. return {
  373. publishType: 0,
  374. time: 15,
  375. audio_name: 'audio.mp3',
  376. animation: null,
  377. selectDeviceVisible: false,
  378. listEditVisible: false,
  379. selectContVisible: false,
  380. activeIndex: 0,
  381. activeItemIndex: 0,
  382. selectAudioVisible: false,
  383. audioChecked: null,
  384. deviceAllTags: ['GCXR1', 'GCXR2', 'GCXR3', 'GCXR4', 'GCXR5'],
  385. deviceTags: [],
  386. mulitText: '多选',
  387. isMultiSelected: false,
  388. form: {
  389. name: '',
  390. date: null,
  391. isTop: null,
  392. deviceSelect: '',
  393. timePeriod: null,
  394. onweek: []
  395. },
  396. listData: [
  397. {
  398. id: '1',
  399. name: '1',
  400. type: 'JPG',
  401. size: '12kb',
  402. coverImg: require('@/assets/images/background.jpg'),
  403. time: ''
  404. },
  405. {
  406. id: '2',
  407. name: '2',
  408. type: 'JPG',
  409. size: '12kb',
  410. coverImg: require('@/assets/images/background.jpg'),
  411. time: ''
  412. },
  413. {
  414. id: '3',
  415. name: '4',
  416. type: 'VEDIO',
  417. size: '12kb',
  418. coverImg: require('@/assets/images/background.jpg'),
  419. time: '03:00'
  420. },
  421. {
  422. id: '4',
  423. name: '4',
  424. type: 'audio',
  425. size: '12kb',
  426. coverImg: '',
  427. time: '01:20'
  428. }
  429. ],
  430. listSelectedData: [
  431. {
  432. id: '1',
  433. name: '1',
  434. type: 'JPG',
  435. size: '12kb',
  436. coverImg: require('@/assets/images/background.jpg'),
  437. time: ''
  438. },
  439. {
  440. id: '2',
  441. name: '2',
  442. type: 'JPG',
  443. size: '12kb',
  444. coverImg: require('@/assets/images/background.jpg'),
  445. time: ''
  446. },
  447. {
  448. id: '3',
  449. name: '4',
  450. type: 'VEDIO',
  451. size: '12kb',
  452. coverImg: require('@/assets/images/background.jpg'),
  453. time: '03:00'
  454. },
  455. {
  456. id: '4',
  457. name: '4',
  458. type: 'audio',
  459. size: '12kb',
  460. coverImg: '',
  461. time: '01:20'
  462. }
  463. ],
  464. contentIds: [],
  465. uploadContentIds: [],
  466. selectedData: [], // 选择内容 - 选择的item
  467. materialTabItem: [
  468. {
  469. key: 1,
  470. name: '全部',
  471. num: '3'
  472. },
  473. {
  474. key: 2,
  475. name: '图片',
  476. num: '1'
  477. },
  478. {
  479. key: 3,
  480. name: '视频',
  481. num: '1'
  482. },
  483. {
  484. key: 4,
  485. name: '音频',
  486. num: '1'
  487. }
  488. ]
  489. }
  490. },
  491. computed: {
  492. changePlaceholder() {
  493. return this.publishType === 0 ? '即时发布 2022-01-01' : '定时发布 2022-01-01'
  494. }
  495. },
  496. mounted() {
  497. console.log(this.$route.query.tag)
  498. if (this.$route.path === '/release') {
  499. this.materialTabItem.pop()
  500. }
  501. if (this.$route.query.tag) {
  502. this.publishType = this.$route.query.tag
  503. }
  504. console.log(this.$router.options.routes)
  505. console.log(this.$route.path)
  506. },
  507. methods: {
  508. selectEdit() {
  509. this.listEditVisible = true
  510. // console.log(this.selectedData)
  511. },
  512. dragEnd() {
  513. // console.log(this.listData)
  514. // console.log(this.selectedData)
  515. },
  516. selectDelt(id, i) {
  517. const index = this.contentIds.indexOf(id)
  518. this.contentIds.splice(index, 1)
  519. this.selectedData.splice(index, 1)
  520. this.listSelectedData.splice(i, 1)
  521. },
  522. selectedItem(id, item) {
  523. const arr = this.contentIds
  524. if (arr.includes(id)) {
  525. const index = arr.indexOf(id)
  526. if (index > -1) {
  527. arr.splice(index, 1)
  528. this.selectedData.splice(index, 1)
  529. }
  530. } else {
  531. this.contentIds.push(id)
  532. this.selectedData.push(item)
  533. }
  534. },
  535. // 多选btn
  536. multiSelectBtn(type) {
  537. this.isMultiSelected = !this.isMultiSelected
  538. if (this.isMultiSelected) {
  539. this.mulitText = '取消'
  540. } else {
  541. if (type === 'audio') {
  542. this.mulitText = '选择'
  543. this.audioChecked = null
  544. } else {
  545. this.mulitText = '多选'
  546. this.uploadContentIds = []
  547. }
  548. }
  549. },
  550. // 多选选中
  551. selectedListItem(id) {
  552. const arr = this.uploadContentIds
  553. if (arr.includes(id)) {
  554. const index = arr.indexOf(id)
  555. if (index > -1) {
  556. arr.splice(index, 1)
  557. }
  558. } else {
  559. this.uploadContentIds.push(id)
  560. }
  561. },
  562. // 设备选择
  563. addDeviceTag() {
  564. this.selectDeviceVisible = true
  565. },
  566. tagHandle(tag) {
  567. console.log(tag)
  568. this.deviceTags.push(tag)
  569. },
  570. // 删除已选择的设备
  571. deltTags(tag) {
  572. this.deviceTags.splice(this.deviceTags.indexOf(tag), 1)
  573. console.log(this.deviceTags)
  574. },
  575. // 清空已选择的设备
  576. clearDevice() {
  577. this.deviceTags = []
  578. },
  579. // 选择内容-素材库/主题库 tab
  580. tabAll(index) {
  581. this.activeIndex = index
  582. this.activeItemIndex = 0
  583. this.isMultiSelected = false
  584. this.mulitText = '多选'
  585. this.uploadContentIds = []
  586. },
  587. tab(index) {
  588. this.activeItemIndex = index
  589. },
  590. // 时间设置-切换到每天时
  591. clearCheckbox() {
  592. if (this.form.timePeriod === '每天') {
  593. this.form.onweek = []
  594. }
  595. },
  596. // 选择音频
  597. selectAudioCont() {
  598. this.isMultiSelected = false
  599. this.mulitText = '选择'
  600. this.selectAudioVisible = true
  601. },
  602. // 音频选中-单选
  603. audioCheckedHandle(index) {
  604. this.audioChecked = index
  605. console.log(this.audioChecked)
  606. },
  607. // 素材选择 - 取消按钮
  608. cancelContSelect(type) {
  609. this.isMultiSelected = false
  610. if (type === 'audio') {
  611. this.selectAudioVisible = false
  612. this.mulitText = '选择'
  613. this.audioChecked = null
  614. } else {
  615. this.selectContVisible = false
  616. this.mulitText = '多选'
  617. this.uploadContentIds = []
  618. }
  619. }
  620. }
  621. }
  622. </script>
  623. <style lang="scss" scoped>
  624. .app-container {
  625. background: none;
  626. padding: 0;
  627. }
  628. .in_release_item {
  629. padding: 16px 24px;
  630. margin-bottom: 10px;
  631. line-height: 34px;
  632. background: #fff;
  633. border-radius: 6px;
  634. .item_title {
  635. font-size: 16px;
  636. font-weight: bold;
  637. color: #3a8aeb;
  638. }
  639. .input_wrap {
  640. display: flex;
  641. width: 282px;
  642. height: 34px;
  643. padding: 0 24px;
  644. font-size: 14px;
  645. background: #f5f6fa;
  646. line-height: 34px;
  647. border-radius: 34px;
  648. .input_label {
  649. &::after {
  650. content: "|";
  651. padding-left: 8px;
  652. color: #ccc;
  653. }
  654. }
  655. .input_name {
  656. width: 194px;
  657. ::v-deep .el-input__inner {
  658. border: none;
  659. background: #f5f6fa;
  660. }
  661. }
  662. }
  663. .release_right {
  664. text-align: right;
  665. .el-button {
  666. font-size: 14px;
  667. padding: 8px 24px;
  668. border: none !important;
  669. }
  670. .release_btn {
  671. color: #fff;
  672. background: linear-gradient(to right, #fc8c6f, #fa544e) !important;
  673. }
  674. }
  675. }
  676. .step_1{
  677. font-size: 16px;
  678. line-height: 54px;
  679. border-bottom: 1px solid #eee;
  680. }
  681. .set_weekly {
  682. ::v-deep .el-form-item__label{
  683. line-height: 40px;
  684. }
  685. }
  686. .no_margin {
  687. margin: 0;
  688. }
  689. .weekly_margin{
  690. margin: 0 0 6px 100px;
  691. ::v-deep .el-form-item__error{
  692. top: 70%;
  693. }
  694. }
  695. .step_select{
  696. display: flex;
  697. font-size: 14px;
  698. margin-bottom: 20px;
  699. div{
  700. margin-right: 30px;
  701. }
  702. .step_select_audio{
  703. margin-left: 5px;
  704. padding: 5px;
  705. }
  706. }
  707. .step_select_list{
  708. display: flex;
  709. .step_upload{
  710. width: 164px;
  711. height: 172px;
  712. margin-right: 16px;
  713. border: 1px dashed #dcdde3;
  714. background: url(~@/assets/images/t-sc.png) #f2f7ff no-repeat center center;
  715. background-size: 36px 29px;
  716. border-radius: 6px;
  717. }
  718. }
  719. .material_item{
  720. position: relative;
  721. .select_delt{
  722. position: absolute;
  723. top: 12px;
  724. right: 12px;
  725. .font-icon{
  726. width: 19px;
  727. height: 19px;
  728. }
  729. }
  730. .select_edit{
  731. position: absolute;
  732. bottom: 0;
  733. left: 0;
  734. width: 100%;
  735. height: 44px;
  736. background: rgba(0,0,0,.5);
  737. text-align: center;
  738. .font-icon{
  739. width: 16px;
  740. height: 17px;
  741. margin-top: 12px;
  742. }
  743. }
  744. }
  745. .step_form{
  746. padding-top: 30px;
  747. .select_all_tip{
  748. margin: -20px 0 0 0;
  749. }
  750. .select_other{
  751. margin: -20px 0 0 0;
  752. }
  753. }
  754. .drag_list{
  755. display: flex;
  756. flex-wrap: wrap;
  757. }
  758. .upload_return{
  759. color: #8ebcfe;
  760. }
  761. .total_time{
  762. position: absolute;
  763. top: 72px;
  764. right: 24px;
  765. font-size: 14px;
  766. color: #000;
  767. }
  768. .edit_material{
  769. display: flex;
  770. padding: 12px 0;
  771. border-bottom: 1px solid #f2f6fd;
  772. &:nth-last-child(2){
  773. border-bottom: none;
  774. }
  775. .edit_img{
  776. position: relative;
  777. width: 58px;
  778. height: 77px;
  779. border-radius: 4px;
  780. overflow: hidden;
  781. img{
  782. display: block;
  783. width: 100%;
  784. height: 100%;
  785. }
  786. .radio_img {
  787. width: 58px;
  788. height: 77px;
  789. background: url(~@/assets/images/t-yp.png) no-repeat #b3e8fa center;
  790. background-size: 40px 40px;
  791. }
  792. span{
  793. position: absolute;
  794. top: -1px;
  795. left: -1px;
  796. display: block;
  797. width: 20px;
  798. height: 14px;
  799. font-size: 12px;
  800. text-align: center;
  801. color: #fff;
  802. line-height: 14px;
  803. }
  804. }
  805. &:nth-child(odd){
  806. .edit_img{
  807. span{
  808. background: url(~@/assets/images/num_bg2.png) no-repeat;
  809. background-size: 20px 14px;
  810. }
  811. }
  812. }
  813. &:nth-child(even){
  814. .edit_img{
  815. span{
  816. background: url(~@/assets/images/num_bg1.png) no-repeat;
  817. background-size: 20px 14px;
  818. }
  819. }
  820. }
  821. .edit_cont{
  822. display: flex;
  823. flex-direction: column ;
  824. justify-content: space-between;
  825. flex: 1;
  826. padding: 10px 0 8px 0;
  827. font-size: 14px;
  828. margin-left: 25px;
  829. .edit_cont_base{
  830. display: flex;
  831. p{
  832. margin-right: 14px;
  833. color: #000;
  834. }
  835. span{
  836. display: inline-block;
  837. padding: 0 5px;
  838. margin-right: 8px;
  839. font-size: 12px;
  840. line-height: 16px;
  841. color: #3a8aeb;
  842. background: #cde4ff;
  843. border-radius: 2px;
  844. }
  845. }
  846. .edit_cont_set{
  847. display: flex;
  848. font-size: 12px;
  849. color: #666;
  850. line-height: 26px;
  851. .set_time{
  852. display: flex;
  853. margin-right: 30px;
  854. span{
  855. margin-right: 8px;
  856. }
  857. em{
  858. display: block;
  859. margin-left: 8px;
  860. font-style: normal;
  861. }
  862. }
  863. .set_animation{
  864. display: flex;
  865. margin-right: 30px;
  866. span.set_item{
  867. margin-right: 8px;
  868. }
  869. }
  870. .set_audio{
  871. .audio_name{
  872. margin-right: 10px;
  873. }
  874. ::v-deep .el-button--small{
  875. padding: 0 15px;
  876. border: none;
  877. }
  878. }
  879. ::v-deep .el-input__inner{
  880. text-align: center;
  881. height: 27px;
  882. line-height: 27px;
  883. }
  884. ::v-deep .el-input__icon{
  885. line-height: 27px;
  886. }
  887. }
  888. .edit_cont_other{
  889. line-height: 27px;
  890. font-size: 12px;
  891. color: #666;
  892. }
  893. }
  894. }
  895. .release_layer{
  896. ::v-deep .el-dialog__header{
  897. padding: 0;
  898. height: 60px;
  899. }
  900. .layer_tab_title{
  901. display: flex;
  902. span{
  903. position: relative;
  904. display: block;
  905. margin-right: 32px;
  906. line-height: 60px;
  907. font-size: 18px;
  908. color: #666;
  909. cursor: pointer;
  910. &.active{
  911. color: #333;
  912. }
  913. &.active::after{
  914. content: "";
  915. position: absolute;
  916. left: 0;
  917. bottom: 0;
  918. width: 100%;
  919. height: 3px;
  920. background: #3a8aeb;
  921. }
  922. }
  923. }
  924. .tab_item{
  925. display: flex;
  926. font-size: 14px;
  927. color: #666;
  928. margin: -14px 0 16px 0;
  929. li{
  930. margin-right: 30px;
  931. cursor: pointer;
  932. span{
  933. display: inline-block;
  934. margin-left: 4px;
  935. }
  936. &.active{
  937. color: #3a8aeb;
  938. }
  939. }
  940. }
  941. .material_list{
  942. display: flex;
  943. flex-wrap: wrap;
  944. .item_cont{
  945. margin: 0 24px 20px 0;
  946. }
  947. }
  948. }
  949. .theme_cont{
  950. ::v-deep .el-tabs__header {
  951. padding: 0;
  952. margin-bottom: 0;
  953. }
  954. }
  955. .release_layer {
  956. ::v-deep .el-tabs{
  957. margin: -26px 0 8px 0;
  958. }
  959. ::v-deep .el-tabs__nav-wrap::after{
  960. display: none;
  961. }
  962. ::v-deep .el-tabs__active-bar{
  963. display: none;
  964. }
  965. }
  966. </style>