Pārlūkot izejas kodu

溧水app、小程序代码

sunyadv 5 gadi atpakaļ
vecāks
revīzija
fe43c6b8ea
97 mainītis faili ar 20105 papildinājumiem un 51 dzēšanām
  1. 0 34
      lss_vue/index.html
  2. BIN
      lss_vue/src/assets/image/noPic.png
  3. 18 16
      lss_vue/src/views/assets/assets.vue
  4. 1 0
      lss_vue/src/views/assets/assetsOperation.vue
  5. 1 1
      lss_vue/src/views/data/data.vue
  6. 5 0
      lss_vue_wx/.babelrc
  7. 8 0
      lss_vue_wx/.gitignore
  8. 21 0
      lss_vue_wx/LICENSE
  9. 0 0
      lss_vue_wx/README.md
  10. BIN
      lss_vue_wx/cloud.ico
  11. 6 0
      lss_vue_wx/config/dev.env.js
  12. 41 0
      lss_vue_wx/config/index.js
  13. 3 0
      lss_vue_wx/config/prod.env.js
  14. 138 0
      lss_vue_wx/index.html
  15. 9586 0
      lss_vue_wx/package-lock.json
  16. 78 0
      lss_vue_wx/package.json
  17. 49 0
      lss_vue_wx/src/App.vue
  18. 167 0
      lss_vue_wx/src/assets/css/custom-picker.css
  19. 539 0
      lss_vue_wx/src/assets/iconfont/demo.css
  20. 331 0
      lss_vue_wx/src/assets/iconfont/demo_index.html
  21. 45 0
      lss_vue_wx/src/assets/iconfont/iconfont.css
  22. BIN
      lss_vue_wx/src/assets/iconfont/iconfont.eot
  23. 1 0
      lss_vue_wx/src/assets/iconfont/iconfont.js
  24. 58 0
      lss_vue_wx/src/assets/iconfont/iconfont.json
  25. 47 0
      lss_vue_wx/src/assets/iconfont/iconfont.svg
  26. BIN
      lss_vue_wx/src/assets/iconfont/iconfont.ttf
  27. BIN
      lss_vue_wx/src/assets/iconfont/iconfont.woff
  28. BIN
      lss_vue_wx/src/assets/iconfont/iconfont.woff2
  29. BIN
      lss_vue_wx/src/assets/image/404.png
  30. BIN
      lss_vue_wx/src/assets/image/add.png
  31. BIN
      lss_vue_wx/src/assets/image/camera.png
  32. BIN
      lss_vue_wx/src/assets/image/del.png
  33. BIN
      lss_vue_wx/src/assets/image/delete.png
  34. BIN
      lss_vue_wx/src/assets/image/downLoad.png
  35. BIN
      lss_vue_wx/src/assets/image/down_blue.png
  36. BIN
      lss_vue_wx/src/assets/image/edit.png
  37. BIN
      lss_vue_wx/src/assets/image/export.png
  38. BIN
      lss_vue_wx/src/assets/image/loadMore.png
  39. BIN
      lss_vue_wx/src/assets/image/login_logo.png
  40. BIN
      lss_vue_wx/src/assets/image/my_assets.png
  41. BIN
      lss_vue_wx/src/assets/image/my_com.png
  42. BIN
      lss_vue_wx/src/assets/image/my_message.png
  43. BIN
      lss_vue_wx/src/assets/image/my_score.png
  44. BIN
      lss_vue_wx/src/assets/image/my_sug.png
  45. BIN
      lss_vue_wx/src/assets/image/my_sys.png
  46. BIN
      lss_vue_wx/src/assets/image/noList.png
  47. BIN
      lss_vue_wx/src/assets/image/noPic.png
  48. BIN
      lss_vue_wx/src/assets/image/password.png
  49. BIN
      lss_vue_wx/src/assets/image/phone.png
  50. BIN
      lss_vue_wx/src/assets/image/pull_down.png
  51. BIN
      lss_vue_wx/src/assets/image/pull_down_blue.png
  52. BIN
      lss_vue_wx/src/assets/image/register.png
  53. BIN
      lss_vue_wx/src/assets/image/search.png
  54. BIN
      lss_vue_wx/src/assets/image/tab_ass.png
  55. BIN
      lss_vue_wx/src/assets/image/tab_ass_choose.png
  56. BIN
      lss_vue_wx/src/assets/image/tab_data.png
  57. BIN
      lss_vue_wx/src/assets/image/tab_data_choose.png
  58. BIN
      lss_vue_wx/src/assets/image/tab_my.png
  59. BIN
      lss_vue_wx/src/assets/image/tab_my_choose.png
  60. BIN
      lss_vue_wx/src/assets/image/user.png
  61. BIN
      lss_vue_wx/src/assets/image/userHead.jpg
  62. BIN
      lss_vue_wx/src/assets/image/userHead.png
  63. BIN
      lss_vue_wx/src/assets/image/vcode.png
  64. 302 0
      lss_vue_wx/src/assets/js/custom-picker.js
  65. 59 0
      lss_vue_wx/src/assets/js/rem.js
  66. 72 0
      lss_vue_wx/src/common/js/util.js
  67. 0 0
      lss_vue_wx/src/components/.gitkeep
  68. 181 0
      lss_vue_wx/src/http.js
  69. 70 0
      lss_vue_wx/src/main.js
  70. 63 0
      lss_vue_wx/src/port.js
  71. 97 0
      lss_vue_wx/src/routes.js
  72. 61 0
      lss_vue_wx/src/views/404.vue
  73. 131 0
      lss_vue_wx/src/views/Home.vue
  74. 359 0
      lss_vue_wx/src/views/Login.vue
  75. 580 0
      lss_vue_wx/src/views/assets/assets.vue
  76. 528 0
      lss_vue_wx/src/views/assets/assetsDetail.vue
  77. 537 0
      lss_vue_wx/src/views/assets/assetsEdit.vue
  78. 390 0
      lss_vue_wx/src/views/assets/assetsHandle.vue
  79. 375 0
      lss_vue_wx/src/views/assets/assetsMaintain.vue
  80. 272 0
      lss_vue_wx/src/views/assets/assetsNumber.vue
  81. 372 0
      lss_vue_wx/src/views/assets/assetsOperation.vue
  82. 544 0
      lss_vue_wx/src/views/assets/assetsRegister.vue
  83. 741 0
      lss_vue_wx/src/views/data/data.vue
  84. 136 0
      lss_vue_wx/src/views/my/my.vue
  85. 246 0
      lss_vue_wx/src/views/my/myAddress.vue
  86. 269 0
      lss_vue_wx/src/views/my/myAssets.vue
  87. 875 0
      lss_vue_wx/src/views/my/myGrade.vue
  88. 161 0
      lss_vue_wx/src/views/my/myInsDetail.vue
  89. 297 0
      lss_vue_wx/src/views/my/myInstitution.vue
  90. 229 0
      lss_vue_wx/src/views/my/myMessage.vue
  91. 213 0
      lss_vue_wx/src/views/my/myScore.vue
  92. 272 0
      lss_vue_wx/src/views/my/myScoreDetail.vue
  93. 490 0
      lss_vue_wx/src/views/my/mySuggest.vue
  94. 7 0
      lss_vue_wx/src/vuex/actions.js
  95. 4 0
      lss_vue_wx/src/vuex/getters.js
  96. 29 0
      lss_vue_wx/src/vuex/store.js
  97. 0 0
      lss_vue_wx/static/.gitkeep

+ 0 - 34
lss_vue/index.html

@@ -5,10 +5,6 @@
         <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
         <title>溧水</title>
         <link rel="shortcut icon" type="image/x-icon" href="./cloud.ico" /> 
-        <!-- 高德地图 -->
-        <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=362cff852a3a37d328f9697352eebacd"></script>
-        <!-- 高德地图UI组件库 1.0 -->
-        <script src="//webapi.amap.com/ui/1.0/main.js"></script>
         <style>
             .toolbar {
                 background: #fff!important;
@@ -104,36 +100,6 @@
             .mint-indicator-wrapper {
                 z-index: 9999999!important;
             }
-
-            /* 滚动条样式修改 */
-            /*滚动条凹槽的颜色,还可以设置边框属性 */
-            /* ::-webkit-scrollbar-track-piece {
-                background-color:#f8f8f8;
-                -webkit-border-radius: 2em;
-                -moz-border-radius: 2em;
-                border-radius: 2em;
-            } */
-            /*滚动条的宽度*/
-            /* ::-webkit-scrollbar {
-                width:9px;
-            height: 9px;} */
-            /*滚动条的设置*/
-            /* ::-webkit-scrollbar-thumb {
-                background-color:#dddddd;
-                background-clip:padding-box;
-                -webkit-border-radius: 2em;
-                -moz-border-radius: 2em;
-                border-radius: 2em;} */
-
-            /*滚动条鼠标移上去*/
-            /* ::-webkit-scrollbar-thumb:hover {
-                background-color:#bbb;
-            } */
-
-            /*取消消息列表弹出框的内边距*/
-            /* .popover-self {
-                padding: 0 !important;
-            }     */
         </style>
     </head>
     <body>

BIN
lss_vue/src/assets/image/noPic.png


+ 18 - 16
lss_vue/src/views/assets/assets.vue

@@ -267,16 +267,16 @@
     }
 
     .searchbox img.searchbox_img {
-        width:0.3rem;
-        height: 0.3rem;
+        width:0.18rem;
+        height: 0.18rem;
         position: absolute;
         left: 0.04rem;
-        /* top: 0.02rem; */
+        top: 0.05rem;
     }
 
     .searchbox input.searchbox_text {
         font-size: 0.16rem;
-        height: 0.3rem;
+        height: 0.28rem;
         border-style:none;
         border: 1px solid #2680EB;
         border-radius: 50px;
@@ -293,8 +293,8 @@
         border: 0;
         background-color: transparent;
         outline: none;
-        height: 0.3rem;
-        font-size: 0.15rem;
+        height: 0.28rem;
+        font-size: 0.13rem;
         background: #2680EB;
         color: #fff;
         border-radius: 50px;
@@ -308,11 +308,12 @@
         display: inline-block;
         float: right;
         position: relative;
+        margin-top: 0.03rem;
     }
 
     .btn_img {
         float: right;
-        width: 0.3rem;
+        width: 0.25rem;
         vertical-align: middle;
     }
     
@@ -367,7 +368,7 @@
     }
 
     .searchkey .searchkey_word {
-        width: 90%;
+        width: 93%;
         display: inline-block;
         overflow-x: auto;
         white-space: nowrap;
@@ -379,7 +380,7 @@
     }
 
     .searchkey .searchkey_word a {
-        font-size: 0.15rem;
+        font-size: 0.13rem;
         padding: 0 0.05rem;
         color: #333;
         text-decoration:none;
@@ -391,14 +392,14 @@
 
     .searchkey .searchkey_btn {
         display: inline-block;
-        width: 10%;
+        width: 7%;
         height: 100%;
         float: right;
     }
 
     .searchkey .searchkey_btn img {
-        width: 0.36rem;
-        height: 0.3rem;
+        width: 0.25rem;
+        /* height: 0.3rem; */
         vertical-align: middle;
     }
 
@@ -435,11 +436,10 @@
         line-height: 0.2rem;
         font-size: 0.14rem;
         color: #ccc;
-        padding: 0 0.12rem;
-        margin: 0.02rem 0.03rem;
+        margin: 0.02rem 0.03rem 0.08rem;
         border: 1px solid #ccc;
         border-radius: 50px;
-        width: 0.8rem;
+        width: 0.76rem;
         text-align: center;
         overflow: hidden;
         text-overflow: ellipsis;
@@ -454,10 +454,12 @@
         background: #fff;
         position: absolute;
         z-index: 1;
+        border: 1px solid #ddd;
+        box-shadow: 5px 5px 10px #ddd;
     }
 
     .fixed-top{
-        top: 0.81rem;
+        top: 0.77rem;
     }
 
     .fixed-top::after{

+ 1 - 0
lss_vue/src/views/assets/assetsOperation.vue

@@ -296,6 +296,7 @@
         width: 100%;
         top: 0.4rem;
         z-index: 110;
+        border-bottom: 1px solid #ddd;
     }
 
     .detail {

+ 1 - 1
lss_vue/src/views/data/data.vue

@@ -668,7 +668,7 @@
         z-index: 105;
         width: 100%;
         top: 0;
-        
+        border-bottom: 1px solid #ddd;
     }
 
     .mint-tab-container {

+ 5 - 0
lss_vue_wx/.babelrc

@@ -0,0 +1,5 @@
+{
+  "presets": ["es2015", "stage-2"],
+  "plugins": ["transform-runtime"],
+  "comments": false
+}

+ 8 - 0
lss_vue_wx/.gitignore

@@ -0,0 +1,8 @@
+.DS_Store
+node_modules/
+npm-debug.log
+.editorconfig
+dist/
+.idea/misc.xml
+.idea/modules.xml
+.idea/workspace.xml

+ 21 - 0
lss_vue_wx/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016-present taylorchen709
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 0 - 0
lss_vue_wx/README.md


BIN
lss_vue_wx/cloud.ico


+ 6 - 0
lss_vue_wx/config/dev.env.js

@@ -0,0 +1,6 @@
+var merge = require('webpack-merge')
+var prodEnv = require('./prod.env')
+
+module.exports = merge(prodEnv, {
+    NODE_ENV: '"development"'
+})

+ 41 - 0
lss_vue_wx/config/index.js

@@ -0,0 +1,41 @@
+var path = require('path')
+
+module.exports = {
+  build: {
+    env: require('./prod.env'),
+    index: path.resolve(__dirname, '../dist/index.html'),
+    assetsRoot: path.resolve(__dirname, '../dist'),
+    assetsSubDirectory: 'static',
+    assetsPublicPath: './',
+    productionSourceMap: true,
+    productionGzip: false,
+    productionGzipExtensions: ['js', 'css'],
+    bundleAnalyzerReport: process.env.npm_config_report
+  },
+  dev: {
+    env: require('./dev.env'),
+    port: 8089,
+    autoOpenBrowser: true,
+    assetsSubDirectory: 'static',
+    assetsPublicPath: '/',
+    proxyTable: {
+        '/api': {    
+            target: 'http://192.168.101.166:8091',  // 接口域名 开发
+            secure: true,  // 如果是https接口,需要配置这个参数
+            changeOrigin: true,  //是否跨域
+            pathRewrite: { // 如果接口本身没有api的路径,那么这里将发送到后端的请求重写为没有api的路径
+                '^/api': '/' 
+            }
+        },
+        '/ips': {    
+            target: 'http://192.168.101.166:8080',  // 接口域名 开发
+            secure: true,  // 如果是https接口,需要配置这个参数
+            changeOrigin: true,  //是否跨域
+            pathRewrite: { // 如果接口本身没有api的路径,那么这里将发送到后端的请求重写为没有api的路径
+                '^/ips': '/' 
+            }
+        },
+    },
+    cssSourceMap: false
+  }
+}

+ 3 - 0
lss_vue_wx/config/prod.env.js

@@ -0,0 +1,3 @@
+module.exports = {
+    NODE_ENV: '"production"'
+}

+ 138 - 0
lss_vue_wx/index.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+        <title>溧水</title>
+        <link rel="shortcut icon" type="image/x-icon" href="./cloud.ico" /> 
+        <style>
+            .toolbar {
+                background: #fff!important;
+            }
+
+            /* 地图弹窗样式 */
+            .window {
+                background: #fff;
+                padding: 0px 0px 10px;
+                border:1px solid silver;
+                border-radius: 5px;
+            }
+
+            .info-top {
+                position: relative;
+                background: none repeat scroll 0 0 #F9F9F9;
+                border-bottom: 1px solid #CCC;
+                border-radius: 5px 5px 0 0;
+            }
+
+            div.info-top div {
+                display: inline-block;
+                color: #333333;
+                font-size: 14px;
+                font-weight: bold;
+                line-height: 31px;
+                padding: 0 10px;
+            }
+
+            div.info-top div span {
+                font-size:11px;
+                color:#F00;
+            }
+
+            div.info-top i {
+                position: absolute;
+                top: 10px;
+                right: 10px;
+                transition-duration: 0.25s;
+                cursor: pointer;
+            }
+
+            div.info-middle {
+                font-size: 12px;
+                padding: 10px 6px;
+                line-height: 20px;
+                background-color: #fff;
+            }
+
+            div.info-item {
+                width: 300px;
+                height: 30px;
+                line-height: 30px;
+                padding:0 8px;
+            }
+
+            div.info-item a {
+                color: #20a0ff;
+                cursor: pointer;
+            }
+
+            span.info-state {
+                float:right;
+            }
+
+            span.info-ball {
+                display: inline-block;
+                width:10px;
+                height:10px;
+                border-radius: 50%;
+                margin-right: 10px;
+                line-height: 30px;
+            }
+            
+            .customWidth {
+                width: 675px!important;
+            }
+
+            .activeNames .el-collapse-item__wrap {
+                border-bottom: none; 
+            }
+            
+            ul, ol { 
+                list-style: none;
+                padding: 0;
+                margin: 0;
+            }
+
+            .mint-toast {
+                z-index: 99999999!important;
+            }
+
+            .mint-indicator-wrapper {
+                z-index: 9999999!important;
+            }
+
+            /* 滚动条样式修改 */
+            /*滚动条凹槽的颜色,还可以设置边框属性 */
+            /* ::-webkit-scrollbar-track-piece {
+                background-color:#f8f8f8;
+                -webkit-border-radius: 2em;
+                -moz-border-radius: 2em;
+                border-radius: 2em;
+            } */
+            /*滚动条的宽度*/
+            /* ::-webkit-scrollbar {
+                width:9px;
+            height: 9px;} */
+            /*滚动条的设置*/
+            /* ::-webkit-scrollbar-thumb {
+                background-color:#dddddd;
+                background-clip:padding-box;
+                -webkit-border-radius: 2em;
+                -moz-border-radius: 2em;
+                border-radius: 2em;} */
+
+            /*滚动条鼠标移上去*/
+            /* ::-webkit-scrollbar-thumb:hover {
+                background-color:#bbb;
+            } */
+
+            /*取消消息列表弹出框的内边距*/
+            /* .popover-self {
+                padding: 0 !important;
+            }     */
+        </style>
+    </head>
+    <body>
+        <div id="app"></div>
+    </body>
+</html>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 9586 - 0
lss_vue_wx/package-lock.json


+ 78 - 0
lss_vue_wx/package.json

@@ -0,0 +1,78 @@
+{
+  "name": "ym_admin",
+  "version": "1.0.5",
+  "description": "ym_admin project",
+  "author": "taylor <709161610@qq.com>",
+  "license": "MIT",
+  "scripts": {
+    "dev": "node build/dev-server.js",
+    "start": "node build/dev-server.js",
+    "build": "node build/build.js"
+  },
+  "dependencies": {
+    "axios": "^0.15.3",
+    "echarts": "^3.8.5",
+    "element-ui": "^2.10.1",
+    "font-awesome": "^4.7.0",
+    "jquery": "^3.4.1",
+    "mint-ui": "^2.2.13",
+    "nprogress": "^0.2.0",
+    "vue": "^2.6.10",
+    "vue-clipboard2": "^0.3.0",
+    "vue-router": "^2.3.0",
+    "vuex": "^2.0.0-rc.6"
+  },
+  "devDependencies": {
+    "autoprefixer": "^6.7.2",
+    "axios-mock-adapter": "^1.7.1",
+    "babel-core": "^6.22.1",
+    "babel-loader": "^6.2.10",
+    "babel-plugin-transform-runtime": "^6.22.0",
+    "babel-polyfill": "^6.26.0",
+    "babel-preset-env": "^1.2.1",
+    "babel-preset-es2015": "^6.0.0",
+    "babel-preset-stage-2": "^6.22.0",
+    "babel-register": "^6.22.0",
+    "chalk": "^1.1.3",
+    "connect-history-api-fallback": "^1.3.0",
+    "copy-webpack-plugin": "^4.0.1",
+    "css-loader": "^0.26.1",
+    "eventsource-polyfill": "^0.9.6",
+    "express": "^4.14.1",
+    "extract-text-webpack-plugin": "^2.0.0",
+    "file-loader": "^0.10.0",
+    "friendly-errors-webpack-plugin": "^1.1.3",
+    "function-bind": "^1.0.2",
+    "html-webpack-plugin": "^2.28.0",
+    "http-proxy-middleware": "^0.17.3",
+    "json-loader": "^0.5.4",
+    "mockjs": "^1.0.1-beta3",
+    "node-sass": "^4.5.0",
+    "opn": "^4.0.2",
+    "optimize-css-assets-webpack-plugin": "^1.3.0",
+    "ora": "^1.0.0",
+    "qs": "^6.7.0",
+    "rimraf": "^2.6.0",
+    "sass-loader": "^6.0.0",
+    "semver": "^5.3.0",
+    "shelljs": "^0.7.6",
+    "url-loader": "^0.5.8",
+    "vue-loader": "^11.1.4",
+    "vue-style-loader": "^2.0.0",
+    "vue-template-compiler": "^2.2.4",
+    "webpack": "^2.7.0",
+    "webpack-bundle-analyzer": "^2.2.1",
+    "webpack-dev-middleware": "^1.10.0",
+    "webpack-hot-middleware": "^2.16.1",
+    "webpack-merge": "^2.6.1"
+  },
+  "engines": {
+    "node": ">= 4.0.0",
+    "npm": ">= 3.0.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not ie <= 8"
+  ]
+}

+ 49 - 0
lss_vue_wx/src/App.vue

@@ -0,0 +1,49 @@
+<template>
+	<div id="app">
+        <router-view v-if="isRouterAlive"></router-view>
+	</div>
+</template>
+
+<script>
+    export default {
+        name: 'app',
+        components: {},
+        provide (){
+            return {
+                reload: this.reload
+            }
+        },
+        data (){
+            return {
+                isRouterAlive: true
+            }
+        },
+        methods: {
+            reload () {
+                this.isRouterAlive = false;
+                this.$nextTick(function(){
+                    this.isRouterAlive = true;
+                })
+            }
+        },
+    }
+</script>
+
+<style lang="scss">
+    body {
+        margin: 0px;
+        padding: 0px;
+        font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;
+        font-size: 14px;
+        -webkit-font-smoothing: antialiased;
+        background: #fff;
+    }
+
+    #app {
+        position: absolute;
+        top: 0px;
+        bottom: 0px;
+        width: 100%;
+        background: #fff;
+    }
+</style>

+ 167 - 0
lss_vue_wx/src/assets/css/custom-picker.css

@@ -0,0 +1,167 @@
+@keyframes slideUp {
+  0% {
+    bottom:-40%;
+  }
+  100% {
+    bottom:0;
+  }
+}
+@-moz-keyframes slideUp {
+  0% {
+    bottom:-40%;
+  }
+  100% {
+    bottom:0;
+  }
+}
+@-webkit-keyframes slideUp {
+  0% {
+    bottom:-40%;
+  }
+  100% {
+    bottom:0;
+  }
+}
+@-o-keyframes slideUp {
+  0% {
+    bottom:-40%;
+  }
+  100% {
+    bottom:0;
+  }
+}
+.pickerView-wrap * {
+    margin:0;
+    padding:0;
+    list-style: none;
+    -webkit-box-sizing: border-box;
+    -ms-box-sizing:border-box;
+    -moz-box-sizing:border-box;
+    box-sizing: border-box;
+    font-size: 0;
+}
+.pickerView-wrap {
+    position: fixed;
+    left:0;
+    top:0;
+    height:100%;
+    width:100%;
+	z-index: 666;
+}
+.pickerView-mask {
+    height:100%;
+    width:100%;
+    background:rgba(0,0,0,.5);
+}
+.pickerView-box {
+    height:40%;
+    width:100%;
+    position: absolute;
+    left:0;
+    bottom:0;
+    background: #fff;
+    padding-top:45px;
+    animation: slideUp 0.3s;
+}
+.pickerView-box-header {
+    text-align: center;
+    height:45px;
+    border-bottom:1px solid #ddd;
+    width:100%;
+    padding:0 50px;
+    position: absolute;
+    left:0;
+    top:0;
+    z-index: 10;
+    background: #fff;
+}
+.pickerView-box-header>div {
+    line-height: 44px;
+    font-size: 16px;
+}
+.pickerView-box-header-btn {
+    height:100%;
+    width:50px;
+    position: absolute;
+    top:0;
+}
+.pickerView-box-header-left {
+    left:0;
+    color:#888;
+}
+.pickerView-box-header-right {
+    right:0;
+    color:#108ee9;
+}
+.pickerView-box-header-title {
+    text-align: center;
+    height:100%;
+    width:100%;
+    overflow:hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}
+.pickerView-box-content-wrap {
+    height:100%;
+    width:100%;
+    overflow: hidden;
+    position: relative;
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+}
+.pickerView-box-content {
+    -webkit-box-flex: 1;
+    -webkit-flex: 1;
+    -ms-flex: 1;
+    flex: 1;
+    position: relative;
+}
+.pickerView-box-content-mask {
+    position: absolute;
+    left: 0;
+    bottom:0;
+    height: 100%;
+    margin: 0 auto;
+    width: 100%;
+    z-index: 3;
+    background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.6)), -webkit-linear-gradient(bottom, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.6));
+    background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.95)), to(rgba(255, 255, 255, 0.6))), -webkit-gradient(linear, left bottom, left top, from(rgba(255, 255, 255, 0.95)), to(rgba(255, 255, 255, 0.6)));
+    background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.6)), linear-gradient(to top, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.6));
+    background-position: top, bottom;
+    background-size: 100% 102px;
+    background-repeat: no-repeat;
+}
+.pickerView-box-content-indicator {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    width: 100%;
+    height: 34px;
+    position: absolute;
+    left: 0;
+    top: 102px;
+    z-index: 3;
+    border-top: 1PX solid #ddd;
+    border-bottom: 1PX solid #ddd;
+}
+.pickerView-items {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    z-index: 1;
+    padding: 102px 0;
+    padding: 102px 0px;
+}
+.pickerView-item {
+    touch-action: manipulation;
+    text-align: center;
+    font-size: 16px;
+    height: 34px;
+    line-height: 34px;
+    color: #000;
+    overflow:hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}

+ 539 - 0
lss_vue_wx/src/assets/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;
+}

+ 331 - 0
lss_vue_wx/src/assets/iconfont/demo_index.html

@@ -0,0 +1,331 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>IconFont Demo</title>
+  <link rel="shortcut icon" href="https://gtms04.alicdn.com/tps/i4/TB1_oz6GVXXXXaFXpXXJDFnIXXX-64-64.ico" type="image/x-icon"/>
+  <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=1458705" 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">&#xe715;</span>
+                <div class="name">图书馆</div>
+                <div class="code-name">&amp;#xe715;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe66a;</span>
+                <div class="name">用户</div>
+                <div class="code-name">&amp;#xe66a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe65f;</span>
+                <div class="name">返回</div>
+                <div class="code-name">&amp;#xe65f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61a;</span>
+                <div class="name">13培训机构</div>
+                <div class="code-name">&amp;#xe61a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe871;</span>
+                <div class="name">setting-fill</div>
+                <div class="code-name">&amp;#xe871;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe694;</span>
+                <div class="name">系统管理</div>
+                <div class="code-name">&amp;#xe694;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xea8c;</span>
+                <div class="name">课程</div>
+                <div class="code-name">&amp;#xea8c;</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 iconic_local_library_px"></span>
+            <div class="name">
+              图书馆
+            </div>
+            <div class="code-name">.iconic_local_library_px
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconyonghu"></span>
+            <div class="name">
+              用户
+            </div>
+            <div class="code-name">.iconyonghu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfanhui1"></span>
+            <div class="name">
+              返回
+            </div>
+            <div class="code-name">.iconfanhui1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconpeixunjigou"></span>
+            <div class="name">
+              13培训机构
+            </div>
+            <div class="code-name">.iconpeixunjigou
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconsetting-fill"></span>
+            <div class="name">
+              setting-fill
+            </div>
+            <div class="code-name">.iconsetting-fill
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconxitongguanli"></span>
+            <div class="name">
+              系统管理
+            </div>
+            <div class="code-name">.iconxitongguanli
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconkecheng"></span>
+            <div class="name">
+              课程
+            </div>
+            <div class="code-name">.iconkecheng
+            </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="#iconic_local_library_px"></use>
+                </svg>
+                <div class="name">图书馆</div>
+                <div class="code-name">#iconic_local_library_px</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconyonghu"></use>
+                </svg>
+                <div class="name">用户</div>
+                <div class="code-name">#iconyonghu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfanhui1"></use>
+                </svg>
+                <div class="name">返回</div>
+                <div class="code-name">#iconfanhui1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconpeixunjigou"></use>
+                </svg>
+                <div class="name">13培训机构</div>
+                <div class="code-name">#iconpeixunjigou</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconsetting-fill"></use>
+                </svg>
+                <div class="name">setting-fill</div>
+                <div class="code-name">#iconsetting-fill</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconxitongguanli"></use>
+                </svg>
+                <div class="name">系统管理</div>
+                <div class="code-name">#iconxitongguanli</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconkecheng"></use>
+                </svg>
+                <div class="name">课程</div>
+                <div class="code-name">#iconkecheng</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>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 45 - 0
lss_vue_wx/src/assets/iconfont/iconfont.css


BIN
lss_vue_wx/src/assets/iconfont/iconfont.eot


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
lss_vue_wx/src/assets/iconfont/iconfont.js


+ 58 - 0
lss_vue_wx/src/assets/iconfont/iconfont.json

@@ -0,0 +1,58 @@
+{
+  "id": "1458705",
+  "name": "儿童在线教育-后台",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "1698558",
+      "name": "图书馆",
+      "font_class": "ic_local_library_px",
+      "unicode": "e715",
+      "unicode_decimal": 59157
+    },
+    {
+      "icon_id": "2510581",
+      "name": "用户",
+      "font_class": "yonghu",
+      "unicode": "e66a",
+      "unicode_decimal": 58986
+    },
+    {
+      "icon_id": "2882748",
+      "name": "返回",
+      "font_class": "fanhui1",
+      "unicode": "e65f",
+      "unicode_decimal": 58975
+    },
+    {
+      "icon_id": "3211524",
+      "name": "13培训机构",
+      "font_class": "peixunjigou",
+      "unicode": "e61a",
+      "unicode_decimal": 58906
+    },
+    {
+      "icon_id": "4936694",
+      "name": "setting-fill",
+      "font_class": "setting-fill",
+      "unicode": "e871",
+      "unicode_decimal": 59505
+    },
+    {
+      "icon_id": "7255482",
+      "name": "系统管理",
+      "font_class": "xitongguanli",
+      "unicode": "e694",
+      "unicode_decimal": 59028
+    },
+    {
+      "icon_id": "8190625",
+      "name": "课程",
+      "font_class": "kecheng",
+      "unicode": "ea8c",
+      "unicode_decimal": 60044
+    }
+  ]
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 47 - 0
lss_vue_wx/src/assets/iconfont/iconfont.svg


BIN
lss_vue_wx/src/assets/iconfont/iconfont.ttf


BIN
lss_vue_wx/src/assets/iconfont/iconfont.woff


BIN
lss_vue_wx/src/assets/iconfont/iconfont.woff2


BIN
lss_vue_wx/src/assets/image/404.png


BIN
lss_vue_wx/src/assets/image/add.png


BIN
lss_vue_wx/src/assets/image/camera.png


BIN
lss_vue_wx/src/assets/image/del.png


BIN
lss_vue_wx/src/assets/image/delete.png


BIN
lss_vue_wx/src/assets/image/downLoad.png


BIN
lss_vue_wx/src/assets/image/down_blue.png


BIN
lss_vue_wx/src/assets/image/edit.png


BIN
lss_vue_wx/src/assets/image/export.png


BIN
lss_vue_wx/src/assets/image/loadMore.png


BIN
lss_vue_wx/src/assets/image/login_logo.png


BIN
lss_vue_wx/src/assets/image/my_assets.png


BIN
lss_vue_wx/src/assets/image/my_com.png


BIN
lss_vue_wx/src/assets/image/my_message.png


BIN
lss_vue_wx/src/assets/image/my_score.png


BIN
lss_vue_wx/src/assets/image/my_sug.png


BIN
lss_vue_wx/src/assets/image/my_sys.png


BIN
lss_vue_wx/src/assets/image/noList.png


BIN
lss_vue_wx/src/assets/image/noPic.png


BIN
lss_vue_wx/src/assets/image/password.png


BIN
lss_vue_wx/src/assets/image/phone.png


BIN
lss_vue_wx/src/assets/image/pull_down.png


BIN
lss_vue_wx/src/assets/image/pull_down_blue.png


BIN
lss_vue_wx/src/assets/image/register.png


BIN
lss_vue_wx/src/assets/image/search.png


BIN
lss_vue_wx/src/assets/image/tab_ass.png


BIN
lss_vue_wx/src/assets/image/tab_ass_choose.png


BIN
lss_vue_wx/src/assets/image/tab_data.png


BIN
lss_vue_wx/src/assets/image/tab_data_choose.png


BIN
lss_vue_wx/src/assets/image/tab_my.png


BIN
lss_vue_wx/src/assets/image/tab_my_choose.png


BIN
lss_vue_wx/src/assets/image/user.png


BIN
lss_vue_wx/src/assets/image/userHead.jpg


BIN
lss_vue_wx/src/assets/image/userHead.png


BIN
lss_vue_wx/src/assets/image/vcode.png


+ 302 - 0
lss_vue_wx/src/assets/js/custom-picker.js

@@ -0,0 +1,302 @@
+/*
+参考网址:原生js实现移动端选择器插件
+https://segmentfault.com/a/1190000013366588
+*/
+// created by zhouatie
+(function () {
+	var util = {
+		extend: function (target) {
+			for (var i = 1, len = arguments.length; i < len; i++) {
+				for (var prop in arguments[i]) {
+					if (arguments[i].hasOwnProperty(prop)) {
+						target[prop] = arguments[i][prop];
+					}
+				}
+			}
+			return target;
+		},
+		indexOf: function (array, item) {
+			var result = -1;
+			for (var i = 0, len = array.length; i < len; i++) {
+				if (array[i] === item) {
+					result = i;
+					break;
+				}
+			}
+			return result;
+		},
+		css: function (elem, obj) {
+			for (var i in obj) {
+				elem.style[i] = obj[i];
+			}
+		},
+		addClass: function (element, className) {
+			var classNames = element.className.split(/\s+/);
+			if (util.indexOf(classNames, className) == -1) {
+				classNames.push(className);
+			}
+			element.className = classNames.join(' ');
+		},
+		removeClass: function (element, className) {
+			var classNames = element.className.split(/\s+/);
+			var index = util.indexOf(classNames, className);
+			if (index !== -1) {
+				classNames.splice(index, 1);
+			}
+			element.className = classNames.join(' ');
+		},
+		hasClass: function (element, className) {
+			if (!element || !element.className) return false;
+			var classNames = element.className.split(/\s+/);
+			return util.indexOf(classNames, className) != -1;
+		},
+		parents: function (elem, pClass) { // 递归函数通过父亲的classname获取元素
+			if (!elem) return null;
+			var parent = elem.parentNode;
+			if (parent === document) return null;
+			if (!this.hasClass(parent, pClass)) parent = this.parents(parent, pClass);
+			return parent;
+		},
+		isObj: function (o) {
+			return Object.prototype.toString.call(o) == "[object Object]";
+		},
+		isArray: function (o) {
+			return Object.prototype.toString.call(o) == "[object Array]";
+		}
+	};
+
+	function PickerView(opt) {
+
+		var _this = this;
+
+		this.Opt = {
+			title: '',
+			leftText: '取消',
+			rightText: '确定',
+			saveFn: function (selectArr) {
+
+			}
+		};
+
+		// 同步参数
+		for (var i in opt) {
+			if (opt[i]) this.Opt[i] = opt[i];
+		}
+
+		this._y_start = "";
+		this._y_move = "";
+		this._y_end = "";
+		this.top_start = 0; // 移动起始点
+		this.isMove = false; // 是否是移动聊天框
+
+		this.elem_wrap = null; // 最外层的容器
+		this.elem_leftBtn = null; // 左按钮元素
+		this.elem_rightBtn = null; // 右按钮元素
+		this.elem_contents = null; // items容器
+		this.elem_mask = null; // 黑色背景
+
+		var selectcache = this.Opt.bindElem.getAttribute("selectcache");
+		this.selectcache = selectcache ? selectcache.split(",") : [];
+		this.selectArr = []; // 选项对应的元素序列号 如:[0,0,0]
+
+		this.init();
+
+	}
+
+	PickerView.VERSION = '1.0.0';
+
+	PickerView.defaultOpt = {
+		headerHeight: 45, // 头部默认高度
+		itemHeight: 34, // 每个item的默认高度
+	};
+
+	PickerView.prototype = {
+		constructor: PickerView,
+		getItemTpl: function (keys) {
+			var item_html = "";
+			for (var i = 0; i < keys.length; i++) {
+                var str = JSON.stringify(keys[i]);
+				item_html += '<div class="pickerView-item" data-item=\''+ str +'\'>' + keys[i].name + '</div>';
+			};
+			return item_html;
+		},
+		getItemsTpl: function (keys) {
+			var fieldIndex = this.selectcache[this.selectArr.length] ? this.selectcache[this.selectArr.length] : 0;
+			this.selectArr.push(fieldIndex);
+			var html = "",
+				len = -fieldIndex * PickerView.defaultOpt.itemHeight,
+				item_html = this.getItemTpl(keys);
+
+			html += '<div index="' + (this.selectArr.length - 1) + '" class="pickerView-box-content">' +
+				'<div style="background-size:100% ' + this.padding + 'px;" class="pickerView-box-content-mask"></div>' +
+				'<div style="top:' + this.padding + 'px;" class="pickerView-box-content-indicator"></div>' +
+				'<div style="padding:' + this.padding + 'px 0;transform:translate3d(0,' + len + 'px,0)" fieldIndex="0" class="pickerView-items">' +
+				item_html +
+				'</div>' +
+				'</div>';
+
+			return html;
+		},
+		renderItems: function (obj) {
+			var _this = this,
+				html = "",
+				arr = obj,
+				isObj = util.isObj(obj);
+
+			if (isObj) arr = Object.keys(obj);
+			html += this.getItemsTpl(arr);
+			var fieldIndex = this.selectArr[this.selectArr.length - 1];
+			if (isObj) html += this.renderItems(obj[arr[fieldIndex]]);
+
+			return html;
+		},
+		getTpl: function () {
+			var html = '<div class="pickerView-mask"></div><div class="pickerView-box">' +
+				'<div class="pickerView-box-header">' +
+				'<div class="pickerView-box-header-left pickerView-box-header-btn">取消</div>' +
+				'<div class="pickerView-box-header-title">' + this.Opt.title + '</div>' +
+				'<div class="pickerView-box-header-right pickerView-box-header-btn">确定</div>' +
+				'</div>' +
+				'<div class="pickerView-box-content-wrap">';
+
+			html += this.renderItems(this.Opt.data);
+			html += '</div></div>';
+
+			return html;
+		},
+		init: function () {
+			var _this = this,
+				body = document.getElementsByTagName("body")[0],
+				div = document.createElement("div");
+
+			div.className = "pickerView-wrap";
+			this.elem_wrap = div;
+			this.padding = (document.documentElement.clientHeight * 0.4 - PickerView.defaultOpt.headerHeight - PickerView.defaultOpt.itemHeight) / 2;
+			div.innerHTML = this.getTpl();
+			body.appendChild(div);
+
+			this.elem_mask = this.elem_wrap.getElementsByClassName("pickerView-mask")[0];
+			this.elem_contents = this.elem_wrap.getElementsByClassName("pickerView-box-content-wrap")[0];
+			this.elem_leftBtn = this.elem_wrap.getElementsByClassName("pickerView-box-header-left")[0];
+			this.elem_rightBtn = this.elem_wrap.getElementsByClassName("pickerView-box-header-right")[0];
+
+			this.elem_contents.addEventListener("touchstart", function (e) {
+				_this.moveObj = util.parents(e.target, "pickerView-box-content").children[2];
+				_this.touchstart(e);
+				e.stopPropagation();
+			}, false);
+			this.elem_contents.addEventListener("touchmove", function (e) {
+				_this.touchmove(e);
+				e.stopPropagation();
+				e.preventDefault();
+			}, false);
+			this.elem_contents.addEventListener("touchend", function (e) {
+				_this.touchend(e);
+				e.stopPropagation();
+			}, false);
+			this.elem_mask.addEventListener("touchend", function (e) {
+				_this.closeComponent();
+				e.stopPropagation();
+				e.preventDefault()
+			}, false);
+			this.elem_leftBtn.addEventListener("touchend", function (e) {
+				_this.closeComponent();
+				e.stopPropagation();
+				e.preventDefault()
+			}, false);
+			this.elem_rightBtn.addEventListener("touchend", function (e) {
+				var selectArr = [];
+				for (var i = 0; i < _this.elem_contents.children.length; i++) {
+					var items = _this.elem_contents.children[i].children[2],
+                        // field = items.children.length > 0 ? items.children[_this.selectArr[i]].innerText : "";
+                        field = items.children.length > 0 ? items.children[_this.selectArr[i]].getAttribute("data-item") : "";
+					selectArr.push(JSON.parse(field));
+				}
+				_this.Opt.rightFn(selectArr);
+				_this.closeComponent();
+				// 绑定元素
+				_this.Opt.bindElem.setAttribute("selectcache", _this.selectArr);
+				e.stopPropagation();
+				e.preventDefault()
+			}, false);
+
+		},
+		touchstart: function (e) {
+			this._y_start = e.touches[0].pageY;
+			this.isMove = false;
+			this.top_start = parseInt(this.moveObj.style.transform.split(",")[1]);
+		},
+		touchmove: function (e) {
+			var _this = this;
+			this.isMove = true;
+			this._y_move = e.touches[0].pageY;
+			var len = parseFloat(this._y_move) - parseFloat(this._y_start) + parseFloat(this.top_start);
+			util.css(_this.moveObj, {
+				"transform": 'translate3d(0,' + len + 'px,0)'
+			})
+			this.top_end = len;
+		},
+		touchend: function (e) {
+			if (!this.isMove) return;
+			this.isMove = false;
+
+			var _this = this,
+				itemHeight = PickerView.defaultOpt.itemHeight,
+				sign = this.top_end >= 0 ? 1 : -1,
+				index = this.moveObj.parentNode.getAttribute("index"),
+				fieldIndex = Math.round(Math.abs(this.top_end) / itemHeight),
+				len = sign * (fieldIndex * itemHeight);
+
+			if (len > 0) {
+				len = 0;
+				fieldIndex = 0;
+			} else if (len < -(this.moveObj.children.length - 1) * itemHeight) {
+				len = -(this.moveObj.children.length - 1) * itemHeight;
+				fieldIndex = this.moveObj.children.length - 1;
+			};
+
+			this.selectArr[index] = fieldIndex;
+			this.moveObj.setAttribute("fieldIndex", fieldIndex);
+
+			this.moveObj.style.transition = "0.3s cubic-bezier(0,0,0.2,1.15)";
+			util.css(_this.moveObj, {
+				"transform": 'translate3d(0,' + len + 'px,0)'
+			});
+			_this.changeNext(index);
+			_this.moveObj.addEventListener("transitionend", function (event) {
+				_this.moveObj.style.transition = "";
+			}, false);
+			_this.moveObj.addEventListener("webkitTransitionEnd", function (event) {
+				_this.moveObj.style.transition = "";
+			}, false);
+
+		},
+		changeNext: function (index) {
+			var data = this.Opt.data,
+				arr = [];
+
+			for (var i = 0; i < this.selectArr.length; i++) {
+				var elem_items = this.elem_contents.children[i].children[2];
+
+				if (i > index) {
+					util.css(elem_items, {
+						"transform": 'translate3d(0,0,0)'
+					});
+					this.selectArr[i] = 0;
+					arr = util.isObj(data) ? Object.keys(data) : data;
+					elem_items.innerHTML = this.getItemTpl(arr);
+					var field = arr[0];
+					data = data[field];
+				} else {
+					var field = elem_items.children[this.selectArr[i]].innerText;
+					data = data[field];
+				}
+			}
+		},
+		closeComponent: function () {
+			var body = document.getElementsByTagName("body")[0];
+			body.removeChild(this.elem_wrap);
+		}
+	}
+	window.PickerView = PickerView;
+})();

+ 59 - 0
lss_vue_wx/src/assets/js/rem.js

@@ -0,0 +1,59 @@
+;(function (designWidth, maxWidth) {
+    var doc = document,
+        win = window;
+    var docEl = doc.documentElement;
+    var tid;
+    var rootItem, rootStyle;
+
+    function refreshRem() {
+        var width = docEl.getBoundingClientRect().width;
+        if (!maxWidth) {
+            maxWidth = 540;
+        }
+        ;
+        if (width > maxWidth) {
+            width = maxWidth;
+        }
+        //与淘宝做法不同,直接采用简单的rem换算方法1rem=100px
+        var rem = width * 100 / designWidth;
+        //兼容UC开始
+        rootStyle = "html{font-size:" + rem + 'px !important}';
+        rootItem = document.getElementById('rootsize') || document.createElement("style");
+        if (!document.getElementById('rootsize')) {
+            document.getElementsByTagName("head")[0].appendChild(rootItem);
+            rootItem.id = 'rootsize';
+        }
+        if (rootItem.styleSheet) {
+            rootItem.styleSheet.disabled || (rootItem.styleSheet.cssText = rootStyle)
+        } else {
+            try {
+                rootItem.innerHTML = rootStyle
+            } catch (f) {
+                rootItem.innerText = rootStyle
+            }
+        }
+        //兼容UC结束
+        docEl.style.fontSize = rem + "px";
+    };
+    refreshRem();
+
+    win.addEventListener("resize", function () {
+        clearTimeout(tid); //防止执行两次
+        tid = setTimeout(refreshRem, 300);
+    }, false);
+
+    win.addEventListener("pageshow", function (e) {
+        if (e.persisted) { // 浏览器后退的时候重新计算
+            clearTimeout(tid);
+            tid = setTimeout(refreshRem, 300);
+        }
+    }, false);
+    if (doc.readyState === "complete") {
+
+        doc.body.style.fontSize = "16px";
+    } else {
+        doc.addEventListener("DOMContentLoaded", function (e) {
+            doc.body.style.fontSize = "16px";
+        }, false);
+    }
+})(360, 750);

+ 72 - 0
lss_vue_wx/src/common/js/util.js

@@ -0,0 +1,72 @@
+var SIGN_REGEXP = /([yMdhsm])(\1*)/g;
+var DEFAULT_PATTERN = 'yyyy-MM-dd';
+function padding(s, len) {
+    var len = len - (s + '').length;
+    for (var i = 0; i < len; i++) { s = '0' + s; }
+    return s;
+};
+
+export default {
+    getQueryStringByName: function (name) {
+        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
+        var r = window.location.search.substr(1).match(reg);
+        var context = "";
+        if (r != null)
+            context = r[2];
+        reg = null;
+        r = null;
+        return context == null || context == "" || context == "undefined" ? "" : context;
+    },
+    formatDate: {
+        format: function (date, pattern) {
+            pattern = pattern || DEFAULT_PATTERN;
+            return pattern.replace(SIGN_REGEXP, function ($0) {
+                switch ($0.charAt(0)) {
+                    case 'y': return padding(date.getFullYear(), $0.length);
+                    case 'M': return padding(date.getMonth() + 1, $0.length);
+                    case 'd': return padding(date.getDate(), $0.length);
+                    case 'w': return date.getDay() + 1;
+                    case 'h': return padding(date.getHours(), $0.length);
+                    case 'm': return padding(date.getMinutes(), $0.length);
+                    case 's': return padding(date.getSeconds(), $0.length);
+                }
+            });
+        },
+        parse: function (dateString, pattern) {
+            var matchs1 = pattern.match(SIGN_REGEXP);
+            var matchs2 = dateString.match(/(\d)+/g);
+            if (matchs1.length == matchs2.length) {
+                var _date = new Date(1970, 0, 1);
+                for (var i = 0; i < matchs1.length; i++) {
+                    var _int = parseInt(matchs2[i]);
+                    var sign = matchs1[i];
+                    switch (sign.charAt(0)) {
+                        case 'y': _date.setFullYear(_int); break;
+                        case 'M': _date.setMonth(_int - 1); break;
+                        case 'd': _date.setDate(_int); break;
+                        case 'h': _date.setHours(_int); break;
+                        case 'm': _date.setMinutes(_int); break;
+                        case 's': _date.setSeconds(_int); break;
+                    }
+                }
+                return _date;
+            }
+            return null;
+        },
+        dateDiff: function(sDate1, sDate2) {
+            var aDate, oDate1, oDate2, iDays;
+            sDate1 = sDate1.split(" ")[0];
+            aDate = sDate1.split("-")
+            oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
+            aDate = sDate2.split("-")
+            oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
+            if((oDate1 - oDate2) < 0){
+                iDays = "已失效"
+            } else {
+                iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24) + "天" //把相差的毫秒数转换为天数 
+            }
+            return iDays
+        }
+    }
+
+};

+ 0 - 0
lss_vue_wx/src/components/.gitkeep


+ 181 - 0
lss_vue_wx/src/http.js

@@ -0,0 +1,181 @@
+import axios from 'axios'
+import qs from 'qs'
+
+const TIME_OUT_MS = 60 * 1000 // 默认请求超时时间
+
+/*
+ * @param response 返回数据列表
+ */
+function handleResults (response) {
+    let remoteResponse = response.data;
+    return remoteResponse
+}
+
+function handleUrl (url) {
+    if(url.indexOf('.do') > -1) {
+        url = LINK_URL + url;
+    } else {
+        url = BASE_URL + url;
+    }
+    return url
+}
+
+/*
+ * @param data 参数列表
+ * @return
+ */
+function handleParams (data) {
+    return data
+}
+
+export default {
+    /*
+     * @param url
+     * @param data
+     * @param response 请求成功时的回调函数
+     * @param exception 异常的回调函数
+     */
+    post (url, data, response, exception) {
+        axios({
+            method: 'post',
+            url: handleUrl(url),
+            data: handleParams(qs.stringify(data)),
+            // timeout: TIME_OUT_MS,
+            headers: {
+                //'Content-Type': 'application/json; charset=UTF-8'
+                'Content-type': ' application/x-www-form-urlencoded; charset=UTF-8',
+            }
+        }).then(
+            (result) => {
+                response(handleResults(result))
+            }
+        ).catch(
+            (error) => {
+                if (exception) {
+                    exception(error)
+                } else {
+                    console.log(error)
+                }
+            }
+        )
+    },
+    /*
+     * get 请求
+     * @param url
+     * @param response 请求成功时的回调函数
+     * @param exception 异常的回调函数
+     */
+    get (url , response, exception) {
+        axios({
+            method: 'get',
+            url: handleUrl(url),
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            }
+        }).then(
+            (result) => {
+                response(handleResults(result))
+            }
+        ).catch(
+            (error) => {
+                if (exception) {
+                    exception(error)
+                } else {
+                    console.log(error)
+                }
+            }
+        )
+    },
+    /*
+     * 导入文件
+     * @param url
+     * @param data
+     * @param response 请求成功时的回调函数
+     * @param exception 异常的回调函数
+     */
+    uploadFile (url, data, response, exception) {
+        axios({
+            method: 'post',
+            url: handleUrl(url),
+            data: handleParams(data),
+            dataType: 'json',
+            processData: false,
+            contentType: false
+        }).then(
+            (result) => {
+                response(handleResults(result, data))
+            }
+        ).catch(
+            (error) => {
+                if (exception) {
+                    exception(error)
+                } else {
+                    console.log(error)
+                }
+            }
+        )
+    },
+    /*
+     * 下载文件用,导出 Excel 表格可以用这个方法
+     * @param url
+     * @param param
+     * @param fileName 如果是导出 Excel 表格文件名后缀最好用.xls 而不是.xlsx,否则文件可能会因为格式错误导致无法打开
+     * @param exception 异常的回调函数
+     */
+    downloadFile (url, data, response, exception) {
+        axios({
+            method: 'post',
+            url: handleUrl(url),
+            data: handleParams(qs.stringify(data)),//handleParams(data),
+            responseType: 'blob'
+        }).then(
+            (result) => {
+                // const excelBlob = result.data
+                // if ('msSaveOrOpenBlob' in navigator) {
+                //     window.navigator.msSaveOrOpenBlob(excelBlob, fileName)
+                // } else {
+                //     const elink = document.createElement('a')
+                //     elink.download = fileName
+                //     elink.style.display = 'none'
+                //     const blob = new Blob([excelBlob])
+                //     elink.href = URL.createObjectURL(blob)
+                //     document.body.appendChild(elink)
+                //     elink.click()
+                //     document.body.removeChild(elink)
+                // }
+                response(handleResults(result,data))
+            }
+        ).catch(
+            (error) => {
+                if (exception) {
+                    exception(error)
+                } else {
+                    console.log(error)
+                }
+            }
+        )
+    },
+    uploadFileFormData (url, data, response, exception) {
+        axios({
+            method: 'post',
+            url: handleUrl(url),
+            data: data,
+            // timeout: TIME_OUT_MS,
+            headers: {
+                'Content-Type': 'multipart/form-data'
+            }
+        }).then(
+            (result) => {
+                response(handleResults(result))
+            }
+        ).catch(
+            (error) => {
+                if (exception) {
+                    exception(error)
+                } else {
+                    console.log(error)
+                }
+            }
+        )
+    }
+}

+ 70 - 0
lss_vue_wx/src/main.js

@@ -0,0 +1,70 @@
+import Vue from 'vue'
+import App from './App'
+
+import VueRouter from 'vue-router'
+
+import './assets/js/rem.js'
+
+// import ElementUI from 'element-ui'
+// import 'element-ui/lib/theme-chalk/index.css'
+
+import Mint from 'mint-ui';
+import 'mint-ui/lib/style.css';
+
+import store from './vuex/store'
+import Vuex from 'vuex'
+import routes from './routes'
+
+import http from './http'
+Vue.prototype.http = http
+
+import port from './port'
+Vue.prototype.port = port
+
+import echarts from 'echarts'
+Vue.prototype.echarts = echarts
+
+import VueClipboard from 'vue-clipboard2'
+Vue.use(VueClipboard)
+
+import 'font-awesome/css/font-awesome.min.css'
+import './assets/iconfont/iconfont.css'
+
+import picker from "./assets/js/custom-picker.js"
+import "./assets/css/custom-picker.css"
+Vue.use(picker)
+
+// Vue.use(ElementUI)
+Vue.use(Mint);
+Vue.use(VueRouter)
+Vue.use(Vuex)
+
+const router = new VueRouter({
+    routes
+})
+
+
+router.beforeEach((to, from, next) => {
+    if (to.path == '/login') {
+        sessionStorage.removeItem('user');
+    }
+
+    let user = JSON.parse(sessionStorage.getItem('user'));
+    if (!user && to.path != '/login') {
+        next({ path: '/login' })
+    } else {
+        if(to.path == '/assets' || to.path == '/data' || to.path == '/my') {
+            $(".tabber").show();
+        } else {
+            $(".tabber").hide();
+        }
+        next()
+    }
+})
+
+new Vue({
+    router,
+    store,
+    render: h => h(App)
+}).$mount('#app')
+

+ 63 - 0
lss_vue_wx/src/port.js

@@ -0,0 +1,63 @@
+export default {
+    manage: {
+        login: '/user/login',                                   // 登录
+        regist: '/user/regist',                                 //注册
+    },
+    pwd: {
+        resetPwd: '/system/updatePwd'                           // 重置密码
+    },
+    user: {
+        list: '/user/list',                                     // 人员列表
+    },
+    label: {
+        list: '/goodstags/list',                                // 标签列表
+        add: '/goodstags/addOrUpdate',                          // 添加标签
+        del: '/goodstags/delTags',                              // 删除标签
+    },
+    assets: {
+        list: '/goods/list',                                    // 资产列表
+        detail: '/goods/detail',                                // 资产详情
+        add: '/goods/add',                                      // 添加资产
+        update: '/goods/update',                                // 更新资产
+        upload: '/goods/uploadFile',                            // 上传图片
+
+        detailNo: '/goods/goodsNoDetail',                       // 资产编号详情
+        addNo: 'goods/goodsNoAdd',                              // 资产编号添加
+        delNo: '/goods/delNo',                                  // 删除资产编号
+        distribute: '/goods/distribute',                        // 修改资产编号
+
+        handle: '/goods/handle',                                // 处置资产
+
+        maintainList: '/goods/isMaintainList',                  // 待维护资产列表
+        maintain: '/goods/maintain',                            // 维护资产
+
+        disposalRecord: '/goods/operateList',                   // 处置记录
+        exportDis: '/goods/handelRecordExcel',                  // 导出处置记录
+        maintainRecord: '/goods/isMaintainRecord',              // 维护记录
+        exportMain: '/goods/isMaintainRecordExcel',             // 导出维护记录
+    },
+    my: {
+        newList: '/newsnotice/getNewsList',                     // 我的消息
+        noReadNum: '/newsnotice/getNoReadNewsCount',            // 未读消息
+
+        list: '/goods/myList',                                  // 我的资产
+
+        scoreList: '/score/myList',                             // 我的评分
+        scoreDetail: '/score/detail',                           // 我的评分详情
+
+        ideaList: '/idea/ideaList',                             // 我的建议
+        ideaAoU: '/idea/addOrUpdate',                           // 建议新增修改
+        draft: '/idea/getDraft',                                // 获取草稿
+
+        addressList: '/user/list',                              // 通讯录
+        scoreDetail: '/score/getDetailByTimeAndUid',            // 个人分数详情
+        ideaScore: '/idea/ideaListByTime',                      // TA的建议
+        addOrUpdate: '/score/addOrUpdate',                      // 分数新增修改
+        leaderScore: '/ideacomment/addOrUpdate',                // 添加/修改回复建议
+        delScore: '/ideacomment/del',                           // 删除回复建议
+
+        insList: '/institution/list',                           // 管理制度列表
+        insDetail: '/institution/detail',                       // 管理制度详情
+    },
+
+}

+ 97 - 0
lss_vue_wx/src/routes.js

@@ -0,0 +1,97 @@
+import Login from './views/Login.vue'
+import NotFound from './views/404.vue'
+import Home from './views/Home.vue'
+
+// 资产
+import assets from './views/assets/assets.vue'
+import assetsDetail from './views/assets/assetsDetail.vue'
+import assetsRegister from './views/assets/assetsRegister.vue'
+import assetsEdit from './views/assets/assetsEdit.vue'
+import assetsNumber from './views/assets/assetsNumber.vue'
+import assetsHandle from './views/assets/assetsHandle.vue'
+import assetsOperation from './views/assets/assetsOperation.vue'
+import assetsMaintain from './views/assets/assetsMaintain.vue'
+
+// 数据
+import data from './views/data/data.vue'
+
+// 我的
+import my from './views/my/my.vue'
+import myMessage from './views/my/myMessage.vue'
+import myAssets from './views/my/myAssets.vue'
+import myScore from './views/my/myScore.vue'
+import myScoreDetail from './views/my/myScoreDetail.vue'
+import myAddress from './views/my/myAddress.vue'
+import mySuggest from './views/my/mySuggest.vue'
+import myGrade from './views/my/myGrade.vue'
+import myInstitution from './views/my/myInstitution.vue'
+import myInsDetail from './views/my/myInsDetail.vue'
+
+
+let routes = [
+    {
+        path: '/login',
+        component: Login,
+        name: '',
+        hidden: true
+    },
+    // 资产
+    {
+        path: '/',
+        component: Home,
+        name: '',
+        leaf: true,//只有一个节点
+        children: [
+            { path: '/assets', component: assets, name: '资产', meta: {keepAlive: true, parentPath:'/tab_assets'} },
+            { path: '/detail/:id', component: assetsDetail, name: '资产详情', meta: {keepAlive: true, parentPath:'/tab_assets'} },
+            { path: '/assetsRegister', component: assetsRegister, name: '登记资产', meta: {keepAlive: true, parentPath:'/tab_assets'} },
+            { path: '/assetsEdit/:id/', component: assetsEdit, name: '资产编辑', meta: {keepAlive: true, parentPath:'/tab_assets'} },
+            { path: '/assetsNumber/:id/:divisionCode/:suffixCode', component: assetsNumber, name: '资产编号', meta: {keepAlive: true, parentPath:'/tab_assets'} },
+            { path: '/assetsHandle/:id', component: assetsHandle, name: '处置资产', meta: {keepAlive: true, parentPath:'/tab_assets'} },
+            { path: '/assetsMaintain/:id', component: assetsMaintain, name: '维护资产', meta: {keepAlive: true, parentPath:'/tab_assets'} },
+            { path: '/assetsOperation/:id', component: assetsOperation, name: '操作记录', meta: {keepAlive: true, parentPath:'/tab_assets'} },
+        ]
+    },
+    // 数据
+    {
+        path: '/',
+        component: Home,
+        name: '',
+        leaf: true,//只有一个节点
+        children: [
+            { path: '/data', component: data, name: '数据', meta: {keepAlive: true, parentPath:'/tab_data'} }
+        ]
+    },
+    // 我的
+    {
+        path: '/',
+        component: Home,
+        name: '',
+        leaf: true,//只有一个节点
+        children: [
+            { path: '/my', component: my, name: '我的', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/myMessage', component: myMessage, name: '我的消息', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/myAssets', component: myAssets, name: '我的资产', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/myScore', component: myScore, name: '我的评分', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/myScore/:id', component: myScoreDetail, name: '我的评分详情', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/mySuggest', component: mySuggest, name: '我的建议', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/myAddress', component: myAddress, name: '通讯录', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/myGrade/:id/:name', component: myGrade, name: '打分页面', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/myInstitution', component: myInstitution, name: '管理制度', meta: {keepAlive: true, parentPath:'/tab_my'} },
+            { path: '/myInstitution/:id', component: myInsDetail, name: '管理制度详情', meta: {keepAlive: true, parentPath:'/tab_my'} },
+        ]
+    },
+    {
+        path: '/404',
+        component: NotFound,
+        name: '',
+        hidden: true
+    },
+    {
+        path: '*',
+        hidden: true,
+        redirect: { path: '/404' }
+    }
+];
+
+export default routes;

+ 61 - 0
lss_vue_wx/src/views/404.vue

@@ -0,0 +1,61 @@
+<template>
+    <div>
+        <div class="page-img">
+            <img src="../assets/image/404.png" />
+        </div>
+        <p class="page-container"><b>Error</b>  非常抱歉你访问的页面不存在!!!</p>
+        <div class="page-button">
+            <el-button type="primary" round @click="back" icon="el-icon-s-promotion">返回首页</el-button>
+        </div>
+    </div>
+</template>
+
+<script>
+    export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+            back() {
+                this.$router.push('/map');
+            }
+        },
+        created() {
+           
+        },
+		mounted() {
+        }
+	}
+</script>
+
+<style lang="scss" scoped>
+    .page-img {
+        text-align: center;
+        padding: 100px 0 0 0 ;
+
+        img {
+            width: 600px;
+        }
+    }
+
+    .page-container {
+        font-size: 20px;
+        text-align: center;
+        color: rgb(192, 204, 218);
+        b {
+            margin-right: 30px;
+            font-size: 26px;
+        }
+    }
+
+    .page-button {
+        text-align: center;
+        margin-top: 40px;
+        .el-button.is-round {
+            width: 150px;
+            margin-right:80px;
+        }
+    }
+</style>

+ 131 - 0
lss_vue_wx/src/views/Home.vue

@@ -0,0 +1,131 @@
+<template>
+    <div class="context">
+        <router-view class="context_router"></router-view>
+        <mt-tabbar v-model="selected" fixed class="tabber" style="display:none">
+            <mt-tab-item id="tab1" @click.native="changeTab(1)">
+                <img v-if="selected == 'tab1'" slot="icon" src="../assets/image/tab_ass_choose.png">
+                <img v-else slot="icon" src="../assets/image/tab_ass.png">
+                资产
+            </mt-tab-item>
+            <mt-tab-item id="tab2" @click.native="changeTab(2)">
+                <img v-if="selected == 'tab2'" slot="icon" src="../assets/image/tab_data_choose.png">
+                <img v-else slot="icon" src="../assets/image/tab_data.png">
+                任务
+            </mt-tab-item>
+            <mt-tab-item id="tab3" @click.native="changeTab(3)">
+                <img v-if="selected == 'tab3'" slot="icon" src="../assets/image/tab_my_choose.png">
+                <img v-else slot="icon" src="../assets/image/tab_my.png">
+                <mt-badge v-if="num != 0" class="myMsg" size="small" type="error">{{num}}</mt-badge>
+                我的
+            </mt-tab-item>
+        </mt-tabbar>
+    </div>
+</template>
+
+<script>
+    export default {
+        inject: ['reload'],
+        data() {
+            return {
+                selected: 'tab1',
+                user: sessionStorage.getItem("user"),
+                showTab: true,
+                num: sessionStorage.noRead,
+            };
+        },
+        methods: {
+            changeTab(type) {
+                if(type == 1) {
+                    if(this.$router.history.current.fullPath == '/assets') {
+                        this.reload();
+                    } else {
+                        this.$router.push({ path: '/assets' });
+                        this.getNoRead();
+                    }
+                } else if(type == 2) {
+                    if(this.$router.history.current.fullPath == '/data') {
+                        this.reload();
+                    } else {
+                        this.$router.push({ path: '/data' });
+                        this.getNoRead();
+                    }
+                } else if(type == 3) {
+                    if(this.$router.history.current.fullPath == '/my') {
+                        this.reload();
+                    } else {
+                        this.$router.push({ path: '/my' });
+                        this.getNoRead();
+                    }
+                }
+            },
+
+            getNoRead() {
+                this.http.post(this.port.my.noReadNum, {
+                    'uid': this.user.id,
+                } , 
+                res => {
+                    if (res.code == "ok") {
+                        sessionStorage.setItem('noRead', res.data==null?0:res.data);
+                        this.num = sessionStorage.noRead;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+        },
+        created() {
+            if(this.$router.history.current.meta.parentPath == "/tab_assets") {
+                this.selected = "tab1"
+            } else if(this.$router.history.current.meta.parentPath == "/tab_data") {
+                this.selected = "tab2"
+            } else if(this.$router.history.current.meta.parentPath == "/tab_my") {
+                this.selected = "tab3"
+            }
+        },
+        mounted() {
+            if( this.$router.history.current.fullPath == '/assets' || 
+                this.$router.history.current.fullPath == '/data' || 
+                this.$router.history.current.fullPath == '/my') {
+                $(".tabber").show();
+            } else {
+                $(".tabber").hide();
+            }
+            if (this.user) {
+                var user = JSON.parse(this.user);
+                this.user = user;
+                this.getNoRead();
+            } else {
+                this.$router.push("/login");
+            }
+        }
+    };
+</script>
+
+<style scoped lang="scss">
+    .context {
+        height: 100%;
+        background: #EFEFEF;
+    }
+
+    .context_router {
+        height: calc(100% - 55px);
+    }
+
+    #tab3 {
+        position: relative;
+    }
+
+    .myMsg {
+        position: absolute;
+        right: 0.3rem;
+        top: 0.06rem;
+    }
+</style>

+ 359 - 0
lss_vue_wx/src/views/Login.vue

@@ -0,0 +1,359 @@
+<template>
+    <div class="login_par">
+        <div class="login_head">
+            <div class="login_logo">
+                <img src="../assets/image/login_logo.png" style="width:80px;height:80px;"/>
+            </div>
+            <mt-navbar v-model="selected">
+                <mt-tab-item id="login"><div class="login_tab">登录</div></mt-tab-item>
+                <!-- <mt-tab-item id="registered"><div class="login_tab"></div></mt-tab-item> -->
+            </mt-navbar>
+        </div>
+        <mt-tab-container v-model="selected" class="login_box">
+            <mt-tab-container-item id="login">
+                <div>
+                    <!-- <mt-field placeholder="请输入手机号" :state="login.account" type="number" v-model="ruleForm.account"></mt-field>
+                         <mt-field placeholder="请输入密码" :state="login.password" type="password" v-model="ruleForm.password"></mt-field> -->
+                    <div class="out_input">
+                        <img class="phone" src="../assets/image/user.png">
+                        <input class="input" placeholder="请输入账号" v-model="ruleForm.loginName" />
+                    </div>
+                    <div class="out_input">
+                        <img src="../assets/image/password.png">
+                        <input class="input" placeholder="请输入密码" type="password" v-model="ruleForm.password" />
+                    </div>
+                    <mt-button size="large" type="primary" @click="handleLogin">登录</mt-button>
+                </div>
+            </mt-tab-container-item>
+            <mt-tab-container-item id="registered">
+                <div>
+                    <!-- <mt-field placeholder="请输入姓名" v-model="ruleForm.regName"></mt-field>
+                    <mt-field placeholder="请输入手机号" type="number" v-model="ruleForm.regPhone"></mt-field>
+                    <mt-field placeholder="请输入验证码" type="number" v-model="ruleForm.regAccount">
+                        <span class="getCode" @click="getCode">获取验证码</span>
+                    </mt-field>
+                    <mt-field placeholder="请输入密码" type="password" v-model="ruleForm.regPassWord"></mt-field>
+                    <mt-field placeholder="请确认密码" type="password" v-model="ruleForm.regPassWord1"></mt-field> -->
+                    <div class="out_input">
+                        <img src="../assets/image/user.png">
+                        <input class="input" placeholder="请输入姓名" v-model="ruleForm.regName" />
+                    </div>
+                    <div class="out_input">
+                        <img class="phone" src="../assets/image/phone.png">
+                        <input class="input" placeholder="请输入手机号" type="number" v-model="ruleForm.regPhone" />    
+                    </div>
+                    <div class="out_input">
+                        <img class="phone" src="../assets/image/vcode.png">
+                        <input class="input" placeholder="请输入验证码" oninput="if(value.length>6)value=value.slice(0,6)" type="number" v-model="ruleForm.regAccount" />
+                        <span class="text" @click="getCode()">{{code == "获取验证码"?'获取验证码':code+'s'}}</span>
+                    </div>
+                    <div class="out_input">
+                        <img src="../assets/image/password.png">
+                        <input class="input" placeholder="请输入密码" type="password" v-model="ruleForm.regPassWord" />
+                    </div>
+                    <div class="out_input">
+                        <img src="../assets/image/password.png">
+                        <input class="input" placeholder="请确认密码" type="password" v-model="ruleForm.regPassWord1" />
+                    </div>
+                    <mt-button size="large" type="primary" @click="handleRegistered">注册</mt-button>
+                </div>
+            </mt-tab-container-item>
+        </mt-tab-container>
+    </div>
+</template>
+
+<script>
+    export default {
+        data() {
+            return {
+                selected: 'login',
+                logining: false,
+                code: "获取验证码",
+                // 登录信息
+                ruleForm: {
+                    loginName: '',
+                    password: '',
+                    regName: '',
+                    regPhone: '',
+                    regAccount: '',
+                    regPassWord: '',
+                    regPassWord1: '',
+                },
+                login: {
+                    loginName: "",
+                    password: "",
+                },
+                canClick: true,
+            };
+        },
+        methods: {
+            handleLogin() {
+                if(this.canClick) {
+                    this.canClick = false;
+                    if(this.ruleForm.loginName == "") {
+                        this.$toast({
+                            message: '请输入账号',
+                            duration: 2000
+                        });
+                        return false;
+                    } else if(this.ruleForm.password == "") {
+                        this.$toast({
+                            message: '请输入密码',
+                            duration: 2000
+                        });
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        this.http.post(this.port.manage.login, {
+                            "loginName": this.ruleForm.loginName,
+                            "password": this.ruleForm.password,
+                        } , res => {
+                            this.canClick = true;
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                sessionStorage.setItem('user', JSON.stringify(res.data));
+                                var str = '';
+                                for(var i in res.data.functions) {
+                                    str += res.data.functions[i].code + ",";
+                                }
+                                sessionStorage.setItem('power',str)
+                                this.$router.push({ path: '/assets' });
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.canClick = true;
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                }
+            },
+            getCode() {
+                if(this.ruleForm.regPhone == "") {
+                    this.$toast({
+                        message: '请输入手机号',
+                        duration: 2000
+                    });
+                    return false;
+                } else if(!(/^1[23456789]\d{9}$/.test(this.ruleForm.regPhone))){ 
+                    this.$toast({
+                        message: '手机号码有误,请重填',
+                        duration: 2000
+                    });
+                    return false; 
+                } 
+                if(this.code == "获取验证码") {
+                    var auth_timer = setInterval(()=>{
+                        if(this.code == "获取验证码") {
+                            this.code = 60;
+                        } 
+                        this.code--;
+                        if(this.code <= 0){
+                            this.code = "获取验证码"
+                            clearInterval(auth_timer)
+                        }
+                    },1000)
+                }
+            },
+            handleRegistered() {
+                if(this.ruleForm.regName == "") {
+                    this.$toast({
+                        message: '请输入姓名',
+                        duration: 2000
+                    });
+                    return false;
+                } else if(this.ruleForm.regPhone == "") {
+                    this.$toast({
+                        message: '请输入手机号',
+                        duration: 2000
+                    });
+                    return false;
+                } else if(this.ruleForm.regAccount == "") {
+                    this.$toast({
+                        message: '请输入验证码',
+                        duration: 2000
+                    });
+                    return false;
+                } else if(this.ruleForm.regPassWord == "") {
+                    this.$toast({
+                        message: '请输入密码',
+                        duration: 2000
+                    });
+                    return false;
+                } else if(this.ruleForm.regPassWord1 == "") {
+                    this.$toast({
+                        message: '请确认密码',
+                        duration: 2000
+                    });
+                    return false;
+                } else if(this.ruleForm.regPassWord != this.ruleForm.regPassWord1) {
+                    this.$toast({
+                        message: '请输入相同密码',
+                        duration: 2000
+                    });
+                    return false;
+                } else {
+                    this.$indicator.open();
+                    this.http.post(this.port.manage.regist, {
+                        "name": this.ruleForm.regName,
+                        "code": this.ruleForm.regAccount,
+                        "phone": this.ruleForm.regPhone,
+                        "password": this.ruleForm.regPassWord,
+                    } , res => {
+                        this.$indicator.close();
+                        this.ruleForm = {
+                            loginName: '',
+                            password: '',
+                            regName: '',
+                            regPhone: '',
+                            regAccount: '',
+                            regPassWord: '',
+                            regPassWord1: '',
+                        }
+                        if (res.code == "ok") {
+                            this.$toast({
+                                message: "提交注册成功,等待管理员审核账号",
+                                duration: 2000
+                            });
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.ruleForm = {
+                            loginName: '',
+                            password: '',
+                            regName: '',
+                            regPhone: '',
+                            regAccount: '',
+                            regPassWord: '',
+                            regPassWord1: '',
+                        }
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            }
+        },
+    }
+</script>
+
+<style lang="scss" scoped>
+    .login_par {
+        position: relative;
+    }
+
+    .login_logo {
+        text-align: center;
+        margin: 0 0 20px 0;
+    }
+
+    .login_head {
+        padding: 0.48rem 0;
+    }
+
+    .login_head , .mint-navbar {
+        background: #2680EB;
+    }
+
+    .login_tab {
+        height: 0.20rem;
+        line-height: 0.20rem;
+        font-size: 0.15rem!important;
+        color: #fff;
+    }
+
+    .login_box {
+        width: 80%;
+        margin: 0 auto;
+        padding: 0.45rem 0;
+        position: relative;
+        top: -0.45rem;
+        background: #fff;
+        border-radius: 20px 20px 0 0;
+    }
+
+    .login_box .mint-cell {
+        margin: 0 0.18rem 0.1rem;
+        border-bottom: 1px solid #D7D7D7;
+    }
+
+    .mint-button--large {
+        width: 90%;
+        margin:0.4rem auto 0;
+    }
+
+    .out_input {
+        position: relative;
+    }
+
+    .out_input img {
+        width: 0.14rem;
+        height: 0.15rem;
+        position: absolute;
+        left: 0.2rem;
+        top: 0.09rem;
+    }
+
+    .out_input img.phone {
+        width: 0.12rem;
+    }
+
+    .input {
+        background: none;
+        outline: none;
+        border: none;
+        border-radius: 0;
+        border-bottom: 1px solid #D7D7D7;
+        display: block;
+        width: 80%;
+        margin: 0 auto 0.24rem;
+        height: 0.35rem;
+        line-height: 0.35rem;
+        font-size: 0.14rem;
+        padding: 0 0 0 0.2rem;
+	}
+
+    .text {
+        color: #2680EB;
+        position: absolute;
+        right: 0.2rem;
+        top: 0.06rem;
+    }
+</style>
+<style>
+    /* 插件样式修改 */
+    .login_par .mint-navbar .mint-tab-item.is-selected .login_tab {
+        font-size: 0.19rem!important;
+    }
+    
+    .login_par .mint-navbar .mint-tab-item.is-selected {
+        border-bottom: none!important;
+        font-size: 0.22rem!important;
+        font-weight: 800;
+    }
+
+    .login_box .mint-cell-value {
+        border: 0!important;
+    }
+
+    .login_par .mint-cell-wrapper {
+        background-image: none!important;
+    }
+
+    .login_par .mint-button--primary {
+        background-color: #2680EB!important;
+    }
+</style>

+ 580 - 0
lss_vue_wx/src/views/assets/assets.vue

@@ -0,0 +1,580 @@
+<template>
+	<div>
+        <div class="head">
+            <div class="searchbox">
+                <img src="../../assets/image/search.png" class="searchbox_img">
+                <input type="text" v-model="keyWord" class="searchbox_text" />
+                <button v-on:click="searchKeyword()" class="searchbox_button">搜索</button>
+            </div>
+            <div class="btn_body">
+                <img v-on:click="showList()" class="btn_img" src="../../assets/image/add.png">
+                <div class="btn_list" v-show="popupVisible">
+                    <div v-if="power.indexOf('registered_assets') > -1" v-on:click="register()"><img src="../../assets/image/register.png">登记资产</div>
+                    <div v-on:click="exportExcel()"><img src="../../assets/image/export.png">导出报表</div>
+                </div>
+            </div>
+            <div class="searchkey">
+                <div class="searchkey_word">
+                    <a v-for="(item,index) in labels" :id="item.id" v-bind:class="{'active':index==0}" v-on:click="chooseTag(item.id,1)">{{item.name}}</a>
+                </div>
+                <div class="searchkey_btn">
+                    <img v-on:click="showFilter()" src="../../assets/image/pull_down.png">
+                </div>
+            </div>
+        </div>
+        <section class="_sorting-address">
+            <ul class="address_first">
+                <li v-for="(item,index) in labels" :id="'btn'+item.id" v-bind:class="{'active':index==0}" v-on:click="chooseTag(item.id,0)">{{item.name}}</li>
+            </ul>
+        </section>
+        <div class="body">
+            <div class="noList" v-if="list.length==0">
+                <img src="../../assets/image/noList.png">
+            </div>
+            <ul v-else v-infinite-scroll="loadMore" infinite-scroll-disabled="loading" infinite-scroll-distance="10">
+                <li v-for="item in list" v-on:click="jumpTo(item.id)">
+                    <div class="item_img">
+                        <img v-if="item.pic != null" v-lazy="item.pic">
+                        <img v-else src="../../assets/image/noPic.png">
+                    </div>
+                    <div class="text item_name">{{item.name}}</div>
+                    <div class="text item_int">{{item.modelNumber}}</div>
+                    <div class="text item_num">{{item.goodsNos.length}}{{item.unit}}</div>
+                </li>
+                <div class="order" v-if="haveMore">
+                    <span class="line"></span>
+                    <span class="txt">没有更多了</span>
+                    <span class="line"></span>
+                </div>
+            </ul>
+        </div>
+    </div>
+</template>
+
+<script>
+    import util from '../../common/js/util'
+    
+	export default {
+		data() {
+			return {
+                keyWord: "",
+                power: sessionStorage.getItem("power"),
+                list: [],
+                labels: [],
+                pageNum: 1,
+                pages: 1,
+                tagId: -1,
+                popupVisible: false,
+                loading: false,
+                haveMore: false,
+			}
+        },
+		methods: {
+            // 资产列表
+            getList() {
+                this.$indicator.open();
+                this.http.post(this.port.assets.list, {
+                    'keyName': this.keyWord,
+                    'tagId': this.tagId==-1?"":this.tagId,
+                    'pageNum': this.pageNum
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.list = res.data.list;
+                        this.pages = res.data.pages==0?1:res.data.pages;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            loadMore() {
+                if(this.pageNum == this.pages) {
+                    this.haveMore = true;
+                } else if(this.pageNum < this.pages) {
+                    this.$indicator.open();
+                    this.http.post(this.port.assets.list, {
+                        'keyName': this.keyWord,
+                        'tagId': this.tagId==-1?"":this.tagId,
+                        'pageNum': ++this.pageNum 
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.pages = res.data.pages==0?1:res.data.pages;
+                            if(res.data.list.length != 0) {
+                                for(var i in res.data.list) {
+                                    this.list.push(res.data.list[i]);
+                                }
+                            }
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            // 标签列表
+			getLabels() {
+                this.http.post(this.port.label.list, {} , 
+                res => {
+                    if (res.code == "ok") {
+                        this.getList();
+                        var array = [{"id":-1 , "name": "全部"}];
+                        for(var i in res.data) {
+                            array.push(res.data[i]);
+                        }
+                        this.labels = array;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            // 关键词搜索
+            searchKeyword() {
+                this.getList();
+            },
+
+            // 右上角按钮
+            showList() {
+                this.popupVisible = !this.popupVisible;
+            },
+
+            // 标签筛选
+            showFilter() {
+                $("._sorting-medical").removeClass("fixed-top");
+                if($("._sorting-address").hasClass("fixed-top")){
+                    $(".searchkey_btn img").removeClass("rotate")
+                    $(".searchkey_btn img").addClass("rotate1")
+                    $(this).removeClass("current");
+                    $("._sorting-address").removeClass("fixed-top");
+                    $('._navbar').attr('style','position: fixed;top:0;');
+                }else{
+                    $(".searchkey_btn img").removeClass("rotate1")
+                    $(".searchkey_btn img").addClass("rotate")
+                    $("._sorting-address").addClass("fixed-top");
+                    $(this).addClass("current");
+                    $("._current-medical").removeClass("current");
+                    $('._navbar').attr('style','position: fixed;top:0;');
+                }
+            },
+
+            // 标签选择
+            chooseTag(id,type) {
+                $("#"+id).addClass("active").siblings("a").removeClass("active");
+                $("#btn"+id).addClass("active").siblings().removeClass("active");
+                location.href = "#" + id;
+                $("._sorting-medical").removeClass("fixed-top");
+                $(".searchkey_btn img").removeClass("rotate")
+                $(".searchkey_btn img").addClass("rotate1")
+                $(this).removeClass("current");
+                $("._sorting-address").removeClass("fixed-top");
+                $('._navbar').attr('style','position: fixed;top:0;');
+                this.pageNum = 1;
+                this.pages = 1;
+                this.tagId = id;
+                this.getList();
+            },
+
+            jumpTo(id) {
+                this.$router.push("/detail/" + id);
+            },
+            
+            register() {
+                this.$router.push("/assetsRegister");
+            },
+
+            exportExcel() {
+                this.http.post(this.port.label.list, {} , 
+                res => {
+                    if (res.code == "ok") {
+                        this.getList();
+                        var array = [{"id":-1 , "name": "全部"}];
+                        for(var i in res.data) {
+                            array.push(res.data[i]);
+                        }
+                        this.labels = array;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+                console.log('导出')
+            },
+        },
+        created() {
+            this.getLabels();
+        },
+		mounted() {
+		}
+	}
+
+</script>
+
+<style scoped>
+    /* 头部搜索框、筛选栏 START */
+    .head {
+        position: fixed;
+        width: 100%;
+        box-sizing:border-box;
+        padding: 0.07rem 0.15rem 0 0.15rem;
+        background: #ffffff;
+        border-bottom: 1px solid #dfdfdf;
+        z-index: 105;
+    }
+
+    .searchbox {
+        display: inline-block;
+        /* width: 75%; */
+        width: 88%;
+        position: relative;
+        vertical-align: middle;
+    }
+
+    .searchbox img.searchbox_img {
+        width:0.18rem;
+        height: 0.18rem;
+        position: absolute;
+        left: 0.04rem;
+        top: 0.05rem;
+    }
+
+    .searchbox input.searchbox_text {
+        font-size: 0.16rem;
+        height: 0.28rem;
+        border-style:none;
+        border: 1px solid #2680EB;
+        border-radius: 50px;
+        box-sizing:border-box;
+        width: 100%;
+        padding: 0 0.45rem 0 0.33rem;
+    }
+
+    input.searchbox_text:focus{
+        outline: none;
+    }
+
+    .searchbox button.searchbox_button {
+        border: 0;
+        background-color: transparent;
+        outline: none;
+        height: 0.28rem;
+        font-size: 0.13rem;
+        background: #2680EB;
+        color: #fff;
+        border-radius: 50px;
+        padding: 0 0.12rem;
+        position: absolute;
+        right: -0.01rem;
+        top: 0;
+    }
+    
+    .btn_body {
+        display: inline-block;
+        float: right;
+        position: relative;
+        margin-top: 0.03rem;
+    }
+
+    .btn_img {
+        float: right;
+        width: 0.25rem;
+        vertical-align: middle;
+    }
+    
+    .btn_list {
+        position: absolute;
+        right: 0;
+        top: 0.37rem;
+        border:#aaa;
+        background: #fcfcfc;
+        box-shadow: 5px 5px 10px #ccc;
+        z-index: 105;
+    }
+
+    .btn_list:before {
+        display: inline-block;
+        width: 0;
+        height: 0;
+        border: solid transparent;
+        border-width: 10px;
+        border-bottom-color: #fcfcfc;
+        content: "";
+        position: absolute;
+        top: -20px;
+        right: 0.06rem;
+    }
+
+    .btn_list > div {
+        width: 0.8rem;
+        font-size: 0.13rem;
+        padding: 0.1rem 0.15rem;
+        border-bottom: 1px solid #efefef;
+        text-align: center;
+    }
+
+    .btn_list > div img {
+        width: 0.14rem;
+        height: 0.14rem;
+        vertical-align: middle;
+        margin-right: 0.05rem;
+    }
+
+    .btn_list > div span {
+        height: 0.15rem;
+        line-height: 0.15rem;
+        vertical-align: middle;
+    }
+
+    .searchkey {
+        height: 0.35rem;
+        line-height: 0.35rem;
+        margin-top: 0.08rem;
+    }
+
+    .searchkey .searchkey_word {
+        width: 93%;
+        display: inline-block;
+        overflow-x: auto;
+        white-space: nowrap;
+        vertical-align: middle;
+    }
+
+    .searchkey .searchkey_word::-webkit-scrollbar {
+        display:none
+    }
+
+    .searchkey .searchkey_word a {
+        font-size: 0.13rem;
+        padding: 0 0.05rem;
+        color: #333;
+        text-decoration:none;
+    }
+
+    .searchkey .searchkey_word a.active {
+        color: #2680EB;
+    }
+
+    .searchkey .searchkey_btn {
+        display: inline-block;
+        width: 7%;
+        height: 100%;
+        float: right;
+    }
+
+    .searchkey .searchkey_btn img {
+        width: 0.25rem;
+        /* height: 0.3rem; */
+        vertical-align: middle;
+    }
+
+    .address_first .current{
+        background:#eee;
+        color: #6f83ff;
+        border-left: 2px solid #6f83ff;
+    }
+    
+    ._sorting-address {
+        position:fixed;
+        top: -50%;
+        width: 100%;
+        height: 50%;
+        z-index: 1;
+        -webkit-transition-duration: 0.4s;
+        background: #fff;
+    }
+
+    ._sorting-address>ul {
+        margin: 0;
+        padding: 0;
+        overflow: auto;
+        height: 100%;
+        width: 100%;
+        -webkit-transition-duration: 0.4s;
+        box-sizing:border-box;
+        padding: 0.08rem 0.1rem;
+    }
+
+    ._sorting-address>ul>li {
+        display: inline-block;
+        height: 0.2rem;
+        line-height: 0.2rem;
+        font-size: 0.14rem;
+        color: #ccc;
+        margin: 0.02rem 0.03rem 0.08rem;
+        border: 1px solid #ccc;
+        border-radius: 50px;
+        width: 0.76rem;
+        text-align: center;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+    
+    ._sorting-address>ul>li.active {
+        border: 1px solid #2680EB;
+        color: #2680EB;
+    }
+
+    ._sorting-address>ul.address_first {
+        background: #fff;
+        position: absolute;
+        z-index: 1;
+        border: 1px solid #ddd;
+        box-shadow: 5px 5px 10px #ddd;
+    }
+
+    .fixed-top{
+        top: 0.77rem;
+    }
+
+    .fixed-top::after{
+        content: "";
+        width: 100%;
+        height: 100%;
+        display: block;
+        background:rgba(0,0,0,0.2);
+    }
+
+    .rotate {
+        transform-origin: center center;
+        transform: rotate(180deg);
+        -webkit-transform: rotate(180deg);
+        -moz-transform: rotate(180deg);
+        -ms-transform: rotate(180deg);
+        -o-transform: rotate(180deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+
+    .rotate1 {
+        transform-origin: center center;
+        transform: rotate(0deg);
+        -webkit-transform: rotate(0deg);
+        -moz-transform: rotate(0deg);
+        -ms-transform: rotate(0deg);
+        -o-transform: rotate(0deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+    /* 头部搜索框、筛选栏 END */
+
+    /* 列表页 START */
+    .body {
+        -webkit-box-flex: 1;
+        -webkit-flex: 1;
+        -ms-flex: 1;
+        flex: 1;
+        width: 100%;
+        padding: 0.81rem 0 0 0;
+        /* height: calc(100% - 0.4rem); */
+        height: calc(100% - 0.8rem);
+        overflow-y: auto;
+        background: #EFEFEF;
+    }
+
+    .body > ul {
+        padding: 0 0.12rem;
+        margin-top: 0;
+    }
+    
+    .body > ul li {
+        display: inline-block;
+        width: 1.5rem;
+        padding: 0.08rem 0.05rem;
+        background: #fff;
+        margin: 0.06rem 0.04rem;
+        border-radius: 10px; 
+    }
+
+    .body > ul li .item_img img {
+        width: 1.5rem;
+        height: 1.5rem;
+    }
+
+    .body > ul li .text {
+        height: 0.23rem;
+        line-height: 0.23rem;
+        margin: 0.02rem  0 0 0;
+    }
+
+    .body > ul li .item_int {
+        color: #B5B5B5;
+        font-size: 0.12rem;
+    }
+
+    .body > ul li .item_num {
+        color: #448DE4;
+        font-weight: 600;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .order {
+        height: 0.6rem;
+        line-height: 0.6rem;
+        text-align: center;
+    }
+
+    .order .line {
+        display: inline-block;
+        width: 1.2rem;
+        border-top: 1px solid #ccc ;
+        vertical-align: middle;
+    }
+
+    .order .txt {
+        color: #ccc;
+        font-size: 0.13rem;
+        vertical-align: middle;
+    }
+    /* 列表页 END */
+</style>

+ 528 - 0
lss_vue_wx/src/views/assets/assetsDetail.vue

@@ -0,0 +1,528 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="资产详情">
+            <router-link to="/assets" slot="left">
+                <mt-button icon="back"></mt-button>
+            </router-link>
+            <mt-button slot="right" v-if="power.indexOf('assets_operation')>-1" v-on:click.native="jumpTo(3)">操作记录</mt-button>
+        </mt-header>
+        <div class="detail_body">
+            <div class="detailBox userInfo" v-on:click="power.indexOf('update_assets') > -1 ?jumpTo(0):''">
+                <div class="left">
+                    <img v-if="detail.pic != null" :src="detail.pic">
+                    <img v-else src="../../assets/image/noPic.png">
+                </div>
+                <div class="right">
+                    <div>
+                        <span class="name">{{detail.name}}</span>
+                    </div>
+                    <div class="department">
+                        {{detail.modelNumber}}
+                    </div>
+                    <div>
+                        <span class="num">{{detail.goodsNosVO!=null?detail.goodsNosVO.length:0}}{{detail.unit}}</span>
+                        <span v-if="power.indexOf('update_assets')>-1" class="arrow"><img src="../../assets/image/pull_down_blue.png"></span>
+                    </div>
+                </div>
+            </div>
+            <div class="detailBox">
+                <mt-cell v-if="power.indexOf('maintenance_assets')>-1" title="维护资产" is-link v-on:click.native="jumpTo(1)"></mt-cell>
+                <mt-cell v-if="power.indexOf('update_assets')>-1" title="资产编号" is-link v-on:click.native="jumpTo(2)"></mt-cell>
+            </div>
+            <div class="detailBox">
+                <div class="assDel assDel_Head">
+                    资产详情列表
+                    <img v-if="power.indexOf('update_assets')>-1" v-on:click="addNo()" src="../../assets/image/add.png">
+                </div>
+                <div class="assDel assDel_Status">
+                    <span class="active" v-on:click="changeState(-1)">全部 {{delList.length}}</span>
+                    <span v-on:click="changeState(0)">未用 {{unuList.length}}</span>
+                    <span v-on:click="changeState(1)">在用 {{useList.length}}</span>
+                    <span v-on:click="changeState(3)">报废 {{scrList.length}}</span>
+                </div>
+                <div class="assDel assDel_List">
+                    <div class="one_assDel" v-for="item in delList" v-if="state == -1 || item.state == state">
+                        <mt-cell-swipe v-if="power.indexOf('handle_assets') == -1 && power.indexOf('update_assets') == -1" :right="[]" :class="item.username==null?'noName':''">
+                            <div class="one_assDel_head">
+                                <span class="canJump"><span style="color:#DC143C;font-weight:600">{{item.isMaintain == 1?"[待维护] ":""}}</span>{{item.modelNo}}</span>
+                                <span v-if="item.state == 0">未用</span>
+                                <span v-if="item.state == 1">在用</span>
+                                <span v-if="item.state == 3">报废</span>
+                            </div>
+                            <div class="one_assDel_body">
+                                <span>{{item.username}} {{item.phone}}</span>
+                            </div>
+                        </mt-cell-swipe>
+
+                        <mt-cell-swipe v-if="power.indexOf('handle_assets') > -1 && power.indexOf('update_assets') == -1" :right="[
+                            { content: '处置', style: { background: 'rgba(38,162,255,0.9)', color: '#fff' }, handler: () => handle(item.id) },
+                            { content: '删除', style: { background: 'rgba(220,0,0,0.7)', color: '#fff', }, handler: () => deleteNos(item.id)}
+                            ]" :class="item.username==null?'noName':''">
+                            <div class="one_assDel_head">
+                                <span class="canJump"><span style="color:#DC143C;font-weight:600">{{item.isMaintain == 1?"[待维护] ":""}}</span>{{item.modelNo}}</span>
+                                <span v-if="item.state == 0">未用</span>
+                                <span v-if="item.state == 1">在用</span>
+                                <span v-if="item.state == 3">报废</span>
+                            </div>
+                            <div class="one_assDel_body">
+                                <span>{{item.username}} {{item.phone}}</span>
+                            </div>
+                        </mt-cell-swipe>
+
+                        <mt-cell-swipe v-if="power.indexOf('handle_assets') == -1 && power.indexOf('update_assets') > -1" :right="[
+                            { content: '处置', style: { background: 'rgba(38,162,255,0.9)', color: '#fff' }, handler: () => handle(item.id) },
+                            ]" :class="item.username==null?'noName':''">
+                            <div class="one_assDel_head">
+                                <span class="canJump"><span style="color:#DC143C;font-weight:600">{{item.isMaintain == 1?"[待维护] ":""}}</span>{{item.modelNo}}</span>
+                                <span v-if="item.state == 0">未用</span>
+                                <span v-if="item.state == 1">在用</span>
+                                <span v-if="item.state == 3">报废</span>
+                            </div>
+                            <div class="one_assDel_body">
+                                <span>{{item.username}} {{item.phone}}</span>
+                            </div>
+                        </mt-cell-swipe>
+
+                        <mt-cell-swipe v-if="power.indexOf('handle_assets') > -1 && power.indexOf('update_assets') > -1" :right="[
+                            { content: '删除', style: { background: 'rgba(220,0,0,0.7)', color: '#fff', }, handler: () => deleteNos(item.id)}
+                            ]" :class="item.username==null?'noName':''">
+                            <div class="one_assDel_head">
+                                <span class="canJump"><span style="color:#DC143C;font-weight:600">{{item.isMaintain == 1?"[待维护] ":""}}</span>{{item.modelNo}}</span>
+                                <span v-if="item.state == 0">未用</span>
+                                <span v-if="item.state == 1">在用</span>
+                                <span v-if="item.state == 3">报废</span>
+                            </div>
+                            <div class="one_assDel_body">
+                                <span>{{item.username}} {{item.phone}}</span>
+                            </div>
+                        </mt-cell-swipe>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+    import { MessageBox } from 'mint-ui';
+	export default {
+		data() {
+			return {
+                id: this.$route.params.id,
+                power: sessionStorage.getItem("power"),
+                detail: "",
+                delList: [],
+                useList: [],
+                serList: [],
+                scrList: [],
+                unuList: [],
+                state: -1,
+
+                edit: [],
+			}
+		},
+		methods: {
+            getDetail() {
+                this.$indicator.open();
+                this.http.post(this.port.assets.detail, {
+                    'id': this.id
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.detail = res.data;
+                        this.delList = res.data.goodsNosVO;
+                        var list = res.data.goodsNosVO,
+                            useList = [],
+                            serList = [],
+                            scrList = [],
+                            unuList = [];
+                        for(var i in list) {
+                            if(list[i].state == 0) {
+                                unuList.push(list[i])
+                            } else if(list[i].state == 1) {
+                                useList.push(list[i])
+                                serList.push(list[i])
+                            } else if(list[i].state == 3) {
+                                scrList.push(list[i])
+                            }
+                        }
+                        this.useList = useList;
+                        this.serList = serList;
+                        this.scrList = scrList;
+                        this.unuList = unuList;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            changeState(type) {
+                if(type == 3) {
+                    $(".assDel_Status span:eq(3)").addClass("active").siblings().removeClass("active");
+                } else {
+                    $(".assDel_Status span:eq("+ (type + 1) +")").addClass("active").siblings().removeClass("active");    
+                }
+                this.state = type;
+            },
+
+            // 添加资产编号
+            addNo() {
+                MessageBox({
+                    $type:'prompt',
+                    title:'',
+                    message:'添加资产数量',
+                    closeOnClickModal:false,
+                    showCancelButton:true,
+                    inputValidator:function(v){
+                        if (v === null) {
+                           return true;
+                        }
+                        var str = /^[0-9]*[1-9][0-9]*$/;
+                        if(str.test(v) && v != "") {
+                            return true
+                        } else {
+                            return false
+                        }
+                    },
+                    inputErrorMessage:'请输入资产编号数量',
+                    showInput:true
+                }).then(({ value, action }) => {
+                    if(value == null) {
+                        this.$toast({
+                            message: '创建失败',
+                            duration: 2000
+                        });
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        this.http.post(this.port.assets.addNo, {
+                            'goodsId': this.id,
+                            'count': value
+                        } , 
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: '创建成功',
+                                    duration: 2000
+                                });
+                                this.getDetail();
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                }).catch(() => {
+                });
+            },            
+
+            // 删除资产编号
+            deleteNos(id) {
+                MessageBox.confirm('', { 
+                    message: '是否删除该资产?', 
+                        title: '', 
+                        confirmButtonText: '确定', 
+                        cancelButtonText: '取消' 
+                 }).then(action => { 
+                    if (action == 'confirm') {     //确认的回调
+                        this.http.post(this.port.assets.delNo, {
+                            'id': id
+                        } , 
+                        res => {
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: "删除成功",
+                                    duration: 2000
+                                });
+                                for(var i in this.delList) {
+                                    if(this.delList[i].id == id) {
+                                        this.delList.splice(i, 1);
+                                    }
+                                }
+                                var list = this.delList,
+                                    useList = [],
+                                    serList = [],
+                                    scrList = [],
+                                    unuList = [];
+                                for(var i in list) {
+                                    if(list[i].state == 0) {
+                                        unuList.push(list[i])
+                                    } else if(list[i].state == 1) {
+                                        useList.push(list[i])
+                                        serList.push(list[i])
+                                    } else if(list[i].state == 3) {
+                                        scrList.push(list[i])
+                                    }
+                                }
+                                this.useList = useList;
+                                this.serList = serList;
+                                this.scrList = scrList;
+                                this.unuList = unuList;
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                 }).catch(err => { 
+                 });
+            },
+
+            // 跳转
+            jumpBack() {
+                this.$router.push("/assets");
+            },
+
+            jumpTo(type) {
+                if(type == 0) {
+                    this.$router.push("/assetsEdit/" + this.id );
+                } else if(type == 1) {
+                    this.$router.push("/assetsMaintain/" + this.id );
+                } else if(type == 2) {
+                    this.$router.push("/assetsNumber/" + this.id + "/" + this.detail.divisionCode + "/" + this.detail.suffixCode );
+                } else if(type == 3) {
+                    this.$router.push("/assetsOperation/" + this.id );
+                }
+            },
+
+            handle(id) {
+                this.$router.push("/assetsHandle/" + id );
+            }
+        },
+        created() {
+            if(this.power.indexOf('handle_assets') > -1) {
+                this.edit.push({
+                    content: '处置',
+                    style: { background: 'rgba(38,162,255,0.9)', color: '#fff' },
+                    handler: () => this.handle(item.id)
+                })
+            }
+            if(this.power.indexOf('update_assets') > -1) {
+                this.edit.push({ content: '删除',
+                    style: { background: 'rgba(220,0,0,0.7)', color: '#fff', },
+                    handler: () => this.deleteNos(item.id)
+                })
+            }
+            this.getDetail();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+    }
+
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .userInfo {
+        padding: 0.22rem 0.1rem;
+    }
+
+    .left{
+        float:left;
+        margin-right: 0.15rem;
+    }
+
+    .left img {
+        width: 0.6rem;
+        height: 0.6rem;
+    }
+
+    .right div{
+        line-height: 0.21rem;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+
+    span.name {
+        font-size: 0.16rem;
+        font-weight: 600;
+        margin: 0 0.15rem 0 0;
+        width: 100%;
+        overflow: hidden;
+        white-space: nowrap;
+    }
+    
+    span.num {
+        font-size: 0.14rem;
+        color: #26a2ff;
+    }
+
+    div.department {
+        font-size: 0.13rem;
+        color: #9E9E9E;
+    }
+
+    span.arrow {
+        float: right;
+    }
+
+    span.arrow img {
+        width: 0.12rem;
+        margin-right: 0.05rem;
+        transform: rotate(-90deg);
+        -ms-transform: rotate(-90deg); /* IE 9 */
+        -moz-transform: rotate(-90deg); /* Firefox */
+        -webkit-transform: rotate(-90deg); /* Safari and Chrome */
+        -o-transform: rotate(-90deg); /* Opera */
+    }
+
+    .assDel {
+        padding: 0.12rem 0.1rem;
+    }
+
+    .assDel_List {
+        padding-top: 0; 
+    }
+
+    .assDel_Status span {
+        display: inline-block;
+        text-align: center;
+        width: 24%;
+        color: #aaa;
+        font-size: 0.15rem;
+    }
+
+    .assDel_Status span.active {
+        color: #26a2ff;
+    }
+
+    .assDel_Head img {
+        float: right;
+        width: 0.2rem;
+        height: 0.2rem;
+    }
+
+    .one_assDel {
+        /* padding: 0 0.1rem; */
+        margin: 0 0 0.15rem 0;
+    }
+
+    .mint-cell-wrapper {
+        padding: 0;
+    }
+
+    .one_assDel_head {
+        width: 100%;
+    }
+
+    .one_assDel_body {
+        width: 100%;
+    }
+
+    .one_assDel_head > span {
+        display:inline-block;
+        vertical-align: middle;
+        color: #666;
+        line-height: 0.4rem;
+    }
+
+    .one_assDel_head > span:nth-child(1){
+        width: 85%;
+        font-size: 0.15rem;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+    }
+
+    .one_assDel_head > span:nth-child(1).canJump {
+        /* color: #26a2ff; */
+    }
+
+    .one_assDel_head > span:nth-child(2){
+        float: right;
+    }
+
+    .one_assDel_body span {
+        /* display:inline-block; */
+        color: #aaa;
+        vertical-align: middle;
+    }
+
+    .one_assDel_body img {
+        float: right;
+        width: 0.25rem;
+        height: 0.25rem;
+        vertical-align: middle;
+    }
+</style>
+<style>
+    .detail_head .mint-header-title {
+        font-weight: 600;
+        font-size: 0.15rem;
+    }
+
+    .detail_head .mint-button-text {
+        color: #26a2ff;
+    }
+
+    .detailBox .mint-cell {
+        padding: 0 0 0 0.02rem;
+    }
+
+    .one_assDel .mint-cell-value {
+        display: block;
+        width: 100%;
+    }
+
+    .one_assDel .mint-cell:last-child {
+        background-image: none;
+    }
+
+    .one_assDel .mint-cell-wrapper {
+        background-image: none;
+    }
+
+    .one_assDel .mint-cell-swipe-button {
+        line-height: 0.55rem;
+    }
+
+    .one_assDel .noName .mint-cell-swipe-button {
+        line-height: 48px;
+    }
+</style>

+ 537 - 0
lss_vue_wx/src/views/assets/assetsEdit.vue

@@ -0,0 +1,537 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="编辑资产">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="detailBox">
+                <mt-field label="物品名称" placeholder="请输入物品名称" v-model="assetsForm.name"></mt-field>
+                <mt-field label="型号" placeholder="请输入物品型号" v-model="assetsForm.modelNumber"></mt-field>
+                <mt-field label="数量" placeholder="请输入数量" type="number" v-model="assetsForm.number"></mt-field>
+                <mt-field label="单位" placeholder="请输入单位" v-model="assetsForm.unit"></mt-field>
+                <div class="upload">
+                    <div class="left">物品图片</div>
+                    <div class="right upload_add" v-on:click="choosePic()">
+                        <div v-if="assetsForm.pic == null || assetsForm.pic == ''" class="upload_add_image" align="center">
+                            <img src="../../assets/image/camera.png" class="camera">
+                            <p class="font13">添加图片</p>
+                        </div>
+                        <div v-else class="right">
+                            <img class="pic" :src="assetsForm.pic">
+                        </div>
+                    </div>
+                    <input @change="fileChange($event)" type="file" accept="image/*" id="upload_file" style="display: none"/>
+                </div>
+                <mt-field label="地址" placeholder="请输入地址" v-model="assetsForm.address"></mt-field>
+            </div>
+            <div class="detailBox">
+                <mt-field label="生产厂家" placeholder="请输入生产厂家" v-model="assetsForm.factory"></mt-field>
+                <mt-field label="服务期限" placeholder="请输入服务期限" v-model="assetsForm.serviceLife"></mt-field>
+                <mt-field label="下次维护日期" placeholder="请选择下次维护日期" type="date" v-model="assetsForm.nextIndate"></mt-field>
+            </div>
+            <div class="detailBox">
+                <div class="left_tag">所属分类</div>
+                <div class="right">
+                    <ul class="address_first">
+                        <li v-for="(item,index) in labels" :id="'btn'+item.id" v-bind:class="{'active':item.id==tagId}" v-on:click="chooseTag(item.id)">
+                            {{item.name}}
+                            <img v-if="index > 7" v-on:click="delTag(item.id)" src="../../assets/image/del.png">
+                        </li>
+                        <li v-on:click="addNewTag()" class="add">+</li>
+                    </ul>
+                </div>
+            </div>
+            <div class="btn">
+                <mt-button class="allBtn" size="large" type="primary" v-on:click.native="submit()">确定</mt-button>
+                <mt-button class="allBtn" size="large" v-on:click.native="jumpBack()">取消</mt-button>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+    import { MessageBox } from 'mint-ui';
+	export default {
+		data() {
+			return {
+                id: this.$route.params.id,
+                user: JSON.parse(sessionStorage.getItem("user")),
+                assetsForm: {
+                    id: '',
+                    name: '',
+                    modelNumber: '',
+                    number: '',
+                    unit: '',
+                    address: '',
+                    factory: '',
+                    serviceLife: '',
+                    nextIndate: '',
+                    pic: '',
+                    tagId: 0,
+                },
+                labels: [],
+                tagId: 0,
+                limit: 1,
+                canClick: true,
+			}
+		},
+		methods: {
+            // 详情
+            getDetail() {
+                this.$indicator.open();
+                this.http.post(this.port.assets.detail, {
+                    'id': this.id
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.assetsForm = {
+                            id: this.id,
+                            name: res.data.name,
+                            modelNumber: res.data.modelNumber,
+                            number: res.data.goodsNosVO==null?0:res.data.goodsNosVO.length,
+                            unit: res.data.unit,
+                            address: res.data.address,
+                            factory: res.data.factory,
+                            serviceLife: res.data.serviceLife,
+                            nextIndate: res.data.nextIndate,
+                            pic: res.data.pic,
+                            tagId: res.data.tagId,
+                        }
+                        this.tagId = res.data.tagId
+                        this.getLabels();
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            // 标签列表
+			getLabels() {
+                this.http.post(this.port.label.list, {} , 
+                res => {
+                    if (res.code == "ok") {
+                        this.labels = res.data;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            addNewTag() {
+                MessageBox({
+                    $type:'prompt',
+                    title:'',
+                    message:'请输入资产类型名称',
+                    closeOnClickModal:false,
+                    showCancelButton:true,
+                    inputValidator:function(v){
+                        if (v === null) {
+                           return true;
+                        }
+                        if (v != ""){
+                            return true
+                        } else {
+                            return false
+                        }
+                    },
+                    inputErrorMessage:'请输入资产类型名称',
+                    showInput:true
+                }).then(({ value, action }) => {
+                    if(value == null) {
+                        this.$toast({
+                            message: '创建失败',
+                            duration: 2000
+                        });
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        this.http.post(this.port.label.add, {
+                            'name': value,
+                        } , 
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: '创建成功',
+                                    duration: 2000
+                                });
+                                this.getLabels();
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                }).catch(() => {
+                });
+            },
+
+            chooseTag(id) {
+                $("#btn"+id).addClass("active").siblings().removeClass("active");
+                this.assetsForm.tagId = id;
+            },
+
+            delTag(id) {
+                MessageBox.confirm('', { 
+                    message: '是否删除该分类?', 
+                        title: '', 
+                        confirmButtonText: '确定', 
+                        cancelButtonText: '取消' 
+                 }).then(action => { 
+                    if (action == 'confirm') {     //确认的回调
+                        this.http.post(this.port.label.del, {
+                            'id': id
+                        } , 
+                        res => {
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: "删除成功",
+                                    duration: 2000
+                                });
+                                this.getLabels();
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                 }).catch(err => { 
+                 });
+            },
+
+            // 图片上传
+            choosePic() {
+                document.getElementById('upload_file').click();
+            },
+
+            fileChange(el) {
+                if (!el.target.files[0].size) return;
+                this.fileAdd(el.target.files[0]);
+                el.target.value = ''
+            },
+
+            fileAdd(file) {
+                //判断是否为图片文件
+                if (file.type.indexOf('image') == -1) {
+                    this.$toast({
+                        message: '请选择图片文件',
+                        duration: 2000
+                    });
+                } else {
+                    var form = new FormData();
+                    form.append("file", file);
+                    this.$indicator.open();
+                    this.http.uploadFile( this.port.assets.upload, form,
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.$toast({
+                                message: '上传成功',
+                                duration: 2000
+                            });
+                            this.assetsForm.pic = res.data;
+                            document.getElementById('upload_file').value = "";
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    },
+                    error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    });
+                }
+            },
+
+            // 创建
+            submit() {
+                if(this.canClick) {
+                    this.canClick = false;
+                    if(this.assetsForm.name == null || this.assetsForm.name == "") {
+                        this.$toast({
+                            message: '请输入物品名称',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.number == null || this.assetsForm.number == "") {
+                        this.$toast({
+                            message: '请输入物品数量',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.unit == null || this.assetsForm.unit == "") {
+                        this.$toast({
+                            message: '请输入物品单位',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        var _this = this;
+                        this.http.post( this.port.assets.update, this.assetsForm,
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: '更新成功',
+                                    duration: 2000
+                                });
+                                setTimeout(function(){
+                                    _this.$router.go(-1);
+                                }, 1000);
+                            } else {
+                                this.canClick = true;
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        },
+                        error => {
+                            this.canClick = true;
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        });
+                    }
+                } else {
+                    this.$toast({
+                        message: '请勿重复提交',
+                        duration: 2000
+                    });
+                }
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getDetail();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .left{
+        float:left;
+        /* margin: 0.15rem; */
+        padding: 0.15rem 0 0.1rem 0;
+    }
+
+    .left_tag {
+        margin: 0;
+        padding: 0.15rem 0.15rem 0.1rem 0.15rem;
+    }
+
+    .upload .left {
+        margin: 0.1rem 0.11rem;
+    }
+
+    .right div{
+        line-height: 0.21rem;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+
+    .btn {
+        width: 80%;
+        margin: 0.2rem auto 80px;
+    }
+
+    .allocation {
+        width: 100%;
+        height: 100%;
+    }
+
+    .address_first .current{
+        background:#eee;
+        color: #6f83ff;
+        border-left: 2px solid #6f83ff;
+    }
+
+    .right > ul {
+        margin: 0;
+        padding: 0;
+        overflow: auto;
+        -webkit-transition-duration: 0.4s;
+        box-sizing:border-box;
+        padding: 0.08rem 0.1rem;
+    }
+
+    .right > ul > li {
+        display: inline-block;
+        height: 0.2rem;
+        line-height: 0.22rem;
+        font-size: 0.14rem;
+        color: #ccc;
+        padding: 0.02rem 0.12rem;
+        margin: 0.06rem 0.07rem;
+        border: 1px solid #ccc;
+        border-radius: 50px;
+        min-width: 0.3rem;
+        text-align: center;
+        position: relative;
+    }
+
+    .right > ul > li img {
+        position: absolute;
+        top: -0.05rem;
+        right: -0.08rem;
+        width: 0.18rem;
+        height: 0.18rem;
+    }
+
+    .right > ul > li.add {
+        border: 1px solid #777;
+        color: #777;
+    }
+    
+    .right > ul > li.active {
+        border: 1px solid #2680EB;
+        color: #2680EB;
+    }
+
+    .upload_add {
+        display: inline-block;
+        margin-bottom: 0.2rem;
+    }
+
+    .upload_add_image {
+        padding-top: 0.08rem;
+        margin: 0.15rem 0 0 0.3rem ;
+        width: 1rem;
+        height: 0.9rem;
+        border: 1px dashed rgba(0, 0, 0, .2);
+    }
+
+    .upload_add-image .camera {
+        font-size: 24px;
+    }
+
+    .upload_add_image p {
+        padding: 0;
+        margin: 0;
+        color: #8e8e8e;
+    }
+
+    .right div img.pic {
+        width: 0.8rem;
+        height: 0.8rem;
+        margin: 0.15rem 0 0 0.3rem ;
+    }
+
+    .textColor {
+        margin-top: 0.4rem;
+        color: #8e8e8e;
+        padding: 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .example {
+        color: #8e8e8e;
+        padding: 0.02rem 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .allBtn {
+        width: 80%;
+        margin: 0.18rem auto;
+    }
+</style>
+<style>
+    .detail_head .mint-header-title {
+        font-weight: 600;
+        font-size: 0.15rem;
+    }
+
+    .detail_head .mint-button-text {
+        color: #26a2ff;
+    }
+
+    .detailBox .mint-cell {
+        padding: 0 0 0 0.02rem;
+    }
+    
+    .mint-popup.allocation  {
+        background: #efefef;
+    }
+
+    .mint-msgbox {
+        width: 70%;
+    }
+
+    .mint-cell-wrapper {
+        background-image: none;
+    }
+</style>

+ 390 - 0
lss_vue_wx/src/views/assets/assetsHandle.vue

@@ -0,0 +1,390 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="处置资产">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="detailBox">
+                <mt-field label="资产编号" placeholder="请输入物品名称" v-model="detail.modelNo" disabled></mt-field>
+                <mt-field id="state" label="资产状态" placeholder="请选择资产状态" disableClear disabled v-on:click.native="chooseType()" v-model="state"></mt-field>
+                <mt-field v-if="assetsForm.state == 1" id="userId" label="对应人员" placeholder="请选择对应人员" disableClear disabled v-on:click.native="choosePeo()" v-model="userName"></mt-field>
+            </div>
+            <div class="btn">
+                <mt-button class="allBtn" size="large" type="primary" v-on:click.native="submit()">确定</mt-button>
+                <mt-button class="allBtn" size="large" v-on:click.native="jumpBack()">取消</mt-button>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                id: this.$route.params.id,
+                detail: "",
+                users: [],
+                assetsForm: {
+                    id: '',
+                    state: 0,
+                    userId: 0,
+                    currentUserId: JSON.parse(sessionStorage.getItem("user")).id,
+                },
+                state: "",
+                userName: "",
+                popupVisible: false,
+                canClick: true,
+			}
+		},
+		methods: {
+            // 详情
+            getDetail() {
+                this.$indicator.open();
+                this.http.post(this.port.assets.detailNo, {
+                    'id': this.id
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.detail = res.data;
+                        this.assetsForm = {
+                            id: res.data.id,
+                            state: res.data.state,
+                            userId: res.data.userId == null?0:res.data.userId,
+                            currentUserId: JSON.parse(sessionStorage.getItem("user")).id,
+                        }
+                        if(res.data.state == 0) {
+                            this.state = "未用"
+                        } else if(res.data.state == 1) {
+                            this.state = "在用"
+                        } else if(res.data.state == 3) {
+                            this.state = "报废"
+                        }
+                        this.userName = res.data.username==null?'':res.data.username;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            getUserList() {
+                this.http.post(this.port.user.list, {} , 
+                res => {
+                    if (res.code == "ok") {
+                        this.users = res.data;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            chooseType() {
+                var _this = this;
+                var dataShippingSpace = [
+                    {name: "未用"},
+                    {name: "在用"},
+                    {name: "报废"},
+                ];
+                var pickerDiv = document.getElementById("state");
+                var vCardType = this.detail.state;
+                var pickerView = new PickerView({
+                    bindElem: pickerDiv, 
+                    data: dataShippingSpace, 
+                    title: "资产状态", 
+                    leftText: "取消", 
+                    rightText: "确定", 
+                    rightFn: function(selectArr) {
+                        if (selectArr[0].name == "未用") {
+                            vCardType = "0";
+                            _this.assetsForm.state = 0;
+                            _this.assetsForm.userId = 0;
+                            _this.state = "未用";
+                        } else if (selectArr[0].name == "在用") {
+                            vCardType = "1";
+                            _this.assetsForm.state = 1;
+                            _this.state = "在用";
+                        } else if (selectArr[0].name == "报废") {
+                            vCardType = "3";
+                            _this.assetsForm.state = 3;
+                            _this.assetsForm.userId = 0;
+                            _this.state = "报废";
+                        }
+                    }
+                });
+            },
+
+            choosePeo() {
+                if(this.detail.state != 1) {
+                    var _this = this;
+                    var dataShippingSpace = this.users;
+                    var pickerDiv = document.getElementById("userId");
+                    var vCardType = this.detail.userId;
+                    var pickerView = new PickerView({
+                        bindElem: pickerDiv, 
+                        data: dataShippingSpace, 
+                        title: "对应人员", 
+                        leftText: "取消", 
+                        rightText: "确定", 
+                        rightFn: function(selectArr) {
+                            _this.assetsForm.userId = selectArr[0].id;
+                            _this.userName = selectArr[0].name;
+                        }
+                    });
+                }
+            },
+
+            // 创建
+            submit() {
+                if(this.canClick) {
+                    this.canClick = false;
+                    if(this.assetsForm.state == 1 && this.assetsForm.userId == 0) {
+                        this.$toast({
+                            message: '请选择对应人员',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.detail.state == this.assetsForm.state) {
+                        this.$toast({
+                            message: '请更改状态后提交',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        var _this = this;
+                        this.http.post( this.port.assets.handle, this.assetsForm,
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: '处置成功',
+                                    duration: 2000
+                                });
+                                setTimeout(function(){
+                                    _this.$router.go(-1);
+                                }, 1000);
+                            } else {
+                                this.canClick = true;
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        },
+                        error => {
+                            this.canClick = true;
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        });
+                    }
+                } else {
+                    this.$toast({
+                        message: '请勿重复提交',
+                        duration: 2000
+                    });
+                }
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getDetail();
+            this.getUserList();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .detail {
+        background: #EFEFEF;
+        overflow: hidden;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .left{
+        float:left;
+        margin: 0.15rem;
+    }
+
+    .upload .left {
+        margin: 0.1rem 0.11rem;
+    }
+
+    .right div{
+        line-height: 0.21rem;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+
+    .btn {
+        width: 80%;
+        margin: 0.2rem auto 80px;
+    }
+
+    .allocation {
+        width: 100%;
+        height: 100%;
+    }
+
+    .address_first .current{
+        background:#eee;
+        color: #6f83ff;
+        border-left: 2px solid #6f83ff;
+    }
+
+    .right > ul {
+        margin: 0;
+        padding: 0;
+        overflow: auto;
+        -webkit-transition-duration: 0.4s;
+        box-sizing:border-box;
+        padding: 0.08rem 0.1rem;
+    }
+
+    .right > ul > li {
+        display: inline-block;
+        height: 0.2rem;
+        line-height: 0.2rem;
+        font-size: 0.14rem;
+        color: #ccc;
+        padding: 0 0.12rem;
+        margin: 0.06rem 0.03rem;
+        border: 1px solid #ccc;
+        border-radius: 50px;
+        min-width: 0.3rem;
+        text-align: center;
+    }
+
+    .right > ul > li.add {
+        border: 1px solid #777;
+        color: #777;
+    }
+    
+    .right > ul > li.active {
+        border: 1px solid #2680EB;
+        color: #2680EB;
+    }
+
+    .upload_add {
+        display: inline-block;
+        margin-bottom: 0.2rem;
+    }
+
+    .upload_add_image {
+        padding-top: 0.08rem;
+        margin: 0.15rem 0 0 0.3rem ;
+        width: 1rem;
+        height: 0.9rem;
+        border: 1px dashed rgba(0, 0, 0, .2);
+    }
+
+    .upload_add-image .camera {
+        font-size: 24px;
+    }
+
+    .upload_add_image p {
+        padding: 0;
+        margin: 0;
+        color: #8e8e8e;
+    }
+
+    .right div img.pic {
+        width: 0.8rem;
+        height: 0.8rem;
+        margin: 0.15rem 0 0 0.3rem ;
+    }
+
+    .textColor {
+        margin-top: 0.4rem;
+        color: #8e8e8e;
+        padding: 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .example {
+        color: #8e8e8e;
+        padding: 0.02rem 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .allBtn {
+        width: 80%;
+        margin: 0.18rem auto;
+    }
+</style>
+<style>
+    .detail_head .mint-header-title {
+        font-weight: 600;
+        font-size: 0.15rem;
+    }
+
+    .detail_head .mint-button-text {
+        color: #26a2ff;
+    }
+
+    .detailBox .mint-cell {
+        padding: 0 0 0 0.02rem;
+    }
+    
+    .mint-popup.allocation  {
+        background: #efefef;
+    }
+
+    .mint-msgbox {
+        width: 70%;
+    }
+
+    .mint-cell-wrapper {
+        background-image: none;
+    }
+
+    input:disabled {
+        background: #fff;
+    }
+</style>

+ 375 - 0
lss_vue_wx/src/views/assets/assetsMaintain.vue

@@ -0,0 +1,375 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="维护资产">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="detailBox">
+                <div style="padding:0.12rem;">资产编号</div>
+                <mt-field id="userId" placeholder="请选择资产编号" disableClear disabled v-on:click.native="choosePeo()" type="textarea" v-model="idStr"></mt-field>
+            </div>
+            <div class="detailBox">
+                <mt-field label="维护人" placeholder="请输入维护人" v-model="assetsForm.operator"></mt-field>
+                <mt-field label="联系方式" placeholder="请输入维护人联系方式" v-model="assetsForm.operatorPhone"></mt-field>
+            </div>
+            <div class="detailBox">
+                <mt-field label="维护厂家" placeholder="请输入维护厂家" v-model="assetsForm.company"></mt-field>
+                <mt-field label="联系方式" placeholder="请输入维护厂家联系方式" v-model="assetsForm.companyPhone"></mt-field>
+            </div>
+            <div class="btn">
+                <mt-button class="allBtn" size="large" type="primary" v-on:click.native="submit()">确定</mt-button>
+                <mt-button class="allBtn" size="large" v-on:click.native="jumpBack()">取消</mt-button>
+            </div>
+        </div>
+
+        <mt-popup v-model="popupVisible" position="right" class="allocation">
+            <mt-header class="detail_head" fixed title="待维修资产">
+                <router-link to="" slot="left">
+                    <mt-button icon="back" v-on:click="toPrev()"></mt-button>
+                </router-link>
+            </mt-header>
+            <div class="detailBox">
+                <mt-checklist title="checkbox list" v-model="ids" :options="list" @change="checkon"></mt-checklist>
+            </div>
+        </mt-popup>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                id: this.$route.params.id,
+                list: [],
+                ids: [],
+                idStr: '',
+                assetsForm: {
+                    goodsId: this.$route.params.id,
+                    ids: '',
+                    operator: '',
+                    operatorPhone: '',
+                    company: '',
+                    companyPhone: '',
+                },
+                state: "",
+                userName: "",
+                popupVisible: false,
+                canClick: true,
+			}
+		},
+		methods: {
+            // 待维护资产
+            getMainList() {
+                this.http.post(this.port.assets.maintainList, {
+                    'id': this.id
+                } , 
+                res => {
+                    if (res.code == "ok") {
+                        var list = [];
+                        for(var i in res.data) {
+                            list.push({
+                                label: res.data[i].modelNo,
+                                value: res.data[i].id,
+                            })
+                        }
+                        this.list = list;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            choosePeo() {
+                this.popupVisible = true;
+            },
+
+            toPrev() {
+                this.popupVisible = false;
+            },
+
+            checkon() {
+                this.idStr = "";
+                this.assetsForm.ids = "";
+                for(var i in this.ids) {
+                    for(var j in this.list) {
+                        if(this.ids[i] == this.list[j].value) {
+                            this.idStr += this.list[j].label + ',';
+                            this.assetsForm.ids += this.list[j].value + ',';
+                            break;
+                        }
+                    }
+                }
+                this.idStr = this.idStr.substring(0,this.idStr.length-1)
+                this.assetsForm.ids = this.assetsForm.ids.substring(0,this.assetsForm.ids.length-1)
+            },
+
+            // 创建
+            submit() {
+                if(this.canClick) {
+                    this.canClick = false;
+                    if(this.assetsForm.ids == "") {
+                        this.$toast({
+                            message: '请选择资产编号',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.operator == null || this.assetsForm.operator == "") {
+                        this.$toast({
+                            message: '请输入维护人',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.operatorPhone == null || this.assetsForm.operatorPhone == "") {
+                        this.$toast({
+                            message: '请输入维护人联系方式',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.company == null || this.assetsForm.company == "") {
+                        this.$toast({
+                            message: '请输入维护厂家',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.companyPhone == null || this.assetsForm.companyPhone == "") {
+                        this.$toast({
+                            message: '请输入维护厂家联系方式',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        var _this = this;
+                        this.http.post( this.port.assets.maintain, this.assetsForm,
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: '维护成功',
+                                    duration: 2000
+                                });
+                                setTimeout(function(){
+                                    _this.$router.go(-1);
+                                }, 1000);
+                            } else {
+                                this.canClick = true;
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        },
+                        error => {
+                            this.canClick = true;
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        });
+                    }
+                } else {
+                    this.$toast({
+                        message: '请勿重复提交',
+                        duration: 2000
+                    });
+                }
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getMainList();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .detail {
+        background: #EFEFEF;
+        overflow: hidden;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .left{
+        float:left;
+        margin: 0.15rem;
+    }
+
+    .upload .left {
+        margin: 0.1rem 0.11rem;
+    }
+
+    .right div{
+        line-height: 0.21rem;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+
+    .btn {
+        width: 80%;
+        margin: 0.2rem auto 80px;
+    }
+
+    .allocation {
+        width: 100%;
+        height: 100%;
+    }
+
+    .address_first .current{
+        background:#eee;
+        color: #6f83ff;
+        border-left: 2px solid #6f83ff;
+    }
+
+    .right > ul {
+        margin: 0;
+        padding: 0;
+        overflow: auto;
+        -webkit-transition-duration: 0.4s;
+        box-sizing:border-box;
+        padding: 0.08rem 0.1rem;
+    }
+
+    .right > ul > li {
+        display: inline-block;
+        height: 0.2rem;
+        line-height: 0.2rem;
+        font-size: 0.14rem;
+        color: #ccc;
+        padding: 0 0.12rem;
+        margin: 0.06rem 0.03rem;
+        border: 1px solid #ccc;
+        border-radius: 50px;
+        min-width: 0.3rem;
+        text-align: center;
+    }
+
+    .right > ul > li.add {
+        border: 1px solid #777;
+        color: #777;
+    }
+    
+    .right > ul > li.active {
+        border: 1px solid #2680EB;
+        color: #2680EB;
+    }
+
+    .upload_add {
+        display: inline-block;
+        margin-bottom: 0.2rem;
+    }
+
+    .upload_add_image {
+        padding-top: 0.08rem;
+        margin: 0.15rem 0 0 0.3rem ;
+        width: 1rem;
+        height: 0.9rem;
+        border: 1px dashed rgba(0, 0, 0, .2);
+    }
+
+    .upload_add-image .camera {
+        font-size: 24px;
+    }
+
+    .upload_add_image p {
+        padding: 0;
+        margin: 0;
+        color: #8e8e8e;
+    }
+
+    .right div img.pic {
+        width: 0.8rem;
+        height: 0.8rem;
+        margin: 0.15rem 0 0 0.3rem ;
+    }
+
+    .textColor {
+        margin-top: 0.4rem;
+        color: #8e8e8e;
+        padding: 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .example {
+        color: #8e8e8e;
+        padding: 0.02rem 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .allBtn {
+        width: 80%;
+        margin: 0.18rem auto;
+    }
+</style>
+<style>
+    .detail_head .mint-header-title {
+        font-weight: 600;
+        font-size: 0.15rem;
+    }
+
+    .detail_head .mint-button-text {
+        color: #26a2ff;
+    }
+
+    .detailBox .mint-cell {
+        padding: 0 0 0 0.02rem;
+    }
+    
+    .mint-popup.allocation  {
+        background: #efefef;
+    }
+
+    .mint-msgbox {
+        width: 70%;
+    }
+
+    .mint-cell-wrapper {
+        background-image: none;
+    }
+
+    input:disabled {
+        background: #fff;
+    }
+
+    textarea:disabled {
+        background: #fff;
+    }
+</style>

+ 272 - 0
lss_vue_wx/src/views/assets/assetsNumber.vue

@@ -0,0 +1,272 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="分配资产">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detailBox textColor">
+            资产编号构成:部门编号 + 字母前缀 + 数字序号,字母前缀最多四位,数字序号由系统排序生成
+        </div>
+        <div class="detailBox">
+            <mt-field label="部门编号" placeholder="请输入部门编号" v-model="assetsForm.divisionCode"></mt-field>
+            <mt-field label="字母前缀" placeholder="请输入字母前缀" v-model="assetsForm.suffixCode"></mt-field>
+        </div>
+        <div class="example">示例:Lishui-LXDN0001、Lishui-LXDN0002</div>
+        <mt-button class="allBtn" size="large" type="primary" v-on:click.native="submit()">确定</mt-button>
+        <mt-button class="allBtn" size="large" v-on:click.native="jumpBack()">取消</mt-button>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                assetsForm: {
+                    goodsId: this.$route.params.id,
+                    divisionCode: this.$route.params.divisionCode,
+                    suffixCode: this.$route.params.suffixCode,
+                },
+                canClick: true,
+			}
+		},
+		methods: {
+            // 创建
+            submit() {
+                if(this.canClick) {
+                    this.canClick = false;
+                    var reg = /^^[A-Za-z]{1,4}$/;
+                    if(this.assetsForm.divisionCode == null || this.assetsForm.divisionCode == "") {
+                        this.$toast({
+                            message: '请输入部门编号',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.suffixCode == null || this.assetsForm.suffixCode == "") {
+                        this.$toast({
+                            message: '请输入字母前缀',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(!reg.test(this.assetsForm.suffixCode)) {
+                        this.$toast({
+                            message: '请输入不多于四位字母前缀',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        var _this = this;
+                        this.http.post( this.port.assets.distribute, this.assetsForm,
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: '修改成功',
+                                    duration: 2000
+                                });
+                                setTimeout(function(){
+                                    _this.$router.go(-1);
+                                }, 1000);
+                            } else {
+                                this.canClick = true;
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        },
+                        error => {
+                            this.canClick = true;
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        });
+                    }
+                } else {
+                    this.$toast({
+                        message: '请勿重复提交',
+                        duration: 2000
+                    });
+                }
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .detail {
+        background: #EFEFEF;
+        overflow: hidden;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .left{
+        float:left;
+        margin: 0.15rem;
+    }
+
+    .upload .left {
+        margin: 0.1rem 0.11rem;
+    }
+
+    .right div{
+        line-height: 0.21rem;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+
+    .btn {
+        width: 80%;
+        margin: 0.2rem auto 80px;
+    }
+
+    .allocation {
+        width: 100%;
+        height: 100%;
+    }
+
+    .address_first .current{
+        background:#eee;
+        color: #6f83ff;
+        border-left: 2px solid #6f83ff;
+    }
+
+    .right > ul {
+        margin: 0;
+        padding: 0;
+        overflow: auto;
+        -webkit-transition-duration: 0.4s;
+        box-sizing:border-box;
+        padding: 0.08rem 0.1rem;
+    }
+
+    .right > ul > li {
+        display: inline-block;
+        height: 0.2rem;
+        line-height: 0.2rem;
+        font-size: 0.14rem;
+        color: #ccc;
+        padding: 0 0.12rem;
+        margin: 0.06rem 0.03rem;
+        border: 1px solid #ccc;
+        border-radius: 50px;
+        min-width: 0.3rem;
+        text-align: center;
+    }
+
+    .right > ul > li.add {
+        border: 1px solid #777;
+        color: #777;
+    }
+    
+    .right > ul > li.active {
+        border: 1px solid #2680EB;
+        color: #2680EB;
+    }
+
+    .upload_add {
+        display: inline-block;
+        margin-bottom: 0.2rem;
+    }
+
+    .upload_add_image {
+        padding-top: 0.08rem;
+        margin: 0.15rem 0 0 0.3rem ;
+        width: 1rem;
+        height: 0.9rem;
+        border: 1px dashed rgba(0, 0, 0, .2);
+    }
+
+    .upload_add-image .camera {
+        font-size: 24px;
+    }
+
+    .upload_add_image p {
+        padding: 0;
+        margin: 0;
+        color: #8e8e8e;
+    }
+
+    .right div img.pic {
+        width: 0.8rem;
+        height: 0.8rem;
+        margin: 0.15rem 0 0 0.3rem ;
+    }
+
+    .textColor {
+        margin-top: 0.4rem;
+        color: #8e8e8e;
+        padding: 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .example {
+        color: #8e8e8e;
+        padding: 0.02rem 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .allBtn {
+        width: 80%;
+        margin: 0.18rem auto;
+    }
+</style>
+<style>
+    .detail_head .mint-header-title {
+        font-weight: 600;
+        font-size: 0.15rem;
+    }
+
+    .detail_head .mint-button-text {
+        color: #26a2ff;
+    }
+
+    .detailBox .mint-cell {
+        padding: 0 0 0 0.02rem;
+    }
+    
+    .mint-popup.allocation  {
+        background: #efefef;
+    }
+
+    .mint-msgbox {
+        width: 70%;
+    }
+
+    .mint-cell-wrapper {
+        background-image: none;
+    }
+</style>

+ 372 - 0
lss_vue_wx/src/views/assets/assetsOperation.vue

@@ -0,0 +1,372 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="操作记录">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+            <mt-button slot="right" v-on:click="exportExcel()">导出</mt-button>
+        </mt-header>
+        <div class="detail_body">
+            <mt-navbar v-model="selected" class="tab_head" v-on:click.native="changeTab">
+                <mt-tab-item id="tab1">处置记录</mt-tab-item>
+                <mt-tab-item id="tab2">维护记录</mt-tab-item>
+            </mt-navbar>
+            <mt-tab-container v-model="selected">
+                <mt-tab-container-item id="tab1">
+                    <div class="noList" v-if="disList.length==0">
+                        <img src="../../assets/image/noList.png">
+                    </div>
+                    <ul v-else class="recordBox" v-infinite-scroll="loadMoreDis" infinite-scroll-disabled="loading" infinite-scroll-distance="10">
+                        <li v-for="item in disList" class="one_recordBox detailBox">
+                            <div class="record_head">
+                                <div>{{item.modelNo}}</div>
+                                <span v-if="item.goodState == 0">未用</span>
+                                <span v-if="item.goodState == 1">在用</span>
+                                <span v-if="item.goodState == 3">报废</span>
+                            </div>
+                            <div class="record_body">
+                                <div>处置人:{{item.userName}}</div>
+                                <div>处置时间:{{item.indate}}</div>
+                                <div>操作:{{item.content}}</div>
+                            </div>
+                        </li>
+                        <div class="order" v-if="haveMoreDis">
+                            <span class="line"></span>
+                            <span class="txt">没有更多了</span>
+                            <span class="line"></span>
+                        </div>
+                    </ul>
+                </mt-tab-container-item>
+                <mt-tab-container-item id="tab2">
+                    <div class="noList" v-if="maiList.length==0">
+                        <img src="../../assets/image/noList.png">
+                    </div>
+                    <ul v-else class="recordBox" v-infinite-scroll="loadMoreMai" infinite-scroll-disabled="loading" infinite-scroll-distance="10">
+                        <li v-for="item in maiList" class="one_recordBox detailBox">
+                            <div class="record_head">
+                                {{item.modelNo}}
+                            </div>
+                            <div class="record_body">
+                                <div>维护人:{{item.operator}}</div>
+                                <div>联系方式:{{item.operatorPhone}}</div>
+                                <div>维护厂家:{{item.company}}</div>
+                                <div>联系方式:{{item.companyPhone}}</div>
+                            </div>
+                        </li>
+                        <div class="order" v-if="haveMoreDis">
+                            <span class="line"></span>
+                            <span class="txt">没有更多了</span>
+                            <span class="line"></span>
+                        </div>
+                    </ul>
+                </mt-tab-container-item>
+            </mt-tab-container>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                id: this.$route.params.id,
+                selected: "tab1",
+
+                disList: [],
+                disPageNum: 1,
+                disPages: 1,
+                haveMoreDis: false,
+
+                maiList: [],
+                maiPageNum: 1,
+                maiPages: 1,
+                haveMoreMai: false,
+			}
+		},
+		methods: {
+            // 处置记录
+            getListDis() {
+                this.$indicator.open();
+                this.http.post(this.port.assets.disposalRecord, {
+                    'id': this.id,
+                    'pageNum': this.disPageNum
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.disList = res.data.list;
+                        this.disPages = res.data.pages==0?1:res.data.pages;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            loadMoreDis() {
+                if(this.disPageNum == this.disPages) {
+                    this.haveMoreDis = true;
+                } else if(this.disPageNum < this.disPages) {
+                    this.$indicator.open();
+                    this.http.post(this.port.assets.disposalRecord, {
+                        'id': this.id,
+                        'pageNum': ++this.disPageNum
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.disPages = res.data.pages==0?1:res.data.pages;
+                            if(res.data.list.length != 0) {
+                                for(var i in res.data.list) {
+                                    this.disList.push(res.data.list[i]);
+                                }
+                            }
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            // 维护记录
+            getListMai() {
+                this.$indicator.open();
+                this.http.post(this.port.assets.maintainRecord, {
+                    'id': this.id,
+                    'pageNum': this.maiPageNum
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.maiList = res.data.list;
+                        this.maiPages = res.data.pages==0?1:res.data.pages;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            loadMoreMai() {
+                if(this.maiPageNum == this.maiPages) {
+                    this.haveMoreMai = true;
+                } else if(this.maiPageNum < this.maiPages) {
+                    this.$indicator.open();
+                    this.http.post(this.port.assets.maintainRecord, {
+                        'id': this.id,
+                        'pageNum': ++this.maiPageNum
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.maiPages = res.data.pages==0?1:res.data.pages;
+                            if(res.data.list.length != 0) {
+                                for(var i in res.data.list) {
+                                    this.maiList.push(res.data.list[i]);
+                                }
+                            }
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            changeTab() {
+                if(this.selected == "tab1") {
+                    this.getListDis();
+                } else {
+                    this.getListMai();
+                }
+            },
+
+            // 导出
+            exportExcel() {
+                this.$indicator.open();
+                if(this.selected == "tab1") {
+                    this.http.downloadFile(this.port.assets.exportDis, {
+                        'id': this.id,
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        let url = window.URL.createObjectURL(new Blob([res]))
+                        let link = document.createElement('a')
+                        link.style.display = 'none'
+                        link.href = url
+                        link.setAttribute('download', '操作记录.xlsx')
+                        document.body.appendChild(link)
+                        link.click()
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                } else {
+                    this.http.downloadFile(this.port.assets.exportMain, {
+                        'id': this.id,
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        this.$indicator.close();
+                        let url = window.URL.createObjectURL(new Blob([res]))
+                        let link = document.createElement('a')
+                        link.style.display = 'none'
+                        link.href = url
+                        link.setAttribute('download', '操作记录.xlsx')
+                        document.body.appendChild(link)
+                        link.click()
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getListDis();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.8rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .tab_head {
+        position: fixed;
+        width: 100%;
+        top: 0.4rem;
+        z-index: 110;
+        border-bottom: 1px solid #ddd;
+    }
+
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .recordBox {
+        margin: 0.12rem 0 0 0;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .record_head {
+        color: #5FA1F0;
+        padding: 0 0 0.1rem 0;
+        border-bottom: 1px solid #ccc;
+    }
+
+    .record_head > div {
+        width: 85%;
+        display: inline-block;
+        vertical-align: middle;
+    }
+
+    .record_head span {
+        color: #939393;
+        float: right;
+        vertical-align: middle;
+    }
+
+    .record_body {
+        color: #777;
+        font-size: 0.12rem;
+        line-height: 0.23rem;
+        margin-top: 0.12rem;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .order {
+        height: 0.6rem;
+        line-height: 0.6rem;
+        text-align: center;
+    }
+
+    .order .line {
+        display: inline-block;
+        width: 1.2rem;
+        border-top: 1px solid #ccc ;
+        vertical-align: middle;
+    }
+
+    .order .txt {
+        color: #ccc;
+        font-size: 0.13rem;
+        vertical-align: middle;
+    }
+</style>

+ 544 - 0
lss_vue_wx/src/views/assets/assetsRegister.vue

@@ -0,0 +1,544 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="资产登记">
+            <router-link to="/assets" slot="left">
+                <mt-button icon="back"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="detailBox">
+                <mt-field label="物品名称" placeholder="请输入物品名称" v-model="assetsForm.name"></mt-field>
+                <mt-field label="型号" placeholder="请输入物品型号" v-model="assetsForm.modelNumber"></mt-field>
+                <mt-field label="数量" placeholder="请输入数量" type="number" v-model="assetsForm.number"></mt-field>
+                <mt-field label="单位" placeholder="请输入单位" v-model="assetsForm.unit"></mt-field>
+                <div class="upload">
+                    <div class="left">物品图片</div>
+                    <div class="right upload_add" v-on:click="choosePic()">
+                        <div v-if="assetsForm.pic == ''" class="upload_add_image" align="center">
+                            <img src="../../assets/image/camera.png" class="camera">
+                            <p class="font13">添加图片</p>
+                        </div>
+                        <div v-else class="right">
+                            <img class="pic" :src="assetsForm.pic">
+                        </div>
+                    </div>
+                    <input @change="fileChange($event)" type="file" accept="image/*" id="upload_file" style="display: none"/>
+                </div>
+                <mt-field label="地址" placeholder="请输入地址" v-model="assetsForm.address"></mt-field>
+            </div>
+            <div class="detailBox">
+                <mt-field label="生产厂家" placeholder="请输入生产厂家" v-model="assetsForm.factory"></mt-field>
+                <mt-field label="服务期限" placeholder="请输入服务期限" v-model="assetsForm.serviceLife"></mt-field>
+                <mt-field label="下次维护日期" placeholder="请选择下次维护日期" type="date" v-model="assetsForm.nextIndate"></mt-field>
+            </div>
+            <div class="detailBox">
+                <div class="left_tag">所属分类</div>
+                <div class="right">
+                    <ul class="address_first">
+                        <li v-for="(item,index) in labels" :id="'btn'+item.id" v-bind:class="{'active':index==0}" v-on:click="chooseTag(item.id)">
+                            {{item.name}}
+                            <img v-if="index > 7" v-on:click="delTag(item.id)" src="../../assets/image/del.png">
+                        </li>
+                        <li v-on:click="addNewTag()" class="add">+</li>
+                    </ul>
+                </div>
+            </div>
+            <div class="btn">
+                <mt-button size="large" type="primary" v-on:click.native="toNext()">下一步</mt-button>
+            </div>
+        </div>
+        <mt-popup v-model="popupVisible" position="right" class="allocation">
+            <mt-header class="detail_head" fixed title="分配资产">
+                <router-link to="" slot="left">
+                    <mt-button icon="back" v-on:click="toPrev()"></mt-button>
+                </router-link>
+            </mt-header>
+            <div class="detailBox textColor">
+                资产编号构成:部门编号 + 字母前缀 + 数字序号,字母前缀最多四位,数字序号由系统排序生成
+            </div>
+            <div class="detailBox">
+                <mt-field label="部门编号" placeholder="请输入部门编号" v-model="assetsForm.deptStr"></mt-field>
+                <mt-field label="字母前缀" placeholder="请输入字母前缀" v-model="assetsForm.goodStr"></mt-field>
+            </div>
+            <div class="example">示例:Lishui-LXDN0001、Lishui-LXDN0002</div>
+            <mt-button class="allBtn" size="large" type="primary" v-on:click.native="submit()">确定</mt-button>
+            <mt-button class="allBtn" size="large" v-on:click.native="jumpBack()">取消</mt-button>
+        </mt-popup>
+    </div>
+</template>
+
+<script>
+    import { MessageBox } from 'mint-ui';
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                assetsForm: {
+                    userId: JSON.parse(sessionStorage.getItem("user")).id,
+                    name: '',
+                    modelNumber: '',
+                    number: '',
+                    unit: '',
+                    address: '',
+                    factory: '',
+                    serviceLife: '',
+                    nextIndate: '',
+                    pic: '',
+                    tagId: 0,
+                    deptStr: '',
+                    goodStr: '',
+                },
+                popupVisible: false,
+                labels: [],
+                tagId: 0,
+                limit: 1,
+                canClick: true,
+			}
+		},
+		methods: {
+            // 标签列表
+			getLabels() {
+                this.http.post(this.port.label.list, {} , 
+                res => {
+                    if (res.code == "ok") {
+                        this.tagId = res.data[0].id;
+                        this.labels = res.data;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            addNewTag() {
+                MessageBox({
+                    $type:'prompt',
+                    title:'',
+                    message:'请输入资产类型名称',
+                    closeOnClickModal:false,
+                    showCancelButton:true,
+                    inputValidator:function(v){
+                        if (v === null) {
+                           return true;
+                        }
+                        if (v != ""){
+                            return true
+                        } else {
+                            return false
+                        }
+                    },
+                    inputErrorMessage:'请输入资产类型名称',
+                    showInput:true
+                }).then(({ value, action }) => {
+                    if(value == null) {
+                        this.$toast({
+                            message: '创建失败',
+                            duration: 2000
+                        });
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        this.http.post(this.port.label.add, {
+                            'name': value,
+                        } , 
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.getLabels();
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                }).catch(() => {
+                });
+            },
+
+            chooseTag(id) {
+                $("#btn"+id).addClass("active").siblings().removeClass("active");
+                this.assetsForm.tagId = id;
+            },
+
+            delTag(id) {
+                MessageBox.confirm('', { 
+                    message: '是否删除该分类?', 
+                        title: '', 
+                        confirmButtonText: '确定', 
+                        cancelButtonText: '取消' 
+                 }).then(action => { 
+                    if (action == 'confirm') {     //确认的回调
+                        this.http.post(this.port.label.del, {
+                            'id': id
+                        } , 
+                        res => {
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: "删除成功",
+                                    duration: 2000
+                                });
+                                this.getLabels();
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                 }).catch(err => { 
+                 });
+            },
+
+            // 图片上传
+            choosePic() {
+                document.getElementById('upload_file').click();
+            },
+
+            fileChange(el) {
+                if (!el.target.files[0].size) return;
+                this.fileAdd(el.target.files[0]);
+                el.target.value = ''
+            },
+
+            fileAdd(file) {
+                //判断是否为图片文件
+                if (file.type.indexOf('image') == -1) {
+                    this.$toast({
+                        message: '请选择图片文件',
+                        duration: 2000
+                    });
+                } else {
+                    var form = new FormData();
+                    form.append("file", file);
+                    this.$indicator.open();
+                    this.http.uploadFile( this.port.assets.upload, form,
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.$toast({
+                                message: '上传成功',
+                                duration: 2000
+                            });
+                            this.assetsForm.pic = res.data;
+                            document.getElementById('upload_file').value = "";
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    },
+                    error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    });
+                }
+            },
+
+            // 创建
+            submit() {
+                if(this.canClick) {
+                    this.canClick = false;
+                    var reg = /^^[A-Za-z]{1,4}$/;
+                    if(this.assetsForm.name == null || this.assetsForm.name == "") {
+                        this.$toast({
+                            message: '请输入物品名称',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.number == null || this.assetsForm.number == "") {
+                        this.$toast({
+                            message: '请输入物品数量',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.unit == null || this.assetsForm.unit == "") {
+                        this.$toast({
+                            message: '请输入物品单位',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.deptStr == null || this.assetsForm.deptStr == "") {
+                        this.$toast({
+                            message: '请输入部门编号',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(this.assetsForm.goodStr == null || this.assetsForm.goodStr == "") {
+                        this.$toast({
+                            message: '请输入字母前缀',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else if(!reg.test(this.assetsForm.goodStr)) {
+                        this.$toast({
+                            message: '请输入不多于四位字母前缀',
+                            duration: 2000
+                        });
+                        this.canClick = true;
+                        return false;
+                    } else {
+                        this.$indicator.open();
+                        var _this = this;
+                        this.http.post( this.port.assets.add, this.assetsForm,
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: '创建成功',
+                                    duration: 2000
+                                });
+                                setTimeout(function(){
+                                    _this.$router.push({ path: '/assets' });
+                                }, 1000);
+                            } else {
+                                this.canClick = true;
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        },
+                        error => {
+                            this.canClick = true;
+                            this.$indicator.close();
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        });
+                    }
+                } else {
+                    this.$toast({
+                        message: '请勿重复提交',
+                        duration: 2000
+                    });
+                }
+            },
+
+            // 跳转
+            toNext() {
+                this.popupVisible = true;
+            },
+
+            toPrev() {
+                this.popupVisible = false;
+            },
+
+            jumpBack() {
+                this.$router.push("/assets");
+                // this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getLabels();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .left{
+        float:left;
+        /* margin: 0.15rem; */
+        padding: 0.15rem 0 0.1rem 0;
+    }
+
+    .left_tag {
+        padding: 0.15rem 0.15rem 0.1rem 0.15rem;
+    }
+
+    .upload .left {
+        margin: 0.1rem 0.11rem;
+    }
+
+    .right div{
+        line-height: 0.21rem;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+
+    .btn {
+        width: 80%;
+        margin: 0.2rem auto 80px;
+    }
+
+    .allocation {
+        width: 100%;
+        height: 100%;
+    }
+
+    .address_first .current{
+        background:#eee;
+        color: #6f83ff;
+        border-left: 2px solid #6f83ff;
+    }
+
+    .right > ul {
+        margin: 0;
+        padding: 0;
+        overflow: auto;
+        -webkit-transition-duration: 0.4s;
+        box-sizing:border-box;
+        padding: 0.08rem 0.1rem;
+    }
+
+    .right > ul > li {
+        display: inline-block;
+        height: 0.2rem;
+        line-height: 0.22rem;
+        font-size: 0.14rem;
+        color: #ccc;
+        padding: 0.02rem 0.12rem;
+        margin: 0.06rem 0.07rem;
+        border: 1px solid #ccc;
+        border-radius: 50px;
+        min-width: 0.3rem;
+        text-align: center;
+        position: relative;
+    }
+
+    .right > ul > li img {
+        position: absolute;
+        top: -0.05rem;
+        right: -0.08rem;
+        width: 0.18rem;
+        height: 0.18rem;
+    }
+
+    .right > ul > li.add {
+        border: 1px solid #777;
+        color: #777;
+    }
+    
+    .right > ul > li.active {
+        border: 1px solid #2680EB;
+        color: #2680EB;
+    }
+
+    .upload_add {
+        display: inline-block;
+        margin-bottom: 0.2rem;
+    }
+
+    .upload_add_image {
+        padding-top: 0.08rem;
+        margin: 0.15rem 0 0 0.3rem ;
+        width: 1rem;
+        height: 0.9rem;
+        border: 1px dashed rgba(0, 0, 0, .2);
+    }
+
+    .upload_add-image .camera {
+        font-size: 24px;
+    }
+
+    .upload_add_image p {
+        padding: 0;
+        margin: 0;
+        color: #8e8e8e;
+    }
+
+    .right div img.pic {
+        width: 0.8rem;
+        height: 0.8rem;
+        margin: 0.15rem 0 0 0.3rem ;
+    }
+
+    .textColor {
+        margin-top: 0.4rem;
+        color: #8e8e8e;
+        padding: 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .example {
+        color: #8e8e8e;
+        padding: 0.02rem 0.12rem;
+        font-size: 0.12rem;
+    }
+
+    .allBtn {
+        width: 80%;
+        margin: 0.18rem auto;
+    }
+</style>
+<style>
+    .detail_head .mint-header-title {
+        font-weight: 600;
+        font-size: 0.15rem;
+    }
+
+    .detail_head .mint-button-text {
+        color: #26a2ff;
+    }
+
+    .detailBox .mint-cell {
+        padding: 0 0 0 0.02rem;
+    }
+    
+    .mint-popup.allocation  {
+        background: #efefef;
+    }
+
+    .mint-msgbox {
+        width: 70%;
+    }
+
+    .mint-cell-wrapper {
+        background-image: none;
+    }
+</style>

+ 741 - 0
lss_vue_wx/src/views/data/data.vue

@@ -0,0 +1,741 @@
+<template>
+	<div class="data">
+        <mt-navbar v-model="selected" class="tab_head" v-on:click.native="changeTab">
+            <mt-tab-item id="tab1">数据存储监控</mt-tab-item>
+            <mt-tab-item id="tab2">云平台监控</mt-tab-item>
+            <mt-tab-item id="tab3">数据交换</mt-tab-item>
+        </mt-navbar>
+        <mt-tab-container v-model="selected">
+            <mt-tab-container-item id="tab1">
+                <div class="headMsg">
+                    <div>中心数据库总量:{{tab1_head1}}</div>
+                    <div>五大数据库总量:{{tab1_head2}}</div>
+                </div>
+                <div id="tab1_chart1" class="echarts"></div>
+                <div class="echartsBox">
+                    <table class="tab1_table">
+                        <thead><tr><td>库名</td><td>数据量(GB)</td><td>占比(%)</td></tr></thead>
+                        <tbody>
+                            <tr><td>入口库</td><td>335</td><td>13.08%</td></tr>
+                            <tr><td>信用库</td><td>310</td><td>20.1%</td></tr>
+                            <tr><td>地理库</td><td>234</td><td>9.13%</td></tr>
+                            <tr><td>法人库</td><td>135</td><td>5.27%</td></tr>
+                            <tr><td>电子证据</td><td>1548</td><td>60.42%</td></tr>
+                        </tbody>
+                    </table>
+                </div>
+                <div id="tab1_chart2" class="echarts echartsBox"></div>
+                <div id="tab1_chart3" class="echarts echartsBox bottom"></div>
+            </mt-tab-container-item>
+            <mt-tab-container-item id="tab2">
+                <div class="headMsg">
+                    <div>总用户数:{{tab2_head1}}</div>
+                    <div>在线用户数:{{tab2_head1}}</div>
+                    <div>上云系统总数量:{{tab2_head1}}</div>
+                </div>
+                <div id="tab2_chart1" class="echarts echartsBox"></div>
+                <div id="tab2_chart2" class="echarts echartsBox"></div>
+                <div id="tab2_chart3" class="echarts echartsBox"></div>
+                <div class="echartsBox bottom">
+                    <table class="tab1_table">
+                        <thead><tr><td>各委办局</td><td>接入效率</td><td>交换效率</td></tr></thead>
+                        <tbody>
+                            <tr><td>交通</td><td>335</td><td>13.08%</td></tr>
+                            <tr><td>公安</td><td>310</td><td>20.1%</td></tr>
+                            <tr><td>卫计</td><td>234</td><td>9.13%</td></tr>
+                            <tr><td>国土</td><td>135</td><td>5.27%</td></tr>
+                            <tr><td>城管</td><td>1548</td><td>60.42%</td></tr>
+                            <tr><td>安监</td><td>1548</td><td>60.42%</td></tr>
+                            <tr><td>房产局</td><td>1548</td><td>60.42%</td></tr>
+                            <tr><td>旅游</td><td>1548</td><td>60.42%</td></tr>
+                            <tr><td>水务</td><td>1548</td><td>60.42%</td></tr>
+                            <tr><td>法院</td><td>1548</td><td>60.42%</td></tr>
+                            <tr><td>环保</td><td>1548</td><td>60.42%</td></tr>
+                            <tr><td>财政</td><td>1548</td><td>60.42%</td></tr>
+                        </tbody>
+                    </table>
+                </div>
+            </mt-tab-container-item>
+            <mt-tab-container-item id="tab3">
+                <div class="headMsg">
+                    <div>当日数据交换量:{{tab3_head1}}</div>
+                    <div>数据交换次数:{{tab3_head2}}</div>
+                </div>
+                <div id="tab3_chart1" class="echarts echartsBox"></div>
+            </mt-tab-container-item>
+        </mt-tab-container>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                selected: "tab1",
+                tab1_head1: "423GB",
+                tab1_head2: "1168GB",
+                tab2_head1: "1523638",
+                tab2_head2: "35216",
+                tab2_head3: "102",
+                tab3_head1: "114388",
+                tab3_head2: "35216",
+                list: [],
+                labels: [],
+                pageNum: 1,
+                tagId: 0,
+                popupVisible: false,
+                department: ['交通', '公安', '卫计', '国土', '城管', '安监', '房产', '教育', '旅游', '水务', '法院', '环保', '财政'],
+			}
+		},
+		methods: {
+            // 数据存储监控
+            set_tab1_chart1(){
+                var myChart = this.echarts.init(document.getElementById('tab1_chart1'));
+                var option = {
+                    backgroundColor: '#fff',
+                    title : {
+                        text: '五大库数据储存量',
+                        x:'left'
+                    },
+                    tooltip: {
+                        trigger: 'item',
+                        formatter: "{a} <br/>{b}: {c} ({d}%)",
+                        color:'#000',
+                        textStyle:{
+                            color:"#fff",
+                        }
+                    },
+                    legend: {
+                        orient: 'vertical',
+                        x: 'right',
+                        data:['入口库','信用库','地理库','法人库','电子证据'],
+                        textStyle:{
+                            color:'#888',
+                            fontSize:12
+                        }
+                    },
+                    series: [
+                        {
+                            name:'数据储存量',
+                            type:'pie',
+                            radius: ['35%', '55%'],
+                            avoidLabelOverlap: false,
+                            color:['#F68077','#66B1FD','#0BC3FF','#FCF255','#90FB4C'],
+                            label: {
+                                normal: {  //正常的样式
+                                    show: true,
+                                    position: 'left'
+                                },
+                                emphasis: { //选中时候的样式
+                                    show: true,
+                                    textStyle: {
+                                        fontSize: '20',
+                                        fontWeight: 'bold'
+                                    }
+                                }
+                            },  //提示文字
+                            labelLine: {
+                                normal: {
+                                    show: false
+                                }
+                            },
+                            data:[
+                                {value:335, name:'入口库'},
+                                {value:310, name:'信用库'},
+                                {value:234, name:'地理库'},
+                                {value:135, name:'法人库'},
+                                {value:1548, name:'电子证据'}
+                            ]
+                        }
+                    ]
+                };
+                myChart.setOption(option);
+            },
+
+            set_tab1_chart2(){
+                var myChart = this.echarts.init(document.getElementById('tab1_chart2'));
+                var option = {
+                    backgroundColor: '#fff',
+                    title : {
+                        text: '五大库使用情况',
+                        x:'left',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'cross',
+                            crossStyle: {
+                                color: '#999'
+                            }
+                        }
+                    },
+                    xAxis: {
+                        axisTick:{
+                            show:false
+                        },
+                        axisLine: {
+                            show: false,
+                        },
+                        axisLabel: {  
+                            interval:0,  
+                            rotate:40  
+                        },
+                        type: 'category',
+                        data: ['交通', '公安', '卫计', '国土', '城管', '安监', '房产局', '教育', '旅游', '水务', '法院', '环保', '财政']
+                    },
+                    yAxis: {
+                        axisTick:{
+                            show:false
+                        },
+                        axisLine: {
+                            show: false,
+                        },
+                        type: 'value',
+                        name: '单位:%',
+                    },
+                    series: [{
+                        data: [12, 20, 15, 80, 70, 11, 30, 80, 30, 80, 20, 50, 60],
+                        type: 'bar',
+                        barWidth : 10,
+                        itemStyle:{
+                            normal:{
+                                color: '#FF5B29',
+                            }
+                        },
+                    }]
+                };
+                myChart.setOption(option);
+            },
+
+            set_tab1_chart3(){
+                var myChart = this.echarts.init(document.getElementById('tab1_chart3'));
+                var option = {
+                    backgroundColor: '#fff',
+                    title : {
+                        text: '中心库数据存储情况',
+                        x:'left',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'cross',
+                            crossStyle: {
+                                color: '#999'
+                            }
+                        }
+                    },
+                    xAxis: {
+                        axisTick:{
+                            show:false
+                        },
+                        axisLine: {
+                            show: false,
+                        },
+                        axisLabel: {  
+                            interval:0,  
+                            rotate:40  
+                        },
+                        type: 'category',
+                        data: ['交通', '公安', '卫计', '国土', '城管', '安监', '房产局', '教育', '旅游', '水务', '法院', '环保', '财政']
+                    },
+                    yAxis: {
+                        axisTick:{
+                            show:false
+                        },
+                        axisLine: {
+                            show: false,
+                        },
+                        type: 'value',
+                        name: '单位:%',
+                    },
+                    series: [{
+                        data: [12, 20, 15, 80, 70, 11, 30, 80, 30, 80, 20, 50, 60],
+                        type: 'bar',
+                        barWidth : 10,
+                        itemStyle:{
+                            normal:{
+                                color: '#FF5B29',
+                            }
+                        },
+                    }]
+                };
+                myChart.setOption(option);
+            },
+
+            // 云平台监控
+            set_tab2_chart1(){
+                var myChart = this.echarts.init(document.getElementById('tab2_chart1'));
+                var option = {
+                    backgroundColor: '#fff',
+                    title : {
+                        text: '上云系统数量分析',
+                        x:'left',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'cross',
+                            crossStyle: {
+                                color: '#999'
+                            }
+                        }
+                    },
+                    xAxis: {
+                        axisTick:{
+                            show:false
+                        },
+                        axisLine: {
+                            show: false,
+                        },
+                        axisLabel: {  
+                            interval:0,  
+                            rotate:40  
+                        },
+                        type: 'category',
+                        data: ['交通', '公安', '卫计', '国土', '城管', '安监', '房产局', '教育', '旅游', '水务', '法院', '环保', '财政']
+                    },
+                    yAxis: {
+                        axisTick:{
+                            show:false
+                        },
+                        axisLine: {
+                            show: false,
+                        },
+                        type: 'value',
+                        name: '单位:%',
+                    },
+                    series: [{
+                        data: [12, 20, 15, 80, 70, 11, 30, 80, 30, 80, 20, 50, 60],
+                        type: 'bar',
+                        barWidth : 10,
+                        itemStyle:{
+                            normal:{
+                                color: '#FF5B29',
+                            }
+                        },
+                    }]
+                };
+                myChart.setOption(option);
+            },
+
+            set_tab2_chart2(){
+                var myChart = this.echarts.init(document.getElementById('tab2_chart2')) , 
+                    _this = this;
+                var option = {
+                    backgroundColor: '#fff',
+                    title : {
+                        text: '数据接入效率',
+                        x:'left',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'cross',
+                            crossStyle: {
+                                color: '#999'
+                            }
+                        }
+                    },
+                    radar: [{
+                        indicator: (function (){
+                            var res = [];
+                            for(var i in _this.department) {
+                                res.push({text: _this.department[i] , max:100});
+                            }
+                            console.log(res)
+                            return res;
+                        })(),
+                        radius: 80
+                    }],
+                    series: [{
+                        type: 'radar',
+                        itemStyle: {normal: {areaStyle: {type: 'default'}}},
+                        data: [
+                            {
+                                name: '接入效率',
+                                value: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 75.6, 82.2, 48.7, 18.8, 6.0, 2.3],
+                                itemStyle: {
+                                    normal: {
+                                        color: 'rgba(84,196,168,0.7)',
+                                        lineStyle: {
+                                            color: '#fff',
+                                        },
+                                    },
+                                },
+                            }
+                        ]
+                    }]
+                };
+                myChart.setOption(option);
+            },
+
+            set_tab2_chart3(){
+                var myChart = this.echarts.init(document.getElementById('tab2_chart3')) , 
+                    _this = this;
+                var option = {
+                    backgroundColor: '#fff',
+                    title : {
+                        text: '数据交换效率',
+                        x:'left',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'cross',
+                            crossStyle: {
+                                color: '#999'
+                            }
+                        }
+                    },
+                    radar: [{
+                        indicator: (function (){
+                            var res = [];
+                            for(var i in _this.department) {
+                                res.push({text: _this.department[i] , max:100});
+                            }
+                            console.log(res)
+                            return res;
+                        })(),
+                        radius: 80
+                    }],
+                    series: [{
+                        type: 'radar',
+                        itemStyle: {normal: {areaStyle: {type: 'default'}}},
+                        data: [
+                            {
+                                name:'交换效率',
+                                value:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 35.6, 62.2, 32.6, 20.0, 6.4, 3.3],
+                                itemStyle: {
+                                    normal: {
+                                        color: 'rgba(252,202,94,0.7)',
+                                        lineStyle: {
+                                            color: '#fff',
+                                        },
+                                    },
+                                },
+                            }
+                        ]
+                    }]
+                };
+                myChart.setOption(option);
+            },
+
+            // 数据交换
+            set_tab3_chart1(){
+                // var uploadedDataURL = "/asset/get/s/data-1559121268278-ozjd-lXoz.png";
+                // var uploadedDataURL = "/asset/get/s/data-1559121263841-UC5w7mTJ9.png";
+                // var uploadedDataURL = "/asset/get/s/data-1559121259198-sxyPSimU9.png";
+                // var uploadedDataURL = "/asset/get/s/data-1559121254241-xj5JAIBzC.png";
+                // var uploadedDataURL = "/asset/get/s/data-1559121249274-QxHDAdQGy.png";
+                var  colorList=['#afa3f5', '#00d488', '#3feed4', '#3bafff', '#f1bb4c','#afa3f5', '#00d488', '#3feed4', '#3bafff', '#f1bb4c','#afa3f5', '#00d488', '#3feed4', '#3bafff', '#f1bb4c', "rgba(250,250,250,0.5)"];
+                var sportsIcon = {
+                    'a':'../../assets/image/userHead.jpg',
+                    'b':'../../assets/image/userHead.jpg',
+                    'c':'../../assets/image/userHead.jpg',
+                    'd':'../../assets/image/userHead.jpg',
+                    'e':'../../assets/image/userHead.jpg',
+                };
+                var myChart = this.echarts.init(document.getElementById('tab3_chart1'));
+                var option = {
+                    backgroundColor: '#fff',
+                    title: {
+                        text: '80',
+                        subtext: '总量',
+                        x: 'center',
+                        y: 'center',
+                        textStyle: {
+                            fontSize:20,
+                            fontWeight:'normal',
+                            color: ['#333']
+                        },
+                        subtextStyle: {
+                            color: '#666',
+                            fontSize: 12
+                        },
+                    },
+                    grid: {
+                        bottom: 150,
+                        left: 0,
+                        right: '10%'
+                    },
+                    legend: {
+                        show:false,
+                        orient: 'vertical',
+                        top: "middle",
+                        right: "5%",
+                        textStyle: {
+                            color: '#f2f2f2',
+                            fontSize: 13,
+
+                        },
+                        icon: 'roundRect'
+                    },
+                    series: [
+                        // 主要展示层的
+                        {
+                            radius: ['25%', '33%'],
+                            center: ['50%', '50%'],
+                            type: 'pie',
+                            itemStyle: {
+                                normal: {
+                                    color: function(params) {
+                                        return colorList[params.dataIndex]
+                                    }
+                                }
+                            },
+                            labelLine: {
+                                normal: {
+                                    show: true,
+                                    length: 15,
+                                    length2: 120,
+                                    lineStyle: {
+                                        color: '#d3d3d3'
+                                    },
+                                    align: 'right'
+                                },
+                                color: "#000",
+                                emphasis: {
+                                    show: true
+                                }
+                            },
+                            label:{
+                                normal:{
+                                    formatter: function(params){
+                                        var str = '';
+                                        console.log(params)
+                                        switch(params.name){
+                                            case '交通局':str = '{a|}\n{nameStyle|交通局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '公安局':str = '{b|}\n{nameStyle|公安局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '卫计局':str = '{c|}\n{nameStyle|卫计局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '国土局':str = '{d|}\n{nameStyle|国土局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '城管':str = '{a|}\n{nameStyle|城管 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '安监局':str = '{e|}\n{nameStyle|安监局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '房产局':str = '{a|}\n{nameStyle|房产局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '教育局':str = '{e|}\n{nameStyle|教育局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '旅游局':str = '{a|}\n{nameStyle|旅游局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '水务局':str = '{e|}\n{nameStyle|水务局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '法院':str = '{a|}\n{nameStyle|法院 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '环保局':str = '{e|}\n{nameStyle|环保局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                            case '财政局':str = '{e|}\n{nameStyle|财政局 }'+'{rate|'+params.value+'%}\n' + '{rate|'+params.data.value1+'}';break;
+                                        }
+                                        return str
+                                    },
+                                    padding: [0, -110],
+                                    height: 165,
+                                    rich: {
+                                        a: {
+                                            width:24,
+                                            height:50,
+                                            lineHeight: 50,
+                                            backgroundColor: {
+                                                // image: sportsIcon.e
+                                            },
+                                            align: 'left'
+                                        },
+                                        b: {
+                                            width:24,
+                                            height:50,
+                                            lineHeight: 50,
+                                            backgroundColor: {
+                                                // image: sportsIcon.d
+                                            },
+                                            align: 'left'
+                                        },
+                                        c: {
+                                            width:24,
+                                            height:50,
+                                            lineHeight: 50,
+                                            backgroundColor: {
+                                                // image: sportsIcon.c
+                                            },
+                                            align: 'left'
+                                        },
+                                        d: {
+                                            width:24,
+                                            height:50,
+                                            lineHeight: 50,
+                                            backgroundColor: {
+                                                // image: sportsIcon.b
+                                            },
+                                            align: 'left'
+                                        },
+                                        e: {
+                                            width:24,
+                                            height:50,
+                                            lineHeight: 50,
+                                            backgroundColor: {
+                                                // image: sportsIcon.a
+                                            },
+                                            align: 'left'
+                                        },
+                                        nameStyle: {
+                                            fontSize: 14,
+                                            color: "#555",
+                                            align: 'left'
+                                        },
+                                        rate: {
+                                            fontSize: 12,
+                                            color: "#1ab4b8",
+                                            align: 'left'
+                                        }
+                                    }
+                                }
+                            },
+                            data: [
+                                {value:17, name:'交通局',value1:0,},
+                                {value:23, name:'公安局',value1:10,},
+                                {value:27, name:'卫计局',value1:20,},
+                                {value:33, name:'国土局',value1:30,},
+                                {value:20, name:'安监局',value1:50,},
+                                {value:39, name:'房产局',value1:60,},
+                                {value:29, name:'教育局',value1:70,},
+                                {value:19, name:'旅游局',value1:80,},
+                                {value:39, name:'水务局',value1:90,},
+                                {value:29, name:'法院',value1:100,},
+                                {value:80, name:'城管',value1:110,},
+                                {value:49, name:'环保局',value1:110,},
+                                {value:10, name:'财政局',value1:120,},
+                            ],
+                        },
+                        // 边框的设置
+                        {
+                            radius: ['40%', '47%'],
+                            center: ['50%', '50%'],
+                            type: 'pie',
+                            label: {
+                                normal: {
+                                    show: false
+                                },
+                                emphasis: {
+                                    show: false
+                                }
+                            },
+                            labelLine: {
+                                normal: {
+                                    show: false
+                                },
+                                emphasis: {
+                                    show: false
+                                }
+                            },
+                            animation: false,
+                            tooltip: {
+                                show: false
+                            },
+                            itemStyle: {
+                                normal: {
+                                    color:'rgba(250,250,250,0.5)'
+                                }
+                            },
+                            data: [{
+                                value: 1,
+                            }],
+                        }
+                    ]
+                };
+                myChart.setOption(option);
+            },
+
+            changeTab() {
+                if(this.selected == 'tab1') {
+                    this.set_tab1_chart1();
+                    this.set_tab1_chart2();
+                    this.set_tab1_chart3();
+                } else if(this.selected == 'tab2') {
+                    this.set_tab2_chart1();
+                    this.set_tab2_chart2();
+                    this.set_tab2_chart3();
+                } else if(this.selected == 'tab3') {
+                    this.set_tab3_chart1();
+                }
+            }
+        },
+        created() {
+        },
+		mounted() {
+            // 数据存储监控
+            this.set_tab1_chart1();
+            this.set_tab1_chart2();
+            this.set_tab1_chart3();
+		}
+	}
+
+</script>
+
+<style scoped>
+    .tab_head {
+        position: fixed;
+        z-index: 105;
+        width: 100%;
+        top: 0;
+        
+    }
+
+    .mint-tab-container {
+        /* height: calc(100% - 46px); */
+        margin-top: 46px!important;
+        margin-bottom: 0.45rem;
+        overflow-y: auto;
+        background: #efefef;
+    }
+
+    .data {
+        background: #EFEFEF;
+    }
+
+    .headMsg {
+        background: #fff;
+        margin: 0.02rem 0 0.05rem 0;
+        padding: 0.1rem 0.2rem;
+        font-size: 0.15rem;
+    }
+
+    .headMsg {
+        line-height: 0.25rem;
+    }
+
+    .echarts {
+        width: 100%;
+        height: 3rem;
+        background: #fff;
+        padding: 0.05rem;
+        box-sizing:border-box;
+    }
+
+    .echartsBox {
+        margin-bottom: 0.11rem;
+    }
+
+    .tab1_table {
+        width: 100%;
+        border-collapse:collapse;
+        border-spacing:1;
+        border-spacing:0;
+    }
+
+    .tab1_table thead {
+        background: #F8F8F8;
+    }
+
+    .tab1_table tbody {
+        background: #fff;
+    }
+
+    .tab1_table tr td {
+        line-height: 0.4rem;
+        padding: 0 0.15rem;
+    }
+
+    .tab1_table tr td:nth-child(1) {
+        width: 30%;
+    }
+
+    .bottom {
+        margin-bottom: 0.5rem;
+    }
+</style>
+<style>
+    .tab_head .mint-tab-item-label {
+        font-size: 0.14rem;
+    }
+</style>

+ 136 - 0
lss_vue_wx/src/views/my/my.vue

@@ -0,0 +1,136 @@
+<template>
+	<div class="my">
+        <div class="mybox userInfo">
+            <div class="left">
+                <img src="../../assets/image/userHead.png">
+            </div>
+            <div class="right">
+                <div>
+                    <span class="name">{{user.name}}</span>
+                    <span class="phone">{{user.phone}}</span>
+                </div>
+                <div class="department">
+                    {{user.deptName}}
+                </div>
+            </div>
+        </div>
+        <div class="mybox">
+            <mt-cell title="我的消息" is-link v-on:click.native="jumpTo(1)"><mt-badge v-if="newNum!=0" size="small" type="error">{{newNum}}</mt-badge><img slot="icon" src="../../assets/image/my_message.png" width="24" height="24"></mt-cell>
+            <mt-cell title="我的资产" is-link v-on:click.native="jumpTo(2)"><img slot="icon" src="../../assets/image/my_assets.png" width="24" height="24"></mt-cell>
+            <mt-cell v-if="user.roles[0].rolename != '部门领导'" title="我的评分" is-link v-on:click.native="jumpTo(3)"><img slot="icon" src="../../assets/image/my_score.png" width="24" height="24"></mt-cell>
+            <mt-cell v-if="user.roles[0].rolename != '部门领导'" title="我的建议" is-link v-on:click.native="jumpTo(4)"><img slot="icon" src="../../assets/image/my_sug.png" width="24" height="24"></mt-cell>
+        </div>
+        <div class="mybox">
+            <mt-cell title="通讯录" is-link v-on:click.native="jumpTo(5)"><img slot="icon" src="../../assets/image/my_com.png" width="24" height="24"></mt-cell>
+            <mt-cell title="管理制度" is-link v-on:click.native="jumpTo(6)"><img slot="icon" src="../../assets/image/my_sys.png" width="24" height="24"></mt-cell>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                power: sessionStorage.getItem("power"),
+                keyWord: "",
+                list: [],
+                labels: [],
+                pageNum: 1,
+                tagId: 0,
+                popupVisible: false,
+                newNum: sessionStorage.noRead,
+			}
+		},
+		methods: {
+            jumpTo(type) {
+                switch(type){
+                    case 1:
+                        this.$router.push("/myMessage");
+                        break;
+                    case 2:
+                        this.$router.push("/myAssets");
+                        break;
+                    case 3:
+                        this.$router.push("/myScore");
+                        break;
+                    case 4:
+                        this.$router.push("/mySuggest");
+                        break;
+                    case 5:
+                        this.$router.push("/myAddress");
+                        break;
+                    case 6:
+                        this.$router.push("/myInstitution");
+                        break;
+                    default:
+                        return false
+                        break;
+                }
+            }
+        },
+        created() {
+        },
+		mounted() {
+		}
+	}
+
+</script>
+
+<style scoped>
+    .my {
+        background: #EFEFEF;
+    }
+
+    .mybox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .userInfo {
+        padding: 0.22rem 0.2rem;
+    }
+
+    .left{
+        float:left;
+        margin-right: 0.15rem;
+    }
+
+    .left img {
+        width: 0.6rem;
+        height: 0.6rem;
+        border-radius: 50%;
+    }
+
+    .right div{
+        line-height: 0.3rem;
+    }
+
+    span.name {
+        font-size: 0.16rem;
+        font-weight: 600;
+        margin: 0 0.15rem 0 0;
+    }
+    
+    span.phone {
+        font-size: 0.13rem;
+        color: #9E9E9E;
+    }
+
+    div.department {
+        font-size: 0.13rem;
+        color: #9E9E9E;
+    }
+
+    span.arrow {
+        float: right;
+    }
+
+    span.arrow img {
+        transform: rotate(-90deg);
+        -ms-transform: rotate(-90deg); /* IE 9 */
+        -moz-transform: rotate(-90deg); /* Firefox */
+        -webkit-transform: rotate(-90deg); /* Safari and Chrome */
+        -o-transform: rotate(-90deg); /* Opera */
+    }
+</style>

+ 246 - 0
lss_vue_wx/src/views/my/myAddress.vue

@@ -0,0 +1,246 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="通讯录">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="noList" v-if="list.length==0">
+                <img src="../../assets/image/noList.png">
+            </div>  
+            <ul v-else class="recordBox">
+                <li v-for="(item,index) in list" :id="'tab' + item.departmentGuid" class="one_recordBox detailBox">
+                    <div v-on:click="showList('tab'+item.departmentGuid)">
+                        <img :class="item.departmentGuid == user.deptId?'rotate1':'rotate'" src="../../assets/image/down_blue.png"> 
+                        <span>{{item.departmentName}}</span>
+                    </div>
+                    <ul :style="item.departmentGuid == user.deptId?'':'display:none'">
+                        <li v-for="(peo,num) in item.userVOS" class="one_peo">
+                            <div class="one_peo_head">
+                                <img src="../../assets/image/userHead.png">
+                            </div>
+                            <div class="one_peo_body">
+                                <div>{{peo.name}} <span v-if="peo.roleName=='部门领导'" style="color: #5FA1F0;margin-left:0.05rem;font-size:0.12rem;">({{peo.roleName}})</span></div>
+                                <div>{{peo.phone}}</div>
+                            </div>
+                            <div v-if="peo.roleName!='部门领导' && item.departmentGuid == user.deptId && user.roles[0].rolename == '部门领导' && power.indexOf('scoring')>-1" 
+                                class="one_peo_score" v-on:click="toScore(peo.id,peo.name)">
+                                {{peo.totalScore==null?"打分":peo.totalScore + "分"}}
+                                <span class="toScore"><img class="rotate" src="../../assets/image/pull_down_blue.png"></span>
+                            </div>
+                        </li>
+                    </ul>
+                </li>
+            </ul>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                power: sessionStorage.getItem("power"),
+                list: [],
+			}
+		},
+		methods: {
+            // 消息列表
+            getList() {
+                this.$indicator.open();
+                this.http.post(this.port.my.addressList, {} , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.list = res.data;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            showList(id) {
+                if($('#'+ id +' > div > img').attr('class') == "rotate"){
+                    $('#'+ id +' > ul').slideDown();
+                    $('#'+ id +' > ul .mint-cell-right').css("transform","translate3d(100%, 0, 0)")
+                    $('#'+ id +' > div >img').attr("class","rotate1");
+                } else {
+                    $('#'+ id +' > ul').slideUp();
+                    $('#'+ id +' > ul .mint-cell-right').css("transform","translate3d(100%, 0, 0)")
+                    $('#'+ id +' > div > img').attr("class","rotate");
+                }
+            },
+
+            toScore(id,name) {
+                this.$router.push("/myGrade/" + id + "/" + name)
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getList();
+        },
+		mounted() {
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .tab_head {
+        position: fixed;
+        width: 100%;
+        top: 0.4rem;
+        z-index: 110;
+    }
+
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detailBox {
+        background: #fff;
+    }
+
+    .recordBox {
+        margin: 0.12rem 0 0 0;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .one_recordBox > div > img {
+        width: 0.15rem;
+        margin-right: 0.1rem;
+        vertical-align: middle;
+    }
+
+    .one_recordBox > div > span {
+        display: inline-block;
+        width:60%;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        vertical-align: middle;
+    }
+
+    .rotate {
+        transform-origin: center center;
+        transform: rotate(-90deg);
+        -webkit-transform: rotate(-90deg);
+        -moz-transform: rotate(-90deg);
+        -ms-transform: rotate(-90deg);
+        -o-transform: rotate(-90deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+
+    .rotate1 {
+        transform-origin: center center;
+        transform: rotate(0deg);
+        -webkit-transform: rotate(0deg);
+        -moz-transform: rotate(0deg);
+        -ms-transform: rotate(0deg);
+        -o-transform: rotate(0deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+
+    .one_recordBox > ul {
+        padding: 0 0 0 0.2rem;
+    }
+
+    .toScore img {
+        width: 0.1rem;
+    }
+
+    .one_peo {
+        padding: 0.12rem 0;
+    }
+
+    .one_peo_head {
+        float:left;
+        margin-right: 0.15rem;
+    }
+
+    .one_peo_head img {
+        width: 0.35rem;
+        height: 0.35rem;
+        border-radius: 50%;
+    }
+
+    .one_peo_body {
+        display: inline-block;
+        line-height: 0.2rem;
+        color: #999;
+    }
+
+    .one_peo_body > div:nth-child(1) {
+        color: #333;
+    }
+
+    .one_peo_score {
+        float:right;
+        line-height: 0.4rem;
+        color: #5FA1F0;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+</style>
+<style>
+    .one_peo .mint-cell-value {
+        display: block;
+        width: 100%;
+    }
+
+    .one_peo .mint-cell:last-child {
+        background-image: none;
+    }
+
+    .one_peo .mint-cell-wrapper {
+        background-image: none;
+    }
+</style>

+ 269 - 0
lss_vue_wx/src/views/my/myAssets.vue

@@ -0,0 +1,269 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="我的资产">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="noList" v-if="list.length==0">
+                <img src="../../assets/image/noList.png">
+            </div> 
+            <ul v-else class="recordBox">
+                <li v-for="(item,num) in list" class="one_recordBox detailBox">
+                    <div class="record_head">
+                        <img v-if="item.pic != null" v-lazy="item.pic">
+                        <img v-else src="../../assets/image/noPic.png">
+                    </div>
+                    <div class="record_body">
+                        <div>{{item.name}}</div>
+                        <div>{{item.modelNumber}}</div>
+                        <div :id="'tab' + item.id">
+                            <div :class="item.isShow">
+                                {{item.tag}}
+                                <!-- <span v-for="(tag,index) in item.goodsNos">{{tag.modelNo}}<span v-if="index < (item.goodsNos.length -1)">、</span></span> -->
+                            </div>
+                            <div v-if="item.goodsNos.length > 2" class="click-show" v-on:click="changeType('tab' + item.id, num)">{{item.isShow == 'text-hide'?'展开':'收缩'}}</div>
+                        </div>
+                    </div>
+                </li>
+                <div class="order" v-if="haveMore">
+                    <span class="line"></span>
+                    <span class="txt">没有更多了</span>
+                    <span class="line"></span>
+                </div>
+            </ul>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                list: [],
+                pageNum: 1,
+                pages: 1,
+                haveMore: false,
+			}
+		},
+		methods: {
+            // 消息列表
+            getList() {
+                this.$indicator.open();
+                this.http.post(this.port.my.list, {
+                    'uid': this.user.id,
+                    'pageNum': this.pageNum
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        var list = res.data.list;
+                        for(var i in list) {
+                            var tag = list[i].goodsNos , str = "";
+                            for(var j in tag) {
+                                str += tag[j].modelNo + "、";
+                            }
+                            str = str.substring(0,str.length-1);
+                            list[i].tag = str;
+                            list[i].isShow = 'text-hide';
+                        }
+                        this.list = list;
+                        this.pages = res.data.pages==0?1:res.data.pages;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            loadMore() {
+                if(this.pageNum == this.pages) {
+                    this.haveMore = true;
+                } else if(this.pageNum < this.pages) {
+                    this.$indicator.open();
+                    this.http.post(this.port.my.list, {
+                        'uid': this.user.id,
+                        'pageNum': ++this.pageNum
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.pages = res.data.pages==0?1:res.data.pages;
+                            if(res.data.list.length != 0) {
+                                for(var i in res.data.list) {
+                                    this.list.push(res.data.list[i]);
+                                }
+                            }
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            changeType(id,num) {
+                if(this.list[num].isShow == "text-hide") {
+                    this.list[num].isShow = "text-show";
+                } else {
+                    this.list[num].isShow = "text-hide";
+                }
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getList();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF;
+    }
+
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .tab_head {
+        position: fixed;
+        width: 100%;
+        top: 0.4rem;
+        z-index: 110;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .recordBox {
+        margin: 0.12rem 0 0 0;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .record_head {
+        float: left;
+        color: #5FA1F0;
+        margin-right: 0.12rem;
+    }
+
+    .record_head img {
+        width: 0.6rem;
+        height: 0.6rem;
+    }
+
+    .record_head > div {
+        width: 100%;
+        display: inline-block;
+        vertical-align: middle;
+    }
+
+    .record_head span {
+        color: #939393;
+        float: right;
+        vertical-align: middle;
+    }
+
+    .record_body {
+        color: #777;
+        font-size: 0.12rem;
+        line-height: 0.23rem;
+    }
+
+    .record_body > div:nth-child(1) {
+        font-size: 0.15rem;
+        font-weight: 600;
+        color: #333;
+    }
+
+    .record_body > div:nth-child(3) .text-hide {
+        padding: 0;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
+
+    .record_body > div:nth-child(3) .text-show {
+        overflow: auto;
+        text-overflow: unset;
+        white-space: unset;
+        word-break: break-all;
+    }
+
+    .record_body > div:nth-child(3) .click-show{
+        margin-left: 5px;
+        font-size: 14px;
+        color: #26a2ff;
+        text-align: right;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .order {
+        height: 0.6rem;
+        line-height: 0.6rem;
+        text-align: center;
+    }
+
+    .order .line {
+        display: inline-block;
+        width: 1.2rem;
+        border-top: 1px solid #ccc ;
+        vertical-align: middle;
+    }
+
+    .order .txt {
+        color: #ccc;
+        font-size: 0.13rem;
+        vertical-align: middle;
+    }
+</style>

+ 875 - 0
lss_vue_wx/src/views/my/myGrade.vue

@@ -0,0 +1,875 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head uName" fixed title="">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()">{{name}}</mt-button>
+            </router-link> 
+            <mt-button class="timePicker" slot="right" id="dateTime" v-on:click="timePicker()"><span class="dateTime">{{chooseTime}}</span> <img src="../../assets/image/pull_down.png"></mt-button>
+        </mt-header>
+        <div class="detail_body">
+            <div class="detailBox one_recordBox">
+                <div class="record_head">
+                    <div v-on:click="canEdit&&power.indexOf('scoring')>-1?openPop(1):''">个人分:
+                        <img v-if="canEdit && power.indexOf('scoring')>-1" class="rotate" src="../../assets/image/pull_down_blue.png">
+                        <span>{{detail.personalScore==null?'0分':detail.personalScore + '分'}}</span>
+                    </div>
+                    <div>建议分:<span>{{detail.ideaScoreSum==null?'0分':parseFloat(detail.ideaScoreSum) + '分'}}</span></div>
+                </div>
+                <div class="record_body">
+                    <div v-on:click="toNext()">TA的建议 <span class="toDetail"><img class="rotate" src="../../assets/image/pull_down_blue.png"></span></div>
+                </div>
+            </div>
+            <div class="detailBox one_recordBox">
+                <div class="totalScore">总得分:<span>{{(detail.personalScore==null?0:detail.personalScore) + (detail.ideaScoreSum==null?0:detail.ideaScoreSum) + '分'}}</span></div>
+                <div class="totalReason">
+                    <div v-on:click="canEdit&&power.indexOf('scoring')>-1?openPop(2):''">得分原因 <img v-if="canEdit" src="../../assets/image/edit.png"></div>
+                    <div>
+                        {{detail.reason}}
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <mt-popup v-model="score" position="middle" popup-transition="popup-fade">
+            <div class="mint-popup-div">
+                <h4>个人分</h4>
+                <mt-field label="" class="input" placeholder="请输入个人分" type="number" disableClear v-model="personalScore"></mt-field>
+                <div class="btns">
+                    <mt-button class="btn" size="small" v-on:click.native="submit(1)">确定</mt-button>
+                    <mt-button class="btn" size="small" v-on:click.native="closePop(1)">取消</mt-button>
+                </div>
+            </div>
+        </mt-popup>
+
+        <mt-popup v-model="reasonPop" position="middle" popup-transition="popup-fade">
+            <div class="mint-popup-div">
+                <h4>得分原因</h4>
+                <mt-field label="" class="input" placeholder="请输入得分原因" type="textarea" rows="4" v-model="reason"></mt-field>
+                <div class="btns">
+                    <mt-button class="btn" size="small" v-on:click.native="submit(2)">确定</mt-button>
+                    <mt-button class="btn" size="small" v-on:click.native="closePop(2)">取消</mt-button>
+                </div>
+            </div>
+        </mt-popup>
+
+        <mt-popup v-model="popupVisible" position="right" class="allocation" id="allocation">
+            <mt-header class="detail_head uName" fixed title="TA的建议">
+                <router-link to="" slot="left">
+                    <mt-button icon="back" v-on:click="toPrev()">{{name}}</mt-button>
+                </router-link>
+            </mt-header>
+            <div class="detail_body">
+                <div class="detailBox one_recordBox" v-for="(item,index) in ideaList">
+                    <div>
+                        <div class="one_suggest_title">
+                            {{item.indate}}
+                            <span v-if="item.isEvaluated == 1" class="areaday">已打分</span>
+                            <span v-if="power.indexOf('scoring')>-1 && item.isEvaluated == 0" class="edit" v-on:click="openSugPop(index)">打分</span>
+                        </div>
+                        <div class="one_suggest_body">
+                            {{item.content}}
+                        </div>
+                        <div class="one_suggest_reply" v-if="item.ideaComment != null">
+                            <div class="reply_title">来自领导的回复</div>
+                            <div class="reply_body">
+                                {{item.ideaComment.content}}
+                                <div>{{item.ideaComment.responder}} <span class="score">得分:<span>{{item.score==null?'0分':item.score + '分'}}</span></span></div>
+                                <div>{{item.ideaComment.indate}}
+                                    <div v-if="power.indexOf('scoring')>-1" class="showMoreBtn" v-on:click.stop="showBtnList(item.id)">
+                                        <img src="../../assets/image/loadMore.png">
+                                        <div :id="'btn' + item.id" class="btn_list hide">
+                                            <div v-on:click="openSugPop(index)"><img src="../../assets/image/register.png"><span>编辑</span></div>
+                                            <div v-on:click="deleteScore(index)"><img src="../../assets/image/delete.png"><span>删除</span></div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </mt-popup>
+
+        <mt-popup v-model="sugScorePop" position="middle" popup-transition="popup-fade">
+            <div class="mint-popup-div">
+                <h4>打分</h4>
+                <mt-field label="" class="input" placeholder="请输入建议分" type="number" disableClear v-model="sugScore"></mt-field>
+                <mt-field label="" class="input" placeholder="请输入得分原因" type="textarea" rows="4" v-model="sugContent"></mt-field>
+                <div class="btns">
+                    <mt-button class="btn" size="small" v-on:click.native="submit(3)">确定</mt-button>
+                    <mt-button class="btn" size="small" v-on:click.native="closePop(3)">取消</mt-button>
+                </div>
+            </div>
+        </mt-popup>
+    </div>
+</template>
+
+<script>
+    import { MessageBox } from 'mint-ui';
+	export default {
+		data() {
+			return {
+                id: this.$route.params.id,
+                name: this.$route.params.name,
+                user: JSON.parse(sessionStorage.getItem("user")),
+                power: sessionStorage.getItem("power"),
+                detail: '',
+                date: [],
+                chooseTime: '',
+
+                score: false,
+                personalScore: 0,
+                reasonPop: false,
+                reason: '',
+                popupVisible: false,
+                sugScore: 0,
+                sugContent: '',
+                sugScorePop: false,
+                chooseSugNum: 0,
+
+                ideaList: [],
+                
+                canEdit: true,
+			}
+		},
+		methods: {
+            // 消息列表
+            getDetail() {
+                this.$indicator.open();
+                this.http.post(this.port.my.scoreDetail, {
+                    'uid': this.id,
+                    'time': this.chooseTime
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.detail = res.data;
+                        if(res.data.scoreId == null) {
+                            var from = {
+                                "uid": this.id,
+                                "scoringYearMonth": this.chooseTime,
+                                "raterId": this.user.id
+                            }
+                            this.http.post(this.port.my.addOrUpdate, from , 
+                            res => {
+                                if (res.code == "ok") {
+                                    this.getDetail();
+                                } else {
+                                    this.$toast({
+                                        message: res.msg,
+                                        duration: 2000
+                                    });
+                                }
+                            }, error => {
+                                this.popupVisible = false;
+                                this.$toast({
+                                    message: error,
+                                    duration: 2000
+                                });
+                            })
+                        }
+                        this.personalScore = (res.data.personalScore==null?0:res.data.personalScore);
+                        this.reason = (res.data.reason==null?'':res.data.reason);
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            // 时间筛选
+            timePicker() {
+                var _this = this;
+                var dataShippingSpace = this.date;
+                var pickerDiv = document.getElementById("dateTime");
+                var pickerView = new PickerView({
+                    bindElem: pickerDiv, 
+                    data: dataShippingSpace, 
+                    title: "对应人员", 
+                    leftText: "取消", 
+                    rightText: "确定", 
+                    rightFn: function(selectArr) {
+                        _this.chooseTime = selectArr[0].name;
+                        _this.getDetail();
+                        if(_this.chooseTime == _this.date[0].name) {
+                            _this.canEdit = true
+                        } else {
+                            _this.canEdit = false
+                        }
+                    }
+                });
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            },
+
+            toNext() {
+                $(".one_suggest_reply .showMoreBtn .btn_list").addClass("hide").slideUp();
+                this.popupVisible = true;
+                this.$indicator.open();
+                this.http.post(this.port.my.ideaScore, {
+                    'uid': this.id,
+                    'time': this.chooseTime,
+                    'scoreId': this.detail.scoreId
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.ideaList = res.data;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            toPrev() {
+                // var from = {};
+                // if(this.detail.scoreId != null) {
+                //     from = {
+                //         "scoreId": this.detail.scoreId,
+                //         "total": parseInt(this.personalScore) + (this.detail.ideaScoreSum == null?0:parseFloat(this.detail.ideaScoreSum)),
+                //     }
+                // } else {
+                //     from = {
+                //         "uid": this.id,
+                //         "total": parseInt(this.personalScore) + (this.detail.ideaScoreSum == null?0:parseFloat(this.detail.ideaScoreSum)),
+                //     }
+                // }
+                // this.http.post(this.port.my.addOrUpdate, from , 
+                // res => {
+                //     if (res.code == "ok") {
+                //         this.popupVisible = false;
+                //         this.getDetail();
+                //     } else {
+                //         this.$toast({
+                //             message: res.msg,
+                //             duration: 2000
+                //         });
+                //     }
+                // }, error => {
+                //     this.popupVisible = false;
+                //     this.$toast({
+                //         message: error,
+                //         duration: 2000
+                //     });
+                // })
+
+                this.popupVisible = false;
+                this.getDetail();
+            },
+
+            getDate() {
+                const dateData = [];
+                const date1 = new Date();
+                for (let i = 0; i < 36; i++) {
+                    let cur = '';
+                    let tempYear = date1.getFullYear();
+                    let tempMonth = date1.getMonth() - i + 1;
+                    if (tempMonth <= 0) {
+                        tempYear = date1.getFullYear() - Math.floor(tempMonth / -12) - 1; 
+                        tempMonth += (Math.floor(tempMonth / -12) + 1) * 12;
+                    }
+                    if (tempMonth < 10) {
+                        cur = tempYear+ '-0' + tempMonth;
+                    } else {
+                        cur = tempYear+ '-' + tempMonth;
+                    }
+                    dateData.push({
+                        name: cur
+                    });
+                    if(i == 0) {
+                        this.chooseTime = cur;
+                    }
+                }
+                this.date = dateData;
+                this.getDetail();
+            },
+
+            openPop(type) {
+                if(type == 1) {
+                    this.personalScore = this.detail.personalScore==null?0:this.detail.personalScore;
+                    this.score = true;
+                } else if(type == 2) {
+                    this.reason = this.detail.reason==null?'':this.detail.reason;
+                    this.reasonPop = true;
+                }
+            },
+
+            submit(type) {
+                if(type == 1) {
+                    var reg = /^([1]?\d{1,2})$/;
+                    if(!reg.test(this.personalScore)) {
+                        this.$toast({
+                            message: '请输入0-100内的整数',
+                            duration: 2000
+                        });
+                        return false;
+                    } else {
+                        var from = {};
+                        if(this.detail.scoreId != null) {
+                            from = {
+                                "scoreId": this.detail.scoreId,
+                                "personalScore": this.personalScore,
+                                "ideaScore": this.detail.ideaScoreSum == null?0:this.detail.ideaScoreSum,
+                                "total": parseInt(this.personalScore) + (this.detail.ideaScoreSum == null?0:parseFloat(this.detail.ideaScoreSum)),
+                            }
+                        } else {
+                            from = {
+                                "uid": this.id,
+                                "personalScore": this.personalScore,
+                                "ideaScore": this.detail.ideaScoreSum == null?0:this.detail.ideaScoreSum,
+                                "scoringYearMonth": this.chooseTime,
+                                "raterId": this.user.id,
+                                "total": parseInt(this.personalScore) + (this.detail.ideaScoreSum == null?0:parseFloat(this.detail.ideaScoreSum)),
+                            }
+                        }
+                        this.$indicator.open();
+                        this.http.post(this.port.my.addOrUpdate, from , 
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: "打分成功",
+                                    duration: 2000
+                                });
+                                this.getDetail();
+                                this.score = false;
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$indicator.close();
+                            this.score = false;
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                } else if(type == 2) {
+                    var from = {};
+                    if(this.detail.scoreId != null) {
+                        from = {
+                            "scoreId": this.detail.scoreId,
+                            "reason": this.reason,
+                        }
+                    } else {
+                        from = {
+                            "uid": this.id,
+                            "reason": this.reason,
+                            "scoringYearMonth": this.chooseTime,
+                            "raterId": this.user.id
+                        }
+                    }
+                    this.$indicator.open();
+                    this.http.post(this.port.my.addOrUpdate, from , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.$toast({
+                                message: "提交成功",
+                                duration: 2000
+                            });
+                            this.getDetail();
+                            this.reasonPop = false;
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.reasonPop = false;
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                } else {
+                    var reg = /^\-?([0-9]|10)(\.\d)?$/;
+                    if(!reg.test(this.sugScore)) {
+                        this.$toast({
+                            message: '分数区间为-10 ~ 10',
+                            duration: 2000
+                        });
+                        return false;
+                    } else {
+                        var from = {};
+                        if(this.ideaComment != null) {
+                            from = {
+                                "ideaId": this.ideaList[this.chooseSugNum].id,
+                                "score": this.sugScore,
+                                "content": this.sugContent,
+                                "responderId": this.user.id,
+                                "scoreId": this.ideaList[this.chooseSugNum].scoreId,
+                                "id": this.ideaList[this.chooseSugNum].ideaComment.id,
+                            }
+                        } else {
+                            from = {
+                                "ideaId": this.ideaList[this.chooseSugNum].id,
+                                "score": this.sugScore,
+                                "content": this.sugContent,
+                                "responderId": this.user.id,
+                                "scoreId": this.ideaList[this.chooseSugNum].scoreId,
+                            }
+                        }
+                        this.$indicator.open();
+                        this.http.post(this.port.my.leaderScore, from , 
+                        res => {
+                            this.$indicator.close();
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: "打分成功",
+                                    duration: 2000
+                                });
+                                this.sugScorePop = false;
+                                this.toNext();
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$indicator.close();
+                            this.sugScorePop = false;
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                }
+            },
+
+            closePop(type) {
+                if(type == 1) {
+                    this.score = false;
+                } else if(type == 2){
+                    this.reasonPop = false;
+                } else {
+                    this.sugScorePop = false;
+                }
+            },
+
+            openSugPop(i) {
+                this.sugScore = this.ideaList[i].score == null? 0 : this.ideaList[i].score;
+                this.sugContent = this.ideaComment == null? '' : this.ideaComment.content;
+                this.sugScorePop = true;
+                this.chooseSugNum = i;
+            },
+
+            showBtnList(id) {
+                if($("#btn" + id).attr("class").indexOf("hide") == -1) {
+                    $("#btn" + id).slideUp().addClass("hide");
+                } else {
+                    $(".one_suggest_reply .showMoreBtn .btn_list").addClass("hide").slideUp();
+                    $("#btn" + id).slideDown().removeClass("hide");
+                }
+            },
+
+            deleteScore(index) {
+                MessageBox.confirm('', { 
+                    message: '是否删除该分数、评论?', 
+                        title: '', 
+                        confirmButtonText: '确定', 
+                        cancelButtonText: '取消' 
+                 }).then(action => { 
+                    if (action == 'confirm') {     //确认的回调
+                        this.http.post(this.port.my.delScore, {
+                            'id': this.ideaList[index].ideaComment.id,
+                        } , 
+                        res => {
+                            if (res.code == "ok") {
+                                this.$toast({
+                                    message: "删除成功",
+                                    duration: 2000
+                                });
+                                this.toNext();
+                            } else {
+                                this.$toast({
+                                    message: res.msg,
+                                    duration: 2000
+                                });
+                            }
+                        }, error => {
+                            this.$toast({
+                                message: error,
+                                duration: 2000
+                            });
+                        })
+                    }
+                 }).catch(err => { 
+                 });
+            },
+
+            globalClick(callback) {
+                document.getElementById('allocation').onclick = function () {
+                    $(".one_suggest_reply .showMoreBtn .btn_list").addClass("hide").slideUp();
+                }
+            }
+        },
+        created() {
+            this.getDate();
+        },
+		mounted() {
+            this.globalClick();
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF!important;
+    }
+
+    .context_router {
+        background: #EFEFEF;
+    }
+    
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .record_head {
+        padding: 0 0 0.1rem 0;
+        line-height: 0.25rem;
+        border-bottom: 1px solid #ccc;
+    }
+
+    .record_head > div {
+        width: 100%;
+        display: inline-block;
+        vertical-align: middle;
+        line-height: 0.4rem;
+    }
+
+    .record_head > div img {
+        width:0.12rem;
+        float:right;
+        margin: 0.135rem 0 0 0;
+    }
+
+    .record_head > div span {
+        color: #5FA1F0;
+        margin-left: 0.2rem;
+        float: right;
+        margin-right: 0.05rem;
+    }
+
+    .record_body {
+        color: #5FA1F0;
+        font-size: 0.14rem;
+        margin: 0.12rem 0 0 0;
+    }
+
+    .record_body .toDetail {
+        float: right;
+        margin-right: 0.05rem;
+    }
+
+    .record_body .toDetail img {
+        width: 0.12rem;
+    }
+
+    .one_suggest {
+        margin-top: 0.2rem;
+    }
+
+    .one_suggest_title {
+        line-height: 0.3rem;
+    }
+
+    .one_suggest_title span {
+        float: right;
+        font-size: 0.13rem;
+    }
+
+    .one_suggest_title span.areaday {
+        color: #ccc;
+    }
+
+    .one_suggest_title span.edit {
+        color:#5FA1F0;
+    }
+
+    .one_suggest_body {
+        font-size: 0.13rem;
+        line-height: 0.2rem;
+        color: #333;
+    }
+
+    .one_suggest_reply {
+        margin-top: 0.12rem;
+    }
+
+    .reply_title {
+        font-size: 0.12rem;
+        color: #999;
+        margin-bottom: 0.08rem;
+    }
+
+    .reply_body {
+        padding: 0.1rem;
+        background: #EEE;
+        color: #333;
+    }
+
+    .reply_body > div {
+        color: #333;
+        line-height: 0.2rem;
+        font-size: 0.13rem;
+        color: #777;
+    }
+
+    .reply_body > div:nth-child(1) {
+        margin-top: 0.1rem;
+    }
+
+    .reply_body .score {
+        float: right;
+    }
+
+    .reply_body .score span {
+        color: #5FA1F0;
+    }
+
+    .suggestList {
+        display: none;
+    }
+
+    .rotate {
+        transform-origin: center center;
+        transform: rotate(-90deg);
+        -webkit-transform: rotate(-90deg);
+        -moz-transform: rotate(-90deg);
+        -ms-transform: rotate(-90deg);
+        -o-transform: rotate(-90deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+
+    .rotate1 {
+        transform-origin: center center;
+        transform: rotate(0deg);
+        -webkit-transform: rotate(0deg);
+        -moz-transform: rotate(0deg);
+        -ms-transform: rotate(0deg);
+        -o-transform: rotate(0deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+
+    .totalScore {
+        line-height: 0.3rem;
+    }
+
+    .totalScore span {
+        color: #5FA1F0;
+        margin-left: 0.2rem;
+        float: right;
+        margin-right: 0.08rem;
+    }
+
+    .totalReason div:nth-child(1) {
+        line-height: 0.3rem;
+    }
+
+    .totalReason div:nth-child(2) {
+        line-height: 0.2rem;
+        color: #777;
+    }
+
+    .totalReason img {
+        float: right;
+        width: 0.15rem;
+        margin: 0.08rem 0.08rem 0 0;
+    }
+
+    .mint-popup {
+        width: 70%;
+        box-sizing: content-box;
+    }
+
+    .mint-popup-div {
+        padding: 0.12rem;
+        background: #fff;
+    }
+
+    .mint-popup-div h4 {
+        margin: 0;
+        padding: 0;
+    }
+
+    .mint-popup-div .mint-cell {
+        margin: 0.2rem 0;
+    }
+
+    .mint-popup-div > div.btns {
+        height: 0.3rem;
+    }
+
+    .mint-popup-div .btn {
+        float: right;
+        margin-right: 0.1rem;
+        background: #fff;
+        box-shadow: none;
+        width: 50%;
+        margin: 0;
+    }
+
+    .mint-popup-div .btn:nth-child(1) {
+        color: #f00;
+    }
+
+    .allocation {
+        width: 100%;
+        height: 100%;
+        background: #EFEFEF;
+    }
+
+    .allocation .detail_body {
+        overflow: auto;
+        height: 88%;
+    }
+
+    .showMoreBtn {
+        display: inline-block;
+        float: right;
+        position: relative;
+    }
+
+    .showMoreBtn img {
+        width: 0.23rem;
+    }
+
+    .btn_list {
+        position: absolute;
+        right: -0.04rem;
+        top: 0.30rem;
+        border:#aaa;
+        background: #fcfcfc;
+        box-shadow: 5px 5px 10px #ccc;
+        z-index: 105;
+    }
+
+    .btn_list:before {
+        display: inline-block;
+        width: 0;
+        height: 0;
+        border: solid transparent;
+        border-width: 10px;
+        border-bottom-color: #fcfcfc;
+        content: "";
+        position: absolute;
+        top: -20px;
+        right: 0.06rem;
+    }
+
+    .btn_list > div {
+        width: 0.6rem;
+        font-size: 0.13rem;
+        padding: 0.1rem 0.15rem;
+        border-bottom: 1px solid #efefef;
+        text-align: center;
+    }
+
+    .btn_list > div img {
+        width: 0.14rem;
+        height: 0.14rem;
+        vertical-align: middle;
+        margin-right: 0.05rem;
+    }
+
+    .btn_list > div span {
+        height: 0.15rem;
+        line-height: 0.15rem;
+        vertical-align: middle;
+    }
+
+    .hide {
+        display: none;
+    }
+</style>
+<style>
+     .uName .is-left .mint-button-text {
+        color: #333;
+        font-size: 0.15rem;
+    }
+
+    #dateTime.timePicker .mint-button-text {
+        color: #333;
+        font-size: 0.15rem;
+        font-weight: 600;
+    }
+
+    #dateTime.timePicker .mint-button-text span.dateTime {
+        vertical-align: middle;
+    }
+
+    #dateTime.timePicker .mint-button-text img {
+        width: 0.22rem;
+        vertical-align: middle;
+    }
+
+    .mint-popup-div input {
+        border: 1px solid #ddd;
+        border-radius: 5px;
+        padding: 0.08rem;
+    }
+
+    .input textarea {
+        border: 1px solid #ddd;
+        border-radius: 5px;
+        padding: 0.08rem;
+    }
+</style>

+ 161 - 0
lss_vue_wx/src/views/my/myInsDetail.vue

@@ -0,0 +1,161 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="管理制度">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="title">{{detail.title}}</div>
+            <div class="indate">{{detail.indate}}</div>
+            <div class="content">{{detail.content}}</div>
+            <div class="file">本文附件</div>
+            <div class="fileList">
+                <div class="one_file" v-for="item in detail.institutionFiles" v-on:click="downLoadFile(item.url)">
+                    <div>{{item.name}}</div>
+                    <img  src="../../assets/image/downLoad.png">
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                id: this.$route.params.id,
+                user: JSON.parse(sessionStorage.getItem("user")),
+                detail: "",
+			}
+		},
+		methods: {
+            // 消息列表
+            getDetail() {
+                this.$indicator.open();
+                this.http.post(this.port.my.insDetail, {
+                    'id': this.id
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.detail = res.data;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            downLoadFile(url) {
+                // var iframe = document.createElement('iframe');
+                // iframe.style.display = 'none';
+                // iframe.src = "javascript: '<script>location.href=\"" + url + "\"<\/script>'";
+                // document.getElementsByTagName('body')[0].appendChild(iframe);
+
+                var form = document.createElement('form');
+                form.action = url;
+                document.getElementsByTagName('body')[0].appendChild(form);
+                form.submit();
+
+                // var dtask = plus.downloader.createDownload(url);
+                // dtask.addEventListener("statechanged", onStateChanged, false);
+                // dtask.start(); 
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getDetail();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #fff;
+    }
+    
+    .detail {
+        background: #fff;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding: 0.08rem 0.2rem;
+    }
+
+    .detail_body .title {
+        font-weight: 500;
+        font-size: 0.16rem;
+        line-height: 0.25rem;
+    }
+
+    .detail_body .indate {
+        color: #999;
+        margin: 0.12rem 0 0.12rem 0;
+    }
+
+    .detail_body .content {
+        color: #444;
+        line-height: 0.2rem;
+        /* text-indent: 2em; */
+        padding: 0 0 0.3rem 0;
+        border-bottom: 1px solid #ddd;
+    }
+
+    .detail_body .file {
+        margin: 0.12rem 0 0.08rem 0;
+    }
+
+    .detail_body .one_file {
+        padding: 0.12rem 0.04rem;
+    }
+
+    .detail_body .one_file div {
+        display: inline-block;
+        vertical-align: middle;
+        width: 80%;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        font-size: 0.14rem;
+        color: #333;
+    }
+
+    .detail_body .one_file img {
+        width: 0.15rem;
+        float: right;
+        vertical-align: middle;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+</style>

+ 297 - 0
lss_vue_wx/src/views/my/myInstitution.vue

@@ -0,0 +1,297 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="管理制度">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="noList" v-if="list.length==0">
+                <img src="../../assets/image/noList.png">
+            </div>  
+            <ul v-else v-infinite-scroll="loadMore" infinite-scroll-disabled="loading" infinite-scroll-distance="10">
+                <li v-for="(item,index) in list">
+                    <div class="one_manage" v-on:click="toDetail(item.id)">
+                        <div>{{item.title}}</div>
+                        <div><img class="rotate" src="../../assets/image/pull_down.png"></div>
+                    </div>
+                </li>
+                <div class="order" v-if="haveMore">
+                    <span class="line"></span>
+                    <span class="txt">没有更多了</span>
+                    <span class="line"></span>
+                </div>
+            </ul>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                list: [],
+                pageNum: 1,
+                pages: 1,
+                haveMore: false,
+			}
+		},
+		methods: {
+            // 消息列表
+            getList() {
+                this.$indicator.open();
+                this.http.post(this.port.my.insList, {
+                    'pageNum': this.pageNum
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        var list = res.data.list;
+                        for(var i in list) {
+                            list[i].isShow = 'text-hide';
+                        }
+                        this.list = list;
+                        this.pages = res.data.pages==0?1:res.data.pages;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            loadMore() {
+                if(this.pageNum == this.pages) {
+                    this.haveMore = true;
+                } else if(this.pageNum < this.pages) {
+                    this.$indicator.open();
+                    this.http.post(this.port.my.insList, {
+                        'pageNum': ++this.pageNum
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.pages = res.data.pages==0?1:res.data.pages;
+                            if(res.data.list.length != 0) {
+                                for(var i in res.data.list) {
+                                    this.list.push(res.data.list[i]);
+                                }
+                            }
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            toDetail(id) {
+                this.$router.push("/myInstitution/" + id);
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getList();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .tab_head {
+        position: fixed;
+        width: 100%;
+        top: 0.4rem;
+        z-index: 110;
+    }
+
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .recordBox {
+        margin: 0.12rem 0 0 0;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .record_head {
+        float: left;
+        color: #5FA1F0;
+        margin-right: 0.12rem;
+    }
+
+    .record_head img {
+        width: 0.6rem;
+        height: 0.6rem;
+    }
+
+    .record_head > div {
+        width: 100%;
+        display: inline-block;
+        vertical-align: middle;
+    }
+
+    .record_head span {
+        color: #939393;
+        float: right;
+        vertical-align: middle;
+    }
+
+    .record_body {
+        color: #777;
+        font-size: 0.12rem;
+        line-height: 0.23rem;
+    }
+
+    .record_body > div:nth-child(1) {
+        font-size: 0.15rem;
+        font-weight: 600;
+        color: #333;
+    }
+
+    .record_body > div:nth-child(3) .text-hide {
+        padding: 0;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
+
+    .record_body > div:nth-child(3) .text-show {
+        overflow: auto;
+        text-overflow: unset;
+        white-space: unset;
+    }
+
+    .record_body > div:nth-child(3) .click-show{
+        margin-left: 5px;
+        font-size: 14px;
+        color: #26a2ff;
+        text-align: right;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .one_manage {
+        padding: 0.12rem;
+        background: #fff;
+        color: #444;
+    }
+
+    .one_manage div {
+        display: inline-block;
+        vertical-align: middle;
+    }
+
+    .one_manage > div:nth-child(1) {
+        width: 89%;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+    }
+
+    .one_manage > div:nth-child(2) {
+        float: right;
+        text-align: right;
+    }
+
+    .one_manage > div:nth-child(2) img {
+        width: 0.15rem;
+        vertical-align: middle;
+    }
+
+    .rotate {
+        transform-origin: center center;
+        transform: rotate(-90deg);
+        -webkit-transform: rotate(-90deg);
+        -moz-transform: rotate(-90deg);
+        -ms-transform: rotate(-90deg);
+        -o-transform: rotate(-90deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+    
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .order {
+        height: 0.6rem;
+        line-height: 0.6rem;
+        text-align: center;
+    }
+
+    .order .line {
+        display: inline-block;
+        width: 1.2rem;
+        border-top: 1px solid #ccc ;
+        vertical-align: middle;
+    }
+
+    .order .txt {
+        color: #ccc;
+        font-size: 0.13rem;
+        vertical-align: middle;
+    }
+</style>

+ 229 - 0
lss_vue_wx/src/views/my/myMessage.vue

@@ -0,0 +1,229 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="我的消息">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="noList" v-if="list.length==0">
+                <img src="../../assets/image/noList.png">
+            </div>  
+            <ul v-else class="recordBox" v-infinite-scroll="loadMore" infinite-scroll-disabled="loading" infinite-scroll-distance="10">
+                <li v-for="item in list" class="one_recordBox detailBox">
+                    <div class="record_head">
+                        <div>{{item.content}}</div>
+                    </div>
+                    <div class="record_body">
+                        <div>时间:{{item.indate}}</div>
+                    </div>
+                </li>
+                <div class="order" v-if="haveMore">
+                    <span class="line"></span>
+                    <span class="txt">没有更多了</span>
+                    <span class="line"></span>
+                </div>
+            </ul>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                list: [],
+                pageNum: 1,
+                pages: 1,
+                haveMore: false,
+			}
+		},
+		methods: {
+            // 消息列表
+            getList() {
+                this.$indicator.open();
+                this.http.post(this.port.my.newList, {
+                    'uid': this.user.id,
+                    'pageNum': this.pageNum
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.list = res.data.list;
+                        this.pages = res.data.pages==0?1:res.data.pages;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            loadMore() {
+                if(this.pageNum == this.pages) {
+                    this.haveMore = true;
+                } else if(this.pageNum < this.pages) {
+                    this.$indicator.open();
+                    this.http.post(this.port.my.newList, {
+                        'id': this.id,
+                        'pageNum': ++this.pageNum
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.pages = res.data.pages==0?1:res.data.pages;
+                            if(res.data.list.length != 0) {
+                                for(var i in res.data.list) {
+                                    this.list.push(res.data.list[i]);
+                                }
+                            }
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            jumpBack() {
+                this.http.post(this.port.my.noReadNum, {
+                    'uid': this.user.id,
+                } , 
+                res => {
+                    if (res.code == "ok") {
+                        sessionStorage.setItem('noRead', res.data==null?0:res.data);
+                         this.$router.go(-1);
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            }
+        },
+        created() {
+            this.getList();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .tab_head {
+        position: fixed;
+        width: 100%;
+        top: 0.4rem;
+        z-index: 110;
+    }
+
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .recordBox {
+        margin: 0.12rem 0 0 0;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .record_head {
+        color: #5FA1F0;
+        padding: 0 0 0.1rem 0;
+        border-bottom: 1px solid #ccc;
+    }
+
+    .record_head > div {
+        width: 100%;
+        display: inline-block;
+        vertical-align: middle;
+    }
+
+    .record_head span {
+        color: #939393;
+        float: right;
+        vertical-align: middle;
+    }
+
+    .record_body {
+        color: #777;
+        font-size: 0.12rem;
+        line-height: 0.23rem;
+        margin-top: 0.12rem;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .order {
+        height: 0.6rem;
+        line-height: 0.6rem;
+        text-align: center;
+    }
+
+    .order .line {
+        display: inline-block;
+        width: 1.2rem;
+        border-top: 1px solid #ccc ;
+        vertical-align: middle;
+    }
+
+    .order .txt {
+        color: #ccc;
+        font-size: 0.13rem;
+        vertical-align: middle;
+    }
+</style>

+ 213 - 0
lss_vue_wx/src/views/my/myScore.vue

@@ -0,0 +1,213 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="我的评分">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="noList" v-if="list.length==0">
+                <img src="../../assets/image/noList.png">
+            </div> 
+            <ul v-else class="recordBox" v-infinite-scroll="loadMore" infinite-scroll-disabled="loading" infinite-scroll-distance="10">
+                <li v-for="item in list" class="one_recordBox detailBox">
+                    <div class="record_head">
+                        <div>{{parseInt(item.scoringYearMonth.split('-')[1])}}月得分:&nbsp;&nbsp;&nbsp;<span>{{item.total}}分</span></div>
+                    </div>
+                    <div class="record_body">
+                        <div>个人分:{{item.personalScore}}分</div>
+                        <div>建议分:{{item.ideaScore}}分</div>
+                        <div>评分人:{{item.rater}}</div>
+                        <div>时间:{{item.scoringYearMonth}} <span class="toDetail" v-on:click="toDetail(item.scoreId)">查看详情 ></span></div>
+                    </div>
+                </li>
+                <div class="order" v-if="haveMore">
+                    <span class="line"></span>
+                    <span class="txt">没有更多了</span>
+                    <span class="line"></span>
+                </div>
+            </ul>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                list: [],
+                pageNum: 1,
+                pages: 1,
+                haveMore: false,
+			}
+		},
+		methods: {
+            // 评分列表
+            getList() {
+                this.$indicator.open();
+                this.http.post(this.port.my.scoreList, {
+                    'uid': this.user.id,
+                    'pageNum': this.pageNum
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.list = res.data.list;
+                        this.pages = res.data.pages==0?1:res.data.pages;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            loadMore() {
+                if(this.pageNum == this.pages) {
+                    this.haveMore = true;
+                } else if(this.pageNum < this.pages) {
+                    this.$indicator.open();
+                    this.http.post(this.port.my.scoreList, {
+                        'uid': this.user.id,
+                        'pageNum': ++this.pageNum
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.pages = res.data.pages==0?1:res.data.pages;
+                            if(res.data.list.length != 0) {
+                                for(var i in res.data.list) {
+                                    this.list.push(res.data.list[i]);
+                                }
+                            }
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            toDetail(id) {
+                this.$router.push("/myScore/" + id)
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getList();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF;
+    }
+    
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .recordBox {
+        margin: 0.12rem 0 0 0;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .record_head {
+        padding: 0 0 0.1rem 0;
+        border-bottom: 1px solid #ccc;
+    }
+
+    .record_head > div {
+        width: 100%;
+        display: inline-block;
+        vertical-align: middle;
+    }
+
+    .record_head > div span {
+        color: #5FA1F0;
+    }
+
+    .record_body {
+        color: #777;
+        font-size: 0.12rem;
+        line-height: 0.23rem;
+        margin-top: 0.12rem;
+    }
+
+    .record_body .toDetail {
+        float: right;
+        color: #5FA1F0;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .order {
+        height: 0.6rem;
+        line-height: 0.6rem;
+        text-align: center;
+    }
+
+    .order .line {
+        display: inline-block;
+        width: 1.2rem;
+        border-top: 1px solid #ccc ;
+        vertical-align: middle;
+    }
+
+    .order .txt {
+        color: #ccc;
+        font-size: 0.13rem;
+        vertical-align: middle;
+    }
+</style>

+ 272 - 0
lss_vue_wx/src/views/my/myScoreDetail.vue

@@ -0,0 +1,272 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="评分详情">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link>
+        </mt-header>
+        <div class="detail_body">
+            <div class="detailBox one_recordBox">
+                <div class="record_head">
+                    <div>个人分:<span>{{detail.personalScore==null?'0分':detail.personalScore + '分'}}</span></div>
+                    <div>建议分:<span>{{detail.ideaScore==null?'0分':detail.ideaScore + '分'}}</span></div>
+                </div>
+                <div class="record_body">
+                    <div v-on:click="showSuggest()">我的建议 <span class="toDetail"><img class="rotate" src="../../assets/image/pull_down_blue.png"></span></div>
+                </div>
+                <div class="suggestList" >
+                    <div class="one_suggest" v-for="item in detail.ideaVO">
+                        <div class="one_suggest_title">
+                            {{item.indate}}
+                        </div>
+                        <div class="one_suggest_body">
+                            {{item.content}}
+                        </div>
+                        <div class="one_suggest_reply" v-if="item.ideaComment != null">
+                            <div class="reply_title">来自领导的回复</div>
+                            <div class="reply_body">
+                                {{item.ideaComment.content}}
+                                <div>{{item.ideaComment.responder}} <span class="score">得分:<span>{{item.score==null?'0分':item.score + '分'}}</span></span></div>
+                                <div>{{item.ideaComment.indate}}</div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="detailBox one_recordBox">
+                <div class="totalScore">总得分:<span>{{detail.total==null?'0分':detail.total + '分'}}</span></div>
+                <div class="totalReason">
+                    <div>得分原因</div>
+                    <div>
+                        {{detail.reason}}
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                id: this.$route.params.id,
+                detail: '',
+			}
+		},
+		methods: {
+            // 消息列表
+            getDetail() {
+                this.$indicator.open();
+                this.http.post(this.port.my.scoreDetail, {
+                    'scoreId': this.id,
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.detail = res.data;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            showSuggest() {
+                if($('.toDetail img').attr("class") == "rotate") {
+                    $('.suggestList').slideDown();
+                    $('.toDetail img').attr("class","rotate1")
+                } else {
+                    $('.suggestList').slideUp();
+                    $('.toDetail img').attr("class","rotate")
+                }
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            }
+        },
+        created() {
+            this.getDetail();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF!important;
+    }
+
+    .context_router {
+        background: #EFEFEF;
+    }
+    
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.11rem;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .record_head {
+        padding: 0 0 0.1rem 0;
+        line-height: 0.25rem;
+        border-bottom: 1px solid #ccc;
+    }
+
+    .record_head > div {
+        width: 100%;
+        display: inline-block;
+        vertical-align: middle;
+    }
+
+    .record_head > div span {
+        color: #5FA1F0;
+        margin-left: 0.2rem;
+        float: right;
+        margin-right: 0.08rem;
+    }
+
+    .record_body {
+        color: #5FA1F0;
+        font-size: 0.14rem;
+        margin: 0.12rem 0 0 0;
+    }
+
+    .record_body .toDetail {
+        float: right;
+        margin-right: 0.05rem;
+    }
+
+    .record_body .toDetail img {
+        width: 0.12rem;
+    }
+
+    .one_suggest {
+        margin-top: 0.2rem;
+    }
+
+    .one_suggest_title {
+        line-height: 0.3rem;
+    }
+
+    .one_suggest_body {
+        font-size: 0.13rem;
+        line-height: 0.2rem;
+        color: #333;
+    }
+
+    .one_suggest_reply {
+        margin-top: 0.12rem;
+    }
+
+    .reply_title {
+        font-size: 0.12rem;
+        color: #999;
+        margin-bottom: 0.08rem;
+    }
+
+    .reply_body {
+        padding: 0.1rem;
+        background: #EEE;
+        color: #333;
+    }
+
+    .reply_body > div {
+        color: #333;
+        line-height: 0.2rem;
+        font-size: 0.13rem;
+        color: #777;
+    }
+
+    .reply_body > div:nth-child(1) {
+        margin-top: 0.1rem;
+    }
+
+    .reply_body .score {
+        float: right;
+    }
+
+    .reply_body .score span {
+        color: #5FA1F0;
+    }
+
+    .suggestList {
+        display: none;
+    }
+
+    .rotate {
+        transform-origin: center center;
+        transform: rotate(-90deg);
+        -webkit-transform: rotate(-90deg);
+        -moz-transform: rotate(-90deg);
+        -ms-transform: rotate(-90deg);
+        -o-transform: rotate(-90deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+
+    .rotate1 {
+        transform-origin: center center;
+        transform: rotate(0deg);
+        -webkit-transform: rotate(0deg);
+        -moz-transform: rotate(0deg);
+        -ms-transform: rotate(0deg);
+        -o-transform: rotate(0deg);
+        transition: transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -moz-transition: -moz-transform 0.2s;
+        -o-transition: -o-transform 0.2s;
+        -ms-transition: -ms-transform 0.2s;
+    }
+
+    .totalScore {
+        line-height: 0.3rem;
+    }
+
+    .totalScore span {
+        color: #5FA1F0;
+        margin-left: 0.2rem;
+    }
+
+    .totalReason div:nth-child(1) {
+        line-height: 0.3rem;
+    }
+
+    .totalReason div:nth-child(2) {
+        line-height: 0.2rem;
+        color: #777;
+    }
+</style>

+ 490 - 0
lss_vue_wx/src/views/my/mySuggest.vue

@@ -0,0 +1,490 @@
+<template>
+	<div class="detail">
+        <mt-header class="detail_head" fixed title="我的建议">
+            <router-link to="" slot="left">
+                <mt-button icon="back" v-on:click="jumpBack()"></mt-button>
+            </router-link> 
+            <mt-button class="timePicker" slot="right" v-if="power.indexOf('make_recommendations')>-1" v-on:click="openPop(-1)">发表建议</mt-button>
+        </mt-header>
+        <div class="detail_body">
+            <div class="noList" v-if="list.length==0">
+                <img src="../../assets/image/noList.png">
+            </div> 
+            <ul v-else class="recordBox">
+                <li v-for="(item,index) in list" class="one_recordBox detailBox">
+                    <div>
+                        <div class="one_suggest_title">
+                            {{item.indate}}
+                            <span v-if="item.ideaComment != null" class="areaday">已打分</span>
+                            <span v-if="power.indexOf('make_recommendations')>-1 && item.ideaComment == null" class="edit" v-on:click="openPop(index)">修改</span>
+                        </div>
+                        <div class="one_suggest_body">
+                            {{item.content}}
+                        </div>
+                        <div class="one_suggest_reply" v-if="item.ideaComment != null">
+                            <div class="reply_title">来自领导的回复</div>
+                            <div class="reply_body">
+                                {{item.ideaComment.content}}
+                                <div>{{item.ideaComment.responder}} <span class="score">得分:<span>{{item.score==null?'0分':item.score + '分'}}</span></span></div>
+                                <div>{{item.ideaComment.indate}}</div>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <div class="order" v-if="haveMore">
+                    <span class="line"></span>
+                    <span class="txt">没有更多了</span>
+                    <span class="line"></span>
+                </div>
+            </ul>
+        </div>
+
+        <mt-popup v-model="popupVisible" position="middle" popup-transition="popup-fade" closeOnClickModal>
+            <div class="mint-popup-div">
+                <h4>建议</h4>
+                <mt-field label="" class="input" placeholder="请输入建议" type="textarea" rows="4" v-model="content"></mt-field>
+                <div class="btns">
+                    <mt-button class="btn" size="small" v-on:click.native="submit()">确定</mt-button>
+                    <mt-button class="btn" size="small" v-on:click.native="closePop()">取消</mt-button>
+                </div>
+            </div>
+        </mt-popup>
+    </div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+                user: JSON.parse(sessionStorage.getItem("user")),
+                power: sessionStorage.getItem("power"),
+                list: [],
+                pageNum: 1,
+                pages: 1,
+                haveMore: false,
+
+                popupVisible: false,
+                content: '',
+                chooseI: -1,
+                draftId: 0,
+
+                canEdit: true,
+			}
+		},
+		methods: {
+            // 消息列表
+            getList() {
+                this.$indicator.open();
+                this.http.post(this.port.my.ideaList, {
+                    'uid': this.user.id,
+                    'pageNum': this.pageNum,
+                } , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.list = res.data.list;
+                        this.pages = res.data.pages==0?1:res.data.pages;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            loadMore() {
+                if(this.pageNum == this.pages) {
+                    this.haveMore = true;
+                } else if(this.pageNum < this.pages) {
+                    this.$indicator.open();
+                    this.http.post(this.port.my.ideaList, {
+                        'uid': this.user.id,
+                        'pageNum': ++this.pageNum
+                    } , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.pages = res.data.pages==0?1:res.data.pages;
+                            if(res.data.list.length != 0) {
+                                for(var i in res.data.list) {
+                                    this.list.push(res.data.list[i]);
+                                }
+                            }
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                }
+            },
+
+            jumpBack() {
+                this.$router.go(-1);
+            },
+
+            openPop(i) {
+                this.chooseI = i;
+                this.draftId = 0;
+                if(i == -1) {
+                    this.http.post(this.port.my.draft, {
+                        "uid": this.user.id
+                    } , 
+                    res => {
+                        if (res.code == "ok") {
+                            if(res.data.content == null) {
+                                this.content = '';
+                                this.draftId = 0;
+                            } else {
+                                this.content = res.data.content;
+                                this.draftId = res.data.id;
+                            }
+                            this.popupVisible = true;
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.popupVisible = false;
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                } else {
+                    this.content = this.list[i].content;
+                    this.popupVisible = true;
+                }
+            },
+
+            submit() {
+                var from = {};
+                if(this.chooseI != -1) {
+                    from = {
+                        "id": this.list[this.chooseI].id,
+                        "content": this.content,
+                        "uid": this.user.id,
+                        "isDraft": 0,
+                    }
+                } else {
+                    if(this.draftId != 0) {
+                        from = {
+                            "id": this.draftId,
+                            "content": this.content,
+                            "scoringYearMonth": this.chooseTime,
+                            "uid": this.user.id,
+                            "isDraft": 0,
+                        }
+                    } else {
+                        from = {
+                            "content": this.content,
+                            "scoringYearMonth": this.chooseTime,
+                            "uid": this.user.id,
+                            "isDraft": 0,
+                        }
+                    }
+                }
+                this.$indicator.open();
+                this.http.post(this.port.my.ideaAoU, from , 
+                res => {
+                    this.$indicator.close();
+                    if (res.code == "ok") {
+                        this.$toast({
+                            message: "提交成功",
+                            duration: 2000
+                        });
+                        this.getList();
+                        this.popupVisible = false;
+                    } else {
+                        this.$toast({
+                            message: res.msg,
+                            duration: 2000
+                        });
+                    }
+                }, error => {
+                    this.$indicator.close();
+                    this.popupVisible = false;
+                    this.$toast({
+                        message: error,
+                        duration: 2000
+                    });
+                })
+            },
+
+            closePop() {
+                if(this.content != "" && this.content != null && this.chooseI == -1) {
+                    var from = {};
+                    if(this.chooseI == -1) {
+                        from = {
+                            "content": this.content,
+                            "scoringYearMonth": this.chooseTime,
+                            "uid": this.user.id,
+                            "isDraft": 1,
+                        }
+                    }
+                    this.$indicator.open();
+                    this.http.post(this.port.my.ideaAoU, from , 
+                    res => {
+                        this.$indicator.close();
+                        if (res.code == "ok") {
+                            this.$toast({
+                                message: "当前未提交内容已存为草稿",
+                                duration: 2000
+                            });
+                            this.popupVisible = false;
+                        } else {
+                            this.$toast({
+                                message: res.msg,
+                                duration: 2000
+                            });
+                        }
+                    }, error => {
+                        this.$indicator.close();
+                        this.popupVisible = false;
+                        this.$toast({
+                            message: error,
+                            duration: 2000
+                        });
+                    })
+                } else {
+                    this.popupVisible = false;
+                }
+            }
+        },
+        created() {
+            this.getList();
+        },
+		mounted() {
+            
+		}
+	}
+
+</script>
+
+<style scoped>
+    body {
+        background: #EFEFEF!important;
+    }
+
+    .context_router {
+        background: #EFEFEF;
+    }
+    
+    .detail {
+        background: #EFEFEF;
+    }
+
+    .detail_head {
+        background: #fff;
+        color: #333;
+        height: 0.4rem;
+    }
+
+    .detail_body {
+        margin-top: 0.4rem;
+        padding-bottom: 0.15rem;
+        background: #efefef;
+    }
+
+    .detailBox {
+        background: #fff;
+        margin-bottom: 0.1rem;
+    }
+
+    .one_recordBox {
+        padding: 0.12rem 0.2rem;
+    }
+
+    .record_head {
+        padding: 0 0 0.1rem 0;
+        line-height: 0.25rem;
+        border-bottom: 1px solid #ccc;
+    }
+
+    .record_head > div {
+        width: 100%;
+        display: inline-block;
+        vertical-align: middle;
+        line-height: 0.4rem;
+    }
+
+    .record_head > div img {
+        width:0.12rem;
+        float:right;
+        margin: 0.135rem 0 0 0;
+    }
+
+    .record_head > div span {
+        color: #5FA1F0;
+        margin-left: 0.2rem;
+        float: right;
+        margin-right: 0.05rem;
+    }
+
+    .record_body {
+        color: #5FA1F0;
+        font-size: 0.14rem;
+        margin: 0.12rem 0 0 0;
+    }
+
+    .record_body .toDetail {
+        float: right;
+        margin-right: 0.05rem;
+    }
+
+    .record_body .toDetail img {
+        width: 0.12rem;
+    }
+
+    .one_suggest_title {
+        line-height: 0.3rem;
+    }
+
+    .one_suggest_title span {
+        float: right;
+        font-size: 0.13rem;
+    }
+
+    .one_suggest_title span.areaday {
+        color: #ccc;
+    }
+
+    .one_suggest_title span.edit {
+        color:#5FA1F0;
+    }
+
+    .one_suggest_body {
+        font-size: 0.13rem;
+        line-height: 0.2rem;
+        color: #333;
+    }
+
+    .one_suggest_reply {
+        margin-top: 0.12rem;
+    }
+
+    .reply_title {
+        font-size: 0.12rem;
+        color: #999;
+        margin-bottom: 0.08rem;
+    }
+
+    .reply_body {
+        padding: 0.1rem;
+        background: #EEE;
+        color: #333;
+    }
+
+    .reply_body > div {
+        color: #333;
+        line-height: 0.2rem;
+        font-size: 0.13rem;
+        color: #777;
+    }
+
+    .reply_body > div:nth-child(1) {
+        margin-top: 0.1rem;
+    }
+
+    .reply_body .score {
+        float: right;
+    }
+
+    .reply_body .score span {
+        color: #5FA1F0;
+    }
+
+    .mint-popup {
+        width: 70%;
+        box-sizing: content-box;
+    }
+
+    .mint-popup-div {
+        padding: 0.12rem;
+        background: #fff;
+    }
+
+    .mint-popup-div h4 {
+        margin: 0;
+        padding: 0;
+    }
+
+    .mint-popup-div .mint-cell {
+        margin: 0.2rem 0;
+    }
+
+    .mint-popup-div > div.btns {
+        height: 0.3rem;
+    }
+
+    .mint-popup-div .btn {
+        float: right;
+        margin-right: 0.1rem;
+        background: #fff;
+        box-shadow: none;
+        width: 50%;
+        margin: 0;
+    }
+
+    .mint-popup-div .btn:nth-child(1) {
+        color: #f00;
+    }
+
+    .allocation {
+        width: 100%;
+        height: 100%;
+    }
+
+    .noList {
+        text-align: center;
+        padding: 1.5rem 0;
+    }
+
+    .noList img {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .order {
+        height: 0.6rem;
+        line-height: 0.6rem;
+        text-align: center;
+    }
+
+    .order .line {
+        display: inline-block;
+        width: 1.2rem;
+        border-top: 1px solid #ccc ;
+        vertical-align: middle;
+    }
+
+    .order .txt {
+        color: #ccc;
+        font-size: 0.13rem;
+        vertical-align: middle;
+    }
+</style>
+<style>
+    .mint-popup-div input {
+        border: 1px solid #ddd;
+        border-radius: 5px;
+        padding: 0.08rem;
+    }
+</style>

+ 7 - 0
lss_vue_wx/src/vuex/actions.js

@@ -0,0 +1,7 @@
+//test
+export const increment = ({commit}) => {
+    commit('INCREMENT')
+}
+export const decrement = ({commit}) => {
+    commit('DECREMENT')
+}

+ 4 - 0
lss_vue_wx/src/vuex/getters.js

@@ -0,0 +1,4 @@
+//test
+export const getCount = state => {
+    return state.count
+}

+ 29 - 0
lss_vue_wx/src/vuex/store.js

@@ -0,0 +1,29 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import * as actions from './actions'
+import * as getters from './getters'
+
+Vue.use(Vuex)
+
+// 应用初始状态
+const state = {
+    count: 10
+}
+
+// 定义所需的 mutations
+const mutations = {
+    INCREMENT(state) {
+        state.count++
+    },
+    DECREMENT(state) {
+        state.count--
+    }
+}
+
+// 创建 store 实例
+export default new Vuex.Store({
+    actions,
+    getters,
+    state,
+    mutations
+})

+ 0 - 0
lss_vue_wx/static/.gitkeep