| 
						
						
							
								
							
						
						
					 | 
					@ -69,42 +69,30 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                         :label="$t('menu.sort')"></el-input-number> | 
					 | 
					 | 
					                         :label="$t('menu.sort')"></el-input-number> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      </el-form-item> | 
					 | 
					 | 
					      </el-form-item> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      <el-form-item v-if="dataForm.type === 0" | 
					 | 
					 | 
					      <el-form-item v-if="dataForm.type === 0" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    prop="icon" | 
					 | 
					 | 
					                    label="菜单图标" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    :label="$t('menu.icon')" | 
					 | 
					 | 
					                    v-loading="loading" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    class="icon-list"> | 
					 | 
					 | 
					                    prop="icon"> | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					        <el-popover v-model="iconListVisible" | 
					 | 
					 | 
					        <el-upload class="avatar-uploader" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    ref="iconListPopover" | 
					 | 
					 | 
					                   :action="uploadUrl" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    placement="bottom-start" | 
					 | 
					 | 
					                   :show-file-list="false" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    trigger="click" | 
					 | 
					 | 
					                   :on-success="handleAvatarSuccess" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    popper-class="mod-sys__menu-icon-popover"> | 
					 | 
					 | 
					                   :before-upload="beforeAvatarUpload"> | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          <div class="mod-sys__menu-icon-inner"> | 
					 | 
					 | 
					          <img v-if="dataForm.icon" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					            <div class="mod-sys__menu-icon-list"> | 
					 | 
					 | 
					               :src="dataForm.icon" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					              <el-button v-for="(item, index) in iconList" | 
					 | 
					 | 
					               class="avatar"> | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                         :key="index" | 
					 | 
					 | 
					          <i v-else | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                         @click="iconListCurrentChangeHandle(item)" | 
					 | 
					 | 
					             class="el-icon-plus avatar-uploader-icon"></i> | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                         :class="{ 'is-active': dataForm.icon === item }"> | 
					 | 
					 | 
					        </el-upload> | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					                <svg class="icon-svg" | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                     aria-hidden="true"> | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                  <use :xlink:href="`#${item}`"></use> | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                </svg> | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					              </el-button> | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            </div> | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          </div> | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        </el-popover> | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        <el-input v-model="dataForm.icon" | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                  v-popover:iconListPopover | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                  :readonly="true" | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                  :placeholder="$t('menu.icon')"></el-input> | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					      </el-form-item> | 
					 | 
					 | 
					      </el-form-item> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      <el-form-item label="子菜单模板" | 
					 | 
					 | 
					      <el-form-item label="子菜单模板" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					              prop="templateId"> | 
					 | 
					 | 
					                    prop="templateId"> | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        <el-select v-model="dataForm.templateId" | 
					 | 
					 | 
					        <el-select v-model="dataForm.templateId" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          clearable | 
					 | 
					 | 
					                   clearable | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          placeholder="子菜单模板"> | 
					 | 
					 | 
					                   placeholder="子菜单模板"> | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					          <el-option v-for="item in templates" | 
					 | 
					 | 
					          <el-option v-for="item in templates" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					            :key="item.id" | 
					 | 
					 | 
					                     :key="item.id" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					            :label="item.templateName" | 
					 | 
					 | 
					                     :label="item.templateName" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					            :value="item.id"> | 
					 | 
					 | 
					                     :value="item.id"> | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					          </el-option> | 
					 | 
					 | 
					          </el-option> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        </el-select> | 
					 | 
					 | 
					        </el-select> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      </el-form-item> | 
					 | 
					 | 
					      </el-form-item> | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -160,6 +148,7 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					</template> | 
					 | 
					 | 
					</template> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					<script> | 
					 | 
					 | 
					<script> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					import Cookies from 'js-cookie' | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import debounce from 'lodash/debounce' | 
					 | 
					 | 
					import debounce from 'lodash/debounce' | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import { getIconList } from '@/utils' | 
					 | 
					 | 
					import { getIconList } from '@/utils' | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					export default { | 
					 | 
					 | 
					export default { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -184,7 +173,9 @@ export default { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        icon: '', | 
					 | 
					 | 
					        icon: '', | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        menuCode: '', | 
					 | 
					 | 
					        menuCode: '', | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        templateId: '' | 
					 | 
					 | 
					        templateId: '' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      } | 
					 | 
					 | 
					      }, | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      uploadUrl: '', | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      loading: false | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  }, | 
					 | 
					 | 
					  }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  computed: { | 
					 | 
					 | 
					  computed: { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -207,6 +198,7 @@ export default { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  methods: { | 
					 | 
					 | 
					  methods: { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    init () { | 
					 | 
					 | 
					    init () { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      this.visible = true | 
					 | 
					 | 
					      this.visible = true | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.uploadUrl = `${window.SITE_CONFIG['apiURL']}/oss/file/upload?token=${Cookies.get('token')}` | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      this.$nextTick(() => { | 
					 | 
					 | 
					      this.$nextTick(() => { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        this.$refs['dataForm'].resetFields() | 
					 | 
					 | 
					        this.$refs['dataForm'].resetFields() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        this.iconList = getIconList() | 
					 | 
					 | 
					        this.iconList = getIconList() | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -303,7 +295,15 @@ export default { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          }) | 
					 | 
					 | 
					          }) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        }).catch(() => { }) | 
					 | 
					 | 
					        }).catch(() => { }) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      }) | 
					 | 
					 | 
					      }) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    }, 1000, { 'leading': true, 'trailing': false }) | 
					 | 
					 | 
					    }, 1000, { 'leading': true, 'trailing': false }), | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    // 上传图片 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    handleAvatarSuccess (res, file) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.loading = false | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.dataForm.icon = res.data.url | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    beforeAvatarUpload (file) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.loading = true | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  } | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					</script> | 
					 | 
					 | 
					</script> | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -349,5 +349,28 @@ export default { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      } | 
					 | 
					 | 
					      } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  } | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  .avatar-uploader .el-upload { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    border: 1px dashed #d9d9d9; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    border-radius: 6px; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    cursor: pointer; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    position: relative; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    overflow: hidden; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  .avatar-uploader .el-upload:hover { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    border-color: #409eff; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  .avatar-uploader-icon { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    font-size: 28px; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    color: #8c939d; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    width: 378px; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    height: 178px; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    line-height: 178px; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    text-align: center; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  .avatar { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    width: 300px; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    height: 178px; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    display: block; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					</style> | 
					 | 
					 | 
					</style> | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					
  |