3
0
Prechádzať zdrojové kódy

新增帮助与反馈

zhangwj 4 rokov pred
rodič
commit
f31ad26752
100 zmenil súbory, kde vykonal 4089 pridanie a 23 odobranie
  1. 6 3
      frontend_lims/.editorconfig
  2. 5 0
      frontend_lims/.eslintrc
  3. 5 19
      frontend_lims/.gitignore
  4. 10 0
      frontend_lims/.npmrc
  5. 6 1
      frontend_lims/babel.config.js
  6. 9 0
      frontend_lims/config/dev.js
  7. 95 0
      frontend_lims/config/index.js
  8. 18 0
      frontend_lims/config/prod.js
  9. BIN
      frontend_lims/dist.zip
  10. 16 0
      frontend_lims/global.d.ts
  11. 62 0
      frontend_lims/package.json
  12. 13 0
      frontend_lims/project.config.json
  13. 47 0
      frontend_lims/src/api/login.ts
  14. 80 0
      frontend_lims/src/api/request.ts
  15. 58 0
      frontend_lims/src/app.config.ts
  16. 40 0
      frontend_lims/src/app.scss
  17. 29 0
      frontend_lims/src/app.ts
  18. BIN
      frontend_lims/src/assets/images/deviceDetail/bindingEquip.png
  19. BIN
      frontend_lims/src/assets/images/deviceDetail/slocks.png
  20. BIN
      frontend_lims/src/assets/images/deviceDetail/temporary.png
  21. BIN
      frontend_lims/src/assets/images/index/bgImg.png
  22. BIN
      frontend_lims/src/assets/images/index/noslock.png
  23. BIN
      frontend_lims/src/assets/images/index/slock.png
  24. BIN
      frontend_lims/src/assets/images/login/account.png
  25. BIN
      frontend_lims/src/assets/images/login/bgfooter.png
  26. BIN
      frontend_lims/src/assets/images/login/loginBg.png
  27. BIN
      frontend_lims/src/assets/images/login/phone.png
  28. BIN
      frontend_lims/src/assets/images/login/pwd.png
  29. BIN
      frontend_lims/src/assets/images/message/device.png
  30. BIN
      frontend_lims/src/assets/images/message/mesSlock.png
  31. BIN
      frontend_lims/src/assets/images/message/mesWarn.png
  32. BIN
      frontend_lims/src/assets/images/message/number.png
  33. BIN
      frontend_lims/src/assets/images/message/open-clock.png
  34. BIN
      frontend_lims/src/assets/images/message/record.png
  35. BIN
      frontend_lims/src/assets/images/message/slock-record.png
  36. BIN
      frontend_lims/src/assets/images/message/temporary.png
  37. BIN
      frontend_lims/src/assets/images/message/warn-record.png
  38. BIN
      frontend_lims/src/assets/images/message/warning.png
  39. BIN
      frontend_lims/src/assets/images/my/aboutLab.png
  40. BIN
      frontend_lims/src/assets/images/my/add.png
  41. BIN
      frontend_lims/src/assets/images/my/banner.png
  42. BIN
      frontend_lims/src/assets/images/my/help.png
  43. BIN
      frontend_lims/src/assets/images/my/privacy.png
  44. BIN
      frontend_lims/src/assets/images/my/userAgreement.png
  45. BIN
      frontend_lims/src/assets/tabbar/index-active.png
  46. BIN
      frontend_lims/src/assets/tabbar/index.png
  47. BIN
      frontend_lims/src/assets/tabbar/message-active.png
  48. BIN
      frontend_lims/src/assets/tabbar/message.png
  49. BIN
      frontend_lims/src/assets/tabbar/my-active.png
  50. BIN
      frontend_lims/src/assets/tabbar/my.png
  51. 19 0
      frontend_lims/src/index.html
  52. 16 0
      frontend_lims/src/mixins/setStateMixin.ts
  53. 11 0
      frontend_lims/src/pages/accountLogin/index.config.ts
  54. 110 0
      frontend_lims/src/pages/accountLogin/index.scss
  55. 171 0
      frontend_lims/src/pages/accountLogin/index.vue
  56. 11 0
      frontend_lims/src/pages/addUser/index.config.ts
  57. 25 0
      frontend_lims/src/pages/addUser/index.scss
  58. 131 0
      frontend_lims/src/pages/addUser/index.vue
  59. 11 0
      frontend_lims/src/pages/bindingEquipment/index.config.ts
  60. 39 0
      frontend_lims/src/pages/bindingEquipment/index.scss
  61. 105 0
      frontend_lims/src/pages/bindingEquipment/index.vue
  62. 11 0
      frontend_lims/src/pages/deviceDetail/index.config.ts
  63. 231 0
      frontend_lims/src/pages/deviceDetail/index.scss
  64. 162 0
      frontend_lims/src/pages/deviceDetail/index.vue
  65. 11 0
      frontend_lims/src/pages/editUser/index.config.ts
  66. 25 0
      frontend_lims/src/pages/editUser/index.scss
  67. 135 0
      frontend_lims/src/pages/editUser/index.vue
  68. 11 0
      frontend_lims/src/pages/equipmentAuthorization/index.config.ts
  69. 109 0
      frontend_lims/src/pages/equipmentAuthorization/index.scss
  70. 149 0
      frontend_lims/src/pages/equipmentAuthorization/index.vue
  71. 3 0
      frontend_lims/src/pages/index/index.config.ts
  72. 198 0
      frontend_lims/src/pages/index/index.scss
  73. 113 0
      frontend_lims/src/pages/index/index.vue
  74. 11 0
      frontend_lims/src/pages/message/index.config.ts
  75. 143 0
      frontend_lims/src/pages/message/index.scss
  76. 121 0
      frontend_lims/src/pages/message/index.vue
  77. 11 0
      frontend_lims/src/pages/my/index.config.ts
  78. 138 0
      frontend_lims/src/pages/my/index.scss
  79. 179 0
      frontend_lims/src/pages/my/index.vue
  80. 11 0
      frontend_lims/src/pages/myBox/aboutLabsop/index.config.ts
  81. 38 0
      frontend_lims/src/pages/myBox/aboutLabsop/index.scss
  82. 32 0
      frontend_lims/src/pages/myBox/aboutLabsop/index.vue
  83. 11 0
      frontend_lims/src/pages/myBox/helpAndBack/index.config.ts
  84. 44 0
      frontend_lims/src/pages/myBox/helpAndBack/index.scss
  85. 31 0
      frontend_lims/src/pages/myBox/helpAndBack/index.vue
  86. 11 0
      frontend_lims/src/pages/myBox/privacyPolicy/index.config.ts
  87. 38 0
      frontend_lims/src/pages/myBox/privacyPolicy/index.scss
  88. 76 0
      frontend_lims/src/pages/myBox/privacyPolicy/index.vue
  89. 11 0
      frontend_lims/src/pages/myBox/userAgreement/index.config.ts
  90. 30 0
      frontend_lims/src/pages/myBox/userAgreement/index.scss
  91. 70 0
      frontend_lims/src/pages/myBox/userAgreement/index.vue
  92. 12 0
      frontend_lims/src/pages/phoneLogin/index.config.ts
  93. 102 0
      frontend_lims/src/pages/phoneLogin/index.scss
  94. 217 0
      frontend_lims/src/pages/phoneLogin/index.vue
  95. 11 0
      frontend_lims/src/pages/provisionalAuthority/index.config.ts
  96. 142 0
      frontend_lims/src/pages/provisionalAuthority/index.scss
  97. 118 0
      frontend_lims/src/pages/provisionalAuthority/index.vue
  98. 11 0
      frontend_lims/src/pages/userControl/index.config.ts
  99. 33 0
      frontend_lims/src/pages/userControl/index.scss
  100. 131 0
      frontend_lims/src/pages/userControl/index.vue

+ 6 - 3
frontend_lims/.editorconfig

@@ -1,9 +1,12 @@
+# http://editorconfig.org
 root = true
 
 [*]
-charset = utf-8
 indent_style = space
 indent_size = 2
-end_of_line = lf
-insert_final_newline = true
+charset = utf-8
 trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false

+ 5 - 0
frontend_lims/.eslintrc

@@ -0,0 +1,5 @@
+// ESLint 检查 .vue 文件需要单独配置编辑器:
+// https://eslint.vuejs.org/user-guide/#editor-integrations
+{
+  "extends": ["taro/vue"]
+}

+ 5 - 19
frontend_lims/.gitignore

@@ -1,20 +1,6 @@
-.quasar
+dist/
+deploy_versions/
+.temp/
+.rn_temp/
+node_modules/
 .DS_Store
-.thumbs.db
-node_modules
-/dist
-/src-cordova/node_modules
-/src-cordova/platforms
-/src-cordova/plugins
-/src-cordova/www
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Editor directories and files
-.idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln

+ 10 - 0
frontend_lims/.npmrc

@@ -0,0 +1,10 @@
+registry=https://registry.npm.taobao.org
+disturl=https://npm.taobao.org/dist
+sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
+phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
+electron_mirror=https://npm.taobao.org/mirrors/electron/
+chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver
+operadriver_cdnurl=https://npm.taobao.org/mirrors/operadriver
+selenium_cdnurl=https://npm.taobao.org/mirrors/selenium
+node_inspector_cdnurl=https://npm.taobao.org/mirrors/node-inspector
+fsevents_binary_host_mirror=http://npm.taobao.org/mirrors/fsevents/

+ 6 - 1
frontend_lims/babel.config.js

@@ -1,5 +1,10 @@
+// babel-preset-taro 更多选项和默认值:
+// https://github.com/NervJS/taro/blob/next/packages/babel-preset-taro/README.md
 module.exports = {
   presets: [
-    '@quasar/babel-preset-app'
+    ['taro', {
+      framework: 'vue',
+      ts: true
+    }]
   ]
 }

+ 9 - 0
frontend_lims/config/dev.js

@@ -0,0 +1,9 @@
+module.exports = {
+  env: {
+    NODE_ENV: '"development"'
+  },
+  defineConstants: {
+  },
+  mini: {},
+  h5: {}
+}

+ 95 - 0
frontend_lims/config/index.js

@@ -0,0 +1,95 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:31:49
+ * @LastEditTime: 2021-02-27 10:01:38
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\config\index.js
+ */
+const config = {
+  projectName: 'intelligentLock',
+  date: '2021-2-19',
+  designWidth: 750,
+  deviceRatio: {
+    640: 2.34 / 2,
+    750: 1,
+    828: 1.81 / 2
+  },
+  sourceRoot: 'src',
+  // outputRoot: 'dist',
+  outputRoot: `dist/${process.env.TARO_ENV}`,
+  plugins: [],
+  defineConstants: {
+  },
+  copy: {
+    patterns: [
+    ],
+    options: {
+    }
+  },
+  framework: 'vue',
+  mini: {
+    postcss: {
+      pxtransform: {
+        enable: true,
+        config: {
+
+        }
+      },
+      url: {
+        enable: true,
+        config: {
+          limit: 1024 // 设定转换尺寸上限
+        }
+      },
+      cssModules: {
+        enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
+        config: {
+          namingPattern: 'module', // 转换模式,取值为 global/module
+          generateScopedName: '[name]__[local]___[hash:base64:5]'
+        }
+      }
+    }
+  },
+  h5: {
+    publicPath: '/',
+    staticDirectory: 'static',
+    // esnextModules: ['taro-ui'],
+    esnextModules: ['taro-ui-vue'],
+    postcss: {
+      autoprefixer: {
+        enable: true,
+        config: {
+        }
+      },
+      cssModules: {
+        enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
+        config: {
+          namingPattern: 'module', // 转换模式,取值为 global/module
+          generateScopedName: '[name]__[local]___[hash:base64:5]'
+        }
+      }
+    }
+  },
+  weapp: {
+    module: {
+      postcss: {
+        // css modules 功能开关与相关配置
+        cssModules: {
+          enable: true, // 默认为 false,如需使用 css modules 功能,则设为 true
+          config: {
+            namingPattern: 'module', // 转换模式,取值为 global/module,下文详细说明
+            generateScopedName: '[name]__[local]___[hash:base64:5]'
+          }
+        }
+      }
+    }
+  }
+}
+
+module.exports = function (merge) {
+  if (process.env.NODE_ENV === 'development') {
+    return merge({}, config, require('./dev'))
+  }
+  return merge({}, config, require('./prod'))
+}

+ 18 - 0
frontend_lims/config/prod.js

@@ -0,0 +1,18 @@
+module.exports = {
+  env: {
+    NODE_ENV: '"production"'
+  },
+  defineConstants: {
+  },
+  mini: {},
+  h5: {
+    /**
+     * 如果h5端编译后体积过大,可以使用webpack-bundle-analyzer插件对打包体积进行分析。
+     * 参考代码如下:
+     * webpackChain (chain) {
+     *   chain.plugin('analyzer')
+     *     .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [])
+     * }
+     */
+  }
+}

BIN
frontend_lims/dist.zip


+ 16 - 0
frontend_lims/global.d.ts

@@ -0,0 +1,16 @@
+declare module '*.png';
+declare module '*.gif';
+declare module '*.jpg';
+declare module '*.jpeg';
+declare module '*.svg';
+declare module '*.css';
+declare module '*.less';
+declare module '*.scss';
+declare module '*.sass';
+declare module '*.styl';
+
+declare namespace NodeJS {
+  interface ProcessEnv {
+    TARO_ENV: 'weapp' | 'swan' | 'alipay' | 'h5' | 'rn' | 'tt' | 'quickapp' | 'qq' | 'jd'
+  }
+}

+ 62 - 0
frontend_lims/package.json

@@ -0,0 +1,62 @@
+{
+  "name": "intelligentLock",
+  "version": "1.0.0",
+  "private": true,
+  "description": "intelligentLock",
+  "templateInfo": {
+    "name": "default",
+    "typescript": true,
+    "css": "sass"
+  },
+  "scripts": {
+    "build:weapp": "taro build --type weapp",
+    "build:swan": "taro build --type swan",
+    "build:alipay": "taro build --type alipay",
+    "build:tt": "taro build --type tt",
+    "build:h5": "taro build --type h5",
+    "build:rn": "taro build --type rn",
+    "build:qq": "taro build --type qq",
+    "build:jd": "taro build --type jd",
+    "build:quickapp": "taro build --type quickapp",
+    "dev:weapp": "npm run build:weapp -- --watch",
+    "dev:swan": "npm run build:swan -- --watch",
+    "dev:alipay": "npm run build:alipay -- --watch",
+    "dev:tt": "npm run build:tt -- --watch",
+    "dev:h5": "npm run build:h5 -- --watch",
+    "dev:rn": "npm run build:rn -- --watch",
+    "dev:qq": "npm run build:qq -- --watch",
+    "dev:jd": "npm run build:jd -- --watch",
+    "dev:quickapp": "npm run build:quickapp -- --watch"
+  },
+  "browserslist": [
+    "last 3 versions",
+    "Android >= 4.1",
+    "ios >= 8"
+  ],
+  "author": "",
+  "dependencies": {
+    "@babel/runtime": "^7.7.7",
+    "@tarojs/components": "3.0.26",
+    "@tarojs/runtime": "3.0.26",
+    "@tarojs/taro": "3.0.26",
+    "lodash": "^4.17.21",
+    "taro-ui-vue": "^1.0.0-beta.8",
+    "vue": "^2.5.0",
+    "vue-template-compiler": "^2.5.0"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.8.0",
+    "@tarojs/mini-runner": "3.0.26",
+    "@tarojs/webpack-runner": "3.0.26",
+    "@types/webpack-env": "^1.13.6",
+    "@typescript-eslint/eslint-plugin": "^2.x",
+    "@typescript-eslint/parser": "^2.x",
+    "babel-preset-taro": "3.0.26",
+    "eslint": "^6.8.0",
+    "eslint-config-taro": "3.0.26",
+    "eslint-plugin-vue": "^6.x",
+    "stylelint": "9.3.0",
+    "typescript": "^3.7.0",
+    "vue-loader": "^15.9.2"
+  }
+}

+ 13 - 0
frontend_lims/project.config.json

@@ -0,0 +1,13 @@
+{
+  "miniprogramRoot": "./dist",
+  "projectname": "intelligentLock",
+  "description": "intelligentLock",
+  "appid": "touristappid",
+  "setting": {
+    "urlCheck": true,
+    "es6": false,
+    "postcss": false,
+    "minified": false
+  },
+  "compileType": "miniprogram"
+}

+ 47 - 0
frontend_lims/src/api/login.ts

@@ -0,0 +1,47 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-26 11:04:28
+ * @LastEditTime: 2021-02-26 11:05:33
+ * @LastEditors: your name
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\api\login.ts
+ */
+import request from './request'
+
+/**
+ * 登录
+ * @param data 
+ */
+export function login(code) {
+    return request({
+        url: '/api/login',
+        method: 'POST',
+        data:{
+            code
+        } 
+    })
+}
+
+/**
+ * 更新用户信息
+ * @param data 用户信息
+ */
+export function updatewx(data) {
+  return request({
+      url: '/api/user/updatewx',
+      method: 'POST',
+      data
+  })
+}
+
+/**
+ * 获取手机号
+ * @param data 
+ */
+export function wx_phone(data) {
+  return request({
+      url: '/api/login/wx_phone',
+      method: 'POST',
+      data
+  })
+}

+ 80 - 0
frontend_lims/src/api/request.ts

@@ -0,0 +1,80 @@
+import Taro from '@tarojs/taro';
+import { getToken, getUserInfo ,remove} from '../utils/cache'
+import {wxLogin} from '../utils/login'
+
+//const baseUrl = `https://yapi.baidu.com/mock/15269`
+const baseUrl = `http://ceshi.psych-yxy.com`
+
+
+/**
+ * 封封微信的的request
+ */
+function request(opt) {
+  console.log(getUserInfo().uid)
+  return new Promise(function (resolve, reject) {
+    let option = Object.assign({
+      url: '', data: {}, method: "GET"
+    }, opt)
+    console.log('TCL:发起请求',`${option.url}`, { token: getToken(), uid: getUserInfo().uid, ...option.data })
+    Taro.request({
+      url: `${baseUrl}${option.url}`,
+      data: { token: getToken(), uid: getUserInfo().uid, ...option.data },
+      method: option.method,
+      header: {
+        'Content-Type': option.contentType || 'application/x-www-form-urlencoded',
+        // 'X-Litemall-Token': getToken()
+      },
+      success: function (res) {
+      console.log('请求成功',res)
+        if (res.statusCode == 200) {
+          // resolve(res.data)
+          // if (res.data.errno == 501) {
+          //   // 清除登录相关内容
+          //   try {
+          //     Taro.removeStorageSync('userInfo');
+          //     Taro.removeStorageSync('token');
+          //   } catch (e) {
+          //     // Do something when catch error
+          //   }
+          //   // 切换到登录页面
+          //   Taro.navigateTo({
+          //     url: '/pages/auth/login/login'
+          //   });
+          // } else 
+          if (res.data.status_code === '200') {
+            resolve(res.data);
+          } else if (res.data.status_code === '505') {
+            /**
+             * 登录失败就重新登录下然后刷新首页
+             */
+            remove()
+            // wxLogin().then(()=>{
+            Taro.reLaunch({url:'/pages/index/index'})
+            // })
+            Taro.showToast({ icon: 'none', title: res.data.message })
+            reject(res.data.errmsg);
+          } else {
+            Taro.showToast({ icon: 'none', title: res.data.data.error || res.data.message })
+            reject(res.data.errmsg);
+          }
+        } else {
+          reject(res.errMsg);
+        }
+
+      },
+      fail: function (err) {
+        reject(err)
+      }
+    })
+  });
+}
+
+request.get = (url, data) => {
+  return request({ url, data, method: 'GET' });
+}
+
+request.post = (url, data) => {
+  return request({ url, data, method: 'POST' });
+}
+
+export default request;

+ 58 - 0
frontend_lims/src/app.config.ts

@@ -0,0 +1,58 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-03 15:37:02
+ * @LastEditTime: 2021-03-02 14:32:53
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \taroDemo\myApp\src\app.config.js
+ */
+export default {
+  pages: [
+    'pages/accountLogin/index',  //账号登录
+    'pages/phoneLogin/index',  //验证码登录
+    'pages/index/index',  //首页
+    'pages/message/index',  //消息
+    'pages/my/index',  //我的
+    'pages/warning/index',  //报警
+    'pages/deviceDetail/index',  //设备详情
+    'pages/bindingEquipment/index',  //设备绑定
+    'pages/provisionalAuthority/index',  //临时授权
+    'pages/equipmentAuthorization/index',  //设备授权
+    'pages/userControl/index',  //用户管理
+    'pages/addUser/index',  //新增用户
+    'pages/editUser/index',  //编辑用户
+    'pages/myBox/userAgreement/index',  //用户协议
+    'pages/myBox/privacyPolicy/index',  //隐私政策
+    'pages/myBox/aboutLabsop/index',  //关于labsop
+    'pages/myBox/helpAndBack/index'  //帮助与反馈
+  ],
+  tabBar: {
+    list: [{
+      'iconPath': './assets/tabbar/index.png',
+      'selectedIconPath': './assets/tabbar/index-active.png',
+      pagePath: 'pages/index/index',
+      text: '首页'
+    },
+    {
+      'iconPath': './assets/tabbar/message.png',
+      'selectedIconPath': './assets/tabbar/message-active.png',
+      pagePath: 'pages/message/index',
+      text: '消息'
+    }, {
+      'iconPath': './assets/tabbar/my.png',
+      'selectedIconPath': './assets/tabbar/my-active.png',
+      pagePath: 'pages/my/index',
+      text: '我的'
+    }],
+    'color': '#646464',
+    'selectedColor': '#3C6EF0',
+    'backgroundColor': '#FFFFFF',
+    'borderStyle': 'white'
+  },
+  window: {
+    backgroundTextStyle: 'light',
+    navigationBarBackgroundColor: '#F7F7F7',
+    navigationBarTitleText: '',
+    navigationBarTextStyle: 'black'
+  }
+}

+ 40 - 0
frontend_lims/src/app.scss

@@ -0,0 +1,40 @@
+@import 'taro-ui-vue/dist/style/index.scss';
+#app {
+	background-color: #F7F7F7;
+	font-size: 0;
+}
+
+// .at-frozen {
+//   position: fixed;
+//   width: 100%;
+// }
+
+.page {
+  display: flex;
+  flex-direction: column;
+  background-color: #F7F7F7;
+  height: 100vh;
+
+}
+.taro-tabbar__panel{
+  background-color: #F7F7F7;
+}
+
+view {
+  box-sizing: border-box;
+  display: block;
+}
+.at-icon-chevron-left::before{
+  font-size: 60px;
+  display: block;
+}
+.at-nav-bar__container .at-icon{
+  font-size: 28Px !important;
+}
+.at-nav-bar{
+  padding-right: 30px;
+  box-sizing: border-box;
+}
+.at-card{
+  margin: 0 !important;
+}

+ 29 - 0
frontend_lims/src/app.ts

@@ -0,0 +1,29 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:31:49
+ * @LastEditTime: 2021-02-22 10:08:54
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\app.ts
+ */
+import Vue from 'vue'
+import './app.scss'
+
+import Taro from '@tarojs/taro'
+
+import TaroUi from 'taro-ui-vue'
+// import 'taro-ui-vue/style/index.scss'
+import 'taro-ui-vue/dist/style/index.scss'
+Vue.use(TaroUi)
+Vue.prototype.$taro = Taro
+
+const App = new Vue({
+  onShow (options) {
+  },
+  render(h) {
+    // this.$slots.default 是将要会渲染的页面
+    return h('block', this.$slots.default)
+  }
+})
+
+export default App

BIN
frontend_lims/src/assets/images/deviceDetail/bindingEquip.png


BIN
frontend_lims/src/assets/images/deviceDetail/slocks.png


BIN
frontend_lims/src/assets/images/deviceDetail/temporary.png


BIN
frontend_lims/src/assets/images/index/bgImg.png


BIN
frontend_lims/src/assets/images/index/noslock.png


BIN
frontend_lims/src/assets/images/index/slock.png


BIN
frontend_lims/src/assets/images/login/account.png


BIN
frontend_lims/src/assets/images/login/bgfooter.png


BIN
frontend_lims/src/assets/images/login/loginBg.png


BIN
frontend_lims/src/assets/images/login/phone.png


BIN
frontend_lims/src/assets/images/login/pwd.png


BIN
frontend_lims/src/assets/images/message/device.png


BIN
frontend_lims/src/assets/images/message/mesSlock.png


BIN
frontend_lims/src/assets/images/message/mesWarn.png


BIN
frontend_lims/src/assets/images/message/number.png


BIN
frontend_lims/src/assets/images/message/open-clock.png


BIN
frontend_lims/src/assets/images/message/record.png


BIN
frontend_lims/src/assets/images/message/slock-record.png


BIN
frontend_lims/src/assets/images/message/temporary.png


BIN
frontend_lims/src/assets/images/message/warn-record.png


BIN
frontend_lims/src/assets/images/message/warning.png


BIN
frontend_lims/src/assets/images/my/aboutLab.png


BIN
frontend_lims/src/assets/images/my/add.png


BIN
frontend_lims/src/assets/images/my/banner.png


BIN
frontend_lims/src/assets/images/my/help.png


BIN
frontend_lims/src/assets/images/my/privacy.png


BIN
frontend_lims/src/assets/images/my/userAgreement.png


BIN
frontend_lims/src/assets/tabbar/index-active.png


BIN
frontend_lims/src/assets/tabbar/index.png


BIN
frontend_lims/src/assets/tabbar/message-active.png


BIN
frontend_lims/src/assets/tabbar/message.png


BIN
frontend_lims/src/assets/tabbar/my-active.png


BIN
frontend_lims/src/assets/tabbar/my.png


+ 19 - 0
frontend_lims/src/index.html

@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+  <meta content="width=device-width,initial-scale=1,user-scalable=no" name="viewport">
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-touch-fullscreen" content="yes">
+  <meta name="format-detection" content="telephone=no,address=no">
+  <meta name="apple-mobile-web-app-status-bar-style" content="white">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" >
+  <title></title>
+  <script>
+    !function(x){function w(){var v,u,t,tes,s=x.document,r=s.documentElement,a=r.getBoundingClientRect().width;if(!v&&!u){var n=!!x.navigator.appVersion.match(/AppleWebKit.*Mobile.*/);v=x.devicePixelRatio;tes=x.devicePixelRatio;v=n?v:1,u=1/v}if(a>=640){r.style.fontSize="40px"}else{if(a<=320){r.style.fontSize="20px"}else{r.style.fontSize=a/320*20+"px"}}}x.addEventListener("resize",function(){w()});w()}(window);
+  </script>
+</head>
+<body>
+  <div id="app"></div>
+</body>
+</html>

+ 16 - 0
frontend_lims/src/mixins/setStateMixin.ts

@@ -0,0 +1,16 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-25 10:28:16
+ * @LastEditTime: 2021-02-25 10:28:29
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\mixins\setStateMixin.ts
+ */
+import assign from 'lodash/assign'
+export default {
+  methods: {
+    setState(state) {
+      assign(this.state, state)
+    }
+  }
+}

+ 11 - 0
frontend_lims/src/pages/accountLogin/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:04
+ * @LastEditTime: 2021-02-27 18:47:28
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\my\index.config.ts
+ */
+export default {
+  navigationBarTitleText: 'LabSense'
+}

+ 110 - 0
frontend_lims/src/pages/accountLogin/index.scss

@@ -0,0 +1,110 @@
+
+.loginHeader{
+  width: 100%;
+  height: 450px;
+  background: url(../../assets/images/login/loginBg.png) center center no-repeat;
+  background-size: 100% 100%;
+  // .imglogin{
+  //   width: 750px;
+  //   height: 100%;
+  // }
+}
+.second{
+  width: 100%;
+  padding: 0 30px;
+  margin-top: -180px;
+  box-sizing: border-box;
+  z-index: 999;
+}
+.loginBox{
+  width: 100%;
+  padding: 90px 60px 0 60px;
+  box-sizing: border-box;
+  height: 640px;
+  background: #FFFFFF;
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
+  opacity: 1;
+  border-radius: 16px;
+  .at-form{
+    position: static;
+    .at-input{
+      position: static;
+    }
+    .at-checkbox{
+      position: static;
+      .at-checkbox__option{
+        padding-left: 0;
+      }
+      .at-checkbox__icon-cnt{
+       width: 24px;
+       min-width: 24px;
+       height: 24px;
+       margin-right: 20px;
+      }
+    }
+  }
+  .loginItem{
+    width: 100%;
+    height: 100px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border-bottom: 1px solid #CDCDCD;
+    .loginItemImgBox{
+      width: 10%;
+      display: flex;
+      align-items: center;
+      .loginItemImg{
+        width: 60px;
+        height: 60px;
+      }
+    }
+    .inputItem{
+      width: 88%;
+    }
+  }
+  .agree{
+    height: 120px;
+    display: flex;
+    align-items: center;
+    .at-checkbox__title{
+      height: 28px;
+      font-size: 20px;
+      font-family: '.PingFang SC';
+      font-weight: 300;
+      color: #CDCDCD;
+    }
+   
+  }
+  .loginBtn{
+    .at-button__text{
+      font-size: 32px;
+      font-family:'.PingFang SC';
+      font-weight: 300;
+      color: #FFFFFF;
+    }
+  }
+  .secondaryBox{
+    width: 50%;
+    margin: 10px auto;
+    .at-button--secondary{
+      border: 1PX solid #FFFFFF;
+      color: #3C6EF0;
+      font-size: 28px;
+    }
+  }
+  
+}
+// 底部
+.loginFooter{
+  position: fixed;
+  width: 70%;
+  height: 440px;
+  left: 0;
+  bottom: 0;
+  // background: url(../../assets/images/login/bgfooter.png) left bottom no-repeat;
+  // background-size: 100% 100%;
+  .bgFooter{
+    width: 100%;
+  }
+}

+ 171 - 0
frontend_lims/src/pages/accountLogin/index.vue

@@ -0,0 +1,171 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-01 16:07:33
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- uerInfo -->
+    <view class="loginHeader">
+      <!-- <image :src='loginBg'
+             class="imglogin" /> -->
+    </view>
+    <view class="second">
+      <view class="loginBox">
+        <AtForm :onSubmit="handleSubmit"
+                :onReset="handleReset">
+          <view class="loginItem">
+            <view class="loginItemImgBox">
+              <image :src="userPng"
+                     class="loginItemImg" />
+            </view>
+            <AtInput required
+                     class="inputItem"
+                     name="account"
+                     type="text"
+                     placeholder="请输入账号"
+                     :value="state.account"
+                     :onChange="handleChange.bind(this, 'account')" />
+          </view>
+          <view class="loginItem">
+            <view class="loginItemImgBox">
+              <image :src="pwdPng"
+                     class="loginItemImg" />
+            </view>
+            <AtInput required
+                     name="password"
+                     class="inputItem"
+                     type="password"
+                     placeholder="请输入密码"
+                     :value="state.password"
+                     :onChange="handleChange.bind(this, 'password')" />
+          </view>
+          <view class="agree">
+            <AtCheckbox :options="[
+                  { label: '登录代表您已同意用户协议及隐私条款', value: '1' }
+                ]"
+                        :selectedList="state.isAgreed"
+                        :onChange="handleChange.bind(this, 'isAgreed')" />
+          </view>
+          <AtButton type="primary"
+                    class="loginBtn"
+                    formType="submit"
+                    :onClick="handleSubmit.bind(this)">
+            登 录
+          </AtButton>
+          <view class="secondaryBox">
+            <AtButton type="secondary"
+                      :onClick="goToPhone.bind(this)">
+              使用验证码登录
+            </AtButton>
+          </view>
+        </AtForm>
+      </view>
+    </view>
+    <AtToast :text="state.text"
+             :isOpened="state.isOpened"></AtToast>
+
+    <view class="loginFooter">
+      <image :src='bgfooter'
+             class="bgFooter" />
+    </view>
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import setStateMixin from '../../mixins/setStateMixin'
+import loginBg from "../../assets/images/login/loginBg.png"
+import bgfooter from "../../assets/images/login/bgfooter.png"
+import userPng from "../../assets/images/login/account.png"
+import pwdPng from "../../assets/images/login/pwd.png"
+export default {
+  name: 'accountLogin',
+  mixins: [setStateMixin],
+  data () {
+    return {
+      userPng,
+      pwdPng,
+      loginBg,
+      bgfooter,
+      state: {
+        account: '',
+        password: '',
+        isAgreed: [],
+        isOpened: false,
+        text: ''
+      }
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    handleChange (stateName, value) {
+      this.setState({
+        [stateName]: value,
+      })
+    },
+    handleSubmit (event) {
+      console.log("event---state", this.state)
+      const { account, password, isAgreed } = this.state
+      if (!account) {
+        this.setState({
+          isOpened: true,
+          text: `账号不能为空`,
+        })
+        this.closeToast()
+        return false
+      }
+      else if (!password) {
+        this.setState({
+          isOpened: true,
+          text: `密码不能为空`,
+        })
+        this.closeToast()
+        return false
+      } else if (isAgreed.length == 0) {
+        this.setState({
+          isOpened: true,
+          text: "请勾选用户协议"
+        })
+        this.closeToast()
+        return false
+      }
+      else {
+        this.$taro.switchTab({
+          url: '/pages/index/index'
+        })
+      }
+    },
+    closeToast () {
+      setTimeout(() => {
+        this.setState({
+          isOpened: false,
+        })
+      }, 2000)
+    },
+
+    handleReset () {
+      console.log('handleReset')
+      this.setState({
+        isOpened: true,
+        text: `表单已被重置`,
+        account: '',
+        password: '',
+        isAgreed: [],
+      })
+      this.closeToast()
+    },
+    // 使用验证码登录
+    goToPhone () {
+      this.$taro.navigateTo({
+        url: '/pages/phoneLogin/index'
+      })
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/addUser/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:02
+ * @LastEditTime: 2021-02-24 18:52:51
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\message\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '用户管理'
+}

+ 25 - 0
frontend_lims/src/pages/addUser/index.scss

@@ -0,0 +1,25 @@
+.addHeader{
+  width: 100%;
+  .at-nav-bar{
+    padding-right: 30px;
+    box-sizing: border-box;
+  }
+}
+.formBox{
+  margin: 20px 0;
+  padding: 0 30px;
+  box-sizing: border-box;
+  background-color: #f7f7f7;
+  .userTitle{
+    width: 100%;
+    height: 60px;
+    line-height: 50px;
+    font-size: 32px;
+  }
+  .formBtnBox{
+    margin-top: 40px;
+    .btn{
+      margin: 20px 0
+    }
+  }
+}

+ 131 - 0
frontend_lims/src/pages/addUser/index.vue

@@ -0,0 +1,131 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-02 11:01:57
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- <view class="addHeader">
+      <AtNavBar :onClickLeftIcon="LeftIconClick"
+                :title="userTitle"
+                leftIconType="chevron-left"
+                color='#646464' />
+    </view> -->
+    <view class="formBox">
+      <view class="userTitle">基本信息</view>
+      <AtForm :onSubmit="handleSubmit"
+              :onReset="handleReset">
+        <AtInput required
+                 name="name"
+                 title="姓名"
+                 type="text"
+                 placeholder="请输入姓名"
+                 :value="state.name"
+                 :onChange="handleChange.bind(this, 'name')" />
+        <AtInput required
+                 name="phone"
+                 title="手机号码"
+                 type="phone"
+                 placeholder="请输入手机号码"
+                 :value="state.phone"
+                 :onChange="handleChange.bind(this, 'phone')" />
+        <view class="formBtnBox">
+
+          <AtButton type="primary"
+                    class="btn"
+                    formType="submit"
+                    :onClick="handleSubmit">
+            提交
+          </AtButton>
+
+          <AtButton formType="reset"
+                    class="btn"
+                    :onClick="handleReset">重置</AtButton>
+
+        </view>
+      </AtForm>
+    </view>
+    <AtToast :text="state.text"
+             :isOpened="state.isOpened"></AtToast>
+
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import setStateMixin from '../../mixins/setStateMixin'
+export default {
+  name: 'userControl',
+  mixins: [setStateMixin],
+  data () {
+    return {
+      userTitle: "新增用户",
+      state: {
+        name: '',
+        phone: '',
+        isOpened: false,
+        text: ''
+      }
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    LeftIconClick () {
+      this.$taro.navigateBack({
+        delta: 1 // 返回上一级页面。
+      });
+    },
+    handleChange (stateName, value) {
+      this.setState({
+        [stateName]: value,
+      })
+    },
+    // 表单 提交
+    handleSubmit () {
+      const { name, phone } = this.state
+      if (!name) {
+        this.setState({
+          isOpened: true,
+          text: `用户名不能为空`,
+        })
+        this.closeToast()
+        return false
+      }
+      if (!phone) {
+        this.setState({
+          isOpened: true,
+          text: `手机号不能为空`,
+        })
+        this.closeToast()
+        return false
+      }
+
+    },
+
+    // 表单重置
+    handleReset () {
+      console.log('handleReset')
+      this.setState({
+        isOpened: true,
+        text: `基本信息已被重置`,
+        name: '',
+        phone: '',
+
+      })
+      this.closeToast()
+    },
+    closeToast () {
+      setTimeout(() => {
+        this.setState({
+          isOpened: false,
+        })
+      }, 2000)
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/bindingEquipment/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:04
+ * @LastEditTime: 2021-02-23 16:43:22
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\my\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '绑定智能设备'
+}

+ 39 - 0
frontend_lims/src/pages/bindingEquipment/index.scss

@@ -0,0 +1,39 @@
+.deviceInfo{
+  width: 100%;
+  height: 340px;
+  padding: 0 30px;
+  box-sizing: border-box;
+  margin-bottom: 25px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  align-items: center;
+}
+.deviceImgBox{
+  width: 256px;
+  height: 256px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background: #FFFFFF;
+  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.16);
+  opacity: 1;
+  border-radius: 128px;
+  margin-top: 20px;
+}
+.deviceId{
+    height: 40px;
+    font-size: 28px;
+    font-family: '.PingFang SC';
+    font-weight: 300;
+    line-height: 18px;
+    color: #646464;
+}
+.deviceBtnBox{
+  width: 100%;
+  padding:  0 30px;
+  box-sizing: border-box;
+  .deviceBtn{
+    margin-top: 40px;
+  }
+}

+ 105 - 0
frontend_lims/src/pages/bindingEquipment/index.vue

@@ -0,0 +1,105 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-02-23 19:56:12
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <view>
+      <AtNavBar :onClickLeftIcon="LeftIconClick.bind(this, '返回')"
+                title="绑定智能设备"
+                leftIconType="chevron-left"
+                color='#646464' />
+    </view>
+    <view class="deviceInfo">
+      <view class="deviceImgBox">
+        <image src="" />
+      </view>
+      <view class="deviceId">智能锁ID:641000001</view>
+    </view>
+    <!-- 设备 -->
+    <view>
+      <AtList>
+        <AtListItem title='存储设备'
+                    arrow='right'
+                    :extraText='deviceName'
+                    :onClick="storageDevice" />
+      </AtList>
+      <AtActionSheet cancelText="取消"
+                     :isOpened="isOpened"
+                     :on-close="handleClose.bind(this,1)"
+                     :onCancel="handleCancel.bind(this,1)">
+        <AtActionSheetItem :onClick="ActionSheetItemClick.bind(this,item)"
+                           v-for="(item,n) in ActionSheetItemArray"
+                           :key="n">
+          <text>{{item.title}}</text>
+        </AtActionSheetItem>
+
+      </AtActionSheet>
+    </view>
+    <!-- 按钮 -->
+    <view class="deviceBtnBox">
+      <AtButton type='primary'
+                class="deviceBtn"
+                size='normal'>保存</AtButton>
+      <AtButton type='secondary'
+                class="deviceBtn"
+                size='normal'>保存并添加</AtButton>
+    </view>
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import itemImg from "../../assets/images/index/slock.png"
+const avatarImg =
+  'http://storage.360buyimg.com/mtd/home/32443566_635798770100444_2113947400891531264_n1533825816008.jpg'
+export default {
+  name: 'my',
+  data () {
+    return {
+      itemImg,
+      isOpened: false,
+      deviceName: "",
+      ActionSheetItemArray: [
+        { title: "一号冰箱" },
+        { title: "二号冰箱" },
+        { title: "三号冰箱" },
+        { title: "四号冰箱" },
+        { title: "五号冰箱" }
+      ]
+
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    LeftIconClick () {
+      this.$taro.navigateBack({
+        delta: 1 // 返回上一级页面。
+      });
+    },
+    storageDevice () {
+      this.isOpened = true
+    },
+    handleClose (name) {
+      this.isOpened = false
+    },
+    handleCancel (item) {
+
+      if (!this.deviceName) {
+        this.deviceName = ""
+      }
+      this.isOpened = false
+    },
+    ActionSheetItemClick (item) {
+      this.isOpened = false
+      this.deviceName = item.title
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/deviceDetail/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-22 11:22:26
+ * @LastEditTime: 2021-02-22 18:47:28
+ * @LastEditors: your name
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\deviceDetail\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '设备详情'
+}

+ 231 - 0
frontend_lims/src/pages/deviceDetail/index.scss

@@ -0,0 +1,231 @@
+.deviceDetail{
+  width: 100%;
+  height: 260px;
+  margin-top: 20px;
+  position: relative;
+  background-color: #3C6EF0;
+  .deviceDetailInfo{
+    width: 100%;
+    height: 210px;
+    padding-left: 76px;
+    box-sizing: border-box;
+    position: absolute;
+    left: 0;
+    top: 0;
+    display: flex;
+    // justify-content: center;
+    align-items: center;
+    .deviceDetailInfoLeft{
+      width: 96px;
+      height: 96px;
+      background: #FFFFFF;
+      box-shadow: 0px 3px 10px rgba(40, 40, 40, 0.16);
+      border-radius: 50%;
+    }
+    .deviceDetailInfoRight{
+      width: 70%;
+      height: 96px;
+      margin-left: 24px;
+      font-family: '.PingFang SC';
+      .dirTop{
+        height: 45px;
+       display: flex;
+       align-items: center;
+       margin-bottom: 16px;
+       .topName{
+        max-width: 45%;
+        overflow:hidden; //超出的文本隐藏
+        text-overflow:ellipsis; //溢出用省略号显示
+        white-space:nowrap; 
+        // height: 45px;
+        font-size: 32px;
+        font-weight: 400;
+        color: #FFFFFF;
+        margin-right: 24px;
+       }
+       .topOnline{
+        width: 68px;
+        text-align: center;
+        height: 28px;
+        line-height: 22px;
+        background: #00D06D;
+        border-radius: 0 10px 0 10px;
+        font-size: 20px;
+        font-family: PingFangSC-Regular;
+        color: #FFFFFF;
+        border: 1px solid rgba(0, 0, 0, 0);
+        box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.04);
+       }
+      }
+      .dirBottom{
+        width: 100%;
+        height: 28px;
+        line-height: 28px;
+        font-size: 20px;
+        font-family: PingFang SC;
+        font-weight: 300;
+        line-height: 18px;
+        color: #ECECEC;
+      }
+    }
+  }
+}
+// 快捷操作
+.shortcuts{
+  margin-top: -50px;
+  z-index: 9999;
+  margin-bottom: 16px;
+  padding: 0 30px;
+  box-sizing: border-box;
+  .shortCard{
+    width: 100%;
+    height: 332px;
+    .at-grid__flex .content-inner__img{
+      width: 128px;
+      height: 128px;
+    }
+    // .content-inner__icon {
+    //   width: 128px;
+    //   height: 128px;
+    //   display: flex;
+    //   justify-content: center;
+    //   align-items: center;
+    //   background: #FFFFFF;
+    //   box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.16);
+    //   border-radius: 50%;
+    //   opacity: 1;
+    // }
+    .content-inner__text{
+      font-size: 28px;
+      font-weight: 300;
+      color: #646464;
+    }
+  }
+  .at-card__header-title{
+    height: 40px;
+    font-size: 28px;
+    font-family: PingFang;
+    font-weight: 400;
+    color: #323232;
+  }
+}
+
+.deviceRecordTab{
+  border-radius: 8px;
+  padding: 0 30px;
+  box-sizing: border-box;
+  z-index: 999;
+  .at-tabs__item{
+    font-size: 28px;
+    color: #969696;
+    padding: 11PX 24PX;
+  }
+  .at-tabs__item--active{
+    color: #3C6EF0;
+  }
+  .at-tabs__item-underline{
+    height: 2Px;
+    margin: auto;
+    right: 0;
+    width: 40%;
+  }
+}
+.taro-tabbar__panel{
+  background-color: #F7F7F7;
+}
+.tab-content {
+  // padding: 100px 50px;
+  width: 100%;
+  min-height: 700px;
+  overflow-y: auto;
+  font-size: 30px;
+  text-align: center;
+  background-color: #F7F7F7;
+  
+  
+}
+.DeviceRecordList{
+  width: 100%;
+}
+.recordItem{
+  width: 100%;
+  height: 156px;
+  margin-top: 20px;
+  padding: 16px 0 16px 28px;
+  
+  background: #FFFFFF;
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
+  box-sizing: border-box;
+  border-radius: 8px;
+  display: flex;
+  align-items: center;
+  .recordItemImg{
+    width: 80px;
+    height: 80px;
+   display: flex;
+   justify-content: center;
+    border: 5px solid rgba(120, 164, 250, 0.4);
+    border-radius: 50%;
+    margin-right: 28px;
+   
+    .slockImg{
+      width: 80px;
+      height: 100%;
+    }
+  }
+}
+//文本
+.recordItemRight{
+  width: 83%;
+  height: auto;
+  text-align: left;
+  .slock{
+    width: 100%;
+    height: 40px;
+    font-size: 28px;
+    text-align: left;
+    display: flex;
+    align-items: center;
+    .slockName{
+      width: 50%;
+      font-family: '.PingFang SC';
+    }
+    .slockNum{
+      width: 50%;
+      height: 40px;
+      display: flex;
+      align-items: center;
+        .numImg{
+          width: 30px;
+          height: 30px;
+          margin-right: 10px;
+        }
+    }
+  }
+  .openMode{
+    width: 100%;
+    height: 36px;
+    font-size: 24px;
+    font-family: '.PingFang SC';
+    font-weight: 300;
+    margin: 10px 0;
+    color: #3C6EF0;
+  }
+  // 开锁人,开锁时间
+  .slockPerTime{
+    width: 100%;
+    height: 40px;
+    font-size: 24px;
+    text-align: left;
+    display: flex;
+    align-items: center;
+    color: #969696;
+    .slockPerson{
+      width: 20%;
+    }
+    .slockTime{
+      width: 60%;
+    }
+  }
+ 
+}

+ 162 - 0
frontend_lims/src/pages/deviceDetail/index.vue

@@ -0,0 +1,162 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-01 18:49:21
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- <view>
+      <AtNavBar :onClickLeftIcon="leftIconClick.bind(this, '返回')"
+                title="设备详情"
+                leftIconType="chevron-left"
+                color='#646464' />
+    </view> -->
+    <view class="deviceDetail">
+      <view class="deviceDetailInfo">
+        <view class="deviceDetailInfoLeft">
+
+        </view>
+        <view class="deviceDetailInfoRight">
+          <view class="dirTop">
+            <view class="topName">一号冰箱</view>
+            <view class="topOnline">在线</view>
+          </view>
+          <view class="dirBottom">2021-02-07 16:00:00</view>
+        </view>
+      </view>
+    </view>
+    <!-- 快捷操作 -->
+    <view class="shortcuts">
+      <AtCard title='快捷操作'
+              class="shortCard">
+        <AtGrid :data="dataGrid"
+                :hasBorder="false"
+                :onClick="GridItemClick" />
+      </AtCard>
+    </view>
+    <!-- 设备 -->
+    <view class="message">
+      <view class="panel">
+        <view class="panel__content">
+          <AtTabs :current="currentTab"
+                  :tabList="tabList"
+                  :onClick="handleClick.bind(this, 'currentTab')"
+                  class="deviceRecordTab">
+            <AtTabsPane :current="currentTab"
+                        :index="0">
+              <view class="tab-content DeviceRecordList">
+                <view class="recordItem"
+                      v-for="(item,index) in recordList"
+                      :key="index">
+                  <view class="recordItemImg">
+                    <image class="slockImg"
+                           :src="slockPng" />
+                  </view>
+                  <view class="recordItemRight">
+                    <!-- 智能锁名称 -->
+                    <view class="slock">
+                      <view class="slockName">五号冰箱智能锁</view>
+                      <view class="slockNum">
+                        <image class="numImg"
+                               :src="numberPng" />
+                        <view>23646113230</view>
+                      </view>
+                    </view>
+                    <!-- 打开方式 -->
+                    <view class="openMode">智能锁已通过扫码方式打开 </view>
+                    <!-- 开锁人,开锁时间 -->
+                    <view class="slockPerTime">
+                      <view class="slockPerson">李磊磊</view>
+                      <view class="slockTime">2021-02-07 16:00:00</view>
+                    </view>
+                  </view>
+                </view>
+              </view>
+            </AtTabsPane>
+            <AtTabsPane :current="currentTab"
+                        :index="1">
+              <view class="tab-content">标签页二的内容</view>
+            </AtTabsPane>
+          </AtTabs>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import numberPng from "../../assets/images/message/number.png"
+import slockPng from '../../assets/images/message/record.png'
+import temporaryPng from "../../assets/images/deviceDetail/temporary.png"
+import openClockPng from "../../assets/images/deviceDetail/slocks.png"
+import devicePng from "../../assets/images/deviceDetail/bindingEquip.png"
+export default {
+  data () {
+    return {
+      slockPng,
+      numberPng,
+      msg: '首页',
+      currentTab: 0,
+      tabList: [
+        { title: '开锁记录' },
+        { title: '报警详情' }
+      ],
+      deviceList: [1, 2, 3, 4],
+      dataGrid: [
+        {
+          image:
+            devicePng
+          ,
+          value: '绑定设备'
+        },
+
+        {
+          image:
+            openClockPng
+          ,
+          value: '开锁'
+        },
+        {
+          image:
+            temporaryPng,
+          value: '临时密码'
+        }
+
+      ],
+      recordList: [1, 2, 3, 4, 5, 6, 7]
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    handleClick (stateName, value) {
+      this[stateName] = value
+    },
+    // 左侧按钮返回
+    leftIconClick () {
+      this.$taro.navigateBack({
+        delta: 1 // 返回上一级页面。
+      });
+    },
+    GridItemClick (value, index) {
+      console.log("dddd--GridItemClick--value", value)
+      console.log("dddd--GridItemClick--index", index)
+      if (value.value == "绑定设备") {
+        this.$taro.navigateTo({
+          url: '/pages/bindingEquipment/index'
+        })
+      } else if (value.value == "临时密码") {
+        this.$taro.navigateTo({
+          url: '/pages/provisionalAuthority/index'
+        })
+      }
+
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/editUser/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:02
+ * @LastEditTime: 2021-03-02 10:57:44
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\message\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '编辑用户'
+}

+ 25 - 0
frontend_lims/src/pages/editUser/index.scss

@@ -0,0 +1,25 @@
+.addHeader{
+  width: 100%;
+  .at-nav-bar{
+    padding-right: 30px;
+    box-sizing: border-box;
+  }
+}
+.formBox{
+  margin: 20px 0;
+  padding: 0 30px;
+  box-sizing: border-box;
+  background-color: #f7f7f7;
+  .userTitle{
+    width: 100%;
+    height: 60px;
+    line-height: 50px;
+    font-size: 32px;
+  }
+  .formBtnBox{
+    margin-top: 40px;
+    .btn{
+      margin: 20px 0
+    }
+  }
+}

+ 135 - 0
frontend_lims/src/pages/editUser/index.vue

@@ -0,0 +1,135 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-02 11:09:23
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- <view class="addHeader">
+      <AtNavBar :onClickLeftIcon="LeftIconClick"
+                :title="userTitle"
+                leftIconType="chevron-left"
+                color='#646464' />
+    </view> -->
+    <view class="formBox">
+      <view class="userTitle">基本信息</view>
+      <AtForm :onSubmit="handleSubmit"
+              :onReset="handleReset">
+        <AtInput required
+                 name="name"
+                 title="姓名"
+                 type="text"
+                 placeholder="请输入姓名"
+                 :value="state.name"
+                 :onChange="handleChange.bind(this, 'name')" />
+        <AtInput required
+                 name="phone"
+                 title="手机号码"
+                 type="phone"
+                 placeholder="请输入手机号码"
+                 :value="state.phone"
+                 :onChange="handleChange.bind(this, 'phone')" />
+        <view class="formBtnBox">
+
+          <AtButton type="primary"
+                    class="btn"
+                    formType="submit"
+                    :onClick="handleSubmit">
+            提交
+          </AtButton>
+          <AtButton formType="reset"
+                    class="btn"
+                    :onClick="handleReset">删除</AtButton>
+
+        </view>
+      </AtForm>
+    </view>
+    <AtToast :text="state.text"
+             :isOpened="state.isOpened"></AtToast>
+
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import setStateMixin from '../../mixins/setStateMixin'
+export default {
+  name: 'userControl',
+  mixins: [setStateMixin],
+  data () {
+    return {
+      userTitle: "新增用户",
+      state: {
+        name: '',
+        phone: '',
+        isOpened: false,
+        text: ''
+      }
+    }
+  },
+  created () {
+    const { id } = this.$taro.getCurrentInstance().router.params
+    console.log("ddddd---", id)
+  },
+  onShow () {
+
+  },
+  onHide () { },
+  methods: {
+    LeftIconClick () {
+      this.$taro.navigateBack({
+        delta: 1 // 返回上一级页面。
+      });
+    },
+    handleChange (stateName, value) {
+      this.setState({
+        [stateName]: value,
+      })
+    },
+    // 表单 提交
+    handleSubmit () {
+      const { name, phone } = this.state
+      if (!name) {
+        this.setState({
+          isOpened: true,
+          text: `用户名不能为空`,
+        })
+        this.closeToast()
+        return false
+      }
+      if (!phone) {
+        this.setState({
+          isOpened: true,
+          text: `手机号不能为空`,
+        })
+        this.closeToast()
+        return false
+      }
+
+    },
+
+    // 表单重置
+    handleReset () {
+      console.log('handleReset')
+      this.setState({
+        isOpened: true,
+        text: `基本信息已被重置`,
+        name: '',
+        phone: '',
+
+      })
+      this.closeToast()
+    },
+    closeToast () {
+      setTimeout(() => {
+        this.setState({
+          isOpened: false,
+        })
+      }, 2000)
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/equipmentAuthorization/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-22 11:22:26
+ * @LastEditTime: 2021-02-24 14:14:03
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\deviceDetail\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '设备授权'
+}

+ 109 - 0
frontend_lims/src/pages/equipmentAuthorization/index.scss

@@ -0,0 +1,109 @@
+.equipment{
+  margin-top: 20px;
+}
+.deviceRecordTab{
+  border-radius: 8px;
+  .at-tabs__item{
+    font-size: 28px;
+    color: #969696;
+    padding: 11PX 24PX;
+  }
+  .at-tabs__item--active{
+    color: #3C6EF0;
+  }
+  .at-tabs__item-underline{
+    height: 2Px;
+    margin: auto;
+    right: 0;
+    width: 40%;
+  }
+}
+.tab-content {
+  // padding: 100px 50px;
+  width: 100%;
+  min-height: 700px;
+  overflow-y: auto;
+  font-size: 30px;
+  text-align: center;
+  background-color: #F7F7F7;
+  
+}
+// 选择智能锁
+.selectSlock{
+  width: 100%;
+  margin-top: 20px;
+  height: auto;
+  .selectSlockHeader{
+    width: 100%;
+    height: 92px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    .selectSlockTitle{
+      height: 50px;
+      line-height: 50px;
+      font-size: 28px;
+      margin-left: 30px;
+      font-family: ".PingFang SC";
+      font-weight: 300;
+      color: #323232;
+    }
+    .btnbox{
+      width: 35%;
+     display: flex;
+    .at-switch{
+      height: 50px;
+      line-height: 50px;
+      background-color: #F7F7F7;
+    }
+    .at-switch__title{
+      margin-right: 25px;
+    }
+    .at-switch__switch{
+      background-color: #F7F7F7;
+    }
+    }
+  }
+}
+// 选择用户
+.selectUser{
+  width: 100%;
+  margin-top: 20px;
+  height: auto;
+  .selectUserHeader{
+    width: 100%;
+    height: 92px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    .selectUserTitle{
+      height: 50px;
+      line-height: 50px;
+      font-size: 28px;
+      margin-left: 30px;
+      font-family: ".PingFang SC";
+      font-weight: 300;
+      color: #323232;
+    }
+    .btnbox{
+      width: 35%;
+     display: flex;
+    .at-switch{
+      height: 50px;
+      line-height: 50px;
+      background-color: #F7F7F7;
+    }
+    .at-switch__title{
+      margin-right: 25px;
+    }
+    .at-switch__switch{
+      background-color: #F7F7F7;
+    }
+    }
+  }
+}
+.saveBox{
+  margin-top: 40px;
+  padding: 0 30px;
+  box-sizing: border-box;
+}

+ 149 - 0
frontend_lims/src/pages/equipmentAuthorization/index.vue

@@ -0,0 +1,149 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-01 19:04:25
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- <view>
+      <AtNavBar :onClickLeftIcon="leftIconClick.bind(this, '返回')"
+                title="设备授权"
+                leftIconType="chevron-left"
+                color='#646464' />
+    </view> -->
+    <!-- 设备授权 -->
+    <view class="equipment">
+      <AtTabs :current="currentTab"
+              :tabList="tabList"
+              :onClick="handleClick.bind(this, 'currentTab')"
+              class="deviceRecordTab">
+        <AtTabsPane :current="currentTab"
+                    :index="0">
+          <view class="tab-content">
+            <view class="selectSlock">
+              <view class="selectSlockHeader">
+                <view class="selectSlockTitle">选择智能锁</view>
+                <view class="btnbox">
+                  <!-- <AtCheckbox :options="checkboxOptionAll"
+                              :selectedList="checkedListAll"
+                              :onChange="handleCheckboxAllChange" /> -->
+                  <!-- <AtRadio :options='radioOption'
+                           :value="radioValue"
+                           :onClick='handleRadioChange.bind(this)' /> -->
+                  <AtSwitch title="全选"
+                            :checked="deviceSwitch"
+                            :onChange="slocksSwitchChange" />
+                </view>
+
+              </view>
+              <AtCheckbox :options="slocksOption"
+                          :selectedList="slocksCheckedList"
+                          :onChange="slocksCheckboxChange" />
+            </view>
+            <view class="selectUser">
+              <view class="selectUserHeader">
+                <view class="selectUserTitle">选择用户</view>
+                <view class="btnbox">
+                  <AtSwitch title="全选"
+                            :checked="userSwitch"
+                            :onChange="usersSwitchChange" />
+                </view>
+
+              </view>
+              <AtCheckbox :options="usersOption"
+                          :selectedList="usersCheckedList"
+                          :onChange="usersCheckboxChange" />
+            </view>
+            <view class="saveBox">
+              <AtButton type='primary'
+                        size='normal'>保 存</AtButton>
+            </view>
+          </view>
+        </AtTabsPane>
+        <AtTabsPane :current="currentTab"
+                    :index="1">
+          <view class="tab-content">标签页二的内容</view>
+        </AtTabsPane>
+      </AtTabs>
+    </view>
+  </view>
+</template>
+
+<script>
+import './index.scss'
+export default {
+  name: 'equipmentAuthorization',
+  data () {
+    return {
+      currentTab: 0,
+      tabList: [
+        { title: '设备授权' },
+        { title: '设备回收' }
+      ],
+      slocksOption: [
+        { value: 'list1', label: '一号冰箱智能锁' },
+        { value: 'list2', label: '二号冰箱智能锁' },
+        { value: 'list3', label: '三号冰箱智能锁' },
+        { value: 'list4', label: '四号冰箱智能锁' },
+      ],
+      usersOption: [
+        { value: '1', label: '张三' },
+        { value: '2', label: '李四' },
+        { value: '3', label: '王五' },
+        { value: '4', label: '赵六' },
+      ],
+      slocksCheckedList: [],
+      usersCheckedList: [],
+      deviceSwitch: false,
+      userSwitch: false
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    handleClick (stateName, value) {
+      this[stateName] = value
+    },
+    // 左侧按钮返回
+    leftIconClick () {
+      this.$taro.navigateBack({
+        delta: 1 // 返回上一级页面。
+      });
+    },
+    // 设备复选框选中
+    slocksCheckboxChange (value) {
+      this.slocksCheckedList = value
+    },
+    //  设备是否全选
+    slocksSwitchChange (value) {
+      if (value) {
+        this.slocksCheckedList = []
+        this.slocksOption.forEach(item => {
+          this.slocksCheckedList.push(item.value)
+        });
+      } else {
+        this.slocksCheckedList = []
+      }
+    },
+    // 用户复选框选中
+    usersCheckboxChange (value) {
+      this.usersCheckedList = value
+    },
+    //  用户是否全选
+    usersSwitchChange (value) {
+      if (value) {
+        this.usersCheckedList = []
+        this.usersOption.forEach(item => {
+          this.usersCheckedList.push(item.value)
+        });
+      } else {
+        this.usersCheckedList = []
+      }
+    },
+  }
+}
+</script>

+ 3 - 0
frontend_lims/src/pages/index/index.config.ts

@@ -0,0 +1,3 @@
+export default {
+  navigationBarTitleText: '首页'
+}

+ 198 - 0
frontend_lims/src/pages/index/index.scss

@@ -0,0 +1,198 @@
+.detail{
+  width: 100%;
+  height: 260px;
+  margin-top: 20px;
+  padding-left: 86px;
+  box-sizing: border-box;
+  position: relative;
+  background: url(../../assets/images/index/bgImg.png) center center no-repeat;
+  background-size: 100% 100%;
+  .hospitalName{
+    width: 100%;
+    height: 45px;
+    margin-top: 50px;
+    margin-bottom: 20px;
+    font-size: 32px;
+    font-family: '.PingFang SC';
+    font-weight: 400;
+    color: #FFFFFF;
+  }
+  .line{
+    width: 110px;
+    height: 0px;
+    border: 1px solid #FFFFFF;
+    margin-bottom: 20px;
+  }
+  .deviceBox{
+    width: 100%;
+    height: 60px;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    
+    .deviceBoxItem{
+      width: 100%;
+      height: 60px;
+     display: flex;
+     align-items: center;
+      font-size: 24px;
+      color: #FFFFFF;
+      opacity: 0.7;
+      .deviceText{
+        font-size: 36px;
+        color: #FFFFFF;
+        margin-left: 10px;
+      }
+    }
+  }
+}
+// 设备
+.device{
+  margin-top: -50px;
+  width: 100%;
+  height: 88px;
+  background: #FFFFFF;
+  opacity: 1;
+  border-radius: 8px;
+  padding: 0 30px;
+  box-sizing: border-box;
+ 
+}
+.deviceTab{
+  border-radius: 8px;
+  z-index: 999;
+
+  .at-tabs__item{
+    font-size: 28px;
+    color: #969696;
+    padding: 11PX 24PX;
+  }
+  .at-tabs__item--active{
+    color: #3C6EF0;
+  }
+  .at-tabs__item-underline{
+    height: 2Px;
+    margin: auto;
+    right: 0;
+    width: 30%;
+  }
+}
+.taro-tabbar__panel{
+  background-color: #F7F7F7;
+}
+.tab-content {
+  // padding: 100px 50px;
+  width: 100%;
+  // min-height: 700px;
+  overflow-y: auto;
+  font-size: 30px;
+  text-align: center;
+  background-color: #F7F7F7;
+  
+}
+.deviceList{
+  width: 100%;
+  display: flex;
+  justify-content: space-between;
+  flex-wrap: wrap;
+  align-content: flex-start;
+  border-radius: 8px;
+}
+// 每一个设备
+.deviceItem{
+  width: 48%;
+  margin-top: 16Px;
+  // background-color: red;
+  border-radius: 10px;
+  
+  box-sizing: border-box;
+  background: #FFFFFF;
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
+  .deviceItemCard{
+    height: 190px;
+    padding-top: 14px;
+    position: relative;
+  }
+ 
+  .at-card__header{
+    border-bottom: 0;
+    padding: 0 24px;
+    text-align: left;
+  }
+}
+
+
+.onOffLine{
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 70px;
+  height: 34px;
+  line-height: 34px;
+  background: #3C6EF0;
+  border: 1px solid rgba(0, 0, 0, 0);
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.04);
+  opacity: 1;
+  font-size: 16px;
+  color: #FFFFFF;
+  border-radius: 0 10px 0 10px;
+}
+.offLine{
+  background: #FF4849;
+  border: 1px solid rgba(0, 0, 0, 0);
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.04);
+}
+// 设备名称
+.deviceName{
+  width: 100%;
+  height: 34px;
+  line-height: 34px;
+  font-weight: 400;
+  text-align: left;
+  color: #323232;
+  margin-bottom: 20px;
+}
+// 温湿度
+.humiture{
+  width: 100%;
+  font-size: 36px;
+  font-family: Roboto;
+  font-weight: 400;
+  color: #3C6EF0;
+  display: flex;
+  align-items: center;
+  margin-bottom: 10px;
+}
+.danger{
+  color: #E1251B;
+}
+.humitureItem{
+  // width: 70Px;
+  height: 43px;
+  line-height: 43px;
+  padding: 0 20px;
+  box-sizing: border-box;
+  text-align: center;
+  border-right:  1Px solid #CDCDCD;
+  .img{
+    width: 26px;
+    height: 36px;
+  }
+}
+.temperature{
+  padding-left: 0;
+}
+// // 图片
+.imgBox{
+  border-right: none;
+}
+// 时间
+.time{
+  width: 100%;
+  height: 33px;
+  font-size: 24px;
+  font-family: '.PingFang SC';
+  font-weight: 300;
+  color: #969696;
+  text-align: left;
+}

+ 113 - 0
frontend_lims/src/pages/index/index.vue

@@ -0,0 +1,113 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-01 15:12:09
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- <view>
+      <AtNavBar :onClickLeftIcon="handleClick.bind(this, '返回')"
+                title="首页"
+                leftIconType="chevron-left"
+                color='#646464' />
+    </view> -->
+    <view class="detail">
+      <view class="hospitalName">山东省立医院</view>
+      <view class="line"></view>
+      <view class="deviceBox">
+        <view class="deviceBoxItem">全部设备 <text class="deviceText">15</text></view>
+        <view class="deviceBoxItem">在线设备<text class="deviceText">10</text></view>
+        <view class="deviceBoxItem">离线设备<text class="deviceText">5</text></view>
+
+      </view>
+    </view>
+    <!-- 设备 -->
+    <view class="device">
+      <view class="panel">
+        <view class="panel__content">
+          <AtTabs :current="currentTab"
+                  :tabList="tabList"
+                  :onClick="handleClick.bind(this, 'currentTab')"
+                  class="deviceTab">
+            <AtTabsPane :current="currentTab"
+                        :index="0">
+              <view class="tab-content deviceList">
+                <view class="deviceItem"
+                      v-for="(item,index) in deviceList"
+                      :key="index">
+                  <AtCard class="deviceItemCard"
+                          title="2号冰箱"
+                          :onClick="deviceItemClick">
+                    <view class="onOffLine">在线</view>
+                    <!-- <view class="deviceName"></view> -->
+                    <!-- 温湿度 -->
+                    <view class="humiture">
+                      <view class="humitureItem temperature">-86℃</view>
+                      <view class="humitureItem">95%</view>
+                      <view class="humitureItem imgBox">
+                        <image class="img"
+                               :src="slockPng" />
+                      </view>
+                    </view>
+                    <!-- 时间 -->
+                    <view class="time">
+                      2021-02-07 16:00:00
+                    </view>
+                  </AtCard>
+                </view>
+
+              </view>
+
+            </AtTabsPane>
+            <AtTabsPane :current="currentTab"
+                        :index="1">
+              <view class="tab-content">标签页二的内容</view>
+            </AtTabsPane>
+            <AtTabsPane :current="currentTab"
+                        :index="2">
+              <view class="tab-content">标签页三的内容</view>
+            </AtTabsPane>
+          </AtTabs>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import slockPng from '../../assets/images/index/slock.png'
+export default {
+  data () {
+    return {
+      slockPng,
+      msg: '首页',
+
+      currentTab: 0,
+      tabList: [
+        { title: '全部' },
+        { title: '在线' },
+        { title: '离线' }
+      ],
+      deviceList: [1, 2, 3, 4]
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    handleClick (stateName, value) {
+      this[stateName] = value
+    },
+    deviceItemClick () {
+      console.log("设备详情点击---item",)
+      this.$taro.navigateTo({
+        url: '/pages/deviceDetail/index'
+      })
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/message/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:02
+ * @LastEditTime: 2021-02-22 18:47:49
+ * @LastEditors: your name
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\message\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '开锁记录'
+}

+ 143 - 0
frontend_lims/src/pages/message/index.scss

@@ -0,0 +1,143 @@
+.recordTab{
+  border-radius: 8px;
+  z-index: 999;
+  .at-tabs__header{
+    width: 88%;
+  }
+  .at-tabs__item{
+    font-size: 28px;
+    color: #969696;
+    padding: 11PX 24PX;
+  }
+  .at-tabs__item--active{
+    color: #3C6EF0;
+  }
+  .at-tabs__item-underline{
+    height: 2Px;
+    margin: auto;
+    right: 0;
+    width: 40%;
+  }
+}
+.taro-tabbar__panel{
+  background-color: #F7F7F7;
+}
+.tab-content {
+  // padding: 100px 50px;
+  width: 100%;
+  min-height: 700px;
+  overflow-y: auto;
+  font-size: 30px;
+  text-align: center;
+  background-color: #F7F7F7;
+  
+  
+}
+.recordList{
+  width: 100%;
+  padding: 0 30px;
+  box-sizing: border-box;
+
+}
+.recordItem{
+  width: 100%;
+  height: 156px;  
+  margin-top: 20px;
+  padding: 16px 0 16px 28px;
+  
+  background: #FFFFFF;
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
+  box-sizing: border-box;
+  border-radius: 8px;
+  display: flex;
+  align-items: center;
+  .recordItemImg{
+    width: 80px;
+    height: 80px;
+    // line-height: 90px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    // border: 5px solid rgba(120, 164, 250, 0.4);
+    // border-radius: 50%;
+    margin-right: 28px;
+    // text-align: center;
+    .slockImg{
+      width: 80px;
+      height:100%;
+    }
+  }
+}
+//文本
+.recordItemRight{
+  width: 83%;
+  height: auto;
+  text-align: left;
+  .slock{
+    width: 100%;
+    height: 40px;
+    font-size: 28px;
+    text-align: left;
+    display: flex;
+    align-items: center;
+    .slockName{
+      width: 50%;
+      
+      font-family: '.PingFang SC';
+    }
+    .slockNum{
+      width: 50%;
+      height: 40px;
+      display: flex;
+      align-items: center;
+        .numImg{
+          width: 30px;
+          height: 30px;
+          margin-right: 10px;
+        }
+    }
+  }
+  .openMode{
+    width: 100%;
+    height: 36px;
+    font-size: 24px;
+    font-family: '.PingFang SC';
+    font-weight: 300;
+    margin: 10px 0;
+    color: #3C6EF0;
+  }
+  // 开锁人,开锁时间
+  .slockPerTime{
+    width: 100%;
+    height: 40px;
+    font-size: 24px;
+    text-align: left;
+    display: flex;
+    align-items: center;
+    color: #969696;
+    .slockPerson{
+      width: 20%;
+    }
+    .slockTime{
+      width: 60%;
+    }
+  }
+ 
+}
+.fabBtn{
+  position: fixed;
+  right: 0;
+  top: 0px;
+  .at-fab{
+    border-radius: 50% 0 0 50%;
+    height: 88px;
+    width: 90px;
+    display: flex;
+    justify-content: center;
+    align-self: center;
+    .fabBtnImg{
+      width: 40px;
+      height: 44px;
+    }
+  }
+}

+ 121 - 0
frontend_lims/src/pages/message/index.vue

@@ -0,0 +1,121 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-01 18:52:38
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- <view>
+      <AtNavBar :onClickLeftIcon="handleClick.bind(this, '返回')"
+                title="开锁记录"
+                leftIconType="chevron-left"
+                rightFirstIconType='bell'
+                :onClickRgIconSt="iconClick"
+                color='#646464' />
+    </view> -->
+    <view class="message">
+      <view class="panel">
+        <view class="panel__content">
+          <AtTabs :current="currentTab"
+                  :tabList="tabList"
+                  :onClick="handleClick.bind(this, 'currentTab')"
+                  class="recordTab">
+            <AtTabsPane :current="currentTab"
+                        :index="0">
+              <view class="tab-content recordList">
+                <view class="recordItem"
+                      v-for="(item,index) in recordList"
+                      :key="index">
+                  <view class="recordItemImg">
+                    <image class="slockImg"
+                           :src="slockPng" />
+                  </view>
+                  <view class="recordItemRight">
+                    <!-- 智能锁名称 -->
+                    <view class="slock">
+                      <view class="slockName">五号冰箱智能锁</view>
+                      <view class="slockNum">
+                        <image class="numImg"
+                               :src="numberPng" />
+                        <view>23646113230</view>
+                      </view>
+                    </view>
+                    <!-- 打开方式 -->
+                    <view class="openMode">智能锁已通过扫码方式打开 </view>
+                    <!-- 开锁人,开锁时间 -->
+                    <view class="slockPerTime">
+                      <view class="slockPerson">李磊磊</view>
+                      <view class="slockTime">2021-02-07 16:00:00</view>
+                    </view>
+                  </view>
+                </view>
+              </view>
+            </AtTabsPane>
+            <AtTabsPane :current="currentTab"
+                        :index="1">
+              <view class="tab-content">标签页二的内容</view>
+            </AtTabsPane>
+            <AtTabsPane :current="currentTab"
+                        :index="2">
+              <view class="tab-content">标签页三的内容</view>
+            </AtTabsPane>
+          </AtTabs>
+          <view class="fabBtn">
+            <AtFab :onClick='onButtonClick.bind(this)'>
+              <image :src="mesWarn"
+                     class="fabBtnImg"></image>
+            </AtFab>
+          </view>
+
+        </view>
+      </view>
+    </view>
+
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import numberPng from "../../assets/images/message/number.png"
+import slockPng from '../../assets/images/message/record.png'
+import mesWarn from "../../assets/images/message/mesWarn.png"
+export default {
+  data () {
+    return {
+      slockPng,
+      mesWarn,
+      numberPng,
+      msg: '消息',
+      currentTab: 0,
+      tabList: [
+        { title: '全部' },
+        { title: '近7天' },
+        { title: '近1个月' }
+      ],
+      recordList: [1, 2, 3, 4]
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    handleClick (stateName, value) {
+      this[stateName] = value
+    },
+    iconClick () {
+      this.$taro.navigateTo({
+        url: '/pages/warning/index'
+      })
+    },
+    onButtonClick () {
+      // console.log("浮动按钮被点击了")
+      this.$taro.navigateTo({
+        url: '/pages/warning/index'
+      })
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/my/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:04
+ * @LastEditTime: 2021-02-22 18:47:57
+ * @LastEditors: your name
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\my\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '我的'
+}

+ 138 - 0
frontend_lims/src/pages/my/index.scss

@@ -0,0 +1,138 @@
+
+.myHeader{
+  width: 100%;
+  height: 150px;
+  background: #3C6EF0;
+  box-shadow: 0px 3px 20px rgba(0, 0, 0, 0.16);
+  opacity: 1;
+  border-radius: 0px 0px 60px 60px;
+  .at-nav-bar{
+    background: #3C6EF0;
+    position: static;   
+  }
+  .at-nav-bar__title{
+    color: #FFF;
+  }
+  .at-nav-bar__left-view .at-icon{
+    font-size: 28Px;
+    color: #FFF;
+  }
+}
+// banner 图
+.banner{
+  width: 100%;
+  height: 210px;
+  padding: 0 30px;
+  margin-top: -60px;
+  box-sizing: border-box;
+  overflow: hidden;
+}
+taro-swiper-core{
+  width: 100%;
+  height: 105Px !important;
+  border-radius: 10px;
+  overflow: hidden;
+}
+
+.slide-image{
+  height: 105Px !important;
+  width: 100%;
+}
+// 个人信息
+.uerInfo{
+  width: 100%;
+  height: 130px;
+  padding: 0 30px;
+  box-sizing: border-box;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+ 
+}
+.left{
+  width: 50%;
+  display: flex;
+  .at-avatar--small{
+    width: 80px;
+    height: 80px;
+  }
+  .taro-img__mode-scaletofill{
+    width: 100%;
+    height: auto;
+  }
+  .subitem{
+    margin-left: 30px;
+  }
+  .user{
+    width: 70%;
+    font-weight: 300;
+    color: #646464;
+    text-align: center;
+  }
+  .userName{
+    font-size: 32px;
+  }
+  .slockNums{
+    font-size: 24px;
+  }
+}
+.right{
+  width: 50%; 
+  display: flex;
+  // .at-button--small{
+  //   min-width: auto !important;
+  //   height: 60px;
+  //   line-height: 55px;
+  //   background: #3C6EF0;
+  //   opacity: 1;
+  //   font-size: 24px;
+  //   border-radius: 30px;
+  // }
+}
+// 列表
+.list{
+  width: 100%;
+  height: auto;
+  .listItem{
+    width: 100%;
+    height: 100px;
+    // line-height: 100px;
+    padding: 0 20px 0 60px; 
+    box-sizing: border-box;
+    font-size: 28px;
+    background-color:#FFF;
+    border-bottom: 1px solid #eee;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    
+    .textInfo{
+      display: flex;
+      .listImg{
+        width: 46px;
+        height: 46px;
+        margin-right: 30px;
+        .images{
+          width: 46px !important;
+        height: 46px !important;
+        }
+        .text{
+          font-size: 28px;
+          font-weight: 300;
+          color: #323232;
+          font-family: '.PingFang SC';
+        }
+       
+      }
+    }
+    .icon{
+      // width: 48px !important;
+      // height: 48px;  
+      // background-color: red;
+      .at-icon-chevron-right::before{
+        font-size: 48px;
+      }
+     
+    }
+  }
+}

+ 179 - 0
frontend_lims/src/pages/my/index.vue

@@ -0,0 +1,179 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-02 14:49:56
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <view class="myHeader">
+      <!-- <AtNavBar :onClickLeftIcon="handleClick.bind(this, '返回')"
+                title="我的"
+                leftIconType="chevron-left"
+                color='#646464' /> -->
+    </view>
+    <view class="banner">
+      <swiper indicatorColor="#999"
+              indicatorActiveColor="#333"
+              :current="current"
+              :duration="duration"
+              :interval="interval"
+              circular
+              indicatorDots>
+        <swiper-item v-for="(item, idx) in imgUrls"
+                     :key="idx">
+          <image :src="item"
+                 class="slide-image" />
+        </swiper-item>
+      </swiper>
+    </view>
+    <!-- uerInfo -->
+    <view class="uerInfo">
+      <view class="left">
+        <view class="subitem">
+          <AtAvatar circle
+                    size="small"
+                    :image="avatarImg"></AtAvatar>
+        </view>
+        <view class="user">
+          <view class="userName">林安安</view>
+          <view class="slockNums">8个智能锁</view>
+        </view>
+      </view>
+      <view class="right">
+        <AtButton type='primary'
+                  size='small'
+                  circle
+                  :onClick="equipmentAuthorization">设备授权</AtButton>
+        <AtButton type='primary'
+                  size='small'
+                  circle
+                  :onClick="userControl">用户管理</AtButton>
+      </view>
+    </view>
+    <view class="list">
+      <AtList>
+        <AtListItem v-for="(item,index) in atList"
+                    :key="index"
+                    :title='item.title'
+                    :onClick="listItemClick.bind(this,index)"
+                    arrow='right'
+                    :thumb='item.thumb' />
+      </AtList>
+    </view>
+    <AtFloatLayout title="这是个标题"
+                   :onClose="handleClose.bind(this)">
+      这是内容区 随你怎么写这是内容区 随你怎么写这是内容区 随你怎么写这是内容区
+      随你怎么写这是内容区 随你怎么写这是内容区 随你怎么写
+    </AtFloatLayout>
+    <view style="margin-top:20px">
+      <AtButton type='primary'
+                :onClick="loginClick.bind(this)">登录页面</AtButton>
+    </view>
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import itemImg from "../../assets/images/index/slock.png"
+import aboutLab from "../../assets/images/my/aboutLab.png"
+import help from "../../assets/images/my/help.png"
+import userAgreement from "../../assets/images/my/userAgreement.png"
+import privacy from "../../assets/images/my/privacy.png"
+import bannerPng from "../../assets/images/my/banner.png"
+const avatarImg =
+  'http://storage.360buyimg.com/mtd/home/32443566_635798770100444_2113947400891531264_n1533825816008.jpg'
+export default {
+  name: 'my',
+  data () {
+    return {
+      avatarImg,
+      aboutLab,
+      bannerPng,
+      userAgreement,
+      privacy,
+      help,
+      isOpened: false,
+      itemImg,
+      current: 1,
+      duration: 500,
+      interval: 5000,
+      imgUrls: [
+        'https://img10.360buyimg.com/babel/s700x360_jfs/t25855/203/725883724/96703/5a598a0f/5b7a22e1Nfd6ba344.jpg!q90!cc_350x180',
+        bannerPng
+      ],
+      atList: [
+        {
+          title: "关于LabSOP",
+          thumb: aboutLab
+        },
+        {
+          title: "帮助与反馈",
+          thumb: help
+        },
+        {
+          title: "用户协议",
+          thumb: userAgreement
+        },
+        {
+          title: "隐私政策",
+          thumb: privacy
+        }
+      ]
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    handleClick (stateName, value) {
+      this[stateName] = value
+    },
+    equipmentAuthorization () {
+
+      this.$taro.navigateTo({
+        url: '/pages/equipmentAuthorization/index'
+      })
+    },
+    // 用户管理
+    userControl () {
+      this.$taro.navigateTo({
+        url: '/pages/userControl/index'
+      })
+    },
+    listItemClick (e) {
+      console.log("ddddd--eeeeee", e)
+      // console.log("ddddd--eeeeee2222222", e2)
+      // this.isOpened = true
+      if (e == 0) {
+        this.$taro.navigateTo({
+          url: '/pages/myBox/aboutLabsop/index'
+        })
+      } else if (e == 1) {
+        this.$taro.navigateTo({
+          url: '/pages/myBox/helpAndBack/index'
+        })
+      }
+      else if (e == 2) {
+        this.$taro.navigateTo({
+          url: '/pages/myBox/userAgreement/index'
+        })
+      } else if (e == 3) {
+        this.$taro.navigateTo({
+          url: '/pages/myBox/privacyPolicy/index'
+        })
+      }
+    },
+    loginClick () {
+      this.$taro.navigateTo({
+        url: '/pages/accountLogin/index'
+      })
+    },
+    handleClose () {
+
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/myBox/aboutLabsop/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-27 09:30:39
+ * @LastEditTime: 2021-02-27 19:15:25
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\userAgreement\userAagreement.ts
+ */
+export default {
+  navigationBarTitleText: '关于LabSOP'
+}

+ 38 - 0
frontend_lims/src/pages/myBox/aboutLabsop/index.scss

@@ -0,0 +1,38 @@
+.aboutLab{
+  margin: 0 30px;
+  padding: 24px 28px;
+  box-sizing: border-box;
+  font-family: '.PingFang SC';
+  background-color: #fff;
+  border-radius: 8px;
+  .privacyDate{
+    width: 100%;
+    height: 50px;
+    line-height: 50px;
+    text-align: right;
+    font-size: 28px;
+    color: #646464;
+  }
+  .labTextContent{
+    font-size: 28px;
+    font-weight: 300;
+    line-height: 40px;
+    color: #646464;
+    text-indent: 48px;
+  }
+  .textSecondTitle{
+    font-size: 24px;
+    font-weight: 400;
+    line-height: 42px;
+    color: #323232;
+    
+  }
+  .textTitle{
+    height: 42px;
+    font-size: 28px;
+    font-weight: 400;
+    line-height: 42px;
+    color: #323232;
+    margin: 30px 0 10px 0
+  }
+}

+ 32 - 0
frontend_lims/src/pages/myBox/aboutLabsop/index.vue

@@ -0,0 +1,32 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-27 09:28:49
+ * @LastEditTime: 2021-03-02 14:26:01
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\userAgreement\userAgreement.vue
+-->
+<template>
+  <view class="page">
+    <view class="aboutLab">
+      <view class="labTextContent">
+        大数华创 LabSOP 综合管理平台,适用于细胞制备及应用、基因测序与生物诊疗、生物制药、生物样本库、实验室监控等产业,为医学研究、
+        个性化治疗、药物研究、样本存储及研究等业务板块提供流程化、标准化、系统化操作管理系统,打造基于行业法规的实验室全流程质量控制及生产过程管理系统,
+        实现实验室“人、机、料、法、环”关键环节管理。</view>
+    </view>
+  </view>
+</template>
+<script>
+import "./index.scss"
+export default {
+  data () {
+    return {
+
+    }
+  },
+  methods: {
+
+  }
+}
+</script>
+

+ 11 - 0
frontend_lims/src/pages/myBox/helpAndBack/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-27 09:30:39
+ * @LastEditTime: 2021-02-27 19:15:25
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\userAgreement\userAagreement.ts
+ */
+export default {
+  navigationBarTitleText: '关于LabSOP'
+}

+ 44 - 0
frontend_lims/src/pages/myBox/helpAndBack/index.scss

@@ -0,0 +1,44 @@
+.aboutLab{
+  margin: 0 30px;
+  padding: 24px 28px;
+  box-sizing: border-box;
+  font-family: '.PingFang SC';
+  background-color: #fff;
+  border-radius: 8px;
+  .privacyDate{
+    width: 100%;
+    height: 50px;
+    line-height: 50px;
+    text-align: right;
+    font-size: 28px;
+    color: #646464;
+  }
+  .labTextContent{
+    font-size: 28px;
+    font-weight: 300;
+    line-height: 40px;
+    color: #646464;
+    text-indent: 48px;
+  }
+  .textSecondTitle{
+    font-size: 24px;
+    font-weight: 400;
+    line-height: 42px;
+    color: #323232;
+    
+  }
+  .textTitle{
+    height: 42px;
+    font-size: 28px;
+    font-weight: 400;
+    line-height: 42px;
+    color: #323232;
+    margin: 30px 0 10px 0
+  }
+  .labTextPhone{
+    width: 100%;
+    margin-top: 20px;
+    text-align: center;
+    font-size: 28px;
+  }
+}

+ 31 - 0
frontend_lims/src/pages/myBox/helpAndBack/index.vue

@@ -0,0 +1,31 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-27 09:28:49
+ * @LastEditTime: 2021-03-02 14:51:07
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\userAgreement\userAgreement.vue
+-->
+<template>
+  <view class="page">
+    <view class="aboutLab">
+      <view class="labTextContent">
+        如需帮助,请联系您的【大数华创】专属售后支持人员或者拨打官方售后电话</view>
+      <view class="labTextPhone">4006-129-186</view>
+    </view>
+  </view>
+</template>
+<script>
+import "./index.scss"
+export default {
+  data () {
+    return {
+
+    }
+  },
+  methods: {
+
+  }
+}
+</script>
+

+ 11 - 0
frontend_lims/src/pages/myBox/privacyPolicy/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-27 09:30:39
+ * @LastEditTime: 2021-02-27 15:11:50
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\userAgreement\userAagreement.ts
+ */
+export default {
+  navigationBarTitleText: '隐私政策'
+}

+ 38 - 0
frontend_lims/src/pages/myBox/privacyPolicy/index.scss

@@ -0,0 +1,38 @@
+.privacyPolicy{
+  margin: 0 30px;
+  padding: 24px 28px;
+  box-sizing: border-box;
+  font-family: '.PingFang SC';
+  background-color: #fff;
+  border-radius: 8px;
+  .privacyDate{
+    width: 100%;
+    height: 50px;
+    line-height: 50px;
+    text-align: right;
+    font-size: 24px;
+    color: #646464;
+  }
+  .textContent{
+    font-size: 24px;
+    font-weight: 300;
+    line-height: 32px;
+    color: #646464;
+    text-indent: 48px;
+  }
+  .textSecondTitle{
+    font-size: 24px;
+    font-weight: 400;
+    line-height: 42px;
+    color: #323232;
+    
+  }
+  .textTitle{
+    height: 42px;
+    font-size: 28px;
+    font-weight: 400;
+    line-height: 42px;
+    color: #323232;
+    margin: 30px 0 10px 0
+  }
+}

+ 76 - 0
frontend_lims/src/pages/myBox/privacyPolicy/index.vue

@@ -0,0 +1,76 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-27 09:28:49
+ * @LastEditTime: 2021-03-01 19:02:52
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\userAgreement\userAgreement.vue
+-->
+<template>
+  <view class="page">
+    <view class="privacyPolicy">
+      <view class="privacyDate">本隐私政策生效日期:2021年1月1日</view>
+      <view class="textContent">
+        青岛大数华创科技有限公司(以下可称为“本公司”或“我们”)非常尊重用户信息的保护,在您使用本公司平台提供的服务时,我们将按照本隐私政策收集、使用及共享您的信息。本隐私政策包含了我们收集、存储、使用、共享和保护您的信息的条款,我们希望通过本隐私政策向您清晰地介绍我们对您的信息的处理方式,因此我们建议您完整地阅读本隐私政策,以帮助您了解维护自己隐私权的方式。如您对本隐私政策有任何疑问,您可以通过本公司公布的联系方式与我们联系。如果您不同意本隐私政策任何内容,您应停止使用本公司服务。当您使用本公司服务时,即表示您已同意我们按照本隐私政策来合法使用和保护您的信息。</view>
+      <view class="textTitle">一、适用范围</view>
+      <view class="textContent">
+        为用户提供更好、更优、更个性化的服务是本公司坚持不懈的追求。本隐私政策适用于本公司提供的各项服务,您登陆系统平台、使用本公司提供的服务,包括但不限于:我们提供系统平台、网站、及不断创新研发的产品及服务。
+        如您使用本公司提供的某项或某几项服务有其单独的隐私政策的,该等服务对应的隐私政策将与本隐私政策一起构成一份完整的本公司隐私政策。
+        需要特别说明的是,本隐私政策不适用于展示在、链接到或再封装我们的服务的那些适用其他的隐私政策、并由第三方提供的服务。虽然第三方展示在、链接到或再封装我们的服务,但我们并不了解或控制其行为,因此也不为其行为负责;在您已查看并接受其隐私政策之前,请谨慎访问或使用其服务。
+      </view>
+      <view class="textTitle">二、我们如何收集信息</view>
+      <view class="textContent">我们收集信息是为了向您提供更好、更优、更个性化的服务,我们收集信息的方式如下:</view>
+      <view class="textSecondTitle">1、您向我们提供的信息</view>
+      <view class="textContent">当您开通本公司服务及您在使用本公司提供的相关服务及产品时填写、提交或接入的信息,包括您的姓名、联系电话、电子邮箱、通讯地址、企业信息、产品信息、您使用过程中产生的相关数据等。</view>
+      <view class="textSecondTitle">2、在您使用服务过程中收集的信息</view>
+      <view class="textContent"> 为了确保操作环境安全,识别账号异常状态等用途,我们会收集您对我们产品或服务使用方式的信息,并将这些信息进行关联,这些信息包括:</view>
+      <view class="textSecondTitle">(1)账号信息</view>
+      <view class="textContent">当您使用我们的平台账号或服务时,我们会自动收集您对我们服务的使用情况及数据信息。我们将基于本公司数据服务合法采集的数据,以及通过其他合法渠道获得的数据,通过汇聚、清洗、计算等处理方式构建庞大的数据库,并基于此数据库构建数据智能平台。该平台通过数据加智能引擎服务的方式进行产品评估,帮助优化系统产品和产品使用效果。</view>
+      <view class="textSecondTitle">(2)其他信息</view>
+      <view class="textContent">除上述信息外,我们还可能为了提供服务及改进服务质量的合理需要而收集您的其他信息,包括您与我们的客户服务团队联系时提供的相关信息,您参与问卷调查时向我们发送的问卷答复信息。</view>
+
+      <view class="textTitle">三、我们如何使用信息</view>
+      <view class="textContent">我们使用收集来的信息是为了向您提供服务及提升服务质量,为了实现这一目的,我们会把您的信息用于下列用途:</view>
+      <view class="textSecondTitle">1、向您提供本公司各项服务,并维护、改进这些服务。</view>
+      <view class="textSecondTitle">2、我们可能使用您的信息以预防、发现、调查欺诈、侵权、危害安全、非法或违反与我们的协议、政策或规则的行为,以保护您或我们的合法权益。</view>
+      <view class="textSecondTitle">4、我们可能会将来自某项服务的信息与来自其他服务的信息结合起来,用于为了给您提供更加个性化的服务使用。</view>
+      <view class="textSecondTitle"> 5、联系您解决问题。</view>
+      <view class="textSecondTitle">6、经您许可的其他用途。</view>
+      <view class="textTitle">四、 我们如何共享信息</view>
+      <view class="textContent">
+        我们对您的信息承担保密义务,不会为满足第三方的营销或非法目的而向其出售或出租您的信息。除下列情况外,我们不会与任何第三方共享您的信息:</view>
+      <view class="textSecondTitle">1、事先获得您的同意或授权。</view>
+      <view class="textSecondTitle">2、根据法律法规的规定或行政或司法机构的要求。</view>
+      <view class="textSecondTitle">3、如您是知识产权投诉人并已提起投诉,应被投诉人要求,向被投诉人披露,以便双方处理可能的权利纠纷。</view>
+      <view class="textSecondTitle">4、只有共享您的信息,才能提供您需要的服务,或处理您与他人的纠纷或争议。</view>
+
+      <view class="textTitle">五、您的信息保护</view>
+      <view class="textContent">为了保障您的信息安全,我们将按照行业通行标准、努力采取合理的物理、电子和管理方面的安全措施来保护您的信息,并尽最大合理努力使您的信息不会被泄漏、毁损或者丢失,包括但不限于信息加密存储、数据中心的访问控制。您信息的访问权限仅限于为根据本隐私政策完成工作任务或进行技术维护工作需要处理您信息的人员。
+        我们收集的信息保存于不向公众开放的安全运行环境之中。为避免未经授权访问您的信息,我们将其保存在有防火墙保护并可能加密的服务器之中。但是,没有任何系统是绝对安全的,请您理解在信息网络上不存在“完善的安全措施”。即使我们做出了很大努力,仍有可能无法杜绝对您的信息的非法访问。此外,由于无法判断他人的陈述是否属实,我们可能会被不可靠的、有误导性的或非法的信息所蒙蔽。
+        如果您或您的最终用户不接受本隐私政策并提供我们所要求的信息,那么您将无法使用我们的服务或使用我们提供的全部功能。但您需要了解,提供该信息意味着您已经充分理解这些信息可能会有被盗、非法拥有或滥用的风险,以及由此带来的您的人身安全、财产和声誉等方面的损失。</view>
+      <view class="textTitle">六、本隐私政策的修订</view>
+      <view class="textContent">
+        我们可能适时会对本隐私政策进行调整或变更,本隐私政策的任何更新将以标注更新时间的方式公布在本公司系统平台上,除法律法规或监管规定另有强制性规定外,经调整或变更的内容一经通知或公布后的7日后生效。如您在隐私政策调整或变更后继续使用本公司提供的任一服务或使用系统账号的,我们相信这代表您已充分阅读、理解并接受修改后的隐私政策并受其约束。
+      </view>
+      <view class="textTitle">七、联系我们</view>
+      <view class="textContent">如果您对本隐私政策有任何问题、建议或投诉,您可以通过以下方式反馈我们:</view>
+      <view class="textSecondTitle"> 1. 邮箱:dashoo@dashoo.cn</view>
+      <view class="textSecondTitle">2. 电话:400 6129 186</view>
+      <view class="textSecondTitle">3. 网站留言:http://www.dashoo.cn/</view>
+    </view>
+  </view>
+</template>
+<script>
+import "./index.scss"
+export default {
+  data () {
+    return {
+
+    }
+  },
+  methods: {
+
+  }
+}
+</script>
+

+ 11 - 0
frontend_lims/src/pages/myBox/userAgreement/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-27 09:30:39
+ * @LastEditTime: 2021-02-27 14:28:13
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\userAgreement\userAagreement.ts
+ */
+export default {
+  navigationBarTitleText: '用户协议'
+}

+ 30 - 0
frontend_lims/src/pages/myBox/userAgreement/index.scss

@@ -0,0 +1,30 @@
+.userAgree{
+  margin: 0 30px;
+  padding: 24px 28px;
+  box-sizing: border-box;
+  font-family: '.PingFang SC';
+  background-color: #fff;
+  border-radius: 8px;
+  .usersTextContent{
+    font-size: 24px;
+    font-weight: 300;
+    line-height: 32px;
+    color: #646464;
+    text-indent: 48px;
+  }
+  .usersTextSecondTitle{
+    font-size: 24px;
+    font-weight: 400;
+    line-height: 42px;
+    color: #646464;
+    
+  }
+  .usersTextTitle{
+    height: 42px;
+    font-size: 28px;
+    font-weight: 400;
+    line-height: 42px;
+    color: #323232;
+    margin: 30px 0 10px 0
+  }
+}

+ 70 - 0
frontend_lims/src/pages/myBox/userAgreement/index.vue

@@ -0,0 +1,70 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-27 09:28:49
+ * @LastEditTime: 2021-02-27 15:51:00
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\userAgreement\userAgreement.vue
+-->
+<template>
+  <view class="page">
+    <view class="userAgree">
+      <view class="usersTextContent">请务必认真阅读和理解本《用户协议》(以下简称声明)中规定的所有权和限制。除非您接受本《声明》条款,否则您无权访问和使用本软件产品。用户可以自由选择是否使用本软件产品。</view>
+      <view class="usersTextTitle">一、适用范围</view>
+      <view class="usersTextContent">
+        权利声明本“软件”的一切知识产权,以及与“ 软件”相关的所有信息内容,包括但不限于:文字表述及其组合、图标、图饰、图像、图表、色彩、界面设计、版面框架、有关数据、附加程序、印刷材料或电子文档等均为本公司所有, 受著作权法和国际著作权条约以及其他知识产权法律法规的保护。
+      </view>
+      <view class="usersTextTitle">二、许可范围</view>
+      <view class="usersTextContent">本声明适用于本公司与您约定提供的各项服务。</view>
+      <view class="usersTextTitle">三、权利限制</view>
+      <view class="usersTextContent">禁止反向工程、反向编译和反向汇编:用户不得对本软件产品进行反向工程(reverse engineer)、反向编译 (decompile)或反向汇编(disassemble),同时不得改动编译在程序文件内部的任何资源。除法律、法规明文规定允许上述活动外,用户必须遵守此声明限制。用户不得复制、分发和传播本软件,包括所有有关本软件产品的软件电子文档,版权和商标,亦包括本声明。</view>
+      <view class="usersTextTitle">四、 软件使用</view>
+      <view class="usersTextSecondTitle">1、 软件的修改和升级:本公司保留为用户提供本软件的修改、升级版本的权利。</view>
+      <view class="usersTextSecondTitle">2、 本软件不含有任何旨在破坏用户计算机数据和获取用户隐私信息的恶意代码,不含有任何跟踪、监视用户计算机的功能代码,
+        不会监控用户网上、网下的行为,不会收集用户使用其它软件、文档等信息,不会泄漏用户隐私。</view>
+      <view class="usersTextSecondTitle">3、 用户应在遵守法律及本声明的前提下使用本软件。用户无权实施包括但不限于下列行为:
+        不得删除或者改变本软件上的所有权利管理电子信息;不得故意避幵或者破坏著作权人为保护本软件著作权而采取的技术措施;
+        用户不得利用本软件误导、欺骗他人;违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行;
+        未经允许,进入计算机信息网络或者使用计算机信息网络资源;未经允许,对计算机信息网络功能进行删除、修改或者增加的;未经允许,
+        对计算机信息网络中存储、处理或者传输的数据和应用程序进行删除、修改或者增加;破坏本软件系统的正常运行,故意传播计算机病毒等破坏性程序;
+        其他任何危害计算机网络安全的。</view>
+      <view class="usersTextSecondTitle">4、 对于从非本公司指定网站使用本软件产品以及从非本公司发行的介质上获得的本软件产品,
+        本公司无法保证该软件是否感染计算机病毒、是否隐藏有伪装的特洛伊木马程序或者黑客软件,
+        使用此类软件,将可能导致不可预测的风险,建议用户不要轻易使用,本公司不承担任何由此产生的一切法律责任。</view>
+      <view class="usersTextTitle">五、免责与责任限制</view>
+      <view class="usersTextSecondTitle">
+        1、 本软件经过详细的测试,但不能保证软件完全没有错误。如果出现错误的情况,用户可以将情况报告本公司,获得技术支持。</view>
+      <view class="usersTextSecondTitle">2、 使用本软件风险由用户自行承担,在适用法律允许的最大范围内,对因使用或不能使用本软件所产生的损害及风险,包括但不限于直接或间接的个人损害、商业赢利的丧失、贸易中断、商业信息的丢失或任何其它经济损失,本公司不承担任何责任。</view>
+      <view class="usersTextSecondTitle"> 3、 对于因电信系统或互联网网络故障、计算机故障或病毒、信息损坏或丢失、
+        计算机系统问题或其它任何不可抗力原因而产生损失,本公司不承担任何责任。</view>
+      <view class="usersTextSecondTitle">4、 用户违反本声明规定,对本公司公司造成损害的。本公司有权采取包括但不限于中断使用许可、停止提供服务、限制使用、法律追究等措施。</view>
+      <view class="usersTextTitle">六、法律及争议解决</view>
+
+      <view class="usersTextSecondTitle"> 1、 本声明适用中华人民共和国法律。</view>
+      <view class="usersTextSecondTitle">2、 因本声明引起的或与本声明有关的任何争议,各方应友好协商解决;协商不
+        成的,任何一方均可将有关争议提交至青岛仲裁委员会并按照其届时有效的仲裁规则仲裁;仲裁裁决是终局的,对各方均有约束力。
+      </view>
+      <view class="usersTextTitle">七、其它条款</view>
+      <view class="usersTextSecondTitle">1、 如果本声明中的任何条款无论因何种原因完全或部分无效或不具有执行力,或违反任何适用的法律,则该条款被视为删除,但本声明的其余条款仍应有效并且约束力。</view>
+      <view class="usersTextSecondTitle"> 2、 本公司有权根据有关法律、法规的变化以及公司经营状况和经营策略的调整等修改本声明。修改后的声明会随附于新版本软件。当发生有关争议时,以最新的 声明文本为准。如果不同意改动的内容,用户可以自行放弃使用本软件。如果用户继续使用本软件,则视为您接受本声明的变动。</view>
+      <view class="usersTextSecondTitle"> 3、 本声明的一切解释权与修改权归本公司所有。</view>
+
+       
+
+    </view>
+  </view>
+</template>
+<script>
+import "./index.scss"
+export default {
+  data () {
+    return {
+
+    }
+  },
+  methods: {
+
+  }
+}
+</script>
+

+ 12 - 0
frontend_lims/src/pages/phoneLogin/index.config.ts

@@ -0,0 +1,12 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:04
+ * @LastEditTime: 2021-02-27 19:11:34
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\my\index.config.ts
+ */ 
+// import Taro from '@tarojs/taro'
+export default {
+  navigationBarTitleText: 'LabSense'
+}

+ 102 - 0
frontend_lims/src/pages/phoneLogin/index.scss

@@ -0,0 +1,102 @@
+
+.loginHeader{
+  width: 100%;
+  height: 450px;
+  // background: url(../../assets/images/login/loginBg.png) center center no-repeat;
+  // background-size: 100% 100%;
+  .imglogin{
+    width: 100%;
+    height: 100%;
+  }
+}
+.second{
+  width: 100%;
+  padding: 0 30px;
+  margin-top: -180px;
+  box-sizing: border-box;
+  z-index: 999;
+}
+.loginBox{
+  width: 100%;
+  padding: 90px 60px 0 60px;
+  box-sizing: border-box;
+  height: 640px;
+  background: #FFFFFF;
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
+  opacity: 1;
+  border-radius: 16px;
+  .at-form{
+    position: static;
+    .at-input{
+      position: static;
+    }
+    .at-checkbox{
+      position: static;
+      .at-checkbox__option{
+        padding-left: 0;
+      }
+      .at-checkbox__icon-cnt{
+       width: 24px;
+       min-width: 24px;
+       height: 24px;
+       margin-right: 20px;
+      }
+    }
+  }
+  .loginItem{
+    width: 100%;
+    height: 100px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border-bottom: 1px solid #CDCDCD;
+    .loginItemImgBox{
+      width: 10%;
+      display: flex;
+      align-items: center;
+      .loginItemImg{
+        width: 60px;
+        height: 60px;
+      }
+    }
+    .inputItem{
+      width: 88%;
+    }
+  }
+  .agree{
+    height: 120px;
+    display: flex;
+    align-items: center;
+    .at-checkbox__title{
+      height: 28px;
+      font-size: 20px;
+      font-family: '.PingFang SC';
+      font-weight: 300;
+      color: #CDCDCD; 
+    }
+   
+  }
+  .secondaryBox{
+    width: 50%;
+    margin: 10px auto;
+    .at-button--secondary{
+      border: 1PX solid #FFFFFF;
+      color: #3C6EF0;
+      font-size: 28px;
+    }
+  }
+  
+}
+// 底部
+.loginFooter{
+  position: fixed;
+  width: 70%;
+  height: 440px;
+  left: 0;
+  bottom: 0;
+  // background: url(../../assets/images/login/bgfooter.png) left bottom no-repeat;
+  // background-size: 100% 100%;
+  .bgFooter{
+    width: 100%;
+  }
+}

+ 217 - 0
frontend_lims/src/pages/phoneLogin/index.vue

@@ -0,0 +1,217 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-01 14:00:50
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- uerInfo -->
+    <view class="loginHeader">
+      <image :src='loginBg'
+             class="imglogin" />
+    </view>
+    <view class="second">
+      <view class="loginBox">
+        <AtForm :onSubmit="handleSubmit"
+                :onReset="handleReset">
+          <view class="loginItem">
+            <view class="loginItemImgBox">
+              <image :src="phonePng"
+                     class="loginItemImg" />
+            </view>
+            <AtInput required
+                     class="inputItem"
+                     name="account"
+                     type="phone"
+                     placeholder="请输入手机号"
+                     :value="state.account"
+                     :onChange="handleChange.bind(this, 'account')" />
+          </view>
+          <view class="loginItem">
+            <view class="loginItemImgBox">
+              <image :src="pwdPng"
+                     class="loginItemImg" />
+            </view>
+            <AtInput name="password"
+                     :border="false"
+                     type="phone"
+                     clear
+                     placeholder="请输入验证码"
+                     :value="state.password"
+                     :onChange="handleChange.bind(this, 'password')">
+            </AtInput>
+            <view>
+              <AtButton type="secondary"
+                        size="small"
+                        :disabled="state.isDisabled"
+                        :onClick="sendCode.bind(this)">
+                {{sentTitle}}
+              </AtButton>
+            </view>
+          </view>
+          <view class="agree">
+            <AtCheckbox :options="[
+                  { label: '登录代表您已同意用户协议及隐私条款', value: '1' }
+                ]"
+                        :selectedList="state.isAgreed"
+                        :onChange="handleChange.bind(this, 'isAgreed')" />
+          </view>
+          <AtButton type="primary"
+                    formType="submit"
+                    :onClick="handleSubmit">
+            登 录
+          </AtButton>
+          <view class="secondaryBox">
+            <AtButton type="secondary"
+                      :onClick="goToAccount.bind(this)">
+              使用账户密码登录
+            </AtButton>
+          </view>
+        </AtForm>
+      </view>
+    </view>
+    <AtToast :text="state.text"
+             :isOpened="state.isOpened"></AtToast>
+    <view class="loginFooter">
+      <image :src='bgfooter'
+             class="bgFooter" />
+    </view>
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import setStateMixin from '../../mixins/setStateMixin'
+import loginBg from "../../assets/images/login/loginBg.png"
+import bgfooter from "../../assets/images/login/bgfooter.png"
+import phonePng from "../../assets/images/login/phone.png"
+import pwdPng from "../../assets/images/login/pwd.png"
+import { compressImage } from '@tarojs/taro'
+export default {
+  name: 'accountLogin',
+  mixins: [setStateMixin],
+  data () {
+    return {
+      phonePng,
+      pwdPng,
+      loginBg,
+      bgfooter,
+      state: {
+        account: '',
+        password: '',
+        isAgreed: [],
+        isDisabled: false,
+        second: 10,
+        isOpened: false,
+        text: ''
+      },
+      sentTitle: '获取验证码'
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    handleChange (stateName, value) {
+      this.setState({
+        [stateName]: value,
+      })
+    },
+    // showTipText () {
+    //   return this.state.disabled ? `${this.state.second}s后重试` : '发送验证码'
+    // },
+
+    // 发送验证码
+    sendCode () {
+      if (!this.state.isDisabled) {
+        this.setState({
+          isDisabled: true,
+        })
+        console.log("ddd==this.state", this.state.isDisabled)
+        // 倒计时
+        const timer = setInterval(() => {
+          console.log("倒计时--")
+          if (this.state.second > 0) {
+            this.sentTitle = `${this.state.second}s后重试`
+            this.setState({
+              second: this.state.second - 1,
+            })
+
+          } else {
+            this.setState({
+              second: 60,
+              isDisabled: false,
+            })
+            this.sentTitle = "获取验证码"
+            clearInterval(timer)
+          }
+        }, 1000)
+      } else {
+        this.sentTitle = "获取验证码"
+      }
+
+    },
+    handleSubmit () {
+      const { account, password, isAgreed } = this.state
+      if (!account) {
+        this.setState({
+          isOpened: true,
+          text: `手机号不能为空`,
+        })
+        this.closeToast()
+        return false
+      }
+      if (!password) {
+        this.setState({
+          isOpened: true,
+          text: `验证码不能为空`,
+        })
+        this.closeToast()
+        return false
+      }
+      else if (isAgreed.length == 0) {
+        this.setState({
+          isOpened: true,
+          text: "请勾选用户协议"
+        })
+        this.closeToast()
+        return false
+      } else {
+        this.$taro.switchTab({
+          url: '/pages/index/index'
+        })
+      }
+
+    },
+
+    closeToast () {
+      setTimeout(() => {
+        this.setState({
+          isOpened: false,
+        })
+      }, 2000)
+    },
+
+    handleReset () {
+      console.log('handleReset')
+      this.setState({
+        isOpened: true,
+        text: `表单已被重置`,
+        account: '',
+        password: '',
+        isAgreed: [],
+      })
+      this.closeToast()
+    },
+    // 使用验证码登录
+    goToAccount () {
+      this.$taro.navigateTo({
+        url: '/pages/accountLogin/index'
+      })
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/provisionalAuthority/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:04
+ * @LastEditTime: 2021-02-23 16:43:22
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\my\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '临时开锁授权'
+}

+ 142 - 0
frontend_lims/src/pages/provisionalAuthority/index.scss

@@ -0,0 +1,142 @@
+.authority{
+  width: 100%;
+  padding: 0 30px;
+  box-sizing: border-box;
+}
+.authorityItem{
+  width: 100%;
+  height: 170px;
+  margin-top: 20px;
+  background: #FFFFFF;
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
+  padding-left: 30px;
+  box-sizing: border-box;
+  border-radius: 8px;
+  display: flex;
+  align-items: center;
+  .authorityItemImg{
+    // width: 96px;
+    // height: 96px;
+    // background: #FFFFFF;
+    // box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
+    opacity: 1;
+    border-radius: 50%;
+    margin-right: 28px;
+    text-align: center;
+    .auproSlockImg{
+      width: 80px;
+      height: auto;
+    }
+  }
+}
+//文本
+.authorityItemRight{
+  width: 83%;
+  height: auto;
+  text-align: left;
+  .auproSlock{
+    width: 100%;
+    height: 40px;
+    font-size: 28px;
+    text-align: left;
+    display: flex;
+    align-items: center;
+    .auproSlockName{
+      width: 30%;
+      font-family: '.PingFang SC';
+    }
+    .auproSlockNum{
+      width: 40%;
+      display: flex;
+      align-items: center;
+      margin-right: 20px;
+      .num{
+        line-height: 30px;
+        margin-right: 10px;
+        .numImg{
+          width: 30px;
+          height: 30px;
+        }
+      }
+    }
+    .onOffLine{
+      width: 70px;
+      height: 34px;
+      line-height: 34px;
+      background: #3C6EF0;
+      border: 1px solid rgba(0, 0, 0, 0);
+      box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.04);
+      opacity: 1;
+      font-size: 16px;
+      text-align: center;
+      color: #FFFFFF;
+      border-radius: 0 10px 0 10px;
+    }
+  }
+  .offline{
+    width: 100%;
+    height: 36px;
+    font-size: 24px;
+    font-family: '.PingFang SC';
+    font-weight: 300;
+    margin: 10px 0;
+    color: #FF4849;
+  }
+  // 开锁人,开锁时间
+  .auproSlockPerTime{
+    width: 100%;
+    height: 40px;
+    font-size: 24px;
+    text-align: left;
+    display: flex;
+    align-items: center;
+    color: #969696;
+    .auproSlockTime{
+      // width: 50%;
+      margin-right: 20px;
+    }
+    .auproSlocked{
+      width: 84px;
+      height: 28px;
+      background: #FFFFFF;
+      border: 1px solid #3C6EF0;
+      opacity: 1;
+      border-radius: 8px;
+      text-align: center;
+      // width: 60px;
+      // height: 27px;
+      font-size: 20px;
+      font-family: PingFangSC-Regular;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      color: #3C6EF0;
+    }
+  }
+ 
+}
+.selectDate{
+    height: 92px;
+    background: #FFFFFF;
+    border-color: #FFFFFF;
+}
+.authorityTime{
+  margin-top: 36px;
+  width: 100%;
+  padding: 0 30px;
+  box-sizing: border-box;
+  height: 40px;
+  font-size: 28px;
+  font-family: '.PingFang SC';
+  font-weight: 300;
+  line-height: 18px;
+  color: #323232;
+}
+.deviceBtnBox{
+  width: 100%;
+  padding:  0 30px;
+  box-sizing: border-box;
+  .deviceBtn{
+    margin-top: 40px;
+  }
+}

+ 118 - 0
frontend_lims/src/pages/provisionalAuthority/index.vue

@@ -0,0 +1,118 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-01 17:56:50
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- <view>
+      <AtNavBar :onClickLeftIcon="LeftIconClick.bind(this, '返回')"
+                title="临时开锁授权"
+                leftIconType="chevron-left"
+                color='#646464' />
+    </view> -->
+
+    <view class="authority">
+      <view class="authorityItem">
+        <view class="authorityItemImg">
+          <image class="auproSlockImg"
+                 :src="warnRecord" />
+        </view>
+        <view class="authorityItemRight">
+          <!-- 智能锁名称 -->
+          <view class="auproSlock">
+            <view class="auproSlockName">五号冰箱</view>
+            <view class="auproSlockNum">
+              <view class="num">
+                <image class="numImg"
+                       :src="numberPng" />
+              </view>
+              <view>23646113230</view>
+            </view>
+            <view class="onOffLine">在线</view>
+          </view>
+          <!-- 开锁人,开锁时间 -->
+          <view class="auproSlockPerTime">
+            <view class="auproSlockTime">2021-02-07 16:00:00</view>
+            <view class="auproSlocked">已锁上</view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <!-- 授权时间 -->
+    <view class="authorityTime">临时授权使用时间</view>
+    <!-- 选择日期 -->
+    <view class="selectDate">
+      <AtInput name='chooseDate'
+               title='选择日期'
+               type='text'
+               placeholder='请选择日期'
+               :value="chooseDate"
+               :onFocus="selectDateChange.bind(this,'chooseDate')" />
+    </view>
+
+    <AtFloatLayout :isOpened="isOpened"
+                   title="选择日期"
+                   :onClose="FloatLayoutClose.bind(this)">
+      <AtCalendar :onSelectDate="handleDateChange"
+                  isMultiSelect
+                  :currentDate="multiCurentDate" />
+    </AtFloatLayout>
+
+    <view class="deviceBtnBox">
+      <AtButton type='primary'
+                class="deviceBtn"
+                size='normal'>授权</AtButton>
+    </view>
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import itemImg from "../../assets/images/index/slock.png"
+import numberPng from "../../assets/images/message/number.png"
+import warnRecord from '../../assets/images/message/warn-record.png'
+export default {
+  name: 'provisionalAuthority',
+  data () {
+    return {
+      itemImg,
+      numberPng,
+      warnRecord,
+      isOpened: false,
+      chooseDate: "",
+      multiCurentDate: {},
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    LeftIconClick () {
+      this.$taro.navigateBack({
+        delta: 1 // 返回上一级页面。
+      });
+    },
+    selectDateChange () {
+      this.isOpened = true
+    },
+    handleClose (name) {
+      this.isOpened = false
+    },
+    FloatLayoutClose () {
+      this.isOpened = false
+    },
+    handleDateChange (value) {
+      if (value.value.end != undefined) {
+        this.multiCurentDate = value.value
+        this.chooseDate = value.value.start + " 至 " + value.value.end
+        this.isOpened = false
+      }
+    }
+  }
+}
+</script>

+ 11 - 0
frontend_lims/src/pages/userControl/index.config.ts

@@ -0,0 +1,11 @@
+/*
+ * @Author: your name
+ * @Date: 2021-02-19 15:36:02
+ * @LastEditTime: 2021-02-24 18:52:51
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\message\index.config.ts
+ */
+export default {
+  navigationBarTitleText: '用户管理'
+}

+ 33 - 0
frontend_lims/src/pages/userControl/index.scss

@@ -0,0 +1,33 @@
+.userHeader{
+  width: 100%;
+}
+.userControlBox{
+  width: 100%;
+  height: calc(100vh - 100px);
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  
+  .userBox{
+    margin-top: 20px;
+    height: calc(100vh - 260px);
+    background-color: #fff;
+    overflow-y: auto;
+  }
+  .btnBox{
+    width: 100%;
+    height: 100px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    .at-button--secondary{
+      height: 100px;
+      border-color: transparent;
+      background-color: transparent;
+      .imgBox{
+        height: 96px;
+        width: 96px;
+      }
+    }
+  }
+}

+ 131 - 0
frontend_lims/src/pages/userControl/index.vue

@@ -0,0 +1,131 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-02-19 11:59:48
+ * @LastEditTime: 2021-03-02 11:06:13
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \intelligentLock\src\pages\index\index.vue
+-->
+<template>
+  <view class="page">
+    <!-- <view class="userHeader">
+      <AtNavBar :onClickLeftIcon="LeftIconClick"
+                title="用户管理"
+                leftIconType="chevron-left"
+                rightFirstIconType='add-circle'
+                :onClickRgIconSt="addClick"
+                color='#646464' />
+    </view> -->
+    <view class="userControlBox">
+      <view class="userBox">
+        <AtList>
+          <AtListItem v-for="(item,index) in userList"
+                      :title='item.title'
+                      :key="index"
+                      :extraText="item.status == '1' ? '在线' : '离线 '"
+                      arrow='right'
+                      :onClick="atListItemClick.bind(this,item)" />
+
+        </AtList>
+      </view>
+      <view class="btnBox">
+        <AtButton type='secondary'
+                  size='small'
+                  :onClick="addClick">
+          <image :src="addPng"
+                 class="imgBox" />
+          <!-- <AtIcon prefixClass='fa'
+                  class="iconAt"
+                  value='add-circle'
+                  size='30'
+                  color='#F00'></AtIcon> -->
+        </AtButton>
+
+      </view>
+    </view>
+
+  </view>
+</template>
+
+<script>
+import './index.scss'
+import addPng from "../../assets/images/my/add.png"
+export default {
+  name: 'userControl',
+  data () {
+    return {
+      addPng,
+      userList: [
+        {
+          id: 1,
+          title: "张三",
+          status: '1'
+        },
+        {
+          id: 2,
+          title: "李四",
+          status: '1'
+        },
+        {
+          id: 3,
+          title: "王五",
+          status: '0'
+        },
+        {
+          id: 4,
+          title: "赵六",
+          status: '0'
+        },
+        {
+          id: 5,
+          title: "张三",
+          status: '1'
+        },
+        {
+          id: 6,
+          title: "李四",
+          status: '1'
+        },
+        {
+          id: 7,
+          title: "王五",
+          status: '0'
+        },
+        {
+          id: 9,
+          id: 8,
+          title: "赵六",
+          status: '0'
+        },
+        {
+          id: 10,
+          title: "张三",
+          status: '1'
+        }
+      ]
+    }
+  },
+  created () { },
+  onShow () { },
+  onHide () { },
+  methods: {
+    LeftIconClick () {
+      this.$taro.navigateBack({
+        delta: 1 // 返回上一级页面。
+      });
+    },
+    // 列表每一项点击
+    atListItemClick (item) {
+      console.log("列表项被点击了", item)
+      this.$taro.navigateTo({
+        url: '/pages/editUser/index?id=' + item.id
+      })
+    },
+    addClick () {
+      this.$taro.navigateTo({
+        url: '/pages/addUser/index'
+      })
+    }
+  }
+}
+</script>

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov