Merge branch 'main' into production
							
								
								
									
										8
									
								
								TODOs.md
									
									
									
									
									
								
							
							
						
						@@ -40,10 +40,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# IP 配置
 | 
					# IP 配置
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					develop
 | 
				
			||||||
内网穿透:106.75.217.14
 | 
					内网穿透:106.75.217.14
 | 
				
			||||||
nacos:106.75.217.14
 | 
					nacos:http://106.75.217.14:8488/nacos/index.html
 | 
				
			||||||
数据库:本地
 | 
					数据库:本地
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					production
 | 
				
			||||||
 | 
					nacos:http://106.75.217.14:8488/nacos/index.html
 | 
				
			||||||
 | 
					数据库:服务器上
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# QCloud
 | 
					# QCloud
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -56,6 +61,7 @@ SecretKey 22sVt494mGZeV7sQkqwxnNjneHesqXxA
 | 
				
			|||||||
# 门禁端网页
 | 
					# 门禁端网页
 | 
				
			||||||
 | 
					
 | 
				
			||||||
https://epp.only4.work/access/index.html
 | 
					https://epp.only4.work/access/index.html
 | 
				
			||||||
 | 
					https://epp-prod.only4.work/access/index.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +0,0 @@
 | 
				
			|||||||
# http://editorconfig.org
 | 
					 | 
				
			||||||
root = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[*]
 | 
					 | 
				
			||||||
indent_style = space
 | 
					 | 
				
			||||||
indent_size = 2
 | 
					 | 
				
			||||||
charset = utf-8
 | 
					 | 
				
			||||||
trim_trailing_whitespace = true
 | 
					 | 
				
			||||||
insert_final_newline = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[*.md]
 | 
					 | 
				
			||||||
trim_trailing_whitespace = false
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
// ESLint 检查 .vue 文件需要单独配置编辑器:
 | 
					 | 
				
			||||||
// https://eslint.vuejs.org/user-guide/#editor-integrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  "extends": ["taro/vue3"]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										6
									
								
								miniprogram/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,6 +0,0 @@
 | 
				
			|||||||
dist/
 | 
					 | 
				
			||||||
deploy_versions/
 | 
					 | 
				
			||||||
.temp/
 | 
					 | 
				
			||||||
.rn_temp/
 | 
					 | 
				
			||||||
node_modules/
 | 
					 | 
				
			||||||
.DS_Store
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
// babel-preset-taro 更多选项和默认值:
 | 
					 | 
				
			||||||
// https://github.com/NervJS/taro/blob/next/packages/babel-preset-taro/README.md
 | 
					 | 
				
			||||||
module.exports = {
 | 
					 | 
				
			||||||
  presets: [
 | 
					 | 
				
			||||||
    ['taro', {
 | 
					 | 
				
			||||||
      framework: 'vue3',
 | 
					 | 
				
			||||||
      ts: false
 | 
					 | 
				
			||||||
    }]
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
module.exports = {
 | 
					 | 
				
			||||||
  env: {
 | 
					 | 
				
			||||||
    NODE_ENV: '"development"'
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  defineConstants: {
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  mini: {},
 | 
					 | 
				
			||||||
  h5: {}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,83 +0,0 @@
 | 
				
			|||||||
const config = {
 | 
					 | 
				
			||||||
  projectName: '社区疫情防控系统',
 | 
					 | 
				
			||||||
  date: '2022-11-21',
 | 
					 | 
				
			||||||
  designWidth: 750,
 | 
					 | 
				
			||||||
  deviceRatio: {
 | 
					 | 
				
			||||||
    640: 2.34 / 2,
 | 
					 | 
				
			||||||
    750: 1,
 | 
					 | 
				
			||||||
    828: 1.81 / 2
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  sourceRoot: 'src',
 | 
					 | 
				
			||||||
  outputRoot: `dist/${process.env.TARO_ENV}`,
 | 
					 | 
				
			||||||
  plugins: [],
 | 
					 | 
				
			||||||
  defineConstants: {
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  copy: {
 | 
					 | 
				
			||||||
    patterns: [
 | 
					 | 
				
			||||||
      { from: 'src/image/', to: `dist/${process.env.TARO_ENV}/image/`, ignore: ['*.js'] }, // 指定需要 copy 的目录
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    options: {
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  framework: 'vue3',
 | 
					 | 
				
			||||||
  compiler: 'webpack5',
 | 
					 | 
				
			||||||
  cache: {
 | 
					 | 
				
			||||||
    enable: true // Webpack 持久化缓存配置,建议开启。默认配置请参考:https://docs.taro.zone/docs/config-detail#cache
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  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',
 | 
					 | 
				
			||||||
    postcss: {
 | 
					 | 
				
			||||||
      autoprefixer: {
 | 
					 | 
				
			||||||
        enable: true,
 | 
					 | 
				
			||||||
        config: {
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      cssModules: {
 | 
					 | 
				
			||||||
        enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
 | 
					 | 
				
			||||||
        config: {
 | 
					 | 
				
			||||||
          namingPattern: 'module', // 转换模式,取值为 global/module
 | 
					 | 
				
			||||||
          generateScopedName: '[name]__[local]___[hash:base64:5]'
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  rn: {
 | 
					 | 
				
			||||||
    appName: 'taroDemo',
 | 
					 | 
				
			||||||
    postcss: {
 | 
					 | 
				
			||||||
      cssModules: {
 | 
					 | 
				
			||||||
        enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = function (merge) {
 | 
					 | 
				
			||||||
  if (process.env.NODE_ENV === 'development') {
 | 
					 | 
				
			||||||
    return merge({}, config, require('./dev'))
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return merge({}, config, require('./prod'))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,37 +0,0 @@
 | 
				
			|||||||
module.exports = {
 | 
					 | 
				
			||||||
  env: {
 | 
					 | 
				
			||||||
    NODE_ENV: '"production"'
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  defineConstants: {
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  mini: {},
 | 
					 | 
				
			||||||
  h5: {
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * WebpackChain 插件配置
 | 
					 | 
				
			||||||
     * @docs https://github.com/neutrinojs/webpack-chain
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    // webpackChain (chain) {
 | 
					 | 
				
			||||||
    //   /**
 | 
					 | 
				
			||||||
    //    * 如果 h5 端编译后体积过大,可以使用 webpack-bundle-analyzer 插件对打包体积进行分析。
 | 
					 | 
				
			||||||
    //    * @docs https://github.com/webpack-contrib/webpack-bundle-analyzer
 | 
					 | 
				
			||||||
    //    */
 | 
					 | 
				
			||||||
    //   chain.plugin('analyzer')
 | 
					 | 
				
			||||||
    //     .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //   /**
 | 
					 | 
				
			||||||
    //    * 如果 h5 端首屏加载时间过长,可以使用 prerender-spa-plugin 插件预加载首页。
 | 
					 | 
				
			||||||
    //    * @docs https://github.com/chrisvfritz/prerender-spa-plugin
 | 
					 | 
				
			||||||
    //    */
 | 
					 | 
				
			||||||
    //   const path = require('path')
 | 
					 | 
				
			||||||
    //   const Prerender = require('prerender-spa-plugin')
 | 
					 | 
				
			||||||
    //   const staticDir = path.join(__dirname, '..', 'dist')
 | 
					 | 
				
			||||||
    //   chain
 | 
					 | 
				
			||||||
    //     .plugin('prerender')
 | 
					 | 
				
			||||||
    //     .use(new Prerender({
 | 
					 | 
				
			||||||
    //       staticDir,
 | 
					 | 
				
			||||||
    //       routes: [ '/pages/index/index' ],
 | 
					 | 
				
			||||||
    //       postProcess: (context) => ({ ...context, outputPath: path.join(staticDir, 'index.html') })
 | 
					 | 
				
			||||||
    //     }))
 | 
					 | 
				
			||||||
    // }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										39502
									
								
								miniprogram/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						@@ -1,73 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "name": "epp",
 | 
					 | 
				
			||||||
  "version": "1.0.0",
 | 
					 | 
				
			||||||
  "private": true,
 | 
					 | 
				
			||||||
  "description": "基于微服务的社区疫情防控系统",
 | 
					 | 
				
			||||||
  "templateInfo": {
 | 
					 | 
				
			||||||
    "name": "default",
 | 
					 | 
				
			||||||
    "typescript": false,
 | 
					 | 
				
			||||||
    "css": "none"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "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.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/helper": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/plugin-framework-vue3": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/plugin-platform-alipay": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/plugin-platform-jd": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/plugin-platform-qq": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/plugin-platform-swan": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/plugin-platform-tt": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/plugin-platform-weapp": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/router": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/runtime": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/shared": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/taro": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/taro-h5": "3.5.7",
 | 
					 | 
				
			||||||
    "blueimp-md5": "^2.19.0",
 | 
					 | 
				
			||||||
    "vue": "^3.0.0"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "devDependencies": {
 | 
					 | 
				
			||||||
    "@babel/core": "^7.8.0",
 | 
					 | 
				
			||||||
    "@tarojs/cli": "3.5.7",
 | 
					 | 
				
			||||||
    "@tarojs/webpack5-runner": "3.5.7",
 | 
					 | 
				
			||||||
    "@types/webpack-env": "^1.13.6",
 | 
					 | 
				
			||||||
    "@vue/babel-plugin-jsx": "^1.0.6",
 | 
					 | 
				
			||||||
    "@vue/compiler-sfc": "^3.0.0",
 | 
					 | 
				
			||||||
    "babel-preset-taro": "3.5.7",
 | 
					 | 
				
			||||||
    "css-loader": "3.4.2",
 | 
					 | 
				
			||||||
    "eslint": "^8.12.0",
 | 
					 | 
				
			||||||
    "eslint-config-taro": "3.5.7",
 | 
					 | 
				
			||||||
    "eslint-plugin-vue": "^8.0.0",
 | 
					 | 
				
			||||||
    "style-loader": "1.3.0",
 | 
					 | 
				
			||||||
    "stylelint": "^14.4.0",
 | 
					 | 
				
			||||||
    "vue-loader": "^17.0.0",
 | 
					 | 
				
			||||||
    "webpack": "5.69.0"
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "enableAppxNg": true,
 | 
					 | 
				
			||||||
  "enableNodeModuleBabelTransform": true,
 | 
					 | 
				
			||||||
  "miniprogramRoot": "./"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,32 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "miniprogramRoot": "dist/weapp/",
 | 
					 | 
				
			||||||
    "projectname": "epp",
 | 
					 | 
				
			||||||
    "description": "基于微服务的社区疫情防控系统",
 | 
					 | 
				
			||||||
    "appid": "wx332e2e578f09873a",
 | 
					 | 
				
			||||||
    "setting": {
 | 
					 | 
				
			||||||
        "urlCheck": true,
 | 
					 | 
				
			||||||
        "es6": false,
 | 
					 | 
				
			||||||
        "enhance": false,
 | 
					 | 
				
			||||||
        "compileHotReLoad": false,
 | 
					 | 
				
			||||||
        "postcss": false,
 | 
					 | 
				
			||||||
        "minified": true,
 | 
					 | 
				
			||||||
        "babelSetting": {
 | 
					 | 
				
			||||||
            "ignore": [],
 | 
					 | 
				
			||||||
            "disablePlugins": [],
 | 
					 | 
				
			||||||
            "outputPath": ""
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "ignoreUploadUnusedFiles": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "compileType": "miniprogram",
 | 
					 | 
				
			||||||
    "libVersion": "2.27.1",
 | 
					 | 
				
			||||||
    "srcMiniprogramRoot": "dist/weapp/",
 | 
					 | 
				
			||||||
    "packOptions": {
 | 
					 | 
				
			||||||
        "ignore": [],
 | 
					 | 
				
			||||||
        "include": []
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "condition": {},
 | 
					 | 
				
			||||||
    "editorSetting": {
 | 
					 | 
				
			||||||
        "tabIndent": "auto",
 | 
					 | 
				
			||||||
        "tabSize": 4
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
 | 
					 | 
				
			||||||
    "projectname": "epp",
 | 
					 | 
				
			||||||
    "setting": {
 | 
					 | 
				
			||||||
        "compileHotReLoad": false,
 | 
					 | 
				
			||||||
        "urlCheck": false,
 | 
					 | 
				
			||||||
        "bigPackageSizeSupport": true
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "miniprogramRoot": "./",
 | 
					 | 
				
			||||||
  "projectname": "epp",
 | 
					 | 
				
			||||||
  "appid": "testAppId",
 | 
					 | 
				
			||||||
  "setting": {
 | 
					 | 
				
			||||||
    "es6": false,
 | 
					 | 
				
			||||||
    "minified": false
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,69 +0,0 @@
 | 
				
			|||||||
export default defineAppConfig({
 | 
					 | 
				
			||||||
  pages: [
 | 
					 | 
				
			||||||
    'pages/index/index',
 | 
					 | 
				
			||||||
    'pages/index/login', // 登录页
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 用户侧
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    'pages/residents/code', // 进出码
 | 
					 | 
				
			||||||
    'pages/residents/report', // 体温上报
 | 
					 | 
				
			||||||
    'pages/residents/reportHistory', // 体温上报-历史上报
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 扫码跳转
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    'pages/scan/entrance', // 门禁码扫码跳转页
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  window: {
 | 
					 | 
				
			||||||
    backgroundTextStyle: 'dark',
 | 
					 | 
				
			||||||
    navigationBarBackgroundColor: '#000',
 | 
					 | 
				
			||||||
    navigationBarTitleText: 'WeChat',
 | 
					 | 
				
			||||||
    navigationBarTextStyle: 'white'
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "tabBar": {
 | 
					 | 
				
			||||||
    "selectedColor": "#FF8966",
 | 
					 | 
				
			||||||
    "list": [
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        "pagePath": "pages/index/index",
 | 
					 | 
				
			||||||
        "text": "首页",
 | 
					 | 
				
			||||||
        "iconPath": "image/icon/_home.png",
 | 
					 | 
				
			||||||
        "selectedIconPath": "image/icon/home.png"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        "pagePath": "pages/residents/code",
 | 
					 | 
				
			||||||
        "text": "进出码",
 | 
					 | 
				
			||||||
        "iconPath": "image/icon/_code.png",
 | 
					 | 
				
			||||||
        "selectedIconPath": "image/icon/code.png"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        "pagePath": "pages/residents/report",
 | 
					 | 
				
			||||||
        "text": "体温上报",
 | 
					 | 
				
			||||||
        "iconPath": "image/icon/_report.png",
 | 
					 | 
				
			||||||
        "selectedIconPath": "image/icon/report.png"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      // {
 | 
					 | 
				
			||||||
      //   "pagePath": "pages/apply/apply",
 | 
					 | 
				
			||||||
      //   "text": "申请",
 | 
					 | 
				
			||||||
      //   "iconPath": "image/icon/_apply.png",
 | 
					 | 
				
			||||||
      //   "selectedIconPath": "image/icon/apply.png"
 | 
					 | 
				
			||||||
      // },
 | 
					 | 
				
			||||||
      // {
 | 
					 | 
				
			||||||
      //   "pagePath": "pages/person/person",
 | 
					 | 
				
			||||||
      //   "text": "我的",
 | 
					 | 
				
			||||||
      //   "selectedColor": "#FF8966",
 | 
					 | 
				
			||||||
      //   "iconPath": "image/icon/_person.png",
 | 
					 | 
				
			||||||
      //   "selectedIconPath": "image/icon/person.png"
 | 
					 | 
				
			||||||
      // }
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "lazyCodeLoading": "requiredComponents",
 | 
					 | 
				
			||||||
  "permission": {
 | 
					 | 
				
			||||||
    "scope.userLocation": {
 | 
					 | 
				
			||||||
      "desc": "你的位置信息将用于体温上报"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "requiredPrivateInfos": [
 | 
					 | 
				
			||||||
    "chooseLocation"
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,15 +0,0 @@
 | 
				
			|||||||
/* 右上角小红点 */
 | 
					 | 
				
			||||||
.add-dot {
 | 
					 | 
				
			||||||
  position: relative;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.add-dot::after {
 | 
					 | 
				
			||||||
  content: " ";
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  right: -8rpx;
 | 
					 | 
				
			||||||
  top: -3rpx;
 | 
					 | 
				
			||||||
  width: 12rpx;
 | 
					 | 
				
			||||||
  height: 12rpx;
 | 
					 | 
				
			||||||
  background-color: red;
 | 
					 | 
				
			||||||
  border-radius: 50%;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,76 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <view v-if="debugMode">
 | 
					 | 
				
			||||||
    <button type="warn" size="mini" @tap='debugCleanCache'>清除缓存</button>
 | 
					 | 
				
			||||||
    <view style="border: 3px solid black;">
 | 
					 | 
				
			||||||
      <input v-model="userRole" style="border: 1px solid grey; display: inline-block; width: 40%;" />
 | 
					 | 
				
			||||||
      <button style="width: 50%;" type="primary" size="mini" @tap='updateUserRole'>更新role ({{ userGroup }})</button>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
    <textarea maxlength="-1" disabled="true" auto-height="true" style="width: 100%" :value="debugText"></textarea>
 | 
					 | 
				
			||||||
  </view>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import Taro from '@tarojs/taro'
 | 
					 | 
				
			||||||
import { eventCenter, getCurrentInstance } from '@tarojs/taro'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import ENUM from '../utils/const'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      userRole: -1,
 | 
					 | 
				
			||||||
      debugMode: Taro.getApp().globalData.debugMode,
 | 
					 | 
				
			||||||
      debugText: "",
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    params: Object,
 | 
					 | 
				
			||||||
    userGroup: String
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  mounted() {
 | 
					 | 
				
			||||||
    eventCenter.once(getCurrentInstance().router.onShow, () => {
 | 
					 | 
				
			||||||
      this.userRole = Taro.getStorageSync("userInfo").role;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const res = Taro.getStorageInfoSync()
 | 
					 | 
				
			||||||
      let storage = {};
 | 
					 | 
				
			||||||
      res.keys.forEach(key => storage[key] = Taro.getStorageSync(key))
 | 
					 | 
				
			||||||
      this.debugText = JSON.stringify({
 | 
					 | 
				
			||||||
        TARO_ENV: process.env.TARO_ENV,
 | 
					 | 
				
			||||||
        globalData: Taro.getApp().globalData,
 | 
					 | 
				
			||||||
        "启动参数": Taro.getCurrentInstance().router.params,
 | 
					 | 
				
			||||||
        params: this.params,
 | 
					 | 
				
			||||||
        storage: storage,
 | 
					 | 
				
			||||||
        ENUM: ENUM,
 | 
					 | 
				
			||||||
        // storageInfo: {
 | 
					 | 
				
			||||||
        //   keys: res.keys,
 | 
					 | 
				
			||||||
        //   currentSize: res.currentSize,
 | 
					 | 
				
			||||||
        //   limitSize: res.limitSize
 | 
					 | 
				
			||||||
        // },
 | 
					 | 
				
			||||||
      }, null, 8)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    debugCleanCache() {
 | 
					 | 
				
			||||||
      Taro.clearStorage({
 | 
					 | 
				
			||||||
        success: function () {
 | 
					 | 
				
			||||||
          Taro.showToast({
 | 
					 | 
				
			||||||
            title: "成功",
 | 
					 | 
				
			||||||
            icon: 'success'
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
          Taro.reLaunch({
 | 
					 | 
				
			||||||
            url: '/pages/index/index'
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    updateUserRole() {
 | 
					 | 
				
			||||||
      let userInfo = Taro.getStorageSync("userInfo");
 | 
					 | 
				
			||||||
      userInfo.role = this.userRole;
 | 
					 | 
				
			||||||
      Taro.setStorageSync("userInfo", userInfo);
 | 
					 | 
				
			||||||
      Taro.reLaunch({
 | 
					 | 
				
			||||||
        url: '/pages/index/index'
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 28 KiB  | 
| 
		 Before Width: | Height: | Size: 4.0 KiB  | 
| 
		 Before Width: | Height: | Size: 5.3 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 7.4 KiB  | 
| 
		 Before Width: | Height: | Size: 4.4 KiB  | 
| 
		 Before Width: | Height: | Size: 5.4 KiB  | 
| 
		 Before Width: | Height: | Size: 5.7 KiB  | 
| 
		 Before Width: | Height: | Size: 4.6 KiB  | 
| 
		 Before Width: | Height: | Size: 4.5 KiB  | 
| 
		 Before Width: | Height: | Size: 6.4 KiB  | 
| 
		 Before Width: | Height: | Size: 6.4 KiB  | 
@@ -1,187 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
					 | 
				
			||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
					 | 
				
			||||||
	 viewBox="0 0 525 374.4" style="enable-background:new 0 0 525 374.4;" xml:space="preserve">
 | 
					 | 
				
			||||||
<style type="text/css">
 | 
					 | 
				
			||||||
	.st0{opacity:7.000000e-02;}
 | 
					 | 
				
			||||||
	.st1{fill:#2A94F4;}
 | 
					 | 
				
			||||||
	.st2{opacity:0.51;}
 | 
					 | 
				
			||||||
	.st3{fill:#CEF5EC;}
 | 
					 | 
				
			||||||
	.st4{fill:#F7F7F7;}
 | 
					 | 
				
			||||||
	.st5{opacity:0.17;fill:#2A94F4;enable-background:new    ;}
 | 
					 | 
				
			||||||
	.st6{clip-path:url(#SVGID_00000031901539733340069960000001638542864404409276_);fill:#2A94F4;}
 | 
					 | 
				
			||||||
	.st7{fill:#B97A59;}
 | 
					 | 
				
			||||||
	.st8{fill:#0B4870;}
 | 
					 | 
				
			||||||
	.st9{fill:#AA6B4F;}
 | 
					 | 
				
			||||||
	.st10{fill:#D3D3D3;}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
<g class="st0">
 | 
					 | 
				
			||||||
	<g>
 | 
					 | 
				
			||||||
		<path class="st1" d="M467.2,141.9c6.6,12.1,16.3,23.5,17.1,37.1c1.3,21.9-20,38.3-28.7,58.6c-10.7,24.9-1.7,54.2-11.2,79.5
 | 
					 | 
				
			||||||
			c-6.9,18.3-23.7,33-43.5,37.8c-14.8,3.6-30.4,2-45.7,2.1c-43.4,0.4-86.7,15.4-129.6,8.6c-21.2-3.4-41.2-12-62.4-14.7
 | 
					 | 
				
			||||||
			c-25.5-3.3-55.2,0.7-73.4-16.6c-25.5-24.2-6.6-68.7-25.7-97.7c-6.2-9.4-16.1-16.7-19.4-27.2c-3.9-12.4,2.4-25.5,10.2-36.1
 | 
					 | 
				
			||||||
			c7.8-10.5,17.5-20.2,21.7-32.5c3.8-11.1,1.5-23.2-3.2-34c-7.2-16.6,12.9-54.6,52.9-51.7c18.3,1.3,26.6-19.9,46.7-25.8
 | 
					 | 
				
			||||||
			c23-6.7,51.9-1.3,68.8,4.3c17.2,5.7,38.5,8.7,48.4-5.9c13.9-20.7,55.5-23.9,74.2,9.7c6.8,12.2,12.9,21.8,27.4,20.8
 | 
					 | 
				
			||||||
			C470.4,53.1,457.3,124,467.2,141.9z M252.9,28.6c0,2.8,0,7.6,12.4,6.8c3.8-0.2,6.9-2.3,6.9-5.1c0-2.8-3.1-5.1-6.9-5.1
 | 
					 | 
				
			||||||
			C261.5,25.3,252.9,24.1,252.9,28.6z M130.8,42.3c-0.4,0.2-0.6,0.6-0.8,1c-0.8,1.2-2.2,2-3.6,2.6c-0.8,0.3-1.7,0.6-2.3,1.2
 | 
					 | 
				
			||||||
			c-1,1-0.9,2.8,0.2,3.6c0.9,0.7,2.1,0.8,3.3,0.7c4.3-0.2,8.5-1.8,11.9-4.4C143.8,43.5,133.2,41,130.8,42.3z M119,48.7
 | 
					 | 
				
			||||||
			c-1.5-1-3.3-0.4-4.8,0.3c-0.3,0.2-0.6,0.4-0.7,0.7c-0.2,0.7,0.7,1.2,1.4,1.4c1.1,0.3,2.3,0.7,3.4,0.3
 | 
					 | 
				
			||||||
			C119.4,51.1,120.5,49.7,119,48.7z M64.2,138.4c-1.1-3.3-3.6-4.9-7.5-3c-2.3,1.1-3.9,3.2-5.3,5.3c-2.2,3.4-4.1,7.2-3.6,11.1
 | 
					 | 
				
			||||||
			c0.3,2.9,2,5.6,4.4,7.3c1,0.7,2.2,1.2,3.4,1.2c1.4,0,2.6-0.8,3.7-1.6c2.5-1.9,4.4-4.5,6.3-6.9c1-1.3,2-2.7,2.2-4.2
 | 
					 | 
				
			||||||
			C68.3,144.1,65.2,141.4,64.2,138.4z M466.2,239.4c-1,0.4-2,0.9-2.5,1.8c-0.4,0.7-0.6,1.5-0.6,2.3c-0.2,1.7-0.3,3.3-0.3,5
 | 
					 | 
				
			||||||
			c0,1.8,0.2,3.8,1.6,5.1c1.9,1.7,4.9,1.1,7.3,0.4c1.4-0.4,2.9-0.8,3.8-1.9c0.7-0.8,0.9-1.8,1.1-2.8c0.6-3.3,2.4-8.3,0.4-10.1
 | 
					 | 
				
			||||||
			C474.8,237.4,469.7,238,466.2,239.4z M327.3,367.8c-0.5,0.5-1,1-1.3,1.6c-0.8,1.7,0,3.9,1.8,4.6c0.9,0.4,1.9,0.4,2.9,0.3
 | 
					 | 
				
			||||||
			c8.3-0.1,17.2-0.4,23.8-5.2c0.8-0.6,1.6-1.4,1.5-2.3c-0.2-1.2-1.6-1.7-2.8-1.9C344.9,363.4,333.9,361.6,327.3,367.8z M170.3,355
 | 
					 | 
				
			||||||
			c-7.2-1-18.6-2.3-18.6,3.5c0,2.2,10.2,4.3,11.8,4.7c5.2,1.3,10.1,3.1,15.1,5c9.4,3.5,17-1.2,9.5-6.5
 | 
					 | 
				
			||||||
			C182,357.4,176.1,355.8,170.3,355z"/>
 | 
					 | 
				
			||||||
	</g>
 | 
					 | 
				
			||||||
</g>
 | 
					 | 
				
			||||||
<g class="st2">
 | 
					 | 
				
			||||||
	<path class="st3" d="M352.3,282.8c-2.3-4.4,3-9.1,7.9-10s10.4-0.2,14.2-3.3c5.2-4.1,4.9-13,10.6-16.3c4.6-2.6,10.7-0.1,15.5-2.2
 | 
					 | 
				
			||||||
		c6-2.6,7.7-11,13.7-13.8c4.7-2.3,10.9,0.3,13.3,4.9c2.4,4.6,1.3,10.6-2,14.7c-2.6,3.1-6.5,5.4-8.1,9.1c-2.5,5.9,1.5,13-0.9,19
 | 
					 | 
				
			||||||
		c-4.3,11-24.7,7.7-28.3,19c-0.8,2.5-0.5,5.2-0.7,7.9c-0.6,7.8-6.1,14.6-12.9,18.5c-6.8,3.9-14.8,5.2-22.6,5.8
 | 
					 | 
				
			||||||
		c-3.2,0.2-6.6,0.3-9.4-1.2c-2.7-1.4-4.5-3.9-6-6.6C327.2,311.4,323.3,289.2,352.3,282.8"/>
 | 
					 | 
				
			||||||
</g>
 | 
					 | 
				
			||||||
<g class="st2">
 | 
					 | 
				
			||||||
	<path class="st3" d="M200,267.5c3.2-5.2-2.8-11.4-8.7-12.9c-5.9-1.5-12.6-1.2-17.1-5.3c-5.9-5.5-4.8-16.4-11.5-20.9
 | 
					 | 
				
			||||||
		c-5.4-3.6-13-1.1-18.8-4.1c-7.2-3.7-8.4-14.2-15.4-18.2c-5.6-3.2-13.4-0.7-16.8,4.8s-2.6,12.9,1.1,18.2c2.9,4.1,7.4,7.2,9.1,11.9
 | 
					 | 
				
			||||||
		c2.6,7.4-3,15.8-0.7,23.3c4.3,13.9,29.6,11.7,32.8,25.9c0.7,3.2,0.1,6.4,0.1,9.7c0,9.6,6.1,18.5,14.1,23.9s17.6,7.8,27.1,9.2
 | 
					 | 
				
			||||||
		c3.9,0.6,8,1,11.6-0.6c3.4-1.4,5.9-4.4,8-7.5C228,304.8,234.8,278,200,267.5"/>
 | 
					 | 
				
			||||||
</g>
 | 
					 | 
				
			||||||
<path class="st3" d="M409.2,27.1l-7,2.4l-3-8.7c-5.6-16.1-23.3-24.7-39.4-19.1c-16.1,5.6-24.7,23.3-19.1,39.4l3,8.7l-7,2.4
 | 
					 | 
				
			||||||
	c-5.5,1.9-8.4,7.9-6.5,13.4l19.7,56.9c1.9,5.5,8,8.5,13.4,6.6l72.4-25.1c5.5-1.9,8.5-8,6.6-13.5l-19.7-56.9
 | 
					 | 
				
			||||||
	C420.8,28.1,414.8,25.1,409.2,27.1z M354,36.4c-3.1-8.8,1.6-18.5,10.4-21.6c8.8-3.1,18.5,1.6,21.6,10.5l3,8.7l-32,11.1L354,36.4z
 | 
					 | 
				
			||||||
	 M396,88.3l5,14.5c0.2,0.6-0.2,1.2-0.8,1.5l-7,2.4c-0.5,0.2-1.2-0.1-1.4-0.7l-5-14.5c-5.4-0.2-10.4-3.6-12.3-9.1
 | 
					 | 
				
			||||||
	c-2.4-7,1.3-14.7,8.3-17.2c7-2.4,14.7,1.3,17.2,8.3C401.9,79,400.1,84.8,396,88.3z"/>
 | 
					 | 
				
			||||||
<g>
 | 
					 | 
				
			||||||
	<g>
 | 
					 | 
				
			||||||
		<path class="st3" d="M334.1,308.8c7.1-3,13.4-8.7,18.7-14.1c14.2-14.7,23-33.8,27.7-53.6c4.2-17.9,5.1-36.3,4.3-54.6
 | 
					 | 
				
			||||||
			c-0.1-1.5-2.5-1.6-2.4,0c2,41.1-6.2,91.4-42.9,116.4c-2.1,1.4-4.2,2.8-6.5,3.8C331.5,307.3,332.7,309.4,334.1,308.8L334.1,308.8z"
 | 
					 | 
				
			||||||
			/>
 | 
					 | 
				
			||||||
	</g>
 | 
					 | 
				
			||||||
	<path class="st3" d="M380.8,234.2c0,0,2.3-13.3,19.9-15.4C400.8,218.8,394.3,234.5,380.8,234.2z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M375.1,253.8c0,0,5.4-12.4,23-10.3C398,243.5,388.1,257.3,375.1,253.8z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M367.6,271.2c0,0,8-10.9,24.7-4.9C392.3,266.3,379.5,277.5,367.6,271.2z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M383.5,213.5c0,0,2.3-13.1,19.6-15.1C403.1,198.4,396.8,213.9,383.5,213.5z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M383.8,190.8c0,0-9.9-8.9-2.4-24.7C381.4,166.2,391.1,179.7,383.8,190.8z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M383.8,204.3c0,0-13.1-2.4-15-19.7C368.9,184.5,384.3,191,383.8,204.3z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M382.5,224.2c0,0-13.1-2.4-15-19.7C367.6,204.5,383,210.9,382.5,224.2z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M379.1,242.9c0,0-12.9-3.3-13.5-20.7C365.6,222.1,380.5,229.6,379.1,242.9z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M373.2,261.5c0,0-12.9-3.3-13.5-20.7C359.7,240.8,374.6,248.3,373.2,261.5z"/>
 | 
					 | 
				
			||||||
</g>
 | 
					 | 
				
			||||||
<g>
 | 
					 | 
				
			||||||
	<g>
 | 
					 | 
				
			||||||
		<path class="st3" d="M200.3,303.8c-7.1-3-13.4-8.7-18.7-14.1c-14.2-14.7-23-33.8-27.7-53.6c-4.2-17.9-5.1-36.3-4.3-54.6
 | 
					 | 
				
			||||||
			c0.1-1.5,2.5-1.6,2.4,0c-2,41.1,6.2,91.4,42.9,116.4c2.1,1.4,4.2,2.8,6.5,3.8C202.9,302.3,201.7,304.4,200.3,303.8L200.3,303.8z"
 | 
					 | 
				
			||||||
			/>
 | 
					 | 
				
			||||||
	</g>
 | 
					 | 
				
			||||||
	<path class="st3" d="M153.6,229.2c0,0-2.3-13.3-19.9-15.4C133.6,213.8,140.1,229.5,153.6,229.2z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M159.4,248.8c0,0-5.4-12.4-23-10.3C136.4,238.5,146.3,252.3,159.4,248.8z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M166.9,266.2c0,0-8-10.9-24.7-4.9C142.1,261.3,154.9,272.5,166.9,266.2z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M150.9,208.5c0,0-2.3-13.1-19.6-15.1C131.3,193.4,137.6,208.9,150.9,208.5z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M150.7,185.8c0,0,9.9-8.9,2.4-24.7C153.1,161.2,143.3,174.7,150.7,185.8z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M150.6,199.3c0,0,13.1-2.4,15-19.7C165.6,179.5,150.1,186,150.6,199.3z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M151.9,219.2c0,0,13.1-2.4,15-19.7C166.9,199.5,151.4,205.9,151.9,219.2z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M155.3,237.9c0,0,12.9-3.3,13.5-20.7C168.8,217.1,153.9,224.6,155.3,237.9z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M161.2,256.5c0,0,12.9-3.3,13.5-20.7C174.7,235.8,159.8,243.3,161.2,256.5z"/>
 | 
					 | 
				
			||||||
</g>
 | 
					 | 
				
			||||||
<g>
 | 
					 | 
				
			||||||
	<path class="st1" d="M326.9,338.6H213.6c-11.7,0-21.1-9.5-21.1-21.1V54.8c0-11.7,9.5-21.1,21.1-21.1h113.2
 | 
					 | 
				
			||||||
		c11.7,0,21.1,9.5,21.1,21.1v262.7C348,329.1,338.5,338.6,326.9,338.6z"/>
 | 
					 | 
				
			||||||
	<path class="st4" d="M326,327.8H214.5c-8.2,0-14.8-6.6-14.8-14.8V57.4c0-8.2,6.6-14.8,14.8-14.8H326c8.2,0,14.8,6.6,14.8,14.8V313
 | 
					 | 
				
			||||||
		C340.8,321.2,334.2,327.8,326,327.8z"/>
 | 
					 | 
				
			||||||
	<path class="st1" d="M312.5,42.6h-9.2c-2.8,0-5.1,2.3-5.1,5.1v3.6c0,2.8-2.3,5.1-5.1,5.1h-40.9c-2.8,0-5.1-2.3-5.1-5.1v-3.6
 | 
					 | 
				
			||||||
		c0-2.8-2.3-5.1-5.1-5.1h-26.1V40h96.6L312.5,42.6L312.5,42.6z"/>
 | 
					 | 
				
			||||||
	<g>
 | 
					 | 
				
			||||||
		<circle class="st5" cx="268.3" cy="142.4" r="20.4"/>
 | 
					 | 
				
			||||||
		<g>
 | 
					 | 
				
			||||||
			<g>
 | 
					 | 
				
			||||||
				<defs>
 | 
					 | 
				
			||||||
					<circle id="SVGID_1_" cx="268.3" cy="142.4" r="20.4"/>
 | 
					 | 
				
			||||||
				</defs>
 | 
					 | 
				
			||||||
				<clipPath id="SVGID_00000096774277113628933520000010358380364922621880_">
 | 
					 | 
				
			||||||
					<use xlink:href="#SVGID_1_"  style="overflow:visible;"/>
 | 
					 | 
				
			||||||
				</clipPath>
 | 
					 | 
				
			||||||
				<path style="clip-path:url(#SVGID_00000096774277113628933520000010358380364922621880_);fill:#2A94F4;" d="M276.2,137.7
 | 
					 | 
				
			||||||
					c0,4.4-3.5,7.9-7.9,7.9s-7.9-3.5-7.9-7.9s3.5-7.9,7.9-7.9S276.2,133.3,276.2,137.7z M280.2,170.2v-11.3
 | 
					 | 
				
			||||||
					c0-6.3-5.1-11.5-11.5-11.5h-0.9c-6.3,0-11.5,5.1-11.5,11.5v11.3c0,1.8,1.4,3.2,3.2,3.2H277C278.8,173.4,280.2,172,280.2,170.2z"
 | 
					 | 
				
			||||||
					/>
 | 
					 | 
				
			||||||
			</g>
 | 
					 | 
				
			||||||
		</g>
 | 
					 | 
				
			||||||
	</g>
 | 
					 | 
				
			||||||
	<path class="st5" d="M317.2,186.1h-97.8c-4.5,0-8.1-3.6-8.1-8.1l0,0c0-4.5,3.6-8.1,8.1-8.1h97.8c4.5,0,8.1,3.6,8.1,8.1l0,0
 | 
					 | 
				
			||||||
		C325.3,182.4,321.7,186.1,317.2,186.1z"/>
 | 
					 | 
				
			||||||
	<path class="st1" d="M313.8,180.1h-91c-1.2,0-2.1-0.9-2.1-2.1l0,0c0-1.2,0.9-2.1,2.1-2.1h91c1.2,0,2.1,0.9,2.1,2.1l0,0
 | 
					 | 
				
			||||||
		C315.9,179.1,315,180.1,313.8,180.1z"/>
 | 
					 | 
				
			||||||
	<path class="st5" d="M317.3,215.1h-97.8c-4.5,0-8.1-3.6-8.1-8.1l0,0c0-4.5,3.6-8.1,8.1-8.1h97.8c4.5,0,8.1,3.6,8.1,8.1l0,0
 | 
					 | 
				
			||||||
		C325.4,211.5,321.7,215.1,317.3,215.1z"/>
 | 
					 | 
				
			||||||
	<path class="st1" d="M222,209.3L222,209.3c-1.2,0-2.1-0.9-2.1-2.1l0,0c0-1.2,0.9-2.1,2.1-2.1l0,0c1.2,0,2.1,0.9,2.1,2.1l0,0
 | 
					 | 
				
			||||||
		C224.1,208.4,223.1,209.3,222,209.3z M230.4,207.2L230.4,207.2c0-1.2-0.9-2.1-2.1-2.1l0,0c-1.2,0-2.1,0.9-2.1,2.1l0,0
 | 
					 | 
				
			||||||
		c0,1.2,0.9,2.1,2.1,2.1l0,0C229.4,209.3,230.4,208.4,230.4,207.2z M236.6,207.2L236.6,207.2c0-1.2-0.9-2.1-2.1-2.1l0,0
 | 
					 | 
				
			||||||
		c-1.2,0-2.1,0.9-2.1,2.1l0,0c0,1.2,0.9,2.1,2.1,2.1l0,0C235.7,209.3,236.6,208.4,236.6,207.2z M242.9,207.2L242.9,207.2
 | 
					 | 
				
			||||||
		c0-1.2-0.9-2.1-2.1-2.1l0,0c-1.2,0-2.1,0.9-2.1,2.1l0,0c0,1.2,0.9,2.1,2.1,2.1l0,0C242,209.3,242.9,208.4,242.9,207.2z
 | 
					 | 
				
			||||||
		 M249.2,207.2L249.2,207.2c0-1.2-0.9-2.1-2.1-2.1l0,0c-1.2,0-2.1,0.9-2.1,2.1l0,0c0,1.2,0.9,2.1,2.1,2.1l0,0
 | 
					 | 
				
			||||||
		C248.3,209.3,249.2,208.4,249.2,207.2z M255.5,207.2L255.5,207.2c0-1.2-0.9-2.1-2.1-2.1l0,0c-1.2,0-2.1,0.9-2.1,2.1l0,0
 | 
					 | 
				
			||||||
		c0,1.2,0.9,2.1,2.1,2.1l0,0C254.5,209.3,255.5,208.4,255.5,207.2z M261.8,207.2L261.8,207.2c0-1.2-0.9-2.1-2.1-2.1l0,0
 | 
					 | 
				
			||||||
		c-1.2,0-2.1,0.9-2.1,2.1l0,0c0,1.2,0.9,2.1,2.1,2.1l0,0C260.8,209.3,261.8,208.4,261.8,207.2z"/>
 | 
					 | 
				
			||||||
</g>
 | 
					 | 
				
			||||||
<g>
 | 
					 | 
				
			||||||
	<path class="st7" d="M135.2,308.8c0,0-2.1,11.6-2.6,13.6c-0.4,1.6-1.6,2.8-2.8,4c-0.4,0.4-0.7,1.2-0.9,1.8
 | 
					 | 
				
			||||||
		c-0.2,0.5-0.1,1.1,0.2,1.6c5.3,8.5,16.4,10.1,16.5,9.4c0.2-1.3-1.9-3.5-4.3-4.4c-2.4-0.8-4.2-3-4.8-5.5l0,0c-0.5-2-0.5-4.1,0.1-6.1
 | 
					 | 
				
			||||||
		l2.6-8.9L135.2,308.8z"/>
 | 
					 | 
				
			||||||
	<path class="st7" d="M128.7,310.1l2.6,11.7c0.8,3.6,0.3,7.3-1.4,10.6l0,0c-1,1.8-0.1,4.1,1.8,4.8c6.3,2.2,18.4,6.5,18.9,6
 | 
					 | 
				
			||||||
		c2.8-2.3-4.5-6.2-9.9-10.2c-3.6-2.7-5-15.5-5.3-25.2l-5.8,1.5C129.2,309.3,128.8,309.6,128.7,310.1z"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M139.5,336.3c2.6,0.9,5.4,1.1,8,1.5c0.3,0,0.6,0.2,0.8,0.3c2.5,1.9,3.8,3.9,2.3,5.1
 | 
					 | 
				
			||||||
		c-0.6,0.5-14.9-4.6-20.4-6.5c-1.2-0.4-1.7-1.8-1.1-2.9l1.1-2C133.1,333.6,136.2,335.2,139.5,336.3z"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M131.4,190.3c-6.6,2.3-10.7,11.3-7.7,19.7c1.7,4.9,10,21.8,18.1,34.9c3.1,5,3.5,11.3,0.8,16.5
 | 
					 | 
				
			||||||
		c-0.4,0.8-0.8,1.7-1.1,2.6c-1.3,4.4-4.7,29.2-6.4,45.7c0.8,1.9,2.5,4.3,4.2,4.8c5.8-14.9,14.6-41.7,16-46.4
 | 
					 | 
				
			||||||
		c0.8-2.6,1.6-5.5,2.1-8.3c4-8.4-5.4-48.7-8.2-56.6C146.2,194.9,137.9,188,131.4,190.3z"/>
 | 
					 | 
				
			||||||
	<ellipse class="st8" cx="135.5" cy="129.9" rx="10.6" ry="13.7"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M133,131.3c-0.2-7.6-6.3-14-13.9-14.4c-6.7-0.4-12.5,3.7-14.7,9.6c-0.8,2.1-2.8,3.4-5,3.4
 | 
					 | 
				
			||||||
		c-0.9,0-1.8,0.1-2.8,0.3c-5.5,1.1-9.9,5.8-10.4,11.5c-0.5,5.1,1.9,9.6,5.7,12.2c1.6,1.1,2.6,2.9,2.8,4.9c1.3,9,9.5,15.7,18.9,14.6
 | 
					 | 
				
			||||||
		c8-0.9,14.5-7.5,15.2-15.6c0.4-4.9-1.3-9.5-4.3-12.9C129.6,142.6,133.1,137.3,133,131.3z"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M135.5,111.7c0,0,6,3.8,5.2,8.8c0,0,3.2-2.3,3.9-10C145.2,105.1,135.5,111.7,135.5,111.7z"/>
 | 
					 | 
				
			||||||
	<path class="st7" d="M145.2,138.4c3.2,1.6,6.4,2.9,9.7,3.7c3.3,0.8,6.7,0.8,10.2,0.3c3.6-0.5,7.3-1.5,11.3-2.2s8.2-0.9,12.1-0.3
 | 
					 | 
				
			||||||
		c0.7,0.1,1.2,0.8,1.1,1.5c-0.1,0.6-0.6,1.1-1.2,1.1l0,0c-3.8,0.2-7.3,0.9-10.9,2.2c-3.5,1.2-7.1,2.8-11.1,4s-8.5,1.7-12.8,1.2
 | 
					 | 
				
			||||||
		s-8.4-1.7-12.3-3.3c-2.3-0.9-3.5-3.6-2.6-5.9c0.9-2.3,3.6-3.5,5.9-2.6c0.1,0,0.2,0.1,0.3,0.1L145.2,138.4z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M142.2,168.8c2.4-7.2,7.2-22.5,6.8-27.4c-0.3-3.2-2.9-5.6-6.1-5.6H122c-3.4,0-6.3,2.7-6.4,6.2
 | 
					 | 
				
			||||||
		c-0.2,6,2.6,19.7,4.2,26.9h22.4V168.8z"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M135.3,310.2c0.3-0.2,0.5-0.6,0.5-1c-0.4-15.3-1.4-34.8-1.7-38.5c0-0.4-0.1-0.8-0.2-1.3
 | 
					 | 
				
			||||||
		c3.3-18.1,3.8-56.9,4.1-63.7c0.4-8.9-5-19-11.9-19.4c-7-0.3-14.5,6.9-16.7,15.1c-1.5,5.4,4.2,34.2,10.4,55.1
 | 
					 | 
				
			||||||
		c1.3,4.4,1.5,9,0.8,13.5c-0.5,3.1-0.6,6.4-0.4,8.8c0.3,3.7,4.4,18.6,8.3,31.5c0.1,0.4,0.4,0.7,0.8,0.7
 | 
					 | 
				
			||||||
		C131.4,311.5,133.4,311.4,135.3,310.2z"/>
 | 
					 | 
				
			||||||
	<path class="st3" d="M117.5,177.9c1.1-3,1.4-6.3,0.9-9.4c-1-7.4-2.9-21.2-2.7-27.1c0.1-3.2,2.7-5.6,5.8-5.6h3.1
 | 
					 | 
				
			||||||
		c1.2,2.7,3.7,4.8,7.5,4.8c3.9,0,6.3-2.1,7.5-4.8h2.9c-3.1,6.7-2,15.6,3.4,20.8c-1,3.6-1.9,7.1-2.5,10c-0.9,3.9-0.5,8,1.1,11.7
 | 
					 | 
				
			||||||
		c2.7,6.4,4.8,16.6,4.1,20.7c-21.9,6.2-37-4.8-37-4.8L117.5,177.9z"/>
 | 
					 | 
				
			||||||
	<g>
 | 
					 | 
				
			||||||
		<polygon class="st7" points="135.5,137.2 126.1,136.2 129.1,125.9 135.2,126.6 		"/>
 | 
					 | 
				
			||||||
	</g>
 | 
					 | 
				
			||||||
	<path class="st9" d="M135.2,126.6l-6.1-0.8l-0.9,3.2c1.4,1.5,3.1,4.9,5.3,4.9c0.7,0,1.3-0.2,1.9-0.6L135.2,126.6z"/>
 | 
					 | 
				
			||||||
	<path class="st7" d="M135.4,131.6c-2.1,0-4.3-1-7.4-3.7c-1.8-1.5-3.1-4.2-3.1-6.1v-10.1h15.5c0,0,1.2,5.4,0,10.7
 | 
					 | 
				
			||||||
		C139.6,126.4,137,131.6,135.4,131.6z"/>
 | 
					 | 
				
			||||||
	<path class="st7" d="M127.5,119.9c0,2-0.9,3.6-2.1,3.6s-2.4-2.6-2.4-4.5c0-2,1.3-2.6,2.4-2.6C126.6,116.3,127.5,117.9,127.5,119.9z
 | 
					 | 
				
			||||||
		"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M123,112.9c0-3.1,2.6-5.7,5.7-5.7h5.2c1.5,0,3-0.4,4.2-1.1c1.8-1,4.2-0.7,5.4,1c1.4,1.8,2,4.3-1.5,6.6
 | 
					 | 
				
			||||||
		c-1.7,1.1-4.2-0.1-5.9,0.4c-0.1,0-0.2,0-0.3,0h-4.6c-1.6,0-2.8,1.3-2.9,2.9c0,1-0.9,1.8-1.9,1.8h-0.2l-0.7-2.4l-2.6,3.5L123,112.9
 | 
					 | 
				
			||||||
		L123,112.9z"/>
 | 
					 | 
				
			||||||
	<path class="st7" d="M194,138.8c0,0-2.5,4.9-4.2,4.6c-1.7-0.3-2.9-0.7-2.6-3.3c0.3-2.5,1.9-5.9,3.2-7.7s4.9-3.9,5.5-3.9
 | 
					 | 
				
			||||||
		c1.9,0.1-0.9,3.1-2.2,4.7c-1.3,1.5-2.6,3.4-1.7,3.8c0.9,0.4,3.2-2.7,4.4-2.6C197.6,134.5,194,138.8,194,138.8z"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M139.3,111.5c-0.5,2.3,0.2,3.6-7.3,7.2c-7.6,3.6-9.9,2.1-12.3,5.9c0,0,1-6.4,5.2-8.6
 | 
					 | 
				
			||||||
		c4.2-2.2,11.4-3.6,13.7-8.7C138.6,107.3,139.6,110,139.3,111.5z"/>
 | 
					 | 
				
			||||||
	<path class="st7" d="M122,145.2c-0.4,0.3-0.7,0.5-1,0.8c-0.3,0.2-0.6,0.4-0.9,0.6c-0.6,0.4-1.2,0.8-1.8,1.1
 | 
					 | 
				
			||||||
		c-1.2,0.7-2.5,1.3-3.8,1.9c-2.6,1.1-5.4,1.8-8.2,2.3c-5.7,0.8-11.5,0-16.7-2c-2.6-1-5-2.3-7.3-3.8s-4.4-3.2-6.4-5
 | 
					 | 
				
			||||||
		c-3.9-3.6-7.3-7.8-10.2-12.1c-0.3-0.5-0.2-1.1,0.3-1.4c0.4-0.3,1-0.2,1.3,0.2l0,0c3.5,3.8,7.1,7.3,11.1,10.3
 | 
					 | 
				
			||||||
		c4,2.9,8.3,5.4,12.9,6.7c2.3,0.6,4.6,1.1,6.9,1.2c2.3,0.1,4.6-0.1,6.9-0.5s4.5-1.2,6.6-2.1c1-0.5,2.1-1,3.1-1.6
 | 
					 | 
				
			||||||
		c0.5-0.3,1-0.6,1.4-0.9c0.2-0.2,0.5-0.3,0.7-0.5l0.6-0.4l0.2-0.2c1.5-1.2,3.7-0.9,4.9,0.6C123.7,141.9,123.5,144,122,145.2z"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M137.8,112c0,0,0.3,7.8,7.1,11.5c0,0-3-5.9-2.8-9.7C142.3,109.9,137.4,109.3,137.8,112z"/>
 | 
					 | 
				
			||||||
	<path class="st8" d="M127.2,333c-0.5-0.4-0.7-1.2-0.4-1.8c0.3-0.5,1-1.8,1.5-2.8c0.2-0.4,0.8-0.5,1.1-0.1c3.4,4.5,8.1,7.5,13.4,7.1
 | 
					 | 
				
			||||||
		c1.9,0.8,3.5,3.1,3.3,4.2c0,0.2-2.3,0.8-5-0.1C129.3,335.6,127.2,333,127.2,333z"/>
 | 
					 | 
				
			||||||
	<path class="st7" d="M67.7,124.4c0,0,3.3,4.4,2.3,5.9s-2,2.3-4.1,0.9c-2.2-1.4-4.5-4.3-5.6-6.4s-1.3-6.2-1.1-6.7
 | 
					 | 
				
			||||||
		c1-1.7,2.5,2.2,3.3,4.1c0.8,1.9,1.9,3.9,2.7,3.2c0.8-0.6-1.1-4.1-0.4-5.1C65.5,119.2,67.7,124.4,67.7,124.4z"/>
 | 
					 | 
				
			||||||
</g>
 | 
					 | 
				
			||||||
<path class="st10" d="M509.5,367.8h-494c-8.6,0-15.5-6.9-15.5-15.5l0,0c0-8.6,6.9-15.5,15.5-15.5h494c8.6,0,15.5,6.9,15.5,15.5l0,0
 | 
					 | 
				
			||||||
	C525,360.9,518.1,367.8,509.5,367.8z"/>
 | 
					 | 
				
			||||||
<path class="st3" d="M122.8,71.7l-6.5-7.1l-79.6,72.8c-5.5-3.5-12.5-4.4-19.1-1.9C6.6,139.7,1.1,152,5.4,163s16.5,16.5,27.5,12.2
 | 
					 | 
				
			||||||
	c11-4.2,16.5-16.5,12.2-27.5c-0.3-0.8-0.7-1.6-1.1-2.4L104.3,89l7.2,7.1l7.2-7.3l-5.7-5.7l2.2-2.6l5.9,5.3l5-5.7l-6.2-5.7
 | 
					 | 
				
			||||||
	L122.8,71.7z M30.2,168.2c-7.1,2.7-15.2-0.8-17.9-8c-2.7-7.1,0.8-15.2,8-17.9c7.1-2.7,15.2,0.8,17.9,8S37.3,165.5,30.2,168.2z"/>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 3.9 KiB  | 
| 
		 Before Width: | Height: | Size: 1.3 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 4.1 KiB  | 
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 7.2 KiB  | 
@@ -1,17 +0,0 @@
 | 
				
			|||||||
<!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>epp</title>
 | 
					 | 
				
			||||||
  <script><%= htmlWebpackPlugin.options.script %></script>
 | 
					 | 
				
			||||||
</head>
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
  <div id="app"></div>
 | 
					 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
export default definePageConfig({
 | 
					 | 
				
			||||||
  navigationBarTitleText: '首页',
 | 
					 | 
				
			||||||
  "navigationStyle": "custom"
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,15 +0,0 @@
 | 
				
			|||||||
#menu-view {
 | 
					 | 
				
			||||||
  display: flex;
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
  flex-wrap: wrap;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.menu-item {
 | 
					 | 
				
			||||||
  width: 25%;
 | 
					 | 
				
			||||||
  margin-top: 50px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.item-image {
 | 
					 | 
				
			||||||
  width: 70px;
 | 
					 | 
				
			||||||
  height: 70px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,117 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <view>
 | 
					 | 
				
			||||||
    <image src="../../image/home.jpg" style="width: 100vw; height: 41.5vw;"></image>
 | 
					 | 
				
			||||||
    <view style="display: block; padding-left: 30px; padding-top: 12px;">
 | 
					 | 
				
			||||||
      <text>欢迎你,{{ displayUsername }}!</text>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
    <view id="menu-view">
 | 
					 | 
				
			||||||
      <view class="menu-item" v-for="menuItem in filterMenuItems" :key="menuItem.id">
 | 
					 | 
				
			||||||
        <view :class="{ 'add-dot': menuItem.addDot }" style="display: inline-block;">
 | 
					 | 
				
			||||||
          <image :src="'../../image/icon/' + menuItem.image" class="item-image"
 | 
					 | 
				
			||||||
            @tap='switchTo(menuItem.switchFunc, menuItem.url)'></image>
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
        <view>{{ menuItem.title }}</view>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
    <button type="primary" size="mini" @tap="toggleDot('code', true)">显示小红点</button>
 | 
					 | 
				
			||||||
    <button type="primary" size="mini" @tap="toggleDot('code', false)">隐藏小红点</button>
 | 
					 | 
				
			||||||
    <button type="warn" size="mini" @tap="magicButton">魔法按钮</button>
 | 
					 | 
				
			||||||
    <DebugComp :params="debugObject" :userGroup="userGroup" />
 | 
					 | 
				
			||||||
  </view>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import Taro from '@tarojs/taro'
 | 
					 | 
				
			||||||
import DebugComp from '../../components/DebugComp.vue'
 | 
					 | 
				
			||||||
import getUserGroupByRole from '../../utils/getUserGroupByRole'
 | 
					 | 
				
			||||||
import menuItemDict from '../../utils/menuList'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import './index.css'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  components: {
 | 
					 | 
				
			||||||
    DebugComp
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      ...Taro.getApp().globalData,
 | 
					 | 
				
			||||||
      userInfo: null,
 | 
					 | 
				
			||||||
      displayUsername: "",
 | 
					 | 
				
			||||||
      userGroup: "unknown",
 | 
					 | 
				
			||||||
      menuItemDict: menuItemDict,
 | 
					 | 
				
			||||||
      debugObject: {},
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  computed: {
 | 
					 | 
				
			||||||
    filterMenuItems() {
 | 
					 | 
				
			||||||
      return Object.values(this.menuItemDict)
 | 
					 | 
				
			||||||
        .filter((item) => item.for.indexOf(this.userGroup) != -1)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onLoad() {
 | 
					 | 
				
			||||||
    // 开发模式下自动跳转到指定页面,节省开发时间
 | 
					 | 
				
			||||||
    // if (this.debugMode) {
 | 
					 | 
				
			||||||
    //   Taro.switchTab({ url: '/pages/residents/report' })
 | 
					 | 
				
			||||||
    // }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onShow(options) {
 | 
					 | 
				
			||||||
    console.log('onShow', options)
 | 
					 | 
				
			||||||
    console.log("menuItemDict", menuItemDict)
 | 
					 | 
				
			||||||
    this.userInfo = Taro.getStorageSync("userInfo");
 | 
					 | 
				
			||||||
    this.displayUsername = this.userInfo?.username ?? "请登录";
 | 
					 | 
				
			||||||
    if (!this.userInfo) {
 | 
					 | 
				
			||||||
      console.log("用户未登录")
 | 
					 | 
				
			||||||
      Taro.redirectTo({
 | 
					 | 
				
			||||||
        url: '/pages/index/login'
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      // 用户已登录
 | 
					 | 
				
			||||||
      this.userGroup = getUserGroupByRole(this.userInfo.role);
 | 
					 | 
				
			||||||
      this.debugObject = { userGroup: this.userGroup };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      //判断用户是否是通过扫小程序码进来的
 | 
					 | 
				
			||||||
      let launchParams = Taro.getCurrentInstance().router.params;
 | 
					 | 
				
			||||||
      if (launchParams.scene) {
 | 
					 | 
				
			||||||
        // 扫门禁的小程序码
 | 
					 | 
				
			||||||
        if (launchParams.scene.split('%')[0] == "guard") {
 | 
					 | 
				
			||||||
          Taro.getCurrentInstance().router.params.scene = null;
 | 
					 | 
				
			||||||
          Taro.navigateTo({
 | 
					 | 
				
			||||||
            url: "/pages/scan/entrance"
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    switchTo(func, pageUrl) {
 | 
					 | 
				
			||||||
      switch (func) {
 | 
					 | 
				
			||||||
        case 'switchTab':
 | 
					 | 
				
			||||||
          Taro.switchTab({ url: pageUrl })
 | 
					 | 
				
			||||||
          break;
 | 
					 | 
				
			||||||
        case 'navigateTo':
 | 
					 | 
				
			||||||
          Taro.navigateTo({ url: pageUrl })
 | 
					 | 
				
			||||||
          break;
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
          console.log("切换页面失败", func, pageUrl)
 | 
					 | 
				
			||||||
          break;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    goCode() {
 | 
					 | 
				
			||||||
      Taro.switchTab({
 | 
					 | 
				
			||||||
        url: '/pages/residents/code'
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    toggleDot(iconName, status = true) {
 | 
					 | 
				
			||||||
      this.menuItemDict[iconName].addDot = status;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    magicButton() {
 | 
					 | 
				
			||||||
      Taro.navigateTo({
 | 
					 | 
				
			||||||
        url: "/pages/scan/entrance"
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
export default definePageConfig({
 | 
					 | 
				
			||||||
  navigationBarTitleText: '登录'
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,29 +0,0 @@
 | 
				
			|||||||
.container {
 | 
					 | 
				
			||||||
  line-height: 1.5em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.login-icon {
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
  height: 35vh;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.login-img {
 | 
					 | 
				
			||||||
  width: 50vw;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.login-from {
 | 
					 | 
				
			||||||
  padding: 0 20vw;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.inputText {
 | 
					 | 
				
			||||||
  width: 95%;
 | 
					 | 
				
			||||||
  border-bottom: solid 1px;
 | 
					 | 
				
			||||||
  margin-bottom: 50px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.loginBtnView {
 | 
					 | 
				
			||||||
  margin-top: 70px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.loginBtn {
 | 
					 | 
				
			||||||
  margin-bottom: 25px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,88 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <view class="container">
 | 
					 | 
				
			||||||
    <view class="login-icon">
 | 
					 | 
				
			||||||
      <image class="login-img" src="../../image/icon/login-background.svg"></image>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
    <view class="login-from">
 | 
					 | 
				
			||||||
      <view class="inputView">
 | 
					 | 
				
			||||||
        <!--账号-->
 | 
					 | 
				
			||||||
        <input class="inputText" placeholder="账号" v-model="username" />
 | 
					 | 
				
			||||||
        <!--密码-->
 | 
					 | 
				
			||||||
        <input class="inputText" placeholder="密码" v-model="password" password="true" />
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
      <view class="loginBtnView">
 | 
					 | 
				
			||||||
        <!--按钮-->
 | 
					 | 
				
			||||||
        <button class="loginBtn" type="primary" @tap="login">登录</button>
 | 
					 | 
				
			||||||
        <button class="loginBtn" type="secondary" bindtap="visitor">访客申请</button>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
  </view>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import Taro from '@tarojs/taro'
 | 
					 | 
				
			||||||
import md5 from 'blueimp-md5'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import './login.css'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      ...Taro.getApp().globalData,
 | 
					 | 
				
			||||||
      username: '',
 | 
					 | 
				
			||||||
      password: ''
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    login() {
 | 
					 | 
				
			||||||
      if (this.username == '' || this.password == '') {
 | 
					 | 
				
			||||||
        Taro.showToast({
 | 
					 | 
				
			||||||
          title: "请完善登录信息",
 | 
					 | 
				
			||||||
          icon: 'error',
 | 
					 | 
				
			||||||
          duration: 2000
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        let passwordHash = md5(this.password);
 | 
					 | 
				
			||||||
        Taro.showLoading({ title: '加载中' })
 | 
					 | 
				
			||||||
        Taro.request({
 | 
					 | 
				
			||||||
          url: `${this.baseUrl}/user/login`,
 | 
					 | 
				
			||||||
          method: "POST",
 | 
					 | 
				
			||||||
          header: {
 | 
					 | 
				
			||||||
            "Content-Type": "application/x-www-form-urlencoded" //用于post
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          data: {
 | 
					 | 
				
			||||||
            username: this.username,
 | 
					 | 
				
			||||||
            password: passwordHash,
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          success: function (d) {
 | 
					 | 
				
			||||||
            Taro.hideLoading()
 | 
					 | 
				
			||||||
            let result = d.data;
 | 
					 | 
				
			||||||
            if (result.success) {
 | 
					 | 
				
			||||||
              // 登录成功
 | 
					 | 
				
			||||||
              Taro.setStorageSync("userInfo", result.data.userInfo);
 | 
					 | 
				
			||||||
              console.log("userInfo", Taro.getStorageSync("userInfo"))
 | 
					 | 
				
			||||||
              Taro.switchTab({
 | 
					 | 
				
			||||||
                url: '/pages/index/index'
 | 
					 | 
				
			||||||
              })
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
              Taro.showToast({
 | 
					 | 
				
			||||||
                title: result.msg,
 | 
					 | 
				
			||||||
                icon: 'error',
 | 
					 | 
				
			||||||
                duration: 2000
 | 
					 | 
				
			||||||
              })
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          fail: function () {
 | 
					 | 
				
			||||||
            Taro.hideLoading()
 | 
					 | 
				
			||||||
            Taro.showToast({
 | 
					 | 
				
			||||||
              title: "请求失败",
 | 
					 | 
				
			||||||
              icon: 'error',
 | 
					 | 
				
			||||||
              duration: 2000
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
export default definePageConfig({
 | 
					 | 
				
			||||||
  navigationBarTitleText: '身份码',
 | 
					 | 
				
			||||||
  enablePullDownRefresh: true,
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,36 +0,0 @@
 | 
				
			|||||||
#codeView {
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
  margin-top: 100px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#user-text {
 | 
					 | 
				
			||||||
  font-size: 35px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#time-text {
 | 
					 | 
				
			||||||
  font-weight: bold;
 | 
					 | 
				
			||||||
  font-size: 40px;
 | 
					 | 
				
			||||||
  margin-top: 50px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#myQrcode {
 | 
					 | 
				
			||||||
  display: block;
 | 
					 | 
				
			||||||
  margin: 30px auto;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#show-text {
 | 
					 | 
				
			||||||
  font-weight: bold;
 | 
					 | 
				
			||||||
  font-size: 45px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#small-text {
 | 
					 | 
				
			||||||
  margin-top: 80px;
 | 
					 | 
				
			||||||
  color: grey;
 | 
					 | 
				
			||||||
  font-size: small;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#scan-btn {
 | 
					 | 
				
			||||||
  margin-top: 50px;
 | 
					 | 
				
			||||||
  padding: 9px 60px;
 | 
					 | 
				
			||||||
  font-size: initial;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,170 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <view id="codeView" :style="{ display: isShow }">
 | 
					 | 
				
			||||||
    <view id="user-text"><text>{{ userText }}</text></view>
 | 
					 | 
				
			||||||
    <view id="time-text"><text>{{ time }}</text></view>
 | 
					 | 
				
			||||||
    <canvas type="2d" style="width: 250px; height: 250px;" id="myQrcode"></canvas>
 | 
					 | 
				
			||||||
    <view id="show-text"><text :style="{ color: showTextColor }">{{ showText }}</text></view>
 | 
					 | 
				
			||||||
    <view id="small-text"><text>下拉可刷新</text></view>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <button id="scan-btn" size="mini" @tap="scan">扫门禁码</button>
 | 
					 | 
				
			||||||
  </view>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import Taro from '@tarojs/taro'
 | 
					 | 
				
			||||||
import md5 from 'blueimp-md5'
 | 
					 | 
				
			||||||
import drawQrcode from '../../utils/qrcode/index'
 | 
					 | 
				
			||||||
import scanQRCode from '../../utils/scanQRCode'
 | 
					 | 
				
			||||||
import utils from '../../utils/utils'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import './code.css'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      ...Taro.getApp().globalData,
 | 
					 | 
				
			||||||
      userInfo: null,
 | 
					 | 
				
			||||||
      timeInterval: null,
 | 
					 | 
				
			||||||
      isShow: 'none',
 | 
					 | 
				
			||||||
      userText: '',
 | 
					 | 
				
			||||||
      showText: '',
 | 
					 | 
				
			||||||
      showTextColor: '',
 | 
					 | 
				
			||||||
      time: '',
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onShow() {
 | 
					 | 
				
			||||||
    console.log('onShow')
 | 
					 | 
				
			||||||
    setTimeout(this.refershData, 100)
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onHide() {
 | 
					 | 
				
			||||||
    console.log('onHide')
 | 
					 | 
				
			||||||
    clearInterval(this.timeInterval);
 | 
					 | 
				
			||||||
    this.isShow = 'none'
 | 
					 | 
				
			||||||
    this.time = ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onPullDownRefresh() {
 | 
					 | 
				
			||||||
    console.log('onPullDownRefresh')
 | 
					 | 
				
			||||||
    this.$nextTick(() => {
 | 
					 | 
				
			||||||
      this.refershData(() => {
 | 
					 | 
				
			||||||
        Taro.stopPullDownRefresh();
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    refershData(callback) {
 | 
					 | 
				
			||||||
      this.debugMode && console.log('this.refershData()')
 | 
					 | 
				
			||||||
      Taro.showNavigationBarLoading();
 | 
					 | 
				
			||||||
      clearInterval(this.timeInterval);
 | 
					 | 
				
			||||||
      this.isShow = 'none'
 | 
					 | 
				
			||||||
      this.time = ''
 | 
					 | 
				
			||||||
      this.userInfo = Taro.getStorageSync("userInfo");
 | 
					 | 
				
			||||||
      if (!this.userInfo) {
 | 
					 | 
				
			||||||
        Taro.redirectTo({
 | 
					 | 
				
			||||||
          url: '/pages/index/login'
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      Taro.showLoading({ title: '加载中' })
 | 
					 | 
				
			||||||
      var that = this;
 | 
					 | 
				
			||||||
      Taro.request({
 | 
					 | 
				
			||||||
        url: `${this.baseUrl}/access/code/getCodeInfo`,
 | 
					 | 
				
			||||||
        method: "POST",
 | 
					 | 
				
			||||||
        header: {
 | 
					 | 
				
			||||||
          "Content-Type": "application/x-www-form-urlencoded" //用于post
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        data: {
 | 
					 | 
				
			||||||
          id: this.userInfo.id,
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        success: function (d) {
 | 
					 | 
				
			||||||
          that.debugMode && console.log("begin success")
 | 
					 | 
				
			||||||
          Taro.hideLoading()
 | 
					 | 
				
			||||||
          let result = d.data;
 | 
					 | 
				
			||||||
          if (result.success) {
 | 
					 | 
				
			||||||
            console.log("result.data", result.data);
 | 
					 | 
				
			||||||
            that.userText = `${that.userInfo.id} | ${that.userInfo.realname}`
 | 
					 | 
				
			||||||
            that.showText = result.data.infoText
 | 
					 | 
				
			||||||
            that.showTextColor = result.data.infoTextColor
 | 
					 | 
				
			||||||
            that.$nextTick(() => {
 | 
					 | 
				
			||||||
              let t = Date.now();
 | 
					 | 
				
			||||||
              let chksum = md5(JSON.stringify({ id: that.userInfo.id, t: t }));
 | 
					 | 
				
			||||||
              that.drawCode(`https://epp.cxyxiaomo.com/access/validCode?id=${that.userInfo.id}&t=${t}&chksum=${chksum}`, result.data.qrcodeColor)
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
          } else {
 | 
					 | 
				
			||||||
            Taro.showToast({
 | 
					 | 
				
			||||||
              title: result.msg,
 | 
					 | 
				
			||||||
              icon: 'error',
 | 
					 | 
				
			||||||
              duration: 2000
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          that.isShow = ''
 | 
					 | 
				
			||||||
          that.debugMode && console.log("end success")
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        fail: function () {
 | 
					 | 
				
			||||||
          that.debugMode && console.log("begin fail")
 | 
					 | 
				
			||||||
          Taro.hideLoading()
 | 
					 | 
				
			||||||
          Taro.showToast({
 | 
					 | 
				
			||||||
            title: "请求失败",
 | 
					 | 
				
			||||||
            icon: 'error',
 | 
					 | 
				
			||||||
            duration: 2000
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
          that.debugMode && console.log("end fail")
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        complete: function () {
 | 
					 | 
				
			||||||
          that.debugMode && console.log("begin complete")
 | 
					 | 
				
			||||||
          if (typeof (callback) === "function")
 | 
					 | 
				
			||||||
            callback();
 | 
					 | 
				
			||||||
          Taro.hideNavigationBarLoading();
 | 
					 | 
				
			||||||
          that.debugMode && console.log("end complete")
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    drawCode(text = 'https://www.baidu.com/', foreground = 'red') {
 | 
					 | 
				
			||||||
      this.debugMode && console.log("drawCode was called.")
 | 
					 | 
				
			||||||
      var that = this;
 | 
					 | 
				
			||||||
      const query = Taro.createSelectorQuery()
 | 
					 | 
				
			||||||
      query.select('#myQrcode')
 | 
					 | 
				
			||||||
        .fields({
 | 
					 | 
				
			||||||
          node: true,
 | 
					 | 
				
			||||||
          size: true
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        .exec(async (res) => {
 | 
					 | 
				
			||||||
          that.debugMode && console.log("before drawQrcode")
 | 
					 | 
				
			||||||
          var canvas = res[0].node
 | 
					 | 
				
			||||||
          if (!canvas) {
 | 
					 | 
				
			||||||
            Taro.showToast({
 | 
					 | 
				
			||||||
              title: "canvas获取失败",
 | 
					 | 
				
			||||||
              icon: 'error',
 | 
					 | 
				
			||||||
              duration: 2000
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          that.debugMode && console.log("canvas:", canvas, "res:", res)
 | 
					 | 
				
			||||||
          // 调用方法drawQrcode生成二维码
 | 
					 | 
				
			||||||
          await drawQrcode(Taro, {
 | 
					 | 
				
			||||||
            canvas: canvas,
 | 
					 | 
				
			||||||
            canvasId: 'myQrcode',
 | 
					 | 
				
			||||||
            width: 150,
 | 
					 | 
				
			||||||
            padding: 0,
 | 
					 | 
				
			||||||
            background: '#ffffff',
 | 
					 | 
				
			||||||
            foreground: foreground,
 | 
					 | 
				
			||||||
            text: text,
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
          that.debugMode && console.log("end drawQrcode")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          this.updateTime();
 | 
					 | 
				
			||||||
          this.timeInterval = setInterval(this.updateTime, 1000);
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    updateTime() {
 | 
					 | 
				
			||||||
      this.time = utils.formatTime(new Date())
 | 
					 | 
				
			||||||
      console.log("刷新时间")
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    scan() {
 | 
					 | 
				
			||||||
      scanQRCode(Taro)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
export default definePageConfig({
 | 
					 | 
				
			||||||
  navigationBarTitleText: '体温上报',
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,306 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
<style>
 | 
					 | 
				
			||||||
.form {
 | 
					 | 
				
			||||||
  padding: 20px 30px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.row {
 | 
					 | 
				
			||||||
  margin: 30px 0;
 | 
					 | 
				
			||||||
  border-bottom: 2px solid grey;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.rowItem {
 | 
					 | 
				
			||||||
  margin: 0;
 | 
					 | 
				
			||||||
  padding: 0;
 | 
					 | 
				
			||||||
  display: inline-block;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  vertical-align: middle;
 | 
					 | 
				
			||||||
  height: 1.6rem;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.rowLeft {
 | 
					 | 
				
			||||||
  width: 30%;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.rowRight {
 | 
					 | 
				
			||||||
  width: 70%;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.rowRightElement {
 | 
					 | 
				
			||||||
  width: 100%;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.center {
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.controlBtn {
 | 
					 | 
				
			||||||
  width: 250px;
 | 
					 | 
				
			||||||
  margin: 0 30px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<template>
 | 
					 | 
				
			||||||
  <view>
 | 
					 | 
				
			||||||
    <view v-if="!isFilled" class="form">
 | 
					 | 
				
			||||||
      <view class="row">
 | 
					 | 
				
			||||||
        <view class="rowItem rowLeft center">
 | 
					 | 
				
			||||||
          <text>姓名</text>
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
        <view class="rowItem rowRight center">
 | 
					 | 
				
			||||||
          <input class="rowRightElement" :value="formData.userRealname" disabled="true" />
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <view class="row">
 | 
					 | 
				
			||||||
        <view class="rowItem rowLeft center">
 | 
					 | 
				
			||||||
          <text>填报时间</text>
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
        <view class="rowItem rowRight center">
 | 
					 | 
				
			||||||
          <input class="rowRightElement" :value="formData.time" disabled="true" />
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <view class="row">
 | 
					 | 
				
			||||||
        <view class="rowItem rowLeft center">
 | 
					 | 
				
			||||||
          <text>地址</text>
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
        <view class="rowItem rowRight center" @tap="chooseLocation">
 | 
					 | 
				
			||||||
          <input class="rowRightElement" placeholder="点击获取当前位置" v-model="formData.address" disabled="true"
 | 
					 | 
				
			||||||
            maxlength="500" />
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <view class="row">
 | 
					 | 
				
			||||||
        <view class="rowItem rowLeft center">
 | 
					 | 
				
			||||||
          <text>今日体温</text>
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
        <view class="rowItem rowRight center">
 | 
					 | 
				
			||||||
          <radio-group class="rowRightElement" @change="(e) => formData.temperature = e.detail.value">
 | 
					 | 
				
			||||||
            <radio value="0" checked="true" />正常 
 | 
					 | 
				
			||||||
            <radio value="1" />异常(≥37.3°)
 | 
					 | 
				
			||||||
          </radio-group>
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <view class="tips-area">
 | 
					 | 
				
			||||||
        <view class="tips" style="color: red;">
 | 
					 | 
				
			||||||
          * 本人承诺以上所填报的内容全部真实,并愿意承担相应责任。
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <view style="text-align: center;">
 | 
					 | 
				
			||||||
        <button class="controlBtn" size="mini" type="none" @tap="myreport">历史填报</button>
 | 
					 | 
				
			||||||
        <button class="controlBtn" size="mini" type="primary" @tap="report">提交</button>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <textarea v-if="this.debugMode" maxlength="-1" disabled="true" auto-height="true" style="width: 100%"
 | 
					 | 
				
			||||||
        :value="JSON.stringify(formData, null, 8)"></textarea>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
    <view v-else style="text-align: center;">
 | 
					 | 
				
			||||||
      <!--  -->
 | 
					 | 
				
			||||||
      <view style="margin: 40px 0;">{{ filledMsg }}</view>
 | 
					 | 
				
			||||||
      <button class="controlBtn" size="mini" type="none" @tap="myreport">历史填报</button>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
  </view>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import Taro from '@tarojs/taro'
 | 
					 | 
				
			||||||
import utils from '../../utils/utils'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      ...Taro.getApp().globalData,
 | 
					 | 
				
			||||||
      userInfo: null,
 | 
					 | 
				
			||||||
      timeInterval: null,
 | 
					 | 
				
			||||||
      formData: {
 | 
					 | 
				
			||||||
        userId: '',
 | 
					 | 
				
			||||||
        userRealname: '',
 | 
					 | 
				
			||||||
        address: '',
 | 
					 | 
				
			||||||
        time: '',
 | 
					 | 
				
			||||||
        timestamp: '',
 | 
					 | 
				
			||||||
        temperature: 0,
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      // 是否填报过
 | 
					 | 
				
			||||||
      isFilled: true,
 | 
					 | 
				
			||||||
      filledMsg: "",
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onShow() {
 | 
					 | 
				
			||||||
    console.log('onShow')
 | 
					 | 
				
			||||||
    this.userInfo = Taro.getStorageSync("userInfo")
 | 
					 | 
				
			||||||
    console.log("this.userInfo", this.userInfo)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.formData.userId = this.userInfo.id
 | 
					 | 
				
			||||||
    this.formData.userRealname = this.userInfo.realname
 | 
					 | 
				
			||||||
    this.updateTime();
 | 
					 | 
				
			||||||
    this.timeInterval = setInterval(this.updateTime, 1000);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 获取用户当日是否填报过
 | 
					 | 
				
			||||||
    Taro.showLoading({ title: '加载中' })
 | 
					 | 
				
			||||||
    var that = this;
 | 
					 | 
				
			||||||
    Taro.request({
 | 
					 | 
				
			||||||
      url: `${this.baseUrl}/access/report/getLatestRecord`,
 | 
					 | 
				
			||||||
      method: "POST",
 | 
					 | 
				
			||||||
      header: {
 | 
					 | 
				
			||||||
        "Content-Type": "application/x-www-form-urlencoded" //用于post
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      data: {
 | 
					 | 
				
			||||||
        userId: this.userInfo.id
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      success: function (d) {
 | 
					 | 
				
			||||||
        Taro.hideLoading()
 | 
					 | 
				
			||||||
        let result = d.data
 | 
					 | 
				
			||||||
        console.log("result", result)
 | 
					 | 
				
			||||||
        if (result.success) {
 | 
					 | 
				
			||||||
          console.log("result.data", result.data);
 | 
					 | 
				
			||||||
          if (result.data == null || new Date(result.data.time) < new Date(new Date().toISOString().substring(0, 10))) {
 | 
					 | 
				
			||||||
            // 如果没有填报记录,或者填报记录不是今天,那么说明没有填报过
 | 
					 | 
				
			||||||
            that.isFilled = false
 | 
					 | 
				
			||||||
          } else {
 | 
					 | 
				
			||||||
            // 有今日记录,说明已经填报过
 | 
					 | 
				
			||||||
            that.isFilled = true
 | 
					 | 
				
			||||||
            that.filledMsg = "您已完成今日体温填报"
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          Taro.showToast({
 | 
					 | 
				
			||||||
            title: "加载填报信息失败",
 | 
					 | 
				
			||||||
            icon: 'error',
 | 
					 | 
				
			||||||
            duration: 2000
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      fail: function () {
 | 
					 | 
				
			||||||
        Taro.hideLoading()
 | 
					 | 
				
			||||||
        Taro.showToast({
 | 
					 | 
				
			||||||
          title: "请求失败",
 | 
					 | 
				
			||||||
          icon: 'error',
 | 
					 | 
				
			||||||
          duration: 2000
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      complete: function () {
 | 
					 | 
				
			||||||
        Taro.hideNavigationBarLoading();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onHide() {
 | 
					 | 
				
			||||||
    console.log('onHide')
 | 
					 | 
				
			||||||
    clearInterval(this.timeInterval)
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    updateTime() {
 | 
					 | 
				
			||||||
      this.formData.timestamp = Date.now();
 | 
					 | 
				
			||||||
      this.formData.time = utils.formatTime(new Date(this.formData.timestamp));
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    chooseLocation: async function () {
 | 
					 | 
				
			||||||
      Taro.showLoading({ title: '正在定位' })
 | 
					 | 
				
			||||||
      await new Promise((resolve) => {
 | 
					 | 
				
			||||||
        Taro.getSetting({
 | 
					 | 
				
			||||||
          success(res) {
 | 
					 | 
				
			||||||
            if (!res.authSetting['scope.userLocation']) {
 | 
					 | 
				
			||||||
              Taro.authorize({
 | 
					 | 
				
			||||||
                scope: 'scope.userLocationBackground',
 | 
					 | 
				
			||||||
                success() {
 | 
					 | 
				
			||||||
                  resolve();
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
              })
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
              resolve();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
      var that = this;
 | 
					 | 
				
			||||||
      Taro.chooseLocation({
 | 
					 | 
				
			||||||
        success: function (res) {
 | 
					 | 
				
			||||||
          that.formData.address = res.address;
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        fail: function () {
 | 
					 | 
				
			||||||
          if (!that.formData.address) {
 | 
					 | 
				
			||||||
            Taro.showToast({
 | 
					 | 
				
			||||||
              title: "请获取当前位置",
 | 
					 | 
				
			||||||
              icon: 'error'
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      Taro.hideLoading()
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    // 体温上报 提交按钮
 | 
					 | 
				
			||||||
    report() {
 | 
					 | 
				
			||||||
      console.log("点击提交", "this.formData", this.formData)
 | 
					 | 
				
			||||||
      if (!this.formData.address) {
 | 
					 | 
				
			||||||
        Taro.showToast({
 | 
					 | 
				
			||||||
          title: "请获取当前位置",
 | 
					 | 
				
			||||||
          icon: 'error'
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      Taro.showLoading({ title: '加载中' })
 | 
					 | 
				
			||||||
      var that = this;
 | 
					 | 
				
			||||||
      Taro.request({
 | 
					 | 
				
			||||||
        url: `${this.baseUrl}/access/report/submit`,
 | 
					 | 
				
			||||||
        method: "POST",
 | 
					 | 
				
			||||||
        header: {
 | 
					 | 
				
			||||||
          "Content-Type": "application/x-www-form-urlencoded" //用于post
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        data: {
 | 
					 | 
				
			||||||
          ...this.formData,
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        success: function (d) {
 | 
					 | 
				
			||||||
          that.debugMode && console.log("begin success")
 | 
					 | 
				
			||||||
          Taro.hideLoading()
 | 
					 | 
				
			||||||
          let result = d.data;
 | 
					 | 
				
			||||||
          if (result.success) {
 | 
					 | 
				
			||||||
            // 填报完成
 | 
					 | 
				
			||||||
            that.isFilled = true
 | 
					 | 
				
			||||||
            that.filledMsg = "您已完成今日体温填报"
 | 
					 | 
				
			||||||
            console.log("result.data", result.data);
 | 
					 | 
				
			||||||
            Taro.showToast({
 | 
					 | 
				
			||||||
              title: "填报成功",
 | 
					 | 
				
			||||||
              icon: 'success',
 | 
					 | 
				
			||||||
              duration: 2000
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
          } else {
 | 
					 | 
				
			||||||
            Taro.showToast({
 | 
					 | 
				
			||||||
              title: result.msg,
 | 
					 | 
				
			||||||
              icon: 'error',
 | 
					 | 
				
			||||||
              duration: 2000
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          that.isShow = ''
 | 
					 | 
				
			||||||
          that.debugMode && console.log("end success")
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        fail: function () {
 | 
					 | 
				
			||||||
          that.debugMode && console.log("begin fail")
 | 
					 | 
				
			||||||
          Taro.hideLoading()
 | 
					 | 
				
			||||||
          Taro.showToast({
 | 
					 | 
				
			||||||
            title: "请求失败",
 | 
					 | 
				
			||||||
            icon: 'error',
 | 
					 | 
				
			||||||
            duration: 2000
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
          that.debugMode && console.log("end fail")
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        complete: function () {
 | 
					 | 
				
			||||||
          that.debugMode && console.log("begin complete")
 | 
					 | 
				
			||||||
          if (typeof (callback) === "function")
 | 
					 | 
				
			||||||
            callback();
 | 
					 | 
				
			||||||
          Taro.hideNavigationBarLoading();
 | 
					 | 
				
			||||||
          that.debugMode && console.log("end complete")
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    // 历史填报
 | 
					 | 
				
			||||||
    myreport() {
 | 
					 | 
				
			||||||
      Taro.navigateTo({
 | 
					 | 
				
			||||||
        url: "/pages/residents/reportHistory"
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
export default definePageConfig({
 | 
					 | 
				
			||||||
  navigationBarTitleText: '体温上报 - 历史记录',
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,130 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <view>
 | 
					 | 
				
			||||||
    <view style="margin: 20px; text-align: center;">
 | 
					 | 
				
			||||||
      <text>姓名:{{ displayName }}</text>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
    <view class="container">
 | 
					 | 
				
			||||||
      <view class="item" :class="item.temperature == 1 ? 'abnormal' : 'normal'" v-for="item of displayResult">
 | 
					 | 
				
			||||||
        <view>
 | 
					 | 
				
			||||||
          <view class="record_time">
 | 
					 | 
				
			||||||
            <!-- 填报时间: -->
 | 
					 | 
				
			||||||
            {{ item.time }}
 | 
					 | 
				
			||||||
          </view>
 | 
					 | 
				
			||||||
          <view class="record_address">
 | 
					 | 
				
			||||||
            <!-- 地址: -->
 | 
					 | 
				
			||||||
            {{ item.address }}
 | 
					 | 
				
			||||||
          </view>
 | 
					 | 
				
			||||||
        </view>
 | 
					 | 
				
			||||||
        <view class="statusText">{{ item.temperature == 1 ? "异常" : "正常" }}</view>
 | 
					 | 
				
			||||||
      </view>
 | 
					 | 
				
			||||||
    </view>
 | 
					 | 
				
			||||||
  </view>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import Taro from '@tarojs/taro'
 | 
					 | 
				
			||||||
import utils from '../../utils/utils'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      ...Taro.getApp().globalData,
 | 
					 | 
				
			||||||
      userInfo: null,
 | 
					 | 
				
			||||||
      displayName: '',
 | 
					 | 
				
			||||||
      displayResult: [],
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onShow() {
 | 
					 | 
				
			||||||
    console.log('onShow')
 | 
					 | 
				
			||||||
    this.userInfo = Taro.getStorageSync("userInfo")
 | 
					 | 
				
			||||||
    this.displayName = this.userInfo.realname
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 获取用户填报历史
 | 
					 | 
				
			||||||
    Taro.showLoading({ title: '加载中' })
 | 
					 | 
				
			||||||
    var that = this;
 | 
					 | 
				
			||||||
    Taro.request({
 | 
					 | 
				
			||||||
      url: `${this.baseUrl}/access/report/getRecordList`,
 | 
					 | 
				
			||||||
      method: "POST",
 | 
					 | 
				
			||||||
      header: {
 | 
					 | 
				
			||||||
        "Content-Type": "application/x-www-form-urlencoded" //用于post
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      data: {
 | 
					 | 
				
			||||||
        userId: this.userInfo.id
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      success: function (d) {
 | 
					 | 
				
			||||||
        Taro.hideLoading()
 | 
					 | 
				
			||||||
        let result = d.data
 | 
					 | 
				
			||||||
        console.log("result", result)
 | 
					 | 
				
			||||||
        if (result.success) {
 | 
					 | 
				
			||||||
          console.log("result.data", result.data)
 | 
					 | 
				
			||||||
          that.displayResult = result.data.map(item => {
 | 
					 | 
				
			||||||
            // 时间友好化显示
 | 
					 | 
				
			||||||
            let t = new Date(item.time).getTime() + 8 * 3600 * 1000
 | 
					 | 
				
			||||||
            item.time = new Date(t).toISOString().substring(0, 19).replace("T", " ")
 | 
					 | 
				
			||||||
            return item
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          Taro.showToast({
 | 
					 | 
				
			||||||
            title: "加载填报信息失败",
 | 
					 | 
				
			||||||
            icon: 'error',
 | 
					 | 
				
			||||||
            duration: 2000
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      fail: function () {
 | 
					 | 
				
			||||||
        Taro.hideLoading()
 | 
					 | 
				
			||||||
        Taro.showToast({
 | 
					 | 
				
			||||||
          title: "请求失败",
 | 
					 | 
				
			||||||
          icon: 'error',
 | 
					 | 
				
			||||||
          duration: 2000
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      complete: function () {
 | 
					 | 
				
			||||||
        Taro.hideNavigationBarLoading();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onHide() {
 | 
					 | 
				
			||||||
    console.log('onHide')
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<style>
 | 
					 | 
				
			||||||
.item {
 | 
					 | 
				
			||||||
  /* background-color: #dedede; */
 | 
					 | 
				
			||||||
  border-radius: 8px;
 | 
					 | 
				
			||||||
  margin: 20px 32px;
 | 
					 | 
				
			||||||
  padding: 25px;
 | 
					 | 
				
			||||||
  display: grid;
 | 
					 | 
				
			||||||
  grid-template-columns: 1fr 130px;
 | 
					 | 
				
			||||||
  place-items: center;
 | 
					 | 
				
			||||||
  color: white;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.item.normal {
 | 
					 | 
				
			||||||
  background-color: green;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.item.abnormal {
 | 
					 | 
				
			||||||
  background-color: red;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.record_time {
 | 
					 | 
				
			||||||
  font-size: 30px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.record_address {
 | 
					 | 
				
			||||||
  font-size: 25px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.statusText {
 | 
					 | 
				
			||||||
  font-size: large;
 | 
					 | 
				
			||||||
  font-weight: bold;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
export default definePageConfig({
 | 
					 | 
				
			||||||
  navigationBarTitleText: '进入社区',
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,38 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <view>
 | 
					 | 
				
			||||||
    您将要进入社区
 | 
					 | 
				
			||||||
    <textarea maxlength="-1" disabled="true" auto-height="true" style="width: 100%" :value="debugText"></textarea>
 | 
					 | 
				
			||||||
  </view>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import Taro from '@tarojs/taro'
 | 
					 | 
				
			||||||
import utils from '../../utils/utils'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      ...Taro.getApp().globalData,
 | 
					 | 
				
			||||||
      userInfo: null,
 | 
					 | 
				
			||||||
      scene: null,
 | 
					 | 
				
			||||||
      debugText: JSON.stringify(Taro.getCurrentInstance().router, null, 4),
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onLaunch(option) {
 | 
					 | 
				
			||||||
    console.log("onLaunch", option);
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onShow() {
 | 
					 | 
				
			||||||
    console.log('onShow')
 | 
					 | 
				
			||||||
    this.userInfo = Taro.getStorageSync("userInfo")
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onHide() {
 | 
					 | 
				
			||||||
    console.log('onHide')
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,12 +0,0 @@
 | 
				
			|||||||
module.exports = {
 | 
					 | 
				
			||||||
  user: {
 | 
					 | 
				
			||||||
    role: {
 | 
					 | 
				
			||||||
      ADMIN: 0,
 | 
					 | 
				
			||||||
      STAFF: 1,
 | 
					 | 
				
			||||||
      RESIDENTS_OWNER: 2,
 | 
					 | 
				
			||||||
      RESIDENTS_MEMBER: 3,
 | 
					 | 
				
			||||||
      RESIDENTS_TENENT: 4,
 | 
					 | 
				
			||||||
      VISITOR: 5
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,29 +0,0 @@
 | 
				
			|||||||
const ENUM = require('./const.js');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function getUserGroupByRole(userRole) {
 | 
					 | 
				
			||||||
  const role = ENUM.user.role;
 | 
					 | 
				
			||||||
  userRole = Number(userRole);
 | 
					 | 
				
			||||||
  let userGroupDict = {
 | 
					 | 
				
			||||||
    'visitor': [
 | 
					 | 
				
			||||||
      role.VISITOR,
 | 
					 | 
				
			||||||
    ].includes(userRole),
 | 
					 | 
				
			||||||
    'user': [
 | 
					 | 
				
			||||||
      role.RESIDENTS_OWNER,
 | 
					 | 
				
			||||||
      role.RESIDENTS_MEMBER,
 | 
					 | 
				
			||||||
      role.RESIDENTS_TENENT,
 | 
					 | 
				
			||||||
    ].includes(userRole),
 | 
					 | 
				
			||||||
    'admin': [
 | 
					 | 
				
			||||||
      role.ADMIN,
 | 
					 | 
				
			||||||
      role.STAFF,
 | 
					 | 
				
			||||||
    ].includes(userRole)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  console.log("userGroupDict", userGroupDict, userRole, role)
 | 
					 | 
				
			||||||
  for (let userGroup of Object.keys(userGroupDict)) {
 | 
					 | 
				
			||||||
    if (userGroupDict[userGroup]) {
 | 
					 | 
				
			||||||
      return userGroup;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return 'unknown';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = getUserGroupByRole;
 | 
					 | 
				
			||||||
@@ -1,104 +0,0 @@
 | 
				
			|||||||
const switchTab = "switchTab";
 | 
					 | 
				
			||||||
const navigateTo = "navigateTo";
 | 
					 | 
				
			||||||
let id = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let menuItemDict = {
 | 
					 | 
				
			||||||
  'login': {
 | 
					 | 
				
			||||||
    for: ['unknown'],
 | 
					 | 
				
			||||||
    title: "登录",
 | 
					 | 
				
			||||||
    image: "code.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: '/pages/index/login',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'code': {
 | 
					 | 
				
			||||||
    for: ['visitor', 'user'],
 | 
					 | 
				
			||||||
    title: "进出码",
 | 
					 | 
				
			||||||
    image: "code.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: '/pages/residents/code'
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'report': {
 | 
					 | 
				
			||||||
    for: ['user'],
 | 
					 | 
				
			||||||
    title: "体温上报",
 | 
					 | 
				
			||||||
    image: "report.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: '/pages/residents/report'
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'apply-record': {
 | 
					 | 
				
			||||||
    for: ['visitor', 'user'],
 | 
					 | 
				
			||||||
    title: "申请记录",
 | 
					 | 
				
			||||||
    image: "apply.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'apply-approval': {
 | 
					 | 
				
			||||||
    for: ['admin'],
 | 
					 | 
				
			||||||
    title: "申请审批",
 | 
					 | 
				
			||||||
    image: "apply.png", // ApplyReplay
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'visitor-apply': {
 | 
					 | 
				
			||||||
    for: ['admin'],
 | 
					 | 
				
			||||||
    title: "访客审批",
 | 
					 | 
				
			||||||
    image: "visitor.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'abnormal': {
 | 
					 | 
				
			||||||
    for: ['admin'],
 | 
					 | 
				
			||||||
    title: "异常人员",
 | 
					 | 
				
			||||||
    image: "danger.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'feedback-submit': {
 | 
					 | 
				
			||||||
    for: ['visitor', 'user'],
 | 
					 | 
				
			||||||
    title: "提交反馈",
 | 
					 | 
				
			||||||
    image: "fk.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'feedback-list': {
 | 
					 | 
				
			||||||
    for: ['visitor', 'user'],
 | 
					 | 
				
			||||||
    title: "反馈查看",
 | 
					 | 
				
			||||||
    image: "feedback.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'feedback-reply': {
 | 
					 | 
				
			||||||
    for: ['admin'],
 | 
					 | 
				
			||||||
    title: "反馈回复",
 | 
					 | 
				
			||||||
    image: "feedback.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'update-password': {
 | 
					 | 
				
			||||||
    for: ['user', 'admin'],
 | 
					 | 
				
			||||||
    title: "密码修改",
 | 
					 | 
				
			||||||
    image: "updPwd.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'assign': {
 | 
					 | 
				
			||||||
    for: ['admin'],
 | 
					 | 
				
			||||||
    title: "分配账号",
 | 
					 | 
				
			||||||
    image: "count.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'unfinish': {
 | 
					 | 
				
			||||||
    for: ['admin'],
 | 
					 | 
				
			||||||
    title: "今日未填", // RedList
 | 
					 | 
				
			||||||
    image: "_report.png",
 | 
					 | 
				
			||||||
    switchFunc: switchTab,
 | 
					 | 
				
			||||||
    url: ''
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
let keys = Object.keys(menuItemDict);
 | 
					 | 
				
			||||||
for (let key of keys) {
 | 
					 | 
				
			||||||
  menuItemDict[key].id = id++;
 | 
					 | 
				
			||||||
  menuItemDict[key].addDot = false;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = menuItemDict
 | 
					 | 
				
			||||||
@@ -1,125 +0,0 @@
 | 
				
			|||||||
import extend from 'extend'
 | 
					 | 
				
			||||||
import {
 | 
					 | 
				
			||||||
  QRCode,
 | 
					 | 
				
			||||||
  QRErrorCorrectLevel
 | 
					 | 
				
			||||||
} from './qrcode'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// support Chinese
 | 
					 | 
				
			||||||
function utf16to8(str) {
 | 
					 | 
				
			||||||
  var out, i, len, c
 | 
					 | 
				
			||||||
  out = ''
 | 
					 | 
				
			||||||
  len = str.length
 | 
					 | 
				
			||||||
  for (i = 0; i < len; i++) {
 | 
					 | 
				
			||||||
    c = str.charCodeAt(i)
 | 
					 | 
				
			||||||
    if ((c >= 0x0001) && (c <= 0x007F)) {
 | 
					 | 
				
			||||||
      out += str.charAt(i)
 | 
					 | 
				
			||||||
    } else if (c > 0x07FF) {
 | 
					 | 
				
			||||||
      out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F))
 | 
					 | 
				
			||||||
      out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F))
 | 
					 | 
				
			||||||
      out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F))
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F))
 | 
					 | 
				
			||||||
      out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F))
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return out
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function drawQrcode(Taro, options) {
 | 
					 | 
				
			||||||
  options = options || {}
 | 
					 | 
				
			||||||
  options = extend(true, {
 | 
					 | 
				
			||||||
    canvasId: 'myQrcode',
 | 
					 | 
				
			||||||
    canvas: null,
 | 
					 | 
				
			||||||
    text: '爱一个人就要勇敢说出来',
 | 
					 | 
				
			||||||
    width: 260,
 | 
					 | 
				
			||||||
    padding: 20,
 | 
					 | 
				
			||||||
    paddingColor: null, // 默认与background一致
 | 
					 | 
				
			||||||
    typeNumber: -1,
 | 
					 | 
				
			||||||
    correctLevel: QRErrorCorrectLevel.H,
 | 
					 | 
				
			||||||
    background: '#ffffff',
 | 
					 | 
				
			||||||
    foreground: '#000000',
 | 
					 | 
				
			||||||
    image: {
 | 
					 | 
				
			||||||
      imageResource: '',
 | 
					 | 
				
			||||||
      width: 80,
 | 
					 | 
				
			||||||
      height: 80,
 | 
					 | 
				
			||||||
      round: true
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }, options)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (!options.canvasId && !options.canvas) {
 | 
					 | 
				
			||||||
    console.warn('please set canvasId or canvas!')
 | 
					 | 
				
			||||||
    return
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (!options.paddingColor) options.paddingColor = options.background
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // createCanvas
 | 
					 | 
				
			||||||
  // create the qrcode itself
 | 
					 | 
				
			||||||
  var qrcode = new QRCode(options.typeNumber, options.correctLevel)
 | 
					 | 
				
			||||||
  qrcode.addData(utf16to8(options.text))
 | 
					 | 
				
			||||||
  qrcode.make()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const dpr = Taro.getSystemInfoSync().pixelRatio
 | 
					 | 
				
			||||||
  var canvas = options.canvas
 | 
					 | 
				
			||||||
  const ctx = canvas.getContext('2d')
 | 
					 | 
				
			||||||
  canvas.width = options.width * dpr
 | 
					 | 
				
			||||||
  canvas.height = options.width * dpr
 | 
					 | 
				
			||||||
  const width = canvas.width
 | 
					 | 
				
			||||||
  console.log(`canvas, ctx, width, dpr, qrcode, options`, canvas, ctx, width, dpr, qrcode, options)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // 填充背景色
 | 
					 | 
				
			||||||
  ctx.fillStyle = options.paddingColor
 | 
					 | 
				
			||||||
  // ctx.clearRect(0, 0, width + options.padding * 2, width + options.padding * 2) // 绘制前清空画布
 | 
					 | 
				
			||||||
  ctx.fillRect(0, 0, width + options.padding * 2, width + options.padding * 2);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  var tileW = (width - options.padding * 2) / qrcode.getModuleCount()
 | 
					 | 
				
			||||||
  var tileH = (width - options.padding * 2) / qrcode.getModuleCount()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // 绘制二维码
 | 
					 | 
				
			||||||
  for (var row = 0; row < qrcode.getModuleCount(); row++) {
 | 
					 | 
				
			||||||
    for (var col = 0; col < qrcode.getModuleCount(); col++) {
 | 
					 | 
				
			||||||
      ctx.fillStyle = qrcode.isDark(row, col) ? options.foreground : options.background
 | 
					 | 
				
			||||||
      var w = (Math.ceil((col + 1) * tileW) - Math.floor(col * tileW))
 | 
					 | 
				
			||||||
      var h = (Math.ceil((row + 1) * tileW) - Math.floor(row * tileW))
 | 
					 | 
				
			||||||
      ctx.fillRect(Math.round(col * tileW) + options.padding, Math.round(row * tileH) + options.padding, w, h);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // 绘制中心图标
 | 
					 | 
				
			||||||
  if (options.image.imageResource) {
 | 
					 | 
				
			||||||
    const imgW = options.image.width * dpr
 | 
					 | 
				
			||||||
    const imgH = options.image.height * dpr
 | 
					 | 
				
			||||||
    const dx = (width - imgW) / 2
 | 
					 | 
				
			||||||
    const dy = (width - imgH) / 2
 | 
					 | 
				
			||||||
    if (options.image.round) {
 | 
					 | 
				
			||||||
      // Logo边框
 | 
					 | 
				
			||||||
      const imgW2 = options.image.width * dpr + 30
 | 
					 | 
				
			||||||
      const dx2 = (width - imgW2) / 2
 | 
					 | 
				
			||||||
      const r2 = imgW2 / 2
 | 
					 | 
				
			||||||
      const cx2 = dx2 + r2;
 | 
					 | 
				
			||||||
      ctx.beginPath();
 | 
					 | 
				
			||||||
      ctx.arc(cx2, cx2, r2, 0, 2 * Math.PI);
 | 
					 | 
				
			||||||
      ctx.fillStyle = '#ffffff'
 | 
					 | 
				
			||||||
      ctx.fill();
 | 
					 | 
				
			||||||
      ctx.restore();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // 画Logo
 | 
					 | 
				
			||||||
      const r = imgW / 2
 | 
					 | 
				
			||||||
      const cx = dx + r;
 | 
					 | 
				
			||||||
      const cy = dy + r;
 | 
					 | 
				
			||||||
      ctx.beginPath();
 | 
					 | 
				
			||||||
      ctx.arc(cx, cy, r, 0, 2 * Math.PI);
 | 
					 | 
				
			||||||
      ctx.clip();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      ctx.drawImage(options.image.imageResource, dx, dy, imgW, imgW);
 | 
					 | 
				
			||||||
      ctx.restore();
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      ctx.drawImage(options.image.imageResource, dx, dy, imgW, imgH)
 | 
					 | 
				
			||||||
      ctx.restore();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return ctx
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default drawQrcode
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
https://github.com/DoctorWei/weapp-qrcode-canvas-2d
 | 
					 | 
				
			||||||
@@ -1,25 +0,0 @@
 | 
				
			|||||||
function scanQRCode(Taro) {
 | 
					 | 
				
			||||||
  // 只允许从相机扫码
 | 
					 | 
				
			||||||
  Taro.scanCode({
 | 
					 | 
				
			||||||
    onlyFromCamera: true,
 | 
					 | 
				
			||||||
    success(res) {
 | 
					 | 
				
			||||||
      console.log(res)
 | 
					 | 
				
			||||||
      if (res.scanType == "WX_CODE" && res.path) {
 | 
					 | 
				
			||||||
        let searchParams = res.path.split('?');
 | 
					 | 
				
			||||||
        if (searchParams.length > 1 && searchParams[1].startsWith('scene=guard')) {
 | 
					 | 
				
			||||||
          Taro.navigateTo({
 | 
					 | 
				
			||||||
            url: "/pages/scan/entrance"
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
          return
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      Taro.showToast({
 | 
					 | 
				
			||||||
        title: "您扫描的不是门禁码",
 | 
					 | 
				
			||||||
        icon: 'error',
 | 
					 | 
				
			||||||
        duration: 2000
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = scanQRCode;
 | 
					 | 
				
			||||||
@@ -1,28 +0,0 @@
 | 
				
			|||||||
const formatTime = date => {
 | 
					 | 
				
			||||||
  const year = date.getFullYear()
 | 
					 | 
				
			||||||
  const month = date.getMonth() + 1
 | 
					 | 
				
			||||||
  const day = date.getDate()
 | 
					 | 
				
			||||||
  const hour = date.getHours()
 | 
					 | 
				
			||||||
  const minute = date.getMinutes()
 | 
					 | 
				
			||||||
  const second = date.getSeconds()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const formatNumber = n => {
 | 
					 | 
				
			||||||
  n = n.toString()
 | 
					 | 
				
			||||||
  return n[1] ? n : `0${n}`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const formatDate = date => {
 | 
					 | 
				
			||||||
  const year = date.getFullYear()
 | 
					 | 
				
			||||||
  const month = date.getMonth() + 1
 | 
					 | 
				
			||||||
  const day = date.getDate()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return [year, month, day].map(formatNumber).join('-')
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = {
 | 
					 | 
				
			||||||
  formatTime,
 | 
					 | 
				
			||||||
  formatDate
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										22
									
								
								miniprogram/types/global.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,22 +0,0 @@
 | 
				
			|||||||
/// <reference types="@tarojs/taro" />
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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'
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
declare module '@tarojs/components' {
 | 
					 | 
				
			||||||
  export * from '@tarojs/components/types/index.vue3'
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -41,7 +41,7 @@ Page({
 | 
				
			|||||||
        debugText: JSON.stringify(options, null, 4),
 | 
					        debugText: JSON.stringify(options, null, 4),
 | 
				
			||||||
        userInfo: userInfo,
 | 
					        userInfo: userInfo,
 | 
				
			||||||
        userGroup: userGroup,
 | 
					        userGroup: userGroup,
 | 
				
			||||||
        displayUsername: userInfo ? (`${userInfo.realname} (${userInfo.username})`) : "请登录",
 | 
					        displayUsername: userInfo ? (`『${userInfo.realname}』`) : "请登录",
 | 
				
			||||||
        filterMenuItems: this.getFilterMenuItems(menuItemDict, userGroup)
 | 
					        filterMenuItems: this.getFilterMenuItems(menuItemDict, userGroup)
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      console.log("menuItemDict", menuItemDict)
 | 
					      console.log("menuItemDict", menuItemDict)
 | 
				
			||||||
 
 | 
				
			|||||||