guhongwei 2 سال پیش
والد
کامیت
e405664c40

+ 1 - 0
.env

@@ -0,0 +1 @@
+VUE_APP_AXIOS_BASE_URL = ''

+ 33 - 0
.eslintrc.js

@@ -0,0 +1,33 @@
+// https://eslint.org/docs/user-guide/configuring
+
+module.exports = {
+  root: true,
+  env: {
+    node: true,
+  },
+  extends: ['plugin:vue/essential', '@vue/prettier'],
+  plugins: ['vue'],
+  rules: {
+    'max-len': [
+      'warn',
+      {
+        code: 10000,
+      },
+    ],
+    'no-unused-vars': 'off',
+    'no-console': 'off',
+    'prettier/prettier': [
+      'warn',
+      {
+        singleQuote: true,
+        trailingComma: 'es5',
+        bracketSpacing: true,
+        jsxBracketSameLine: true,
+        printWidth: 160,
+      },
+    ],
+  },
+  parserOptions: {
+    parser: 'babel-eslint',
+  },
+};

+ 1 - 0
.gitignore

@@ -1,5 +1,6 @@
 .DS_Store
 node_modules
+package-lock.json
 /dist
 
 

+ 0 - 24
README.md

@@ -1,24 +0,0 @@
-# common
-
-## Project setup
-```
-npm install
-```
-
-### Compiles and hot-reloads for development
-```
-npm run serve
-```
-
-### Compiles and minifies for production
-```
-npm run build
-```
-
-### Lints and fixes files
-```
-npm run lint
-```
-
-### Customize configuration
-See [Configuration Reference](https://cli.vuejs.org/config/).

+ 1 - 1
babel.config.js

@@ -1,3 +1,3 @@
 module.exports = {
-  presets: ["@vue/cli-plugin-babel/preset"],
+  presets: ['@vue/cli-plugin-babel/preset'],
 };

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 629 - 89
package-lock.json


+ 9 - 0
package.json

@@ -8,8 +8,16 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "animate.css": "^4.1.1",
+    "axios": "^1.2.2",
     "core-js": "^3.6.5",
+    "element-ui": "^2.15.12",
+    "jsonwebtoken": "^9.0.0",
+    "lodash": "^4.17.21",
+    "moment": "^2.29.4",
+    "naf-core": "^0.1.2",
     "vue": "^2.6.11",
+    "vue-meta": "^2.4.0",
     "vue-router": "^3.2.0",
     "vuex": "^3.4.0"
   },
@@ -27,6 +35,7 @@
     "less": "^3.0.4",
     "less-loader": "^5.0.0",
     "prettier": "^2.2.1",
+    "vue-loader": "^17.0.1",
     "vue-template-compiler": "^2.6.11"
   },
   "eslintConfig": {

+ 1 - 26
src/App.vue

@@ -1,32 +1,7 @@
 <template>
   <div id="app">
-    <div id="nav">
-      <router-link to="/">Home</router-link> |
-      <router-link to="/about">About</router-link>
-    </div>
     <router-view />
   </div>
 </template>
 
-<style lang="less">
-#app {
-  font-family: Avenir, Helvetica, Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  text-align: center;
-  color: #2c3e50;
-}
-
-#nav {
-  padding: 30px;
-
-  a {
-    font-weight: bold;
-    color: #2c3e50;
-
-    &.router-link-exact-active {
-      color: #42b983;
-    }
-  }
-}
-</style>
+<style lang="less"></style>

BIN
src/assets/bg_1.png


BIN
src/assets/logo.png


+ 0 - 130
src/components/HelloWorld.vue

@@ -1,130 +0,0 @@
-<template>
-  <div class="hello">
-    <h1>{{ msg }}</h1>
-    <p>
-      For a guide and recipes on how to configure / customize this project,<br />
-      check out the
-      <a href="https://cli.vuejs.org" target="_blank" rel="noopener"
-        >vue-cli documentation</a
-      >.
-    </p>
-    <h3>Installed CLI Plugins</h3>
-    <ul>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel"
-          target="_blank"
-          rel="noopener"
-          >babel</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router"
-          target="_blank"
-          rel="noopener"
-          >router</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex"
-          target="_blank"
-          rel="noopener"
-          >vuex</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint"
-          target="_blank"
-          rel="noopener"
-          >eslint</a
-        >
-      </li>
-    </ul>
-    <h3>Essential Links</h3>
-    <ul>
-      <li>
-        <a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a>
-      </li>
-      <li>
-        <a href="https://forum.vuejs.org" target="_blank" rel="noopener"
-          >Forum</a
-        >
-      </li>
-      <li>
-        <a href="https://chat.vuejs.org" target="_blank" rel="noopener"
-          >Community Chat</a
-        >
-      </li>
-      <li>
-        <a href="https://twitter.com/vuejs" target="_blank" rel="noopener"
-          >Twitter</a
-        >
-      </li>
-      <li>
-        <a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a>
-      </li>
-    </ul>
-    <h3>Ecosystem</h3>
-    <ul>
-      <li>
-        <a href="https://router.vuejs.org" target="_blank" rel="noopener"
-          >vue-router</a
-        >
-      </li>
-      <li>
-        <a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a>
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-devtools#vue-devtools"
-          target="_blank"
-          rel="noopener"
-          >vue-devtools</a
-        >
-      </li>
-      <li>
-        <a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener"
-          >vue-loader</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/awesome-vue"
-          target="_blank"
-          rel="noopener"
-          >awesome-vue</a
-        >
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "HelloWorld",
-  props: {
-    msg: String,
-  },
-};
-</script>
-
-<!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped lang="less">
-h3 {
-  margin: 40px 0 0;
-}
-ul {
-  list-style-type: none;
-  padding: 0;
-}
-li {
-  display: inline-block;
-  margin: 0 10px;
-}
-a {
-  color: #42b983;
-}
-</style>

+ 89 - 0
src/components/admin-frame/home-parts-one/aside-1.vue

@@ -0,0 +1,89 @@
+<template>
+  <div id="aside-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-menu
+          :default-active="onRoutes"
+          unique-opened
+          router
+          :background-color="styleInfo.menus_bg_color"
+          :text-color="styleInfo.menus_txt_color"
+          :active-text-color="styleInfo.menus_actxt_color"
+        >
+          <template v-for="item in items">
+            <template v-if="item.type === '1'">
+              <el-submenu :index="item._id" :key="item._id">
+                <template slot="title">
+                  <i :class="[item.icon]"></i>
+                  <span slot="title">{{ item.name }}</span>
+                </template>
+                <template v-for="subItem in item.children">
+                  <el-submenu v-if="subItem.children && subItem.children.length > 0" :index="subItem._id" :key="subItem._id">
+                    <template slot="title">
+                      <i :class="[subItem.icon]"></i>
+                      <span slot="title">{{ subItem.name }}</span>
+                    </template>
+                    <el-menu-item v-for="(threeItem, i) in subItem.children" :key="i" :index="threeItem.path">
+                      <template slot="title">
+                        <i :class="[threeItem.icon]"></i>
+                        <span slot="title">{{ threeItem.name }}</span>
+                      </template>
+                    </el-menu-item>
+                  </el-submenu>
+                  <el-menu-item v-else :index="subItem.path" :key="subItem.path">
+                    <template slot="title">
+                      <i :class="[subItem.icon]"></i>
+                      <span slot="title">{{ subItem.name }}</span>
+                    </template>
+                  </el-menu-item>
+                </template>
+              </el-submenu>
+            </template>
+            <template v-else>
+              <el-menu-item :index="item.path" :key="item.path">
+                <i :class="[item.icon]"></i>
+                <span slot="title">{{ item.name }}</span>
+              </el-menu-item>
+            </template>
+          </template>
+        </el-menu>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { menus, admin_style_one } from '../../../layout/site';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'aside-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      items: menus,
+      styleInfo: admin_style_one,
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    onRoutes() {
+      return this.$route.path;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 83 - 0
src/components/admin-frame/home-parts-one/header-1.vue

@@ -0,0 +1,83 @@
+<template>
+  <div id="header-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="12" class="one">
+          <span>欢迎进入</span>
+          <span>{{ siteInfo.zhTitle }}</span>
+          <span>管理平台</span>
+        </el-col>
+        <el-col :span="12" class="two">
+          <!-- <el-button type="primary">预留按钮</el-button> -->
+          <el-dropdown @command="toDrop">
+            <el-button type="danger" plain>
+              {{ user && user.id ? user.nickname : '暂无昵称' }}
+              <i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item icon="el-icon-switch-button" command="logout">退出登录</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { siteInfo } from '../../../layout/site';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'header-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      siteInfo: siteInfo,
+    };
+  },
+  created() {},
+  methods: {
+    toDrop(e) {
+      if (e == 'logout') {
+        sessionStorage.removeItem('token');
+        this.$router.push('/login');
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    padding: 0.3vw 0;
+    span {
+      font-weight: bold;
+      font-size: 20px;
+      font-family: cursive;
+    }
+    span:nth-child(1) {
+      color: #ff0000;
+      font-size: 25px;
+      padding: 0 0.3vw 0 0;
+    }
+  }
+  .two {
+    text-align: right;
+  }
+}
+</style>

+ 88 - 0
src/components/admin-frame/home-parts-thr/aside-1.vue

@@ -0,0 +1,88 @@
+<template>
+  <div id="aside-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-menu :default-active="onRoutes" unique-opened router background-color="transparent" text-color="#ffffff" active-text-color="#ffd04b">
+          <template v-for="item in items">
+            <template v-if="item.type === '1'">
+              <el-submenu :index="item._id" :key="item._id">
+                <template slot="title">
+                  <i :class="[item.icon]"></i>
+                  <span slot="title">{{ item.name }}</span>
+                </template>
+                <template v-for="subItem in item.children">
+                  <el-submenu v-if="subItem.children && subItem.children.length > 0" :index="subItem._id" :key="subItem._id">
+                    <template slot="title">
+                      <i :class="[subItem.icon]"></i>
+                      <span slot="title">{{ subItem.name }}</span>
+                    </template>
+                    <el-menu-item v-for="(threeItem, i) in subItem.children" :key="i" :index="threeItem.path">
+                      <template slot="title">
+                        <i :class="[threeItem.icon]"></i>
+                        <span slot="title">{{ threeItem.name }}</span>
+                      </template>
+                    </el-menu-item>
+                  </el-submenu>
+                  <el-menu-item v-else :index="subItem.path" :key="subItem.path">
+                    <template slot="title">
+                      <i :class="[subItem.icon]"></i>
+                      <span slot="title">{{ subItem.name }}</span>
+                    </template>
+                  </el-menu-item>
+                </template>
+              </el-submenu>
+            </template>
+            <template v-else>
+              <el-menu-item :index="item.path" :key="item.path">
+                <i :class="[item.icon]"></i>
+                <span slot="title">{{ item.name }}</span>
+              </el-menu-item>
+            </template>
+          </template>
+        </el-menu>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { menus } from '../../../layout/site';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'aside-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      items: menus,
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    onRoutes() {
+      return this.$route.path;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-menu-item:hover {
+  background-color: #0000009f !important;
+}
+/deep/.el-submenu__title:hover {
+  background-color: #0000009f !important;
+}
+</style>

+ 81 - 0
src/components/admin-frame/home-parts-thr/header-1.vue

@@ -0,0 +1,81 @@
+<template>
+  <div id="header-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="3" class="one">
+          <span>{{ siteInfo.smallTtitle }}</span>
+        </el-col>
+        <el-col :span="21" class="two">
+          <!-- <el-button type="primary">预留按钮</el-button> -->
+          <el-dropdown @command="toDrop">
+            <el-button type="danger" plain>
+              {{ user && user.id ? user.nickname : '暂无昵称' }}
+              <i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item icon="el-icon-switch-button" command="logout">退出登录</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { siteInfo } from '../../../layout/site';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'header-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      siteInfo: siteInfo,
+    };
+  },
+  created() {},
+  methods: {
+    toDrop(e) {
+      if (e == 'logout') {
+        sessionStorage.removeItem('token');
+        this.$router.push('/login');
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    height: 60px;
+    line-height: 60px;
+    border-bottom: 1px solid #ffffff;
+    text-align: center;
+    span {
+      color: #ffffff;
+      font-family: cursive;
+      font-weight: bold;
+      font-size: 26px;
+    }
+  }
+  .two {
+    text-align: right;
+    padding: 0.5vw;
+  }
+}
+</style>

+ 89 - 0
src/components/admin-frame/home-parts-two/aside-1.vue

@@ -0,0 +1,89 @@
+<template>
+  <div id="aside-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-menu
+          :default-active="onRoutes"
+          unique-opened
+          router
+          :background-color="styleInfo.menus_bg_color"
+          :text-color="styleInfo.menus_txt_color"
+          :active-text-color="styleInfo.menus_actxt_color"
+        >
+          <template v-for="item in items">
+            <template v-if="item.type === '1'">
+              <el-submenu :index="item._id" :key="item._id">
+                <template slot="title">
+                  <i :class="[item.icon]"></i>
+                  <span slot="title">{{ item.name }}</span>
+                </template>
+                <template v-for="subItem in item.children">
+                  <el-submenu v-if="subItem.children && subItem.children.length > 0" :index="subItem._id" :key="subItem._id">
+                    <template slot="title">
+                      <i :class="[subItem.icon]"></i>
+                      <span slot="title">{{ subItem.name }}</span>
+                    </template>
+                    <el-menu-item v-for="(threeItem, i) in subItem.children" :key="i" :index="threeItem.path">
+                      <template slot="title">
+                        <i :class="[threeItem.icon]"></i>
+                        <span slot="title">{{ threeItem.name }}</span>
+                      </template>
+                    </el-menu-item>
+                  </el-submenu>
+                  <el-menu-item v-else :index="subItem.path" :key="subItem.path">
+                    <template slot="title">
+                      <i :class="[subItem.icon]"></i>
+                      <span slot="title">{{ subItem.name }}</span>
+                    </template>
+                  </el-menu-item>
+                </template>
+              </el-submenu>
+            </template>
+            <template v-else>
+              <el-menu-item :index="item.path" :key="item.path">
+                <i :class="[item.icon]"></i>
+                <span slot="title">{{ item.name }}</span>
+              </el-menu-item>
+            </template>
+          </template>
+        </el-menu>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { menus, admin_style_two } from '../../../layout/site';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'aside-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      items: menus,
+      styleInfo: admin_style_two,
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    onRoutes() {
+      return this.$route.path;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 37 - 0
src/components/admin-frame/home-parts-two/breadcrumb.vue

@@ -0,0 +1,37 @@
+<template>
+  <div id="breadcrumb">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-breadcrumb separator="/">
+          <el-breadcrumb-item> <i class="el-icon-s-grid"></i> {{ breadcrumbTitle }} </el-breadcrumb-item>
+        </el-breadcrumb>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo: {},
+  name: 'breadcrumb',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      breadcrumbTitle: this.$route.meta.title,
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  margin: 0 0 0.5vw 0;
+}
+</style>

+ 78 - 0
src/components/admin-frame/home-parts-two/header-1.vue

@@ -0,0 +1,78 @@
+<template>
+  <div id="header-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="12" class="one">
+          <span>{{ siteInfo.zhTitle }}</span>
+          <span>管理平台</span>
+        </el-col>
+        <el-col :span="12" class="two">
+          <!-- <el-button type="primary">预留按钮</el-button> -->
+          <el-dropdown @command="toDrop">
+            <el-button type="danger" plain>
+              {{ user && user.id ? user.nickname : '暂无昵称' }}
+              <i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item icon="el-icon-switch-button" command="logout">退出登录</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { siteInfo } from '../../../layout/site';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'header-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      siteInfo: siteInfo,
+    };
+  },
+  created() {},
+  methods: {
+    toDrop(e) {
+      if (e == 'logout') {
+        sessionStorage.removeItem('token');
+        this.$router.push('/login');
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    padding: 0.8vw 0;
+    span {
+      font-weight: bold;
+      font-size: 23px;
+      font-family: cursive;
+    }
+  }
+  .two {
+    text-align: right;
+    padding: 0.5vw 0;
+  }
+}
+</style>

+ 74 - 0
src/components/admin-frame/home.vue

@@ -0,0 +1,74 @@
+<template>
+  <div id="home">
+    <el-container class="main" :style="{ background: styleInfo.main_bg_color }">
+      <el-aside width="250px" :style="{ background: styleInfo.aside_bg_color, 'border-color': styleInfo.aside_border_color }">
+        <aside-1></aside-1>
+      </el-aside>
+      <el-container>
+        <el-header :style="{ background: styleInfo.header_bg_color, 'border-color': styleInfo.aside_border_color }">
+          <header-1></header-1>
+        </el-header>
+        <el-main :style="{ background: styleInfo.mains_bg_color, 'border-color': styleInfo.aside_border_color }">
+          <router-view></router-view>
+        </el-main>
+      </el-container>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import { admin_style_one } from '../../layout/site';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'home',
+  props: {},
+  components: {
+    aside1: () => import('./home-parts-one/aside-1.vue'),
+    header1: () => import('./home-parts-one/header-1.vue'),
+  },
+  data: function () {
+    return {
+      styleInfo: admin_style_one,
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  height: 100vh;
+  padding: 0.5vw;
+  .el-aside {
+    border-radius: 5px;
+    padding: 0.5vw;
+    border: 1px solid;
+    margin: 0 0.5vw 0 0;
+  }
+  .el-header {
+    margin: 0 0 0.5vw 0;
+    border-radius: 5px;
+    border: 1px solid;
+    padding: 0.5vw;
+  }
+  .el-main {
+    border-radius: 5px;
+    border: 1px solid;
+    padding: 0.5vw;
+  }
+}
+</style>

+ 68 - 0
src/components/admin-frame/homeThr.vue

@@ -0,0 +1,68 @@
+<template>
+  <div id="homeThr">
+    <el-container class="main" :style="{ 'background-image': 'url(' + bg_url + ')' }">
+      <el-header>
+        <header-1></header-1>
+      </el-header>
+      <el-container>
+        <el-aside width="240px">
+          <aside-1></aside-1>
+        </el-aside>
+        <el-main>
+          <router-view></router-view>
+        </el-main>
+      </el-container>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+
+export default {
+  name: 'homeThr',
+  props: {},
+  components: {
+    header1: () => import('./home-parts-thr/header-1.vue'),
+    aside1: () => import('./home-parts-thr/aside-1.vue'),
+  },
+  data: function () {
+    return {
+      bg_url: require('../../assets/bg_1.png'),
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  height: 100vh;
+  background-size: 100%;
+  background-repeat: no-repeat;
+  .el-header {
+    padding: 0;
+    border-bottom: 1px solid #ffffff;
+  }
+  .el-aside {
+    border-right: 1px solid #ffffff;
+  }
+  .el-main {
+    padding: 10px;
+  }
+}
+</style>

+ 71 - 0
src/components/admin-frame/homeTwo.vue

@@ -0,0 +1,71 @@
+<template>
+  <div id="homeTwo">
+    <el-container class="main" :style="{ background: styleInfo.main_bg_color }">
+      <el-header :style="{ background: styleInfo.header_bg_color, 'border-color': styleInfo.aside_border_color }">
+        <header-1></header-1>
+      </el-header>
+      <el-container>
+        <el-aside width="220px" :style="{ background: styleInfo.aside_bg_color }">
+          <aside-1></aside-1>
+        </el-aside>
+        <el-main>
+          <breadcrumb></breadcrumb>
+          <el-col :span="24" class="routerView" :style="{ background: styleInfo.routerview_bg_color }">
+            <router-view></router-view>
+          </el-col>
+        </el-main>
+      </el-container>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import { admin_style_two } from '../../layout/site';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'homeTwo',
+  props: {},
+  components: {
+    header1: () => import('./home-parts-two/header-1.vue'),
+    aside1: () => import('./home-parts-two/aside-1.vue'),
+    breadcrumb: () => import('./home-parts-two/breadcrumb.vue'),
+  },
+  data: function () {
+    return {
+      styleInfo: admin_style_two,
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  height: 100vh;
+  .el-header {
+    border-bottom: 1px solid;
+  }
+  .el-main {
+    padding: 10px;
+    .routerView {
+      padding: 0.5vw;
+      height: 88.9vh;
+      border-radius: 5px;
+    }
+  }
+}
+</style>

+ 79 - 0
src/layout/site.js

@@ -0,0 +1,79 @@
+// 网站基本设置
+export const siteInfo = {
+  display: true,
+  zhTitle: '长春市福瑞科技有限公司',
+  enTitle: 'Changchun Furui Technology Co., Ltd',
+  smallTtitle: '福瑞科技',
+};
+
+export const admin_style_one = {
+  // 主体背景颜色
+  main_bg_color: '#fff2cc',
+  // 左侧菜单部分
+  aside_bg_color: '#e2f0d9',
+  aside_border_color: '#727e96',
+  // 菜单
+  menus_bg_color: '#A2E1F7',
+  menus_txt_color: '#000000',
+  menus_actxt_color: '#ffffff',
+  menus_acbg_color: '#65cd94',
+  // 头部
+  header_bg_color: 'transparent',
+  // 页面内容部分
+  mains_bg_color: '#dae3f3',
+};
+export const admin_style_two = {
+  // 主体背景颜色
+  main_bg_color: '#f0f0f0',
+  // 头部
+  header_bg_color: '#07c4a8',
+  // 左侧菜单部分
+  aside_bg_color: '#07c4a8',
+  aside_border_color: '#ffffff',
+  // 菜单
+  menus_bg_color: '#07c4a8',
+  menus_txt_color: '#000000',
+  menus_actxt_color: '#ffffff',
+  menus_acbg_color: '#65cd94',
+  // 内容显示部分
+  routerview_bg_color: '#ffffff',
+};
+
+// 菜单
+export const menus = [
+  {
+    id: 'menus_1',
+    icon: 'el-icon-user',
+    name: '系统首页',
+    path: '/homeIndex',
+    type: '0',
+  },
+  {
+    _id: 'menus_2',
+    icon: 'el-icon-user',
+    name: '二级菜单',
+    type: '1',
+    children: [
+      {
+        _id: 'menus_2_1',
+        icon: 'el-icon-user',
+        name: '二级菜单-1',
+        path: '/test/test1',
+      },
+      {
+        _id: 'menus_2_2',
+        icon: 'el-icon-user',
+        name: '三级菜单',
+        type: '2',
+        children: [
+          {
+            _id: 'menus_2_2_1',
+            icon: 'el-icon-user',
+            name: '三级菜单-1',
+            path: '/test/test2/test1',
+          },
+        ],
+      },
+    ],
+  },
+];

+ 5 - 9
src/main.js

@@ -1,12 +1,8 @@
-import Vue from "vue";
-import App from "./App.vue";
-import router from "./router";
-import store from "./store";
+import Vue from 'vue';
+import App from './App.vue';
+import router from './router';
+import store from './store';
 
 Vue.config.productionTip = false;
 
-new Vue({
-  router,
-  store,
-  render: (h) => h(App),
-}).$mount("#app");
+new Vue({ router, store, render: (h) => h(App) }).$mount('#app');

+ 3 - 21
src/router/index.js

@@ -1,29 +1,11 @@
-import Vue from "vue";
-import VueRouter from "vue-router";
-import Home from "../views/Home.vue";
+import Vue from 'vue';
+import VueRouter from 'vue-router';
 
 Vue.use(VueRouter);
 
-const routes = [
-  {
-    path: "/",
-    name: "Home",
-    component: Home,
-  },
-  {
-    path: "/about",
-    name: "About",
-    // route level code-splitting
-    // this generates a separate chunk (about.[hash].js) for this route
-    // which is lazy-loaded when the route is visited.
-    component: () =>
-      import(/* webpackChunkName: "about" */ "../views/About.vue"),
-  },
-];
+const routes = [];
 
 const router = new VueRouter({
-  mode: "history",
-  base: process.env.BASE_URL,
   routes,
 });
 

+ 8 - 0
src/store/user/mutations.js

@@ -0,0 +1,8 @@
+export const setUser = (state, payload) => {
+  state.user = payload;
+};
+
+export const deleteUser = (state, payload) => {
+  state.user = {};
+  sessionStorage.removeItem('token');
+};

+ 1 - 0
src/store/user/state.js

@@ -0,0 +1 @@
+export const user = {};

+ 0 - 5
src/views/About.vue

@@ -1,5 +0,0 @@
-<template>
-  <div class="about">
-    <h1>This is an about page</h1>
-  </div>
-</template>

+ 0 - 18
src/views/Home.vue

@@ -1,18 +0,0 @@
-<template>
-  <div class="home">
-    <img alt="Vue logo" src="../assets/logo.png" />
-    <HelloWorld msg="Welcome to Your Vue.js App" />
-  </div>
-</template>
-
-<script>
-// @ is an alias to /src
-import HelloWorld from "@/components/HelloWorld.vue";
-
-export default {
-  name: "Home",
-  components: {
-    HelloWorld,
-  },
-};
-</script>

+ 36 - 0
src/views/index.vue

@@ -0,0 +1,36 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="main"> test </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'index',
+  props: {},
+  components: {},
+  data: function () {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 4 - 0
vue.config.js

@@ -0,0 +1,4 @@
+const { defineConfig } = require('@vue/cli-service');
+module.exports = defineConfig({
+  transpileDependencies: true,
+});