Compare commits

...

No commits in common. 'master' and 'demo-md' have entirely different histories.

  1. 12
      .editorconfig
  2. 5
      .gitignore
  3. 8
      .prettierrc
  4. 11
      README.md
  5. 11
      babel.config.json
  6. 5
      dist.nu
  7. 4
      dist.ps1
  8. 5
      dist.sh
  9. 29
      eslint.config.mjs
  10. 22
      package.json
  11. 3796
      pnpm-lock.yaml
  12. 73
      project.config.json
  13. 118
      project.private.config.json
  14. 82
      src/api/request.ts
  15. 104
      src/app.json
  16. 43
      src/app.scss
  17. 170
      src/app.ts
  18. 6
      src/components/login/index.json
  19. 60
      src/components/login/index.scss
  20. 28
      src/components/login/index.ts
  21. 25
      src/components/login/index.wxml
  22. 6
      src/components/navbar/index.json
  23. 50
      src/components/navbar/index.ts
  24. 17
      src/components/navbar/index.wxml
  25. 5
      src/components/navigation-bar/navigation-bar.json
  26. 104
      src/components/navigation-bar/navigation-bar.scss
  27. 105
      src/components/navigation-bar/navigation-bar.ts
  28. 64
      src/components/navigation-bar/navigation-bar.wxml
  29. 21
      src/components/pagination/index.js
  30. 6
      src/components/pagination/index.json
  31. 6
      src/components/pagination/index.scss
  32. 6
      src/components/pagination/index.wxml
  33. 7
      src/components/pickerArea/index.json
  34. 76
      src/components/pickerArea/index.ts
  35. 13
      src/components/pickerArea/index.wxml
  36. 6
      src/components/popup/index.json
  37. 257
      src/components/popup/index.scss
  38. 51
      src/components/popup/index.ts
  39. 93
      src/components/popup/index.wxml
  40. 204
      src/components/star/index.ts
  41. 1
      src/components/star/index.wxml
  42. 7
      src/custom-tab-bar/index.json
  43. 19
      src/custom-tab-bar/index.scss
  44. 55
      src/custom-tab-bar/index.ts
  45. 14
      src/custom-tab-bar/index.wxml
  46. 6
      src/doc/pages/doc1/index.json
  47. 3
      src/doc/pages/doc1/index.scss
  48. 10
      src/doc/pages/doc1/index.ts
  49. 3
      src/doc/pages/doc1/index.wxml
  50. BIN
      src/images/1.gif
  51. BIN
      src/images/1.png
  52. BIN
      src/images/10.png
  53. BIN
      src/images/11.png
  54. BIN
      src/images/12.png
  55. BIN
      src/images/13.png
  56. BIN
      src/images/14.png
  57. BIN
      src/images/15.png
  58. BIN
      src/images/16.png
  59. BIN
      src/images/17.png
  60. BIN
      src/images/18.png
  61. BIN
      src/images/19.png
  62. BIN
      src/images/2.png
  63. BIN
      src/images/20.png
  64. BIN
      src/images/21.png
  65. BIN
      src/images/22.png
  66. BIN
      src/images/23.png
  67. BIN
      src/images/24.png
  68. BIN
      src/images/25.png
  69. BIN
      src/images/26.png
  70. BIN
      src/images/27.png
  71. BIN
      src/images/28.png
  72. BIN
      src/images/29.png
  73. BIN
      src/images/3.png
  74. BIN
      src/images/30.png
  75. BIN
      src/images/31.png
  76. BIN
      src/images/32.png
  77. BIN
      src/images/33.png
  78. BIN
      src/images/34.png
  79. BIN
      src/images/35.png
  80. BIN
      src/images/36.png
  81. BIN
      src/images/37.png
  82. BIN
      src/images/38.png
  83. BIN
      src/images/39.png
  84. BIN
      src/images/4.png
  85. BIN
      src/images/40.png
  86. BIN
      src/images/41.png
  87. BIN
      src/images/42.png
  88. BIN
      src/images/43.png
  89. BIN
      src/images/44.png
  90. BIN
      src/images/45.png
  91. BIN
      src/images/46.png
  92. BIN
      src/images/47.png
  93. BIN
      src/images/48.png
  94. BIN
      src/images/49.png
  95. BIN
      src/images/5.png
  96. BIN
      src/images/50.png
  97. BIN
      src/images/51.png
  98. BIN
      src/images/52.png
  99. BIN
      src/images/53.png
  100. BIN
      src/images/54.png
  101. Some files were not shown because too many files have changed in this diff Show More

12
.editorconfig

@ -1,12 +0,0 @@ @@ -1,12 +0,0 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

5
.gitignore vendored

@ -1,5 +1,2 @@ @@ -1,5 +1,2 @@
.svn
.vscode
node_modules
.idea
.DS_Store
src/images/.svn

8
.prettierrc

@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
{
"$schema": "http://json.schemastore.org/prettierrc",
"$schema":"https://json.schemastore.org/prettierrc.json",
"printWidth": 120,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"singleQuote": true,
"semi": true,
"singleQuote": false,
"bracketSpacing": true,
"trailingComma": "all",
"arrowParens": "always",
"endOfLine": "lf",
"endOfLine": "auto",
"htmlWhitespaceSensitivity": "ignore",
"singleAttributePerLine": false,
"overrides": [

11
README.md

@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
## global color
<!--图片文件夹svn地址-->
svn://39.106.86.127:28386/projects/wutian_xueyoubing_b/proj_src/shop/frontend/web/GeneB
(/images/)(\S*(?=["|']))
{{imageUrl}}$2?t={{Timestamp}}
https://pic1.zhimg.com/50/v2-8cfef5f9ea7d15963af2277c6814f152_720w.jpg?source=2c26e567

11
babel.config.json

@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
{
"plugins": [
[
"@babel/plugin-transform-react-jsx",
{
"runtime": "automatic",
"importSource": "@antv/f2"
}
]
]
}

5
dist.nu

@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
cd ./src/images/
svn add . --no-ignore --force
svn ci -m "版本更新"
cd ..
cd ..

4
dist.ps1

@ -5,6 +5,6 @@ Set-Location -Path ./src/images/ -ErrorAction Stop @@ -5,6 +5,6 @@ Set-Location -Path ./src/images/ -ErrorAction Stop
svn add . --no-ignore --force
# Commit the changes with a message
svn ci -m "版本更新"
svn ci -m "update"
ssh hb127 "cd /data1/wwwroot/default/wutian_xueyoubing_b/shop/frontend/web/ && svn up && exit"
ssh hb127 "cd /data/wwwroot/default/wutian_xueyoubing_b/demo && svn up && exit"

5
dist.sh

@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
#!/bin/bash
cd ./src/images/ || exit
svn add . --no-ignore --force
svn ci -m "版本更新"
exit

29
eslint.config.mjs

@ -1,29 +0,0 @@ @@ -1,29 +0,0 @@
// eslint.config.mjs
import antfu from '@antfu/eslint-config'
import prettierConfig from 'eslint-config-prettier'
export default antfu(
{
env: {
es6: true,
},
stylistic: false,
parserOptions: { project: ['./tsconfig.json'] },
globals: {
wx: true,
App: true,
Page: true,
getCurrentPages: true,
getApp: true,
Component: true,
requirePlugin: true,
requireMiniProgram: true,
},
rules: {
'eslint-comments/no-unlimited-disable': 'off',
'ts/no-require-imports': 'off',
eqeqeq: 'off',
},
},
prettierConfig,
)

22
package.json

@ -2,31 +2,21 @@ @@ -2,31 +2,21 @@
"name": "geneb",
"version": "1.0.0",
"description": "",
"keywords": [],
"author": "",
"license": "",
"keywords": [],
"scripts": {
"beforeCompile": "babel src/pages --out-dir src/pages --only **/*.jsx",
"lint:fix": "eslint . --fix"
},
"scripts": {},
"type": "module",
"dependencies": {
"@miniprogram-component-plus/video-swiper": "^1.0.1",
"@vant/weapp": "^1.11.2",
"@vant/weapp": "^1.11.1",
"dayjs": "^1.11.10",
"echarts": "^5.4.3",
"miniprogram-licia": "^1.39.2",
"miniprogram-licia": "^1.39.1",
"mp-html": "^2.4.2",
"number-precision": "^1.6.0"
},
"devDependencies": {
"@antfu/eslint-config": "^3.2.0",
"@babel/cli": "^7.23.4",
"@babel/core": "^7.23.6",
"@babel/plugin-transform-react-jsx": "^7.23.4",
"eslint": "^9.9.1",
"eslint-config-prettier": "^9.1.0",
"miniprogram-api-typings": "^3.12.2",
"prettier": "^3.3.3",
"prettier": "^3.5.3",
"typescript": "^5.8.3"
}
}

3796
pnpm-lock.yaml

File diff suppressed because it is too large Load Diff

73
project.config.json

@ -1,49 +1,43 @@ @@ -1,49 +1,43 @@
{
"description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"description": "项目配置文件",
"miniprogramRoot": "src/",
"compileType": "miniprogram",
"compileType": "src",
"setting": {
"useCompilerPlugins": [
"typescript",
"sass"
],
"urlCheck": true,
"coverView": true,
"es6": true,
"postcss": true,
"lazyloadPlaceholderEnable": false,
"preloadBackgroundData": false,
"minified": true,
"autoAudits": false,
"uglifyFileName": false,
"uploadWithSourceMap": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"coverView": false,
"postcss": false,
"minified": false,
"enhance": true,
"useMultiFrameRuntime": true,
"showShadowRootInWxmlPanel": true,
"packNpmManually": true,
"showShadowRootInWxmlPanel": false,
"packNpmRelationList": [
{
"packageJsonPath": "package.json",
"miniprogramNpmDistDir": "./src"
}
],
"ignoreUploadUnusedFiles": true,
"compileHotReLoad": false,
"skylineRenderEnable": true,
"es6": true,
"compileWorklet": false,
"uglifyFileName": false,
"uploadWithSourceMap": true,
"packNpmManually": true,
"minifyWXSS": true,
"useStaticServer": true,
"showES6CompileOption": false,
"checkInvalidKey": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"disableUseStrict": false,
"minifyWXML": true,
"localPlugins": false,
"condition": false,
"ignoreUploadUnusedFiles": true,
"compileWorklet": false,
"swc": false,
"disableSWC": true
"disableSWC": true,
"disableUseStrict": false
},
"simulatorType": "wechat",
"simulatorPluginLibVersion": {},
@ -53,24 +47,31 @@ @@ -53,24 +47,31 @@
"tabIndent": "insertSpaces",
"tabSize": 2
},
"libVersion": "2.32.3",
"packOptions": {
"ignore": [
{
"value": "/images/*.*",
"value": "/images/*.jpg",
"type": "glob"
},
{
"value": "/images/**/*.jpg",
"type": "glob"
},
{
"value": "/images/*.png",
"type": "glob"
},
{
"value": "/images/**/*.*",
"value": "/images/**/*.png",
"type": "glob"
},
{
"value": "/images/**/*.gif",
"type": "glob"
}
],
"include": []
},
"appid": "wx96104303877e3fd9",
"scripts": {
"beforeCompile": "pnpm run beforeCompile",
"beforePreview": "pnpm run beforeCompile",
"beforeUpload": "pnpm run beforeCompile"
},
"libVersion": "3.5.8"
"appid": "wxaae50c206446a964"
}

118
project.private.config.json

@ -1,134 +1,42 @@ @@ -1,134 +1,42 @@
{
"projectname": "GeneB-miniprogram",
"libVersion": "2.32.3",
"projectname": "GeneB-miniprogram-demo",
"setting": {
"compileHotReLoad": true,
"urlCheck": true,
"coverView": true,
"coverView": false,
"lazyloadPlaceholderEnable": false,
"skylineRenderEnable": false,
"skylineRenderEnable": true,
"preloadBackgroundData": false,
"autoAudits": false,
"useApiHook": true,
"useApiHostProcess": true,
"showShadowRootInWxmlPanel": true,
"useStaticServer": true,
"showShadowRootInWxmlPanel": false,
"useStaticServer": false,
"useLanDebug": false,
"showES6CompileOption": false,
"compileHotReLoad": true,
"bigPackageSizeSupport": false,
"checkInvalidKey": true,
"ignoreDevUnusedFiles": true,
"bigPackageSizeSupport": false
"ignoreDevUnusedFiles": true
},
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"condition": {
"miniprogram": {
"list": [
{
"name": "患者-问医生",
"pathName": "patient/pages/askPatient/index",
"name": "pages/6/index",
"pathName": "pages/6/index",
"query": "",
"scene": null,
"launchMode": "default"
},
{
"name": "知识夸详情-文章",
"pathName": "pages/knowledgeDetail/index",
"query": "id=15",
"launchMode": "default",
"scene": null
},
{
"name": "知识库详情-视频",
"pathName": "pages/knowledgeDetailVideo/index",
"query": "id=3",
"launchMode": "default",
"scene": null
},
{
"name": "患者-首页",
"pathName": "patient/pages/home/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-录入个人信息",
"pathName": "patient/pages/entryInfo/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-登录",
"pathName": "patient/pages/login/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-协议",
"pathName": "patient/pages/protocol/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "test",
"pathName": "pages/test/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "我的",
"pathName": "pages/my/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "大家都在问",
"pathName": "pages/ask/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "知识库",
"pathName": "pages/knowledge/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "基因疗法申请-结果页",
"pathName": "pages/applyFromResult/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "基因疗法申请",
"pathName": "pages/applyFrom/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "首页",
"pathName": "pages/index/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "登录",
"pathName": "pages/login/index",
"pathName": "pages/1/index",
"query": "",
"launchMode": "default",
"scene": null
}
]
}
},
"libVersion": "3.5.8"
}
}

82
src/api/request.ts

@ -1,82 +0,0 @@ @@ -1,82 +0,0 @@
interface IGlobalParams {
gUrl: string
version: string
}
export const request = function (
{ gUrl, version }: IGlobalParams,
{
url,
method,
data,
header,
showMsg = true,
loading = false,
loadingText = '加载中...',
isJSON = false,
...options
}: IAgaxParams,
): Promise<any> {
return new Promise((resolve, reject) => {
if (loading) {
wx.showLoading({
title: loadingText,
mask: true,
})
}
wx.request({
header: {
loginState: getApp().globalData.loginState,
...header,
},
url: gUrl + url,
method,
data: {
loginState: getApp().globalData.loginState,
...(data as object),
},
...options,
success(res: any) {
const { code, data } = res.data
if (isJSON) {
resolve(res.data)
} else if (code === 0) {
resolve(data)
} else if (showMsg) {
const msg = errPicker(res.data)
if (loading) {
setTimeout(() => {
wx.showToast({
title: msg,
icon: 'none',
})
}, 30)
} else {
wx.showToast({
title: msg,
icon: 'none',
})
reject(res)
}
} else {
reject(res)
}
},
fail(err) {
reject(err)
},
complete() {
if (loading) {
wx.hideLoading()
}
},
})
})
}
function errPicker(err) {
if (typeof err === 'string') {
return err
}
return err.data || err.msg || err.errMsg || (err.detail && err.detail.errMsg) || '未知错误'
}

104
src/app.json

@ -1,68 +1,60 @@ @@ -1,68 +1,60 @@
{
"$schema": "https://dldir1.qq.com/WechatWebDev/editor-extension/wx-json/app.schema.json",
"pages": [
"pages/start/index",
"pages/login/index",
"pages/index/index",
"pages/my/index",
"pages/applyFrom/index",
"pages/applyFromResult/index",
"pages/knowledge/index",
"pages/knowledgeDetail/index",
"pages/knowledgeDetailVideo/index",
"pages/ask/index"
"pages/1/index",
"pages/2/index",
"pages/3/index",
"pages/4/index",
"pages/5/index",
"pages/6/index",
"pages/7/index",
"pages/8/index",
"pages/9/index",
"pages/10/index",
"pages/11/index",
"pages/12/index",
"pages/13/index",
"pages/14/index",
"pages/15/index",
"pages/16/index",
"pages/17/index",
"pages/18/index",
"pages/19/index",
"pages/20/index",
"pages/21/index",
"pages/22/index",
"pages/23/index",
"pages/24/index",
"pages/25/index",
"pages/26/index",
"pages/27/index",
"pages/28/index",
"pages/29/index",
"pages/30/index",
"pages/31/index"
],
"subPackages": [
{
"root": "patient",
"pages": [
"pages/protocol/index",
"pages/login/index",
"pages/entryInfo/index",
"pages/home/index",
"pages/askPatient/index"
]
},
{
"root": "doc",
"pages": ["pages/doc1/index"]
}
],
"tabBar": {
"custom": true,
"list": [
{
"pagePath": "pages/index/index",
"text": "首页"
},
{
"pagePath": "pages/knowledge/index",
"text": "知识库"
},
{
"pagePath": "pages/my/index",
"text": "我的"
}
]
},
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "Weixin",
"navigationBarTextStyle": "black"
"navigationBarTextStyle": "black",
"navigationStyle": "custom"
},
"sitemapLocation": "sitemap.json",
"resolveAlias": {
"@/*": "/*"
},
"usingComponents": {
"pagination": "/components/pagination/index",
"van-icon": "@vant/weapp/icon/index"
},
"requiredPrivateInfos": [],
"permission": {
"scope.userFuzzyLocation": {
"desc": "获取您的当前位置,用于模糊匹配您附近的活动"
"style": "v2",
"rendererOptions": {
"skyline": {
"defaultDisplayBlock": true,
"defaultContentBox": true,
"tagNameStyleIsolation": "legacy",
"disableABTest": true,
"sdkVersionBegin": "3.0.0",
"sdkVersionEnd": "15.255.255"
}
},
"componentFramework": "glass-easel",
"sitemapLocation": "sitemap.json",
"lazyCodeLoading": "requiredComponents",
"usingComponents": {
"navigation-bar": "/components/navigation-bar/navigation-bar"
}
}

43
src/app.scss

@ -1,35 +1,10 @@ @@ -1,35 +1,10 @@
.clearfix:after {
content: '020';
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {
/* 触发 hasLayout */
zoom: 1;
}
.scroll::-webkit-scrollbar {
width: 0;
height: 0;
color: transparent;
}
.extend-via-pseudo-elem {
position: relative;
overflow: visible;
&::before {
content: '';
position: absolute;
top: -20rpx;
right: -20rpx;
bottom: -20rpx;
left: -20rpx;
}
}
view {
word-break: break-all;
/**app.wxss**/
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 200rpx 0;
box-sizing: border-box;
}

170
src/app.ts

@ -1,173 +1,11 @@ @@ -1,173 +1,11 @@
/* eslint-disable */
// app.ts
import { request } from './api/request'
import { parseScene } from './utils/util'
const licia = require('miniprogram-licia')
const dayjs = require('dayjs')
require('/utils/dayjs/day-zh-cn.js')
const relativeTime = require('/utils/dayjs/relativeTime.js')
dayjs.locale('zh-cn') // 全局使用
dayjs.extend(relativeTime)
// page
import page from '@/utils/page'
import page from "@/utils/page";
App<IAppOption>({
globalData: {
// dev
// appid:wxa4ece062e60e93a5
// url: 'https://m.wtx.hbraas.com',
// upFileUrl: 'https://m.wtx.hbraas.com/',
// imageUrl: 'https://m.wtx.hbraas.com/GeneB/',
// pro
// appid:wx96104303877e3fd9
url: 'https://m.gene.hbsaas.com',
upFileUrl: 'https://m.gene.hbsaas.com/',
imageUrl: 'https://m.gene.hbsaas.com/GeneB/',
Timestamp: new Date().getTime(),
scene: {},
loginState: '',
isLogin: 0, // 0 未登录 1 已登录
isReg: 0,
userId: '',
guestPrivacyAgree: false,
// anyWhere: true,
anyWhere: false,
userInfo: {},
imageUrl: "https://m.wtx.hbraas.com/demo/web/images/",
},
onLaunch() {
this.autoUpdate()
Page = page as WechatMiniprogram.Page.Constructor
wx.ajax = licia.curry(request)({ gUrl: this.globalData.url })
wx.setInnerAudioOption({
obeyMuteSwitch: false,
mixWithOther: false,
})
},
onShow(options) {
if (options.query.scene) {
this.globalData.scene = parseScene(options.query.scene) as { workerId: string }
}
this.startLogin()
},
startLogin() {
wx.login({
success: (res) => {
wx.ajax({
method: 'GET',
url: '?r=wtx/user/init-login',
data: {
code: res.code,
},
}).then((res) => {
this.globalData.loginState = res.loginState
this.globalData.isReg = res.isReg
this.globalData.isLogin = res.isLogin
this.globalData.userId = res.userId
this.globalData.guestPrivacyAgree = res.guestPrivacyAgree
})
},
})
},
waitLogin() {
let time: number
return new Promise((resolve: (value?) => void) => {
if (this.globalData.loginState) {
resolve()
return
}
time = setInterval(() => {
if (this.globalData.loginState) {
clearInterval(time)
resolve()
}
}, 500)
})
},
mpBehavior(data: { PageName: string }) {
wx.ajax({
method: 'POST',
url: '?r=wtx/mp-behavior/add',
data: data,
loading: false,
showMsg: false,
}).then((res) => {
console.log('res: ', res)
})
},
getUserInfo() {
return wx.ajax({
method: 'GET',
url: '?r=wtx/user/userinfo',
})
},
autoUpdate: function () {
var self = this
// 获取小程序更新机制兼容
if (wx.canIUse('getUpdateManager')) {
const updateManager = wx.getUpdateManager()
//1. 检查小程序是否有新版本发布
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
if (res.hasUpdate) {
//检测到新版本,需要更新,给出提示
wx.showModal({
title: '更新提示',
content: '检测到新版本,是否下载新版本并重启小程序?',
success: function (res) {
if (res.confirm) {
//2. 用户确定下载更新小程序,小程序下载及更新静默进行
self.downLoadAndUpdate(updateManager)
} else if (res.cancel) {
//用户点击取消按钮的处理,如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了
wx.showModal({
title: '温馨提示~',
content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~',
showCancel: false, //隐藏取消按钮
confirmText: '确定更新', //只保留确定更新按钮
success: function (res) {
if (res.confirm) {
//下载新版本,并重新应用
self.downLoadAndUpdate(updateManager)
}
},
})
}
},
})
}
})
} else {
// 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
wx.showModal({
title: '提示',
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。',
})
}
},
downLoadAndUpdate: function (updateManager) {
//静默下载更新小程序新版本
updateManager.onUpdateReady(function () {
wx.hideLoading()
//新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
})
updateManager.onUpdateFailed(function () {
// 新的版本下载失败
wx.showModal({
title: '新版本更新失败',
content: '您可删除当前小程序,重新打开尝试',
})
})
Page = page as WechatMiniprogram.Page.Constructor;
},
})
});

6
src/components/login/index.json

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
{
"component": true,
"usingComponents": {
"van-popup": "@vant/weapp/popup/index"
}
}

60
src/components/login/index.scss

@ -1,60 +0,0 @@ @@ -1,60 +0,0 @@
.login1 {
.logo {
position: relative;
z-index: 1;
display: block;
margin: 0 auto -82rpx;
width: 164rpx;
height: 164rpx;
}
.container {
width: 100%;
box-sizing: border-box;
border-radius: 32rpx 0;
padding: 136rpx 60rpx calc(env(safe-area-inset-bottom) + 64rpx);
background: linear-gradient(6deg, #ffffff 0%, #ffe6e4 100%);
.title {
text-align: center;
color: rgba(1, 1, 5, 1);
font-size: 40rpx;
font-weight: bold;
}
.content {
margin-top: 16rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
text-align: center;
}
.btn {
margin-top: 64rpx;
height: 88rpx;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 84rpx;
border: none;
outline: none;
font-size: 32rpx;
color: rgba(247, 247, 247, 1);
display: flex;
align-items: center;
justify-content: center;
&::after {
border: none;
}
}
.check {
margin-top: 40rpx;
display: flex;
align-items: center;
.checkbox {
transform: scale(0.8);
}
.check-content {
font-size: 32rpx;
color: rgba(1, 1, 5, 0.3);
.link {
color: rgba(242, 58, 47, 1);
}
}
}
}
}

28
src/components/login/index.ts

@ -1,28 +0,0 @@ @@ -1,28 +0,0 @@
const app = getApp<IAppOption>()
Component({
properties: {
show: {
type: Boolean,
value: false,
},
},
data: {
imageUrl: app.globalData.imageUrl,
Timestamp:app.globalData.Timestamp
},
methods: {
handleOk() {
this.setData({
show: false,
})
this.triggerEvent('ok')
},
handleCancel() {
this.setData({
show: false,
})
this.triggerEvent('cancel')
},
},
})

25
src/components/login/index.wxml

@ -1,25 +0,0 @@ @@ -1,25 +0,0 @@
<van-popup
bind:click-overlay="handleCancel"
round
z-index="{{100000}}"
show="{{ show }}"
position="bottom"
safe-area-inset-bottom="{{false}}"
custom-style="background:transparent;"
>
<view class="login1">
<image class="logo" src="{{imageUrl}}logo1.png?t={{Timestamp}}"></image>
<view class="container">
<view class="title">立即授权</view>
<view class="content">解锁更多基因治疗知识</view>
<button class="btn">手机号快速授权</button>
<view class="check">
<checkbox class="checkbox" color="#ee5a4a"></checkbox>
<view class="check-content">
我已阅读并同意
<text class="link">《个人信息及隐私政策》</text>
</view>
</view>
</view>
</view>
</van-popup>

6
src/components/navbar/index.json

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
{
"component": true,
"usingComponents": {
"van-nav-bar": "@vant/weapp/nav-bar/index"
}
}

50
src/components/navbar/index.ts

@ -1,50 +0,0 @@ @@ -1,50 +0,0 @@
const app = getApp<IAppOption>()
Component({
options: {
multipleSlots: true, // 在组件定义时的选项中启用多slot支持
},
properties: {
title: String,
fixed: Boolean,
placeholder: Boolean,
leftText: String,
rightText: String,
customStyle: String,
leftArrow: Boolean,
border: {
type: Boolean,
value: false,
},
zIndex: {
type: Number,
value: 1,
},
back: {
type: Boolean,
value: true,
},
},
/**
*
*/
data: {
imageUrl: app.globalData.imageUrl,
Timestamp:app.globalData.Timestamp
},
/**
*
*/
methods: {
onClickLeft() {
if(this.data.back)
this.triggerEvent('clickLeft', {}, {})
},
onClickRight() {
this.triggerEvent('clickRight', {}, {})
},
},
})

17
src/components/navbar/index.wxml

@ -1,17 +0,0 @@ @@ -1,17 +0,0 @@
<van-nav-bar
title="{{title}}"
fixed="{{fixed}}"
placeholder="{{placeholder}}"
leftText="{{leftText}}"
rightText="{{rightText}}"
customStyle="{{customStyle}}"
leftArrow="{{leftArrow}}"
border="{{border}}"
zIndex="{{zIndex}}"
bind:click-left="onClickLeft"
bind:click-right="onClickRight"
>
<slot name="left" slot="left"></slot>
<slot name="title" slot="title"></slot>
<slot name="right" slot="right"></slot>
</van-nav-bar>

5
src/components/navigation-bar/navigation-bar.json

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
{
"component": true,
"styleIsolation": "apply-shared",
"usingComponents": {}
}

104
src/components/navigation-bar/navigation-bar.scss

@ -0,0 +1,104 @@ @@ -0,0 +1,104 @@
.weui-navigation-bar {
--weui-FG-0: rgba(0, 0, 0, 0.9);
--height: 44px;
--left: 16px;
}
.weui-navigation-bar .android {
--height: 48px;
}
.weui-navigation-bar {
position: fixed;
top: 0;
left: 0;
z-index: 2;
overflow: hidden;
color: var(--weui-FG-0);
flex: none;
}
.weui-navigation-bar__inner {
position: relative;
top: 0;
left: 0;
height: calc(var(--height) + env(safe-area-inset-top));
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
padding-top: env(safe-area-inset-top);
width: 100%;
box-sizing: border-box;
}
.weui-navigation-bar__left {
position: relative;
padding-left: var(--left);
display: flex;
flex-direction: row;
align-items: flex-start;
height: 100%;
box-sizing: border-box;
}
.weui-navigation-bar__btn_goback_wrapper {
padding: 11px 18px 11px 16px;
margin: -11px -18px -11px -16px;
}
.weui-navigation-bar__btn_goback_wrapper.weui-active {
opacity: 0.5;
}
.weui-navigation-bar__btn_goback {
font-size: 12px;
width: 12px;
height: 24px;
-webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E")
no-repeat 50% 50%;
mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E")
no-repeat 50% 50%;
-webkit-mask-size: cover;
mask-size: cover;
background-color: var(--weui-FG-0);
}
.weui-navigation-bar__center {
font-size: 17px;
text-align: center;
position: relative;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
font-weight: bold;
flex: 1;
height: 100%;
}
.weui-navigation-bar__loading {
margin-right: 4px;
align-items: center;
}
.weui-loading {
font-size: 16px;
width: 16px;
height: 16px;
display: block;
background: transparent
url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='80px' height='80px' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23606060' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23606060' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23606060' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A")
no-repeat;
background-size: 100%;
margin-left: 0;
animation: loading linear infinite 1s;
}
@keyframes loading {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}

105
src/components/navigation-bar/navigation-bar.ts

@ -0,0 +1,105 @@ @@ -0,0 +1,105 @@
Component({
options: {
multipleSlots: true // 在组件定义时的选项中启用多slot支持
},
/**
*
*/
properties: {
extClass: {
type: String,
value: ''
},
title: {
type: String,
value: ''
},
background: {
type: String,
value: ''
},
color: {
type: String,
value: ''
},
back: {
type: Boolean,
value: true
},
loading: {
type: Boolean,
value: false
},
homeButton: {
type: Boolean,
value: false,
},
animated: {
// 显示隐藏的时候opacity动画效果
type: Boolean,
value: true
},
show: {
// 显示隐藏导航,隐藏的时候navigation-bar的高度占位还在
type: Boolean,
value: true,
observer: '_showChange'
},
// back为true的时候,返回的页面深度
delta: {
type: Number,
value: 1
},
},
/**
*
*/
data: {
displayStyle: ''
},
lifetimes: {
attached() {
const rect = wx.getMenuButtonBoundingClientRect()
wx.getSystemInfo({
success: (res) => {
const isAndroid = res.platform === 'android'
const isDevtools = res.platform === 'devtools'
this.setData({
ios: !isAndroid,
innerPaddingRight: `padding-right: ${res.windowWidth - rect.left}px`,
leftWidth: `width: ${res.windowWidth - rect.left }px`,
safeAreaTop: isDevtools || isAndroid ? `height: calc(var(--height) + ${res.safeArea.top}px); padding-top: ${res.safeArea.top}px` : ``
})
}
})
},
},
/**
*
*/
methods: {
_showChange(show: boolean) {
const animated = this.data.animated
let displayStyle = ''
if (animated) {
displayStyle = `opacity: ${
show ? '1' : '0'
};transition:opacity 0.5s;`
} else {
displayStyle = `display: ${show ? '' : 'none'}`
}
this.setData({
displayStyle
})
},
back() {
const data = this.data
if (data.delta) {
wx.navigateBack({
delta: data.delta
})
}
this.triggerEvent('back', { delta: data.delta }, {})
}
},
})

64
src/components/navigation-bar/navigation-bar.wxml

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
<view class="weui-navigation-bar {{extClass}}">
<view class="weui-navigation-bar__inner {{ios ? 'ios' : 'android'}}" style="color: {{color}}; background: {{background}}; {{displayStyle}}; {{innerPaddingRight}}; {{safeAreaTop}};">
<!-- 左侧按钮 -->
<view class='weui-navigation-bar__left' style="{{leftWidth}};">
<block wx:if="{{back || homeButton}}">
<!-- 返回上一页 -->
<block wx:if="{{back}}">
<view class="weui-navigation-bar__buttons weui-navigation-bar__buttons_goback">
<view
bindtap="back"
class="weui-navigation-bar__btn_goback_wrapper"
hover-class="weui-active"
hover-stay-time="100"
aria-role="button"
aria-label="返回"
>
<view class="weui-navigation-bar__button weui-navigation-bar__btn_goback"></view>
</view>
</view>
</block>
<!-- 返回首页 -->
<block wx:if="{{homeButton}}">
<view class="weui-navigation-bar__buttons weui-navigation-bar__buttons_home">
<view
bindtap="home"
class="weui-navigation-bar__btn_home_wrapper"
hover-class="weui-active"
aria-role="button"
aria-label="首页"
>
<view class="weui-navigation-bar__button weui-navigation-bar__btn_home"></view>
</view>
</view>
</block>
</block>
<block wx:else>
<slot name="left"></slot>
</block>
</view>
<!-- 标题 -->
<view class='weui-navigation-bar__center'>
<view wx:if="{{loading}}" class="weui-navigation-bar__loading" aria-role="alert">
<view
class="weui-loading"
aria-role="img"
aria-label="加载中"
></view>
</view>
<block wx:if="{{title}}">
<text>{{title}}</text>
</block>
<block wx:else>
<slot name="center"></slot>
</block>
</view>
<!-- 右侧留空 -->
<view class='weui-navigation-bar__right'>
<slot name="right"></slot>
</view>
</view>
</view>

21
src/components/pagination/index.js

@ -1,21 +0,0 @@ @@ -1,21 +0,0 @@
const app = getApp();
Component({
properties: {
pagination: {
type: Object,
value() {
return {};
},
},
},
data: {
imageUrl: app.globalData.imageUrl,
Timestamp:app.globalData.Timestamp
},
methods: {
handleTouchmove() {
return false;
},
},
});

6
src/components/pagination/index.json

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
{
"component": true,
"usingComponents": {
"van-divider": "@vant/weapp/divider/index"
}
}

6
src/components/pagination/index.scss

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
/* components/pagination/index.wxss */
.none {
display: block;
margin: 30rpx auto;
width: 80%;
}

6
src/components/pagination/index.wxml

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
<image class="none" src="{{imageUrl}}none.png" wx:if="{{pagination.count==0}}"></image>
<van-divider contentPosition="center" wx:elif="{{pagination.page<pagination.pages}}">
<van-loading />
加载中...
</van-divider>
<van-divider contentPosition="center" wx:elif="{{pagination.page>=pagination.pages}}">没有更多了</van-divider>

7
src/components/pickerArea/index.json

@ -1,7 +0,0 @@ @@ -1,7 +0,0 @@
{
"component": true,
"usingComponents": {
"van-popup": "@vant/weapp/popup/index",
"van-cascader": "@vant/weapp/cascader/index"
}
}

76
src/components/pickerArea/index.ts

@ -1,76 +0,0 @@ @@ -1,76 +0,0 @@
const app = getApp<IAppOption>()
Component({
properties: {
level: {
type: Number,
value: 3,
},
value: {
type: String,
value: '',
},
},
data: {
imageUrl: app.globalData.imageUrl,
Timestamp:app.globalData.Timestamp,
show: false,
options: [],
fieldNames: {
text: 'label',
value: 'value',
children: 'children',
},
},
lifetimes: {
attached() {
this.getArea()
},
},
methods: {
handleShow() {
this.setData({
show: true,
})
},
getArea() {
const { level } = this.data
wx.ajax({
method: 'GET',
url: '/js/area.json',
data: {},
isJSON: true,
}).then((res) => {
if (level === 1) {
res.forEach((item: any) => {
delete item.children
})
}
if (level === 2) {
res.forEach((item: any) => {
item.children.forEach((child: any) => {
delete child.children
})
})
}
this.setData({
options: res,
})
})
},
onFinish(e) {
this.triggerEvent('change', e.detail.selectedOptions)
this.setData({
show: false,
})
},
onClose() {
this.setData({
show: false,
})
this.triggerEvent('cancel')
},
},
})

13
src/components/pickerArea/index.wxml

@ -1,13 +0,0 @@ @@ -1,13 +0,0 @@
<van-popup show="{{ show }}" round position="bottom">
<van-cascader
wx:if="{{ show }}"
value="{{ value }}"
title="请选择所在地区"
fieldNames="{{fieldNames}}"
options="{{ options }}"
bind:close="onClose"
bind:finish="onFinish"
/>
</van-popup>
<slot bind:tap="handleShow"></slot>

6
src/components/popup/index.json

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
{
"component": true,
"usingComponents": {
"van-popup": "@vant/weapp/popup/index"
}
}

257
src/components/popup/index.scss

@ -1,257 +0,0 @@ @@ -1,257 +0,0 @@
.popup1 {
padding: 84rpx 60rpx;
background: linear-gradient(6deg, #ffffff 0%, #ffe6e4 100%);
.logo {
display: block;
margin: 0 auto;
width: 164rpx;
height: 164rpx;
}
.title {
margin-top: 32rpx;
font-size: 48rpx;
color: #f23a2f;
font-weight: bold;
text-align: center;
}
.content {
margin-top: 30rpx;
font-size: 32rpx;
color: #010105;
line-height: 52rpx;
}
.check {
margin-top: 64rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 0.3);
display: flex;
.checkbox {
transform: scale(0.8);
}
.c-content {
padding-top: 5rpx;
line-height: 48rpx;
}
}
.link {
color: #f23a2f;
}
.btn1 {
margin-top: 40rpx;
height: 88rpx;
border-radius: 84rpx;
font-size: 32rpx;
color: #ffffff;
text-align: center;
line-height: 88rpx;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
}
.btn2 {
margin-top: 20rpx;
height: 88rpx;
text-align: center;
line-height: 88rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 0.4);
}
}
.popup2 {
padding: 36rpx 34rpx 58rpx;
background-color: #fff;
.photo {
width: 492rpx;
height: 492rpx;
}
.content {
font-size: 40rpx;
color: rgba(0, 0, 0, 1);
text-align: center;
}
}
.popup3 {
.icon {
position: relative;
z-index: 1;
margin: 0 auto;
display: block;
width: 144rpx;
height: 144rpx;
}
.container {
margin-top: -94rpx;
padding: 124rpx 32rpx 32rpx;
width: 604rpx;
background: linear-gradient(7deg, #ffffff 19%, #ffe8e4 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
box-sizing: border-box;
.title {
display: block;
margin: 0 auto;
width: 146rpx;
height: 40rpx;
}
.card {
position: relative;
margin-top: 32rpx;
padding: 32rpx;
background: #ffffff;
display: flex;
gap: 16rpx;
justify-content: space-between;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.05);
border-radius: 24rpx 24rpx 24rpx 24rpx;
&::after {
position: absolute;
bottom: -24rpx;
left: 32rpx;
content: '';
width: 476rpx;
height: 24rpx;
background: #ffebea;
border-radius: 0 0 24rpx 24rpx;
}
.avatar {
flex-shrink: 0;
width: 92rpx;
height: 92rpx;
border-radius: 50%;
}
.wrap {
flex: 1;
.name {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.hostipal {
margin-top: 16rpx;
line-height: 28rpx;
.content {
margin-right: 8rpx;
display: inline-block;
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
}
.tag {
display: inline-block;
font-size: 20rpx;
color: rgba(255, 255, 255, 1);
padding: 0 8rpx;
background-color: rgba(255, 186, 1, 1);
border-radius: 6rpx;
}
}
}
}
.btn {
margin-top: 66rpx;
height: 88rpx;
line-height: 88rpx;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 84rpx 84rpx 84rpx 84rpx;
}
}
}
.popup4 {
.icon {
position: relative;
z-index: 1;
margin: 0 auto;
display: block;
width: 144rpx;
height: 144rpx;
}
.container {
margin-top: -94rpx;
padding: 124rpx 32rpx 32rpx;
width: 604rpx;
background: linear-gradient(7deg, #ffffff 19%, #ffe8e4 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
box-sizing: border-box;
.title {
display: block;
margin: 0 auto;
width: 146rpx;
height: 40rpx;
}
.content {
margin-top: 16rpx;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
text-align: center;
}
.btn {
margin-top: 32rpx;
height: 88rpx;
line-height: 88rpx;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 84rpx 84rpx 84rpx 84rpx;
}
}
}
.popup5 {
.container {
padding: 36rpx 32rpx 32rpx;
width: 604rpx;
background: linear-gradient(4deg, #f7f7fa 19%, #ffe8e4 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
box-sizing: border-box;
.title {
display: block;
margin: 0 auto;
width: 242rpx;
height: 38rpx;
}
.row {
margin-top: 32rpx;
padding: 26rpx 32rpx;
display: flex;
gap: 22rpx;
align-items: center;
background: #ffffff;
border-radius: 16rpx 16rpx 16rpx 16rpx;
&:last-of-type {
margin-top: 24rpx;
}
.avatar {
flex-shrink: 0;
width: 96rpx;
height: 103rpx;
}
.wrap {
flex: 1;
line-height: 44rpx;
.name {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.content {
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
}
.icon {
width: 40rpx;
height: 40rpx;
}
}
}
}
.close {
margin: 32rpx auto 0;
display: block;
width: 64rpx;
height: 64rpx;
}

51
src/components/popup/index.ts

@ -1,51 +0,0 @@ @@ -1,51 +0,0 @@
const app = getApp<IAppOption>()
Component({
properties: {
show: {
type: Boolean,
value: false,
},
type: String,
params: {
type: Object,
value() {
return {}
},
},
},
data: {
popup1Check1: false,
imageUrl: app.globalData.imageUrl,
Timestamp: app.globalData.Timestamp,
},
methods: {
handleOk() {
const { type } = this.data
if (type === 'argument' && !this.data.popup1Check1) {
wx.showToast({
title: '请同意隐私政策',
icon: 'none',
})
return
}
this.triggerEvent('ok')
},
handleCancel() {
this.triggerEvent('cancel')
},
routerTo(e: any) {
const { url } = e.currentTarget.dataset
wx.navigateTo({
url,
})
},
handlePopup1Check1() {
if (this.data.popup1Check1) {
app.mpBehavior({ PageName: 'BTN_PATIENTPRIVACY' })
}
},
},
})

93
src/components/popup/index.wxml

@ -1,93 +0,0 @@ @@ -1,93 +0,0 @@
<van-popup
bind:click-overlay="handleCancel"
round
z-index="{{100000}}"
show="{{ show }}"
custom-style="background:transparent;"
position="{{params.position || 'center'}}"
safe-area-inset-bottom="{{false}}"
root-portal
>
<view class="popup1" wx:if="{{type==='argument'}}">
<image class="logo" src="{{imageUrl}}logo1.png?t={{Timestamp}}"></image>
<view class="title">欢迎加入“愈见守护”</view>
<view class="content">
亲爱的用户,为了更好地向您提供平台服务保护您的权益,我们完善了
<text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index">《个人信息及隐私政策》</text>
,请您仔细阅读。一旦您开始使用,即表示您已充分理解并同意协议内容。
</view>
<view class="check">
<checkbox
class="checkbox"
model:checked="{{popup1Check1}}"
bind:tap="handlePopup1Check1"
color="#f23a2f"
></checkbox>
<view class="c-content">
我特此同意
<text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index">《个人信息及隐私政策》</text>
规定收集我的相关敏感个人信息
</view>
</view>
<view class="btn1" bind:tap="handleOk">同意并继续</view>
<view class="btn2" bind:tap="handleCancel">不同意</view>
</view>
<view class="popup2" wx:elif="{{type==='stayTuned'}}">
<image class="photo" src="{{imageUrl}}stayTuned.png?t={{Timestamp}}"></image>
<view class="content">
<view>努力建设中</view>
<view>敬请期待</view>
</view>
</view>
<view class="popup3" wx:elif="{{type==='bindDoctor'}}">
<image class="icon" src="/images/icon23.png"></image>
<view class="container">
<image class="title" src="/images/title1.png"></image>
<view class="card">
<image
class="avatar"
src="https://pic1.zhimg.com/50/v2-8cfef5f9ea7d15963af2277c6814f152_720w.jpg?source=2c26e567"
></image>
<view class="wrap">
<view class="name">王青</view>
<view class="hostipal">
<view class="content">北京积水潭医院龙泽院区</view>
<view class="tag">三甲</view>
</view>
</view>
</view>
<view class="btn">确定</view>
</view>
</view>
<view class="popup4" wx:elif="{{type==='bindDoctorReject'}}">
<image class="icon" src="/images/icon24.png"></image>
<view class="container">
<image class="title" src="/images/title2.png"></image>
<view class="content">请检查网络后重试</view>
<view class="btn">重新扫码</view>
</view>
</view>
<view class="popup5" wx:elif="{{type==='selectIdentity'}}">
<view class="container">
<image class="title" src="/images/title3.png"></image>
<view class="row">
<image class="avatar" src="/images/icon26.png"></image>
<view class="wrap">
<view class="name">还未开启基因治疗</view>
<view class="content">随便看看</view>
</view>
<image class="icon" src="/images/icon12.png"></image>
</view>
<view class="row">
<image class="avatar" src="/images/icon27.png"></image>
<view class="wrap">
<view class="name">还未开启基因治疗</view>
<view class="content">随便看看</view>
</view>
<image class="icon" src="/images/icon12.png"></image>
</view>
</view>
</view>
<image wx:if="{{params.position === 'cenetr'}}" class="close" src="/images/icon25.png" bind:tap="handleCancel"></image>
</van-popup>

204
src/components/star/index.ts

@ -1,204 +0,0 @@ @@ -1,204 +0,0 @@
const app = getApp();
/**
* >=min && <=max
* @param min
* @param max
*/
function getRandom(min, max) {
return min + Math.floor(Math.random() * (max - min + 1));
}
Component({
options: {},
lifetimes: {
attached() {
const query = wx.createSelectorQuery().in(this);
query
.select("#thumsCanvas")
.fields({ node: true, size: true })
.exec((res) => {
const canvas = res[0].node;
const context = canvas.getContext("2d");
this.setData({
context: context,
});
const dpr = wx.getSystemInfoSync().pixelRatio;
canvas.width = res[0].width * dpr;
canvas.height = res[0].height * dpr;
this.data.width = res[0].width * dpr;
this.data.height = res[0].height * dpr;
// context.fillStyle = "rgba(255, 255, 255, 0)";
const images = [
"star/icon1.png",
"star/icon2.png",
"star/icon3.png",
"star/icon4.png",
"star/icon5.png",
"star/icon6.png",
"star/icon7.png",
"star/icon8.png",
];
const promiseAll = [] as Array<Promise<any>>;
images.forEach((src) => {
const p = new Promise(function (resolve) {
const img = canvas.createImage();
img.onerror = img.onload = resolve.bind(null, img);
img.src = app.globalData.imageUrl + src;
});
promiseAll.push(p);
});
Promise.all(promiseAll).then((imgsList) => {
const imgsLists = imgsList.filter((d) => {
if (d && d.width > 0) return true;
return false;
});
this.setData({
imgsList: imgsLists,
});
if (this.data.imgsList.length == 0) {
// logger.error("imgsList load all error");
wx.showToast({
icon: "none",
title: "imgsList load all error",
});
return;
}
});
});
},
},
properties: {},
data: {
imgsList: [] as WechatMiniprogram.ImageData[],
width: 0,
height: 0,
context: null as any,
scanning: false,
renderList: [],
scaleTime: 0.1, // 百分比
},
methods: {
handleTap() {
this.start();
},
createRender() {
if (this.data.imgsList.length == 0) return null;
const basicScale = [0.6, 0.9, 1.2][getRandom(0, 2)];
const getScale = (diffTime) => {
if (diffTime < this.data.scaleTime) {
return +(diffTime / this.data.scaleTime).toFixed(2) * basicScale;
} else {
return basicScale;
}
};
const context = this.data.context;
// 随机读取一个图片来渲染
const image: any = this.data.imgsList[getRandom(0, this.data.imgsList.length - 1)];
const offset = 20;
const basicX = this.data.width / 2 + getRandom(-offset, offset);
const angle = getRandom(2, 10);
let ratio = getRandom(10, 30) * (getRandom(0, 1) ? 1 : -1);
const getTranslateX = (diffTime) => {
if (diffTime < this.data.scaleTime) {
// 放大期间,不进行摇摆位移
return basicX;
} else {
return basicX + ratio * Math.sin(angle * (diffTime - this.data.scaleTime));
}
};
const getTranslateY = (diffTime) => {
return image.height / 2 + (this.data.height - image.height / 2) * (1 - diffTime);
};
const fadeOutStage = getRandom(14, 18) / 100;
const getAlpha = (diffTime) => {
let left = 1 - +diffTime;
if (left > fadeOutStage) {
return 1;
} else {
return 1 - +((fadeOutStage - left) / fadeOutStage).toFixed(2);
}
};
return (diffTime) => {
// 差值满了,即结束了 0 ---》 1
if (diffTime >= 1) return true;
context.save();
const scale = getScale(diffTime);
// const rotate = getRotate();
const translateX = getTranslateX(diffTime);
const translateY = getTranslateY(diffTime);
context.translate(translateX, translateY);
context.scale(scale, scale);
// context.rotate(rotate * Math.PI / 180);
context.globalAlpha = getAlpha(diffTime);
context.drawImage(image, -image.width / 2, -image.height / 2, image.width, image.height);
context.restore();
};
},
scan() {
this.data.context.clearRect(0, 0, this.data.width, this.data.height);
this.data.context.fillStyle = "rgba(255, 255, 255, 0)";
this.data.context.fillRect(0, 0, 200, 400);
let index = 0;
let length = this.data.renderList.length;
if (length > 0) {
this.requestFrame(this.scan.bind(this));
this.setData({
scanning: true,
});
} else {
this.setData({
scanning: false,
});
}
while (index < length) {
const child = this.data.renderList[index];
if (!child || !child.render || child.render.call(null, (Date.now() - child.timestamp) / child.duration)) {
// 结束了,删除该动画
this.setData({
renderList: [...this.data.renderList].filter((_item, fIndex) => fIndex != index),
});
length--;
} else {
// continue
index++;
}
}
},
start() {
const render = this.createRender();
const duration = getRandom(1500, 3000);
this.setData({
renderList: [
...this.data.renderList,
{
render,
duration,
timestamp: Date.now(),
},
],
});
if (!this.data.scanning) {
this.setData({
scanning: true,
});
this.requestFrame(this.scan.bind(this));
// this.scan.bind(this)();
}
return this;
},
requestFrame(cb) {
return (
this.data.context.requestAnimationFrame ||
(function (callback) {
setTimeout(callback, 1000 / 60);
})(cb)
);
},
},
});

1
src/components/star/index.wxml

@ -1 +0,0 @@ @@ -1 +0,0 @@
<canvas id="thumsCanvas" type="2d" width="200" height="400" style="width: 100px; height: 200px"></canvas>

7
src/custom-tab-bar/index.json

@ -1,7 +0,0 @@ @@ -1,7 +0,0 @@
{
"component": true,
"usingComponents": {
"van-tabbar": "@vant/weapp/tabbar/index",
"van-tabbar-item": "@vant/weapp/tabbar-item/index"
}
}

19
src/custom-tab-bar/index.scss

@ -1,19 +0,0 @@ @@ -1,19 +0,0 @@
/* custom-tab-bar/index.wxss */
.tab-item {
.icon {
width: 50rpx;
height: 50rpx;
}
.name {
font-size: 24rpx;
color: #010105;
&.active{
color: #F23A2F;
}
&.drug-active{
color: #25D9C8;
}
}
}

55
src/custom-tab-bar/index.ts

@ -1,55 +0,0 @@ @@ -1,55 +0,0 @@
import { getCurrentPageUrl } from '@/utils/util'
const app = getApp()
Component({
properties: {},
data: {
imageUrl: app.globalData.imageUrl,
Timestamp: app.globalData.Timestamp,
isChild: 0,
active: 0,
list: [
{
pagePath: '/pages/index/index',
text: '首页',
icon: 'tabbar1-1',
iconActive: 'tabbar1-1-active',
},
{
pagePath: '/pages/knowledge/index',
text: '知识库',
icon: 'tabbar1-2',
iconActive: 'tabbar1-2-active',
},
{
pagePath: '/pages/my/index',
text: '我的',
icon: 'tabbar1-3',
iconActive: 'tabbar1-3-active',
},
],
},
observers: {},
lifetimes: {
ready() {
const pagePath = getCurrentPageUrl()
const active = this.data.list.findIndex((item) => item.pagePath === pagePath)
this.setData({
active,
anyWhere: app.globalData.anyWhere,
})
},
},
methods: {
onChange() {},
handleNav(e) {
const { index } = e.currentTarget.dataset
const { list } = this.data
const pagePath = list[index].pagePath
wx.switchTab({
url: pagePath,
})
},
},
})

14
src/custom-tab-bar/index.wxml

@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
<van-tabbar active="{{ active }}" active-color="#F23A2F" bind:change="onChange" inactive-color="#010105">
<block wx:for="{{list}}" wx:key="*this">
<van-tabbar-item
class="tab-item"
wx:if="{{ index != 3 || !anyWhere}}"
bind:tap="handleNav"
data-index="{{index}}"
icon="{{imageUrl}}/tabbar/{{active==index ? item.iconActive : item.icon}}.png?r={{Timestamp}}"
>
<view class="name {{index==active && 'active'}}">{{item.text}}</view>
<view class="hot"></view>
</van-tabbar-item>
</block>
</van-tabbar>

6
src/doc/pages/doc1/index.json

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
{
"navigationBarTitleText": "个人信息及隐私政策",
"usingComponents": {
"mp-html": "mp-html"
}
}

3
src/doc/pages/doc1/index.scss

@ -1,3 +0,0 @@ @@ -1,3 +0,0 @@
.page{
padding: 0 40rpx;
}

10
src/doc/pages/doc1/index.ts

File diff suppressed because one or more lines are too long

3
src/doc/pages/doc1/index.wxml

@ -1,3 +0,0 @@ @@ -1,3 +0,0 @@
<view class="page">
<mp-html content="{{doc}}"></mp-html>
</view>

BIN
src/images/1.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 MiB

BIN
src/images/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 KiB

BIN
src/images/10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
src/images/11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
src/images/12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
src/images/13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

BIN
src/images/14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

BIN
src/images/15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 KiB

BIN
src/images/16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
src/images/17.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 KiB

BIN
src/images/18.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

BIN
src/images/19.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

BIN
src/images/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

BIN
src/images/20.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 KiB

BIN
src/images/21.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 KiB

BIN
src/images/22.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
src/images/23.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
src/images/24.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
src/images/25.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
src/images/26.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
src/images/27.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/images/28.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
src/images/29.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
src/images/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

BIN
src/images/30.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
src/images/31.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
src/images/32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
src/images/33.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
src/images/34.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
src/images/35.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

BIN
src/images/36.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
src/images/37.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

BIN
src/images/38.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
src/images/39.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
src/images/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

BIN
src/images/40.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
src/images/41.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
src/images/42.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
src/images/43.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

BIN
src/images/44.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

BIN
src/images/45.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
src/images/46.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
src/images/47.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

BIN
src/images/48.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

BIN
src/images/49.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

BIN
src/images/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

BIN
src/images/50.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

BIN
src/images/51.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

BIN
src/images/52.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

BIN
src/images/53.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

BIN
src/images/54.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save