| ¶Ô±ÈÐÂÎļþ | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <GlobalWindow | 
|---|
|  |  |  | class="handle-table-dialog" | 
|---|
|  |  |  | :title="title" | 
|---|
|  |  |  | :visible.sync="visible" | 
|---|
|  |  |  | :confirm-working="isWorking" | 
|---|
|  |  |  | @confirm="confirm" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <p class="tip" v-if="form.parent != null && form.id == null">为 <em>{{parentName}}</em> æ°å»ºåèå</p> | 
|---|
|  |  |  | <el-form :model="form" ref="form" :rules="rules"> | 
|---|
|  |  |  | <el-form-item label="ä¸çº§èå" prop="parentId"> | 
|---|
|  |  |  | <MenuSelect v-if="visible" v-model="form.parentId" placeholder="è¯·éæ©ä¸çº§èå" :exclude-id="excludeMenuId" clearable :inline="false"/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="èååç§°" prop="name" required> | 
|---|
|  |  |  | <el-input v-model="form.name" placeholder="请è¾å
¥èååç§°" v-trim maxlength="50"/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="访é®è·¯å¾" prop="path"> | 
|---|
|  |  |  | <el-input v-model="form.path" placeholder="请è¾å
¥è®¿é®è·¯å¾" v-trim maxlength="200"/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="徿 " prop="icon" class="form-item-icon"> | 
|---|
|  |  |  | <el-radio-group v-model="form.icon"> | 
|---|
|  |  |  | <el-radio :label="icon" v-for="icon in icons" :key="icon"> | 
|---|
|  |  |  | <i :class="{[icon]: true}"></i> | 
|---|
|  |  |  | </el-radio> | 
|---|
|  |  |  | </el-radio-group> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="夿³¨" prop="remark"> | 
|---|
|  |  |  | <el-input type="textarea" v-model="form.remark" placeholder="请è¾å
¥èå夿³¨" v-trim :rows="3" maxlength="500"/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | </el-form> | 
|---|
|  |  |  | </GlobalWindow> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script> | 
|---|
|  |  |  | import BaseOpera from '@/components/base/BaseOpera' | 
|---|
|  |  |  | import GlobalWindow from '@/components/common/GlobalWindow' | 
|---|
|  |  |  | import MenuSelect from './MenuSelect' | 
|---|
|  |  |  | import icons from '@/utils/icons' | 
|---|
|  |  |  | export default { | 
|---|
|  |  |  | name: 'OperaMenuWindow', | 
|---|
|  |  |  | extends: BaseOpera, | 
|---|
|  |  |  | components: { MenuSelect, GlobalWindow }, | 
|---|
|  |  |  | data () { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | icons, | 
|---|
|  |  |  | // ä¸çº§èååç§° | 
|---|
|  |  |  | parentName: '', | 
|---|
|  |  |  | // éæé¤éæ©çèåID | 
|---|
|  |  |  | excludeMenuId: null, | 
|---|
|  |  |  | // è¡¨åæ°æ® | 
|---|
|  |  |  | form: { | 
|---|
|  |  |  | id: null, | 
|---|
|  |  |  | parentId: null, | 
|---|
|  |  |  | name: '', | 
|---|
|  |  |  | path: '', | 
|---|
|  |  |  | icon: '', | 
|---|
|  |  |  | remark: '' | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // éªè¯è§å | 
|---|
|  |  |  | rules: { | 
|---|
|  |  |  | name: [ | 
|---|
|  |  |  | { required: true, message: '请è¾å
¥èååç§°' } | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * æå¼çªå£ | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param title: çªå£æ é¢ | 
|---|
|  |  |  | * @param target: è¡å¯¹è±¡ï¼ä»
ç¼è¾éè¯¥åæ°ï¼ | 
|---|
|  |  |  | * @param parent: æ°å»ºæ¶çä¸çº§èå | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | open (title, target, parent) { | 
|---|
|  |  |  | this.title = title | 
|---|
|  |  |  | this.visible = true | 
|---|
|  |  |  | // æ°å»ºï¼menu为空æ¶è¡¨ç¤ºæ°å»ºèå | 
|---|
|  |  |  | if (target == null) { | 
|---|
|  |  |  | this.excludeMenuId = null | 
|---|
|  |  |  | this.$nextTick(() => { | 
|---|
|  |  |  | this.$refs.form.resetFields() | 
|---|
|  |  |  | this.form.id = null | 
|---|
|  |  |  | this.form.parentId = parent == null ? null : parent.id | 
|---|
|  |  |  | this.parentName = parent == null ? null : parent.name | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // ç¼è¾ | 
|---|
|  |  |  | this.$nextTick(() => { | 
|---|
|  |  |  | this.excludeMenuId = target.id | 
|---|
|  |  |  | for (const key in this.form) { | 
|---|
|  |  |  | this.form[key] = target[key] | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | created () { | 
|---|
|  |  |  | this.config({ | 
|---|
|  |  |  | api: '/system/menu' | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style scoped lang="scss"> | 
|---|
|  |  |  | @import "@/assets/style/variables"; | 
|---|
|  |  |  | $icon-background-color: $primary-color; | 
|---|
|  |  |  | .global-window { | 
|---|
|  |  |  | .tip { | 
|---|
|  |  |  | margin-bottom: 12px; | 
|---|
|  |  |  | em { | 
|---|
|  |  |  | font-style: normal; | 
|---|
|  |  |  | color: $primary-color; | 
|---|
|  |  |  | font-weight: bold; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // å¾æ  | 
|---|
|  |  |  | /deep/ .form-item-icon { | 
|---|
|  |  |  | .el-form-item__content { | 
|---|
|  |  |  | height: 193px; | 
|---|
|  |  |  | overflow-y: auto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .el-radio-group { | 
|---|
|  |  |  | background: $icon-background-color; | 
|---|
|  |  |  | padding: 4px; | 
|---|
|  |  |  | .el-radio { | 
|---|
|  |  |  | margin-right: 0; | 
|---|
|  |  |  | color: #fff; | 
|---|
|  |  |  | padding: 6px; | 
|---|
|  |  |  | &.is-checked { | 
|---|
|  |  |  | background: $icon-background-color - 30; | 
|---|
|  |  |  | border-radius: 10px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .el-radio__input.is-checked + .el-radio__label { | 
|---|
|  |  |  | color: #fff; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .el-radio__input { | 
|---|
|  |  |  | display: none; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .el-radio__label { | 
|---|
|  |  |  | padding-left: 0; | 
|---|
|  |  |  | // element-ui徿  | 
|---|
|  |  |  | i { | 
|---|
|  |  |  | font-size: 30px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // èªå®ä¹å¾æ  | 
|---|
|  |  |  | [class^="eva-icon-"], [class*=" eva-icon-"] { | 
|---|
|  |  |  | width: 30px; | 
|---|
|  |  |  | height: 30px; | 
|---|
|  |  |  | background-size: 25px; | 
|---|
|  |  |  | vertical-align: bottom; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .el-radio--small { | 
|---|
|  |  |  | height: auto; | 
|---|
|  |  |  | padding: 8px; | 
|---|
|  |  |  | margin-left: 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|