Browse Source

用户联调

master
kola-web 4 days ago
parent
commit
8f15bab3e2
  1. 46
      api-doc/charlie.md
  2. 199
      api-doc/psvt-patient-api-doc.md
  3. 12
      src/app.json
  4. 16
      src/app.ts
  5. 10
      src/components/pickerArea/index.scss
  6. 2
      src/components/pickerArea/index.wxml
  7. 1
      src/components/popup/index.ts
  8. 4
      src/components/popup/index.wxml
  9. 4
      src/components/uploadFile/index.wxml
  10. 2
      src/custom-tab-bar/index.wxml
  11. 120
      src/doc/pages/doc/index.ts
  12. 26
      src/doc/pages/doc/index.wxml
  13. 21
      src/doc/pages/doc1/index.scss
  14. 31
      src/doc/pages/doc1/index.ts
  15. 6
      src/doc/pages/doc2/index.json
  16. 3
      src/doc/pages/doc2/index.scss
  17. 10
      src/doc/pages/doc2/index.ts
  18. 3
      src/doc/pages/doc2/index.wxml
  19. 6
      src/doc/pages/doc3/index.json
  20. 3
      src/doc/pages/doc3/index.scss
  21. 10
      src/doc/pages/doc3/index.ts
  22. 3
      src/doc/pages/doc3/index.wxml
  23. 6
      src/doc/pages/doc4/index.json
  24. 3
      src/doc/pages/doc4/index.scss
  25. 10
      src/doc/pages/doc4/index.ts
  26. 3
      src/doc/pages/doc4/index.wxml
  27. 6
      src/doc/pages/doc5/index.json
  28. 3
      src/doc/pages/doc5/index.scss
  29. 10
      src/doc/pages/doc5/index.ts
  30. 3
      src/doc/pages/doc5/index.wxml
  31. BIN
      src/images/tabbar/tabbar1-1-active.png
  32. BIN
      src/images/tabbar/tabbar1-1.png
  33. BIN
      src/images/tabbar/tabbar1-2-active.png
  34. BIN
      src/images/tabbar/tabbar1-2.png
  35. BIN
      src/images/tabbar/tabbar1-3-active.png
  36. BIN
      src/images/tabbar/tabbar1-3.png
  37. BIN
      src/images/tabbar/tabbar1-4-active.png
  38. BIN
      src/images/tabbar/tabbar1-4.png
  39. 16
      src/pages/articleDetail/index.wxml
  40. 4
      src/pages/changeTel/index.json
  41. 51
      src/pages/changeTel/index.scss
  42. 91
      src/pages/changeTel/index.ts
  43. 32
      src/pages/changeTel/index.wxml
  44. 4
      src/pages/confirmInfo/index.json
  45. 1
      src/pages/confirmInfo/index.scss
  46. 66
      src/pages/confirmInfo/index.ts
  47. 127
      src/pages/confirmInfo/index.wxml
  48. 6
      src/pages/drugMap/index.wxml
  49. 1
      src/pages/followDetail/index.ts
  50. 4
      src/pages/followDetail/index.wxml
  51. 1
      src/pages/followForm/index.ts
  52. 2
      src/pages/followForm/index.wxml
  53. 1
      src/pages/health/index.ts
  54. 14
      src/pages/health/index.wxml
  55. 1
      src/pages/heartDetail/index.ts
  56. 2
      src/pages/heartDetail/index.wxml
  57. 1
      src/pages/heartForm/index.ts
  58. 2
      src/pages/heartForm/index.wxml
  59. 1
      src/pages/hotTopic/index.ts
  60. 2
      src/pages/hotTopic/index.wxml
  61. 1
      src/pages/hotTopicDetail/index.ts
  62. 20
      src/pages/hotTopicDetail/index.wxml
  63. 1
      src/pages/index/index.ts
  64. 24
      src/pages/index/index.wxml
  65. 47
      src/pages/login/index.scss
  66. 109
      src/pages/login/index.ts
  67. 36
      src/pages/login/index.wxml
  68. 3
      src/pages/my/index.json
  69. 6
      src/pages/my/index.scss
  70. 124
      src/pages/my/index.ts
  71. 32
      src/pages/my/index.wxml
  72. 1
      src/pages/myCollection/index.ts
  73. 16
      src/pages/myCollection/index.wxml
  74. 1
      src/pages/myComment/index.ts
  75. 6
      src/pages/myComment/index.wxml
  76. 1
      src/pages/myWall/index.ts
  77. 10
      src/pages/myWall/index.wxml
  78. 7
      src/pages/userInfo/index.json
  79. 18
      src/pages/userInfo/index.scss
  80. 235
      src/pages/userInfo/index.ts
  81. 58
      src/pages/userInfo/index.wxml
  82. 8
      src/pages/videoDetail/index.wxml
  83. 1
      src/pages/videoList/index.ts
  84. 12
      src/pages/videoList/index.wxml
  85. 1
      src/pages/wall/index.ts
  86. 22
      src/pages/wall/index.wxml
  87. 1
      src/pages/wallDetail/index.ts
  88. 34
      src/pages/wallDetail/index.wxml
  89. 1
      src/pages/wallForm/index.ts
  90. 18
      src/pages/wallForm/index.wxml
  91. 16
      src/pages/wechatWork/index.wxml

46
api-doc/charlie.md

File diff suppressed because one or more lines are too long

199
api-doc/psvt-patient-api-doc.md

@ -9,11 +9,12 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------- | ------ | ---- | ---------------------- |
| code | string | 是 | wx.login获取的登录凭证 | | code | string | 是 | wx.login获取的登录凭证 |
| channelId | int | 否 | 扫码渠道ID | | channelId | int | 否 | 扫码渠道ID |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -22,7 +23,7 @@
"isLogin": true, "isLogin": true,
"isReg": true, "isReg": true,
"userId": "xxx", "userId": "xxx",
"openId": "xxx", "openId": "xxx"
} }
} }
``` ```
@ -30,15 +31,15 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ---------- | ------ | -------------------------- |
| loginState | string | 登录态凭证,后续接口需携带 | | loginState | string | 登录态凭证,后续接口需携带 |
| isLogin | bool | 是否已登录 | | isLogin | bool | 是否已登录 |
| userId | string | 用户ID | | userId | string | 用户ID |
| openId | string | 小程序OpenId | | openId | string | 小程序OpenId |
| isPhoneRegistered | bool | 是否已手机号注册 | | isReg | bool | 是否已信息提交注册 |
| isInfoSubmitted | bool | 是否已提交信息 |
**业务逻辑**: **业务逻辑**:
1. 调用微信接口获取openid和session_key 1. 调用微信接口获取openid和session_key
2. 创建/更新PSVT用户记录(t_psvt_user_info) 2. 创建/更新PSVT用户记录(t_psvt_user_info)
3. 若有channelId参数,更新ScanChannelId(最终渠道,每次扫码都更新) 3. 若有channelId参数,更新ScanChannelId(最终渠道,每次扫码都更新)
@ -47,26 +48,27 @@
--- ---
### 1.2 手机号授权注册 `POST ?r=psvt/patient/phone-register` ### 1.2 手机号授权注册 `POST ?r=psvt/login/wx-reg-login`
**说明**: 解密微信加密数据获取手机号,完成手机号注册。事务操作。 **说明**: 解密微信加密数据获取手机号,完成手机号注册。事务操作。
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | ------------- | ------ | ---- | -------------------- |
| encryptedData | string | 是 | 微信加密手机号数据 | | encryptedData | string | 是 | 微信加密手机号数据 |
| iv | string | 是 | 微信加密iv | | iv | string | 是 | 微信加密iv |
| channelId | int | 否 | 手机号注册时的渠道ID | | channelId | int | 否 | 手机号注册时的渠道ID |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
"message": "success", "message": "success",
"data": { "data": {
"telephone": "138xxxx1234", "isLogin": true,
"isPhoneRegistered": true "isReg": true
} }
} }
``` ```
@ -74,11 +76,12 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ------- | ---- | ------------------ |
| telephone | string | 注册的手机号 | | isLogin | bool | 是否已登录 |
| isPhoneRegistered | bool | 是否已手机号注册 | | isReg | bool | 是否已信息提交注册 |
**业务逻辑**: **业务逻辑**:
1. 解密微信加密数据获取手机号 1. 解密微信加密数据获取手机号
2. 更新t_psvt_user_info的Telephone、IsPhoneRegistered=1、PhoneRegisterTime 2. 更新t_psvt_user_info的Telephone、IsPhoneRegistered=1、PhoneRegisterTime
3. 若有channelId,记录TelChannelId(首次手机号注册渠道,仅记录首次,不更新) 3. 若有channelId,记录TelChannelId(首次手机号注册渠道,仅记录首次,不更新)
@ -89,6 +92,38 @@
--- ---
### 1.2.1 手机号验证码注册 `POST ?r=psvt/login/reg-login`
**说明**: 解密微信加密数据获取手机号,完成手机号注册。事务操作。
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
| --------- | ------ | ---- | -------------------- |
| mobile | string | 是 | 手机号 |
| code | string | 是 | 验证码 |
| channelId | int | 否 | 手机号注册时的渠道ID |
**响应示例**:
```json
{
"code": 0,
"message": "success",
"data": {
"isLogin": true,
"isReg": true
}
}
```
**响应字段说明**:
| 字段名 | 类型 | 说明 |
| ------- | ---- | ------------------ |
| isLogin | bool | 是否已登录 |
| isReg | bool | 是否已信息提交注册 |
### 1.3 患者信息提交注册 `POST ?r=psvt/patient/register` ### 1.3 患者信息提交注册 `POST ?r=psvt/patient/register`
**说明**: 提交年龄段、性别、确诊状态、手术状态等信息完成注册。事务操作。 **说明**: 提交年龄段、性别、确诊状态、手术状态等信息完成注册。事务操作。
@ -96,7 +131,7 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------------- | ------ | ---- | --------------------------------------------------------------------------------------------- |
| ageRange | int | 是 | 年龄段:1-18~28岁,2-29~40岁,3-41~50岁,4-50岁以上 | | ageRange | int | 是 | 年龄段:1-18~28岁,2-29~40岁,3-41~50岁,4-50岁以上 |
| gender | int | 是 | 性别:1-男,2-女 | | gender | int | 是 | 性别:1-男,2-女 |
| provinceId | int | 否 | 省份ID | | provinceId | int | 否 | 省份ID |
@ -109,6 +144,7 @@
| channelId | int | 否 | 提交信息渠道ID | | channelId | int | 否 | 提交信息渠道ID |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -125,13 +161,14 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ------------ | ------ | ----------------------------- |
| userId | string | 用户ID | | userId | string | 用户ID |
| nickName | string | 随机生成的昵称(4字母+8数字) | | nickName | string | 随机生成的昵称(4字母+8数字) |
| avatar | string | 随机分配的头像URL | | avatar | string | 随机分配的头像URL |
| isRegistered | bool | 是否已注册 | | isRegistered | bool | 是否已注册 |
**业务逻辑**: **业务逻辑**:
1. 生成随机昵称(4随机字母+8随机数字) 1. 生成随机昵称(4随机字母+8随机数字)
2. 随机分配头像(10张图片池中随机选1) 2. 随机分配头像(10张图片池中随机选1)
3. 创建t_psvt_patient_info记录(患者属性) 3. 创建t_psvt_patient_info记录(患者属性)
@ -150,6 +187,7 @@
**请求参数**: 无(通过loginState获取userId) **请求参数**: 无(通过loginState获取userId)
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -180,7 +218,7 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ----------------- | ------ | ------------------------------ |
| userId | string | 用户ID | | userId | string | 用户ID |
| openId | string | 小程序OpenId | | openId | string | 小程序OpenId |
| telephone | string | 手机号 | | telephone | string | 手机号 |
@ -209,7 +247,7 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------------- | ------ | ---- | -------------------------------- |
| avatar | string | 否 | 头像URL | | avatar | string | 否 | 头像URL |
| nickName | string | 否 | 昵称 | | nickName | string | 否 | 昵称 |
| telephone | string | 否 | 手机号 | | telephone | string | 否 | 手机号 |
@ -224,6 +262,7 @@
| surgeryStatus | int | 否 | 手术状态(已确诊PSVT后不可修改) | | surgeryStatus | int | 否 | 手术状态(已确诊PSVT后不可修改) |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -254,6 +293,7 @@
**响应字段说明**: 同1.4获取我的信息 **响应字段说明**: 同1.4获取我的信息
**业务逻辑**: **业务逻辑**:
1. 若已确诊PSVT(DiagnosisStatus=2),则diagnosisStatus和surgeryStatus不可修改 1. 若已确诊PSVT(DiagnosisStatus=2),则diagnosisStatus和surgeryStatus不可修改
2. 更新t_psvt_patient_info患者属性 2. 更新t_psvt_patient_info患者属性
3. 若更新了手机号,同步更新t_psvt_user_info的Telephone 3. 若更新了手机号,同步更新t_psvt_user_info的Telephone
@ -268,10 +308,11 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------- | ---- | ---- | -------- |
| channelId | int | 是 | 渠道码ID | | channelId | int | 是 | 渠道码ID |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -285,10 +326,11 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | -------- | ---- | ------------ |
| recorded | bool | 是否记录成功 | | recorded | bool | 是否记录成功 |
**业务逻辑**: **业务逻辑**:
1. 验证渠道码存在 1. 验证渠道码存在
2. 更新用户ScanChannelId(最终渠道,每次扫码都更新) 2. 更新用户ScanChannelId(最终渠道,每次扫码都更新)
3. 记录邀约记录(InviteType=1用户打开) 3. 记录邀约记录(InviteType=1用户打开)
@ -304,15 +346,21 @@
**请求参数**: 无 **请求参数**: 无
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
"message": "success", "message": "success",
"data": { "data": {
"genderList": [{"1": "男"}, {"2": "女"}], "genderList": [{ "1": "男" }, { "2": "女" }],
"ageRangeList": [{"1": "18~28岁"}, {"2": "29~40岁"}, {"3": "41~50岁"}, {"4": "50岁以上"}], "ageRangeList": [{ "1": "18~28岁" }, { "2": "29~40岁" }, { "3": "41~50岁" }, { "4": "50岁以上" }],
"diagnosisStatusList": [{"1": "疑似PSVT正在了解中"}, {"2": "已确诊PSVT"}, {"3": "心悸/心跳过快 尚未就诊"}, {"4": "亲友相关 想了解更多"}], "diagnosisStatusList": [
"surgeryStatusList": [{"1": "已接收射频消融/相关手术"}, {"2": "尚未接收手术"}, {"3": "正在评估"}] { "1": "疑似PSVT正在了解中" },
{ "2": "已确诊PSVT" },
{ "3": "心悸/心跳过快 尚未就诊" },
{ "4": "亲友相关 想了解更多" }
],
"surgeryStatusList": [{ "1": "已接收射频消融/相关手术" }, { "2": "尚未接收手术" }, { "3": "正在评估" }]
} }
} }
``` ```
@ -320,7 +368,7 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ------------------- | ----- | ------------------------------------- |
| genderList | array | 性别列表,每项为 {value: "label"} | | genderList | array | 性别列表,每项为 {value: "label"} |
| ageRangeList | array | 年龄段列表,每项为 {value: "label"} | | ageRangeList | array | 年龄段列表,每项为 {value: "label"} |
| diagnosisStatusList | array | 确诊状态列表,每项为 {value: "label"} | | diagnosisStatusList | array | 确诊状态列表,每项为 {value: "label"} |
@ -329,14 +377,14 @@
**genderList值说明**: **genderList值说明**:
| 值 | 说明 | | 值 | 说明 |
|---|---| | --- | ---- |
| 1 | 男 | | 1 | 男 |
| 2 | 女 | | 2 | 女 |
**ageRangeList值说明**: **ageRangeList值说明**:
| 值 | 说明 | | 值 | 说明 |
|---|---| | --- | -------- |
| 1 | 18~28岁 | | 1 | 18~28岁 |
| 2 | 29~40岁 | | 2 | 29~40岁 |
| 3 | 41~50岁 | | 3 | 41~50岁 |
@ -345,7 +393,7 @@
**diagnosisStatusList值说明**: **diagnosisStatusList值说明**:
| 值 | 说明 | | 值 | 说明 |
|---|---| | --- | ---------------------- |
| 1 | 疑似PSVT正在了解中 | | 1 | 疑似PSVT正在了解中 |
| 2 | 已确诊PSVT | | 2 | 已确诊PSVT |
| 3 | 心悸/心跳过快 尚未就诊 | | 3 | 心悸/心跳过快 尚未就诊 |
@ -354,7 +402,7 @@
**surgeryStatusList值说明**: **surgeryStatusList值说明**:
| 值 | 说明 | | 值 | 说明 |
|---|---| | --- | ----------------------- |
| 1 | 已接收射频消融/相关手术 | | 1 | 已接收射频消融/相关手术 |
| 2 | 尚未接收手术 | | 2 | 尚未接收手术 |
| 3 | 正在评估 | | 3 | 正在评估 |
@ -370,13 +418,14 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------- | ------ | ---- | -------------------------------- |
| search | string | 否 | 搜索关键字(手机号/UserId/省市) | | search | string | 否 | 搜索关键字(手机号/UserId/省市) |
| channelId | int | 否 | 渠道ID筛选 | | channelId | int | 否 | 渠道ID筛选 |
| page | int | 否 | 页码,默认1 | | page | int | 否 | 页码,默认1 |
| count | int | 否 | 每页数量,默认10 | | count | int | 否 | 每页数量,默认10 |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -431,7 +480,7 @@
**响应字段说明(data层级)**: **响应字段说明(data层级)**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ------- | ------ | ------------ |
| page | int | 当前页码 | | page | int | 当前页码 |
| pages | int | 总页数 | | pages | int | 总页数 |
| count | int | 总记录数 | | count | int | 总记录数 |
@ -441,7 +490,7 @@
**summary字段说明**: **summary字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ----------------------------- | ------ | ------------------------ |
| totalOpenCount | int | 总打开数 | | totalOpenCount | int | 总打开数 |
| phoneRegisteredCount | int | 手机号注册数 | | phoneRegisteredCount | int | 手机号注册数 |
| phoneRegisteredRate | string | 手机号注册率(百分比) | | phoneRegisteredRate | string | 手机号注册率(百分比) |
@ -456,7 +505,7 @@
**list行字段说明**: **list行字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | -------------------------- | ------ | ---------------------- |
| userId | string | 用户ID | | userId | string | 用户ID |
| telephone | string | 手机号 | | telephone | string | 手机号 |
| nickName | string | 昵称 | | nickName | string | 昵称 |
@ -490,10 +539,11 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | ------ | ---- | ---- | ------------ |
| id | int | 是 | 用户信息表ID | | id | int | 是 | 用户信息表ID |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -533,16 +583,26 @@
### 2.3 渠道码列表 `GET ?r=channel/list` ### 2.3 渠道码列表 `GET ?r=channel/list`
**说明**: 获取所有有效渠道码列表。 **说明**: 获取有效渠道码列表,支持分页
**请求参数**: 无 **请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ---- | ---- | ---------------- |
| page | int | 否 | 页码,默认1 |
| count | int | 否 | 每页数量,默认10 |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
"message": "success", "message": "success",
"data": [ "data": {
"page": 1,
"pages": 5,
"count": 50,
"list": [
{ {
"channelId": 1, "channelId": 1,
"channelName": "渠道A", "channelName": "渠道A",
@ -552,17 +612,29 @@
"updateDate": "2023-01-01" "updateDate": "2023-01-01"
} }
] ]
}
} }
``` ```
**响应字段说明(每行)**: **响应字段说明(data层级)**:
| 字段名 | 类型 | 说明 |
| ------ | ----- | -------- |
| page | int | 当前页码 |
| pages | int | 总页数 |
| count | int | 总记录数 |
| list | array | 渠道列表 |
**list行字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ----------- | ------ | --------------- |
| channelId | int | 渠道ID | | channelId | int | 渠道ID |
| channelName | string | 渠道名称 | | channelName | string | 渠道名称 |
| channelDesc | string | 渠道码说明 | | channelDesc | string | 渠道码说明 |
| miniCodeUrl | string | 小程序码图片URL | | miniCodeUrl | string | 小程序码图片URL |
| createDate | string | 创建日期 |
| updateDate | string | 更新日期 |
--- ---
@ -573,11 +645,12 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | ----------- | ------ | ---- | ---------- |
| channelName | string | 是 | 渠道名称 | | channelName | string | 是 | 渠道名称 |
| channelDesc | string | 否 | 渠道码说明 | | channelDesc | string | 否 | 渠道码说明 |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -592,7 +665,7 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ----------- | ------ | -------------- |
| channelId | int | 新创建的渠道ID | | channelId | int | 新创建的渠道ID |
| channelName | string | 渠道名称 | | channelName | string | 渠道名称 |
@ -605,12 +678,13 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | ----------- | ------ | ---- | ---------- |
| channelId | int | 是 | 渠道ID | | channelId | int | 是 | 渠道ID |
| channelName | string | 否 | 渠道名称 | | channelName | string | 否 | 渠道名称 |
| channelDesc | string | 否 | 渠道码说明 | | channelDesc | string | 否 | 渠道码说明 |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -625,7 +699,7 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ----------- | ------ | ---------------- |
| channelId | int | 渠道ID | | channelId | int | 渠道ID |
| channelName | string | 更新后的渠道名称 | | channelName | string | 更新后的渠道名称 |
@ -638,10 +712,11 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------- | ---- | ---- | ------ |
| channelId | int | 是 | 渠道ID | | channelId | int | 是 | 渠道ID |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -655,10 +730,11 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | --------- | ---- | -------------- |
| channelId | int | 已删除的渠道ID | | channelId | int | 已删除的渠道ID |
**业务逻辑**: **业务逻辑**:
1. 校验渠道存在 1. 校验渠道存在
2. 将渠道的Status置为100(删除状态),逻辑删除 2. 将渠道的Status置为100(删除状态),逻辑删除
3. 更新UpdateBy和UpdateTime 3. 更新UpdateBy和UpdateTime
@ -673,10 +749,11 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------- | ---- | ---- | ------ |
| channelId | int | 是 | 渠道ID | | channelId | int | 是 | 渠道ID |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -692,12 +769,13 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ----------- | ------ | --------------- |
| channelId | int | 渠道ID | | channelId | int | 渠道ID |
| channelName | string | 渠道名称 | | channelName | string | 渠道名称 |
| miniCodeUrl | string | 小程序码图片URL | | miniCodeUrl | string | 小程序码图片URL |
**业务逻辑**: **业务逻辑**:
1. 若渠道已有小程序码URL(MiniCodeUrl),直接返回 1. 若渠道已有小程序码URL(MiniCodeUrl),直接返回
2. 若没有,调用微信接口生成小程序码(scene参数包含渠道ID) 2. 若没有,调用微信接口生成小程序码(scene参数包含渠道ID)
3. 保存生成的MiniCodeUrl到渠道记录 3. 保存生成的MiniCodeUrl到渠道记录
@ -711,12 +789,13 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------------- | ------ | ---- | --------------------------------- |
| inviteDateBegin | string | 否 | 邀约日期开始(YYYY-MM-DD) | | inviteDateBegin | string | 否 | 邀约日期开始(YYYY-MM-DD) |
| inviteDateEnd | string | 否 | 邀约日期结束(YYYY-MM-DD) | | inviteDateEnd | string | 否 | 邀约日期结束(YYYY-MM-DD) |
| channelIds | string | 否 | 渠道ID筛选,逗号分隔(如"1,2,3") | | channelIds | string | 否 | 渠道ID筛选,逗号分隔(如"1,2,3") |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -739,7 +818,7 @@
**响应字段说明(每行)**: **响应字段说明(每行)**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | -------------------- | ------ | -------------------- |
| statDate | string | 统计日期 | | statDate | string | 统计日期 |
| channelId | int | 渠道ID | | channelId | int | 渠道ID |
| channelName | string | 渠道名称 | | channelName | string | 渠道名称 |
@ -758,7 +837,7 @@
**请求参数**: **请求参数**:
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---| | --------------- | ------ | ---- | -------------------------------------------------- |
| inviteDateBegin | string | 否 | 邀约日期开始(YYYY-MM-DD) | | inviteDateBegin | string | 否 | 邀约日期开始(YYYY-MM-DD) |
| inviteDateEnd | string | 否 | 邀约日期结束(YYYY-MM-DD) | | inviteDateEnd | string | 否 | 邀约日期结束(YYYY-MM-DD) |
| channelId | int | 否 | 渠道ID筛选 | | channelId | int | 否 | 渠道ID筛选 |
@ -767,6 +846,7 @@
| count | int | 否 | 每页数量,默认10 | | count | int | 否 | 每页数量,默认10 |
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
@ -799,7 +879,7 @@
"diagnosisTime": "2023-06", "diagnosisTime": "2023-06",
"surgeryStatus": 1, "surgeryStatus": 1,
"surgeryStatusName": "已手术", "surgeryStatusName": "已手术",
"telephone": "138xxxx1234", "telephone": "138xxxx1234"
} }
] ]
} }
@ -809,7 +889,7 @@
**响应字段说明(data层级)**: **响应字段说明(data层级)**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ------ | ----- | ------------ |
| page | int | 当前页码 | | page | int | 当前页码 |
| pages | int | 总页数 | | pages | int | 总页数 |
| count | int | 总记录数 | | count | int | 总记录数 |
@ -818,7 +898,7 @@
**list行字段说明**: **list行字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | -------------------------- | ------ | ---------------------- |
| id | int | 记录ID | | id | int | 记录ID |
| inviteTime | string | 邀约时间 | | inviteTime | string | 邀约时间 |
| channelId | int | 渠道ID | | channelId | int | 渠道ID |
@ -857,15 +937,21 @@
**请求参数**: 无 **请求参数**: 无
**响应示例**: **响应示例**:
```json ```json
{ {
"code": 0, "code": 0,
"message": "success", "message": "success",
"data": { "data": {
"genderList": [{"1": "男"}, {"2": "女"}], "genderList": [{ "1": "男" }, { "2": "女" }],
"ageRangeList": [{"1": "18~28岁"}, {"2": "29~40岁"}, {"3": "41~50岁"}, {"4": "50岁以上"}], "ageRangeList": [{ "1": "18~28岁" }, { "2": "29~40岁" }, { "3": "41~50岁" }, { "4": "50岁以上" }],
"diagnosisStatusList": [{"1": "疑似PSVT正在了解中"}, {"2": "已确诊PSVT"}, {"3": "心悸/心跳过快 尚未就诊"}, {"4": "亲友相关 想了解更多"}], "diagnosisStatusList": [
"surgeryStatusList": [{"1": "已接收射频消融/相关手术"}, {"2": "尚未接收手术"}, {"3": "正在评估"}] { "1": "疑似PSVT正在了解中" },
{ "2": "已确诊PSVT" },
{ "3": "心悸/心跳过快 尚未就诊" },
{ "4": "亲友相关 想了解更多" }
],
"surgeryStatusList": [{ "1": "已接收射频消融/相关手术" }, { "2": "尚未接收手术" }, { "3": "正在评估" }]
} }
} }
``` ```
@ -873,10 +959,11 @@
**响应字段说明**: **响应字段说明**:
| 字段名 | 类型 | 说明 | | 字段名 | 类型 | 说明 |
|---|---|---| | ------------------- | ----- | ------------------------------------- |
| genderList | array | 性别列表,每项为 {value: "label"} | | genderList | array | 性别列表,每项为 {value: "label"} |
| ageRangeList | array | 年龄段列表,每项为 {value: "label"} | | ageRangeList | array | 年龄段列表,每项为 {value: "label"} |
| diagnosisStatusList | array | 确诊状态列表,每项为 {value: "label"} | | diagnosisStatusList | array | 确诊状态列表,每项为 {value: "label"} |
| surgeryStatusList | array | 手术状态列表,每项为 {value: "label"} | | surgeryStatusList | array | 手术状态列表,每项为 {value: "label"} |
--- ---

12
src/app.json

@ -24,19 +24,13 @@
"pages/myWall/index", "pages/myWall/index",
"pages/myComment/index", "pages/myComment/index",
"pages/myCollection/index", "pages/myCollection/index",
"pages/userInfo/index" "pages/userInfo/index",
"pages/changeTel/index"
], ],
"subPackages": [ "subPackages": [
{ {
"root": "doc", "root": "doc",
"pages": [ "pages": ["pages/doc/index", "pages/doc1/index"]
"pages/doc/index",
"pages/doc1/index",
"pages/doc2/index",
"pages/doc3/index",
"pages/doc4/index",
"pages/doc5/index"
]
} }
], ],
"tabBar": { "tabBar": {

16
src/app.ts

@ -87,7 +87,7 @@ App<IAppOption>({
}, },
}) })
}, },
waitLogin({ type = 0 } = { type: 'any' }) { waitLogin({ type = 1 } = { type: 1 }) {
return new Promise((resolve) => { return new Promise((resolve) => {
const checkLogin = () => { const checkLogin = () => {
if (this.globalData.loginState) { if (this.globalData.loginState) {
@ -104,20 +104,20 @@ App<IAppOption>({
}) })
}, },
checkLoginType(type = 'any') { checkLoginType(type = 'any') {
const { isPhoneRegistered, isInfoSubmitted } = this.globalData.initLoginInfo const { isLogin, isReg } = this.globalData.initLoginInfo
if (type === 'any') { if (type === 'any') {
return true return true
} }
if (!isPhoneRegistered) { if (!isLogin) {
wx.reLaunch({ wx.reLaunch({
url: '/pages/login/index', url: '/pages/login/index',
}) })
return false return false
} }
if (!isInfoSubmitted) { if (!isReg) {
wx.reLaunch({ wx.reLaunch({
url: '/pages/confirmInfo/index', url: '/pages/confirmInfo/index',
}) })
@ -139,12 +139,8 @@ App<IAppOption>({
}) })
}, },
getUserInfo(type: 0 | 1 | 2 = 0) { getUserInfo() {
const url = { const url = '?r=psvt/patient/my-info'
0: '?r=wtx/user/userinfo',
1: '?r=wtx/account/info',
2: '?r=wtx/doctor/account/info',
}[type]
return wx.ajax({ return wx.ajax({
method: 'GET', method: 'GET',
url: url, url: url,

10
src/components/pickerArea/index.scss

@ -41,7 +41,7 @@
padding: 18rpx 30rpx; padding: 18rpx 30rpx;
box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 0, 0, 0.11); box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 0, 0, 0.11);
border-radius: 12rpx 12rpx 12rpx 12rpx; border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #f23a2f; border: 2rpx solid rgba(47, 130, 169, 1);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
@ -69,7 +69,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
background: #f23a2f; background: rgba(47, 130, 169, 1);
border-radius: 12rpx 12rpx 12rpx 12rpx; border-radius: 12rpx 12rpx 12rpx 12rpx;
} }
} }
@ -91,7 +91,7 @@
background: #f7f8f9; background: #f7f8f9;
&.active { &.active {
color: #fff; color: #fff;
background-color: #f23a2f; background-color: rgba(47, 130, 169, 1);
} }
} }
} }
@ -118,9 +118,9 @@
height: 36rpx; height: 36rpx;
} }
&.active { &.active {
color: #f23a2f; color: rgba(47, 130, 169, 1);
.word { .word {
color: #f23a2f; color: rgba(47, 130, 169, 1);
} }
} }
} }

2
src/components/pickerArea/index.wxml

@ -9,11 +9,9 @@
<view class="area"> <view class="area">
<view class="item" bind:tap="handleProvince"> <view class="item" bind:tap="handleProvince">
<view class="content">{{ProvinceName || '请选择省份'}}</view> <view class="content">{{ProvinceName || '请选择省份'}}</view>
<image class="icon" src="{{imageUrl}}icon6.png?t={{Timestamp}}"></image>
</view> </view>
<view class="item" bind:tap="handleCity"> <view class="item" bind:tap="handleCity">
<view class="content">{{CityName || '请选择城市'}}</view> <view class="content">{{CityName || '请选择城市'}}</view>
<image class="icon" src="{{imageUrl}}icon6.png?t={{Timestamp}}"></image>
</view> </view>
<view class="btn" bind:tap="handleShare">确定</view> <view class="btn" bind:tap="handleShare">确定</view>
</view> </view>

1
src/components/popup/index.ts

@ -122,7 +122,6 @@ Component({
}, },
handlePopup1Check1() { handlePopup1Check1() {
if (this.data.popup1Check1) { if (this.data.popup1Check1) {
app.mpBehavior({ PageName: 'BTN_PATIENTPRIVACY' })
} }
}, },
handleSelectStatus(e) { handleSelectStatus(e) {

4
src/components/popup/index.wxml

@ -14,7 +14,7 @@
<view class="title">欢迎加入“愈见守护”</view> <view class="title">欢迎加入“愈见守护”</view>
<view class="content"> <view class="content">
亲爱的用户,为了更好地向您提供平台服务保护您的权益,我们完善了 亲爱的用户,为了更好地向您提供平台服务保护您的权益,我们完善了
<text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index">《个人信息及隐私政策》</text> <text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index?type=1">《个人信息及隐私政策》</text>
,请您仔细阅读。一旦您开始使用,即表示您已充分理解并同意协议内容。 ,请您仔细阅读。一旦您开始使用,即表示您已充分理解并同意协议内容。
</view> </view>
<view class="check"> <view class="check">
@ -26,7 +26,7 @@
></checkbox> ></checkbox>
<view class="c-content"> <view class="c-content">
我特此同意 我特此同意
<text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index">《个人信息及隐私政策》</text> <text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index?type=1">《个人信息及隐私政策》</text>
规定收集我的相关敏感个人信息 规定收集我的相关敏感个人信息
</view> </view>
</view> </view>

4
src/components/uploadFile/index.wxml

@ -10,7 +10,7 @@
></image> ></image>
<image wx:else class="sub-image" mode="aspectFill" src="{{imageUrl}}{{item.fileType}}.png?t={{Timestamp}}"></image> <image wx:else class="sub-image" mode="aspectFill" src="{{imageUrl}}{{item.fileType}}.png?t={{Timestamp}}"></image>
<view class="item_mask"> <view class="item_mask">
<image class="item_mask_icon" wx:if="{{item.fileType === 'video'}}" src="/images/icon17.png"></image> <image class="item_mask_icon" wx:if="{{item.fileType === 'video'}}" src="{{imageUrl}}icon17.png?t={{Timestamp}}"></image>
<view class="clear" wx:if="{{delete}}" catchtap="deleteFile" data-item="{{item}}" data-index="{{index}}"> <view class="clear" wx:if="{{delete}}" catchtap="deleteFile" data-item="{{item}}" data-index="{{index}}">
<van-icon name="cross" /> <van-icon name="cross" />
</view> </view>
@ -21,7 +21,7 @@
<slot wx:if="{{isSlot}}"></slot> <slot wx:if="{{isSlot}}"></slot>
<view wx:else class="btn"> <view wx:else class="btn">
<image class="icon" src="/images/icon16.png"></image> <image class="icon" src="{{imageUrl}}icon16.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
</view> </view>

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

@ -13,7 +13,7 @@
wx:else wx:else
bind:tap="handleNav" bind:tap="handleNav"
data-index="{{index}}" data-index="{{index}}"
icon="{{imageUrl}}/tabbar/{{active==index ? item.iconActive : item.icon}}.png?r={{Timestamp}}" icon="{{imageUrl}}tabbar/{{active==index ? item.iconActive : item.icon}}.png?r={{Timestamp}}"
> >
<view class="name {{index==active && 'active'}}">{{item.text}}</view> <view class="name {{index==active && 'active'}}">{{item.text}}</view>
</van-tabbar-item> </van-tabbar-item>

120
src/doc/pages/doc/index.ts

@ -1,102 +1,48 @@
const app = getApp<IAppOption>()
Page({ Page({
data: { data: {
popupShow: false, list: [] as Array<{
popupType: '', id: number
popupParams: { type: number
position: 'bottom', title: string
} as any, content: string
version: string
topicShow: false, updateTime: string
replayShow: true, }>,
},
onLoad(options) {
// 如果带了 active 参数,直接跳转到对应协议详情
if (options.active) {
this.getList().then(() => {
const type = Number(options.active)
wx.redirectTo({
url: `/doc/pages/doc1/index?type=${type}`,
})
})
return
}
fileList: [] as any[], this.getList()
},
onLoad() {
app.waitLogin({ type: 0 }).then(() => {})
}, },
handlePopupOk() { getList() {
const { popupType } = this.data return wx
if (popupType === 'argument') { .ajax({
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' }) method: 'GET',
wx.ajax({ url: '?r=psvt/agreement/get-list',
method: 'POST',
url: '?r=wtx/user/agree-guest-privacy',
data: {
WorkerId: app.globalData.scene?.workerId || '',
},
}).then(() => {
this.setData({
popupShow: false,
popupType: '',
popupParams: {},
})
const waitBindDoctorId = app.globalData.waitBindDoctorId
if (waitBindDoctorId) {
this.handleBindDoctor(waitBindDoctorId)
}
}) })
} .then((res) => {
if (popupType === 'conformBindDoctorConform') {
this.setData({ this.setData({
popupShow: false, list: res,
})
wx.ajax({
method: 'POST',
url: '?r=wtx/account/wait-bind-doctor',
data: {
doctorId: app.globalData.waitBindDoctorId,
},
}).then(() => {
wx.navigateTo({
url: `/patient/pages/login/index`,
}) })
}) })
}
}, },
handlePopupCancel() { handleToDetail(e: WechatMiniprogram.TouchEvent) {
const { popupType } = this.data const { type } = e.currentTarget.dataset
if (popupType === 'argument') {
wx.exitMiniProgram()
}
if (popupType === 'conformBindDoctorConform') {
this.setData({
popupShow: false,
})
wx.ajax({
method: 'POST',
url: '?r=wtx/account/wait-bind-doctor',
data: {
doctorId: app.globalData.waitBindDoctorId,
},
}).then(() => {
app.globalData.waitBindDoctorId = ''
})
}
},
handleWechatWork() {
wx.navigateTo({ wx.navigateTo({
url: '/pages/wechatWork/index', url: `/doc/pages/doc1/index?type=${type}`,
}) })
}, },
handleSetData(e) { handleBack() {
const { fileList } = this.data wx.navigateBack()
this.setData({
fileList: [...fileList, ...e.detail],
})
},
handleDeleteFile(e) {
const { index } = e.detail
const { fileList } = this.data
this.setData({
fileList: fileList.filter((_, i) => i !== index),
})
},
topicClose() {
this.setData({
topicShow: false,
})
}, },
}) })

26
src/doc/pages/doc/index.wxml

@ -1,5 +1,5 @@
<navbar fixed custom-style="background:{{background}}" back> <navbar fixed custom-style="background:{{background}}" back>
<view class="page-title" slot="left"> <view class="page-title" slot="left" bind:tap="handleBack">
<van-icon name="arrow-left" /> <van-icon name="arrow-left" />
个人信息 个人信息
</view> </view>
@ -7,24 +7,18 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="list"> <view class="list">
<view class="info-card"> <view class="info-card">
<view class="info-row"> <view
<text class="info-label">《隐私政策》</text> class="info-row"
<van-icon name="arrow" class="info-arrow" /> wx:for="{{list}}"
</view> wx:key="type"
<view class="info-row"> bind:tap="handleToDetail"
<text class="info-label">《用户协议》</text> data-type="{{item.type}}"
<van-icon name="arrow" class="info-arrow" /> >
</view> <text class="info-label">《{{item.title}}》</text>
<view class="info-row">
<text class="info-label">《法律声明》</text>
<van-icon name="arrow" class="info-arrow" />
</view>
<view class="info-row">
<text class="info-label">《健康敏感信息处理与AI服务授权告知书》</text>
<van-icon name="arrow" class="info-arrow" /> <van-icon name="arrow" class="info-arrow" />
</view> </view>
</view> </view>

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

@ -1,3 +1,22 @@
.page{ .page {
padding: 0 40rpx; padding: 0 40rpx;
.header {
padding: 40rpx 0 24rpx;
border-bottom: 1rpx solid #f1f5f9;
margin-bottom: 24rpx;
.title {
font-size: 36rpx;
font-weight: bold;
color: #1e293b;
line-height: 50rpx;
}
.meta {
margin-top: 12rpx;
font-size: 24rpx;
color: #94a3b8;
}
}
} }

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

File diff suppressed because one or more lines are too long

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

@ -1,6 +0,0 @@
{
"navigationBarTitleText": "个人信息共享知情同意书",
"usingComponents": {
"mp-html": "mp-html"
}
}

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

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

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

File diff suppressed because one or more lines are too long

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

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

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

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

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

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

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

File diff suppressed because one or more lines are too long

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

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

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

@ -1,6 +0,0 @@
{
"navigationBarTitleText": "用户协议",
"usingComponents": {
"mp-html": "mp-html"
}
}

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

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

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

File diff suppressed because one or more lines are too long

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

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

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

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

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

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

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

File diff suppressed because one or more lines are too long

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

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

BIN
src/images/tabbar/tabbar1-1-active.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/images/tabbar/tabbar1-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/images/tabbar/tabbar1-2-active.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/tabbar/tabbar1-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/tabbar/tabbar1-3-active.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/tabbar/tabbar1-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/images/tabbar/tabbar1-4-active.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/images/tabbar/tabbar1-4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 B

16
src/pages/articleDetail/index.wxml

@ -9,7 +9,7 @@
<view class="pv">1209人阅读</view> <view class="pv">1209人阅读</view>
</view> </view>
<view class="banner"> <view class="banner">
<image class="b-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="b-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view> </view>
<view class="mp-wrap"> <view class="mp-wrap">
<mp-html content="{{content}}"></mp-html> <mp-html content="{{content}}"></mp-html>
@ -21,10 +21,10 @@
<view class="r-list"> <view class="r-list">
<view class="list-card"> <view class="list-card">
<view class="photo-wrap"> <view class="photo-wrap">
<image class="photo" mode="aspectFill" src="/images/bg1.png"></image> <image class="photo" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<!-- <view class="type1">图文</view> --> <!-- <view class="type1">图文</view> -->
<view class="type2"> <view class="type2">
<image class="icon" src="/images/icon10.png"></image> <image class="icon" src="{{imageUrl}}icon10.png?t={{Timestamp}}"></image>
视频 视频
</view> </view>
</view> </view>
@ -34,11 +34,11 @@
<view class="tag">认识PSVT</view> <view class="tag">认识PSVT</view>
<view class="stat"> <view class="stat">
<view class="s-item"> <view class="s-item">
<image class="icon" src="/images/icon8.png"></image> <image class="icon" src="{{imageUrl}}icon8.png?t={{Timestamp}}"></image>
2.1万 2.1万
</view> </view>
<view class="s-item"> <view class="s-item">
<image class="icon" src="/images/icon9.png"></image> <image class="icon" src="{{imageUrl}}icon9.png?t={{Timestamp}}"></image>
2.1万 2.1万
</view> </view>
</view> </view>
@ -50,15 +50,15 @@
<view class="page-footer"> <view class="page-footer">
<view class="op-wrap"> <view class="op-wrap">
<view class="op"> <view class="op">
<image class="icon" src="/images/icon9.png"></image> <image class="icon" src="{{imageUrl}}icon9.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon28.png"></image> <image class="icon" src="{{imageUrl}}icon28.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon29.png"></image> <image class="icon" src="{{imageUrl}}icon29.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
</view> </view>

4
src/pages/changeTel/index.json

@ -0,0 +1,4 @@
{
"navigationBarTitleText": "修改手机号",
"usingComponents": {}
}

51
src/pages/changeTel/index.scss

@ -0,0 +1,51 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 48rpx 40rpx;
.form {
padding: 0 32rpx;
background-color: #fff;
border-radius: 24rpx;
.row {
display: flex;
align-items: center;
.label {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
width: 5em;
}
.container {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10rpx;
.input {
padding: 32rpx 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.place-input {
color: rgba(161, 164, 172, 0.4);
}
.btn {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
}
}
}
}
.login-out {
margin-top: 48rpx;
padding: 20rpx;
font-size: 32rpx;
line-height: 48rpx;
color: #fff;
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 96rpx;
}
}

91
src/pages/changeTel/index.ts

@ -0,0 +1,91 @@
const app = getApp<IAppOption>()
let timer = null as null | number
Page({
data: {
mobile: '',
code: '',
codeText: '发送验证码',
},
onLoad() {},
onUnload() {
if (timer) {
clearInterval(timer as number)
timer = null
}
},
getCode() {
if (timer) return
const mobile = this.data.mobile
if (!mobile) {
wx.showToast({
title: '手机号不能为空',
icon: 'none',
})
return
}
// 验证手机号
if (!/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/.test(mobile)) {
wx.showToast({
title: '手机号格式不正确',
icon: 'none',
})
return
}
wx.ajax({
method: 'POST',
url: '?r=wtx/login/send-verify-code',
data: {
mobile,
},
}).then((res) => {
console.log(res)
wx.showToast({
icon: 'none',
title: '验证码已发送~',
})
let time = 60
timer = setInterval(() => {
time--
this.setData({
codeText: time + 's后重新发送',
})
if (time <= 0) {
clearInterval(timer as number)
timer = null
this.setData({
codeText: '发送验证码',
})
}
}, 1000)
})
},
handleSubmit() {
wx.showModal({
title: '确定修改此手机号?',
confirmColor: '#F64A3A',
success: (res) => {
if (!res.confirm) return
const { mobile, code } = this.data
const { registrationSource, registChannel, regBusinessId } = app.globalData
wx.ajax({
method: 'POST',
url: '?r=wtx/account/update-telephone',
data: {
mobile,
code,
registrationSource,
registChannel,
regBusinessId,
},
}).then((_res) => {
wx.navigateBack()
})
},
})
},
handleBack() {
wx.navigateBack()
},
})

32
src/pages/changeTel/index.wxml

@ -0,0 +1,32 @@
<view class="page">
<view class="form">
<view class="row">
<view class="label">新手机号</view>
<view class="container">
<input
type="number"
class="input"
model:value="{{mobile}}"
maxlength="11"
placeholder-class="place-input"
placeholder="请输入新手机号"
/>
</view>
</view>
<view class="row">
<view class="label">验证码</view>
<view class="container">
<input
type="number"
class="input"
model:value="{{code}}"
maxlength="6"
placeholder-class="place-input"
placeholder="请输入验证码"
/>
<view class="btn" bind:tap="getCode">{{codeText}}</view>
</view>
</view>
</view>
<view class="login-out" bind:tap="handleSubmit">提交</view>
</view>

4
src/pages/confirmInfo/index.json

@ -1,4 +1,6 @@
{ {
"navigationStyle": "custom", "navigationStyle": "custom",
"usingComponents": {} "usingComponents": {
"picker-area": "/components/pickerArea/index"
}
} }

1
src/pages/confirmInfo/index.scss

@ -142,6 +142,7 @@ page {
} }
.select3 { .select3 {
margin-top: 24rpx; margin-top: 24rpx;
margin-bottom: 56rpx;
.picker-content { .picker-content {
padding: 0 34rpx; padding: 0 34rpx;
height: 88rpx; height: 88rpx;

66
src/pages/confirmInfo/index.ts

@ -1,16 +1,27 @@
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
interface OptionItem {
value: number
label: string
}
Page({ Page({
data: { data: {
menuTop: 0, menuTop: 0,
step: 1, step: 1,
// 基础数据列表 (from API 1.7)
ageRangeList: [] as OptionItem[],
genderList: [] as OptionItem[],
diagnosisStatusList: [] as OptionItem[],
surgeryStatusList: [] as OptionItem[],
// Step 1: 基础信息 // Step 1: 基础信息
ageRange: 0 as number, ageRange: 0 as number,
gender: 0 as number, gender: 0 as number,
provinceId: '' as string | number, provinceId: '',
provinceName: '', provinceName: '',
cityId: '' as string | number, cityId: '',
cityName: '', cityName: '',
regionText: '', regionText: '',
@ -28,6 +39,35 @@ Page({
menuTop: menuRes.top, menuTop: menuRes.top,
currentMonth, currentMonth,
}) })
this.getBaseData()
},
getBaseData() {
wx.ajax({
method: 'GET',
url: '?r=psvt/patient/base-data',
}).then((res) => {
const parseList = (list: any): OptionItem[] => {
if (Array.isArray(list)) {
return list.map((item) => {
const key = Object.keys(item)[0]
return { value: Number(key), label: item[key] }
})
}
if (list && typeof list === 'object') {
return Object.keys(list).map((key) => ({
value: Number(key),
label: list[key],
}))
}
return []
}
this.setData({
ageRangeList: parseList(res.ageRangeList),
genderList: parseList(res.genderList),
diagnosisStatusList: parseList(res.diagnosisStatusList),
surgeryStatusList: parseList(res.surgeryStatusList),
})
})
}, },
handleSelect(e: WechatMiniprogram.TouchEvent) { handleSelect(e: WechatMiniprogram.TouchEvent) {
const { key, value } = e.currentTarget.dataset const { key, value } = e.currentTarget.dataset
@ -35,12 +75,14 @@ Page({
[key]: Number(value), [key]: Number(value),
}) })
}, },
handleRegionChange(e: WechatMiniprogram.PickerChange) { handleAreaChange(e: any) {
const region = e.detail.value as string[] const [province, city] = e.detail
this.setData({ this.setData({
provinceName: region[0], provinceId: province.value,
cityName: region[2] || region[1], provinceName: province.label,
regionText: region.filter((r) => r && r !== '全部').join(' '), cityId: city.value,
cityName: city.label,
regionText: [province.label, city.label].filter(Boolean).join(' '),
}) })
}, },
handleDiagnosisTimeChange(e: WechatMiniprogram.PickerChange) { handleDiagnosisTimeChange(e: WechatMiniprogram.PickerChange) {
@ -106,16 +148,12 @@ Page({
data, data,
loading: true, loading: true,
loadingText: '提交中...', loadingText: '提交中...',
}).then((res) => { }).then(() => {
const { isRegistered } = res app.globalData.initLoginInfo.isReg = 1
if (isRegistered) { app.globalData.initLoginInfo.isLogin = 1
if (app.globalData.initLoginInfo) {
app.globalData.initLoginInfo.isInfoSubmitted = true
}
wx.reLaunch({ wx.reLaunch({
url: '/pages/index/index', url: '/pages/index/index',
}) })
}
}) })
}, },
}) })

127
src/pages/confirmInfo/index.wxml

@ -1,12 +1,12 @@
<view <view
class="page" class="page"
style="background: url('/images/bg2.png') no-repeat top center/100% 454rpx;padding-top: {{menuTop}}px;" style="background: url('{{imageUrl}}bg2.png?t={{Timestamp}}') no-repeat top center/100% 454rpx;padding-top: {{menuTop}}px;"
> >
<image class="logo" src="/images/logo1.png"></image> <image class="logo" src="{{imageUrl}}logo1.png?t={{Timestamp}}"></image>
<view class="page-header"> <view class="page-header">
<view class="item {{step==1 &&'active'}}"> <view class="item {{step==1 &&'active'}}">
<view class="order" wx:if="{{step===1}}">1</view> <view class="order" wx:if="{{step===1}}">1</view>
<view class="order" wx:else><image class="icon" src="/images/icon3.png"></image></view> <view class="order" wx:else><image class="icon" src="{{imageUrl}}icon3.png?t={{Timestamp}}"></image></view>
<view class="name">基础信息</view> <view class="name">基础信息</view>
</view> </view>
<view class="line {{step>1 &&'active'}}"></view> <view class="line {{step>1 &&'active'}}"></view>
@ -16,7 +16,7 @@
</view> </view>
</view> </view>
<view class="tip"> <view class="tip">
<image class="icon" src="/images/icon4.png"></image> <image class="icon" src="{{imageUrl}}icon4.png?t={{Timestamp}}"></image>
<view class="content">这些信息将用于优化内容推荐与服务提醒,不作为诊断或 治疗建议依据。</view> <view class="content">这些信息将用于优化内容推荐与服务提醒,不作为诊断或 治疗建议依据。</view>
</view> </view>
@ -26,63 +26,47 @@
<view class="row-title">我的年龄段</view> <view class="row-title">我的年龄段</view>
<view class="select1"> <view class="select1">
<view <view
class="s-item {{ageRange===1 && 'active'}}" class="s-item {{ageRange===item.value && 'active'}}"
wx:for="{{ageRangeList}}"
wx:key="value"
bind:tap="handleSelect" bind:tap="handleSelect"
data-key="ageRange" data-key="ageRange"
data-value="1" data-value="{{item.value}}"
>18-28岁</view> >{{item.label}}</view>
<view
class="s-item {{ageRange===2 && 'active'}}"
bind:tap="handleSelect"
data-key="ageRange"
data-value="2"
>29-40岁</view>
<view
class="s-item {{ageRange===3 && 'active'}}"
bind:tap="handleSelect"
data-key="ageRange"
data-value="3"
>41-50岁</view>
<view
class="s-item {{ageRange===4 && 'active'}}"
bind:tap="handleSelect"
data-key="ageRange"
data-value="4"
>50岁以上</view>
</view> </view>
</view> </view>
<view class="row"> <view class="row">
<view class="row-title">我的性别</view> <view class="row-title">我的性别</view>
<view class="select2"> <view class="select2">
<view <view
class="s-item {{gender===1 && 'active1'}}" class="s-item {{gender===1 && index==0 && 'active1'}} {{gender===2 && index==1 && 'active2'}}"
wx:for="{{genderList}}"
wx:key="value"
bind:tap="handleSelect" bind:tap="handleSelect"
data-key="gender" data-key="gender"
data-value="1" data-value="{{item.value}}"
> >
<image class="icon" src="/images/icon5.png"></image> <image class="icon" src="{{imageUrl}}icon5.png?t={{Timestamp}}" wx:if="{{item.value===1}}"></image>
<image class="icon" src="{{imageUrl}}icon6.png?t={{Timestamp}}" wx:if="{{item.value===2}}"></image>
</view> {{item.label}}
<view
class="s-item {{gender===2 && 'active2'}}"
bind:tap="handleSelect"
data-key="gender"
data-value="2"
>
<image class="icon" src="/images/icon6.png"></image>
</view> </view>
</view> </view>
</view> </view>
<view class="row"> <view class="row">
<view class="row-title">所在地区</view> <view class="row-title">所在地区</view>
<view class="select3"> <view class="select3">
<picker mode="region" bindchange="handleRegionChange"> <picker-area
pname="{{provinceName}}"
pid="{{provinceId}}"
cname="{{cityName}}"
cid="{{cityId}}"
bind:change="handleAreaChange"
>
<view class="picker-content"> <view class="picker-content">
<view class="content" data-place="请选择所在地区">{{regionText || ''}}</view> <view class="content" data-place="请选择所在地区">{{regionText || ''}}</view>
<image class="icon" src="/images/icon7.png"></image> <image class="icon" src="{{imageUrl}}icon7.png?t={{Timestamp}}"></image>
</view> </view>
</picker> </picker-area>
</view> </view>
</view> </view>
</view> </view>
@ -93,39 +77,14 @@
<view class="row-title">确诊状态</view> <view class="row-title">确诊状态</view>
<view class="select4"> <view class="select4">
<view <view
class="s-item {{diagnosisStatus===1 && 'active'}}" class="s-item {{diagnosisStatus===item.value && 'active'}}"
wx:for="{{diagnosisStatusList}}"
wx:key="value"
bind:tap="handleSelect" bind:tap="handleSelect"
data-key="diagnosisStatus" data-key="diagnosisStatus"
data-value="1" data-value="{{item.value}}"
> >
<view class="title">疑似PSVT</view> <view class="title">{{item.label}}</view>
<view class="content">正在了解中</view>
</view>
<view
class="s-item {{diagnosisStatus===2 && 'active'}}"
bind:tap="handleSelect"
data-key="diagnosisStatus"
data-value="2"
>
<view class="title">已确诊PSVT</view>
</view>
<view
class="s-item {{diagnosisStatus===3 && 'active'}}"
bind:tap="handleSelect"
data-key="diagnosisStatus"
data-value="3"
>
<view class="title">心悸/心跳过快</view>
<view class="content">尚未就诊</view>
</view>
<view
class="s-item {{diagnosisStatus===4 && 'active'}}"
bind:tap="handleSelect"
data-key="diagnosisStatus"
data-value="4"
>
<view class="title">亲友相关</view>
<view class="content">想了解更多</view>
</view> </view>
</view> </view>
</view> </view>
@ -135,7 +94,7 @@
<picker mode="date" fields="month" bindchange="handleDiagnosisTimeChange" end="{{currentMonth}}"> <picker mode="date" fields="month" bindchange="handleDiagnosisTimeChange" end="{{currentMonth}}">
<view class="picker-content"> <view class="picker-content">
<view class="content" data-place="选择确诊时间">{{diagnosisTime || ''}}</view> <view class="content" data-place="选择确诊时间">{{diagnosisTime || ''}}</view>
<image class="icon" src="/images/icon7.png"></image> <image class="icon" src="{{imageUrl}}icon7.png?t={{Timestamp}}"></image>
</view> </view>
</picker> </picker>
</view> </view>
@ -144,28 +103,14 @@
<view class="row-title">是否接受过相关手术治疗</view> <view class="row-title">是否接受过相关手术治疗</view>
<view class="select4"> <view class="select4">
<view <view
class="s-item {{surgeryStatus===1 && 'active'}}" class="s-item {{surgeryStatus===item.value && 'active'}}"
bind:tap="handleSelect" wx:for="{{surgeryStatusList}}"
data-key="surgeryStatus" wx:key="value"
data-value="1"
>
<view class="title">已接受射频消融 /相关手术</view>
</view>
<view
class="s-item {{surgeryStatus===2 && 'active'}}"
bind:tap="handleSelect"
data-key="surgeryStatus"
data-value="2"
>
<view class="title">尚未接受手术</view>
</view>
<view
class="s-item {{surgeryStatus===3 && 'active'}}"
bind:tap="handleSelect" bind:tap="handleSelect"
data-key="surgeryStatus" data-key="surgeryStatus"
data-value="3" data-value="{{item.value}}"
> >
<view class="title">正在评估</view> <view class="title">{{item.label}}</view>
</view> </view>
</view> </view>
</view> </view>

6
src/pages/drugMap/index.wxml

@ -1,9 +1,9 @@
<navbar fixed custom-style="background:{{background}}" back> <navbar fixed custom-style="background:{{background}}" back>
<image class="page-title" slot="left" src="/images/logo2.png"></image> <image class="page-title" slot="left" src="{{imageUrl}}logo2.png?t={{Timestamp}}"></image>
</navbar> </navbar>
<view class="page" style="background: url('/images/bg6.png') no-repeat top center/100%;padding-top: {{pageTop}}rpx;"> <view class="page" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100%;padding-top: {{pageTop}}rpx;">
<image class="logo" src="/images/bg5.png"></image> <image class="logo" src="{{imageUrl}}bg5.png?t={{Timestamp}}"></image>
<view class="content"> <view class="content">
我们正在全力打造购药地图服务 我们正在全力打造购药地图服务
<view></view> <view></view>

1
src/pages/followDetail/index.ts

@ -19,7 +19,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

4
src/pages/followDetail/index.wxml

@ -7,7 +7,7 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="form"> <view class="form">
<view class="form-item"> <view class="form-item">
@ -23,7 +23,7 @@
</view> </view>
<view class="photo9"> <view class="photo9">
<view class="p-item" wx:for="{{3}}" wx:key="index"> <view class="p-item" wx:for="{{3}}" wx:key="index">
<image class="p-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="p-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
</view> </view>

1
src/pages/followForm/index.ts

@ -16,7 +16,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

2
src/pages/followForm/index.wxml

@ -7,7 +7,7 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="form"> <view class="form">
<view class="form-item"> <view class="form-item">

1
src/pages/health/index.ts

@ -160,7 +160,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

14
src/pages/health/index.wxml

@ -1,14 +1,14 @@
<navbar id="navbar" fixed custom-style="background:{{background}}" back> <navbar id="navbar" fixed custom-style="background:{{background}}" back>
<image class="page-title" slot="left" src="/images/logo2.png"></image> <image class="page-title" slot="left" src="{{imageUrl}}logo2.png?t={{Timestamp}}"></image>
</navbar> </navbar>
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<!-- <swiper class="banner"> --> <!-- <swiper class="banner"> -->
<!-- <swiper-item> --> <!-- <swiper-item> -->
<!-- <image class="b-img" mode="aspectFill" src="/images/bg1.png"></image> --> <!-- <image class="b-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image> -->
<!-- </swiper-item> --> <!-- </swiper-item> -->
<!-- </swiper> --> <!-- </swiper> -->
<van-tabs <van-tabs
@ -38,7 +38,7 @@
<picker mode="date"> <picker mode="date">
<view class="date">2026.01</view> <view class="date">2026.01</view>
</picker> </picker>
<image class="icon" src="/images/icon25.png"></image> <image class="icon" src="{{imageUrl}}icon25.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="stats-grid"> <view class="stats-grid">
@ -90,7 +90,7 @@
<picker mode="date"> <picker mode="date">
<view class="date">2026.01</view> <view class="date">2026.01</view>
</picker> </picker>
<image class="icon" src="/images/icon25.png"></image> <image class="icon" src="{{imageUrl}}icon25.png?t={{Timestamp}}"></image>
</view> </view>
<view class="total"> <view class="total">
共复诊 共复诊
@ -108,7 +108,7 @@
</view> </view>
<view class="photo9"> <view class="photo9">
<view class="p-item" wx:for="{{3}}" wx:key="index"> <view class="p-item" wx:for="{{3}}" wx:key="index">
<image class="p-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="p-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="title">未更新处方</view> <view class="title">未更新处方</view>
@ -121,5 +121,5 @@
</view> </view>
<view class="fixed-add"> <view class="fixed-add">
<image class="icon" src="/images/icon24.png"></image> <image class="icon" src="{{imageUrl}}icon24.png?t={{Timestamp}}"></image>
</view> </view>

1
src/pages/heartDetail/index.ts

@ -16,7 +16,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

2
src/pages/heartDetail/index.wxml

@ -7,7 +7,7 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="form"> <view class="form">
<view class="form-item"> <view class="form-item">

1
src/pages/heartForm/index.ts

@ -16,7 +16,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

2
src/pages/heartForm/index.wxml

@ -7,7 +7,7 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="form"> <view class="form">
<view class="rate"> <view class="rate">

1
src/pages/hotTopic/index.ts

@ -14,7 +14,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

2
src/pages/hotTopic/index.wxml

@ -6,7 +6,7 @@
<view <view
class="page" class="page"
style="background: url('/images/bg9.png') no-repeat top center/100% 508rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg9.png?t={{Timestamp}}') no-repeat top center/100% 508rpx;padding-top: {{pageTop}}px;"
> >
<view class="container"> <view class="container">
<view class="tp-list"> <view class="tp-list">

1
src/pages/hotTopicDetail/index.ts

@ -14,7 +14,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

20
src/pages/hotTopicDetail/index.wxml

@ -6,11 +6,11 @@
<view <view
class="page" class="page"
style="background: url('/images/bg10.png') no-repeat top center/100% 506rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg10.png?t={{Timestamp}}') no-repeat top center/100% 506rpx;padding-top: {{pageTop}}px;"
> >
<view class="info"> <view class="info">
<view class="i-header"> <view class="i-header">
<image class="icon" src="/images/icon23.png"></image> <image class="icon" src="{{imageUrl}}icon23.png?t={{Timestamp}}"></image>
<view class="name">我的心悸经历</view> <view class="name">我的心悸经历</view>
</view> </view>
<view class="total">1200人浏览 | 300篇帖子</view> <view class="total">1200人浏览 | 300篇帖子</view>
@ -23,13 +23,13 @@
<view class="list"> <view class="list">
<view class="list-card" bind:tap="handleDetail"> <view class="list-card" bind:tap="handleDetail">
<view class="user"> <view class="user">
<image class="avatar" mode="aspectFill" src="/images/bg1.png"></image> <image class="avatar" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="name">@林间心跳</view> <view class="name">@林间心跳</view>
<view class="date">2026年7月1日 13:09</view> <view class="date">2026年7月1日 13:09</view>
</view> </view>
</view> </view>
<view class="hot" style="background: url('/images/bg11.png') no-repeat top center/100%">热门推荐</view> <view class="hot" style="background: url('{{imageUrl}}bg11.png?t={{Timestamp}}') no-repeat top center/100%">热门推荐</view>
<view class="content"> <view class="content">
<view class="c-topic">#我的心悸经历</view> <view class="c-topic">#我的心悸经历</view>
<view class="c-topic">#PSVT急救常识</view> <view class="c-topic">#PSVT急救常识</view>
@ -39,11 +39,11 @@
<view class="tag" wx:for="{{4}}" wx:key="index">患者故事</view> <view class="tag" wx:for="{{4}}" wx:key="index">患者故事</view>
</view> </view>
<!-- 单图 --> <!-- 单图 -->
<image class="photo1" mode="heightFix" src="/images/bg1.png"></image> <image class="photo1" mode="heightFix" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<!-- 多图 --> <!-- 多图 -->
<view class="photo9"> <view class="photo9">
<view class="p-item" wx:for="{{3}}" wx:key="index"> <view class="p-item" wx:for="{{3}}" wx:key="index">
<image class="p-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="p-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="comment"> <view class="comment">
@ -52,15 +52,15 @@
</view> </view>
<view class="footer"> <view class="footer">
<view class="op"> <view class="op">
<image class="icon" src="/images/icon9.png"></image> <image class="icon" src="{{imageUrl}}icon9.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon8.png"></image> <image class="icon" src="{{imageUrl}}icon8.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon15.png"></image> <image class="icon" src="{{imageUrl}}icon15.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
</view> </view>
@ -70,5 +70,5 @@
</view> </view>
<view class="fixed-add"> <view class="fixed-add">
<image class="icon" src="/images/icon24.png"></image> <image class="icon" src="{{imageUrl}}icon24.png?t={{Timestamp}}"></image>
</view> </view>

1
src/pages/index/index.ts

@ -14,7 +14,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

24
src/pages/index/index.wxml

@ -1,18 +1,18 @@
<navbar fixed custom-style="background:{{background}}" back> <navbar fixed custom-style="background:{{background}}" back>
<image class="page-title" slot="left" src="/images/logo2.png"></image> <image class="page-title" slot="left" src="{{imageUrl}}logo2.png?t={{Timestamp}}"></image>
</navbar> </navbar>
<view class="page" style="background: url('/images/bg3.png') no-repeat top center/100%;padding-top: {{pageTop}}px;"> <view class="page" style="background: url('{{imageUrl}}bg3.png?t={{Timestamp}}') no-repeat top center/100%;padding-top: {{pageTop}}px;">
<view class="user"> <view class="user">
<image class="avatar" mode="aspectFill" src="/images/bg1.png"></image> <image class="avatar" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="name">Hi, 伍六七</view> <view class="name">Hi, 伍六七</view>
<view class="content">星动守护您的第 15 天~</view> <view class="content">星动守护您的第 15 天~</view>
</view> </view>
</view> </view>
<view class="new-gift"> <view class="new-gift">
<image class="characters" src="/images/bg5.png"></image> <image class="characters" src="{{imageUrl}}bg5.png?t={{Timestamp}}"></image>
<image class="n-img" src="/images/bg4.png"></image> <image class="n-img" src="{{imageUrl}}bg4.png?t={{Timestamp}}"></image>
</view> </view>
<view class="kkd"></view> <view class="kkd"></view>
<view class="video-list"> <view class="video-list">
@ -25,7 +25,7 @@
</view> </view>
<view class="scroll"> <view class="scroll">
<view class="card" wx:for="{{10}}" wx:key="index"> <view class="card" wx:for="{{10}}" wx:key="index">
<image class="poster" mode="aspectFill" src="/images/bg1.png"></image> <image class="poster" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="info"> <view class="info">
<view class="title">心脏突然狂飙跳</view> <view class="title">心脏突然狂飙跳</view>
</view> </view>
@ -46,10 +46,10 @@
<view class="i-list"> <view class="i-list">
<view class="list-card"> <view class="list-card">
<view class="photo-wrap"> <view class="photo-wrap">
<image class="photo" mode="aspectFill" src="/images/bg1.png"></image> <image class="photo" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<!-- <view class="type1">图文</view> --> <!-- <view class="type1">图文</view> -->
<view class="type2"> <view class="type2">
<image class="icon" src="/images/icon10.png"></image> <image class="icon" src="{{imageUrl}}icon10.png?t={{Timestamp}}"></image>
视频 视频
</view> </view>
</view> </view>
@ -59,11 +59,11 @@
<view class="tag">认识PSVT</view> <view class="tag">认识PSVT</view>
<view class="stat"> <view class="stat">
<view class="s-item"> <view class="s-item">
<image class="icon" src="/images/icon8.png"></image> <image class="icon" src="{{imageUrl}}icon8.png?t={{Timestamp}}"></image>
2.1万 2.1万
</view> </view>
<view class="s-item"> <view class="s-item">
<image class="icon" src="/images/icon9.png"></image> <image class="icon" src="{{imageUrl}}icon9.png?t={{Timestamp}}"></image>
2.1万 2.1万
</view> </view>
</view> </view>
@ -75,10 +75,10 @@
</view> </view>
<view class="back-top"> <view class="back-top">
<image class="icon" src="/images/icon11.png"></image> <image class="icon" src="{{imageUrl}}icon11.png?t={{Timestamp}}"></image>
</view> </view>
<view class="wechat" bind:tap="handleWechatWork"> <view class="wechat" bind:tap="handleWechatWork">
<image class="icon" src="/images/icon12.png"></image> <image class="icon" src="{{imageUrl}}icon12.png?t={{Timestamp}}"></image>
<view class="name">健康助理</view> <view class="name">健康助理</view>
</view> </view>

47
src/pages/login/index.scss

@ -42,12 +42,57 @@
height: 40rpx; height: 40rpx;
} }
} }
.switch{ .switch {
margin-top: 56rpx; margin-top: 56rpx;
font-size: 32rpx; font-size: 32rpx;
color: rgba(47, 130, 169, 1); color: rgba(47, 130, 169, 1);
text-align: center; text-align: center;
} }
.form {
margin-top: 32rpx;
.row {
margin-bottom: 40rpx;
padding: 0 10rpx 0 32rpx;
display: flex;
align-items: center;
background: #f9fafb;
border: 1px solid #f1f5f9;
border-radius: 24rpx;
.input {
flex: 1;
padding: 20rpx 0;
height: 40rpx;
font-size: 28rpx;
color: rgba(30, 41, 59, 1);
}
.input-place {
color: rgba(148, 163, 184, 1);
}
.code {
margin-left: 24rpx;
flex-shrink: 0;
width: 212rpx;
height: 68rpx;
border-radius: 24rpx;
font-size: 28rpx;
color: #fff;
background: var(--, linear-gradient(270deg, #439fc7 0%, #2f82a9 100%));
display: flex;
align-items: center;
justify-content: center;
}
}
.submit {
height: 96rpx;
background: var(--, linear-gradient(270deg, #439fc7 0%, #2f82a9 100%));
border-radius: 24rpx;
font-size: 34rpx;
color: #ffffff;
font-weight: bold;
text-align: center;
line-height: 96rpx;
}
}
.argument { .argument {
margin-top: 120rpx; margin-top: 120rpx;
line-height: 48rpx; line-height: 48rpx;

109
src/pages/login/index.ts

@ -1,9 +1,16 @@
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
let timer = null as null | number
Page({ Page({
data: { data: {
menuTop: 0, menuTop: 0,
checked: false, checked: false,
codeText: '发送验证码',
showTel: false,
mobile: '',
code: '',
}, },
onLoad(_options) { onLoad(_options) {
const menuRes = wx.getMenuButtonBoundingClientRect() const menuRes = wx.getMenuButtonBoundingClientRect()
@ -12,6 +19,51 @@ Page({
}) })
app.waitLogin({ type: 'any' }).then(() => {}) app.waitLogin({ type: 'any' }).then(() => {})
}, },
getCode() {
if (timer) return
const mobile = this.data.mobile
if (!mobile) {
wx.showToast({
title: '手机号不能为空',
icon: 'none',
})
return
}
// 验证手机号
if (!/^1[3-9,]\d{9}$/.test(mobile)) {
wx.showToast({
title: '手机号格式不正确',
icon: 'none',
})
return
}
wx.ajax({
method: 'POST',
url: '?r=psvt/login/send-verify-code',
data: {
mobile,
},
}).then((_res) => {
wx.showToast({
icon: 'none',
title: '验证码已发送~',
})
let time = 60
timer = setInterval(() => {
time--
this.setData({
codeText: `${time}s后重新发送`,
})
if (time <= 0) {
clearInterval(timer as number)
timer = null
this.setData({
codeText: '发送验证码',
})
}
}, 1000)
})
},
handleCheck() { handleCheck() {
this.setData({ this.setData({
checked: !this.data.checked, checked: !this.data.checked,
@ -23,14 +75,14 @@ Page({
const channelId = app.globalData.scene?.channelId || '' const channelId = app.globalData.scene?.channelId || ''
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=psvt/patient/phone-register', url: '?r=psvt/login/wx-reg-login',
data: { data: {
iv: encodeURIComponent(iv), iv: encodeURIComponent(iv),
encryptedData: encodeURIComponent(encryptedData), encryptedData: encodeURIComponent(encryptedData),
channelId, channelId,
}, },
}).then(() => { }).then((res) => {
this.submitCallback() this.submitCallback(res)
}) })
} }
}, },
@ -40,11 +92,58 @@ Page({
icon: 'none', icon: 'none',
}) })
}, },
submitCallback() { async handleSubmit() {
app.globalData.initLoginInfo.isReg = 1 const { mobile, code } = this.data
if (!mobile) {
wx.showToast({
title: '请输入手机号',
icon: 'none',
})
return
}
if (!code) {
wx.showToast({
title: '请输入验证码',
icon: 'none',
})
return
}
wx.ajax({
method: 'POST',
url: '?r=psvt/login/reg-login',
data: {
mobile,
code,
},
showMsg: false,
})
.then((res) => {
this.submitCallback(res)
})
.catch((err) => {
wx.showToast({
title: err.data.msg,
icon: 'none',
})
})
},
handleShowTel() {
this.setData({
showTel: !this.data.showTel,
})
},
submitCallback(res) {
app.globalData.initLoginInfo.isReg = res.isReg
app.globalData.initLoginInfo.isLogin = res.isLogin
if (res.isReg === 0) {
wx.redirectTo({ wx.redirectTo({
url: '/pages/confirmInfo/index', url: '/pages/confirmInfo/index',
}) })
} else {
wx.redirectTo({
url: '/pages/index/index',
})
}
}, },
handleVisitors() { handleVisitors() {
app.globalData.anyWhere = true app.globalData.anyWhere = true

36
src/pages/login/index.wxml

@ -1,35 +1,41 @@
<view class="page" style="background: url('/images/bg1.png') no-repeat top center/100%;padding-top: {{menuTop}}px;"> <view class="page" style="background: url('{{imageUrl}}bg1.png?t={{Timestamp}}') no-repeat top center/100%;padding-top: {{menuTop}}px;">
<image class="logo" src="/images/logo1.png"></image> <image class="logo" src="{{imageUrl}}logo1.png?t={{Timestamp}}"></image>
<view class="container"> <view class="container">
<view class="tip">请先阅读并同意相关协议。立即加入后,我们将为您提供更匹配的科普内容与服务支持。</view> <view class="tip">请先阅读并同意相关协议。立即加入后,我们将为您提供更匹配的科普内容与服务支持。</view>
<button <button wx:if="{{checked}}" class="phone-btn" open-type="getPhoneNumber" bindgetphonenumber="handleWxSubmit">
wx:if="{{checked}}" <image class="icon" src="{{imageUrl}}icon1.png?t={{Timestamp}}"></image>
class="phone-btn"
open-type="getPhoneNumber"
bindgetphonenumber="handleWxSubmit"
>
<image class="icon" src="/images/icon1.png"></image>
手机号快捷登录 手机号快捷登录
</button> </button>
<button wx:else class="phone-btn" bind:tap="handleWxCheck"> <button wx:else class="phone-btn" bind:tap="handleWxCheck">
<image class="icon" src="/images/icon1.png"></image> <image class="icon" src="{{imageUrl}}icon1.png?t={{Timestamp}}"></image>
手机号快捷登录 手机号快捷登录
</button> </button>
<view class="switch">或输入手机号</view> <view class="switch" bind:tap="handleShowTel">或输入手机号</view>
<view class="form" wx:if="{{showTel}}">
<view class="row">
<input type="number" model:value="{{mobile}}" class="input" placeholder="请输入手机号" />
</view>
<view class="row">
<input type="number" model:value="{{code}}" class="input" placeholder="请输入验证码" />
<view class="code" bind:tap="getCode">{{codeText}}</view>
</view>
<view wx:if="{{checked}}" class="submit" bind:tap="handleSubmit">立即加入</view>
<view wx:else class="submit" bind:tap="handleWxCheck">立即加入</view>
</view>
<view class="argument"> <view class="argument">
<view class="a-col"> <view class="a-col">
<checkbox class="check" checked="{{checked}}" bind:tap="handleCheck"> <checkbox class="check" checked="{{checked}}" bind:tap="handleCheck">
<view class="check-content"> <view class="check-content">
我已阅读并同意 我已阅读并同意
<view class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index?active=1"> <view class="link" catch:tap="handleLink" data-url="/doc/pages/doc1/index?active=2">
《用户协议》 《用户协议》
</view> </view>
以及 以及
<view class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index?active=1"> <view class="link" catch:tap="handleLink" data-url="/doc/pages/doc1/index?active=1">
《隐私政策》 《隐私政策》
</view> </view>
<view class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index?active=1"> <view class="link" catch:tap="handleLink" data-url="/doc/pages/doc1/index?active=3">
《法律声明》 《法律声明》
</view> </view>
并同意平台基于服务需要收集和使用我的必要个人信息。 并同意平台基于服务需要收集和使用我的必要个人信息。
@ -39,7 +45,7 @@
</view> </view>
<view class="any" bind:tap="handleVisitors"> <view class="any" bind:tap="handleVisitors">
随便看看 随便看看
<image class="icon" src="/images/icon2.png"></image> <image class="icon" src="{{imageUrl}}icon2.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
</view> </view>

3
src/pages/my/index.json

@ -2,6 +2,7 @@
"navigationStyle": "custom", "navigationStyle": "custom",
"usingComponents": { "usingComponents": {
"popup": "/components/popup/index", "popup": "/components/popup/index",
"navbar": "/components/navbar/index" "navbar": "/components/navbar/index",
"van-icon": "@vant/weapp/icon/index"
} }
} }

6
src/pages/my/index.scss

@ -83,6 +83,8 @@ page {
height: 48rpx; height: 48rpx;
} }
.content { .content {
flex: 1;
padding: 0 32rpx;
font-size: 32rpx; font-size: 32rpx;
color: rgba(30, 41, 59, 1); color: rgba(30, 41, 59, 1);
} }
@ -96,7 +98,7 @@ page {
margin: 30rpx 40rpx; margin: 30rpx 40rpx;
padding: 32rpx; padding: 32rpx;
border-radius: 32rpx; border-radius: 32rpx;
border: 1px solid #fff; border: 1rpx solid #fff;
background: rgba(255, 255, 255, 0.7); background: rgba(255, 255, 255, 0.7);
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
@ -108,7 +110,7 @@ page {
font-size: 32rpx; font-size: 32rpx;
color: rgba(30, 41, 59, 1); color: rgba(30, 41, 59, 1);
line-height: 48rpx; line-height: 48rpx;
border-bottom: 1px dashed rgba(47, 130, 169, 0.35); border-bottom: 1rpx dashed rgba(47, 130, 169, 0.35);
.high { .high {
display: inline; display: inline;
color: #2f82a9; color: #2f82a9;

124
src/pages/my/index.ts

@ -1,129 +1,35 @@
const app = getApp<IAppOption>() const app = getApp()
Page({ Page({
data: { data: {
popupShow: false,
// popupType: 'stayTuned',
popupType: 'touristsInviteCode',
popupParams: {},
userInfo: {} as any, userInfo: {} as any,
days: 0,
showPatient: false,
applyWord: {
ApplyButtonWordOne: '',
ApplyButtonWordTwo: '',
},
}, },
onShow() { onShow() {
app.waitLogin({ type: 0 }).then(() => { app.waitLogin().then(() => {
app.mpBehavior({ PageName: 'BTN_MY_NAV' }) this.getMyInfo()
app.getUserInfo().then((userInfo) => {
this.setData({
userInfo,
Days: userInfo.Days.replace(/(\d+)/g, '<span style="font-size: 20px;color: rgba(242, 58, 47, 1);">$1</span>'),
})
})
this.getGeneConfig()
this.getApplyWord()
})
},
getGeneConfig() {
wx.ajax({
method: 'GET',
url: '?r=wtx/common/get-gene-config',
data: {},
}).then((res) => {
this.setData({
showPatient: res === '1',
})
}) })
}, },
getApplyWord() { getMyInfo() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=wtx/common/get-apply-word', url: '?r=psvt/patient/my-info',
data: {},
}).then((res) => { }).then((res) => {
this.setData({ let days = 0
applyWord: res, if (res.firstOpenTime) {
}) const first = new Date(res.firstOpenTime.replace(/-/g, '/'))
}) const now = new Date()
}, days = Math.max(1, Math.ceil((now.getTime() - first.getTime()) / (1000 * 60 * 60 * 24)))
onChooseAvatar(e) {
const { avatarUrl } = e.detail
const url = `${app.globalData.upFileUrl}?r=file-service/upload-img`
wx.showLoading({
title: '上传中',
})
wx.uploadFile({
url,
filePath: avatarUrl,
name: 'file',
success: (res) => {
const data = JSON.parse(res.data)
const avatarUrl = data.data.Url
wx.ajax({
method: 'POST',
url: '?r=wtx/user/update-avatar',
data: {
Avatar: avatarUrl,
},
})
.then(() => {
wx.hideLoading()
wx.showToast({
title: '头像更新成功!',
icon: 'none',
})
this.setData({
'userInfo.Avatar': avatarUrl,
})
})
.catch(() => {
wx.hideLoading()
})
},
fail() {
wx.hideLoading()
},
})
},
handlePopupCancel() {
this.setData({
popupShow: false,
})
},
handlePopupOk() {
this.setData({
popupShow: false,
})
},
handlePatient(e) {
const { url, pname } = e.currentTarget.dataset
const { userInfo } = this.data
if (pname) {
app.mpBehavior({ PageName: pname })
} }
if (userInfo.PatientId <= 0) {
this.setData({ this.setData({
popupShow: true, userInfo: res,
popupType: 'touristsInviteCode', days,
}) })
return
}
wx.navigateTo({
url,
}) })
}, },
routerTo(e: any) { routerTo(e: any) {
const { url, pname } = e.currentTarget.dataset const { url } = e.currentTarget.dataset
if (pname) { wx.navigateTo({ url })
app.mpBehavior({ PageName: pname })
}
wx.navigateTo({
url,
})
}, },
}) })

32
src/pages/my/index.wxml

@ -1,18 +1,18 @@
<navbar fixed custom-style="background:{{background}}" back> <navbar fixed custom-style="background:{{background}}" back>
<image class="page-title" slot="left" src="/images/logo2.png"></image> <image class="page-title" slot="left" src="{{imageUrl}}logo2.png?t={{Timestamp}}"></image>
</navbar> </navbar>
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="user"> <view class="user">
<image class="avatar" mode="aspectFill" src="/images/bg1.png"></image> <image class="avatar" mode="aspectFill" src="{{userInfo.avatar || imageUrl + 'bg1.png'}}"></image>
<view class="wrap"> <view class="wrap">
<view class="name">张小山</view> <view class="name">{{userInfo.nickName || '用户'}}</view>
<view class="content"> <view class="content" wx:if="{{days}}">
星动守护您的第 星动守护您的第
<view class="high">15</view> <view class="high">{{days}}</view>
天~ 天~
</view> </view>
</view> </view>
@ -20,31 +20,31 @@
<view class="kkd"> <view class="kkd">
<view class="k-item"> <view class="k-item">
我的帖子 我的帖子
<image class="icon" src="/images/icon30.png"></image> <image class="icon" src="{{imageUrl}}icon30.png?t={{Timestamp}}"></image>
</view> </view>
<view class="k-item"> <view class="k-item">
健康档案 健康档案
<image class="icon" src="/images/icon31.png"></image> <image class="icon" src="{{imageUrl}}icon31.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="list"> <view class="list">
<view class="list-item"> <view class="list-item">
<image class="icon" src="/images/icon32.png"></image> <image class="icon" src="{{imageUrl}}icon32.png?t={{Timestamp}}"></image>
<view class="content">我的评论</view> <view class="content">我的评论</view>
<van-icon class="arrow" name="arrow" /> <van-icon class="arrow" name="arrow" />
</view> </view>
<view class="list-item"> <view class="list-item">
<image class="icon" src="/images/icon33.png"></image> <image class="icon" src="{{imageUrl}}icon33.png?t={{Timestamp}}"></image>
<view class="content">我的收藏</view> <view class="content">我的收藏</view>
<van-icon class="arrow" name="arrow" /> <van-icon class="arrow" name="arrow" />
</view> </view>
<view class="list-item"> <view class="list-item" bind:tap="routerTo" data-url="/pages/userInfo/index">
<image class="icon" src="/images/icon34.png"></image> <image class="icon" src="{{imageUrl}}icon34.png?t={{Timestamp}}"></image>
<view class="content">个人信息</view> <view class="content">个人信息</view>
<van-icon class="arrow" name="arrow" /> <van-icon class="arrow" name="arrow" />
</view> </view>
<view class="list-item"> <view class="list-item" bind:tap="routerTo" data-url="/doc/pages/doc/index">
<image class="icon" src="/images/icon35.png"></image> <image class="icon" src="{{imageUrl}}icon35.png?t={{Timestamp}}"></image>
<view class="content">隐私协议</view> <view class="content">隐私协议</view>
<van-icon class="arrow" name="arrow" /> <van-icon class="arrow" name="arrow" />
</view> </view>
@ -60,9 +60,9 @@
</view> </view>
<view class="content"> <view class="content">
长按识别二维码 长按识别二维码
<image class="icon" src="/images/icon36.png"></image> <image class="icon" src="{{imageUrl}}icon36.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<image class="code" src="/images/bg1.png" show-menu-by-longpress></image> <image class="code" src="{{imageUrl}}bg1.png?t={{Timestamp}}" show-menu-by-longpress></image>
</view> </view>
</view> </view>

1
src/pages/myCollection/index.ts

@ -27,7 +27,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

16
src/pages/myCollection/index.wxml

@ -5,10 +5,10 @@
</view> </view>
</navbar> </navbar>
<view class="page" style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx"> <view class="page" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx">
<view class="page-header" id="page-header" style="" style="padding-top: {{pageTop + 21}}px;"> <view class="page-header" id="page-header" style="" style="padding-top: {{pageTop + 21}}px;">
<view class="search"> <view class="search">
<image class="icon" src="/images/icon14.png"></image> <image class="icon" src="{{imageUrl}}icon14.png?t={{Timestamp}}"></image>
<input class="input" placeholder-class="place-input" type="text" placeholder="搜索视频" /> <input class="input" placeholder-class="place-input" type="text" placeholder="搜索视频" />
</view> </view>
</view> </view>
@ -31,14 +31,14 @@
<view class="body1"> <view class="body1">
<view class="card" wx:for="{{10}}" wx:key="index"> <view class="card" wx:for="{{10}}" wx:key="index">
<view class="photo"> <view class="photo">
<image class="p-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="p-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="stat"> <view class="stat">
<view class="s-item"> <view class="s-item">
<image class="icon" src="/images/icon8-1.png"></image> <image class="icon" src="{{imageUrl}}icon8-1.png?t={{Timestamp}}"></image>
12 12
</view> </view>
<view class="s-item"> <view class="s-item">
<image class="icon" src="/images/icon9-1.png"></image> <image class="icon" src="{{imageUrl}}icon9-1.png?t={{Timestamp}}"></image>
12 12
</view> </view>
</view> </view>
@ -51,10 +51,10 @@
<view class="body2"> <view class="body2">
<view class="list-card"> <view class="list-card">
<view class="photo-wrap"> <view class="photo-wrap">
<image class="photo" mode="aspectFill" src="/images/bg1.png"></image> <image class="photo" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<!-- <view class="type1">图文</view> --> <!-- <view class="type1">图文</view> -->
<view class="type2"> <view class="type2">
<image class="icon" src="/images/icon10.png"></image> <image class="icon" src="{{imageUrl}}icon10.png?t={{Timestamp}}"></image>
视频 视频
</view> </view>
</view> </view>
@ -62,7 +62,7 @@
<view class="title">什么是 PSVT?3 分钟带您了 解阵发性室上性心动过速</view> <view class="title">什么是 PSVT?3 分钟带您了 解阵发性室上性心动过速</view>
<view class="op-wrap"> <view class="op-wrap">
<view class="op"> <view class="op">
<image class="icon" src="/images/icon9-active.png"></image> <image class="icon" src="{{imageUrl}}icon9-active.png?t={{Timestamp}}"></image>
取消收藏 取消收藏
</view> </view>
</view> </view>

1
src/pages/myComment/index.ts

@ -19,7 +19,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

6
src/pages/myComment/index.wxml

@ -7,7 +7,7 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="list"> <view class="list">
<view class="list-card" bind:tap="handleDetail"> <view class="list-card" bind:tap="handleDetail">
@ -28,11 +28,11 @@
</view> </view>
</view> </view>
<view class="card-overlay"> <view class="card-overlay">
<image class="icon" src="/images/icon40.png"></image> <image class="icon" src="{{imageUrl}}icon40.png?t={{Timestamp}}"></image>
<view class="overlay-text">评论正在审核中,预计1-2个工作日内完成审核。</view> <view class="overlay-text">评论正在审核中,预计1-2个工作日内完成审核。</view>
</view> </view>
<view class="rejected"> <view class="rejected">
<image class="icon" src="/images/icon39.png"></image> <image class="icon" src="{{imageUrl}}icon39.png?t={{Timestamp}}"></image>
<view class="blod">驳回原因:</view> <view class="blod">驳回原因:</view>
语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当
语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当

1
src/pages/myWall/index.ts

@ -19,7 +19,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

10
src/pages/myWall/index.wxml

@ -7,7 +7,7 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="list"> <view class="list">
<view class="list-card" bind:tap="handleDetail"> <view class="list-card" bind:tap="handleDetail">
@ -22,23 +22,23 @@
<view class="tag" wx:for="{{4}}" wx:key="index">患者故事</view> <view class="tag" wx:for="{{4}}" wx:key="index">患者故事</view>
</view> </view>
<!-- 单图 --> <!-- 单图 -->
<image class="photo1" mode="heightFix" src="/images/bg1.png"></image> <image class="photo1" mode="heightFix" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<!-- 多图 --> <!-- 多图 -->
<view class="photo9"> <view class="photo9">
<view class="p-item" wx:for="{{3}}" wx:key="index"> <view class="p-item" wx:for="{{3}}" wx:key="index">
<image class="p-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="p-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="date">2026年7月1日 13:09</view> <view class="date">2026年7月1日 13:09</view>
<view class="rejected"> <view class="rejected">
<image class="icon" src="/images/icon39.png"></image> <image class="icon" src="{{imageUrl}}icon39.png?t={{Timestamp}}"></image>
<view class="blod">驳回原因:</view> <view class="blod">驳回原因:</view>
语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当
语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当 语言不当
</view> </view>
<view class="footer"> <view class="footer">
<view class="public"> <view class="public">
<image class="icon" src="/images/icon37.png"></image> <image class="icon" src="{{imageUrl}}icon37.png?t={{Timestamp}}"></image>
公开可见 公开可见
</view> </view>
<view class="btn-wrap"> <view class="btn-wrap">

7
src/pages/userInfo/index.json

@ -1,10 +1,9 @@
{ {
"navigationStyle": "custom", "navigationStyle": "custom",
"navigationBarTitleText": "我的评论", "navigationBarTitleText": "个人信息",
"usingComponents": { "usingComponents": {
"popup": "/components/popup/index",
"navbar": "/components/navbar/index", "navbar": "/components/navbar/index",
"uploadFile": "/components/uploadFile/index", "picker-area": "/components/pickerArea/index",
"van-popup": "@vant/weapp/popup/index" "van-icon": "@vant/weapp/icon/index"
} }
} }

18
src/pages/userInfo/index.scss

@ -21,7 +21,6 @@ page {
.info-row { .info-row {
display: flex; display: flex;
align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 24rpx 0; padding: 24rpx 0;
border-bottom: 1rpx solid #f1f5f9; border-bottom: 1rpx solid #f1f5f9;
@ -38,6 +37,16 @@ page {
.info-value { .info-value {
flex: 1; flex: 1;
padding-left: 24rpx;
font-size: 32rpx;
line-height: 48rpx;
color: #64748b;
text-align: right;
}
.info-input {
flex: 1;
padding-left: 24rpx;
font-size: 32rpx; font-size: 32rpx;
line-height: 48rpx; line-height: 48rpx;
color: #64748b; color: #64748b;
@ -46,15 +55,20 @@ page {
.info-arrow { .info-arrow {
color: #64748b; color: #64748b;
margin-top: 4rpx;
margin-left: 8rpx; margin-left: 8rpx;
} }
.avatar-wrap { .avatar-wrapper {
width: 112rpx; width: 112rpx;
height: 112rpx; height: 112rpx;
border-radius: 50%; border-radius: 50%;
background: #d9d9d9; background: #d9d9d9;
overflow: hidden; overflow: hidden;
padding: 0;
margin: 0;
border: none;
line-height: normal;
.avatar { .avatar {
width: 100%; width: 100%;

235
src/pages/userInfo/index.ts

@ -1,101 +1,204 @@
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
interface OptionItem {
value: number
label: string
}
const parseList = (list: any): OptionItem[] => {
if (Array.isArray(list)) {
return list.map((item) => {
const key = Object.keys(item)[0]
return { value: Number(key), label: item[key] }
})
}
if (list && typeof list === 'object') {
return Object.keys(list).map((key) => ({
value: Number(key),
label: list[key],
}))
}
return []
}
Page({ Page({
data: { data: {
popupShow: false, // 用户信息 (from API 1.4)
popupType: '', userInfo: {} as any,
popupParams: {
position: 'bottom',
} as any,
topicShow: false, // 基础数据列表 (from API 1.7)
replayShow: true, ageRangeList: [] as OptionItem[],
genderList: [] as OptionItem[],
diagnosisStatusList: [] as OptionItem[],
surgeryStatusList: [] as OptionItem[],
fileList: [] as any[], // picker 索引
ageRangeIndex: 0,
genderIndex: 0,
// 地区
provinceId: '' as string | number,
provinceName: '',
cityId: '' as string | number,
cityName: '',
regionText: '',
currentMonth: '',
}, },
onLoad() { onLoad() {
app.waitLogin({ type: 0 }).then(() => {}) const now = new Date()
const currentMonth = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`
this.setData({ currentMonth })
this.getBaseData().then(() => {
this.getMyInfo()
})
}, },
handlePopupOk() { getMyInfo() {
const { popupType } = this.data
if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'GET',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=psvt/patient/my-info',
data: { }).then((res) => {
WorkerId: app.globalData.scene?.workerId || '', this.enrichUserInfo(res)
})
}, },
}).then(() => { enrichUserInfo(info: any) {
info.ageRangeName = this.getLabel(this.data.ageRangeList, info.ageRange)
info.genderName = this.getLabel(this.data.genderList, info.gender)
info.diagnosisStatusName = this.getLabel(this.data.diagnosisStatusList, info.diagnosisStatus)
info.surgeryStatusName = this.getLabel(this.data.surgeryStatusList, info.surgeryStatus)
const regionText = [info.provinceName, info.cityName].filter(Boolean).join(' ')
const ageRangeIndex = this.getIndex(this.data.ageRangeList, info.ageRange)
const genderIndex = this.getIndex(this.data.genderList, info.gender)
this.setData({ this.setData({
popupShow: false, userInfo: info,
popupType: '', ageRangeIndex,
popupParams: {}, genderIndex,
provinceId: info.provinceId || '',
provinceName: info.provinceName || '',
cityId: info.cityId || '',
cityName: info.cityName || '',
regionText,
}) })
const waitBindDoctorId = app.globalData.waitBindDoctorId },
if (waitBindDoctorId) { getBaseData() {
this.handleBindDoctor(waitBindDoctorId) return wx
} .ajax({
method: 'GET',
url: '?r=psvt/patient/base-data',
}) })
} .then((res) => {
if (popupType === 'conformBindDoctorConform') {
this.setData({ this.setData({
popupShow: false, ageRangeList: parseList(res.ageRangeList),
genderList: parseList(res.genderList),
diagnosisStatusList: parseList(res.diagnosisStatusList),
surgeryStatusList: parseList(res.surgeryStatusList),
}) })
})
},
getLabel(list: OptionItem[], value: number): string {
const item = list.find((i) => i.value === value)
return item ? item.label : ''
},
getIndex(list: OptionItem[], value: number): number {
const index = list.findIndex((i) => i.value === value)
return index >= 0 ? index : 0
},
onChooseAvatar(e: WechatMiniprogram.CustomEvent) {
const { avatarUrl } = e.detail
const url = `${app.globalData.upFileUrl}?r=file-service/upload-img`
wx.showLoading({ title: '上传中' })
wx.uploadFile({
url,
filePath: avatarUrl,
name: 'file',
success: (res) => {
const data = JSON.parse(res.data)
const uploadedUrl = data.data.Url
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/account/wait-bind-doctor', url: '?r=psvt/patient/update-my-info',
data: { data: { avatar: uploadedUrl },
doctorId: app.globalData.waitBindDoctorId,
},
}).then(() => {
wx.navigateTo({
url: `/patient/pages/login/index`,
}) })
.then(() => {
wx.hideLoading()
wx.showToast({ title: '头像更新成功!', icon: 'none' })
this.setData({ 'userInfo.avatar': uploadedUrl })
})
.catch(() => {
wx.hideLoading()
}) })
}
}, },
handlePopupCancel() { fail() {
const { popupType } = this.data wx.hideLoading()
if (popupType === 'argument') { },
wx.exitMiniProgram() })
} },
if (popupType === 'conformBindDoctorConform') { handleNickNameChange(e: WechatMiniprogram.Input) {
const nickName = e.detail.value.trim()
if (!nickName || nickName === this.data.userInfo.nickName) return
this.submitUpdate({ nickName })
},
// picker 选择
handleAgeChange(e: WechatMiniprogram.PickerChange) {
const index = Number(e.detail.value)
const item = this.data.ageRangeList[index]
if (!item || item.value === this.data.userInfo.ageRange) return
this.submitUpdate({ ageRange: item.value })
},
handleGenderChange(e: WechatMiniprogram.PickerChange) {
const index = Number(e.detail.value)
const item = this.data.genderList[index]
if (!item || item.value === this.data.userInfo.gender) return
this.submitUpdate({ gender: item.value })
},
handleAreaChange(e: any) {
const [province, city] = e.detail
const provinceId = province.value ? Number(province.value) : ''
const cityId = city.value ? Number(city.value) : ''
this.setData({ this.setData({
popupShow: false, provinceId,
provinceName: province.label,
cityId,
cityName: city.label,
regionText: [province.label, city.label].filter(Boolean).join(' '),
})
this.submitUpdate({
provinceId,
provinceName: province.label,
cityId,
cityName: city.label,
}) })
},
submitUpdate(data: Record<string, any>) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/account/wait-bind-doctor', url: '?r=psvt/patient/update-my-info',
data: { data,
doctorId: app.globalData.waitBindDoctorId, loading: true,
}, loadingText: '保存中...',
}).then(() => { }).then((res) => {
app.globalData.waitBindDoctorId = '' this.enrichUserInfo(res)
wx.showToast({ title: '保存成功', icon: 'none' })
}) })
}
}, },
handleWechatWork() { handleChangeTel() {
wx.navigateTo({ wx.navigateTo({
url: '/pages/wechatWork/index', url: '/pages/changeTel/index',
}) })
}, },
handleSetData(e) { handleBack() {
const { fileList } = this.data wx.navigateBack()
this.setData({
fileList: [...fileList, ...e.detail],
})
}, },
handleDeleteFile(e) { handleLogout() {
const { index } = e.detail wx.showModal({
const { fileList } = this.data title: '提示',
this.setData({ content: '确定退出登录吗?',
fileList: fileList.filter((_, i) => i !== index), success: (res) => {
}) if (res.confirm) {
app.globalData.loginState = ''
app.globalData.initLoginInfo = {}
wx.reLaunch({ url: '/pages/login/index' })
}
}, },
topicClose() {
this.setData({
topicShow: false,
}) })
}, },
}) })

58
src/pages/userInfo/index.wxml

@ -1,5 +1,5 @@
<navbar fixed custom-style="background:{{background}}" back> <navbar fixed custom-style="background:{{background}}" back>
<view class="page-title" slot="left"> <view class="page-title" slot="left" bind:tap="handleBack">
<van-icon name="arrow-left" /> <van-icon name="arrow-left" />
个人信息 个人信息
</view> </view>
@ -7,54 +7,72 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="list"> <view class="list">
<view class="info-card"> <view class="info-card">
<view class="info-row"> <view class="info-row">
<text class="info-label">头像</text> <text class="info-label">头像</text>
<view class="avatar-wrap"> <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
<image class="avatar" src="" mode="aspectFill" /> <image class="avatar" src="{{userInfo.avatar || ''}}" mode="aspectFill" />
</view> </button>
</view> </view>
<view class="info-row"> <view class="info-row">
<text class="info-label">昵称</text> <text class="info-label">昵称</text>
<text class="info-value">ZSX0092</text> <input
class="info-input"
value="{{userInfo.nickName || ''}}"
bindblur="handleNickNameChange"
placeholder="请输入昵称"
/>
</view> </view>
<view class="info-row" bind:tap="handlePhone"> <view class="info-row" bind:tap="handleChangeTel">
<text class="info-label">手机号</text> <text class="info-label">手机号</text>
<text class="info-value">153****0000</text> <text class="info-value">{{userInfo.telephone || ''}}</text>
<van-icon name="arrow" class="info-arrow" /> <van-icon name="arrow" class="info-arrow" />
</view> </view>
<view class="info-row" bind:tap="handleAge"> <picker range="{{ageRangeList}}" range-key="label" value="{{ageRangeIndex}}" bindchange="handleAgeChange">
<view class="info-row">
<text class="info-label">年龄段</text> <text class="info-label">年龄段</text>
<text class="info-value">18-35岁</text> <text class="info-value">{{userInfo.ageRangeName || ''}}</text>
<van-icon name="arrow" class="info-arrow" /> <van-icon name="arrow" class="info-arrow" />
</view> </view>
<view class="info-row" bind:tap="handleGender"> </picker>
<picker range="{{genderList}}" range-key="label" value="{{genderIndex}}" bindchange="handleGenderChange">
<view class="info-row">
<text class="info-label">性别</text> <text class="info-label">性别</text>
<text class="info-value">女</text> <text class="info-value">{{userInfo.genderName || ''}}</text>
<van-icon name="arrow" class="info-arrow" /> <van-icon name="arrow" class="info-arrow" />
</view> </view>
<view class="info-row" bind:tap="handleRegion"> </picker>
<picker-area
id="pickerArea"
pname="{{provinceName}}"
pid="{{provinceId}}"
cname="{{cityName}}"
cid="{{cityId}}"
bind:change="handleAreaChange"
>
<view class="info-row">
<text class="info-label">所在地区</text> <text class="info-label">所在地区</text>
<text class="info-value">北京/北京市</text> <text class="info-value">{{regionText || ''}}</text>
<van-icon name="arrow" class="info-arrow" /> <van-icon name="arrow" class="info-arrow" />
</view> </view>
<view class="info-row" bind:tap="handleHealth"> </picker-area>
<view class="info-row">
<text class="info-label">我的健康状态</text> <text class="info-label">我的健康状态</text>
<text class="info-value">已确诊</text> <text class="info-value">{{userInfo.diagnosisStatusName || ''}}</text>
</view> </view>
<view class="info-row"> <view class="info-row" wx:if="{{userInfo.diagnosisStatus === 2}}">
<text class="info-label">确诊时间</text> <text class="info-label">确诊时间</text>
<text class="info-value">2024-08-01</text> <text class="info-value">{{userInfo.diagnosisTime || ''}}</text>
</view> </view>
<view class="info-row"> <view class="info-row">
<text class="info-label">是否接受过手术治疗</text> <text class="info-label">是否接受过手术治疗</text>
<text class="info-value">正在评估</text> <text class="info-value">{{userInfo.surgeryStatusName || ''}}</text>
</view> </view>
</view> </view>
<view class="btn-logout">退出登录</view> <view class="btn-logout" bind:tap="handleLogout">退出登录</view>
<view class="btn-cancel">注销</view> <view class="btn-cancel">注销</view>
</view> </view>
</view> </view>

8
src/pages/videoDetail/index.wxml

@ -60,19 +60,19 @@
<view class="container"> <view class="container">
<view class="op-wrap"> <view class="op-wrap">
<view class="op"> <view class="op">
<image class="icon" src="/images/icon9-1.png"></image> <image class="icon" src="{{imageUrl}}icon9-1.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon8-1.png"></image> <image class="icon" src="{{imageUrl}}icon8-1.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon28-1.png"></image> <image class="icon" src="{{imageUrl}}icon28-1.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon29-1.png"></image> <image class="icon" src="{{imageUrl}}icon29-1.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
</view> </view>

1
src/pages/videoList/index.ts

@ -14,7 +14,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

12
src/pages/videoList/index.wxml

@ -1,14 +1,14 @@
<navbar fixed custom-style="background:{{background}}" back> <navbar fixed custom-style="background:{{background}}" back>
<image class="page-title" slot="left" src="/images/logo2.png"></image> <image class="page-title" slot="left" src="{{imageUrl}}logo2.png?t={{Timestamp}}"></image>
</navbar> </navbar>
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="page-header"> <view class="page-header">
<view class="search"> <view class="search">
<image class="icon" src="/images/icon14.png"></image> <image class="icon" src="{{imageUrl}}icon14.png?t={{Timestamp}}"></image>
<input class="input" placeholder-class="place-input" type="text" placeholder="搜索帖子 / 话题 / 患者故事" /> <input class="input" placeholder-class="place-input" type="text" placeholder="搜索帖子 / 话题 / 患者故事" />
</view> </view>
</view> </view>
@ -18,14 +18,14 @@
<view class="list"> <view class="list">
<view class="card" wx:for="{{4}}" wx:key="index"> <view class="card" wx:for="{{4}}" wx:key="index">
<view class="photo"> <view class="photo">
<image class="p-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="p-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="stat"> <view class="stat">
<view class="s-item"> <view class="s-item">
<image class="icon" src="/images/icon8-1.png"></image> <image class="icon" src="{{imageUrl}}icon8-1.png?t={{Timestamp}}"></image>
12 12
</view> </view>
<view class="s-item"> <view class="s-item">
<image class="icon" src="/images/icon9-1.png"></image> <image class="icon" src="{{imageUrl}}icon9-1.png?t={{Timestamp}}"></image>
12 12
</view> </view>
</view> </view>

1
src/pages/wall/index.ts

@ -14,7 +14,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

22
src/pages/wall/index.wxml

@ -1,14 +1,14 @@
<navbar fixed custom-style="background:{{background}}" back> <navbar fixed custom-style="background:{{background}}" back>
<image class="page-title" slot="left" src="/images/logo2.png"></image> <image class="page-title" slot="left" src="{{imageUrl}}logo2.png?t={{Timestamp}}"></image>
</navbar> </navbar>
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="page-header"> <view class="page-header">
<view class="search"> <view class="search">
<image class="icon" src="/images/icon14.png"></image> <image class="icon" src="{{imageUrl}}icon14.png?t={{Timestamp}}"></image>
<input class="input" placeholder-class="place-input" type="text" placeholder="搜索帖子 / 话题 / 患者故事" /> <input class="input" placeholder-class="place-input" type="text" placeholder="搜索帖子 / 话题 / 患者故事" />
</view> </view>
</view> </view>
@ -33,13 +33,13 @@
<view class="list"> <view class="list">
<view class="list-card" bind:tap="handleDetail"> <view class="list-card" bind:tap="handleDetail">
<view class="user"> <view class="user">
<image class="avatar" mode="aspectFill" src="/images/bg1.png"></image> <image class="avatar" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="name">@林间心跳</view> <view class="name">@林间心跳</view>
<view class="date">2026年7月1日 13:09</view> <view class="date">2026年7月1日 13:09</view>
</view> </view>
</view> </view>
<view class="hot" style="background: url('/images/bg11.png') no-repeat top center/100%">热门推荐</view> <view class="hot" style="background: url('{{imageUrl}}bg11.png?t={{Timestamp}}') no-repeat top center/100%">热门推荐</view>
<view class="content"> <view class="content">
<view class="c-topic">#我的心悸经历</view> <view class="c-topic">#我的心悸经历</view>
<view class="c-topic">#PSVT急救常识</view> <view class="c-topic">#PSVT急救常识</view>
@ -49,11 +49,11 @@
<view class="tag" wx:for="{{4}}" wx:key="index">患者故事</view> <view class="tag" wx:for="{{4}}" wx:key="index">患者故事</view>
</view> </view>
<!-- 单图 --> <!-- 单图 -->
<image class="photo1" mode="heightFix" src="/images/bg1.png"></image> <image class="photo1" mode="heightFix" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<!-- 多图 --> <!-- 多图 -->
<view class="photo9"> <view class="photo9">
<view class="p-item" wx:for="{{3}}" wx:key="index"> <view class="p-item" wx:for="{{3}}" wx:key="index">
<image class="p-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="p-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="comment"> <view class="comment">
@ -62,15 +62,15 @@
</view> </view>
<view class="footer"> <view class="footer">
<view class="op"> <view class="op">
<image class="icon" src="/images/icon9.png"></image> <image class="icon" src="{{imageUrl}}icon9.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon8.png"></image> <image class="icon" src="{{imageUrl}}icon8.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon15.png"></image> <image class="icon" src="{{imageUrl}}icon15.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
</view> </view>
@ -79,5 +79,5 @@
</view> </view>
<view class="fixed-add"> <view class="fixed-add">
<image class="icon" src="/images/icon24.png"></image> <image class="icon" src="{{imageUrl}}icon24.png?t={{Timestamp}}"></image>
</view> </view>

1
src/pages/wallDetail/index.ts

@ -18,7 +18,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

34
src/pages/wallDetail/index.wxml

@ -7,11 +7,11 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="info-card"> <view class="info-card">
<view class="user"> <view class="user">
<image class="avatar" mode="aspectFill" src="/images/bg1.png"></image> <image class="avatar" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="name">@林间心跳</view> <view class="name">@林间心跳</view>
<view class="date">2026年7月1日 13:09</view> <view class="date">2026年7月1日 13:09</view>
@ -26,11 +26,11 @@
<view class="tag" wx:for="{{4}}" wx:key="index">患者故事</view> <view class="tag" wx:for="{{4}}" wx:key="index">患者故事</view>
</view> </view>
<!-- 单图 --> <!-- 单图 -->
<image class="photo1" mode="heightFix" src="/images/bg1.png"></image> <image class="photo1" mode="heightFix" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<!-- 多图 --> <!-- 多图 -->
<view class="photo9"> <view class="photo9">
<view class="p-item" wx:for="{{3}}" wx:key="index"> <view class="p-item" wx:for="{{3}}" wx:key="index">
<image class="p-img" mode="aspectFill" src="/images/bg1.png"></image> <image class="p-img" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="comment"> <view class="comment">
@ -47,7 +47,7 @@
<view class="list"> <view class="list">
<view class="list-card"> <view class="list-card">
<view class="comment-item"> <view class="comment-item">
<image class="avatar" mode="aspectFill" src="/images/bg1.png"></image> <image class="avatar" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="w-header"> <view class="w-header">
<view class="name">小鹿</view> <view class="name">小鹿</view>
@ -56,11 +56,11 @@
<view class="content">我也是,复诊前先整理记录,医生会更容易</view> <view class="content">我也是,复诊前先整理记录,医生会更容易</view>
<view class="op-wrap"> <view class="op-wrap">
<view class="op"> <view class="op">
<image class="icon" src="/images/icon9.png"></image> <image class="icon" src="{{imageUrl}}icon9.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon15.png"></image> <image class="icon" src="{{imageUrl}}icon15.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
</view> </view>
@ -68,7 +68,7 @@
</view> </view>
<view class="replay-list"> <view class="replay-list">
<view class="comment-item"> <view class="comment-item">
<image class="avatar" mode="aspectFill" src="/images/bg1.png"></image> <image class="avatar" mode="aspectFill" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="w-header"> <view class="w-header">
<view class="name">小鹿</view> <view class="name">小鹿</view>
@ -80,11 +80,11 @@
</view> </view>
<view class="op-wrap"> <view class="op-wrap">
<view class="op"> <view class="op">
<image class="icon" src="/images/icon9.png"></image> <image class="icon" src="{{imageUrl}}icon9.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon15.png"></image> <image class="icon" src="{{imageUrl}}icon15.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
</view> </view>
@ -102,7 +102,7 @@
<view class="page-footer"> <view class="page-footer">
<view class="auth" wx:if="{{false}}"> <view class="auth" wx:if="{{false}}">
<image class="icon" mode="widthFix" src="/images/icon37.png"></image> <image class="icon" mode="widthFix" src="{{imageUrl}}icon37.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="status">公开可见</view> <view class="status">公开可见</view>
<view class="content"> <view class="content">
@ -112,7 +112,7 @@
</view> </view>
</view> </view>
<view class="auth" wx:elif="{{false}}"> <view class="auth" wx:elif="{{false}}">
<image class="icon" mode="widthFix" src="/images/icon22.png"></image> <image class="icon" mode="widthFix" src="{{imageUrl}}icon22.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="status">仅自己可见</view> <view class="status">仅自己可见</view>
<view class="content"> <view class="content">
@ -124,15 +124,15 @@
<view class="comment" wx:else>我要评论</view> <view class="comment" wx:else>我要评论</view>
<view class="op-wrap"> <view class="op-wrap">
<view class="op"> <view class="op">
<image class="icon" src="/images/icon9.png"></image> <image class="icon" src="{{imageUrl}}icon9.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon8.png"></image> <image class="icon" src="{{imageUrl}}icon8.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
<view class="op"> <view class="op">
<image class="icon" src="/images/icon15.png"></image> <image class="icon" src="{{imageUrl}}icon15.png?t={{Timestamp}}"></image>
<view class="num">126</view> <view class="num">126</view>
</view> </view>
</view> </view>
@ -180,11 +180,11 @@
<view class="action-popup"> <view class="action-popup">
<view class="a-list"> <view class="a-list">
<view class="row"> <view class="row">
<image class="icon" src="/images/icon41.png"></image> <image class="icon" src="{{imageUrl}}icon41.png?t={{Timestamp}}"></image>
编辑 编辑
</view> </view>
<view class="row"> <view class="row">
<image class="icon" src="/images/icon42.png"></image> <image class="icon" src="{{imageUrl}}icon42.png?t={{Timestamp}}"></image>
删除 删除
</view> </view>
</view> </view>

1
src/pages/wallForm/index.ts

@ -19,7 +19,6 @@ Page({
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType === 'argument') { if (popupType === 'argument') {
app.mpBehavior({ PageName: 'BTN_PATIENTLOG' })
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=wtx/user/agree-guest-privacy', url: '?r=wtx/user/agree-guest-privacy',

18
src/pages/wallForm/index.wxml

@ -7,7 +7,7 @@
<view <view
class="page" class="page"
style="background: url('/images/bg6.png') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;"
> >
<view class="form"> <view class="form">
<view class="upload-wrap"> <view class="upload-wrap">
@ -22,13 +22,13 @@
></textarea> ></textarea>
<view class="topic-list"> <view class="topic-list">
<view class="t-item" wx:for="{{5}}" wx:key="index"> <view class="t-item" wx:for="{{5}}" wx:key="index">
<image class="icon" src="/images/icon18.png"></image> <image class="icon" src="{{imageUrl}}icon18.png?t={{Timestamp}}"></image>
我的心悸经历 我的心悸经历
</view> </view>
</view> </view>
<view class="wrap"> <view class="wrap">
<view class="topic-btn"> <view class="topic-btn">
<image class="icon" src="/images/icon18.png"></image> <image class="icon" src="{{imageUrl}}icon18.png?t={{Timestamp}}"></image>
话题 话题
</view> </view>
<view class="total">0/2000</view> <view class="total">0/2000</view>
@ -36,7 +36,7 @@
</view> </view>
<view class="tag-module"> <view class="tag-module">
<view class="t-header"> <view class="t-header">
<image class="icon" src="/images/icon19.png"></image> <image class="icon" src="{{imageUrl}}icon19.png?t={{Timestamp}}"></image>
内容标签 内容标签
</view> </view>
<view class="tag-wrap"> <view class="tag-wrap">
@ -45,19 +45,19 @@
</view> </view>
<view class="view-module"> <view class="view-module">
<view class="v-header"> <view class="v-header">
<image class="icon" src="/images/icon20.png"></image> <image class="icon" src="{{imageUrl}}icon20.png?t={{Timestamp}}"></image>
谁可以看 谁可以看
</view> </view>
<view class="v-wrap"> <view class="v-wrap">
<view class="item active"> <view class="item active">
<image class="icon" src="/images/icon21.png"></image> <image class="icon" src="{{imageUrl}}icon21.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="name">公开</view> <view class="name">公开</view>
<view class="content">所有用户可见</view> <view class="content">所有用户可见</view>
</view> </view>
</view> </view>
<view class="item"> <view class="item">
<image class="icon" src="/images/icon22.png"></image> <image class="icon" src="{{imageUrl}}icon22.png?t={{Timestamp}}"></image>
<view class="wrap"> <view class="wrap">
<view class="name">私密</view> <view class="name">私密</view>
<view class="content">仅自己可见</view> <view class="content">仅自己可见</view>
@ -67,11 +67,11 @@
</view> </view>
<view class="page-footer"> <view class="page-footer">
<view class="cancel"> <view class="cancel">
<image class="icon" src="/images/icon26.png"></image> <image class="icon" src="{{imageUrl}}icon26.png?t={{Timestamp}}"></image>
存草稿 存草稿
</view> </view>
<view class="send"> <view class="send">
<image class="icon" src="/images/icon27.png"></image> <image class="icon" src="{{imageUrl}}icon27.png?t={{Timestamp}}"></image>
发布 发布
</view> </view>
</view> </view>

16
src/pages/wechatWork/index.wxml

@ -1,17 +1,17 @@
<navbar fixed custom-style="background:{{background}}" back> <navbar fixed custom-style="background:{{background}}" back>
<image class="page-title" slot="left" src="/images/logo2.png"></image> <image class="page-title" slot="left" src="{{imageUrl}}logo2.png?t={{Timestamp}}"></image>
</navbar> </navbar>
<view class="page" style="background: url('/images/bg6.png') no-repeat top center/100%;padding-top: {{pageTop}}rpx;"> <view class="page" style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100%;padding-top: {{pageTop}}rpx;">
<view class="container" style="background: url('/images/bg7.png') no-repeat top center/100%"> <view class="container" style="background: url('{{imageUrl}}bg7.png?t={{Timestamp}}') no-repeat top center/100%">
<view class="title"> <view class="title">
<image class="icon1" src="/images/icon13.png"></image> <image class="icon1" src="{{imageUrl}}icon13.png?t={{Timestamp}}"></image>
添加你的专属客服 添加你的专属客服
<image class="icon2" src="/images/icon13.png"></image> <image class="icon2" src="{{imageUrl}}icon13.png?t={{Timestamp}}"></image>
</view> </view>
<view class="code-wrap" style="background: url('/images/bg8.png') no-repeat top center/100%"> <view class="code-wrap" style="background: url('{{imageUrl}}bg8.png?t={{Timestamp}}') no-repeat top center/100%">
<image class="code" src="/images/bg1.png" show-menu-by-longpress></image> <image class="code" src="{{imageUrl}}bg1.png?t={{Timestamp}}" show-menu-by-longpress></image>
</view> </view>
<view class="btn" style="background: url('/images/btn1.png') no-repeat top center/100%">长按识别二维码</view> <view class="btn" style="background: url('{{imageUrl}}btn1.png?t={{Timestamp}}') no-repeat top center/100%">长按识别二维码</view>
</view> </view>
</view> </view>

Loading…
Cancel
Save