导航配置
This commit is contained in:
		
							
								
								
									
										40
									
								
								packages/3.0.0/AppNavConfig/AppNavConfig.vue
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								packages/3.0.0/AppNavConfig/AppNavConfig.vue
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| <template> | ||||
|   <div class="AppShowProduce"> | ||||
|     <List | ||||
|       slot="content" | ||||
|       :instance="instance" | ||||
|       :dict="dict" | ||||
|       :permissions="permissions"> | ||||
|     </List> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import List from './components/List.vue' | ||||
|  | ||||
|   export default { | ||||
|     name: 'AppNavConfig', | ||||
|     label: '导航配置', | ||||
|  | ||||
|     components: { | ||||
|       List | ||||
|     }, | ||||
|  | ||||
|     props: { | ||||
|       instance: Function, | ||||
|       dict: Object, | ||||
|       permissions: Function | ||||
|     }, | ||||
|  | ||||
|     data () { | ||||
|       return { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .AppShowProduce { | ||||
|     height: 100%; | ||||
|   } | ||||
| </style> | ||||
							
								
								
									
										284
									
								
								packages/3.0.0/AppNavConfig/components/List.vue
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										284
									
								
								packages/3.0.0/AppNavConfig/components/List.vue
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,284 @@ | ||||
| <template> | ||||
|   <ai-list class="list"> | ||||
|     <ai-title slot="title" title="导航配置" isShowBottomBorder></ai-title> | ||||
|     <template slot="content"> | ||||
|       <ai-card title="首页功能"> | ||||
|         <template #right> | ||||
|           <el-button size="small" type="primary" @click="eidt">{{ isEdit ? '退出编辑' : '编辑' }}</el-button> | ||||
|           <el-button size="small" @click="save" v-if="isEdit">保存</el-button> | ||||
|         </template> | ||||
|         <div slot="content" class="item-wrapper"> | ||||
|           <div class="item" v-for="(item, i) in picked" :key="i"> | ||||
|             <img :src="item.pictureUrl"> | ||||
|             <i class="el-icon-remove icon" @click="removeChoose(i)" v-if="isEdit"></i> | ||||
|             <h2>{{ item.name }}</h2> | ||||
|           </div> | ||||
|           <ai-empty style="width: 100%" v-if="!picked.length"></ai-empty> | ||||
|         </div> | ||||
|       </ai-card> | ||||
|       <ai-card title="全部功能"> | ||||
|         <template #right> | ||||
|           <el-button size="small" type="primary" @click="isShowAdd = true">新增应用</el-button> | ||||
|           <el-button size="small" type="danger" @click="isRemove = !isRemove">{{ isRemove ? '取消删除' : '删除应用' }}</el-button> | ||||
|         </template> | ||||
|         <div class="all" slot="content"> | ||||
|           <div class="item-row" v-for="(group, index) in list" :key="index"> | ||||
|             <h2>{{ group.name }}</h2> | ||||
|             <div class="item-wrapper"> | ||||
|               <div class="item" v-for="(item, i) in group.list" :key="i"> | ||||
|                 <img :src="item.pictureUrl"> | ||||
|                 <i class="el-icon-error icon" @click="removeApp(item.id)" v-if="isRemove && item.type !== '0' && item.picked !== '1'"></i> | ||||
|                 <h2>{{ item.name }}</h2> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|       </ai-card> | ||||
|       <ai-dialog | ||||
|         :visible.sync="isShowAdd" | ||||
|         width="680px" | ||||
|         height="580px" | ||||
|         :title="id ? '添加专题' : '编辑专题'" | ||||
|         @close="onClose" | ||||
|         @onConfirm="onConfirm"> | ||||
|         <el-form ref="form" :model="form" label-width="110px" label-position="right"> | ||||
|           <div class="ai-form" :model="form" label-width="110px" label-position="right"> | ||||
|             <el-form-item label="应用名称" prop="name" style="width: 100%;" :rules="[{ required: true, message: '请输入应用名称', trigger: 'blur' }]"> | ||||
|               <el-input size="small" :maxlength="8" placeholder="请输入应用名称" v-model="form.name"></el-input> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="应用模块" style="width: 100%;" prop="menuType" :rules="[{ required: true, message: '请选择应用模块', trigger: 'change' }]"> | ||||
|               <ai-select | ||||
|                 v-model="form.menuType" | ||||
|                 :selectList="dict.getDict('homeConfigMenuType')" | ||||
|                 @change="onChange" | ||||
|                 laceholder="请选择应用模块"> | ||||
|               </ai-select> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="应用类型" style="width: 100%;" prop="type" :rules="[{ required: true, message: '请选择应用类型', trigger: 'change' }]"> | ||||
|               <ai-select | ||||
|                 v-model="form.type" | ||||
|                 :selectList="typeDict" | ||||
|                 @change="onChange" | ||||
|                 laceholder="请选择应用类型"> | ||||
|               </ai-select> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="小程序appid" prop="appId" style="width: 100%;" v-if="form.type === '1'" :rules="[{ required: true, message: '请输入小程序appid', trigger: 'blur' }]"> | ||||
|               <el-input size="small" placeholder="请输入小程序appid" v-model="form.appId"></el-input> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="链接" prop="url" style="width: 100%;" v-if="form.type === '2'" :rules="[{ required: true, message: '请输入链接', trigger: 'blur' }]"> | ||||
|               <el-input size="small" placeholder="请输入链接" v-model="form.url"></el-input> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="图标" prop="pictureUrl" style="width: 100%;" :rules="[{ required: true, message: '请上传图标 ', trigger: 'change' }]"> | ||||
|               <ai-uploader v-model="form.pictureUrl" :instance="instance" :limit="1"></ai-uploader> | ||||
|             </el-form-item> | ||||
|           </div> | ||||
|         </el-form> | ||||
|       </ai-dialog> | ||||
|     </template> | ||||
|   </ai-list> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   export default { | ||||
|     name: 'List', | ||||
|  | ||||
|     props: { | ||||
|       instance: Function, | ||||
|       dict: Object | ||||
|     }, | ||||
|  | ||||
|     data () { | ||||
|       return { | ||||
|         picked: [], | ||||
|         id: '', | ||||
|         isEdit: false, | ||||
|         isRemove: false, | ||||
|         form: { | ||||
|           type: '', | ||||
|           pictureUrl: [], | ||||
|           url: '', | ||||
|           name: '', | ||||
|           appId: '' | ||||
|         }, | ||||
|         typeDict: [{ | ||||
|           dictName: '外链小程序', | ||||
|           dictValue: '1' | ||||
|         }, { | ||||
|           dictName: '外链h5', | ||||
|           dictValue: '2' | ||||
|         }], | ||||
|         isShowAdd: false, | ||||
|         list: [] | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     created () { | ||||
|       this.dict.load('homeConfigMenuType').then(() => { | ||||
|         this.getList() | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     methods: { | ||||
|       getList () { | ||||
|         this.instance.post(`/app/appminihomeconfig/listAll`).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.picked = res.data.picked | ||||
|             this.list = Object.keys(res.data.all).map(item => { | ||||
|               return { | ||||
|                 name: this.dict.getLabel('homeConfigMenuType', item), | ||||
|                 list: res.data.all[item] | ||||
|               } | ||||
|             }) | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       eidt () { | ||||
|         if (this.isEdit) { | ||||
|           this.$confirm('确定退出编辑?').then(() => { | ||||
|             this.isEdit = false | ||||
|           }) | ||||
|  | ||||
|           return false | ||||
|         } | ||||
|         this.isEdit = !this.isEdit | ||||
|       }, | ||||
|  | ||||
|       removeChoose (index) { | ||||
|         this.picked.splice(index, 1) | ||||
|       }, | ||||
|  | ||||
|       save () { | ||||
|         this.instance.post(`/app/appminihomeconfig/updatePick?ids=${this.picked.map(v => v.id).join(',')}`).then(res => { | ||||
|           if (res.code === 0) { | ||||
|             this.$message.success('保存成功') | ||||
|  | ||||
|             this.getList() | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       onClose () { | ||||
|         this.form.type = '' | ||||
|         this.form.pictureUrl = [] | ||||
|         this.form.url = '' | ||||
|         this.form.name = '' | ||||
|         this.form.appId = '' | ||||
|       }, | ||||
|  | ||||
|       onChange () { | ||||
|         this.form.url = '' | ||||
|         this.form.appId = '' | ||||
|       }, | ||||
|  | ||||
|       onConfirm () { | ||||
|         this.$refs.form.validate((valid) => { | ||||
|           if (valid) { | ||||
|             this.instance.post(`/app/appminihomeconfig/addOrUpdate`, { | ||||
|               ...this.form, | ||||
|               id: this.id || '', | ||||
|               pictureUrl: this.form.pictureUrl[0].url | ||||
|             }).then(res => { | ||||
|               if (res.code === 0) { | ||||
|                 this.$message.success('添加成功') | ||||
|                 this.isShowAdd = false | ||||
|  | ||||
|                 this.getList() | ||||
|               } | ||||
|             }) | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       removeApp (id) { | ||||
|         this.$confirm('确定删除该数据?').then(() => { | ||||
|           this.instance.post(`/app/appminihomeconfig/delete?ids=${id}`).then(res => { | ||||
|             if (res.code == 0) { | ||||
|               this.$message.success('删除成功!') | ||||
|               this.isRemove = false | ||||
|               this.getList() | ||||
|             } | ||||
|           }) | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       remove (id) { | ||||
|         this.$confirm('确定删除该数据?').then(() => { | ||||
|           this.instance.post(`/app/appapplicationinfo/delete?ids=${id}`).then(res => { | ||||
|             if (res.code == 0) { | ||||
|               this.$message.success('删除成功!') | ||||
|               this.getList() | ||||
|             } | ||||
|           }) | ||||
|         }) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style scoped lang="scss"> | ||||
|   .list { | ||||
|     ::v-deep .ai-list__content { | ||||
|       padding: 0!important; | ||||
|  | ||||
|       .ai-list__content--right-wrapper { | ||||
|         background: transparent!important; | ||||
|         box-shadow: none!important; | ||||
|         margin: 0!important; | ||||
|         padding: 12px 0 12px!important; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .all { | ||||
|       .item-row { | ||||
|         display: flex; | ||||
|  | ||||
|         & > h2 { | ||||
|           margin-right: 40px; | ||||
|           font-weight: 500; | ||||
|           font-size: 16px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .item-wrapper { | ||||
|       display: flex; | ||||
|       flex-wrap: wrap; | ||||
|       flex: 1; | ||||
|       margin-bottom: 20px; | ||||
|  | ||||
|       .icon { | ||||
|         position: absolute; | ||||
|         top: 0; | ||||
|         right: 0; | ||||
|         z-index: 11; | ||||
|         font-size: 24px; | ||||
|         color: red; | ||||
|         transform: translate(50%, -20%); | ||||
|  | ||||
|         &:hover { | ||||
|           opacity: 0.6; | ||||
|           cursor: pointer; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .item { | ||||
|         position: relative; | ||||
|         margin: 0 16px 16px 0; | ||||
|         text-align: center; | ||||
|  | ||||
|         img { | ||||
|           width: 60px; | ||||
|           height: 60px; | ||||
|           border-radius: 50%; | ||||
|         } | ||||
|  | ||||
|         h2 { | ||||
|           font-weight: normal; | ||||
|           font-size: 14px; | ||||
|           color: #666; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
		Reference in New Issue
	
	Block a user