8 changed files with 473 additions and 283 deletions
			
			
		- 
					45src/assets/styles/adminIndex.scss
- 
					11src/router/routers.js
- 
					94src/views/ThemeGallery/index.vue
- 
					157src/views/components/ThemeGalleryList.vue
- 
					80src/views/dashboard/HomeThemeGallery.vue
- 
					206src/views/dashboard/ThemeGallery.vue
- 
					6src/views/home.vue
- 
					133src/views/immediateRelease/index.vue
| @ -0,0 +1,94 @@ | |||||
|  | <template> | ||||
|  |   <div class="theme"> | ||||
|  |     <!-- 右上角btn --> | ||||
|  |     <div class="home_publish_btn"> | ||||
|  |       <el-button round @click="publishHandle(0)">即时发布</el-button> | ||||
|  |       <el-button round type="primary" @click="publishHandle(1)">定时发布</el-button> | ||||
|  |       <el-button round class="publish_muilt_btn" @click="multiSelectBtn">{{ mulitText }}</el-button> | ||||
|  |     </div> | ||||
|  |     <!-- tab-btn --> | ||||
|  |     <!-- <el-tabs v-model="activeName" @tab-click="handleClick"> | ||||
|  |       <el-tab-pane label="为你推荐" name="1" /> | ||||
|  |       <el-tab-pane label="人工智能" name="2" /> | ||||
|  |       <el-tab-pane label="党建文化" name="3" /> | ||||
|  |       <el-tab-pane label="节日节气" name="4" /> | ||||
|  |       <el-tab-pane label="艺术鉴赏" name="5" /> | ||||
|  |       <el-tab-pane label="名人介绍" name="6" /> | ||||
|  |       <el-tab-pane label="摄影" name="7" /> | ||||
|  |       <el-tab-pane label="书法" name="8" /> | ||||
|  |     </el-tabs> --> | ||||
|  |     <!-- 主题库list --> | ||||
|  |     <ThemeGalleryList | ||||
|  |       ref="ThemeGalleryList" | ||||
|  |       :is-multi-selected="isMultiSelected" | ||||
|  |       :mulit-text="mulitText" | ||||
|  |       :show-item-info="showItemInfo" | ||||
|  |     /> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import ThemeGalleryList from '../components/ThemeGalleryList.vue' | ||||
|  | export default { | ||||
|  |   name: 'ThemeGallery', | ||||
|  |   components: { ThemeGalleryList }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       activeName: '1', | ||||
|  |       mulitText: '多选', | ||||
|  |       isMultiSelected: false, | ||||
|  |       showItemInfo: true | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   mounted() { | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     // 多选btn | ||||
|  |     multiSelectBtn() { | ||||
|  |       this.isMultiSelected = !this.isMultiSelected | ||||
|  |       if (this.isMultiSelected) { | ||||
|  |         this.mulitText = '取消' | ||||
|  |       } else { | ||||
|  |         this.mulitText = '多选' | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     publishHandle(index) { | ||||
|  |       this.$router.push( | ||||
|  |         { | ||||
|  |           path: '/release', query: { tag: index } | ||||
|  |         } | ||||
|  |       ) | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | .theme { | ||||
|  |   position: relative; | ||||
|  |   width: 100%; | ||||
|  |   background: #fff; | ||||
|  |   margin-top: 24px; | ||||
|  |   padding-top: 8px; | ||||
|  |   border-radius: 4px; | ||||
|  |   min-height: calc(100vh - 384px); | ||||
|  |   ::v-deep .el-tabs__header { | ||||
|  |     padding: 0 26px; | ||||
|  |   } | ||||
|  |   .el-tabs{ | ||||
|  |     margin-bottom: 0; | ||||
|  |   } | ||||
|  |   ::v-deep .el-tabs__item { | ||||
|  |     font-size: 16px; | ||||
|  |     height: 50px; | ||||
|  |     line-height: 50px; | ||||
|  |   } | ||||
|  |   ::v-deep .el-tabs__active-bar { | ||||
|  |     height: 3px; | ||||
|  |   } | ||||
|  |   .publish_muilt_btn{ | ||||
|  |     padding: 6px 20px; | ||||
|  |     border: 1px solid #3a8aeb; | ||||
|  |     color: #3a8aeb; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
| @ -0,0 +1,157 @@ | |||||
|  | <template> | ||||
|  |   <div> | ||||
|  |     <el-tabs v-model="activeName" @tab-click="handleClick"> | ||||
|  |       <el-tab-pane label="为你推荐" name="1" /> | ||||
|  |       <el-tab-pane label="人工智能" name="2" /> | ||||
|  |       <el-tab-pane label="党建文化" name="3" /> | ||||
|  |       <el-tab-pane label="节日节气" name="4" /> | ||||
|  |       <el-tab-pane label="艺术鉴赏" name="5" /> | ||||
|  |       <el-tab-pane label="名人介绍" name="6" /> | ||||
|  |       <el-tab-pane label="摄影" name="7" /> | ||||
|  |       <el-tab-pane label="书法" name="8" /> | ||||
|  |     </el-tabs> | ||||
|  |     <div class="theme_img"> | ||||
|  |       <div | ||||
|  |         v-for="(item, index) in listThemeData" | ||||
|  |         :key="index" | ||||
|  |         :class="['theme_item', { 'item_multi': selectedListIds.includes(item.id) }]" | ||||
|  |       > | ||||
|  |         <img | ||||
|  |           :src="item.coverImg" | ||||
|  |           alt | ||||
|  |         /> | ||||
|  |         <div v-if="showItemInfo" class="item_format"> | ||||
|  |           <span class="item_type">{{ item.type }}</span> | ||||
|  |           <span v-if="item.type !== 'JPG'" class="item_time">03:00</span> | ||||
|  |         </div> | ||||
|  |         <div v-if="showItemInfo" class="file_name">{{ item.name }}</div> | ||||
|  |         <span v-if="isMultiSelected" class="checked_btn" @click="selectedItem(item.id, item.type)"></span> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | <script> | ||||
|  | export default { | ||||
|  |   name: 'ThemeGalleryList', | ||||
|  |   props: { | ||||
|  |     isMultiSelected: { | ||||
|  |       type: Boolean, | ||||
|  |       required: true | ||||
|  |     }, | ||||
|  |     mulitText: { | ||||
|  |       type: String, | ||||
|  |       required: true | ||||
|  |     }, | ||||
|  |     showItemInfo: { | ||||
|  |       type: Boolean, | ||||
|  |       required: true | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       activeName: '1', | ||||
|  |       listThemeData: [ | ||||
|  |         { | ||||
|  |           id: '1', | ||||
|  |           name: '人工智能', | ||||
|  |           type: 'JPG', | ||||
|  |           coverImg: require('@/assets/images//home/theme_Img_03.png'), | ||||
|  |           time: '' | ||||
|  |         }, | ||||
|  |         { | ||||
|  |           id: '2', | ||||
|  |           name: '防控疫情小贴士', | ||||
|  |           type: 'vedio', | ||||
|  |           coverImg: require('@/assets/images/background.jpg'), | ||||
|  |           time: '03:00' | ||||
|  |         }, | ||||
|  |         { | ||||
|  |           id: '3', | ||||
|  |           name: '人工智能', | ||||
|  |           type: 'JPG', | ||||
|  |           coverImg: require('@/assets/images//home/theme_Img_03.png'), | ||||
|  |           time: '' | ||||
|  |         }, | ||||
|  |         { | ||||
|  |           id: '4', | ||||
|  |           name: '防控疫情小贴士', | ||||
|  |           type: 'vedio', | ||||
|  |           coverImg: require('@/assets/images/background.jpg'), | ||||
|  |           time: '03:00' | ||||
|  |         }, | ||||
|  |         { | ||||
|  |           id: '5', | ||||
|  |           name: '人工智能', | ||||
|  |           type: 'JPG', | ||||
|  |           coverImg: require('@/assets/images//home/theme_Img_03.png'), | ||||
|  |           time: '' | ||||
|  |         }, | ||||
|  |         { | ||||
|  |           id: '6', | ||||
|  |           name: '防控疫情小贴士', | ||||
|  |           type: 'vedio', | ||||
|  |           coverImg: require('@/assets/images/background.jpg'), | ||||
|  |           time: '03:00' | ||||
|  |         }, | ||||
|  |         { | ||||
|  |           id: '7', | ||||
|  |           name: '人工智能', | ||||
|  |           type: 'JPG', | ||||
|  |           coverImg: require('@/assets/images//home/theme_Img_03.png'), | ||||
|  |           time: '' | ||||
|  |         } | ||||
|  |       ], | ||||
|  |       selectedListIds: [] | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   watch: { | ||||
|  |     isMultiSelected(newName, oldName) { | ||||
|  |       if (newName === false) { | ||||
|  |         this.selectedListIds = [] | ||||
|  |       } | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   mounted() { | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     // tabClick | ||||
|  |     handleClick(tab, event) { | ||||
|  |       console.log(tab, event) | ||||
|  |     }, | ||||
|  |     // 多选选中 | ||||
|  |     selectedItem(id) { | ||||
|  |       const arr = this.selectedListIds | ||||
|  |       // includes()方法判断是否包含某一元素,返回true或false表示是否包含元素,对NaN一样有效 | ||||
|  |       if (arr.includes(id)) { | ||||
|  |         // 判断数组中是否有选中的id,如果有则去掉 | ||||
|  |         const index = arr.indexOf(id) | ||||
|  |         if (index > -1) { | ||||
|  |           arr.splice(index, 1) | ||||
|  |         } | ||||
|  |       } else { | ||||
|  |         this.selectedListIds.push(id) | ||||
|  |       } | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | .el-tabs{ | ||||
|  |   margin-bottom: 0; | ||||
|  | } | ||||
|  | .theme_img { | ||||
|  |   padding-left: 26px; | ||||
|  |   height: calc(100vh - 449px); | ||||
|  |   overflow-y: auto; | ||||
|  |   .file_name{ | ||||
|  |     position: absolute; | ||||
|  |     left: 0; | ||||
|  |     bottom: 0; | ||||
|  |     width: 100%; | ||||
|  |     height: 30px; | ||||
|  |     background: rgba(255,255,255,0.6); | ||||
|  |     line-height: 30px; | ||||
|  |   } | ||||
|  | } | ||||
|  | 
 | ||||
|  | </style> | ||||
| @ -0,0 +1,80 @@ | |||||
|  | <template> | ||||
|  |   <div class="theme"> | ||||
|  |     <!-- 右上角btn --> | ||||
|  |     <div class="home_publish_btn"> | ||||
|  |       <el-button round @click="publishHandle(0)">即时发布</el-button> | ||||
|  |       <el-button round type="primary" @click="publishHandle(1)">定时发布</el-button> | ||||
|  |       <el-button round class="publish_muilt_btn" @click="multiSelectBtn">{{ mulitText }}</el-button> | ||||
|  |     </div> | ||||
|  |     <!-- tab-btn --> | ||||
|  | 
 | ||||
|  |     <!-- 主题库list --> | ||||
|  |     <ThemeGalleryList | ||||
|  |       ref="ThemeGalleryList" | ||||
|  |       :is-multi-selected="isMultiSelected" | ||||
|  |       :mulit-text="mulitText" | ||||
|  |     /> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import ThemeGalleryList from '../components/ThemeGalleryList.vue' | ||||
|  | export default { | ||||
|  |   name: 'ThemeGallery', | ||||
|  |   components: { ThemeGalleryList }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       mulitText: '多选', | ||||
|  |       isMultiSelected: false | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   mounted() { | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     // 多选btn | ||||
|  |     multiSelectBtn() { | ||||
|  |       this.isMultiSelected = !this.isMultiSelected | ||||
|  |       if (this.isMultiSelected) { | ||||
|  |         this.mulitText = '取消' | ||||
|  |       } else { | ||||
|  |         this.mulitText = '多选' | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     publishHandle(index) { | ||||
|  |       this.$router.push( | ||||
|  |         { | ||||
|  |           path: '/release', query: { tag: index } | ||||
|  |         } | ||||
|  |       ) | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | .theme { | ||||
|  |   position: relative; | ||||
|  |   width: 100%; | ||||
|  |   background: #fff; | ||||
|  |   margin-top: 24px; | ||||
|  |   padding-top: 8px; | ||||
|  |   border-radius: 4px; | ||||
|  |   min-height: calc(100vh - 384px); | ||||
|  |   ::v-deep .el-tabs__header { | ||||
|  |     padding: 0 26px; | ||||
|  |   } | ||||
|  | 
 | ||||
|  |   ::v-deep .el-tabs__item { | ||||
|  |     font-size: 16px; | ||||
|  |     height: 50px; | ||||
|  |     line-height: 50px; | ||||
|  |   } | ||||
|  |   ::v-deep .el-tabs__active-bar { | ||||
|  |     height: 3px; | ||||
|  |   } | ||||
|  |   .publish_muilt_btn{ | ||||
|  |     padding: 6px 20px; | ||||
|  |     border: 1px solid #3a8aeb; | ||||
|  |     color: #3a8aeb; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
| @ -1,206 +0,0 @@ | |||||
| <template> |  | ||||
|   <div class="theme"> |  | ||||
|     <el-tabs v-model="activeName" @tab-click="handleClick"> |  | ||||
|       <el-tab-pane label="为你推荐" name="1"> |  | ||||
|         <div class="theme_img"> |  | ||||
|           <div |  | ||||
|             v-for="(item, index) in listData" |  | ||||
|             :key="index" |  | ||||
|             :class="['theme_item', { 'item_multi': contentIds.includes(item.id) }]" |  | ||||
|           > |  | ||||
|             <img |  | ||||
|               :src="item.coverImg" |  | ||||
|               alt |  | ||||
|             /> |  | ||||
|             <span v-if="isMultiSelected" class="checked_btn" @click="selectedItem(item.id, item.type)"></span> |  | ||||
|           </div> |  | ||||
|         </div> |  | ||||
|       </el-tab-pane> |  | ||||
|       <el-tab-pane label="人工智能" name="2">人工智能</el-tab-pane> |  | ||||
|       <el-tab-pane label="党建文化" name="3">党建文化</el-tab-pane> |  | ||||
|       <el-tab-pane label="节日节气" name="4">节日节气</el-tab-pane> |  | ||||
|       <el-tab-pane label="艺术鉴赏" name="5">艺术鉴赏</el-tab-pane> |  | ||||
|       <el-tab-pane label="名人介绍" name="6">名人介绍</el-tab-pane> |  | ||||
|       <el-tab-pane label="摄影" name="7">摄影</el-tab-pane> |  | ||||
|       <el-tab-pane label="书法" name="8">书法</el-tab-pane> |  | ||||
|     </el-tabs> |  | ||||
|     <div class="home_publish_btn"> |  | ||||
|       <el-button round @click="publishHandle(0)">即时发布</el-button> |  | ||||
|       <el-button round type="primary" @click="publishHandle(1)">定时发布</el-button> |  | ||||
|       <el-button round class="publish_muilt_btn" @click="multiSelectBtn">{{ mulitText }}</el-button> |  | ||||
|     </div> |  | ||||
|   </div> |  | ||||
| </template> |  | ||||
| 
 |  | ||||
| <script> |  | ||||
| export default { |  | ||||
|   name: 'ThemeGallery', |  | ||||
|   data() { |  | ||||
|     return { |  | ||||
|       activeName: '1', |  | ||||
|       mulitText: '多选', |  | ||||
|       isMultiSelected: false, |  | ||||
|       listData: [ |  | ||||
|         { |  | ||||
|           id: '1', |  | ||||
|           name: '人工智能', |  | ||||
|           type: 'JPG', |  | ||||
|           coverImg: require('@/assets/images//home/theme_Img_03.png'), |  | ||||
|           time: '' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '2', |  | ||||
|           name: '防控疫情小贴士', |  | ||||
|           type: 'vedio', |  | ||||
|           coverImg: require('@/assets/images/background.jpg'), |  | ||||
|           time: '03:00' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '3', |  | ||||
|           name: '人工智能', |  | ||||
|           type: 'JPG', |  | ||||
|           coverImg: require('@/assets/images//home/theme_Img_03.png'), |  | ||||
|           time: '' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '4', |  | ||||
|           name: '防控疫情小贴士', |  | ||||
|           type: 'vedio', |  | ||||
|           coverImg: require('@/assets/images/background.jpg'), |  | ||||
|           time: '03:00' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '5', |  | ||||
|           name: '人工智能', |  | ||||
|           type: 'JPG', |  | ||||
|           coverImg: require('@/assets/images//home/theme_Img_03.png'), |  | ||||
|           time: '' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '6', |  | ||||
|           name: '防控疫情小贴士', |  | ||||
|           type: 'vedio', |  | ||||
|           coverImg: require('@/assets/images/background.jpg'), |  | ||||
|           time: '03:00' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '7', |  | ||||
|           name: '人工智能', |  | ||||
|           type: 'JPG', |  | ||||
|           coverImg: require('@/assets/images//home/theme_Img_03.png'), |  | ||||
|           time: '' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '8', |  | ||||
|           name: '防控疫情小贴士', |  | ||||
|           type: 'vedio', |  | ||||
|           coverImg: require('@/assets/images/background.jpg'), |  | ||||
|           time: '03:00' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '9', |  | ||||
|           name: '人工智能', |  | ||||
|           type: 'JPG', |  | ||||
|           coverImg: require('@/assets/images//home/theme_Img_03.png'), |  | ||||
|           time: '' |  | ||||
|         }, |  | ||||
|         { |  | ||||
|           id: '10', |  | ||||
|           name: '防控疫情小贴士', |  | ||||
|           type: 'vedio', |  | ||||
|           coverImg: require('@/assets/images/background.jpg'), |  | ||||
|           time: '03:00' |  | ||||
|         } |  | ||||
|       ], |  | ||||
|       contentIds: [] |  | ||||
|     } |  | ||||
|   }, |  | ||||
|   mounted() { |  | ||||
|   }, |  | ||||
|   methods: { |  | ||||
|     handleClick(tab, event) { |  | ||||
|       console.log(tab, event) |  | ||||
|     }, |  | ||||
|     // 多选btn |  | ||||
|     multiSelectBtn() { |  | ||||
|       this.isMultiSelected = !this.isMultiSelected |  | ||||
|       if (this.isMultiSelected) { |  | ||||
|         this.mulitText = '取消' |  | ||||
|       } else { |  | ||||
|         this.mulitText = '多选' |  | ||||
|       } |  | ||||
|       // this.$refs.MaterialList.multiSelectList() |  | ||||
|     }, |  | ||||
|     // 多选选中 |  | ||||
|     selectedItem(id) { |  | ||||
|       const arr = this.contentIds |  | ||||
|       // includes()方法判断是否包含某一元素,返回true或false表示是否包含元素,对NaN一样有效 |  | ||||
|       if (arr.includes(id)) { |  | ||||
|         // 判断数组中是否有选中的id,如果有则去掉 |  | ||||
|         const index = arr.indexOf(id) |  | ||||
|         if (index > -1) { |  | ||||
|           arr.splice(index, 1) |  | ||||
|         } |  | ||||
|       } else { |  | ||||
|         this.contentIds.push(id) |  | ||||
|       } |  | ||||
|     }, |  | ||||
|     publishHandle(index) { |  | ||||
|       this.$router.push( |  | ||||
|         { |  | ||||
|           path: '/release', query: { tag: index } |  | ||||
|         } |  | ||||
|       ) |  | ||||
|     } |  | ||||
|   } |  | ||||
| } |  | ||||
| </script> |  | ||||
| <style lang="scss" scoped> |  | ||||
| .theme { |  | ||||
|   position: relative; |  | ||||
|   width: 100%; |  | ||||
|   background: #fff; |  | ||||
|   margin-top: 24px; |  | ||||
|   padding-top: 8px; |  | ||||
|   border-radius: 4px; |  | ||||
|   min-height: calc(100vh - 384px); |  | ||||
|   ::v-deep .el-tabs__header { |  | ||||
|     padding: 0 26px; |  | ||||
|   } |  | ||||
|   ::v-deep .el-tabs__item { |  | ||||
|     font-size: 16px; |  | ||||
|     height: 50px; |  | ||||
|     line-height: 50px; |  | ||||
|   } |  | ||||
|   ::v-deep .el-tabs__active-bar { |  | ||||
|     height: 3px; |  | ||||
|   } |  | ||||
| 
 |  | ||||
|   .theme_img { |  | ||||
|     display: flex; |  | ||||
|     flex-wrap: wrap; |  | ||||
|     padding-left: 26px; |  | ||||
|     height: calc(100vh - 449px); |  | ||||
|     overflow-y: auto; |  | ||||
|     .theme_item{ |  | ||||
|       position: relative; |  | ||||
|       width: 160px; |  | ||||
|       height: 284px; |  | ||||
|       border: 1px solid #f0f0f0; |  | ||||
|       border-radius: 4px; |  | ||||
|       margin: 0 24px 24px 0; |  | ||||
|       overflow: hidden; |  | ||||
|     } |  | ||||
|     img { |  | ||||
|       display: block; |  | ||||
|       width: 100%; |  | ||||
|       height: 100%; |  | ||||
|     } |  | ||||
|   } |  | ||||
|   .publish_muilt_btn{ |  | ||||
|     padding: 6px 20px; |  | ||||
|     border: 1px solid #3a8aeb; |  | ||||
|     color: #3a8aeb; |  | ||||
|   } |  | ||||
| } |  | ||||
| </style> |  | ||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue