提交 4e26a89f 编写于 作者: Mr.奇淼('s avatar Mr.奇淼(

Merge remote-tracking branch 'origin/gin-vue-admin_v2_dev' into gin-vue-admin_v2_dev

......@@ -61,10 +61,10 @@
<script>
import {
create{{.StructName}}
delete{{.StructName}}
update{{.StructName}}
find{{.StructName}}
create{{.StructName}},
delete{{.StructName}},
update{{.StructName}},
find{{.StructName}},
get{{.StructName}}List
} from "@/api/{{.StructName}}"; // 此处请自行替换地址
import { formatTimeToStr } from "@/utils/data";
......@@ -96,7 +96,7 @@ export default {
},
methods: {
async update{{.StructName}}(row) {
const res = await get{{.StructName}}({ ID: row.ID });
const res = await find{{.StructName}}({ ID: row.ID });
this.type = "update";
if (res.code == 0) {
this.form = res.data.re{{.Abbreviation}};
......
......@@ -11147,6 +11147,14 @@
"integrity": "sha1-9d9zJFNAewkZHa5z4qjMc/OBqCY=",
"dev": true
},
"timeline-vuejs": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/timeline-vuejs/-/timeline-vuejs-1.1.1.tgz",
"integrity": "sha512-jsdr0xNCBH/GBiW7qsOTbBxZuyk7WKD5YmtTGP1sm0su0fy+iBsEJLDyhHhQ4nTAxca8MkSbJhKGUgF5eNoEfA==",
"requires": {
"vue": "^2.5.17"
}
},
"timers-browserify": {
"version": "2.0.11",
"resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz",
......
<template>
<ul class="icon-list">
<ul class="icon-list clearfix">
<li>
<span>
<i class="el-icon-platform-eleme"></i>
......@@ -1223,6 +1223,7 @@
<li>
<span>
<i class="el-icon-moon"></i>
<br/>
<span class="icon-name">el-icon-moon</span></span>
</li>
<li>
......@@ -1413,6 +1414,79 @@
}
</script>
<style scoped>
<style lang="scss" scoped>
.icon-list{
-webkit-tap-highlight-color: transparent;
font-family: icomoon!important;
font-style: normal;
font-weight: 400;
font-variant: normal;
text-transform: none;
-webkit-font-smoothing: antialiased;
overflow: hidden;
list-style: none;
padding: 0!important;
border: 1px solid #eaeefb;
border-radius: 4px;
font-size: 14px;
color: #5e6d82;
line-height: 2em;
li{
-webkit-tap-highlight-color: transparent;
font-family: icomoon!important;
font-style: normal;
font-weight: 400;
font-variant: normal;
text-transform: none;
-webkit-font-smoothing: antialiased;
list-style: none;
float: left;
width: 16.66%;
text-align: center;
height: 120px;
line-height: 120px;
color: #666;
font-size: 13px;
border-right: 1px solid #eee;
border-bottom: 1px solid #eee;
margin-right: -1px;
margin-bottom: -1px;
span{
-webkit-tap-highlight-color: transparent;
font-style: normal;
font-weight: 400;
font-variant: normal;
text-transform: none;
-webkit-font-smoothing: antialiased;
list-style: none;
text-align: center;
font-size: 13px;
display: inline-block;
vertical-align: middle;
line-height: normal;
font-family: Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;
color: #99a9bf;
transition: color .15s linear;
i{
-webkit-tap-highlight-color: transparent;
list-style: none;
text-align: center;
font-family: element-icons!important;
font-style: normal;
font-weight: 400;
font-variant: normal;
text-transform: none;
line-height: 1;
vertical-align: baseline;
-webkit-font-smoothing: antialiased;
display: block;
font-size: 32px;
margin-bottom: 15px;
color: #606266;
transition: color .15s linear;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="router-history">
<el-tabs v-model="activeValue" type="card" :closable="!(historys.length==1&&this.$route.name=='dashboard')" @tab-click="changeTab" @tab-remove="removeTab">
<el-tab-pane
v-for="item in historys"
:key="item.name"
:label="item.meta.title"
:name="item.name"
>
</el-tab-pane>
</el-tabs>
</div>
<div class="router-history">
<el-tabs
:closable="!(historys.length==1&&this.$route.name=='dashboard')"
@contextmenu.prevent.native="openContextMenu($event)"
@tab-click="changeTab"
@tab-remove="removeTab"
type="card"
v-model="activeValue"
>
<el-tab-pane
:key="item.name"
:label="item.meta.title"
:name="item.name"
v-for="item in historys"
></el-tab-pane>
</el-tabs>
<!--自定义右键菜单html代码-->
<ul :style="{left:left+'px',top:top+'px'}" class="contextmenu" v-show="contextMenuVisible">
<li @click="closeAll">关闭所有</li>
<li @click="closeLeft">关闭左边</li>
<li @click="closeRight">关闭右边</li>
<li @click="closeOther">关闭其他</li>
</ul>
</div>
</template>
<script>
export default {
name:"HistoryComponent",
data(){
return{
historys:[],
activeValue:"dashboard"
name: 'HistoryComponent',
data() {
return {
historys: [],
activeValue: 'dashboard',
contextMenuVisible: false,
left: 0,
top: 0,
isCollapse: false,
rightActive: ''
}
},
created() {
const initHistorys = [
{
name: 'dashboard',
meta: {
title: '仪表盘'
}
}
]
this.historys =
JSON.parse(sessionStorage.getItem('historys')) || initHistorys
this.setTab(this.$route)
},
mounted() {
this.$bus.on('totalCollapse', () => {
this.isCollapse = !this.isCollapse
})
},
methods: {
openContextMenu(e) {
if (this.historys.length == 1 && this.$route.name == 'dashboard') {
return false
}
if (e.srcElement.id) {
this.contextMenuVisible = true
let width
if (this.isCollapse) {
width = 60
} else {
width = 220
}
this.left = e.clientX - width
this.top = e.clientY + 10
this.rightActive = e.srcElement.id.split('-')[1]
}
},
closeAll() {
this.historys = [
{
name: 'dashboard',
meta: {
title: '仪表盘'
}
}
]
this.$router.push({ name: 'dashboard' })
this.contextMenuVisible = false
sessionStorage.setItem('historys', JSON.stringify(this.historys))
},
closeLeft() {
const rightIndex = this.historys.findIndex(
item => item.name == this.rightActive
)
const activeIndex = this.historys.findIndex(
item => item.name == this.activeValue
)
this.historys.splice(0, rightIndex)
if (rightIndex > activeIndex) {
this.$router.push({ name: this.rightActive })
}
sessionStorage.setItem('historys', JSON.stringify(this.historys))
},
closeRight() {
const leftIndex = this.historys.findIndex(
item => item.name == this.rightActive
)
const activeIndex = this.historys.findIndex(
item => item.name == this.activeValue
)
this.historys.splice(leftIndex, this.historys.length)
if (leftIndex < activeIndex) {
this.$router.push({ name: this.rightActive })
}
sessionStorage.setItem('historys', JSON.stringify(this.historys))
},
created(){
const initHistorys = [
{
name:"dashboard",
meta:{
title:"仪表盘"
}
}
]
this.historys = JSON.parse(sessionStorage.getItem("historys")) || initHistorys
this.setTab(this.$route)
closeOther() {
this.historys = this.historys.filter(
item => item.name == this.rightActive
)
this.$router.push({ name: this.rightActive })
sessionStorage.setItem('historys', JSON.stringify(this.historys))
},
methods:{
setTab(route){
if(!this.historys.some(item=>item.name==route.name)){
const obj = {}
obj.name = route.name
obj.meta = route.meta
this.historys.push(obj)
}
this.activeValue = this.$route.name
},
changeTab(tab){
this.$router.push({name:tab.name})
},
removeTab(tab){
const index = this.historys.findIndex(item=>item.name == tab)
if(this.$route.name == tab){
if(this.historys.length==1){
this.$router.push({name:"dashboard"})
}else{
if(index<this.historys.length-1){
this.$router.push({name:this.historys[index+1].name})
}else{
this.$router.push({name:this.historys[index-1].name})
}
}
}
this.historys.splice(index,1)
setTab(route) {
if (!this.historys.some(item => item.name == route.name)) {
const obj = {}
obj.name = route.name
obj.meta = route.meta
this.historys.push(obj)
}
this.activeValue = this.$route.name
},
changeTab(tab) {
this.$router.push({ name: tab.name })
},
removeTab(tab) {
const index = this.historys.findIndex(item => item.name == tab)
if (this.$route.name == tab) {
if (this.historys.length == 1) {
this.$router.push({ name: 'dashboard' })
} else {
if (index < this.historys.length - 1) {
this.$router.push({ name: this.historys[index + 1].name })
} else {
this.$router.push({ name: this.historys[index - 1].name })
}
}
}
this.historys.splice(index, 1)
}
},
watch: {
contextMenuVisible() {
if (this.contextMenuVisible) {
document.body.addEventListener('click', () => {
this.contextMenuVisible = false
})
} else {
document.body.removeEventListener('click', () => {
this.contextMenuVisible = false
})
}
},
watch:{
$route( to ){
this.historys = this.historys.filter(item=>!item.meta.hidden)
this.setTab(to)
sessionStorage.setItem("historys",JSON.stringify(this.historys))
}
$route(to) {
this.historys = this.historys.filter(item => !item.meta.hidden)
this.setTab(to)
sessionStorage.setItem('historys', JSON.stringify(this.historys))
}
}
}
</script>
<style lang="scss">
.contextmenu {
width: 100px;
margin: 0;
border: 1px solid #ccc;
background: #fff;
z-index: 3000;
position: absolute;
list-style-type: none;
padding: 5px 0;
border-radius: 4px;
font-size: 14px;
color: #333;
box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.2);
}
.contextmenu li {
margin: 0;
padding: 7px 16px;
}
.contextmenu li:hover {
background: #f2f2f2;
cursor: pointer;
}
</style>
\ No newline at end of file
......@@ -39,7 +39,7 @@
<el-dropdown-item @click.native="LoginOut" icon="el-icon-table-lamp">登 出</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</el-header>
<!-- 当前面包屑用路由自动生成可根据需求修改 -->
......@@ -272,6 +272,7 @@ $mainHight: 100vh;
.router-history{
background: #fff;
padding: 0 6px;
border-top: 1px solid #DCDCDC;
}
&.el-main {
overflow: auto;
......
......@@ -63,7 +63,9 @@
<el-input autocomplete="off" v-model="form.meta.title"></el-input>
</el-form-item>
<el-form-item label="图标" prop="meta.icon">
<el-input autocomplete="off" v-model="form.meta.icon"></el-input>
<el-input autocomplete="off" v-model="form.meta.icon">
<template slot="prepend">el-icon-</template>
</el-input>
</el-form-item>
<el-form-item label="排序标记" prop="sort">
<el-input autocomplete="off" v-model.number="form.sort"></el-input>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册