Browse Source

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

QM303176530 4 years ago
parent
commit
4e26a89f30

+ 5 - 5
server/resource/template/fe/table.vue.tpl

@@ -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}};

+ 8 - 0
web/package-lock.json

@@ -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",

+ 0 - 0
web/src/view/test/index.vue → web/src/view/about/index.vue


+ 76 - 2
web/src/view/iconList/index.vue

@@ -1,5 +1,5 @@
 <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>

+ 181 - 62
web/src/view/layout/aside/historyComponent/history.vue

@@ -1,76 +1,195 @@
 <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>

+ 2 - 1
web/src/view/layout/index.vue

@@ -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;

+ 3 - 1
web/src/view/superAdmin/menu/menu.vue

@@ -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>