tanyanfei 4 years ago
commit
d66b5bb313
68 changed files with 5789 additions and 0 deletions
  1. 12 0
      .gitignore
  2. 30 0
      README.md
  3. 5 0
      babel.config.js
  4. 71 0
      package.json
  5. BIN
      public/favicon.ico
  6. 18 0
      public/index.html
  7. 19 0
      src/App.vue
  8. 135 0
      src/api.js
  9. BIN
      src/assets/bg.png
  10. BIN
      src/assets/book.png
  11. BIN
      src/assets/book_medium.png
  12. BIN
      src/assets/checked_medium.png
  13. BIN
      src/assets/checked_small.png
  14. BIN
      src/assets/file_medium.png
  15. BIN
      src/assets/file_small.png
  16. BIN
      src/assets/group_small.png
  17. BIN
      src/assets/img.png
  18. BIN
      src/assets/logo.png
  19. BIN
      src/assets/mlt_medium.png
  20. BIN
      src/assets/mlt_small.png
  21. BIN
      src/assets/network.png
  22. BIN
      src/assets/network_medium.png
  23. BIN
      src/assets/radio-medium.png
  24. BIN
      src/assets/radio_small.png
  25. BIN
      src/assets/slt_medium.png
  26. BIN
      src/assets/slt_small.png
  27. BIN
      src/assets/survey_bg.png
  28. BIN
      src/assets/survey_logo.png
  29. BIN
      src/assets/title.png
  30. BIN
      src/assets/upload_medium.png
  31. BIN
      src/assets/upload_small.png
  32. BIN
      src/assets/图层 4.png
  33. BIN
      src/assets/图层 4@2x.png
  34. BIN
      src/assets/图层 525.png
  35. BIN
      src/assets/图层 525@2x.png
  36. 54 0
      src/components/Page.vue
  37. 95 0
      src/components/Subject.vue
  38. 147 0
      src/components/fuEditor/index.vue
  39. 585 0
      src/components/hotel.vue
  40. 539 0
      src/iconfont/demo.css
  41. 654 0
      src/iconfont/demo_index.html
  42. 101 0
      src/iconfont/iconfont.css
  43. BIN
      src/iconfont/iconfont.eot
  44. 1 0
      src/iconfont/iconfont.js
  45. 156 0
      src/iconfont/iconfont.json
  46. 89 0
      src/iconfont/iconfont.svg
  47. BIN
      src/iconfont/iconfont.ttf
  48. BIN
      src/iconfont/iconfont.woff
  49. BIN
      src/iconfont/iconfont.woff2
  50. 38 0
      src/main.js
  51. 52 0
      src/router.js
  52. 41 0
      src/store.js
  53. 34 0
      src/style/_base.scss
  54. 6 0
      src/style/_style.scss
  55. 240 0
      src/style/home.scss
  56. 35 0
      src/style/login.scss
  57. 99 0
      src/views/Home.vue
  58. 166 0
      src/views/Index.vue
  59. 163 0
      src/views/Login.vue
  60. 252 0
      src/views/data/index.vue
  61. 418 0
      src/views/journalQun/AddJournal.vue
  62. 338 0
      src/views/journalQun/Journal.vue
  63. 403 0
      src/views/journalQun/Organizer.vue
  64. 244 0
      src/views/journalQun/ShowJournal.vue
  65. 385 0
      src/views/journalQun/Subject.vue
  66. 3 0
      src/views/match/index.vue
  67. 148 0
      src/views/user/index.vue
  68. 13 0
      vue.config.js

+ 12 - 0
.gitignore

@@ -0,0 +1,12 @@
+node_modules
+.DS_Store
+dist/
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+*.class

+ 30 - 0
README.md

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

+ 5 - 0
babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/app'
+  ]
+}

+ 71 - 0
package.json

@@ -0,0 +1,71 @@
+{
+  "name": "admin",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve --open",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "ali-oss": "^6.2.1",
+    "cos-js-sdk-v5": "^0.5.20",
+    "echarts": "^4.9.0",
+    "element-ui": "^2.7.2",
+    "font-awesome": "^4.7.0",
+    "js-base64": "^2.5.2",
+    "qrcode.vue": "^1.7.0",
+    "url-search-params-polyfill": "^8.0.0",
+    "vue": "^2.6.6",
+    "vue-baidu-map": "^0.21.22",
+    "vue-router": "^3.0.1",
+    "vue-wordcloud": "^1.1.1",
+    "vuedraggable": "^2.24.3",
+    "vuex": "^3.0.1",
+    "wangeditor": "^3.1.1"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.1.0",
+    "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
+    "@babel/plugin-transform-runtime": "^7.1.0",
+    "@babel/preset-env": "^7.1.0",
+    "@babel/preset-react": "^7.0.0",
+    "@vue/cli-plugin-babel": "^3.5.0",
+    "@vue/cli-plugin-eslint": "^3.5.0",
+    "@vue/cli-service": "^3.5.0",
+    "axios": "^0.18.0",
+    "babel-loader": "^8.0.2",
+    "babel-polyfill": "^6.26.0",
+    "es6-promise": "^4.2.8",
+    "eslint": "^5.8.0",
+    "eslint-plugin-vue": "^5.0.0",
+    "node-sass": "^4.11.0",
+    "sass-loader": "^7.1.0",
+    "vue-cropper": "^0.4.9",
+    "vue-template-compiler": "^2.5.21"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/essential",
+      "eslint:recommended"
+    ],
+    "rules": {},
+    "parserOptions": {
+      "parser": "babel-eslint"
+    }
+  },
+  "postcss": {
+    "plugins": {
+      "autoprefixer": {}
+    }
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not ie <= 8"
+  ]
+}

BIN
public/favicon.ico


+ 18 - 0
public/index.html

@@ -0,0 +1,18 @@
+<!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>期刊微信公众号管理系统</title>
+    <script src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=uscumpiG2CkippMbzaC7njksj7OuL7hj"></script>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but admin 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>

+ 19 - 0
src/App.vue

@@ -0,0 +1,19 @@
+<template>
+  <div id="app">
+    <transition name="fade"
+		            mode="out-in">
+			<router-view></router-view>
+		</transition>
+  </div>
+</template>
+
+<style lang='scss'>
+
+</style>
+
+<script>
+
+export default {
+  
+}
+</script>

+ 135 - 0
src/api.js

@@ -0,0 +1,135 @@
+import axios from 'axios';
+// var baseURL='https://www.scxjc.club'
+var baseURL = ''
+axios.interceptors.request.use(
+	config => {
+		const token = localStorage.getItem('token');
+		// if (config.url.indexOf('downloadzip') >= 0) {
+		// if (token) { // 判断是否存在token,如果存在的话,则每个http header都加上token                      
+		// 	config.headers.Authorization = `${token}`;   
+		// } else {
+		// 	//未登录
+		// 	window.location.hash = "/login";
+		// }
+		// } 
+		return config;
+	},
+	err => {
+		return Promise.reject(err);
+	});
+axios.interceptors.response.use(function (response) {
+	// console.log(response.headers)
+	// IE 8-9 
+	if (response.data == null && response.config.responseType === 'json' && response.request.responseText != null) {
+		try {
+			// eslint-disable-next-line no-param-reassign
+			response.data = JSON.parse(response.request.responseText);
+		} catch (e) {
+			// ignored
+		}
+	}
+	// 对响应数据做点什么
+	if (response.data.code == 401) {
+		// window.location.hash = "/login";
+		// window.location.hash = "/";
+	}
+	if (response.data.code == 305) {
+		// window.location.hash = "/";
+	}
+	return response;
+}, function (error) {
+	// 对响应错误做点什么
+	if (error.request.status == 403) {
+		// window.location.hash = "/login";
+		window.location.hash = "/";
+	}
+	// console.log(Object.getOwnPropertyNames(error))
+	// console.log(error.request,error.message)
+	return Promise.reject(error);
+});
+export default {
+	//登录
+	login: params => {
+		return axios.post(`${baseURL}/api/account/login`, params);
+	},
+	logout: params => {
+		return axios.post(`${baseURL}/api/account/logout`, params);
+	},
+	// 全局账号信息
+	getAccountInfo: params => {
+		return axios.get(`${baseURL}/api/account/info`)
+	},
+	// 验证码
+	getCode: params => {
+		return axios.get(`${baseURL}/api/account/imgcode`)
+	},
+	// 账号
+	getUserList: params => {
+		return axios.get(`${baseURL}/api/admin/user/list`, { params: params })
+	},
+	getAllSysUserList: params => {
+		return axios.get(`${baseURL}/api/admin/user/all`, { params: params })
+	},
+	getUserinfoList: params => {
+		return axios.get(`${baseURL}/api/admin/userinfo/list`, { params: params })
+	},
+	// 获取用户待选期刊列表
+	getUserJournals: () => {
+		return axios.get(`${baseURL}/api/admin/user/journals`)
+	},
+	// 获取用户待选角色列表
+	getUserRoles: () => {
+		return axios.get(`${baseURL}/api/admin/user/roles`)
+	},
+
+	//新增管理员
+	addUser: params => {
+		return axios.post(`${baseURL}/api/admin/user`, params);
+	},
+	// 修改管理员
+	editUser: params => {
+		return axios.put(`${baseURL}/api/admin/user`, params);
+	},
+	// 删除管理员
+	delUser: params => {
+		return axios.delete(`${baseURL}/api/admin/user`, { params: params });
+	},
+	// 获取数据
+	getPlayerRecord: params => {
+		return axios.get(`${baseURL}/api/admin/player/record/list`, { params: params });
+	},
+	addRecord: params => {
+		return axios.post(`${baseURL}/api/admin/player/record`, params);
+	},
+	editRecord: params => {
+		return axios.put(`${baseURL}/api/admin/player/record`, params);
+	},
+	// 比赛搜索列表
+	getMatchList: params => {
+		return axios.get(`${baseURL}/api/admin/match/search `, { params: params })
+	},
+	//获取所有模板列表
+	getAllTemplateList: params => {
+		return axios.get(`${baseURL}/api/admin/message/template/all`, { params: params })
+	},
+	// 新增角色
+	addRole: params => {
+		return axios.post(`${baseURL}/api/admin/role`, params);
+	},
+	// 修改角色
+	editRole: params => {
+		return axios.put(`${baseURL}/api/admin/role`, params);
+	},
+	delRole: params => {
+		return axios.delete(`${baseURL}/api/admin/role`, { params: params });
+	},
+	// 获取角色列表
+	getRoleList: params => {
+		return axios.get(`${baseURL}/api/admin/role/list`, { params: params });
+	},
+	// 获取角色详情
+	getRoleInfo: params => {
+		return axios.get(`${baseURL}/api/admin/role`, { params: params });
+	},
+
+}

BIN
src/assets/bg.png


BIN
src/assets/book.png


BIN
src/assets/book_medium.png


BIN
src/assets/checked_medium.png


BIN
src/assets/checked_small.png


BIN
src/assets/file_medium.png


BIN
src/assets/file_small.png


BIN
src/assets/group_small.png


BIN
src/assets/img.png


BIN
src/assets/logo.png


BIN
src/assets/mlt_medium.png


BIN
src/assets/mlt_small.png


BIN
src/assets/network.png


BIN
src/assets/network_medium.png


BIN
src/assets/radio-medium.png


BIN
src/assets/radio_small.png


BIN
src/assets/slt_medium.png


BIN
src/assets/slt_small.png


BIN
src/assets/survey_bg.png


BIN
src/assets/survey_logo.png


BIN
src/assets/title.png


BIN
src/assets/upload_medium.png


BIN
src/assets/upload_small.png


BIN
src/assets/图层 4.png


BIN
src/assets/图层 4@2x.png


BIN
src/assets/图层 525.png


BIN
src/assets/图层 525@2x.png


+ 54 - 0
src/components/Page.vue

@@ -0,0 +1,54 @@
+<style lang="scss">
+ @import '../style/style.scss';
+    .el-pagination{
+        li,button{
+            border: 1px solid #CACACA !important;
+            background-color: #fff !important;
+        }
+        .active{
+            border:none !important;
+            background: #3895FE !important;
+        }
+    }
+</style>
+<template>
+    <el-pagination
+    @current-change="getData"
+    background :page-size='page_size?page_size:20'
+    @size-change="handleSizeChange"
+    :current-page="current"
+    :page-sizes="[10,20, 30, 40, 50,60,70,80,90,100]"
+    layout="total,sizes,prev, pager, next"
+    :total="total">
+    </el-pagination>
+</template>
+<script>
+export default {
+    data(){
+        return{
+            page:1
+        }
+    },
+    props: {
+        total:'',
+        page_size:'',
+        current:''
+    },
+    methods:{
+        getData(type){
+            // if(type == 1){
+            //     this.data.pageNumber=this.data.pageNumber-1
+            // }else if(type == 2){
+            //     this.data.pageNumber=this.data.pageNumber+1
+            // }
+             this.page=type
+            this.$emit('pageChange')
+        },
+        handleSizeChange(val){
+            this.$emit('pageChange',val)
+        }
+    },
+    created(){
+    }
+}
+</script>

+ 95 - 0
src/components/Subject.vue

@@ -0,0 +1,95 @@
+<style lang="scss">
+ @import '../style/style.scss';
+    .sub{
+        .el-input{
+            width: 300px !important;
+        }
+    }
+</style>
+<template>
+    <span v-if='!subject_id'>
+        <el-cascader v-if='value' class="sub" :props='props' 
+        placeholder="请选择培训科目 / 作业类别 / 准操项目"
+        v-model="value1" @change="handleChange"
+        :options="data"></el-cascader>
+        <el-cascader v-else class="sub" :props='props1' clearable
+        placeholder="请选择培训科目 / 作业类别 / 准操项目"
+        v-model="value1" @change="handleChange"
+        :options="data"></el-cascader>
+    </span>
+    <span v-else>
+        <el-cascader class="sub" :props='props1' clearable
+        placeholder="请选择作业类别 / 准操项目"
+        v-model="value1" @change="handleChange"
+        :options="data">
+        </el-cascader>
+    </span>
+</template>   
+<script>
+export default {
+    data(){
+        return{
+            data:[],
+            value1:[],
+            props:{
+                label:'name',
+                checkStrictly:true,
+                value:'id'
+            },
+            props1:{
+                label:'name',
+                checkStrictly:true,
+                value:'name'
+            }
+        }
+    },
+    props: {
+        value:'',
+        subvalue:'',
+        subject_id:''
+    },
+    methods:{
+        getData(type){
+            this.$api.getSubList().then(res=>{
+                let data=res.data.data;
+                if(this.subject_id){
+                    for(let i=0;i<data.length;i++){
+                        if(data[i].id == this.subject_id){
+                            this.data=data[i].children
+                        }
+                    }
+                }else{
+                    this.data=res.data.data
+                }
+              
+          })
+        },
+        handleChange(value) {
+            var id='',that=this;
+            if(value.length>=3&&isNaN(value[0])){
+                var item1=this.data.filter(item=>item.name==value[0]),
+                    item2=item1[0].children.filter(item=>item.name==value[1]),
+                    item3=item2[0].children.filter(item=>item.name==value[2])
+                    id=item3[0].id;
+            }
+            setTimeout(function(){
+                let values=document.querySelector('.el-input__inner').value;
+                let items=values.split(' / ');
+                console.log(values)
+                that.$emit('subChange',items,id,value)
+            },100)
+            
+            
+        }
+    },
+    created(){
+        this.getData()
+        if(this.value){
+            this.value1=this.value   
+        }
+        if(this.subvalue){
+            this.value1=this.subvalue.split('|')
+        }
+    }
+}
+</script>

+ 147 - 0
src/components/fuEditor/index.vue

@@ -0,0 +1,147 @@
+<template lang="html">
+  <div class="editor">
+    <div ref="toolbar" class="toolbar">
+    </div>
+    <div ref="editor" class="text">
+    </div>
+  </div>
+</template>
+
+<script>
+import E from "wangeditor";
+export default {
+  name: "editoritem",
+  data() {
+    return {
+      // uploadPath,
+      editor: null,
+      info_: null
+    };
+  },
+  model: {
+    prop: "value",
+    event: "change"
+  },
+  props: {
+    value: {
+      type: String,
+      default: ""
+    },
+    isClear: {
+      type: Boolean,
+      default: false
+    }
+  },
+  watch: {
+    isClear(val) {
+      // 触发清除文本域内容
+      if (val) {
+        this.editor.txt.clear();
+        this.info_ = null;
+      }
+    },
+    value: function(value) {
+      if (value !== this.editor.txt.html()) {
+        this.editor.txt.html(value);
+      }
+    }
+    //value为编辑框输入的内容,这里我监听了一下值,当父组件调用得时候,如果给value赋值了,子组件将会显示父组件赋给的值
+  },
+  mounted() {
+    this.seteditor();
+    this.editor.txt.html(this.value);
+  },
+  methods: {
+    getEditor(){
+      return this.editor.txt.html();
+    },
+    seteditor() {
+
+      // http://192.168.2.125:8080/admin/storage/create
+      this.editor = new E(this.$refs.toolbar, this.$refs.editor);
+      this.editor.customConfig.uploadImgShowBase64 = false; // base 64 存储图片
+      this.editor.customConfig.uploadImgServer =
+        "/api/admin/uploadfile"; // 配置服务器端地址
+      this.editor.customConfig.uploadImgHeaders = {}; // 自定义 header
+      this.editor.customConfig.uploadFileName = "file"; // 后端接受上传文件的参数名
+      this.editor.customConfig.uploadImgMaxSize = 2 * 1024 * 1024; // 将图片大小限制为 2M
+      this.editor.customConfig.uploadImgMaxLength = 6; // 限制一次最多上传 3 张图片
+      this.editor.customConfig.uploadImgTimeout = 3 * 60 * 1000; // 设置超时时间
+
+      // 配置菜单
+      this.editor.customConfig.menus = [
+        "head", // 标题
+        "bold", // 粗体
+        "fontSize", // 字号
+        "fontName", // 字体
+        "italic", // 斜体
+        "underline", // 下划线
+        "strikeThrough", // 删除线
+        "foreColor", // 文字颜色
+        "backColor", // 背景颜色
+        "link", // 插入链接
+        "list", // 列表
+        "justify", // 对齐方式
+        "quote", // 引用
+        "emoticon", // 表情
+        "image", // 插入图片
+        "table", // 表格
+        "video", // 插入视频
+        "code", // 插入代码
+        "undo", // 撤销
+        "redo", // 重复
+        "fullscreen" // 全屏
+      ];
+
+      this.editor.customConfig.uploadImgHooks = {
+        fail: (xhr, editor, result) => {
+          // 插入图片失败回调
+        },
+        success: (xhr, editor, result) => {
+          // 图片上传成功回调
+        },
+        timeout: (xhr, editor) => {
+          // 网络超时的回调
+        },
+        error: (xhr, editor) => {
+          // 图片上传错误的回调
+        },
+        customInsert: (insertImg, result, editor) => {
+          // 图片上传成功,插入图片的回调
+          //result为上传图片成功的时候返回的数据,这里我打印了一下发现后台返回的是data:[{url:"路径的形式"},...]
+          // console.log(result.data[0].url)
+          //insertImg()为插入图片的函数
+          //循环插入图片
+          // for (let i = 0; i < 1; i++) {
+          // console.log(result)
+          let url = result.data;
+          insertImg(url);
+          // }
+        }
+      };
+      this.editor.customConfig.onchange = html => {
+        this.info_ = html; // 绑定当前逐渐地值
+        this.$emit("change", this.info_); // 将内容同步到父组件中
+      };
+      // 创建富文本编辑器
+      this.editor.create();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.editor {
+  width: 100%;
+  margin: 0 auto;
+  position: relative;
+  z-index: 0;
+  /deep/ .toolbar {
+    border: 1px solid #ccc;
+  }
+  /deep/ .text {
+    border: 1px solid #ccc;
+    min-height: 500px;
+  }
+}
+</style>

+ 585 - 0
src/components/hotel.vue

@@ -0,0 +1,585 @@
+<style lang='scss'>
+    .add_hotel{
+        max-height: 70vh;
+        overflow: auto;
+        .title{
+            font-size: 18px;
+            font-weight: 400;
+            margin-bottom: 20px;
+            // padding-left: 30px;
+            color: #333;
+        }
+        .hotel_type{
+            border: 1px solid #d9d9d9;
+            padding: 20px 0;
+            margin-bottom: 10px;
+            .el-input{
+                width: 130px;
+            }
+        }
+        .img_list{
+            li{
+                display: inline-block;
+                min-width: 140px;
+                height: 100px;
+                margin: 10px;
+                position: relative;
+                overflow: hidden;
+                img{
+                    height: 100%;
+                }
+                .el-icon-delete{
+                    color: red;
+                    font-size: 18px;
+                    cursor: pointer;
+                }
+                .move{
+                    position: absolute;
+                    bottom: 0;
+                    left: 0;
+                    width: 100%;
+                    text-align: center;
+                    background: rgba(0, 0, 0, 0.527);
+                    color: #fff;
+                    cursor: pointer;
+                }
+            }
+        }
+        .el-upload--picture-card{
+            width: 100px;
+            height: 100px;
+            line-height: 110px;
+        }
+        #map {
+            overflow: hidden;
+            width: 100%;
+            height: 400px;
+        }
+    }
+</style>
+<template>
+    <section class="add_hotel">
+        <el-form label-width="100px" size='small'>
+            <!-- 新增 编辑 绑定-->
+            <el-row v-if='h_status!=="view"'>
+                <el-col :span="12">
+                    <el-form-item label="会议名称" >
+                        <el-input disabled v-model="huiyi_name"></el-input>
+                    </el-form-item>
+                </el-col>                
+                <el-col :span="10">
+                   <el-form-item label="选择历史酒店">
+                        <el-select placeholder="请选择酒店" @change="id=h_id,getData()" v-model="h_id" clearable filterable>
+                            <el-option
+                                v-for="(item, index) in organizerList"
+                                :key="index"
+                                :label="item.name"
+                                :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>      
+                             
+                </el-col>
+                <el-col :span="24"><h2 class="title">填写酒店信息</h2>      </el-col>
+                <el-col :span="12">
+                    <el-form-item label="酒店名称" required>
+                        <el-input  v-model="form.name" clearable></el-input>
+                    </el-form-item>
+                </el-col> 
+                <el-col :span="10">
+                    <el-form-item label="酒店电话" required>
+                        <el-input  v-model="form.telephone" clearable></el-input>
+                    </el-form-item>
+                </el-col> 
+                <el-col :span="12">
+                    <el-form-item label="酒店地址" required>
+                        <el-input  v-model="form.address" clearable></el-input>
+                    </el-form-item>
+                </el-col> 
+                <el-col :span="10"  :offset="1">
+                    <el-button type="primary" size="small" @click="dialogVisible=true,initMap()">点击获取位置</el-button>
+                </el-col>
+                <el-col :span="24">
+                    <el-form-item label="酒店图片" required class="hotel_imgs">
+                            <ul class="img_list">
+                                <li v-for="(item,index) in form.imgs" :key='index'>
+                                    <img :src="item" alt="">
+                                    
+                                    <p class="move"><i @click="left_right(index,-1)"><i class="el-icon-caret-left"></i> 左移</i>
+                                    &nbsp;&nbsp;<i @click="remove(index)" class="el-icon-delete"></i>&nbsp;&nbsp;
+                                    <i @click="left_right(index,1)">右移<i class="el-icon-caret-right"></i> </i></p>
+                                </li>
+                                <li>
+                                    <el-upload  :on-success='imgchange'   style="height:100px;"
+                                        action="/api/admin/uploadfile" :show-file-list='false'
+                                        list-type="picture-card">
+                                        <i class="el-icon-plus"></i>
+                                    </el-upload>
+                                    <span style='font-size:12px;color:#999999;'>建议图片尺寸为:210*160</span>
+                                </li>
+                            </ul>
+                            
+                    </el-form-item>
+                </el-col>     
+                <el-col :span="24" >
+                    <h2 class="title">填写房型信息 </h2>                   
+                </el-col>
+                <el-col :span="24">
+                    <el-row v-for='(item,index) in type' :key='index'>
+                        <el-col :span="20" class="hotel_type" >
+                            <el-form :inline='true' label-width="70px" size="small">
+                                <el-form-item label="房型名称">
+                                    <el-input  v-model="item.name" clearable></el-input>
+                                </el-form-item>
+                                <el-form-item label="可住人数">
+                                    <el-input  v-model="item.enable_number" clearable></el-input>
+                                </el-form-item>
+                                <el-form-item label="房型数量">
+                                    <el-input  v-model="item.room_number" clearable></el-input>
+                                </el-form-item>
+                                <el-form-item label="面积">
+                                    <el-input   v-model="item.room_area" clearable></el-input>
+                                </el-form-item>
+                                <el-form-item label="楼层">
+                                    <el-input   v-model="item.floor" clearable></el-input>
+                                </el-form-item>
+                                <el-form-item label="床型">
+                                    <el-input   v-model="item.bed_type" clearable></el-input>
+                                </el-form-item>
+                                <el-form-item label="餐食">
+                                    <el-input   v-model="item.food_condition" clearable></el-input>
+                                </el-form-item>
+                                <el-form-item label="窗户">
+                                    <el-input   v-model="item.window_condition" clearable></el-input>
+                                </el-form-item>
+                                <el-form-item label="房型">
+                                    <el-select v-model="item.room_type" clearable>
+                                        <el-option
+                                            v-for="(i, idx) in hotel_type"
+                                            :key="idx"
+                                            :label="i.name"
+                                            :value="i.value">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                                <el-form-item label="房价">
+                                    <el-input   v-model="item.unit_price" clearable></el-input>
+                                </el-form-item>
+                                <br>
+                                <el-form-item label="酒店图片" class="hotel_imgs">
+                                    <ul class="img_list">
+                                        <li v-for="(img,i) in item.imgs" :key='"img"+i'>
+                                            <img :src="img" alt="">
+                                            <p class="move"><i @click="left_right1(i,index,-1)"><i class="el-icon-caret-left"></i> 左移</i>
+                                            &nbsp;&nbsp;<i @click="remove1(i,index)" class="el-icon-delete"></i>&nbsp;&nbsp;
+                                            <i @click="left_right1(i,index,1)">右移<i class="el-icon-caret-right"></i> </i></p>
+                                        </li>
+                                        <li>
+                                            <el-upload   
+                                                    :on-success="(res,file)=>{imgchange1(index,res,file)}"
+                                                    action="/api/admin/uploadfile" :show-file-list='false'
+                                                    list-type="picture-card" >
+                                                    <i class="el-icon-plus"></i>
+                                            </el-upload>
+                                        </li>
+                                    </ul>
+                                    
+                                    <!-- <span style='font-size:12px;color:#999999;'>建议图片尺寸为:210*160</span> -->
+                                </el-form-item>
+                            </el-form>               
+                        </el-col>
+                        <el-col :span="3" :offset='1'>
+                            <el-button @click="up_down(index,1)" size="mini" plain type="primary" icon='el-icon-top'></el-button><br><br>
+                            <el-button @click="up_down(index,-1)" size="mini" plain  type="primary" icon='el-icon-bottom'></el-button><br><br>
+                            <el-button @click="del(index)" size="mini" plain  type="danger" icon='el-icon-delete'></el-button>
+                        </el-col>
+                    </el-row>
+                </el-col>
+                <el-col :span='24'>
+                    <el-button @click="add_type" type="info" plain>添加房型</el-button>
+                </el-col>
+                <el-col :span='24' style="text-align:right;padding:10px;">
+                    <el-button size="small" @click="save" type="primary">保存</el-button>
+                    <el-button size="small" @click="save(1)" type="primary">继续添加酒店</el-button>
+                </el-col>
+            </el-row>
+            <!-- 查看 -->
+            <el-row v-if='h_status=="view"'>
+                <el-col :span="24">
+                    <el-form-item label="会议名称">
+                        <el-input disabled v-model="form.name"></el-input>
+                    </el-form-item>
+                </el-col>   
+                <el-col :span="24">
+                    <el-form-item label="酒店名称">
+                        <el-input disabled v-model="form.name"></el-input>
+                    </el-form-item>
+                </el-col>  
+                <el-col :span="24">
+                    <el-form-item label="酒店地址">
+                        <el-input disabled v-model="form.address"></el-input>
+                    </el-form-item>
+                </el-col>   
+                <el-col :span="24">
+                    <el-form-item label="酒店电话">
+                        <el-input disabled v-model="form.telephone"></el-input>
+                    </el-form-item>
+                </el-col>   
+                <el-col :span="24">
+                    <el-form-item label="酒店图片">
+                        <ul class="img_list">
+                            <li v-for="(img,i) in form.imgs" :key='"img"+i'>
+                                <img :src="img" alt="">
+                            </li>
+                        </ul>
+                    </el-form-item>
+                </el-col>   
+                <el-col :span="24" class="hotel_type" v-for='(item,index) in form.rooms' :key='"room"+index'>
+                    <p style="color:#999;padding:10px 33px;">房型1</p>
+                    <el-form-item label="房型名称">
+                        <p style="color:#666;">
+                            {{item.name}} | 数量:{{item.room_number}}间 | 可住人数:{{item.enable_number}}人 | 面积:{{item.room_area}}平方米 |
+                        楼层:{{item.floor}}层 | 床型:{{item.bed_type}} | 餐食:{{item.food_condition}} | 窗户:{{item.window_condition}} | 房型:{{item.room_type}} | 房价:{{item.unit_price}}
+                        </p>
+                    </el-form-item>
+                    <el-form-item label="房型图片">
+                        <ul class="img_list">
+                            <li v-for="(img,i) in item.imgs" :key='"img"+i'>
+                                <img :src="img" alt="">
+                            </li>
+                        </ul>
+                    </el-form-item>
+                    <el-form-item label-width="30px">
+                        已经预定:{{item.order}}  &nbsp;&nbsp;剩余:{{item.surplus_number}}
+                        <el-button @click="view(form.id,item.id)" size="big" type="text">查看报名老师</el-button>
+                    </el-form-item>
+                </el-col> 
+            </el-row>
+        </el-form>
+
+        <el-dialog
+            title="地图" :modal='false'
+            :visible.sync="dialogVisible"
+            width="600px">
+            <el-input @keyup.enter.native="localSearch" placeholder="请输入关键字搜索" v-model="keyword">
+                <el-button @click="localSearch" slot="append" icon="el-icon-search"></el-button>
+            </el-input>
+            <p style="margin:10px 0;" v-if='form.longitude'>经纬:{{form.longitude}} , {{form.latitude}}</p>
+            <div id="map"></div>
+            <span slot="footer" class="dialog-footer">
+                <el-button size="mini" @click="dialogVisible = false">取 消</el-button>
+                <el-button size="mini" type="primary" @click="dialogVisible = false">确 定</el-button>
+            </span>
+        </el-dialog>
+
+    </section>
+</template>
+<script>
+export default {
+    name:'hotel',
+    props:{
+        status:'',
+        cur_id:'',  //酒店ID
+        huiyi_id:'', //会议ID
+        huiyi_name:''
+    },
+    data(){
+        return{
+            id:'',
+            h_id:'',
+            dialogVisible:false,
+            h_status:'view',
+            organizerList:[],
+            cityList:[],
+            form:{
+                
+                imgs:[]
+            },
+            //房型
+            type:[
+                {imgs:[]}
+            ],
+            hotel_type:[
+                { name:'单人间',value:1 },
+                { name:'一人单住或标间合住',value:2 }
+            ],
+            local:null,
+            keyword:'',
+        }
+    },
+    methods:{
+        view(hid,rid){
+            this.$emit('view',{hotel_id:hid,room_id:rid})
+        },
+        getList(){
+            this.$api.getHotelList().then(res=>{
+                this.organizerList=res.data.data.list;
+            })
+        },
+        getData() {
+            this.$api.getHotel({id:this.id}).then((res) => {
+                if(res.data.data){
+                    this.form = res.data.data;
+                    this.type=res.data.data.rooms
+                }
+                
+            });
+        },
+        //添加房型
+        add_type(){
+            this.type.push({imgs:[]})
+        },
+        //删除
+        del(index){
+            this.type.splice(index,1)
+        },
+        //获取酒店图片列表
+        imgchange(file, fileList){
+            var img=this.form.imgs;
+            img.push(fileList.response.data)
+            this.form.imgs=img;
+        },
+        //获取酒店房型图片列表
+        imgchange1(i,file, fileList){
+            var img=this.type[i].imgs;
+            img.push(fileList.response.data)
+            this.type[i].imgs=img;
+        },
+        remove(index){
+            var img=this.form.imgs;
+            img.splice(index,1);
+            this.form.imgs=img;
+        },
+        remove1(i,index){
+            var img=this.type[index].imgs;
+            img.splice(i,1);
+            this.type[index].imgs=img;
+        },
+        left_right(index,type){
+            var img=this.form.imgs;
+            let cur=img[index];
+            if(type == -1){
+                //左移
+                if(index>0){
+                    let left= img[index-1];
+                    this.$set(img,index-1,cur);
+                    this.$set(img,index,left);
+                }
+            }else{
+                //右移
+                if(index<img.length-1){
+                    let right= img[index+1];
+                    this.$set(img,index+1,cur);
+                    this.$set(img,index,right);
+                }
+            }
+            this.form.imgs=img;
+        },
+        left_right1(i,index,type){
+            var h_type=this.type[index],img=h_type.imgs;
+            let cur=img[i];
+            if(type == -1){
+                //左移
+                if(i>0){
+                    let left= img[i-1];
+                    this.$set(img,i-1,cur);
+                    this.$set(img,i,left);
+                }
+            }else{
+                //右移
+                if(i<img.length-1){
+                    let right= img[i+1];
+                    this.$set(img,i+1,cur);
+                    this.$set(img,i,right);
+                }
+            }
+            h_type.imgs=img;
+            this.$set(this.type,index,h_type)
+        },
+        //房型移动
+        up_down(index,type){
+            var h_type=this.type,cur=h_type[index];
+            if(type == 1){
+                //上移
+                if(index>0){
+                    let left= h_type[index-1];
+                    this.$set(h_type,index-1,cur);
+                    this.$set(h_type,index,left);
+                }
+            }else{
+                //下移
+                if(index<h_type.length-1){
+                    let right= h_type[index+1];
+                    this.$set(h_type,index+1,cur);
+                    this.$set(h_type,index,right);
+                }
+            }
+            this.type=h_type
+        },
+        save(type){
+            var form=this.form;
+            form.rooms=this.type;
+            if(!form.name){
+                this.$message({
+                    message: '请输入酒店名称',
+                    type: 'error'
+                })
+                return
+            }
+            if(!form.telphone){
+                this.$message({
+                    message: '请输入酒店电话',
+                    type: 'error'
+                })
+                return
+            }
+            if(!form.address){
+                this.$message({
+                    message: '请输入酒店地址',
+                    type: 'error'
+                })
+                return
+            }
+            if(form.imgs.length<=0){
+                this.$message({
+                    message: '请上传酒店图片',
+                    type: 'error'
+                })
+                return
+            }
+            if(!form.longitude||!form.latitude){
+                this.$message({
+                    message: '请获取酒店位置',
+                    type: 'error'
+                })
+                return
+            }
+            //会议添加酒店
+            if(this.h_status == 'bind'){
+                form.conference_id=this.huiyi_id;
+                this.$api.addConferenceHotel(form).then(res=>{
+                    if(res.data.code == 0){
+                        this.$message({
+                                    message: '添加成功',
+                                    type: 'success'
+                        })
+                        this.form={imgs:[]};
+                        this.type=[{imgs:[]}];
+                        this.h_id='';
+                        if(type!=1){
+                                this.$emit('addSuccess')
+                        }
+                    }else{
+                        this.$message({
+                                    message: res.data.message,
+                                    type: 'error'
+                        })
+                    }
+                })
+            }
+            //添加酒店
+            if(this.h_status == 'add'){
+                this.$api.addHotel(form).then(res=>{
+                    if(res.data.code == 0){
+                        this.$message({
+                                    message: '添加成功',
+                                    type: 'success'
+                        })
+                        this.form={imgs:[]};
+                        this.type=[{imgs:[]}];
+                        this.h_id='';
+                        if(type!=1){
+                                this.$emit('addSuccess')
+                        }
+                    }else{
+                        this.$message({
+                                    message: res.data.message,
+                                    type: 'error'
+                        })
+                    }
+                })
+            }
+            if(this.h_status == 'edit'){
+                this.$api.editHotel(form).then(res=>{
+                    if(res.data.code == 0){
+                        this.$message({
+                                    message: '修改成功',
+                                    type: 'success'
+                        })
+                        this.form={imgs:[]};
+                        this.type=[{imgs:[]}];
+                        this.h_id='';
+                        if(type!=1){
+                                this.$emit('addSuccess')
+                        }
+                        
+                    }else{
+                        this.$message({
+                                    message: res.data.message,
+                                    type: 'error'
+                        })
+                    }
+                })
+            }
+            
+        },
+        localSearch(){
+            this.local.search(this.keyword);
+        },
+        initMap(){
+            setTimeout(()=>{
+                var map = new BMapGL.Map('map');
+                if(this.form.longitude){
+                    map.centerAndZoom(new BMapGL.Point(this.form.longitude, this.form.latitude), 15);
+                }else{
+                    map.centerAndZoom(new BMapGL.Point(116.404, 39.928), 15);
+                }
+                
+                this.local = new BMapGL.LocalSearch(map, {
+                    renderOptions:{map: map}
+                });
+                map.enableScrollWheelZoom(true);
+                map.addEventListener('click', e=> {
+                    this.$set(this.form,'longitude',e.latlng.lng)
+                    this.$set(this.form,'latitude',e.latlng.lat)
+                    let marker = new BMapGL.Marker(new BMapGL.Point(e.latlng.lng, e.latlng.lat));
+                    // 在地图上添加点标记
+                    map.clearOverlays()
+                    map.addOverlay(marker);
+                });
+            },500)
+        }
+    },
+    watch:{
+        status(curVal,oldVal){
+            //类型变化,下拉框id清空,添加时:数据清空,修改时:获取数据
+            this.h_status=curVal
+            this.h_id='';
+            this.getList()
+            if(curVal!='add' && curVal!='bind'){
+                this.getData();
+            }
+            if(curVal=='add'){
+                this.form={imgs:[]};
+                this.type=[{imgs:[]}];
+            }
+        },
+        cur_id(curVal){
+            //id变化时,赋值给id
+            this.id=curVal;
+            this.getData();
+            this.getList()
+        }
+    },
+    created(){
+        this.$api.getHotelList().then(res=>{
+                this.organizerList=res.data.data.list;
+        })
+        this.h_status=this.status;
+        this.id=this.cur_id;
+        if(this.h_status!='add'&&this.h_status!='bind'){
+                this.getData();
+        }
+    }
+}
+</script>

+ 539 - 0
src/iconfont/demo.css

@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 页面布局 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 通过设置 font-size 来改变图标大小 */
+  width: 1em;
+  /* 图标和文字相邻时,垂直对齐 */
+  vertical-align: -0.15em;
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
+  fill: currentColor;
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+      normalize.css 中也包含这行 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}

+ 654 - 0
src/iconfont/demo_index.html

@@ -0,0 +1,654 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>IconFont Demo</title>
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i2/O1CN01ZyAlrn1MwaMhqz36G_!!6000000001499-73-tps-64-64.ico" type="image/x-icon"/>
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01EYTRnJ297D6vehehJ_!!6000000008020-55-tps-64-64.svg"/>
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
+  <link rel="stylesheet" href="demo.css">
+  <link rel="stylesheet" href="iconfont.css">
+  <script src="iconfont.js"></script>
+  <!-- jQuery -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
+  <!-- 代码高亮 -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
+</head>
+<body>
+  <div class="main">
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">&#xe86b;</a></h1>
+    <div class="nav-tabs">
+      <ul id="tabs" class="dib-box">
+        <li class="dib active"><span>Unicode</span></li>
+        <li class="dib"><span>Font class</span></li>
+        <li class="dib"><span>Symbol</span></li>
+      </ul>
+      
+      <a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=2346784" target="_blank" class="nav-more">查看项目</a>
+      
+    </div>
+    <div class="tab-container">
+      <div class="content unicode" style="display: block;">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe605;</span>
+                <div class="name">热词滚动球</div>
+                <div class="code-name">&amp;#xe605;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62f;</span>
+                <div class="name">图片</div>
+                <div class="code-name">&amp;#xe62f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6e0;</span>
+                <div class="name">日志</div>
+                <div class="code-name">&amp;#xe6e0;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62d;</span>
+                <div class="name">敏感词库 (1)</div>
+                <div class="code-name">&amp;#xe62d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe642;</span>
+                <div class="name">敏感词</div>
+                <div class="code-name">&amp;#xe642;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6b8;</span>
+                <div class="name">酒店</div>
+                <div class="code-name">&amp;#xe6b8;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe612;</span>
+                <div class="name">活动</div>
+                <div class="code-name">&amp;#xe612;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60d;</span>
+                <div class="name">消息</div>
+                <div class="code-name">&amp;#xe60d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe647;</span>
+                <div class="name">会议管理</div>
+                <div class="code-name">&amp;#xe647;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62b;</span>
+                <div class="name">账号管理</div>
+                <div class="code-name">&amp;#xe62b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe695;</span>
+                <div class="name">核销</div>
+                <div class="code-name">&amp;#xe695;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe664;</span>
+                <div class="name">问卷模板</div>
+                <div class="code-name">&amp;#xe664;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe623;</span>
+                <div class="name">人员</div>
+                <div class="code-name">&amp;#xe623;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe644;</span>
+                <div class="name">学科</div>
+                <div class="code-name">&amp;#xe644;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62c;</span>
+                <div class="name">问卷</div>
+                <div class="code-name">&amp;#xe62c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe607;</span>
+                <div class="name">报名</div>
+                <div class="code-name">&amp;#xe607;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe67e;</span>
+                <div class="name">单位 (3)</div>
+                <div class="code-name">&amp;#xe67e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe665;</span>
+                <div class="name">刊物管理</div>
+                <div class="code-name">&amp;#xe665;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61b;</span>
+                <div class="name">文章</div>
+                <div class="code-name">&amp;#xe61b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe826;</span>
+                <div class="name">问卷</div>
+                <div class="code-name">&amp;#xe826;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe606;</span>
+                <div class="name">账号管理</div>
+                <div class="code-name">&amp;#xe606;</div>
+              </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="unicode-">Unicode 引用</h2>
+          <hr>
+
+          <p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
+          <ul>
+            <li>兼容性最好,支持 IE6+,及所有现代浏览器。</li>
+            <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
+            <li>但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。</li>
+          </ul>
+          <blockquote>
+            <p>注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式</p>
+          </blockquote>
+          <p>Unicode 使用步骤如下:</p>
+          <h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
+<pre><code class="language-css"
+>@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.eot');
+  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
+      url('iconfont.woff2') format('woff2'),
+      url('iconfont.woff') format('woff'),
+      url('iconfont.ttf') format('truetype'),
+      url('iconfont.svg#iconfont') format('svg');
+}
+</code></pre>
+          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
+<pre><code class="language-css"
+>.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
+<pre>
+<code class="language-html"
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
+</code></pre>
+          <blockquote>
+            <p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+          </blockquote>
+          </div>
+      </div>
+      <div class="content font-class">
+        <ul class="icon_lists dib-box">
+          
+          <li class="dib">
+            <span class="icon iconfont iconrecigundongqiu"></span>
+            <div class="name">
+              热词滚动球
+            </div>
+            <div class="code-name">.iconrecigundongqiu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icontupian"></span>
+            <div class="name">
+              图片
+            </div>
+            <div class="code-name">.icontupian
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconrizhi"></span>
+            <div class="name">
+              日志
+            </div>
+            <div class="code-name">.iconrizhi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconminganciku1"></span>
+            <div class="name">
+              敏感词库 (1)
+            </div>
+            <div class="code-name">.iconminganciku1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconminganci"></span>
+            <div class="name">
+              敏感词
+            </div>
+            <div class="code-name">.iconminganci
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconjiudianxinxi"></span>
+            <div class="name">
+              酒店
+            </div>
+            <div class="code-name">.iconjiudianxinxi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconhuodong"></span>
+            <div class="name">
+              活动
+            </div>
+            <div class="code-name">.iconhuodong
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconxiaoxi"></span>
+            <div class="name">
+              消息
+            </div>
+            <div class="code-name">.iconxiaoxi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconhuiyizichan"></span>
+            <div class="name">
+              会议管理
+            </div>
+            <div class="code-name">.iconhuiyizichan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhanghaoguanli"></span>
+            <div class="name">
+              账号管理
+            </div>
+            <div class="code-name">.iconzhanghaoguanli
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconhexiao"></span>
+            <div class="name">
+              核销
+            </div>
+            <div class="code-name">.iconhexiao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwenjuanmoban-"></span>
+            <div class="name">
+              问卷模板
+            </div>
+            <div class="code-name">.iconwenjuanmoban-
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconicon-renyuan"></span>
+            <div class="name">
+              人员
+            </div>
+            <div class="code-name">.iconicon-renyuan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconshuben"></span>
+            <div class="name">
+              学科
+            </div>
+            <div class="code-name">.iconshuben
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwenjuan"></span>
+            <div class="name">
+              问卷
+            </div>
+            <div class="code-name">.iconwenjuan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbaoming-08"></span>
+            <div class="name">
+              报名
+            </div>
+            <div class="code-name">.iconbaoming-08
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icondanwei3"></span>
+            <div class="name">
+              单位 (3)
+            </div>
+            <div class="code-name">.icondanwei3
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconkanwuguanli"></span>
+            <div class="name">
+              刊物管理
+            </div>
+            <div class="code-name">.iconkanwuguanli
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwenzhang"></span>
+            <div class="name">
+              文章
+            </div>
+            <div class="code-name">.iconwenzhang
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwenjuan1"></span>
+            <div class="name">
+              问卷
+            </div>
+            <div class="code-name">.iconwenjuan1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhanghaoguanli1"></span>
+            <div class="name">
+              账号管理
+            </div>
+            <div class="code-name">.iconzhanghaoguanli1
+            </div>
+          </li>
+          
+        </ul>
+        <div class="article markdown">
+        <h2 id="font-class-">font-class 引用</h2>
+        <hr>
+
+        <p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
+        <p>与 Unicode 使用方式相比,具有如下特点:</p>
+        <ul>
+          <li>兼容性良好,支持 IE8+,及所有现代浏览器。</li>
+          <li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
+          <li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
+          <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
+</code></pre>
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;span class="iconfont iconxxx"&gt;&lt;/span&gt;
+</code></pre>
+        <blockquote>
+          <p>"
+            iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+        </blockquote>
+      </div>
+      </div>
+      <div class="content symbol">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconrecigundongqiu"></use>
+                </svg>
+                <div class="name">热词滚动球</div>
+                <div class="code-name">#iconrecigundongqiu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icontupian"></use>
+                </svg>
+                <div class="name">图片</div>
+                <div class="code-name">#icontupian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconrizhi"></use>
+                </svg>
+                <div class="name">日志</div>
+                <div class="code-name">#iconrizhi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconminganciku1"></use>
+                </svg>
+                <div class="name">敏感词库 (1)</div>
+                <div class="code-name">#iconminganciku1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconminganci"></use>
+                </svg>
+                <div class="name">敏感词</div>
+                <div class="code-name">#iconminganci</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconjiudianxinxi"></use>
+                </svg>
+                <div class="name">酒店</div>
+                <div class="code-name">#iconjiudianxinxi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconhuodong"></use>
+                </svg>
+                <div class="name">活动</div>
+                <div class="code-name">#iconhuodong</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconxiaoxi"></use>
+                </svg>
+                <div class="name">消息</div>
+                <div class="code-name">#iconxiaoxi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconhuiyizichan"></use>
+                </svg>
+                <div class="name">会议管理</div>
+                <div class="code-name">#iconhuiyizichan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhanghaoguanli"></use>
+                </svg>
+                <div class="name">账号管理</div>
+                <div class="code-name">#iconzhanghaoguanli</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconhexiao"></use>
+                </svg>
+                <div class="name">核销</div>
+                <div class="code-name">#iconhexiao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwenjuanmoban-"></use>
+                </svg>
+                <div class="name">问卷模板</div>
+                <div class="code-name">#iconwenjuanmoban-</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconicon-renyuan"></use>
+                </svg>
+                <div class="name">人员</div>
+                <div class="code-name">#iconicon-renyuan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconshuben"></use>
+                </svg>
+                <div class="name">学科</div>
+                <div class="code-name">#iconshuben</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwenjuan"></use>
+                </svg>
+                <div class="name">问卷</div>
+                <div class="code-name">#iconwenjuan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbaoming-08"></use>
+                </svg>
+                <div class="name">报名</div>
+                <div class="code-name">#iconbaoming-08</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icondanwei3"></use>
+                </svg>
+                <div class="name">单位 (3)</div>
+                <div class="code-name">#icondanwei3</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconkanwuguanli"></use>
+                </svg>
+                <div class="name">刊物管理</div>
+                <div class="code-name">#iconkanwuguanli</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwenzhang"></use>
+                </svg>
+                <div class="name">文章</div>
+                <div class="code-name">#iconwenzhang</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwenjuan1"></use>
+                </svg>
+                <div class="name">问卷</div>
+                <div class="code-name">#iconwenjuan1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhanghaoguanli1"></use>
+                </svg>
+                <div class="name">账号管理</div>
+                <div class="code-name">#iconzhanghaoguanli1</div>
+            </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="symbol-">Symbol 引用</h2>
+          <hr>
+
+          <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
+            这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
+          <ul>
+            <li>支持多色图标了,不再受单色限制。</li>
+            <li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
+            <li>兼容性较差,支持 IE9+,及现代浏览器。</li>
+            <li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
+          </ul>
+          <p>使用步骤如下:</p>
+          <h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
+</code></pre>
+          <h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
+<pre><code class="language-html">&lt;style&gt;
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+&lt;/style&gt;
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
+&lt;/svg&gt;
+</code></pre>
+          </div>
+      </div>
+
+    </div>
+  </div>
+  <script>
+  $(document).ready(function () {
+      $('.tab-container .content:first').show()
+
+      $('#tabs li').click(function (e) {
+        var tabContent = $('.tab-container .content')
+        var index = $(this).index()
+
+        if ($(this).hasClass('active')) {
+          return
+        } else {
+          $('#tabs li').removeClass('active')
+          $(this).addClass('active')
+
+          tabContent.hide().eq(index).fadeIn()
+        }
+      })
+    })
+  </script>
+</body>
+</html>

File diff suppressed because it is too large
+ 101 - 0
src/iconfont/iconfont.css


BIN
src/iconfont/iconfont.eot


File diff suppressed because it is too large
+ 1 - 0
src/iconfont/iconfont.js


+ 156 - 0
src/iconfont/iconfont.json

@@ -0,0 +1,156 @@
+{
+  "id": "2346784",
+  "name": "zkyuan",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon",
+  "description": "中科",
+  "glyphs": [
+    {
+      "icon_id": "4755919",
+      "name": "热词滚动球",
+      "font_class": "recigundongqiu",
+      "unicode": "e605",
+      "unicode_decimal": 58885
+    },
+    {
+      "icon_id": "6548388",
+      "name": "图片",
+      "font_class": "tupian",
+      "unicode": "e62f",
+      "unicode_decimal": 58927
+    },
+    {
+      "icon_id": "16314001",
+      "name": "日志",
+      "font_class": "rizhi",
+      "unicode": "e6e0",
+      "unicode_decimal": 59104
+    },
+    {
+      "icon_id": "16375278",
+      "name": "敏感词库 (1)",
+      "font_class": "minganciku1",
+      "unicode": "e62d",
+      "unicode_decimal": 58925
+    },
+    {
+      "icon_id": "17437413",
+      "name": "敏感词",
+      "font_class": "minganci",
+      "unicode": "e642",
+      "unicode_decimal": 58946
+    },
+    {
+      "icon_id": "274921",
+      "name": "酒店",
+      "font_class": "jiudianxinxi",
+      "unicode": "e6b8",
+      "unicode_decimal": 59064
+    },
+    {
+      "icon_id": "5257006",
+      "name": "活动",
+      "font_class": "huodong",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    },
+    {
+      "icon_id": "6645768",
+      "name": "消息",
+      "font_class": "xiaoxi",
+      "unicode": "e60d",
+      "unicode_decimal": 58893
+    },
+    {
+      "icon_id": "6995979",
+      "name": "会议管理",
+      "font_class": "huiyizichan",
+      "unicode": "e647",
+      "unicode_decimal": 58951
+    },
+    {
+      "icon_id": "7583780",
+      "name": "账号管理",
+      "font_class": "zhanghaoguanli",
+      "unicode": "e62b",
+      "unicode_decimal": 58923
+    },
+    {
+      "icon_id": "9638481",
+      "name": "核销",
+      "font_class": "hexiao",
+      "unicode": "e695",
+      "unicode_decimal": 59029
+    },
+    {
+      "icon_id": "11377543",
+      "name": "问卷模板",
+      "font_class": "wenjuanmoban-",
+      "unicode": "e664",
+      "unicode_decimal": 58980
+    },
+    {
+      "icon_id": "11616509",
+      "name": "人员",
+      "font_class": "icon-renyuan",
+      "unicode": "e623",
+      "unicode_decimal": 58915
+    },
+    {
+      "icon_id": "11892155",
+      "name": "学科",
+      "font_class": "shuben",
+      "unicode": "e644",
+      "unicode_decimal": 58948
+    },
+    {
+      "icon_id": "15433402",
+      "name": "问卷",
+      "font_class": "wenjuan",
+      "unicode": "e62c",
+      "unicode_decimal": 58924
+    },
+    {
+      "icon_id": "15722814",
+      "name": "报名",
+      "font_class": "baoming-08",
+      "unicode": "e607",
+      "unicode_decimal": 58887
+    },
+    {
+      "icon_id": "17029829",
+      "name": "单位 (3)",
+      "font_class": "danwei3",
+      "unicode": "e67e",
+      "unicode_decimal": 59006
+    },
+    {
+      "icon_id": "18060762",
+      "name": "刊物管理",
+      "font_class": "kanwuguanli",
+      "unicode": "e665",
+      "unicode_decimal": 58981
+    },
+    {
+      "icon_id": "18527979",
+      "name": "文章",
+      "font_class": "wenzhang",
+      "unicode": "e61b",
+      "unicode_decimal": 58907
+    },
+    {
+      "icon_id": "18597580",
+      "name": "问卷",
+      "font_class": "wenjuan1",
+      "unicode": "e826",
+      "unicode_decimal": 59430
+    },
+    {
+      "icon_id": "18878937",
+      "name": "账号管理",
+      "font_class": "zhanghaoguanli1",
+      "unicode": "e606",
+      "unicode_decimal": 58886
+    }
+  ]
+}

File diff suppressed because it is too large
+ 89 - 0
src/iconfont/iconfont.svg


BIN
src/iconfont/iconfont.ttf


BIN
src/iconfont/iconfont.woff


BIN
src/iconfont/iconfont.woff2


+ 38 - 0
src/main.js

@@ -0,0 +1,38 @@
+import Vue from 'vue'
+import App from './App.vue'
+import router from './router'
+import store from './store'
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import 'font-awesome/css/font-awesome.css'
+import './iconfont/iconfont.css';
+import api from './api';
+import echarts from 'echarts';
+import  'echarts/theme/dark.js'
+// import BaiduMap from 'vue-baidu-map'
+// Vue.use(BaiduMap, {
+//   ak: '1hqg34NFaCw9jcv0xG82cI7uINFaXGGM'
+// })
+
+Vue.use(ElementUI);
+Vue.prototype.$echarts = echarts
+Vue.prototype.$api = api;
+Vue.config.productionTip = false
+Vue.prototype.msgSuccess = function (msg) {
+  this.$message({ showClose: true, message: msg, type: "success" });
+}
+
+Vue.prototype.msgError = function (msg) {
+  this.$message({ showClose: true, message: msg, type: "error" });
+}
+
+Vue.prototype.msgInfo = function (msg) {
+  this.$message.info(msg);
+}
+new Vue({
+  router,
+  store,
+  render: h => h(App)
+}).$mount('#app')
+
+

+ 52 - 0
src/router.js

@@ -0,0 +1,52 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+
+Vue.use(Router)
+export default new Router({
+  routes: [{
+      path: '/',
+      name: 'login',
+      component: () => import('./views/Login.vue'),
+      show: 0,
+    },
+    {
+      path: '/data',
+      name: '数据统计',
+      icon: 'el-icon-pie-chart',
+      component: () => import('./views/Home.vue'),
+      show: 1,
+      isLeaf: 1,
+      children: [{
+        path: '/data',
+        component: () => import('./views/data/index.vue'),
+        name: '数据统计'
+      }, ]
+    },
+    {
+      path: '/match',
+      name: '赛事管理',
+      icon: 'el-icon-trophy-1',
+      component: () => import('./views/Home.vue'),
+      show: 1,
+      isLeaf: 1,
+      children: [{
+        path: '/match',
+        component: () => import('./views/match/index.vue'),
+        name: '赛事管理'
+      }, ]
+    },
+    {
+      path: '/user',
+      name: '用户管理',
+      icon: 'el-icon-s-tools',
+      component: () => import('./views/Home.vue'),
+      show: 1,
+      isLeaf: 1,
+      children: [{
+        path: '/user',
+        component: () => import('./views/user/index.vue'),
+        name: '用户管理'
+      }, ]
+    },
+  ]
+})

+ 41 - 0
src/store.js

@@ -0,0 +1,41 @@
+import Vue from 'vue'
+import Vuex from "vuex"
+var baseURL = '';
+import axios from 'axios';
+Vue.use(Vuex)
+// let store = {
+//   area:[],
+//   categorys:[],
+//   enterprise_id:'',
+//   getDefault:function(){
+//       axios.get(`${baseURL}/api/admin/getdefault`).then(res=>{
+//         this.area=res.data.data.areas;
+//         this.categorys=res.data.data.categorys;
+//       })
+//   },
+//   mutations:{
+//     setId(state,id){
+//       state.enterprise_id = id;
+//     }
+//   },
+//   getters:{
+//     getId(state){
+//       return state.enterprise_id
+//     }
+//   }
+// }
+// store.getDefault();
+const store = {
+  state: {
+    inDate: ''
+  },
+  mutations:{
+    setInDate(state,inDate){
+      state.inDate = inDate;
+    }
+  },
+  getters:{
+
+  }
+}
+export default new Vuex.Store(store); 

+ 34 - 0
src/style/_base.scss

@@ -0,0 +1,34 @@
+*{
+    margin: 0;
+    padding: 0;
+    box-sizing: border-box;
+}
+::-webkit-scrollbar
+{
+   width: 8px;
+   height: 13px;
+   background-color: #F5F5F5;
+}
+
+::-webkit-scrollbar-track
+{
+//    box-shadow: inset 0 0 6px red;
+   border-radius: 10px;
+   background-color: #F5F5F5;
+}
+
+::-webkit-scrollbar-thumb
+{
+   border-radius: 10px;
+   // box-shadow: inset 0 0 6px rgba(0,0,0,.3);
+   background-color: #999;
+}
+.input_100{
+   width: 100px;
+}
+.input_150{
+   width: 150px;
+}
+.input_200{
+   width: 200px;
+}

+ 6 - 0
src/style/_style.scss

@@ -0,0 +1,6 @@
+$color:#1b1e23;
+$mainColor:#FF6A00;
+$color_1:#151932;
+$color_2:#FF694B;
+// $color_1:#4671D5;
+

+ 240 - 0
src/style/home.scss

@@ -0,0 +1,240 @@
+@import 'style';
+@import 'base';
+$height: 50px;
+.el-header{
+	padding: 0;
+}
+.header {
+	background: #151932;
+	color: #fff;
+	height: 60px !important;
+	font-size-adjust: 20px;
+	line-height: 60px;
+	font-weight: bolder;
+	padding: 0 24px;
+	.logout{
+		float: right;
+	}
+}
+
+.main {
+	position: relative;
+	height: calc(100vh - 60px);
+	background: #F4F4F4;
+	// padding-top: 10px;
+}
+.left-aside {
+	height: 100%;
+	overflow-y: auto;
+	overflow-x: hidden;
+	background: #151932;
+	.left-menue {
+		border: none;
+		& > .is-active {
+			background-color: rgba(255,81,81,.2) !important;
+			position: relative;
+			border-left: 8px solid #FF5151;
+			transition: all .3s linear;
+			.iconfont{
+				color: #ffffff;
+			}	
+			&>.el-submenu__title{
+				color: #ffffff !important;
+			}
+			.is-active {
+				background-color: rgba(255,81,81,.2) !important;
+				border-left: 8px solid #FF5151;
+				transition: all .3s linear;
+				position: relative;
+				.iconfont{
+					color: #ffffff;
+				}		
+			}	
+		}
+		.is-opened{
+			background-color: #fff !important;
+			border-left: none !important;
+			&>.el-submenu__title{
+				color: #fff !important;
+				
+			}
+		}
+		.el-menu-item-group__title{
+			padding: 0;
+		}
+		.child{
+			padding-left: 60px !important;
+		}
+		.el-menu-item, .el-submenu__title{
+			height: 48px;
+			line-height: 48px;
+			font-size: 15px;
+		}
+		// .el-menu-item{
+		// 	height: 44px;
+		// 	line-height: 44px;
+		// }
+	}
+	.iconfont{
+		margin-right: 5px;
+	}
+}
+
+.el-main {
+	// border: 1px solid red;
+	padding:20px 20px;
+	position: relative;
+	// overflow:hidden;
+	section>p{
+		color:#666666;
+		font-size:14px;
+		font-weight: 400;
+		span{
+			color:#cccccc;
+		}
+	}
+	.content{
+		background: #fff;
+		padding: 20px !important;
+		margin: 0 !important;
+		height: calc(100vh - 100px);
+		box-shadow:0px 4px 12px 0px rgba(0,0,0,0.12);
+		// overflow:scroll;
+		&>h1{
+			font-size: 24px;
+			color: #222;
+		}
+	}
+	.title_top{
+		
+		.add_btn{
+			width:90px;
+			height:32px;
+			background:$mainColor;
+			border:1px solid rgba(237,237,237,1);
+			border-radius:4px;
+			float: right;
+			text-align: center;
+			line-height: 32px;
+			color: #FFF;
+		}
+	}
+
+    .table{
+        background: #fff;
+        // border: 1px solid #EDEDED;
+		// min-height: calc(100vh - 430px);
+		// height:calc(100vh - 350px);
+    }
+    .edit_btn{
+        color: #25486A;
+	}
+	.info_btn{
+		background: #ECF0F5;
+		color: #1F2328;
+		border-color: #ECF0F5;
+	}
+	// 分页
+	.el-pagination {
+		// position: absolute;
+		// left: 0;
+		// bottom: 15px;
+		text-align: right;
+		width: 100%;
+		margin-top: 20px;
+	}
+}
+.el-dialog{
+	.el-select{display: block;}
+}
+.main_btn{
+	background: $mainColor;
+	border-color: $mainColor;
+	width: 120px;
+	font-size: 14px;
+}
+.cancel_btn{
+	width: 170px;
+	font-size: 14px;
+	color: #6A737B;
+}
+// 表头
+thead{
+	tr th{
+		background-color: #F2F2F2 !important;
+		padding: 8px 0 !important;
+	}
+}
+tbody{
+	tr td{
+		padding: 4px 0 !important;
+	}
+}
+
+.edit{
+	color: rgb(0, 128, 0);
+}
+.del{
+	color: #F01010;
+}
+.logout:hover{
+	cursor: pointer;
+}
+.upload_btn{
+	position: relative;
+	input{
+		position: absolute;
+		width: 100%;
+		left: 0;
+		opacity: 0;
+	}
+}
+// 内容区域滚动
+.el-form.over_y{
+    max-height: calc( 100vh - 290px);
+    padding:0 10px;
+    overflow-y:auto;
+    &::-webkit-scrollbar {/*滚动条整体样式*/
+        width:4px;/*高宽分别对应横竖滚动条的尺寸*/
+        height:4px;
+    }
+    &::-webkit-scrollbar-thumb {/*滚动条里面小方块*/
+        border-radius:5px;
+        -webkit-box-shadow: inset005pxrgba(0,0,0,0.2);
+        background:rgba(0,0,0,0.2);
+    }
+    &::-webkit-scrollbar-track {/*滚动条里面轨道*/
+        -webkit-box-shadow: inset005pxrgba(0,0,0,0.2);
+        border-radius:0;
+        background:rgba(0,0,0,0.1);
+    }
+}
+// 弹框
+.el-dialog__footer{
+	text-align: center;
+}
+
+.w-e-text{
+    min-height: 500px !important;
+}
+// 停用启用样式
+.open {
+	color:#409eff;
+}
+.close {
+	color: red;
+}
+.el-table__fixed-right::before, .el-table__fixed::before{
+	background: none;
+}
+
+.filter-form{
+	.el-input,.el-select{
+		width: 100%;
+	}
+}
+
+.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before, .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{
+	content: '';
+}
+

+ 35 - 0
src/style/login.scss

@@ -0,0 +1,35 @@
+@import 'style';
+.login{
+    background: $color;
+    width: 100%;
+    height: 100vh;
+    position: relative;
+    .login-div{
+      width: 350px;
+      height: 420px;
+      background: #fff;
+      position: absolute;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      right: 0;
+      margin: auto;
+      border-radius: 5px;
+      box-shadow: rgba(0, 0, 0, 0.35) 20px 20px 20px;
+      padding: 30px;
+      img{
+        display: block;
+        margin: 0 auto 10px;
+      }
+      h1{
+        color: $color;
+        font-size: 24px;
+        text-align: center;
+        margin-bottom: 20px;
+      }
+      .login-btn{
+        width: 100%;
+        background: #FF694B;
+      }
+    }
+}

+ 99 - 0
src/views/Home.vue

@@ -0,0 +1,99 @@
+<style lang="scss">
+@import '../style/home.scss';
+.siteTitle{
+	font-size: 20px;
+	font-weight: 400;
+}
+</style>
+
+<template>
+	<el-container>
+		<el-header>
+			<div class="header">
+				<span class="logout" @click="logout">退出登陆</span>
+				<div class="siteTitle">顽主杯实盘大赛后台</div>
+				
+			</div>	
+		</el-header>
+		<el-container class="main">
+			<!-- 左侧菜单 -->
+			<el-aside class="left-aside" width="210px">
+				<el-menu background-color='#151932'	text-color='#ffffff' :unique-opened='false'  :default-active="'/'+ $route.path.split('/')[1]" router class="left-menue" active-text-color="#ffffff">
+					<template v-for="(item, index) in $router.options.routes"  >
+							<el-menu-item  v-if='item.show&&item.isLeaf' :index="item.path"  :key='index'>
+								<i :class="item.icon"></i>
+								<span slot="title">{{item.name}}</span>
+							</el-menu-item>
+							<!-- <el-submenu   v-if='item.show&&!item.isLeaf' :index="'index_'+index"  :key='index'>
+								<template slot="title" >
+								<i :class="item.icon"></i>
+								<span>{{item.name}}</span>
+								</template>
+								<el-menu-item-group>
+									<el-menu-item class="child" v-for="(child,idx) in item.children"   :key="index+'_'+idx" :index="child.path" v-show='!child.hide'>
+									{{child.name}}
+									</el-menu-item>
+								</el-menu-item-group>
+							</el-submenu> -->
+					</template>
+				</el-menu>
+			</el-aside>
+			<!-- 右侧内容 -->
+			<el-container>
+				<el-main>			
+					
+						<transition name="fade" mode="out-in">
+							<router-view  ></router-view>
+						</transition>
+				</el-main>
+				<!-- <el-footer>Footer</el-footer> -->
+			</el-container>
+		</el-container>
+	</el-container>
+</template>
+
+<script>
+import Router from 'vue-router'
+export default {
+	name: 'home',
+
+	data() {
+		return {
+		
+		};
+	},
+	methods: {
+	
+		logout(){
+			this.$api.logout().then(res=>{
+				// this.$router.push({path:'/login'})
+				this.$router.push({path:'/'})
+			})
+		},
+		// permission(name){
+		// 	let permissions=this.info.permissions||[];
+		// 	let list=[];
+		// 	for(let i=0;i<permissions.length;i++){
+		// 		list.push(permissions[i].name)
+		// 	}
+		// 	if(list.indexOf(name)<0){
+		// 		return false;
+		// 	}else{
+		// 		return true;
+		// 	}	
+		// },
+		getData(){
+			this.$api.getAccountInfo().then(res=>{
+				if(!res.code){
+					this.info = res.data.data
+				}
+			})
+		},
+	
+	},
+	
+	created(){
+		this.getData()
+	}
+};
+</script>

+ 166 - 0
src/views/Index.vue

@@ -0,0 +1,166 @@
+<template>
+  <section class="index-content">
+  
+  </section>
+</template>
+<script>
+export default {
+  data() {
+    return {
+     
+    };
+  },
+
+  computed: {
+  },
+  methods: {
+  
+  },
+  mounted() {
+  },
+  created(){
+
+  },
+};
+</script>
+<style lang='scss' scoped>
+section {
+  // width:100%;
+  .index_header {
+    background: #ffffff;
+    height: 102px;
+    border-radius: 10px;
+    display: flex;
+    align-items: center;
+
+    .header-item {
+      flex: 1;
+      display: flex;
+      justify-content: space-evenly;
+      align-items: center;
+      height: 56px;
+      &:not(:last-child) {
+        border-right: 1px solid #d8d8d8;
+      }
+      .text {
+        font-size: 16px;
+        color: #666666;
+      }
+      .count {
+        font-size: 32px;
+      }
+      .item-img {
+        display: flex;
+        img {
+          width: 56px;
+          height: 56px;
+          margin-right: 30px;
+        }
+        .text {
+          position: relative;
+          top: -8px;
+        }
+        .count {
+          color: #208cfe;
+          position: relative;
+          bottom: -11px;
+        }
+      }
+      .item-text {
+        & > div {
+          display: flex;
+          align-items: center;
+          .text {
+            width: 120px;
+          }
+        }
+      }
+    }
+  }
+  .index-main {
+    background: #ffffff;
+    border-radius: 10px;
+    margin-top: 20px;
+    padding: 20px;
+    .main-item {
+      position: relative;
+      .item-title {
+        font-size: 18px;
+        font-weight: bold;
+        color: #333333;
+        margin-bottom: 20px;
+      }
+      .item-more {
+        position: absolute;
+        top: 20px;
+        right: 20px;
+        font-size: 14px;
+        color: #3895fe;
+      }
+    }
+    .main-content {
+      display: flex;
+      & > div:not(:last-child) {
+        border-right: 1px solid #eee;
+      }
+      .c1 {
+        flex: 1;
+        .h2 {
+          font-size: 14px;
+          color: #999999;
+          height: 40px;
+          line-height: 40px;
+          span:nth-of-type(2) {
+            margin-left: 20px;
+          }
+          span:last-child {
+            float: right;
+          }
+        }
+        .con2 {
+          font-size: 14px;
+          color: #333333;
+          height: 36px;
+          line-height: 36px;
+          background: #fafafa;
+          border-radius: 7px;
+          margin-bottom: 8px;
+          padding: 0 10px;
+          &:nth-of-type(2) {
+            color: #ef3d3d;
+          }
+          &:nth-of-type(3) {
+            color: #fdad23;
+          }
+          &:nth-of-type(4) {
+            color: #56ccf6;
+          }
+          span:nth-of-type(2) {
+            margin-left: 20px;
+          }
+          span:last-child {
+            float: right;
+          }
+        }
+      }
+      .c2 {
+        flex: 1.5;
+      }
+      .c1,
+      .c2 {
+        width: 100%;
+        // flex:1;
+        padding: 10px;
+        box-sizing: border-box;
+      }
+      .c1-title,
+      .c2-title {
+        font-size: 15px;
+        font-weight: bold;
+        color: #666666;
+        // margin-top:20px;
+      }
+    }
+  }
+}
+</style>

+ 163 - 0
src/views/Login.vue

@@ -0,0 +1,163 @@
+<style lang="scss">
+  @import '../style/_base.scss';
+  .login{
+    height: 100vh;
+    min-height: 450px;
+    background: url(../assets/bg.png) no-repeat;
+    background-size: 100%;
+    position: relative;
+    .login-div{
+      width:520px;
+      height:448px;
+      background:#FFFFFF;
+      box-shadow:0px 12px 24px 0px rgba(0,0,0,0.24);
+      border-radius:8px;
+      position: absolute;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      right: 0;
+      margin: auto;
+      padding:48px  75px;
+      h1{
+        text-align: center;
+        margin-bottom: 40px;
+        font-size: 28px;
+      }
+      .input_div{
+        position: relative;
+        margin-bottom: 12px;
+        input{
+          padding-left: 80px;
+          outline: none;
+          background:#F2F5F7;
+          border-radius:8px;
+          border:1px solid #EEEEEE;
+          display: block;
+          height: 54px;
+          width: 100%;
+          font-size: 16px;
+        }
+        label{
+          color: #222;
+          font-size: 16px;
+          position: absolute;
+          left: 16px;
+          top:16px;
+          z-index: 99;
+        }
+      }
+      .code{
+        input{
+          width: 250px;
+          border:1px solid #EEEEEE;
+        }
+        img{
+          width: 108px;
+          height: 54px;
+          float: right;
+          background-origin: 1px solid red;
+        }
+      }
+      
+      .login-btn{
+        background: #FF5151;
+        width: 100%;
+        height: 54px;
+        margin-top: 36px;
+        font-size: 18px;
+        color: #FFF;
+        font-weight: 600;
+        border:none;
+        border-radius: 8px;
+      }
+    }
+    .footer{
+      position: fixed;
+      width: 100%;
+      bottom: 10px;
+      left:0;
+      z-index: 9;
+      text-align: center;
+      color:#fff;
+      font-size: 14px;
+    }
+  }
+</style>
+
+<template>
+  <div class="login">
+      <div class="login-div">
+        <h1><img width="345" src="../assets/title.png" alt=""></h1>
+        <form>
+            <div class="input_div">
+              <label>用户名</label>
+              <input type="text" v-model="logindata.username" placeholder="请输入用户名">
+            </div>
+            <div class="input_div">
+              <label>密&nbsp;&nbsp;码</label>
+              <input type="password" v-model="logindata.password" placeholder="请输入密码">
+            </div>
+            <div class="input_div code">
+              <img @click="getCode" :src="code" alt="">
+              <label>图形码</label>
+              <input type="text" v-model="logindata.imgcode" placeholder="请输入验证码">  
+            </div>
+            <el-button @click="login" @keyup.enter="login" class="login-btn" type="primary">登  录</el-button>
+        </form>
+      </div>
+      <p class="footer">Copyright © {{copyrightdate}} 中国科学院 版权所有</p>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'login',
+  data(){
+    return{
+      tp:'xt',
+      code:'',
+      logindata:{
+        username:'',
+        password:'',
+        imgcode_id:'',
+        imgcode:'',
+        utype:2
+      },
+      copyrightdate:new Date().getFullYear()
+    }
+  },
+  methods:{
+      keyupEnter(){
+          document.onkeydown = e =>{
+              if (e.keyCode === 13) {
+                  console.log('enter')
+                  this.login()
+              }
+          }
+      },
+      login(){
+          let parms=this.logindata;
+            console.log(parms)
+            this.$api.login(parms).then((res)=>{
+                let data=res.data
+                  if(res.data.code == 0){
+                      window.location.hash='/index';
+                  }else{
+                      this.$message.error(res.data.message);
+                  } 
+            })
+      },
+      getCode(){
+        this.$api.getCode().then(res=>{
+          this.code=res.data.data.imgcode
+          this.logindata.imgcode_id=res.data.data.imgcode_id
+        })
+      }
+
+    },
+  created(){
+    this.getCode()
+  }
+}
+</script>

+ 252 - 0
src/views/data/index.vue

@@ -0,0 +1,252 @@
+<style lang="scss">
+    .del{
+            display: inline-block;
+            vertical-align: top;
+            font-size: 28px;
+            font-weight: 500;
+            margin-left: 10px;
+            color: #000;
+            cursor: pointer;
+    }
+</style>
+<template>
+    <section class="content data">
+        <h1>数据统计</h1>
+        <el-divider></el-divider>
+        <el-form label-width="80px" class="filter-form">
+            <el-row>
+                <el-col :span="9">
+                    <el-form-item label="选手名字">
+                        <el-input v-model="queryParams.username" placeholder="请输入选手名字/代码"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="9">
+                    <el-form-item label="比赛日期">
+                        <el-date-picker
+                        v-model="queryParams.date"
+                        type="date"
+                        placeholder="选择日期"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd">
+                        </el-date-picker>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="9">
+                    <el-form-item label="比赛名称" prop="match_id">
+                        <el-select v-model="queryParams.match_id" placeholder="请选择比赛">
+                            <el-option v-for="item in matchList" :key='item.id' :label="item.name" :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="9">
+                    <el-form-item label="比赛分组">
+                        <el-select v-model="queryParams.region" placeholder="请选择比赛分组">
+                        <el-option label="千万组" value="shanghai"></el-option>
+                        <el-option label="百万组" value="beijing"></el-option>
+                        <el-option label="十万组" value="beijing"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="4">
+                    <el-form-item>
+                        <el-button type="primary" @click="getData">筛选</el-button>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+        </el-form>
+        <el-row :gutter="10" class="mb8">
+            <el-col :span="1.5">
+                <el-button
+                type="primary"
+                plain
+                icon="el-icon-plus"
+                size="mini"
+                @click="handleAdd"
+                >新增</el-button>
+            </el-col>
+        </el-row>
+        <el-table :data="list" height='39vh' style="width: 100%;margin-top:10px;">
+                <el-table-column prop="rank" label="排名"/>
+                <el-table-column prop="username" label="选手"/>
+                <el-table-column prop="init_fund" label="初始资产"/>
+                <el-table-column prop="yesterday_fund" label="昨日资产"/>
+                <el-table-column prop="today_fund" label="今日资产"/>
+                <el-table-column prop="today_income" label="今日盈亏"/>
+                <el-table-column prop="date" label="总盈亏"/>
+                <el-table-column prop="date" label="金日持股" width="150">
+                    <template slot-scope="scope">
+                        <p v-for="(item,index) in scope.row.today_stock" :key='index'>
+                            {{item.name}}({{item.code}})
+                        </p>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="date" label="昨日持股" width="150">
+                    <template slot-scope="scope">
+                        <p v-for="(item,index) in scope.row.yesterday_stock" :key='index'>
+                            {{item.name}}({{item.code}})
+                        </p>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="date" label="操作">
+                    <template slot-scope="scope">
+                        <el-button @click="title='编辑数据',open=true,form=scope.row" size="mini" type="primary">编辑</el-button>
+                    </template>
+                </el-table-column>
+        </el-table>
+        <Page
+            ref="pageButton"
+            :current="form.page"
+            :page_size="form.page_size"
+            :total="total"
+            @pageChange="gopage"
+        />
+        <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+            <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+                <el-form-item label="比赛名称" prop="match_id">
+                        <el-select v-model="form.match_id" placeholder="请选择比赛">
+                            <el-option v-for="item in matchList" :key='item.id' :label="item.name" :value="item.id"></el-option>
+                        </el-select>
+                </el-form-item>
+                <el-form-item label="持仓日期" prop="stock_date">
+                        <el-date-picker
+                        v-model="form.stock_date"
+                        type="date" style="width:100%"
+                        placeholder="选择日期"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd">
+                        </el-date-picker>
+                </el-form-item>
+                <el-form-item label="用户代码" prop="usercode">
+                    <el-input clearable v-model="form.player_id" placeholder="请输入代码"></el-input>
+                </el-form-item>
+                <el-form-item label="股票名称">
+                    <div v-for="(item,index) in form.today_stock" :key='index' style="margin-bottom:5px;">
+                        <el-input style="width:28%" clearable v-model="item.name" placeholder="名称"></el-input>
+                        &nbsp;<el-input style="width:28%" clearable v-model="item.code" placeholder="代码"></el-input>
+                        &nbsp;<el-input style="width:29%" clearable v-model="item.fund" placeholder="资金"></el-input>
+                        <i @click="form.today_stock.splice(index,1)" style="margin-top:5px;" class="el-icon-circle-close del"></i>
+                    </div>
+                    <el-button @click="addCode" type="danger" size="small" plain>新增代码</el-button>
+                </el-form-item>
+                <el-form-item label="股票名称">
+                    <div class="imgs" v-for="(item,index) in form.today_stock_img" :key='index'>
+                        <img  width="150" :src="item" alt="">
+                        <i @click="form.today_stock_img.splice(index,1)" class="el-icon-circle-close del"></i>
+                    </div>
+                    <el-upload
+                        class="upload-demo"
+                        :show-file-list	='false'
+                        :on-success="handleSuccess"
+                        action="/api/admin/uploadfile">
+                        <el-button size="small" type="danger" plain>上传图片</el-button>
+                    </el-upload>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="submitForm">确 定</el-button>
+                <el-button @click="open=false">取 消</el-button>
+            </div>
+        </el-dialog>
+    </section>
+</template>
+<script>
+import Page from "../../components/Page";
+export default {
+    components: {
+        Page,
+    },
+    data(){
+        return{
+            loading:false,
+            queryParams:{
+                page:1
+            },
+            form:{
+                
+            },
+            list:[{},{}],
+            total:0,
+            title:'新增用户',
+            open:false,
+            rules:{
+                match_id: [
+                    { required: true, message: '请选择比赛', trigger: 'change' }
+                ],
+                player_id: [
+                    { required: true, message: '请输入用户代码', trigger: 'blur' }
+                ],
+                stock_date: [
+                    { required: true, message: '请选择持仓日期', trigger: 'blur' }
+                ],
+            },
+            matchList:[]
+        }
+    },
+    methods:{
+        gopage(size) {
+            if (size) {
+                this.queryParams.page_size = size;
+            }
+            this.queryParams.page = this.$refs.pageButton.page;
+            this.getData();
+        },
+        getData(){
+            this.loading = true;
+            this.$api.getPlayerRecord(this.queryParams).then(res=>{
+                this.list=res.data.data.list
+                this.total = res.data.data.total;
+                this.loading = false;
+            })
+        },
+        handleAdd(){
+            this.open=true;
+            this.title='新增数据';
+            this.form={
+                today_stock:[{code: "", name:"",fund:''}],
+                today_stock_img:[]
+            }
+        },
+        addCode(){
+             this.form.today_stock.push({code: "", name:"",fund:''})
+        },
+        handleSuccess(res, file) {
+            console.log(res)
+            this.form.today_stock_img.push(res.data.url);
+        },
+        /** 提交按钮 */
+        submitForm() {
+            this.$refs["form"].validate(valid => {
+                if (valid) {
+                if (this.form.id != null) {
+                    this.$api.editRecord(this.form).then(response => {
+                        if(response.data.code != 0){
+                            this.msgError(response.data.message);
+                            return
+                        }
+                        this.msgSuccess("修改成功");
+                        this.open = false;
+                        this.getData();
+                    });
+                } else {
+                    this.$api.addRecord(this.form).then(response => {
+                        if(response.data.code != 0){
+                            this.msgError(response.data.message);
+                            return
+                        }
+                        this.msgSuccess("新增成功");
+                        this.open = false;
+                        this.getData();
+                    });
+                }
+        }
+      });
+    },
+    },
+    created(){
+       this.getData() 
+       this.$api.getMatchList().then(res=>{
+           this.matchList=res.data.data
+       })
+    }
+}
+</script>

+ 418 - 0
src/views/journalQun/AddJournal.vue

@@ -0,0 +1,418 @@
+<style lang="scss" scoped>
+.preview {
+  .el-form-item {
+    margin-bottom: 15px;
+  }
+  label,
+  p {
+    line-height: 25px !important;
+  }
+}
+.content .title {
+  height: 32px;
+  font-size: 14px;
+  font-weight: bold;
+  color: #333333;
+  border-bottom: 1px solid #d8d8d8;
+  margin-bottom: 25px;
+}
+.el-form {
+  font-size: 14px;
+  font-weight: 400;
+  color: #666666;
+  .el-select,
+  .el-range-editor--small.el-input__inner {
+    width: 100%;
+  }
+}
+/deep/.el-tabs__header {
+  margin: 0;
+  .el-tabs__active-bar {
+    height: 0px;
+  }
+  .el-tabs__item {
+    width: 160px;
+    height: 40px;
+    text-align: center;
+    border-radius: 8px 8px 0px 0px;
+    color: #333333;
+    background: #ececec;
+    margin-right: 10px;
+  }
+  .el-tabs__item.is-active {
+    background: #3895fe;
+
+    color: #ffffff;
+  }
+}
+.el-button {
+  width: 120px;
+  height: 36px;
+}
+// 上传
+
+/deep/.avatar-uploader .el-upload {
+  width: 148px;
+  height: 148px;
+  line-height: 148px;
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+  .avatar {
+    width: 100%;
+    height: auto;
+  }
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 68px;
+  height: 68px;
+  line-height: 68px;
+  text-align: center;
+}
+.avatar {
+  width: 68px;
+  height: 68px;
+  display: block;
+}
+/deep/.speaker_avatar .el-upload {
+  width: 80px;
+  height: 80px;
+  line-height: 80px;
+}
+.hotel_imgs {
+  /deep/.el-upload--picture-card {
+    width: 79px;
+    height: 79px;
+    line-height: 79px;
+  }
+}
+</style>
+<template>
+  <section>
+    <p><span>刊群导览></span>新增期刊</p>
+    <div class="content">
+      <!-- <div class="title">新增会议</div> -->
+      <el-form
+        ref="form"
+        size="small"
+        label-width="140px"
+        class="over_y"
+        :model="form"
+        :rules="rules"
+      >
+        <el-row>
+          <el-col :span="24">
+              <el-form-item label="期刊名称:" prop="name">
+                <el-input
+                  placeholder="请输入期刊名称"
+                  v-model="form.name"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="微信号:" prop="wxcode">
+                <el-input
+                  placeholder="请输入微信号"
+                  v-model="form.wxcode"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="中文名称:" prop="cname">
+                <el-input
+                  placeholder="请输入中文名称"
+                  v-model="form.cname"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="外文名称:" prop="ename">
+                <el-input
+                  placeholder="请输入外文名称"
+                  v-model="form.ename"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="主办单位:" prop="organizer_id">
+              <el-select
+                placeholder="请选择"
+                v-model="form.organizer_id"
+                filterable
+              >
+                <el-option
+                  v-for="(item, index) in organizerList"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="学科:" prop="subject_id">
+              <el-select
+                placeholder="请选择"
+                v-model="form.subject_id"
+                filterable
+              >
+                <el-option
+                  v-for="(item, index) in subjectList"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="语种:" prop="languages">
+              <el-input v-model="form.languages" placeholder=""> </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="出版时间:" prop="publishingTime">
+              <el-input v-model="form.publishingTime" placeholder=""> </el-input>
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="主编:" prop="editor">
+                <el-input
+                  placeholder="请输入期刊名称"
+                  v-model="form.editor"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="主管单位:" prop="corganizers">
+                <el-input
+                  placeholder="请输入主管单位"
+                  v-model="form.corganizers"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="办刊单位:" prop="publishingUnit">
+                <el-input
+                  placeholder="请输入期刊名称"
+                  v-model="form.publishingUnit"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="创刊时间:" prop="">
+                <el-input
+                  placeholder="请输入期刊名称"
+                  v-model="form.publishingTime"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="出版周期:" prop="publishingCycle">
+                <el-input
+                  placeholder="请输入出版周期"
+                  v-model="form.publishingCycle"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="国内刊号:" prop="domestic">
+                <el-input
+                  placeholder="请输入国内刊号"
+                  v-model="form.domestic"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="国际刊号:" prop="issn">
+                <el-input
+                  placeholder="请输入国际刊号"
+                  v-model="form.issn"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="6">
+              <el-form-item label="期刊官网:" prop="website">
+                <el-input
+                  placeholder="请输入期刊官网"
+                  v-model="form.website"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+          <el-col :span="24">
+              <el-form-item label="编辑部地址:" prop="editorialAddress">
+                <el-input
+                  placeholder="请输入编辑部地址"
+                  v-model="form.editorialAddress"
+                  clearable
+                ></el-input>
+              </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="文章简介:">
+          <el-input
+            type="textarea"
+            v-model="form.desc"
+            :rows="3"
+            placeholder="请输入文章简介"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="封面图:" prop="img">
+          <el-upload
+            class="avatar-uploader"
+            action="/api/admin/uploadfile"
+            :show-file-list="false"
+            :on-success="handleAvatarSuccess"
+          >
+            <img v-if="form.img" :src="form.img" class="avatar" />
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+          </el-upload>
+          <span style="font-size: 12px; color: #999999"
+            >建议图片尺寸为:210*160</span
+          >
+        </el-form-item>
+        <el-form-item style="position: fixed; bottom: 20px; right: 60px">
+          <el-button type="primary">预览</el-button>
+          <el-button type="success">发布</el-button>
+          <el-button type="default" @click="save">保存</el-button>
+          <!-- <el-button type="danger" plain>删除</el-button> -->
+        </el-form-item>
+      </el-form>
+    </div>
+  </section>
+</template>
+<script>
+import fuEditor from "../../components/fuEditor";
+export default {
+  components: {
+    fuEditor,
+  },
+  data() {
+    return {
+      form: {},
+      subjectList: [],
+      organizerList:[],
+      imageUrl: "",
+      rules: {
+        name: [{ required: true, message: "请输入标题", trigger: "blur" }],
+        wxcode: [{ required: true, message: "请输入微信号", trigger: "blur" }],
+        organizer_id: [{ required: true, message: "请选择主办单位", trigger: "blur" }],
+        subject_id: [{ required: true, message: "请选择学科", trigger: "change" }],
+        img: [{ required: true, message: "封面图", trigger: "blur" }],
+      },
+    };
+  },
+  methods: {
+    //封面
+    handleAvatarSuccess(res, file) {
+      this.form.img = file.response.data;
+      console.log(this.form.img);
+    },
+    //主讲人
+    handleAvatarSuccess1(index, res, file) {
+      var speaker = this.form.speaker[index];
+      speaker.img = file.response.data;
+      this.$set(this.form.speaker, index, speaker);
+      // console.log(this.form.img)
+    },
+    beforeAvatarUpload() {},
+    handleClick() {},
+    addSpeaker() {
+      this.form.speaker.push({ name: "", intruduce: "" });
+    },
+    gopage(size) {
+      if (size) {
+        this.form.page_size = size;
+      }
+      this.form.page = this.$refs.pageButton.page;
+      this.getData();
+    },
+    getData() {
+      this.loading = true;
+      this.$api.searchSubjectList().then((res) => {
+        this.subjectList = res.data.data;
+      });
+      this.$api.searchOrganizerList().then((res) => {
+        this.organizerList = res.data.data;
+      });
+      // 期刊详情
+      let id = this.$route.query.id;
+      if (id) {
+        this.$api.getJournal({ id: id }).then((res) => {
+          this.form = res.data.data;
+        });
+      }
+    },
+    save() {
+      let id = this.$route.query.id;
+      let parm = this.form;
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          if (id) {
+            parm.id = id;
+            this.$api.updateJournal(parm).then((res) => {
+              if (res.data.code == 0) {
+                this.$message({
+                  type: "success",
+                  message: "保存成功!",
+                });
+              } else {
+                this.$message.error("保存失败!");
+              }
+            });
+          } else {
+            this.$api.addJournal(parm).then((res) => {
+              if (res.data.code == 0) {
+                this.$message({
+                  type: "success",
+                  message: "保存成功!",
+                });
+              } else {
+                this.$message.error("保存失败!");
+              }
+            });
+          }
+        } else {
+            this.$message.error("有必填项没有填!");
+        }
+      });
+    },
+    del(id) {
+      this.$confirm("确定删除吗", "提示", {
+        type: "warning",
+      }).then(() => {
+        this.$api.delJournal({ id: id }).then((res) => {
+          this.$message({
+            message: "删除成功",
+            type: "success",
+          });
+          this.getData();
+        });
+      });
+    },
+  },
+  created() {
+    this.getData();
+  },
+};
+</script>

+ 338 - 0
src/views/journalQun/Journal.vue

@@ -0,0 +1,338 @@
+<style lang="scss" scoped>
+.preview {
+  .el-form-item {
+    margin-bottom: 15px;
+  }
+  label,
+  p {
+    line-height: 25px !important;
+  }
+}
+/deep/.avatar-uploader .el-upload {
+  width: 148px;
+  height: 148px;
+  line-height: 148px;
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+  .avatar {
+    width: 100%;
+    height: auto;
+  }
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 68px;
+  height: 68px;
+  line-height: 68px;
+  text-align: center;
+}
+.avatar {
+  width: 68px;
+  height: 68px;
+  display: block;
+}
+/deep/.speaker_avatar .el-upload {
+  width: 80px;
+  height: 80px;
+  line-height: 80px;
+}
+</style>
+<template>
+  <section>
+    <p>中科院全刊</p>
+    <div class="content">
+      <div class="filter">
+        <el-form
+          size="small"
+          label-width="70px"
+          :inline="true"
+          label-position="left"
+        >
+          <el-form-item label="">
+            <el-input
+              clearable
+              placeholder="请输入信息标题"
+              v-model="form.name"
+              @clear="getData"
+            ></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="search">搜索</el-button>
+          </el-form-item>
+          <el-form-item style="float:right" >
+                <el-button @click="dialogVisible1=true" plain icon="el-icon-upload" type="primary">导入</el-button>
+          </el-form-item>
+          <el-form-item style="float:right" >
+                <el-button @click="download" plain icon="el-icon-download" type="primary">导出</el-button>
+          </el-form-item>
+          <el-form-item style="float: right">
+            <el-button @click="add" type="primary">添加期刊</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <el-table
+        class="table"
+        :data="list"
+        height="50vh"
+        border
+        v-loading="loading"
+        default-expand-all
+        row-key="id"
+        style="width: 100%"
+      >
+        <el-table-column prop="img" label="期刊封面">
+          <template slot-scope="scope">
+            <img :src="scope.row.img" alt="" height="80" width="60" />
+          </template>
+        </el-table-column>
+        <el-table-column prop="name" width="180" label="期刊名称">
+        </el-table-column>
+        <el-table-column prop="wxcode" label="微信号"> </el-table-column>
+        <el-table-column prop="subject_name" label="主办单位">
+        </el-table-column>
+        <el-table-column prop="desc" width="300" label="简介">
+        </el-table-column>
+        <el-table-column prop="name" label="中文名称"> </el-table-column>
+        <el-table-column prop="ename" label="外文名称"> </el-table-column>
+        <el-table-column prop="languages" label="语种"> </el-table-column>
+        <el-table-column prop="editor" label="主编"> </el-table-column>
+        <el-table-column prop="corganizers" label="主管单位"> </el-table-column>
+        <el-table-column prop="publishingUnit" label="办刊单位">
+        </el-table-column>
+        <el-table-column prop="publishingTime" label="创刊时间">
+        </el-table-column>
+        <el-table-column prop="domestic" label="国内刊号"> </el-table-column>
+        <el-table-column prop="issn" label="国际刊号"> </el-table-column>
+        <el-table-column prop="website" label="期刊官网"> </el-table-column>
+        <el-table-column prop="editorialAddress" label="编辑部地址">
+        </el-table-column>
+        <el-table-column prop="zip" width="150" label="操作" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" @click="showQrcode(scope.row)"
+              >二维码上传</el-button
+            >
+            <el-button type="text" @click="showJournal(scope.row)"
+              >查看</el-button
+            >
+            <el-button class="edit" type="text" @click="edit(scope.row)"
+              >编辑</el-button
+            >
+            <el-button class="del" @click="del" type="text">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <Page
+        ref="pageButton"
+        :current="form.page"
+        :page_size="form.page_size"
+        :total="total"
+        @pageChange="gopage"
+      />
+      <!--二维码上传-->
+      <el-dialog
+        class="fu-dialog"
+        :title="dialogTitle"
+        :close-on-click-modal="false"
+        :visible.sync="dialogVisible"
+      >
+        <el-form
+          size="small"
+          class="preview"
+          :inline="false"
+          label-width="100px"
+          :model="form1"
+          ref="form1"
+        >
+          <el-form-item label="上传二维码:" prop="img">
+            <el-upload
+              class="avatar-uploader"
+              action="/api/admin/uploadfile"
+              :show-file-list="false"
+              :on-success="handleAvatarSuccess"
+            >
+              <img v-if="form1.qrcode" :src="form1.qrcode" class="avatar" />
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+            <span style="font-size: 12px; color: #999999"
+              >建议图片尺寸为:210*160</span
+            >
+          </el-form-item>
+        </el-form>
+        <span slot="footer" class="dialog-footer">
+          <el-button size="small" type="normal" @click="dialogVisible=false,this.form1={}">取消</el-button>
+          <el-button size="small" type="primary" @click="save">确 定</el-button>
+        </span>
+      </el-dialog>
+      <el-dialog
+        class="fu-dialog"
+        title="导入期刊" width="400px"
+        :close-on-click-modal="false"
+        :visible.sync="dialogVisible1"
+      > 
+        <el-upload
+          class="upload-demo"
+          action="/api/admin/uploadfile"
+          :show-file-list="false"
+          :on-success="handleAvatarSuccess1">
+          <el-button size="small" type="primary">点击上传</el-button>
+          <div slot="tip" class="el-upload__tip">只能上传.xls/.xlsx文件,且不超过500M</div>
+        </el-upload>
+        <div>{{file}}</div>
+         <span slot="footer" class="dialog-footer">
+          <el-button size="small" type="normal" @click="dialogVisible1=false">取消</el-button>
+          <el-button size="small" type="primary" @click="upload">确 定</el-button>
+        </span>
+      </el-dialog>
+    </div>
+  </section>
+</template>
+<script>
+import Page from "../../components/Page";
+export default {
+  components: {
+    Page,
+  },
+  data() {
+    return {
+      //   edit:0,
+      form: { name: "", page: 1, page_size: 20 },
+      total: 1,
+      list: [{ name: "2333" }],
+      loading: false,
+      input: "",
+      dialogVisible: false,
+      dialogTitle: "",
+      dialogVisible1:false,
+      form1: {},
+      file:''
+    };
+  },
+  methods: {
+    save() {
+      this.$refs["form1"].validate((valid) => {
+        if (valid) {
+          let parm = this.form1;
+          let id = this.form1.id;
+          this.$api.updateJournal(parm).then((res) => {
+              if (res.data.code == 0) {
+                this.$message({
+                  type: "success",
+                  message: "保存成功!",
+                });
+                this.getData();
+              } else {
+                // this.$message.error("保存失败!");
+              }
+              this.dialogVisible = false;
+            });
+        }
+      });
+    },
+    upload(){
+      this.$api.upJournalData({file:this.file}).then(res=>{
+          this.dialogVisible1=false;
+          this.getData();
+          this.$message({
+            message: "上传成功",
+            type: "success",
+          });
+      })
+    },
+    download(){
+      this.$api.getJournalData().then(res=>{
+          var elink = document.createElement("a");
+          let blob = new Blob([res.data], {
+            type: "application/vnd.ms-excel,charset=UTF-8",
+          });
+          let objUrl = URL.createObjectURL(blob);
+          let file_name = decodeURIComponent(
+            res.headers["content-disposition"].split("=")[1]
+          );
+          console.log(file_name);
+          elink.download = file_name;
+          elink.style.display = "none";
+          elink.href = objUrl;
+          document.body.appendChild(elink);
+          elink.click();
+          document.body.removeChild(elink);
+      })
+    },
+    showQrcode(row){
+      this.form1.journal_id = row.journal_id;
+      this.form1.id = row.id;
+      this.form1.qrcode = row.qrcode;
+      this.dialogVisible = true;
+    },
+    showJournal(row){
+      this.$router.push({
+        path:"/journal/journal/show",
+        query:{id:row.id}
+      })
+    },
+    //封面
+    handleAvatarSuccess(res, file) {
+      this.$set(this.form1,'qrcode',file.response.data)
+    },
+    handleAvatarSuccess1(res, file) {
+      this.file=file.response.data;
+    },
+    gopage(size) {
+      if (size) {
+        this.form.page_size = size;
+      }
+      this.form.page = this.$refs.pageButton.page;
+      this.getData();
+    },
+    edit(row) {
+      this.$router.push({
+        path: "/journal/journal/add",
+        query: { id: row.id },
+      });
+    },
+    add() {
+      this.$router.push({ path: "/journal/journal/add" });
+    },
+    detail(id) {
+      this.$router.push({
+        path: "/company/detail",
+        query: { id: id, page: this.form.page, page_size: this.form.page_size },
+      });
+    },
+    search() {
+      this.getData();
+    },
+    getData() {
+      var parm = this.form;
+      this.loading = true;
+      this.$api.getJournalList(parm).then((res) => {
+        this.list = res.data.data.list;
+        this.total = res.data.data.total;
+        this.loading = false;
+      });
+    },
+    del(id) {
+      this.$confirm("确定删除吗", "提示", {
+        type: "warning",
+      }).then(() => {
+        this.$api.deleteEnterprise({ id: id }).then((res) => {
+          this.$message({
+            message: "删除成功",
+            type: "success",
+          });
+          this.getData();
+        });
+      });
+    },
+  },
+  created() {
+    this.getData();
+  },
+};
+</script>

+ 403 - 0
src/views/journalQun/Organizer.vue

@@ -0,0 +1,403 @@
+<style lang="scss" scoped>
+.preview {
+  .el-form-item {
+    margin-bottom: 15px;
+  }
+  label,
+  p {
+    line-height: 25px !important;
+  }
+}
+.el-cascader {
+  width: 100%;
+}
+a {
+  text-decoration: none;
+  color: #409eff;
+  cursor: pointer;
+}
+// 右边
+.item-main {
+  // margin:34px;
+  // height:600px;
+  // background: #FFFFFF;
+  border: 1px solid #dddddd;
+  box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.13);
+  border-radius: 20px;
+  .el-form.over_y {
+    max-height: calc(100vh - 340px);
+  }
+  /deep/.el-form-item__label {
+    float: none;
+  }
+}
+// label样式
+.edit_label {
+  /deep/.el-input__inner {
+    background: #f5faff;
+    border: 0px;
+    padding: 0px;
+  }
+}
+/deep/.opicon {
+  font-weight: bold;
+  padding: 5px;
+  color: #3895fe;
+}
+.tpl_title {
+  font-size: 18px;
+  margin: 20px 0;
+}
+.tpl_form {
+  margin: 20px;
+  border: 1px solid #ccc;
+  border-radius: 20px;
+  /deep/.el-form-item {
+    background: none;
+  }
+  /deep/.el-form-item__content {
+    width: 100%;
+  }
+}
+.survey_logo {
+  position: relative;
+  top: 15px;
+  left: 20px;
+}
+.result_dialog .el-dialog{
+    width: 40%;
+    margin-top:20vh!important;
+}
+.result-item{
+    height: 35px;
+    .label{
+        font-weight: 600;
+    }
+}
+// 上传
+
+/deep/.avatar-uploader .el-upload {
+  width: 148px;
+  height: 148px;
+  line-height: 148px;
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+  .avatar {
+    width: 100%;
+    height: auto;
+  }
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 68px;
+  height: 68px;
+  line-height: 68px;
+  text-align: center;
+}
+.avatar {
+  width: 68px;
+  height: 68px;
+  display: block;
+}
+/deep/.speaker_avatar .el-upload {
+  width: 80px;
+  height: 80px;
+  line-height: 80px;
+}
+.hotel_imgs {
+  /deep/.el-upload--picture-card {
+    width: 79px;
+    height: 79px;
+    line-height: 79px;
+  }
+}
+</style>
+<template>
+  <section>
+    <p><span>刊群导览></span>主办单位</p>
+    <div class="content">
+      <div class="filter">
+        <el-form
+          size="small"
+          label-width="70px"
+          :inline="true"
+          label-position="left"
+        >
+          <el-form-item label="">
+            <el-input
+              clearable
+              placeholder="请输入标题"
+              v-model="form.name"
+              @clear="getData"
+            ></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="search">搜索</el-button>
+          </el-form-item>
+          <el-form-item style="float:right" >
+                <el-button @click="dialogVisible1=true" plain icon="el-icon-upload" type="primary">导入</el-button>
+          </el-form-item>
+          <el-form-item style="float:right" >
+                <el-button @click="download" plain icon="el-icon-download" type="primary">导出</el-button>
+          </el-form-item>
+          <el-form-item style="float: right">
+            <el-button @click="add" type="primary">添加主办单位</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <el-table
+        class="table"
+        :data="list"
+        height="50vh"
+        border
+        v-loading="loading"
+        default-expand-all
+        row-key="id"
+        style="width: 100%"
+      >
+        <el-table-column prop="name" label="单位名称"> </el-table-column>
+        <el-table-column prop="desc" label="主办单位简介" width="1200px"></el-table-column>
+        <el-table-column prop="journal_num" label="期刊数量"></el-table-column>
+        <el-table-column prop="zip" width="150" label="操作">
+          <template slot-scope="scope">
+            <el-button class="edit" type="text" @click="edit(scope.row)"
+              >编辑</el-button
+            >
+            <el-button class="del" @click="del(scope.row.id)" type="text"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <Page
+        ref="pageButton"
+        :current="form.page"
+        :page_size="form.page_size"
+        :total="total"
+        @pageChange="gopage"
+      />
+    </div>
+    <!--新增编辑-->
+    <el-dialog
+      class='fu-dialog'
+      :title="dialogTitle"
+      :close-on-click-modal="false"
+      :visible.sync="dialogVisible"
+    >
+      <el-form
+        size="small"
+        class="preview"
+        :inline="false"
+        label-width="80px"
+        :model="form1"
+        ref="form1"
+        :rules="rules"
+      >
+        <el-form-item label="单位名称" prop="name">
+          <el-input v-model="form1.name" placeholder="请输入单位名称" maxlength="50" show-word-limit></el-input>
+        </el-form-item>
+        <el-form-item label="单位简介" prop="desc">
+          <el-input type="textarea" v-model="form1.desc" placeholder="请输入单位简介"></el-input>
+        </el-form-item>
+        <el-form-item label="单位封面" prop="img">
+          <el-upload
+            class="avatar-uploader"
+            action="/api/admin/uploadfile"
+            :show-file-list="false"
+            :on-success="handleAvatarSuccess"
+          >
+            <img v-if="form1.img" :src="form1.img" class="avatar" />
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+          </el-upload>
+          <span style="font-size: 12px; color: #999999"
+            >建议图片尺寸为:210*160</span
+          >
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" type="primary" @click="save">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+        class="fu-dialog"
+        title="导入" width="400px"
+        :close-on-click-modal="false"
+        :visible.sync="dialogVisible1"
+      > 
+        <el-upload
+          class="upload-demo"
+          action="/api/admin/uploadfile"
+          :show-file-list="false"
+          :on-success="handleAvatarSuccess1">
+          <el-button size="small" type="primary">点击上传</el-button>
+          <div slot="tip" class="el-upload__tip">只能上传.xls/.xlsx文件,且不超过500M</div>
+          
+        </el-upload>
+        <div>{{file}}</div>
+         <span slot="footer" class="dialog-footer">
+          <el-button size="small" type="normal" @click="dialogVisible1=false">取消</el-button>
+          <el-button size="small" type="primary" @click="upload">确 定</el-button>
+        </span>
+      </el-dialog>
+  </section>
+</template>
+<script>
+import Page from "../../components/Page";
+import fuEditor from '../../components/fuEditor'
+export default {
+  components: {
+    Page,
+    fuEditor
+  },
+  data() {
+    return {
+      form: { name: "", page: 1, page_size: 20 },
+      total: 1,
+      list: [{ name: "2333" }],
+      loading: false,
+      dialogTitle:"",
+      dialogVisible:false,
+      dialogVisible1:false,
+      rules: {
+        name: [{ required: true, message: "请输入单位名称", trigger: "blur" }],
+        desc: [{ required: true, message: "请输入单位简介", trigger: "blur" }],
+        img: [{ required: true, message: "请上传单位封面", trigger: "blur" }],
+      },
+      form1:{},
+      file:''
+    };
+  },
+  methods: {
+     upload(){
+      this.$api.upOrganizerData({file:this.file}).then(res=>{
+        this.dialogVisible1=false;
+        this.getData();
+          this.$message({
+            message: "上传成功",
+            type: "success",
+          });
+      })
+    },
+    download(){
+      this.$api.getOrganizerData().then(res=>{
+          var elink = document.createElement("a");
+          let blob = new Blob([res.data], {
+            type: "application/vnd.ms-excel,charset=UTF-8",
+          });
+          let objUrl = URL.createObjectURL(blob);
+          let file_name = decodeURIComponent(
+            res.headers["content-disposition"].split("=")[1]
+          );
+          console.log(file_name);
+          elink.download = file_name;
+          elink.style.display = "none";
+          elink.href = objUrl;
+          document.body.appendChild(elink);
+          elink.click();
+          document.body.removeChild(elink);
+      })
+    },
+    //封面
+    handleAvatarSuccess(res, file) {
+      this.$set(this.form1,'img',file.response.data)
+    },
+    handleAvatarSuccess1(res, file) {
+      this.file=file.response.data;
+    },
+    search() {
+      let parm = this.form;
+      this.getData();
+    },
+    add() {
+      this.form1 = {};
+      this.dialogVisible = true;
+      this.dialogTitle = "添加主办单位";
+    },
+    addArticle(){
+          this.$router.push({path:'/article/article/add'})
+    },
+    gopage(size) {
+      if (size) {
+        this.form.page_size = size;
+      }
+      this.form.page = this.$refs.pageButton.page;
+      this.getData();
+    },
+    getData() {
+      var parm = this.form;
+      this.loading = true;
+      this.$api.getOrganizerList(parm).then((res) => {
+        console.log(res)
+        this.list = res.data.data.list;
+        this.loading = false;
+      });
+    },
+    search(){
+      this.getData()
+    },
+    del(id) {
+      this.$confirm("确定删除吗", "提示", {
+        type: "warning",
+      }).then(() => {
+        this.$api.delOrganizer({ id: id }).then((res) => {
+          this.$message({
+            message: "删除成功",
+            type: "success",
+          });
+          this.getData();
+        });
+      });
+    },
+    edit(row) {
+      this.dialogVisible = true
+      this.form1 = row
+    },
+    save() {
+      this.$refs["form1"].validate((valid) => {
+        if (valid) {
+          let parm = this.form1;
+          let id = this.form1.id;
+          parm.receiver_id = JSON.stringify(parm.receiver_id);
+          if (id) {
+            this.$api.updateOrganizer(parm).then((res) => {
+              if (res.data.code == 0) {
+                this.$message({
+                  type: "success",
+                  message: "保存成功!",
+                });
+              } else {
+                this.$message.error("保存失败!");
+              }
+              this.getData();
+              this.dialogVisible = false;
+            });
+          } else {
+            this.$api.addOrganizer(parm).then((res) => {
+              if (res.data.code == 0) {
+                this.$message({
+                  type: "success",
+                  message: "保存成功!",
+                });
+              } else {
+                this.$message.error("保存失败!");
+              }
+              this.getData();
+              this.dialogVisible = false;
+            });
+          }
+        }
+      });
+    },
+  },
+  created() {
+    this.getData();
+  },
+};
+</script>

+ 244 - 0
src/views/journalQun/ShowJournal.vue

@@ -0,0 +1,244 @@
+<style lang="scss" scoped>
+.tbl {
+  // border:1px solid #ccc;
+}
+.tbl tr {
+  height: 31px;
+}
+.tbl td {
+  padding: 5px;
+  border: 1px solid #ccc;
+}
+// 活动回顾
+.journalItem {
+  height: 35px;
+  background: #0f1f8c;
+  margin-top: 65px;
+  display: flex;
+  // flex-direction: column;
+  justify-content: space-between;
+  position: relative;
+}
+.journalItem .title {
+  color: #ffffff;
+  width: 100px;
+  line-height: 35px;
+  text-align: center;
+}
+.add{
+  position:absolute;
+  right: 0px;
+  top:-35px;
+  background: #0f1f8c;
+  border:1px solid #0f1f8c;
+}
+.overActivity {
+}
+</style>
+<template>
+  <section>
+    <p><span>刊群导览></span>期刊详情</p>
+    <div class="content">
+      <div class="jDetail">
+        <img
+          :src="form.img"
+          alt=""
+          width="159"
+          height="210"
+          style="float: left"
+        />
+        <table
+          class="tbl"
+          cellpadding="0"
+          cellspacing="0"
+          width="80%"
+          style="float: left; margin-left: 45px"
+        >
+          <tr>
+            <td width="119" align="right">名称:</td>
+            <td>{{ form.name }}</td>
+          </tr>
+          <tr>
+            <td align="right">微信号:</td>
+            <td>{{ form.wxcode }}</td>
+          </tr>
+          <tr>
+            <td align="right">主办单位:</td>
+            <td>{{ form.organizer_name }}</td>
+          </tr>
+          <tr>
+            <td align="right">所属学科:</td>
+            <td>{{ form.subject_name }}</td>
+          </tr>
+          <tr>
+            <td align="right">简介:</td>
+            <td>{{ form.desc }}</td>
+          </tr>
+        </table>
+        <div style="clear: both; height: 0; content: ''"></div>
+      </div>
+      <!-- 活动回顾 -->
+      <div class="journalItem overActivity">
+        <div class="title">活动回顾</div>
+        <div class="title more">查看更多>></div>
+        <el-button type="primary" class="add" size="mini">发布活动回顾</el-button>
+      </div>
+      <div>
+        <el-table
+          :data="oldActivityList"
+        >
+          <el-table-column label="活动海报">
+            <template slot-scope="scope">
+              <img :src="scope.row.img" alt="" width="120" height="80" style="margin:10px;">
+            </template>
+          </el-table-column>
+          <el-table-column label="活动名称" prop="name"></el-table-column>
+          <el-table-column label="活动时间">
+            <template slot-scope="scope">
+              <p>{{scope.row.begin_time}}</p>
+              <p>{{scope.row.end_time}}</p>
+            </template>
+          </el-table-column>
+          <el-table-column label="活动地址" prop="address"></el-table-column>
+          <el-table-column label="活动简介" prop="desc" width="500"></el-table-column>
+          <el-table-column label="活动人数" prop="assembly_number"></el-table-column>
+          <el-table-column label="操作">
+            <template slot-scope="scope">
+              <el-button class="edit" type="text" @click="edit(scope.row)"
+                >编辑</el-button
+              >
+              <el-button class="del" @click="del" type="text">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <!-- 活动预告 -->
+      <div class="journalItem preActivity">
+        <div class="title">活动预告</div>
+        <div class="title more">查看更多>></div>
+        <el-button type="primary" class="add" size="mini">发布活动预告</el-button>
+      </div>
+      <div>
+        <el-table
+          :data="newActivityList"
+        >
+          <el-table-column label="活动海报">
+            <template slot-scope="scope">
+              <img :src="scope.row.img" alt="" width="120" height="80" style="margin:10px;">
+            </template>
+          </el-table-column>
+          <el-table-column label="活动名称" prop="name"></el-table-column>
+          <el-table-column label="活动时间">
+            <template slot-scope="scope">
+              <p>{{scope.row.begin_time}}</p>
+              <p>{{scope.row.end_time}}</p>
+            </template>
+          </el-table-column>
+          <el-table-column label="活动地址" prop="address"></el-table-column>
+          <el-table-column label="活动简介" prop="desc" width="500"></el-table-column>
+          <el-table-column label="活动人数" prop="assembly_number"></el-table-column>
+          <el-table-column label="操作">
+            <template slot-scope="scope">
+              <el-button class="edit" type="text" @click="edit(scope.row)"
+                >编辑</el-button
+              >
+              <el-button class="del" @click="del" type="text">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <!-- 精品文章 -->
+      <div class="journalItem preActivity">
+        <div class="title">精品文章</div>
+        <div class="title more">查看更多>></div>
+        <el-button type="primary" class="add" size="mini">发布精品文章</el-button>
+      </div>
+      <div>
+        <el-table
+          :data="goodArticleList"
+        >
+          <el-table-column label="文章名称" prop="name"></el-table-column>
+          <el-table-column label="作者" prop="author"></el-table-column>
+          <el-table-column label="发布时间" prop="ctime" width="500"></el-table-column>
+          <el-table-column label="出版时间" prop="publish_time"></el-table-column>
+          <el-table-column label="操作">
+            <template slot-scope="scope">
+              <el-button class="edit" type="text" @click="edit(scope.row)"
+                >编辑</el-button
+              >
+              <el-button class="del" @click="del" type="text">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+  </section>
+</template>
+<script>
+import fuEditor from "../../components/fuEditor";
+export default {
+  components: {
+    fuEditor,
+  },
+  data() {
+    return {
+      form: {},
+      oldActivityList: [],
+      newActivityList: [],
+      organizerList: [],
+      goodArticleList:[],
+      imageUrl: "",
+      rules: {
+        name: [{ required: true, message: "请输入标题", trigger: "blur" }],
+        wxcode: [{ required: true, message: "请输入微信号", trigger: "blur" }],
+        organizer_id: [
+          { required: true, message: "请选择主办单位", trigger: "blur" },
+        ],
+        subject_id: [
+          { required: true, message: "请选择学科", trigger: "change" },
+        ],
+        img: [{ required: true, message: "封面图", trigger: "blur" }],
+      },
+    };
+  },
+  methods: {
+    gopage(size) {
+      if (size) {
+        this.form.page_size = size;
+      }
+      this.form.page = this.$refs.pageButton.page;
+      this.getData();
+    },
+    getData() {
+      this.loading = true;
+      // 期刊详情
+      let id = this.$route.query.id;
+      if (id) {
+        this.$api.showJournal({ id: id }).then((res) => {
+          console.log(res)
+          this.form = res.data.data;
+          this.oldActivityList = res.data.data.old_activity;
+          this.newActivityList = res.data.data.new_activity;
+          this.goodArticleList = res.data.data.good_article;
+        });
+      }
+    },
+    del(id) {
+      this.$confirm("确定删除吗", "提示", {
+        type: "warning",
+      }).then(() => {
+        this.$api.delJournal({ id: id }).then((res) => {
+          this.$message({
+            message: "删除成功",
+            type: "success",
+          });
+          this.getData();
+        });
+      });
+    },
+  },
+  created() {
+    this.getData();
+  },
+};
+</script>

+ 385 - 0
src/views/journalQun/Subject.vue

@@ -0,0 +1,385 @@
+<style lang="scss" scoped>
+.preview {
+  .el-form-item {
+    margin-bottom: 15px;
+  }
+  label,
+  p {
+    line-height: 25px !important;
+  }
+}
+.el-cascader {
+  width: 100%;
+}
+a {
+  text-decoration: none;
+  color: #409eff;
+  cursor: pointer;
+}
+// 右边
+.item-main {
+  // margin:34px;
+  // height:600px;
+  // background: #FFFFFF;
+  border: 1px solid #dddddd;
+  box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.13);
+  border-radius: 20px;
+  .el-form.over_y {
+    max-height: calc(100vh - 340px);
+  }
+  /deep/.el-form-item__label {
+    float: none;
+  }
+}
+// label样式
+.edit_label {
+  /deep/.el-input__inner {
+    background: #f5faff;
+    border: 0px;
+    padding: 0px;
+  }
+}
+/deep/.opicon {
+  font-weight: bold;
+  padding: 5px;
+  color: #3895fe;
+}
+.tpl_title {
+  font-size: 18px;
+  margin: 20px 0;
+}
+.tpl_form {
+  margin: 20px;
+  border: 1px solid #ccc;
+  border-radius: 20px;
+  /deep/.el-form-item {
+    background: none;
+  }
+  /deep/.el-form-item__content {
+    width: 100%;
+  }
+}
+.survey_logo {
+  position: relative;
+  top: 15px;
+  left: 20px;
+}
+.result_dialog .el-dialog{
+    width: 40%;
+    margin-top:20vh!important;
+}
+.result-item{
+    height: 35px;
+    .label{
+        font-weight: 600;
+    }
+}
+// 上传
+
+/deep/.avatar-uploader .el-upload {
+  width: 148px;
+  height: 148px;
+  line-height: 148px;
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+  .avatar {
+    width: 100%;
+    height: auto;
+  }
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 68px;
+  height: 68px;
+  line-height: 68px;
+  text-align: center;
+}
+.avatar {
+  width: 68px;
+  height: 68px;
+  display: block;
+}
+/deep/.speaker_avatar .el-upload {
+  width: 80px;
+  height: 80px;
+  line-height: 80px;
+}
+.hotel_imgs {
+  /deep/.el-upload--picture-card {
+    width: 79px;
+    height: 79px;
+    line-height: 79px;
+  }
+}
+</style>
+<template>
+  <section>
+    <p><span>刊群导览></span>学科</p>
+    <div class="content">
+      <div class="filter">
+        <el-form
+          size="small"
+          label-width="70px"
+          :inline="true"
+          label-position="left"
+        >
+          <el-form-item label="">
+            <el-input
+              clearable
+              placeholder="请输入标题"
+              v-model="form.name"
+              @clear="getData"
+            ></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="search">搜索</el-button>
+          </el-form-item>
+          <el-form-item style="float:right" >
+                <el-button @click="dialogVisible1=true" plain icon="el-icon-upload" type="primary">导入</el-button>
+          </el-form-item>
+          <el-form-item style="float:right" >
+                <el-button @click="download" plain icon="el-icon-download" type="primary">导出</el-button>
+          </el-form-item>
+          <el-form-item style="float: right">
+            <el-button @click="add" type="primary">添加学科</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <el-table
+        class="table"
+        :data="list"
+        height="50vh"
+        border
+        v-loading="loading"
+        default-expand-all
+        row-key="id"
+        style="width: 100%"
+      >
+        <el-table-column prop="name" label="学科名称"> </el-table-column>
+        <el-table-column prop="desc" label="学科简介" width="1200px"></el-table-column>
+        <el-table-column prop="journal_name" label="期刊数量"></el-table-column>
+        <el-table-column prop="zip" width="150" label="操作">
+          <template slot-scope="scope">
+            <el-button class="edit" type="text" @click="edit(scope.row)"
+              >编辑</el-button
+            >
+            <el-button class="del" @click="del(scope.row.id)" type="text"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <Page
+        ref="pageButton"
+        :current="form.page"
+        :page_size="form.page_size"
+        :total="total"
+        @pageChange="gopage"
+      />
+    </div>
+    <!--新增编辑-->
+    <el-dialog
+      class='fu-dialog'
+      :title="dialogTitle"
+      :close-on-click-modal="false"
+      :visible.sync="dialogVisible"
+    >
+      <el-form
+        size="small"
+        class="preview"
+        :inline="false"
+        label-width="80px"
+        :model="form1"
+        ref="form1"
+        :rules="rules"
+      >
+        <el-form-item label="学科名称" prop="name">
+          <el-input v-model="form1.name" placeholder="请输入学科名称" maxlength="50" show-word-limit></el-input>
+        </el-form-item>
+        <el-form-item label="学科简介" prop="desc">
+          <el-input type="textarea" v-model="form1.desc" placeholder="请输入学科简介"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" type="primary" @click="save">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+        class="fu-dialog"
+        title="导入" width="400px"
+        :close-on-click-modal="false"
+        :visible.sync="dialogVisible1"
+      > 
+        <el-upload
+          class="upload-demo"
+          action="/api/admin/uploadfile"
+          :show-file-list="false"
+          :on-success="handleAvatarSuccess1">
+          <el-button size="small" type="primary">点击上传</el-button>
+          <div slot="tip" class="el-upload__tip">只能上传.xls/.xlsx文件,且不超过500M</div>
+          
+        </el-upload>
+        <div>{{file}}</div>
+         <span slot="footer" class="dialog-footer">
+          <el-button size="small" type="normal" @click="dialogVisible1=false">取消</el-button>
+          <el-button size="small" type="primary" @click="upload">确 定</el-button>
+        </span>
+      </el-dialog>
+  </section>
+</template>
+<script>
+import Page from "../../components/Page";
+import fuEditor from '../../components/fuEditor'
+export default {
+  components: {
+    Page,
+    fuEditor
+  },
+  data() {
+    return {
+      form: { name: "", page: 1, page_size: 20 },
+      total: 1,
+      list: [{ name: "2333" }],
+      loading: false,
+      dialogTitle:"",
+      dialogVisible:false,
+      dialogVisible1:false,
+      rules: {
+        name: [{ required: true, message: "请输入学科名称", trigger: "blur" }],
+        desc: [{ required: true, message: "请输入学科简介", trigger: "blur" }]
+      },
+      form1:{},
+      file:''
+    };
+  },
+  methods: {
+    upload(){
+      this.$api.upSubjectData({file:this.file}).then(res=>{
+          this.dialogVisible1=false;
+          this.getData();
+          this.$message({
+            message: "上传成功",
+            type: "success",
+          });
+      })
+    },
+    download(){
+      this.$api.getSubjectData().then(res=>{
+          var elink = document.createElement("a");
+          let blob = new Blob([res.data], {
+            type: "application/vnd.ms-excel,charset=UTF-8",
+          });
+          let objUrl = URL.createObjectURL(blob);
+          let file_name = decodeURIComponent(
+            res.headers["content-disposition"].split("=")[1]
+          );
+          console.log(file_name);
+          elink.download = file_name;
+          elink.style.display = "none";
+          elink.href = objUrl;
+          document.body.appendChild(elink);
+          elink.click();
+          document.body.removeChild(elink);
+      })
+    },
+    handleAvatarSuccess1(res, file) {
+      this.file=file.response.data;
+    },
+    //封面
+    handleAvatarSuccess(res, file) {
+      this.form1.img = file.response.data;
+      console.log(this.form1.img);
+    },
+    search() {
+      this.getData();
+    },
+    add() {
+      this.form1 = {};
+      this.dialogVisible = true;
+      this.dialogTitle = "添加主办单位";
+    },
+    addArticle(){
+          this.$router.push({path:'/article/article/add'})
+    },
+    gopage(size) {
+      if (size) {
+        this.form.page_size = size;
+      }
+      this.form.page = this.$refs.pageButton.page;
+      this.getData();
+    },
+    getData() {
+      var parm = this.form;
+      this.loading = true;
+      this.$api.getSubjectList(parm).then((res) => {
+        console.log(res)
+        this.list = res.data.data.list;
+        this.loading = false;
+      });
+    },
+    del(id) {
+      this.$confirm("确定删除吗", "提示", {
+        type: "warning",
+      }).then(() => {
+        this.$api.delSubject({ id: id }).then((res) => {
+          this.$message({
+            message: "删除成功",
+            type: "success",
+          });
+          this.getData();
+        });
+      });
+    },
+    edit(row) {
+        this.form1 = row
+      this.dialogVisible = true
+    },
+    save() {
+      this.$refs["form1"].validate((valid) => {
+        if (valid) {
+          let parm = this.form1;
+          let id = this.form1.id;
+          parm.receiver_id = JSON.stringify(parm.receiver_id);
+          if (id) {
+            this.$api.updateSubject(parm).then((res) => {
+              if (res.data.code == 0) {
+                this.$message({
+                  type: "success",
+                  message: "保存成功!",
+                });
+              } else {
+                this.$message.error("保存失败!");
+              }
+              this.getData();
+              this.dialogVisible = false;
+            });
+          } else {
+            this.$api.addSubject(parm).then((res) => {
+              if (res.data.code == 0) {
+                this.$message({
+                  type: "success",
+                  message: "保存成功!",
+                });
+              } else {
+                this.$message.error("保存失败!");
+              }
+              this.getData();
+              this.dialogVisible = false;
+            });
+          }
+        }
+      });
+    },
+  },
+  created() {
+    this.getData();
+  },
+};
+</script>

+ 3 - 0
src/views/match/index.vue

@@ -0,0 +1,3 @@
+<template>
+    <section>比赛</section>
+</template>

+ 148 - 0
src/views/user/index.vue

@@ -0,0 +1,148 @@
+<template>
+    <section class="content">
+        <h1>用户管理</h1>
+        <el-divider></el-divider>
+        <el-form label-width="40px" class="filter-form">
+            <el-row>
+                <el-col :span="9">
+                    <el-form-item label="用户">
+                        <el-input clearable v-model="queryParams.username" placeholder="请输入用户名/代码"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="4">
+                    <el-form-item>
+                        <el-button type="danger" @click="getData">筛选</el-button>
+                    </el-form-item>
+                </el-col>
+            </el-row>   
+        </el-form>
+        <el-row :gutter="10" class="mb8">
+            <el-col :span="1.5">
+                <el-button
+                type="primary"
+                plain
+                icon="el-icon-plus"
+                size="mini"
+                @click="handleAdd"
+                >新增</el-button>
+            </el-col>
+        </el-row>
+        <el-table v-loading='loading' :data="list" style="width: 100%;margin-top:10px;" height="50vh">
+                <el-table-column align="center" prop="usercode" label="代码"/>
+                <el-table-column align="center"  prop="username" label="用户名"/>
+                <el-table-column align="center"  prop="date" label="绑定">
+                    <template slot-scope="scope">
+                        <span v-if='scope.row.is_bind'>已绑定</span>
+                         <span v-else>未绑定</span>
+                    </template>
+                </el-table-column>
+                <el-table-column align="center"  prop="date" label="资产"/>
+                <el-table-column align="center"  prop="date" label="操作">
+                    <template slot-scope="scope">
+                        <el-button @click="title='编辑用户',open=true,form=scope.row" size="mini" type="primary">编辑</el-button>
+                    </template>
+                </el-table-column>
+        </el-table>
+        <Page
+            ref="pageButton"
+            :current="form.page"
+            :page_size="form.page_size"
+            :total="total"
+            @pageChange="gopage"
+        />
+        <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+            <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+                <el-form-item label="用户名" prop="username">
+                    <el-input clearable v-model="form.username" placeholder="请输入用户名"></el-input>
+                </el-form-item>
+                <el-form-item label="用户代码" prop="usercode">
+                    <el-input clearable v-model="form.usercode" placeholder="请输入代码"></el-input>
+                </el-form-item>
+                <el-form-item label="用户代码" v-if='form.id'>
+                    <el-select v-model="form.is_bind" placeholder="请选择比赛分组">
+                        <el-option label="已绑定" :value="1"></el-option>
+                        <el-option label="未绑定" :value="0"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="submitForm">确 定</el-button>
+                <el-button @click="open=false">取 消</el-button>
+            </div>
+        </el-dialog>
+    </section>
+</template>
+<script>
+import Page from "../../components/Page";
+export default {
+    components: {
+        Page,
+    },
+    data(){
+        return{
+            loading:false,
+            queryParams:{
+                page:1
+            },
+            form:{},
+            list:[{},{}],
+            total:0,
+            title:'新增用户',
+            open:false,
+            rules:{
+                username: [
+                    { required: true, message: '请输入用户名', trigger: 'blur' }
+                ],
+                usercode: [
+                    { required: true, message: '请输入用户代码', trigger: 'blur' }
+                ],
+            }
+        }
+    },
+    methods:{
+        gopage(size) {
+            if (size) {
+                this.queryParams.page_size = size;
+            }
+            this.queryParams.page = this.$refs.pageButton.page;
+            this.getData();
+        },
+        getData(){
+            this.loading = true;
+            this.$api.getUserList(this.queryParams).then(res=>{
+                this.list=res.data.data.list
+                this.total = res.data.data.total;
+                this.loading = false;
+            })
+        },
+        handleAdd(){
+            this.open=true;
+            this.title='新增用户';
+            this.form={}
+        },
+        /** 提交按钮 */
+        submitForm() {
+            this.$refs["form"].validate(valid => {
+                if (valid) {
+                if (this.form.id != null) {
+                    this.$api.editUser(this.form).then(response => {
+                    this.msgSuccess("修改成功");
+                    this.open = false;
+                    this.getData();
+                    });
+                } else {
+                    this.$api.addUser(this.form).then(response => {
+                    this.msgSuccess("新增成功");
+                    this.open = false;
+                    this.getData();
+                    });
+                }
+        }
+      });
+    },
+    },
+    created(){
+       this.getData() 
+    }
+}
+</script>

+ 13 - 0
vue.config.js

@@ -0,0 +1,13 @@
+module.exports={
+    devServer:{
+        proxy:{
+            '/api':{
+                // target:'http://39.107.246.59:81',
+                target:'https://test.scxjc.club',
+                // target:'http://caos.tederen.com',
+                changeOrigin: true,
+            }
+        }
+    },
+    publicPath:'/'
+}