Browse Source

菜单管理 添加icon

master
qushutong 6 years ago
parent
commit
2b2b73968d
  1. 79
      src/views/modules/sys/app-menu-add-or-update.vue
  2. 13
      src/views/modules/sys/app-menu.vue
  3. 60
      src/views/modules/sys/appmenutemplate-add-or-update.vue
  4. 10
      src/views/modules/sys/appmenutemplate.vue

79
src/views/modules/sys/app-menu-add-or-update.vue

@ -69,32 +69,20 @@
:label="$t('menu.sort')"></el-input-number>
</el-form-item>
<el-form-item v-if="dataForm.type === 0"
prop="icon"
:label="$t('menu.icon')"
class="icon-list">
<el-popover v-model="iconListVisible"
ref="iconListPopover"
placement="bottom-start"
trigger="click"
popper-class="mod-sys__menu-icon-popover">
<div class="mod-sys__menu-icon-inner">
<div class="mod-sys__menu-icon-list">
<el-button v-for="(item, index) in iconList"
:key="index"
@click="iconListCurrentChangeHandle(item)"
:class="{ 'is-active': dataForm.icon === item }">
<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>
label="菜单图标"
v-loading="loading"
prop="icon">
<el-upload class="avatar-uploader"
:action="uploadUrl"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload">
<img v-if="dataForm.icon"
:src="dataForm.icon"
class="avatar">
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item label="子菜单模板"
prop="templateId">
@ -160,6 +148,7 @@
</template>
<script>
import Cookies from 'js-cookie'
import debounce from 'lodash/debounce'
import { getIconList } from '@/utils'
export default {
@ -184,7 +173,9 @@ export default {
icon: '',
menuCode: '',
templateId: ''
}
},
uploadUrl: '',
loading: false
}
},
computed: {
@ -207,6 +198,7 @@ export default {
methods: {
init () {
this.visible = true
this.uploadUrl = `${window.SITE_CONFIG['apiURL']}/oss/file/upload?token=${Cookies.get('token')}`
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
this.iconList = getIconList()
@ -303,7 +295,15 @@ export default {
})
}).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>
@ -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>

13
src/views/modules/sys/app-menu.vue

@ -20,14 +20,13 @@
header-align="center"
width="150"></table-tree-column>
<el-table-column prop="icon"
:label="$t('menu.icon')"
label="菜单图标"
header-align="center"
align="center">
<template slot-scope="scope">
<svg class="icon-svg"
aria-hidden="true">
<use :xlink:href="`#${scope.row.icon}`"></use>
</svg>
<img :src="scope.row.icon"
width="40"
height="40" />
</template>
</el-table-column>
<el-table-column prop="type"
@ -46,7 +45,7 @@
:label="$t('menu.sort')"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="url"
<!-- <el-table-column prop="url"
:label="$t('menu.url')"
header-align="center"
align="center"
@ -57,7 +56,7 @@
header-align="center"
align="center"
width="150"
:show-overflow-tooltip="true"></el-table-column>
:show-overflow-tooltip="true"></el-table-column> -->
<el-table-column :label="$t('handle')"
fixed="right"
header-align="center"

60
src/views/modules/sys/appmenutemplate-add-or-update.vue

@ -42,21 +42,6 @@
<el-input v-model="dataForm.lableColor"
placeholder="标签颜色"></el-input>
</el-form-item>
<el-form-item label="菜单图标"
v-loading="loading"
prop="icon">
<el-upload class="avatar-uploader"
:action="uploadUrl"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload">
<img v-if="dataForm.icon"
:src="dataForm.icon"
class="avatar">
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item label="模板编码"
prop="templateCode">
<el-input v-model="dataForm.templateCode"
@ -77,7 +62,6 @@
</template>
<script>
import Cookies from 'js-cookie'
import debounce from 'lodash/debounce'
export default {
data () {
@ -90,7 +74,6 @@ export default {
startColor: '',
endColor: '',
lableColor: '',
icon: '',
templateCode: '',
templateName: '',
revision: '',
@ -100,9 +83,7 @@ export default {
updatedTime: ''
},
gradationFlagOptions: [{ id: '1', name: '是' }, { id: '0', name: '否' }],
categoryVisible: true,
loading: false,
uploadUrl: ''
categoryVisible: true
}
},
computed: {
@ -123,9 +104,6 @@ export default {
lableColor: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
icon: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
templateCode: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
@ -167,7 +145,6 @@ export default {
if (this.dataForm.id) {
this.getInfo()
}
this.uploadUrl = `${window.SITE_CONFIG['apiURL']}/oss/file/upload?token=${Cookies.get('token')}`
})
},
//
@ -203,40 +180,7 @@ export default {
})
}).catch(() => { })
})
}, 1000, { 'leading': true, 'trailing': false }),
//
handleAvatarSuccess (res, file) {
this.loading = false
this.dataForm.icon = res.data.url
},
beforeAvatarUpload (file) {
this.loading = true
}
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>
<style>
.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>

10
src/views/modules/sys/appmenutemplate.vue

@ -54,16 +54,6 @@
label="标签颜色"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="icon"
label="菜单图标"
header-align="center"
align="center">
<template slot-scope="scope">
<img :src="scope.row.icon"
width="40"
height="40" />
</template>
</el-table-column>
<el-table-column prop="templateCode"
label="模板编码"
header-align="center"

Loading…
Cancel
Save