删除旧 miniprogram 项目
@ -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,20 +0,0 @@
|
||||
import { createApp } from 'vue'
|
||||
import { setGlobalDataPlugin } from '@tarojs/taro'
|
||||
import './app.css'
|
||||
|
||||
const App = createApp({
|
||||
onShow(options) { },
|
||||
// 入口组件不需要实现 render 方法,即使实现了也会被 taro 所覆盖
|
||||
})
|
||||
|
||||
// 全局变量 refer: https://docs.taro.zone/docs/come-from-miniapp#%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F
|
||||
App.use(setGlobalDataPlugin, {
|
||||
globalData: {
|
||||
debugMode: true, // 是否展示调试内容
|
||||
baseUrl: true
|
||||
? "https://epp.only4.work"
|
||||
: "http://localhost", // 不带最后的 /
|
||||
}
|
||||
})
|
||||
|
||||
export default App
|
@ -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'
|
||||
}
|