¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |