guhongwei 4 years ago
commit
8b8e0db709
97 changed files with 16172 additions and 0 deletions
  1. 2 0
      .env
  2. 33 0
      .eslintrc.js
  3. 24 0
      .gitignore
  4. 24 0
      README.md
  5. 3 0
      babel.config.js
  6. 12176 0
      package-lock.json
  7. 60 0
      package.json
  8. BIN
      public/favicon.ico
  9. 21 0
      public/index.html
  10. 33 0
      src/App.vue
  11. BIN
      src/assets/bg.jpg
  12. BIN
      src/assets/changyong1.jpg
  13. BIN
      src/assets/changyong2.jpg
  14. BIN
      src/assets/changyong3.jpg
  15. BIN
      src/assets/changyong4.jpg
  16. BIN
      src/assets/changyong5.jpg
  17. BIN
      src/assets/changyong6.jpg
  18. BIN
      src/assets/gongzhong1.jpg
  19. BIN
      src/assets/gongzhong2.jpg
  20. BIN
      src/assets/gongzhong3.jpg
  21. BIN
      src/assets/gongzhong4.jpg
  22. BIN
      src/assets/gongzhong5.jpg
  23. BIN
      src/assets/gongzhong6.jpg
  24. BIN
      src/assets/link.jpg
  25. BIN
      src/assets/link2.jpg
  26. BIN
      src/assets/link3.jpg
  27. BIN
      src/assets/logo.png
  28. BIN
      src/assets/map.jpg
  29. BIN
      src/assets/more.png
  30. BIN
      src/assets/news.jpg
  31. BIN
      src/assets/service1.jpg
  32. BIN
      src/assets/service2.jpg
  33. BIN
      src/assets/service3.jpg
  34. BIN
      src/assets/service4.jpg
  35. BIN
      src/assets/service5.jpg
  36. BIN
      src/assets/service6.jpg
  37. BIN
      src/assets/service7.jpg
  38. BIN
      src/assets/service8.jpg
  39. BIN
      src/assets/zhengwu1.jpg
  40. BIN
      src/assets/zhengwu2.jpg
  41. BIN
      src/assets/zhengwu3.jpg
  42. BIN
      src/assets/zhengwu4.jpg
  43. BIN
      src/assets/zhengwu5.jpg
  44. BIN
      src/assets/zhengwu6.jpg
  45. BIN
      src/assets/zhengwu7.jpg
  46. BIN
      src/assets/zhengwu8.jpg
  47. BIN
      src/assets/搜索.png
  48. 60 0
      src/components/common/foot.vue
  49. 57 0
      src/components/common/links.vue
  50. 88 0
      src/components/common/menus.vue
  51. 99 0
      src/components/common/top.vue
  52. 42 0
      src/layout/index/maps.vue
  53. 70 0
      src/layout/index/tztg.vue
  54. 70 0
      src/layout/index/zcfg.vue
  55. 70 0
      src/layout/index/zxfw.vue
  56. 70 0
      src/layout/index/zxzx.vue
  57. 70 0
      src/layout/kjfw/cyfw.vue
  58. 70 0
      src/layout/kjfw/ggcy.vue
  59. 70 0
      src/layout/kjfw/zwgk.vue
  60. 32 0
      src/layout/kjpx/right.vue
  61. 70 0
      src/layout/kjpx/videos.vue
  62. 70 0
      src/layout/kjzx/kjdt.vue
  63. 70 0
      src/layout/kjzx/mtjj.vue
  64. 32 0
      src/layout/kjzx/tpxw.vue
  65. 22 0
      src/main.js
  66. 19 0
      src/plugins/axios.js
  67. 39 0
      src/plugins/check-res.js
  68. 5 0
      src/plugins/element.js
  69. 6 0
      src/plugins/filters.js
  70. 27 0
      src/plugins/loading.js
  71. 4 0
      src/plugins/meta.js
  72. 20 0
      src/plugins/setting.js
  73. 65 0
      src/plugins/stomp.js
  74. 44 0
      src/router/index.js
  75. 54 0
      src/store/concolumn.js
  76. 54 0
      src/store/connews.js
  77. 26 0
      src/store/index.js
  78. 54 0
      src/store/links.js
  79. 47 0
      src/store/login.js
  80. 54 0
      src/store/siteinfo.js
  81. 54 0
      src/store/traincolumn.js
  82. 54 0
      src/store/trainnews.js
  83. 54 0
      src/store/videomeet.js
  84. 117 0
      src/util/axios-wrapper.js
  85. 10 0
      src/util/filters.js
  86. 50 0
      src/util/methods-util.js
  87. 69 0
      src/util/user-util.js
  88. 146 0
      src/views/index copy.vue
  89. 343 0
      src/views/index.vue
  90. 102 0
      src/views/kjfw/index copy.vue
  91. 278 0
      src/views/kjfw/index.vue
  92. 89 0
      src/views/kjpx/index copy.vue
  93. 316 0
      src/views/kjpx/index.vue
  94. 105 0
      src/views/kjzx/index copy.vue
  95. 262 0
      src/views/kjzx/index.vue
  96. 61 0
      src/views/kjzy/index.vue
  97. 36 0
      vue.config.js

+ 2 - 0
.env

@@ -0,0 +1,2 @@
+VUE_APP_AXIOS_BASE_URL = ''
+VUE_APP_ROUTER="/newsaltai"

+ 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: 250,
+      },
+    ],
+    'no-unused-vars': 'off',
+    'no-console': 'off',
+    'prettier/prettier': [
+      'warn',
+      {
+        singleQuote: true,
+        trailingComma: 'es5',
+        bracketSpacing: true,
+        jsxBracketSameLine: true,
+        printWidth: 160,
+      },
+    ],
+  },
+  parserOptions: {
+    parser: 'babel-eslint',
+  },
+};

+ 24 - 0
.gitignore

@@ -0,0 +1,24 @@
+.DS_Store
+node_modules
+package-lock
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 24 - 0
README.md

@@ -0,0 +1,24 @@
+# news-altai
+
+## 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/).

+ 3 - 0
babel.config.js

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

File diff suppressed because it is too large
+ 12176 - 0
package-lock.json


+ 60 - 0
package.json

@@ -0,0 +1,60 @@
+{
+  "name": "news-altai",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "animate.css": "^4.1.1",
+    "axios": "^0.21.0",
+    "core-js": "^3.6.5",
+    "element-ui": "^2.13.2",
+    "lodash": "^4.17.20",
+    "moment": "^2.29.1",
+    "monent": "^2.0.0",
+    "naf-core": "^0.1.2",
+    "vue": "^2.6.11",
+    "vue-meta": "^2.4.0",
+    "vue-router": "^3.2.0",
+    "vuex": "^3.4.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-plugin-eslint": "~4.5.0",
+    "@vue/cli-plugin-router": "~4.5.0",
+    "@vue/cli-plugin-vuex": "~4.5.0",
+    "@vue/cli-service": "~4.5.0",
+    "@vue/eslint-config-prettier": "^6.0.0",
+    "babel-eslint": "^10.1.0",
+    "eslint": "^6.7.2",
+    "eslint-plugin-prettier": "^3.1.3",
+    "eslint-plugin-vue": "^6.2.2",
+    "less": "^3.0.4",
+    "less-loader": "^5.0.0",
+    "prettier": "^1.19.1",
+    "vue-template-compiler": "^2.6.11"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/essential",
+      "eslint:recommended",
+      "@vue/prettier"
+    ],
+    "parserOptions": {
+      "parser": "babel-eslint"
+    },
+    "rules": {}
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not dead"
+  ]
+}

BIN
public/favicon.ico


+ 21 - 0
public/index.html

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width,initial-scale=1.0">
+  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+  <title><%= htmlWebpackPlugin.options.title %></title>
+</head>
+
+<body style="margin:0px">
+  <noscript>
+    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
+      Please enable it to continue.</strong>
+  </noscript>
+  <div id="app"></div>
+  <!-- built files will be auto injected -->
+</body>
+
+</html>

+ 33 - 0
src/App.vue

@@ -0,0 +1,33 @@
+<template>
+  <div id="app">
+    <router-view />
+  </div>
+</template>
+<script>
+import _ from 'lodash';
+export default {
+  name: 'app',
+  data() {
+    return {};
+  },
+  computed: {},
+};
+</script>
+<style lang="less">
+p {
+  margin: 0;
+  padding: 0;
+}
+a {
+  text-decoration: none;
+}
+#app {
+  background: url('assets/bg.jpg');
+  background-size: 100% 100%;
+}
+.textOver {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+</style>

BIN
src/assets/bg.jpg


BIN
src/assets/changyong1.jpg


BIN
src/assets/changyong2.jpg


BIN
src/assets/changyong3.jpg


BIN
src/assets/changyong4.jpg


BIN
src/assets/changyong5.jpg


BIN
src/assets/changyong6.jpg


BIN
src/assets/gongzhong1.jpg


BIN
src/assets/gongzhong2.jpg


BIN
src/assets/gongzhong3.jpg


BIN
src/assets/gongzhong4.jpg


BIN
src/assets/gongzhong5.jpg


BIN
src/assets/gongzhong6.jpg


BIN
src/assets/link.jpg


BIN
src/assets/link2.jpg


BIN
src/assets/link3.jpg


BIN
src/assets/logo.png


BIN
src/assets/map.jpg


BIN
src/assets/more.png


BIN
src/assets/news.jpg


BIN
src/assets/service1.jpg


BIN
src/assets/service2.jpg


BIN
src/assets/service3.jpg


BIN
src/assets/service4.jpg


BIN
src/assets/service5.jpg


BIN
src/assets/service6.jpg


BIN
src/assets/service7.jpg


BIN
src/assets/service8.jpg


BIN
src/assets/zhengwu1.jpg


BIN
src/assets/zhengwu2.jpg


BIN
src/assets/zhengwu3.jpg


BIN
src/assets/zhengwu4.jpg


BIN
src/assets/zhengwu5.jpg


BIN
src/assets/zhengwu6.jpg


BIN
src/assets/zhengwu7.jpg


BIN
src/assets/zhengwu8.jpg


BIN
src/assets/搜索.png


+ 60 - 0
src/components/common/foot.vue

@@ -0,0 +1,60 @@
+<template>
+  <div id="foot">
+    <el-row>
+      <el-col :span="24" class="foot">
+        <div class="w_1200">
+          <el-col :span="24" class="one">
+            <p>版权所有:吉林省技术算中心</p>
+            <p>
+              <span>技术支持:长春福瑞科技有限公司</span>
+              <span>邮编:130000</span>
+              <span>传真:239823982</span>
+            </p>
+            <p>
+              <span>地址:吉林省长春市朝阳区前进大街1244号</span>
+              <span>电话:0134-1234567</span>
+              <span>邮箱:123456@163.com</span>
+            </p>
+          </el-col>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'foot',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.foot {
+  .one {
+    height: 120px;
+    background-color: rgba(14, 30, 59, 0.4);
+    padding: 15px 0px 0px 200px;
+    p {
+      font-size: 14px;
+      color: #868f9e;
+      font-family: '微软雅黑';
+      padding: 5px 0px;
+    }
+  }
+}
+</style>

+ 57 - 0
src/components/common/links.vue

@@ -0,0 +1,57 @@
+<template>
+  <div id="links">
+    <el-row>
+      <el-col :span="24" class="links">
+        <el-col :span="3" class="txt">
+          友情链接
+        </el-col>
+        <el-col :span="21" class="info">
+          <el-col :span="6" class="list" v-for="(item, index) in linkList" :key="index">
+            <el-link :href="item.url" :underline="false">
+              <el-image :src="item.pic" style="width:245px;height:53px;"></el-image>
+            </el-link>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'links',
+  props: {
+    linkList: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.links {
+  .txt {
+    height: 100px;
+    text-align: center;
+    line-height: 100px;
+    font-size: 22px;
+    font-weight: bold;
+    color: #2c3250;
+  }
+  .info {
+    .list {
+      text-align: center;
+      padding: 21px 0;
+    }
+  }
+}
+</style>

+ 88 - 0
src/components/common/menus.vue

@@ -0,0 +1,88 @@
+<template>
+  <div id="menu">
+    <el-row>
+      <el-col :span="24" class="menu">
+        <div class="w_1200">
+          <el-menu :default-active="onRoutes" router mode="horizontal">
+            <template v-for="item in items">
+              <template>
+                <el-menu-item class="first" :index="item.index" :key="item.index">
+                  <span slot="title">{{ item.title }}</span>
+                </el-menu-item>
+              </template>
+            </template>
+          </el-menu>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'menus',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      items: [
+        { index: 'kjzx', title: '科技咨讯' },
+        { index: 'kjpx', title: '科技培训' },
+        { index: 'kjzy', title: '科技资源' },
+        { index: 'kjfw', title: '科技服务' },
+      ],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    onRoutes() {
+      return this.$route.path.replace('/', '');
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+// 导航背景颜色
+/deep/.el-menu {
+  background-color: #0000004f;
+}
+// 导航样式改变
+/deep/.el-menu--horizontal > .el-menu-item {
+  height: 70px;
+  line-height: 70px;
+  padding: 0;
+  width: 300px;
+  border-right: 2px solid #76bdfe;
+  text-align: center;
+  font-size: 22px;
+  color: #fff;
+}
+// 导航最后一个菜单没有右边框
+/deep/.el-menu--horizontal > .el-menu-item:last-child {
+  border-right: none;
+}
+// 导航去掉下边框
+/deep/.el-menu.el-menu--horizontal {
+  border-bottom: none;
+}
+// 导航选中时字体颜色,背景颜色,有无下边框
+/deep/.el-menu--horizontal > .el-menu-item.is-active {
+  border-bottom: none;
+  color: #fff;
+  background: #215299;
+}
+// 导航滑过菜单时,样式重定义
+/deep/.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,
+.el-menu--horizontal .el-menu-item:not(.is-disabled):hover {
+  color: #fff;
+  background: #215299;
+}
+</style>

+ 99 - 0
src/components/common/top.vue

@@ -0,0 +1,99 @@
+<template>
+  <div id="top">
+    <el-row>
+      <el-col :span="24" class="top">
+        <el-col :span="24" class="one">
+          <div class="w_1200">
+            <p class="time">{{ today }}</p>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <div class="w_1200">
+            <el-col :span="18" class="logo">
+              <a href="/">
+                <p class="title">阿勒泰地区科技创新创业服务平台</p>
+                <p class="e-title">Altay technology innovation and entrepreneurship service platform</p>
+              </a>
+            </el-col>
+            <el-col :span="6" class="search">
+              <el-input placeholder="请输入内容" suffix-icon="el-icon-search" v-model="input"> </el-input>
+            </el-col>
+          </div>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+var moment = require('moment');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'top',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      input: '',
+      today: '',
+    };
+  },
+  created() {
+    let today = moment().format('LL dddd');
+    if (today) this.$set(this, `today`, today);
+  },
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.top {
+  .one {
+    height: 40px;
+    background-color: #215299;
+    .time {
+      line-height: 40px;
+      color: #fff;
+    }
+  }
+  .logo {
+    margin: 90px 0px;
+    // background-color: aqua;
+    a {
+      display: inline-block;
+      .title {
+        color: #215299;
+        font-size: 36px;
+        font-family: cursive;
+        font-weight: 600px;
+        text-shadow: -1px 0 rgb(3, 3, 3), 0 1px white, 1px 0 white, 0 -1px white;
+      }
+      .e-title {
+        color: #215299;
+        font-size: 18px;
+        font-weight: bold;
+      }
+    }
+  }
+  .search {
+    margin: 102px 0px;
+    height: 40px;
+  }
+}
+/deep/.el-input__inner {
+  background: #2152999f;
+  border-radius: 20px;
+  border: 0;
+  color: #fff;
+}
+</style>

+ 42 - 0
src/layout/index/maps.vue

@@ -0,0 +1,42 @@
+<template>
+  <div id="maps">
+    <el-row>
+      <el-col :span="24" class="map">
+        <el-image :src="map"></el-image>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'maps',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      map: require('@a/map.jpg'),
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.map {
+  padding: 10px;
+  .el-image {
+    width: 100%;
+    height: 330px;
+  }
+}
+</style>

+ 70 - 0
src/layout/index/tztg.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="tztg">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'tztg',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 70 - 0
src/layout/index/zcfg.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="zcfg">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'zcfg',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 70 - 0
src/layout/index/zxfw.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="zxfw">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'zxfw',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 70 - 0
src/layout/index/zxzx.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="zxzx">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'zxzx',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 70 - 0
src/layout/kjfw/cyfw.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="cyfw">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'cyfw',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 70 - 0
src/layout/kjfw/ggcy.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="ggcy">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'ggcy',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 70 - 0
src/layout/kjfw/zwgk.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="zwgk">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'zwgk',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 32 - 0
src/layout/kjpx/right.vue

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

+ 70 - 0
src/layout/kjpx/videos.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="videos">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'videos',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 70 - 0
src/layout/kjzx/kjdt.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="kjdt">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'kjdt',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 70 - 0
src/layout/kjzx/mtjj.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="mtjj">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <el-col :span="20" class="left">
+            <span></span>
+            <span>栏目名称</span>
+          </el-col>
+          <el-col :span="4" class="right">
+            <i class="el-icon-more"></i>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="info">
+          列表
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'mtjj',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 32 - 0
src/layout/kjzx/tpxw.vue

@@ -0,0 +1,32 @@
+<template>
+  <div id="tpxw">
+    <el-row>
+      <el-col :span="24">
+        图片新闻
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'tpxw',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped></style>

+ 22 - 0
src/main.js

@@ -0,0 +1,22 @@
+import Vue from 'vue';
+import App from './App.vue';
+import router from './router';
+import store from './store';
+import '@/plugins/element.js';
+import '@/plugins/axios';
+import '@/plugins/check-res';
+import '@/plugins/meta';
+import '@/plugins/filters';
+import '@/plugins/loading';
+import '@/plugins/setting';
+import moment from 'moment';
+require('moment/min/locales.min');
+moment.locale('zh-cn');
+import 'animate.css';
+Vue.config.productionTip = false;
+
+new Vue({
+  router,
+  store,
+  render: h => h(App),
+}).$mount('#app');

+ 19 - 0
src/plugins/axios.js

@@ -0,0 +1,19 @@
+import Vue from 'vue';
+import AxiosWrapper from '@/util/axios-wrapper';
+
+const Plugin = {
+  install(vue, options) {
+    // 3. 注入组件
+    vue.mixin({
+      created() {
+        if (this.$store && !this.$store.$axios) {
+          this.$store.$axios = this.$axios;
+        }
+      },
+    });
+    // 4. 添加实例方法
+    vue.prototype.$axios = new AxiosWrapper(options);
+  },
+};
+
+Vue.use(Plugin, { baseUrl: process.env.VUE_APP_AXIOS_BASE_URL });

+ 39 - 0
src/plugins/check-res.js

@@ -0,0 +1,39 @@
+/* eslint-disable no-underscore-dangle */
+/* eslint-disable no-param-reassign */
+/* eslint-disable no-unused-vars */
+/* eslint-disable no-shadow */
+import Vue from 'vue';
+import _ from 'lodash';
+import { Message } from 'element-ui';
+
+const vm = new Vue({});
+const Plugin = {
+  install(Vue, options) {
+    // 4. 添加实例方法
+    Vue.prototype.$checkRes = (res, okText, errText) => {
+      let _okText = okText;
+      let _errText = errText;
+      if (!_.isFunction(okText) && _.isObject(okText) && okText != null) {
+        ({ okText: _okText, errText: _errText } = okText);
+      }
+      const { errcode = 0, errmsg } = res || {};
+      if (errcode === 0) {
+        if (_.isFunction(_okText)) {
+          return _okText();
+        }
+        if (_okText) {
+          Message.success(_okText);
+        }
+        return true;
+      }
+      if (_.isFunction(_errText)) {
+        return _errText();
+      }
+      Message.error(_errText || errmsg);
+      // Message({ message: _errText || errmsg, duration: 60000 });
+      return false;
+    };
+  },
+};
+
+Vue.use(Plugin);

+ 5 - 0
src/plugins/element.js

@@ -0,0 +1,5 @@
+import Vue from 'vue';
+import Element from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+
+Vue.use(Element);

+ 6 - 0
src/plugins/filters.js

@@ -0,0 +1,6 @@
+import Vue from 'vue';
+import filters from '@/util/filters';
+
+for (const method in filters) {
+  Vue.filter(method, filters[method]);
+}

+ 27 - 0
src/plugins/loading.js

@@ -0,0 +1,27 @@
+/* eslint-disable no-console */
+/* eslint-disable no-param-reassign */
+
+import Vue from 'vue';
+
+const Plugin = {
+  // eslint-disable-next-line no-unused-vars
+  install(vue, options) {
+    // 3. 注入组件
+    vue.mixin({
+      created() {
+        // eslint-disable-next-line no-underscore-dangle
+        const isRoot = this.constructor === Vue;
+        // console.log(`rootId:${rootVue_uid}; thisId:${this._uid}`);
+        // if (rootVue_uid !== 3) {
+        //   console.log(this);
+        // }
+        if (isRoot) {
+          const el = document.getElementById('loading');
+          if (el) el.style.display = 'none';
+        }
+      },
+    });
+  },
+};
+
+Vue.use(Plugin, { baseUrl: process.env.VUE_APP_AXIOS_BASE_URL });

+ 4 - 0
src/plugins/meta.js

@@ -0,0 +1,4 @@
+import Vue from 'vue';
+import Meta from 'vue-meta';
+
+Vue.use(Meta);

+ 20 - 0
src/plugins/setting.js

@@ -0,0 +1,20 @@
+import Vue from 'vue';
+
+Vue.config.weixin = {
+  // baseUrl: process.env.BASE_URL + 'weixin',
+  baseUrl: 'http://10.16.8.209:9005',
+};
+
+Vue.config.stomp = {
+  // brokerURL: 'ws://http://free.liaoningdoupo.com/ws',
+  brokerURL: '/ws', // ws://${location.host}/ws
+  connectHeaders: {
+    host: 'visit',
+    login: 'visit', //visit
+    passcode: 'visit', //visit123
+  },
+  // debug: true,
+  reconnectDelay: 5000,
+  heartbeatIncoming: 4000,
+  heartbeatOutgoing: 4000,
+};

+ 65 - 0
src/plugins/stomp.js

@@ -0,0 +1,65 @@
+/**
+ * 基于WebStomp的消息处理插件
+ */
+
+import Vue from 'vue';
+import _ from 'lodash';
+import assert from 'assert';
+import { Client } from '@stomp/stompjs/esm5/client';
+
+const Plugin = {
+  install(Vue, options) {
+    assert(_.isObject(options));
+    if (options.debug && !_.isFunction(options.debug)) {
+      options.debug = str => {
+        console.log(str);
+      };
+    }
+    assert(_.isString(options.brokerURL));
+    if (!options.brokerURL.startsWith('ws://')) {
+      options.brokerURL = `ws://${location.host}${options.brokerURL}`;
+    }
+
+    // 3. 注入组件
+    Vue.mixin({
+      beforeDestroy: function() {
+        if (this.$stompClient) {
+          this.$stompClient.deactivate();
+          delete this.$stompClient;
+        }
+      },
+    });
+
+    // 4. 添加实例方法
+    Vue.prototype.$stomp = function(subscribes = {}) {
+      // connect to mq
+      const client = new Client(options);
+      client.onConnect = frame => {
+        // Do something, all subscribes must be done is this callback
+        // This is needed because this will be executed after a (re)connect
+        console.log('[stomp] connected');
+        Object.keys(subscribes)
+          .filter(p => _.isFunction(subscribes[p]))
+          .forEach(key => {
+            client.subscribe(key, subscribes[key]);
+          });
+      };
+
+      client.onStompError = frame => {
+        // Will be invoked in case of error encountered at Broker
+        // Bad login/passcode typically will cause an error
+        // Complaint brokers will set `message` header with a brief message. Body may contain details.
+        // Compliant brokers will terminate the connection after any error
+        console.log('Broker reported error: ' + frame.headers['message']);
+        console.log('Additional details: ' + frame.body);
+      };
+
+      client.activate();
+
+      this.$stompClient = client;
+    };
+  },
+};
+export default () => {
+  Vue.use(Plugin, Vue.config.stomp);
+};

+ 44 - 0
src/router/index.js

@@ -0,0 +1,44 @@
+import Vue from 'vue';
+import VueRouter from 'vue-router';
+Vue.use(VueRouter);
+
+const routes = [
+  {
+    path: '/',
+    name: 'index',
+    meta: { title: '首页' },
+    component: () => import('../views/index.vue'),
+  },
+  {
+    path: '/kjzx',
+    name: 'kjzx',
+    meta: { title: '科技咨讯' },
+    component: () => import('../views/kjzx/index.vue'),
+  },
+  {
+    path: '/kjpx',
+    name: 'kjpx',
+    meta: { title: '科技培训' },
+    component: () => import('../views/kjpx/index.vue'),
+  },
+  {
+    path: '/kjzy',
+    name: 'kjzy',
+    meta: { title: '科技资源' },
+    component: () => import('../views/kjzy/index.vue'),
+  },
+  {
+    path: '/kjfw',
+    name: 'kjfw',
+    meta: { title: '科技服务' },
+    component: () => import('../views/kjfw/index.vue'),
+  },
+];
+
+const router = new VueRouter({
+  mode: 'history',
+  base: process.env.NODE_ENV === 'development' ? '' : 'newsaltai',
+  routes,
+});
+
+export default router;

+ 54 - 0
src/store/concolumn.js

@@ -0,0 +1,54 @@
+//第一步
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  //接口地址
+  repair: `/api/servicealtai/concolumn`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  //查询列表 skip:第一页,limit:第一页显示的数据,info:其余查询参数
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    //连接接口。。。。
+    const res = await this.$axios.$get(`${api.repair}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    //把数据集合res返回
+    return res;
+  },
+  //创建数据  payload是添加form表单中的数据集合  创建数据的时候需要拿到form表单里面的数据
+  async create({ commit }, payload) {
+    //通过$axios提交post请求????
+    const res = await this.$axios.$post(`${api.repair}`, payload);
+    return res;
+  },
+  //查询详情,payload:参数位,一般传当前数据id
+  async fetch({ commit }, payload) {
+    //有/一般都是路径
+    const res = await this.$axios.$get(`${api.repair}/${payload}`);
+    return res;
+  },
+  //修改:id: 当前数据id, data: 当前修改数据的新form表单
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.repair}/update/${id}`, data);
+    return res;
+  },
+  //删除:payload:参数位,一般传当前数据id
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.repair}/${payload}`);
+    return res;
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 54 - 0
src/store/connews.js

@@ -0,0 +1,54 @@
+//第一步
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  //接口地址
+  repair: `/api/servicealtai/connews`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  //查询列表 skip:第一页,limit:第一页显示的数据,info:其余查询参数
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    //连接接口。。。。
+    const res = await this.$axios.$get(`${api.repair}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    //把数据集合res返回
+    return res;
+  },
+  //创建数据  payload是添加form表单中的数据集合  创建数据的时候需要拿到form表单里面的数据
+  async create({ commit }, payload) {
+    //通过$axios提交post请求????
+    const res = await this.$axios.$post(`${api.repair}`, payload);
+    return res;
+  },
+  //查询详情,payload:参数位,一般传当前数据id
+  async fetch({ commit }, payload) {
+    //有/一般都是路径
+    const res = await this.$axios.$get(`${api.repair}/${payload}`);
+    return res;
+  },
+  //修改:id: 当前数据id, data: 当前修改数据的新form表单
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.repair}/update/${id}`, data);
+    return res;
+  },
+  //删除:payload:参数位,一般传当前数据id
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.repair}/${payload}`);
+    return res;
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 26 - 0
src/store/index.js

@@ -0,0 +1,26 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import siteinfo from './siteinfo';
+import links from './links';
+import connews from './connews';
+import concolumn from './concolumn';
+import trainnews from './trainnews';
+import traincolumn from './traincolumn';
+import videomeet from './videomeet';
+
+Vue.use(Vuex);
+
+export default new Vuex.Store({
+  state: {},
+  mutations: {},
+  actions: {},
+  modules: {
+    siteinfo,
+    links,
+    connews,
+    concolumn,
+    trainnews,
+    traincolumn,
+    videomeet,
+  },
+});

+ 54 - 0
src/store/links.js

@@ -0,0 +1,54 @@
+//第一步
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  //接口地址
+  repair: `/api/servicealtai/links`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  //查询列表 skip:第一页,limit:第一页显示的数据,info:其余查询参数
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    //连接接口。。。。
+    const res = await this.$axios.$get(`${api.repair}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    //把数据集合res返回
+    return res;
+  },
+  //创建数据  payload是添加form表单中的数据集合  创建数据的时候需要拿到form表单里面的数据
+  async create({ commit }, payload) {
+    //通过$axios提交post请求????
+    const res = await this.$axios.$post(`${api.repair}`, payload);
+    return res;
+  },
+  //查询详情,payload:参数位,一般传当前数据id
+  async fetch({ commit }, payload) {
+    //有/一般都是路径
+    const res = await this.$axios.$get(`${api.repair}/${payload}`);
+    return res;
+  },
+  //修改:id: 当前数据id, data: 当前修改数据的新form表单
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.repair}/update/${id}`, data);
+    return res;
+  },
+  //删除:payload:参数位,一般传当前数据id
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.repair}/${payload}`);
+    return res;
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 47 - 0
src/store/login.js

@@ -0,0 +1,47 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  loginInfo: `/api/jh/v1/login`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.loginInfo}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    return res;
+  },
+  async login({ commit }, { user }) {
+    const res = await this.$axios.$post(`${api.loginInfo}`, user);
+    if (res.errcode === 0) {
+      localStorage.setItem('user', JSON.stringify(res.data));
+      commit('setUser', res.data, { root: true });
+    }
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.loginInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.loginInfo}/${id}`, data);
+    return res;
+  },
+
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.loginInfo}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 54 - 0
src/store/siteinfo.js

@@ -0,0 +1,54 @@
+//第一步
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  //接口地址
+  repair: `/api/servicealtai/siteinfo`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  //查询列表 skip:第一页,limit:第一页显示的数据,info:其余查询参数
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    //连接接口。。。。
+    const res = await this.$axios.$get(`${api.repair}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    //把数据集合res返回
+    return res;
+  },
+  //创建数据  payload是添加form表单中的数据集合  创建数据的时候需要拿到form表单里面的数据
+  async create({ commit }, payload) {
+    //通过$axios提交post请求????
+    const res = await this.$axios.$post(`${api.repair}`, payload);
+    return res;
+  },
+  //查询详情,payload:参数位,一般传当前数据id
+  async fetch({ commit }, payload) {
+    //有/一般都是路径
+    const res = await this.$axios.$get(`${api.repair}/${payload}`);
+    return res;
+  },
+  //修改:id: 当前数据id, data: 当前修改数据的新form表单
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.repair}/update/${id}`, data);
+    return res;
+  },
+  //删除:payload:参数位,一般传当前数据id
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.repair}/${payload}`);
+    return res;
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 54 - 0
src/store/traincolumn.js

@@ -0,0 +1,54 @@
+//第一步
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  //接口地址
+  repair: `/api/servicealtai/traincolumn`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  //查询列表 skip:第一页,limit:第一页显示的数据,info:其余查询参数
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    //连接接口。。。。
+    const res = await this.$axios.$get(`${api.repair}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    //把数据集合res返回
+    return res;
+  },
+  //创建数据  payload是添加form表单中的数据集合  创建数据的时候需要拿到form表单里面的数据
+  async create({ commit }, payload) {
+    //通过$axios提交post请求????
+    const res = await this.$axios.$post(`${api.repair}`, payload);
+    return res;
+  },
+  //查询详情,payload:参数位,一般传当前数据id
+  async fetch({ commit }, payload) {
+    //有/一般都是路径
+    const res = await this.$axios.$get(`${api.repair}/${payload}`);
+    return res;
+  },
+  //修改:id: 当前数据id, data: 当前修改数据的新form表单
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.repair}/update/${id}`, data);
+    return res;
+  },
+  //删除:payload:参数位,一般传当前数据id
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.repair}/${payload}`);
+    return res;
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 54 - 0
src/store/trainnews.js

@@ -0,0 +1,54 @@
+//第一步
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  //接口地址
+  repair: `/api/servicealtai/trainnews`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  //查询列表 skip:第一页,limit:第一页显示的数据,info:其余查询参数
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    //连接接口。。。。
+    const res = await this.$axios.$get(`${api.repair}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    //把数据集合res返回
+    return res;
+  },
+  //创建数据  payload是添加form表单中的数据集合  创建数据的时候需要拿到form表单里面的数据
+  async create({ commit }, payload) {
+    //通过$axios提交post请求????
+    const res = await this.$axios.$post(`${api.repair}`, payload);
+    return res;
+  },
+  //查询详情,payload:参数位,一般传当前数据id
+  async fetch({ commit }, payload) {
+    //有/一般都是路径
+    const res = await this.$axios.$get(`${api.repair}/${payload}`);
+    return res;
+  },
+  //修改:id: 当前数据id, data: 当前修改数据的新form表单
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.repair}/update/${id}`, data);
+    return res;
+  },
+  //删除:payload:参数位,一般传当前数据id
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.repair}/${payload}`);
+    return res;
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 54 - 0
src/store/videomeet.js

@@ -0,0 +1,54 @@
+//第一步
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  //接口地址
+  repair: `/api/servicealtai/videomeet`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  //查询列表 skip:第一页,limit:第一页显示的数据,info:其余查询参数
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    //连接接口。。。。
+    const res = await this.$axios.$get(`${api.repair}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    //把数据集合res返回
+    return res;
+  },
+  //创建数据  payload是添加form表单中的数据集合  创建数据的时候需要拿到form表单里面的数据
+  async create({ commit }, payload) {
+    //通过$axios提交post请求????
+    const res = await this.$axios.$post(`${api.repair}`, payload);
+    return res;
+  },
+  //查询详情,payload:参数位,一般传当前数据id
+  async fetch({ commit }, payload) {
+    //有/一般都是路径
+    const res = await this.$axios.$get(`${api.repair}/${payload}`);
+    return res;
+  },
+  //修改:id: 当前数据id, data: 当前修改数据的新form表单
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.repair}/update/${id}`, data);
+    return res;
+  },
+  //删除:payload:参数位,一般传当前数据id
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.repair}/${payload}`);
+    return res;
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 117 - 0
src/util/axios-wrapper.js

@@ -0,0 +1,117 @@
+/* eslint-disable no-console */
+/* eslint-disable no-param-reassign */
+
+import _ from 'lodash';
+import Axios from 'axios';
+import { Util, Error } from 'naf-core';
+// import { Indicator } from 'mint-ui';
+import util from './user-util';
+
+const { trimData, isNullOrUndefined } = Util;
+const { ErrorCode } = Error;
+
+let currentRequests = 0;
+
+export default class AxiosWrapper {
+  constructor({ baseUrl = '', unwrap = true } = {}) {
+    this.baseUrl = baseUrl;
+    this.unwrap = unwrap;
+  }
+
+  // 替换uri中的参数变量
+  static merge(uri, query = {}) {
+    if (!uri.includes(':')) {
+      return uri;
+    }
+    const keys = [];
+    const regexp = /\/:([a-z0-9_]+)/gi;
+    let res;
+    // eslint-disable-next-line no-cond-assign
+    while ((res = regexp.exec(uri)) != null) {
+      keys.push(res[1]);
+    }
+    keys.forEach(key => {
+      if (!isNullOrUndefined(query[key])) {
+        uri = uri.replace(`:${key}`, query[key]);
+      }
+    });
+    return uri;
+  }
+
+  $get(uri, query, options) {
+    return this.$request(uri, null, query, options);
+  }
+
+  $post(uri, data = {}, query, options) {
+    return this.$request(uri, data, query, options);
+  }
+  $delete(uri, data = {}, router, query, options = {}) {
+    options = { ...options, method: 'delete' };
+    return this.$request(uri, data, query, options, router);
+  }
+  async $request(uri, data, query, options) {
+    // TODO: 合并query和options
+    if (_.isObject(query) && _.isObject(options)) {
+      options = { ...options, params: query, method: 'get' };
+    } else if (_.isObject(query) && !query.params) {
+      options = { params: query };
+    } else if (_.isObject(query) && query.params) {
+      options = query;
+    }
+    if (!options) options = {};
+    if (options.params) options.params = trimData(options.params);
+    const url = AxiosWrapper.merge(uri, options.params);
+    currentRequests += 1;
+    // Indicator.open({
+    //   spinnerType: 'fading-circle',
+    // });
+
+    try {
+      const axios = Axios.create({
+        baseURL: this.baseUrl,
+      });
+      axios.defaults.headers.common.Authorization = util.token;
+      let res = await axios.request({
+        method: isNullOrUndefined(data) ? 'get' : 'post',
+        url,
+        data,
+        responseType: 'json',
+        ...options,
+      });
+      res = res.data;
+      const { errcode, errmsg, details } = res;
+      if (errcode) {
+        console.warn(`[${uri}] fail: ${errcode}-${errmsg} ${details}`);
+        return res;
+      }
+      // unwrap data
+      if (this.unwrap) {
+        res = _.omit(res, ['errmsg', 'details']);
+        const keys = Object.keys(res);
+        if (keys.length === 1 && keys.includes('data')) {
+          res = res.data;
+        }
+      }
+      return res;
+    } catch (err) {
+      let errmsg = '接口请求失败,请稍后重试';
+      if (err.response) {
+        const { status } = err.response;
+        if (status === 401) errmsg = '用户认证失败,请重新登录';
+        if (status === 403) errmsg = '当前用户不允许执行该操作';
+      }
+      console.error(
+        `[AxiosWrapper] 接口请求失败: ${err.config && err.config.url} - 
+        ${err.message}`
+      );
+      return { errcode: ErrorCode.SERVICE_FAULT, errmsg, details: err.message };
+    } finally {
+    /* eslint-disable */
+      currentRequests -= 1;
+      if (currentRequests <= 0) {
+        currentRequests = 0;
+        // Indicator.close();
+      }
+    }
+  }
+}

+ 10 - 0
src/util/filters.js

@@ -0,0 +1,10 @@
+import _ from 'lodash';
+
+const filters = {
+  getName(object) {
+    const { data, searchItem } = object;
+    return _.get(data, searchItem) === undefined ? '' : _.get(data, searchItem);
+  },
+};
+
+export default filters;

+ 50 - 0
src/util/methods-util.js

@@ -0,0 +1,50 @@
+import { Util } from 'naf-core';
+
+const { isNullOrUndefined } = Util;
+
+export default {
+  //判断信息是否过期
+  isDateOff(dataDate) {
+    const now = new Date(new Date().getTime() - 24 * 60 * 60 * 1000);
+    dataDate = new Date(dataDate);
+    return now.getTime() <= dataDate.getTime();
+  },
+  //判断企业是否可以执行此动作/显示
+  checkCorp(data) {
+    const { role, unit, selfUnit, status, displayType, userid } = data;
+    if (!isNullOrUndefined(selfUnit) && !isNullOrUndefined(status)) {
+      return role === 'corp' && selfUnit === unit && status === '0';
+    } else if (!isNullOrUndefined(displayType)) {
+      if (role === 'corp') {
+        return role === displayType;
+      } else {
+        return role === displayType && !isNullOrUndefined(userid);
+      }
+    }
+  },
+  //获取url的参数params
+  getParams() {
+    let str = location.href;
+    let num = str.indexOf('?');
+    const param = {};
+    str = str.substr(num + 1);
+    let num2 = str.indexOf('#');
+    let str2 = '';
+    if (num2 > 0) {
+      str2 = str.substr(0, num2);
+    } else {
+      num2 = str.indexOf('/');
+      str2 = str.substr(0, num2);
+    }
+    const arr = str2.split('&');
+    for (let i = 0; i < arr.length; i++) {
+      num = arr[i].indexOf('=');
+      if (num > 0) {
+        const name = arr[i].substring(0, num);
+        const value = arr[i].substr(num + 1);
+        param[name] = decodeURI(value);
+      }
+    }
+    return param;
+  },
+};

+ 69 - 0
src/util/user-util.js

@@ -0,0 +1,69 @@
+/* eslint-disable no-console */
+export default {
+  get user() {
+    const val = sessionStorage.getItem('user');
+    try {
+      if (val) return JSON.parse(val);
+    } catch (err) {
+      console.error(err);
+    }
+    return null;
+  },
+  set user(userinfo) {
+    sessionStorage.setItem('user', JSON.stringify(userinfo));
+  },
+  get token() {
+    return sessionStorage.getItem('token');
+  },
+  set token(token) {
+    sessionStorage.setItem('token', token);
+  },
+  get openid() {
+    return sessionStorage.getItem('openid');
+  },
+  set openid(openid) {
+    sessionStorage.setItem('openid', openid);
+  },
+  get isGuest() {
+    return !this.user || this.user.role === 'guest';
+  },
+  save({ userinfo, token }) {
+    sessionStorage.setItem('user', JSON.stringify(userinfo));
+    sessionStorage.setItem('token', token);
+  },
+
+  get corpInfo() {
+    const val = sessionStorage.getItem('corpInfo');
+    if (val) return JSON.parse(val);
+    return null;
+  },
+  set corpInfo(corpInfo) {
+    sessionStorage.setItem('corpInfo', JSON.stringify(corpInfo));
+  },
+  saveCorpInfo(corpInfo) {
+    sessionStorage.setItem('corpInfo', JSON.stringify(corpInfo));
+  },
+
+  get unit() {
+    const val = sessionStorage.getItem('unit');
+    if (val) return JSON.parse(val);
+    return null;
+  },
+  set unit(unitList) {
+    sessionStorage.setItem('unit', JSON.stringify(unitList));
+  },
+  saveUnit(unitList) {
+    sessionStorage.setItem('unit', JSON.stringify(unitList));
+  },
+  get userInfo() {
+    const val = sessionStorage.getItem('userInfo');
+    if (val) return JSON.parse(val);
+    return null;
+  },
+  set userInfo(userInfo) {
+    sessionStorage.setItem('userInfo', JSON.stringify(userInfo));
+  },
+  saveUserInfo(userInfo) {
+    sessionStorage.setItem('userInfo', JSON.stringify(userInfo));
+  },
+};

+ 146 - 0
src/views/index copy.vue

@@ -0,0 +1,146 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="one">
+              <el-col :span="9" class="left animate__animated animate__backInUp">
+                <maps></maps>
+              </el-col>
+              <el-col :span="15" class="right animate__animated animate__backInDown">
+                <zxzx></zxzx>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="two">
+              <el-col :span="8" class="a animate__animated animate__fadeInLeft">
+                <tztg></tztg>
+              </el-col>
+              <el-col :span="8" class="a animate__animated animate__fadeIn">
+                <zcfg></zcfg>
+              </el-col>
+              <el-col :span="8" class="a animate__animated animate__fadeInRight">
+                <zxfw></zxfw>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="three animate__animated animate__fadeIn">
+              <links :linkList="linkList"></links>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+import links from '@/components/common/links.vue';
+// 首页
+import maps from '@/layout/index/maps.vue';
+import zxzx from '@/layout/index/zxzx.vue';
+import tztg from '@/layout/index/tztg.vue';
+import zcfg from '@/layout/index/zcfg.vue';
+import zxfw from '@/layout/index/zxfw.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+    links,
+    // 首页
+    maps,
+    zxzx,
+    tztg,
+    zcfg,
+    zxfw,
+  },
+  data: function() {
+    return {
+      linkList: [
+        {
+          pic: require('@a/link.jpg'),
+        },
+        {
+          pic: require('@a/link2.jpg'),
+        },
+        {
+          pic: require('@a/link3.jpg'),
+        },
+        {
+          pic: require('@a/link.jpg'),
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 10px 0;
+  .one {
+    height: 350px;
+    overflow: hidden;
+    margin: 0 0 10px 0;
+    .left {
+      height: 350px;
+      background: #fff;
+      margin: 0 10px 0 0;
+    }
+    .right {
+      width: 740px;
+      height: 350px;
+      background: #fff;
+    }
+  }
+  .two {
+    height: 340px;
+    overflow: hidden;
+    margin: 0 0 10px 0;
+    .a {
+      width: 393px;
+      height: 340px;
+      margin: 0 10px 0 0;
+      overflow: hidden;
+      background: #fff;
+    }
+    .a:last-child {
+      margin: 0;
+    }
+  }
+  .three {
+    height: 100px;
+    overflow: hidden;
+    background: #fff;
+  }
+}
+</style>

+ 343 - 0
src/views/index.vue

@@ -0,0 +1,343 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="one">
+              <el-col :span="9" class="left">
+                <el-image :src="map"></el-image>
+                <p>创新地图提供科技企业的分布和位置信息</p>
+              </el-col>
+              <el-col :span="15" class="right">
+                <el-col :span="24" class="top">
+                  <el-col :span="20" class="topLeft">
+                    <span></span>
+                    <span>最新资讯</span>
+                  </el-col>
+                  <el-col :span="4" class="topRight">
+                    <i class="el-icon-more"></i>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <el-col :span="24" class="zxzxList" v-for="(item, index) in zxzxList" :key="index">
+                    <el-col :span="20" class="title textOver">
+                      <span></span>
+                      {{ item.title }}
+                    </el-col>
+                    <el-col :span="4" class="date textOver">
+                      {{ item.date }}
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="two">
+              <el-col :span="8" class="a">
+                <el-col :span="24" class="top">
+                  <el-col :span="20" class="topLeft">
+                    <span></span>
+                    <span>通知通告</span>
+                  </el-col>
+                  <el-col :span="4" class="topRight">
+                    <i class="el-icon-more"></i>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <el-col :span="24" class="tztgList" v-for="(item, index) in tztgList" :key="index">
+                    <el-col :span="20" class="title">
+                      <span></span>
+                      {{ item.title }}
+                    </el-col>
+                    <el-col :span="4" class="date textOver">
+                      {{ item.date }}
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="8" class="a">
+                <el-col :span="24" class="top">
+                  <el-col :span="20" class="topLeft">
+                    <span></span>
+                    <span>政策法规</span>
+                  </el-col>
+                  <el-col :span="4" class="topRight">
+                    <i class="el-icon-more"></i>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <el-col :span="24" class="tztgList" v-for="(item, index) in zcfgList" :key="index">
+                    <el-col :span="20" class="title">
+                      <span></span>
+                      {{ item.title }}
+                    </el-col>
+                    <el-col :span="4" class="date textOver">
+                      {{ item.date }}
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="8" class="a">
+                <el-col :span="24" class="top">
+                  <el-col :span="20" class="topLeft">
+                    <span></span>
+                    <span>科技服务</span>
+                  </el-col>
+                  <el-col :span="4" class="topRight">
+                    <i class="el-icon-more"></i>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <el-col :span="12" class="kjfwList" v-for="(item, index) in kjfwList" :key="index">
+                    <el-link :underline="false" :href="item.href">
+                      <el-image :src="item.url"></el-image>
+                    </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="three">
+              <links :linkList="linkList"></links>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+import links from '@/components/common/links.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+    links,
+  },
+  data: function() {
+    return {
+      // 地图
+      map: require('@a/map.jpg'),
+      // 最新资讯
+      zxzxList: [
+        {
+          title: '测试标题',
+          date: '2020-10-29',
+        },
+        {
+          title: '九条数据',
+          date: '2020-10-29',
+        },
+      ],
+      // 通知通告
+      tztgList: [
+        {
+          title: '测试标题',
+          date: '10-10',
+        },
+        {
+          title: '五条数据',
+          date: '10-10',
+        },
+      ],
+      // 政策法规
+      zcfgList: [
+        {
+          title: '测试标题',
+          date: '10-10',
+        },
+        {
+          title: '五条数据',
+          date: '10-10',
+        },
+      ],
+      // 科技服务
+      kjfwList: [
+        { url: require('../assets/service1.jpg'), href: '' },
+        { url: require('../assets/service2.jpg'), href: '' },
+        { url: require('../assets/service3.jpg'), href: '' },
+        { url: require('../assets/service4.jpg'), href: '' },
+        { url: require('../assets/service5.jpg'), href: '' },
+        { url: require('../assets/service6.jpg'), href: '' },
+        { url: require('../assets/service7.jpg'), href: '' },
+        { url: require('../assets/service8.jpg'), href: '' },
+      ],
+      // 友情链接
+      linkList: [{ pic: require('@a/link.jpg') }, { pic: require('@a/link2.jpg') }, { pic: require('@a/link3.jpg') }, { pic: require('@a/link.jpg') }],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 10px 0;
+  .one {
+    height: 350px;
+    overflow: hidden;
+    margin: 0 0 10px 0;
+    .left {
+      position: relative;
+      height: 350px;
+      background: #fff;
+      margin: 0 10px 0 0;
+      padding: 10px;
+      .el-image {
+        width: 100%;
+        height: 330px;
+      }
+      p {
+        position: absolute;
+        bottom: 15px;
+        width: 91%;
+        color: #fff;
+        padding: 0 10px;
+      }
+    }
+    .right {
+      width: 740px;
+      height: 350px;
+      background: #fff;
+      padding: 0 20px;
+      .list {
+        height: 265px;
+        overflow: hidden;
+        .zxzxList {
+          padding: 0 0 9px 0;
+          .title {
+            color: #555;
+            span {
+              display: inline-block;
+              width: 4px;
+              height: 4px;
+              background: #666;
+              border-radius: 90px;
+              position: relative;
+              top: -4px;
+            }
+          }
+          .date {
+            text-align: right;
+            color: #555;
+          }
+        }
+      }
+    }
+  }
+  .two {
+    height: 340px;
+    overflow: hidden;
+    margin: 0 0 10px 0;
+    .a {
+      width: 393px;
+      height: 340px;
+      margin: 0 10px 0 0;
+      overflow: hidden;
+      background: #fff;
+      padding: 0 20px;
+      .list {
+        height: 255px;
+        overflow: hidden;
+        .tztgList {
+          padding: 0 0 10px 0;
+          .title {
+            color: #555;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            -webkit-line-clamp: 2;
+            word-break: break-all;
+            display: -webkit-box;
+            -webkit-box-orient: vertical;
+            height: 42px;
+            span {
+              display: inline-block;
+              width: 4px;
+              height: 4px;
+              background: #666;
+              border-radius: 90px;
+              position: relative;
+              top: -4px;
+            }
+          }
+          .date {
+            color: #555;
+            text-align: right;
+          }
+        }
+        .kjfwList {
+          width: 170px;
+          height: 53px;
+          margin: 0 6px 15px 0;
+          .el-image {
+            width: 170px;
+            height: 53px;
+          }
+        }
+      }
+    }
+    .a:last-child {
+      margin: 0;
+    }
+  }
+  .three {
+    height: 100px;
+    overflow: hidden;
+    background: #fff;
+  }
+  // 公用栏目名称样式
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    margin: 0 0 15px 0;
+    .topLeft {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .topRight {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 102 - 0
src/views/kjfw/index copy.vue

@@ -0,0 +1,102 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="one">
+              <el-col :span="12" class="left animate__animated animate__lightSpeedInLeft">
+                <zwgk></zwgk>
+              </el-col>
+              <el-col :span="12" class="right animate__animated animate__lightSpeedInRight">
+                <cyfw></cyfw>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="two animate__animated animate__fadeInUp">
+              <ggcy></ggcy>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+// 科技服务
+import zwgk from '@/layout/kjfw/zwgk.vue';
+import cyfw from '@/layout/kjfw/cyfw.vue';
+import ggcy from '@/layout/kjfw/ggcy.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+    // 科技服务
+    zwgk,
+    cyfw,
+    ggcy,
+  },
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 15px 0;
+  .one {
+    height: 330px;
+    overflow: hidden;
+    margin: 0 0 10px 0;
+    .left {
+      width: 595px;
+      height: 330px;
+      overflow: hidden;
+      margin: 0 10px 0 0;
+      background: #fff;
+    }
+    .right {
+      width: 595px;
+      height: 330px;
+      overflow: hidden;
+      background: #fff;
+    }
+  }
+  .two {
+    height: 235px;
+    overflow: hidden;
+    background: #fff;
+  }
+}
+</style>

+ 278 - 0
src/views/kjfw/index.vue

@@ -0,0 +1,278 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="one">
+              <el-col :span="12" class="left">
+                <el-col :span="24" class="top">
+                  <el-col :span="20" class="topLeft">
+                    <span></span>
+                    <span>政务公开</span>
+                  </el-col>
+                  <el-col :span="4" class="topRight" style="display:none">
+                    <i class="el-icon-more"></i>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <el-col :span="6" class="zwgkList" v-for="(item, index) in zwgkList" :key="index">
+                    <el-link :href="item.href" :underline="false">
+                      <el-image :src="item.url" style="width:130px;height:115px;"></el-image>
+                    </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="12" class="right">
+                <el-col :span="24" class="top">
+                  <el-col :span="20" class="topLeft">
+                    <span></span>
+                    <span>常用服务</span>
+                  </el-col>
+                  <el-col :span="4" class="topRight" style="display:none">
+                    <i class="el-icon-more"></i>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <el-col :span="8" class="cyfwList" v-for="(item, index) in cyfwList" :key="index">
+                    <el-link :href="item.href" :underline="false">
+                      <el-image :src="item.url" style="width:185px;height:110px;"></el-image>
+                    </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="two">
+              <el-col :span="24" class="top">
+                <el-col :span="20" class="topLeft">
+                  <span></span>
+                  <span>公众参与</span>
+                </el-col>
+                <el-col :span="4" class="topRight" style="display:none">
+                  <i class="el-icon-more"></i>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="list">
+                <el-col :span="4" class="gzcyList" v-for="(item, index) in gzcyList" :key="index">
+                  <el-link :href="item.href" :underline="false">
+                    <el-image :src="item.url" style="width:185px;height:146px;"></el-image>
+                  </el-link>
+                </el-col>
+              </el-col>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+  },
+  data: function() {
+    return {
+      // 政务公共
+      zwgkList: [
+        {
+          url: require('../../assets/zhengwu1.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/zhengwu2.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/zhengwu3.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/zhengwu4.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/zhengwu5.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/zhengwu6.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/zhengwu7.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/zhengwu8.jpg'),
+          href: '',
+        },
+      ],
+      // 常用服务
+      cyfwList: [
+        {
+          url: require('../../assets/changyong1.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/changyong2.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/changyong3.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/changyong4.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/changyong5.jpg'),
+          href: '',
+        },
+        {
+          url: require('../../assets/changyong6.jpg'),
+          href: '',
+        },
+      ],
+      // 公众参与
+      gzcyList: [
+        {
+          url: require('../../assets/gongzhong1.jpg'),
+          href1: '',
+        },
+        {
+          url: require('../../assets/gongzhong2.jpg'),
+          href1: '',
+        },
+        {
+          url: require('../../assets/gongzhong3.jpg'),
+          href1: '',
+        },
+        {
+          url: require('../../assets/gongzhong4.jpg'),
+          href1: '',
+        },
+        {
+          url: require('../../assets/gongzhong5.jpg'),
+          href1: '',
+        },
+        {
+          url: require('../../assets/gongzhong6.jpg'),
+          href1: '',
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 15px 0;
+  .one {
+    height: 330px;
+    overflow: hidden;
+    margin: 0 0 10px 0;
+    .left {
+      width: 595px;
+      height: 330px;
+      overflow: hidden;
+      margin: 0 10px 0 0;
+      background: #fff;
+      padding: 0 20px;
+      .list {
+        height: 245px;
+        overflow: hidden;
+        .zwgkList {
+          margin: 0 0 10px 0;
+        }
+      }
+    }
+    .right {
+      width: 595px;
+      height: 330px;
+      overflow: hidden;
+      background: #fff;
+      padding: 0 20px;
+      .list {
+        height: 245px;
+        overflow: hidden;
+        .cyfwList {
+          margin: 0 0 10px 0;
+        }
+      }
+    }
+  }
+  .two {
+    height: 235px;
+    overflow: hidden;
+    background: #fff;
+    padding: 0 20px;
+    .list {
+      height: 150px;
+      overflow: hidden;
+      .zwgkList {
+        text-align: center;
+      }
+    }
+  }
+  // 公用栏目名称样式
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    margin: 0 0 15px 0;
+    .topLeft {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .topRight {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 89 - 0
src/views/kjpx/index copy.vue

@@ -0,0 +1,89 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="one">
+              <el-col :span="10" class="left animate__animated animate__backInLeft">
+                <videos></videos>
+              </el-col>
+              <el-col :span="14" class="right animate__animated animate__backInRight">
+                <right></right>
+              </el-col>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+// 科技培训
+import videos from '@/layout/kjpx/videos.vue';
+import right from '@/layout/kjpx/right.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+    // 科技培训
+    videos,
+    right,
+  },
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 10px 0;
+  .one {
+    height: 615px;
+    overflow: hidden;
+    .left {
+      height: 615px;
+      overflow: hidden;
+      margin: 0 10px 0 0;
+      background: #fff;
+    }
+    .right {
+      width: 690px;
+      height: 615px;
+      background: #fff;
+    }
+  }
+}
+</style>

+ 316 - 0
src/views/kjpx/index.vue

@@ -0,0 +1,316 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="one">
+              <el-col :span="10" class="left">
+                <el-col :span="24" class="top">
+                  <el-col :span="20" class="topLeft">
+                    <span></span>
+                    <span>视频会议中心</span>
+                  </el-col>
+                  <el-col :span="4" class="topRight">
+                    <i class="el-icon-more"></i>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <el-col :span="24" class="videoList" v-for="(item, index) in videoList" :key="index">
+                    <el-col :span="3" class="date textOver">
+                      {{ item.date }}
+                    </el-col>
+                    <el-col :span="21" class="listright">
+                      <el-col :span="24" class="title textOver">
+                        {{ item.title }}
+                      </el-col>
+                      <el-col :span="24" class="brief">
+                        {{ item.brief }}
+                      </el-col>
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="14" class="right">
+                <el-tabs v-model="activeName" class="tabs">
+                  <el-tab-pane label="专题研讨" name="first">
+                    <el-col :span="24" class="list">
+                      <el-col :span="24" class="ztytList" v-for="(item, index) in ztytList" :key="index">
+                        <el-col :span="20" class="title textOver">
+                          <span></span>
+                          {{ item.title }}
+                        </el-col>
+                        <el-col :span="4" class="date textOver">
+                          {{ item.date }}
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                  </el-tab-pane>
+                  <el-tab-pane label="技术问答" name="second">
+                    <el-col :span="24" class="list">
+                      <el-col :span="24" class="ztytList" v-for="(item, index) in jswdList" :key="index">
+                        <el-col :span="20" class="title textOver">
+                          <span></span>
+                          {{ item.title }}
+                        </el-col>
+                        <el-col :span="4" class="date textOver">
+                          {{ item.date }}
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                  </el-tab-pane>
+                  <el-tab-pane label="行业研究" name="third">
+                    <el-col :span="24" class="list">
+                      <el-col :span="24" class="ztytList" v-for="(item, index) in hyyjList" :key="index">
+                        <el-col :span="20" class="title textOver">
+                          <span></span>
+                          {{ item.title }}
+                        </el-col>
+                        <el-col :span="4" class="date textOver">
+                          {{ item.date }}
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                  </el-tab-pane>
+                  <el-tab-pane label="教育培训" name="fourth">
+                    <el-col :span="24" class="list">
+                      <el-col :span="24" class="ztytList" v-for="(item, index) in jypxList" :key="index">
+                        <el-col :span="20" class="title textOver">
+                          <span></span>
+                          {{ item.title }}
+                        </el-col>
+                        <el-col :span="4" class="date textOver">
+                          {{ item.date }}
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                  </el-tab-pane>
+                </el-tabs>
+              </el-col>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+  },
+  data: function() {
+    return {
+      // 视频会议中心
+      videoList: [
+        {
+          title: '测试标题',
+          date: '10-10',
+          brief: '信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介',
+        },
+        {
+          title: '七条数据',
+          date: '10-10',
+          brief: '信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介信息简介',
+        },
+      ],
+      // 右侧信息
+      activeName: 'first',
+      // 专题研讨
+      ztytList: [
+        {
+          title: '专题研讨',
+          date: '2020-12-12',
+        },
+        {
+          title: '十六条数据',
+          date: '2020-12-12',
+        },
+      ],
+      // 技术问答
+      jswdList: [
+        {
+          title: '技术问答',
+          date: '2020-12-12',
+        },
+        {
+          title: '十六条数据',
+          date: '2020-12-12',
+        },
+      ],
+      // 行业研究
+      hyyjList: [
+        {
+          title: '行业研究',
+          date: '2020-12-12',
+        },
+        {
+          title: '十六条数据',
+          date: '2020-12-12',
+        },
+      ],
+      // 教育培训
+      jypxList: [
+        {
+          title: '教育培训',
+          date: '2020-12-12',
+        },
+        {
+          title: '十六条数据',
+          date: '2020-12-12',
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 10px 0;
+  .one {
+    height: 615px;
+    overflow: hidden;
+    .left {
+      height: 615px;
+      overflow: hidden;
+      margin: 0 10px 0 0;
+      background: #fff;
+      padding: 0 20px;
+      .list {
+        height: 530px;
+        overflow: hidden;
+        .videoList {
+          padding: 0 0 13px 0;
+          .date {
+            background: #005293;
+            text-align: center;
+            color: #fff;
+          }
+          .listright {
+            padding: 0 10px;
+            .title {
+              color: #005293;
+            }
+            .brief {
+              overflow: hidden;
+              text-overflow: ellipsis;
+              -webkit-line-clamp: 2;
+              word-break: break-all;
+              display: -webkit-box;
+              -webkit-box-orient: vertical;
+              color: #555;
+              height: 42px;
+            }
+          }
+        }
+      }
+    }
+    .right {
+      width: 690px;
+      height: 615px;
+      background: #fff;
+      padding: 0 20px;
+      .tabs {
+        height: 595px;
+        overflow: hidden;
+        margin: 20px 0 0 0;
+        .list {
+          height: 520px;
+          overflow: hidden;
+          .ztytList {
+            padding: 0 0 12px 0;
+            .title {
+              color: #555;
+              span {
+                display: inline-block;
+                width: 4px;
+                height: 4px;
+                background: #666;
+                border-radius: 90px;
+                position: relative;
+                top: -4px;
+              }
+            }
+            .date {
+              text-align: right;
+              color: #555;
+            }
+          }
+        }
+      }
+    }
+  }
+  // 公用栏目名称样式
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    margin: 0 0 15px 0;
+    .topLeft {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .topRight {
+      text-align: right;
+    }
+  }
+}
+/deep/.el-tabs__item.is-active {
+  color: #005293;
+}
+/deep/.el-tabs__active-bar {
+  background-color: #005293;
+}
+/deep/.el-tabs__item {
+  font-size: 20px;
+  line-height: 30px;
+}
+/deep/.el-tabs__item:hover {
+  color: #005293;
+}
+</style>

+ 105 - 0
src/views/kjzx/index copy.vue

@@ -0,0 +1,105 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="one">
+              <el-col :span="10" class="left">
+                <el-col :span="24" class="top animate__animated animate__backInDown">
+                  <tpxw></tpxw>
+                </el-col>
+                <el-col :span="24" class="down animate__animated animate__backInUp">
+                  <mtjj></mtjj>
+                </el-col>
+              </el-col>
+              <el-col :span="14" class="right animate__animated animate__fadeInRightBig">
+                <kjdt></kjdt>
+              </el-col>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+// 科技资讯
+import tpxw from '@/layout/kjzx/tpxw.vue';
+import mtjj from '@/layout/kjzx/mtjj.vue';
+import kjdt from '@/layout/kjzx/kjdt.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+    // 科技资讯
+    tpxw,
+    mtjj,
+    kjdt,
+  },
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 10px 0;
+  .one {
+    height: 680px;
+    overflow: hidden;
+    .left {
+      height: 680px;
+      overflow: hidden;
+      margin: 0 10px 0 0;
+      .top {
+        height: 340px;
+        background: #fff;
+        margin: 0 0 10px 0;
+      }
+      .down {
+        height: 330px;
+        overflow: hidden;
+        background: #fff;
+      }
+    }
+    .right {
+      width: 690px;
+      height: 680px;
+      background: #fff;
+    }
+  }
+}
+</style>

+ 262 - 0
src/views/kjzx/index.vue

@@ -0,0 +1,262 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="one">
+              <el-col :span="10" class="left">
+                <el-col :span="24" class="lefttop">
+                  <el-carousel height="340px">
+                    <el-carousel-item class="tpxwList" v-for="(item, index) in tpxwList" :key="index">
+                      <el-image :src="item.url" style="width:100%;height:340px;"></el-image>
+                      <p class="textOver">{{ item.title }}</p>
+                    </el-carousel-item>
+                  </el-carousel>
+                </el-col>
+                <el-col :span="24" class="leftdown">
+                  <el-col :span="24" class="top">
+                    <el-col :span="20" class="topLeft">
+                      <span></span>
+                      <span>最新资讯</span>
+                    </el-col>
+                    <el-col :span="4" class="topRight">
+                      <i class="el-icon-more"></i>
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="list">
+                    <el-col :span="24" class="zxzxList" v-for="(item, index) in zxzxList" :key="index">
+                      <el-col :span="20" class="title textOver">
+                        <span></span>
+                        {{ item.title }}
+                      </el-col>
+                      <el-col :span="4" class="date textOver">
+                        {{ item.date }}
+                      </el-col>
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="14" class="right">
+                <el-col :span="24" class="top">
+                  <el-col :span="20" class="topLeft">
+                    <span></span>
+                    <span>科技动态</span>
+                  </el-col>
+                  <el-col :span="4" class="topRight">
+                    <i class="el-icon-more"></i>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <el-col :span="24" class="kjdtList" v-for="(item, index) in kjdtList" :key="index">
+                    <el-col :span="20" class="title textOver">
+                      <span></span>
+                      {{ item.title }}
+                    </el-col>
+                    <el-col :span="4" class="date textOver">
+                      {{ item.date }}
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+  },
+  data: function() {
+    return {
+      // 图片新闻
+      tpxwList: [
+        {
+          title: '测试标题',
+          url: require('@a/news.jpg'),
+        },
+      ],
+      // 最新资讯
+      zxzxList: [
+        {
+          title: '测试标题',
+          date: '10-10',
+        },
+        {
+          title: '八条数据',
+          date: '10-10',
+        },
+      ],
+      kjdtList: [
+        {
+          title: '测试标题',
+          date: '2020-10-10',
+        },
+        {
+          title: '十八条数据',
+          date: '2020-10-10',
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 10px 0;
+  .one {
+    height: 680px;
+    overflow: hidden;
+    .left {
+      height: 680px;
+      overflow: hidden;
+      margin: 0 10px 0 0;
+      .lefttop {
+        height: 340px;
+        background: #fff;
+        margin: 0 0 10px 0;
+        .tpxwList {
+          p {
+            position: absolute;
+            bottom: 0;
+            width: 96%;
+            z-index: 999;
+            height: 30px;
+            line-height: 30px;
+            color: #fff;
+            padding: 0 10px;
+          }
+        }
+      }
+      .leftdown {
+        height: 330px;
+        overflow: hidden;
+        background: #fff;
+        padding: 0 20px;
+        .list {
+          height: 245px;
+          overflow: hidden;
+          .zxzxList {
+            padding: 0 0 10px 0;
+            .title {
+              color: #555;
+              span {
+                display: inline-block;
+                width: 4px;
+                height: 4px;
+                background: #666;
+                border-radius: 90px;
+                position: relative;
+                top: -4px;
+              }
+            }
+            .date {
+              text-align: right;
+              color: #555;
+            }
+          }
+        }
+      }
+    }
+    .right {
+      width: 690px;
+      height: 680px;
+      background: #fff;
+      padding: 0 20px;
+      .list {
+        height: 595px;
+        overflow: hidden;
+        .kjdtList {
+          padding: 0 0 11px 0;
+          .title {
+            color: #555;
+            span {
+              display: inline-block;
+              width: 4px;
+              height: 4px;
+              background: #666;
+              border-radius: 90px;
+              position: relative;
+              top: -4px;
+            }
+          }
+          .date {
+            text-align: right;
+            color: #555;
+          }
+        }
+        .kjdtList:nth-child(9) {
+          padding: 0 0 20px 0;
+          border-bottom: 1px solid #ccc;
+        }
+        .kjdtList:nth-child(10) {
+          padding: 20px 0 11px 0;
+        }
+      }
+    }
+  }
+  // 公用栏目名称样式
+  .top {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #ccc;
+    margin: 0 0 15px 0;
+    .topLeft {
+      span:nth-child(1) {
+        display: inline-block;
+        width: 4px;
+        height: 20px;
+        background: #005293;
+        margin: 0px 10px 0 0;
+        position: relative;
+        top: 3px;
+      }
+      span:nth-child(2) {
+        font-size: 20px;
+        color: #005293;
+      }
+    }
+    .topRight {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 61 - 0
src/views/kjzy/index.vue

@@ -0,0 +1,61 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24">
+          <top></top>
+        </el-col>
+        <el-col :span="24">
+          <menus></menus>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            科技资源
+          </div>
+        </el-col>
+        <el-col :span="24">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/components/common/top.vue';
+import menus from '@/components/common/menus.vue';
+import foot from '@/components/common/foot.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+  },
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.main {
+  min-height: 500px;
+  margin: 10px 0;
+}
+</style>

+ 36 - 0
vue.config.js

@@ -0,0 +1,36 @@
+const path = require('path');
+module.exports = {
+  publicPath: process.env.NODE_ENV === 'development' ? '/' : process.env.VUE_APP_ROUTER,
+  // 打包文件
+  outputDir: 'newsaltai',
+  configureWebpack: config => {
+    Object.assign(config, {
+      // 开发生产共同配置
+      resolve: {
+        alias: {
+          '@': path.resolve(__dirname, './src'),
+          '@c': path.resolve(__dirname, './src/components'),
+          '@a': path.resolve(__dirname, './src/assets'),
+        },
+      },
+    });
+  },
+  devServer: {
+    port: '8001',
+    //api地址前缀
+    proxy: {
+      '/files': {
+        target: 'http://free.liaoningdoupo.com',
+      },
+      '/api': {
+        target: 'http://127.0.0.1:8090',
+        changeOrigin: true,
+        ws: true,
+      },
+      '/ws': {
+        target: 'http://127.0.0.1:8090',
+        ws: true,
+      },
+    },
+  },
+};