Compare commits

...

5 Commits

  1. 28
      eslint.config.js
  2. 28
      eslint.config.mjs
  3. 8
      package.json
  4. 2596
      pnpm-lock.yaml
  5. 2
      project.private.config.json
  6. 48
      src/app.ts
  7. 11
      src/components/popup/index.scss
  8. 3
      src/components/popup/index.wxml
  9. BIN
      src/images/bg32.png
  10. BIN
      src/images/icon87.png
  11. BIN
      src/images/za-images/live-banner.png
  12. 2
      src/pages/d_patient/index.wxml
  13. 39
      src/pages/start/index.ts
  14. 2
      src/patient/pages/index/index.scss
  15. 45
      src/patient/pages/index/index.ts
  16. 15
      src/patient/pages/index/index.wxml
  17. 95
      src/patient/pages/liveDetail/index.ts
  18. 15
      src/patient/pages/liveDetail/index.wxml
  19. 19
      src/patient/pages/liveDetailVideo/index.scss
  20. 98
      src/patient/pages/liveDetailVideo/index.ts
  21. 32
      src/patient/pages/liveDetailVideo/index.wxml
  22. 18
      src/patient/pages/liveResult/index.ts
  23. 2
      src/patient/pages/liveResult/index.wxml
  24. 8
      src/patient/pages/personalInformation/index.scss
  25. 36
      src/patient/pages/personalInformation/index.ts
  26. 10
      src/patient/pages/personalInformation/index.wxml
  27. 2
      typings/index.d.ts

28
eslint.config.js

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

28
eslint.config.mjs

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

8
package.json

@ -18,10 +18,10 @@
"typescript": "^5.3.3" "typescript": "^5.3.3"
}, },
"devDependencies": { "devDependencies": {
"@antfu/eslint-config": "^3.7.3", "@antfu/eslint-config": "^6.2.0",
"eslint": "^9.12.0", "eslint": "^9.38.0",
"eslint-config-prettier": "^9.1.0", "eslint-plugin-format": "^1.0.2",
"miniprogram-api-typings": "^4.0.1", "miniprogram-api-typings": "^4.1.0",
"prettier": "3.3.3" "prettier": "3.3.3"
} }
} }

2596
pnpm-lock.yaml

File diff suppressed because it is too large Load Diff

2
project.private.config.json

@ -3,7 +3,7 @@
"projectname": "xinda-miniprogram", "projectname": "xinda-miniprogram",
"setting": { "setting": {
"compileHotReLoad": true, "compileHotReLoad": true,
"urlCheck": true, "urlCheck": false,
"coverView": false, "coverView": false,
"lazyloadPlaceholderEnable": false, "lazyloadPlaceholderEnable": false,
"skylineRenderEnable": true, "skylineRenderEnable": true,

48
src/app.ts

@ -1,10 +1,10 @@
import dayjs from 'dayjs'
import licia from 'miniprogram-licia'
import component from '@/utils/component' import component from '@/utils/component'
import relativeTime from '@/utils/dayjs/relativeTime.js' import relativeTime from '@/utils/dayjs/relativeTime.js'
import page from '@/utils/page' import page from '@/utils/page'
import { request } from '@/utils/request' import { request } from '@/utils/request'
import { parseScene } from './utils/util' import { parseScene } from './utils/util'
const dayjs = require('dayjs')
const licia = require('miniprogram-licia')
require('/utils/dayjs/day-zh-cn.js') require('/utils/dayjs/day-zh-cn.js')
@ -97,6 +97,11 @@ App<IAppOption>({
99: '取消', 99: '取消',
100: '已删除', 100: '已删除',
}, },
liveSubscribe: {
sub: false,
tmplIds: [],
},
}, },
onLaunch() { onLaunch() {
Page = page as WechatMiniprogram.Page.Constructor Page = page as WechatMiniprogram.Page.Constructor
@ -114,7 +119,8 @@ App<IAppOption>({
onShow(options) { onShow(options) {
if (options.query.scene) { if (options.query.scene) {
this.globalData.scene = parseScene(options.query.scene) this.globalData.scene = parseScene(options.query.scene)
} else if (options.query.proMethodId) { }
else if (options.query.proMethodId) {
this.globalData.scene.proMethodId = options.query.proMethodId this.globalData.scene.proMethodId = options.query.proMethodId
} }
}, },
@ -235,7 +241,7 @@ App<IAppOption>({
data: {}, data: {},
}) as Promise<never> }) as Promise<never>
}, },
mpBehavior(data: { doctor?: boolean; PageName: string }) { mpBehavior(data: { doctor?: boolean, PageName: string }) {
let url = '?r=zd/mp-behavior/add' let url = '?r=zd/mp-behavior/add'
if (data.doctor) { if (data.doctor) {
url = '?r=zd/doctor/mp-behavior/add' url = '?r=zd/doctor/mp-behavior/add'
@ -267,9 +273,10 @@ App<IAppOption>({
}) })
}, },
// zd相关函数 // zd相关函数
zdMpBehavior(data: { PageName: string; doctor?: boolean }) { zdMpBehavior(data: { PageName: string, doctor?: boolean }) {
const { loginType } = this.globalData const { loginType } = this.globalData
if (loginType === 0) return if (loginType === 0)
return
let url = '?r=zd/mp-behavior/add' let url = '?r=zd/mp-behavior/add'
if (data.doctor) { if (data.doctor) {
url = '?r=zd/doctor/mp-behavior/add' url = '?r=zd/doctor/mp-behavior/add'
@ -296,13 +303,15 @@ App<IAppOption>({
if (this.zdVerifySys(pub)) { if (this.zdVerifySys(pub)) {
if (this.globalData.loginType === 1) { if (this.globalData.loginType === 1) {
this.zdRegistrationVerification(() => resolve(), loginPage) this.zdRegistrationVerification(() => resolve(), loginPage)
} else { }
else {
resolve() resolve()
} }
} }
} }
const unRegFun = (resolve) => { const unRegFun = (resolve) => {
if (!this.zdVerifySys(pub)) return if (!this.zdVerifySys(pub))
return
resolve() resolve()
} }
return new Promise((resolve: (value?) => void) => { return new Promise((resolve: (value?) => void) => {
@ -360,11 +369,14 @@ App<IAppOption>({
let urlKey = '' let urlKey = ''
if (!PatientId) { if (!PatientId) {
urlKey = 'enterInfo' urlKey = 'enterInfo'
} else if (AuditStatus == 0) { }
else if (AuditStatus == 0) {
urlKey = 'noCert' urlKey = 'noCert'
} else if (AuditStatus == 1) { }
else if (AuditStatus == 1) {
urlKey = isFollow ? 'nopending' : 'pending' urlKey = isFollow ? 'nopending' : 'pending'
} else if (AuditStatus == 2) { }
else if (AuditStatus == 2) {
urlKey = 'reject' urlKey = 'reject'
} }
const navUrl = { const navUrl = {
@ -415,7 +427,8 @@ App<IAppOption>({
}) })
return false return false
} }
if (ignorePath.includes(url)) return true if (ignorePath.includes(url))
return true
if (loginType === 1) { if (loginType === 1) {
if (url.includes('doctor/pages')) { if (url.includes('doctor/pages')) {
@ -423,14 +436,16 @@ App<IAppOption>({
url: '/pages/index/index', url: '/pages/index/index',
}) })
return false return false
} else { }
else {
return true return true
} }
} }
if (loginType === 2 && !pub) { if (loginType === 2 && !pub) {
if (url.includes('doctor/pages')) { if (url.includes('doctor/pages')) {
return true return true
} else { }
else {
const params = Object.entries(options) const params = Object.entries(options)
.map(([key, value]) => `${key}=${value}`) .map(([key, value]) => `${key}=${value}`)
.join('&') .join('&')
@ -455,7 +470,8 @@ App<IAppOption>({
url: '/patient/pages/login/index', url: '/patient/pages/login/index',
}) })
isReject = true isReject = true
} else if (!isNewReg) { }
else if (!isNewReg) {
wx.reLaunch({ wx.reLaunch({
url: '/patient/pages/enterInfo/index', url: '/patient/pages/enterInfo/index',
}) })
@ -464,7 +480,7 @@ App<IAppOption>({
} }
if (isReject) { if (isReject) {
that.globalData.backPage = backPage that.globalData.backPage = backPage
reject(null) reject(new Error('非登录用户拦截'))
return return
} }
resolve(null) resolve(null)

11
src/components/popup/index.scss

@ -129,10 +129,19 @@
.popup6 { .popup6 {
width: 590rpx; width: 590rpx;
height: 880rpx; height: 880rpx;
position: relative;
.p-img { .p-img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.code {
position: absolute;
top: 350rpx;
left: 50%;
transform: translateX(-50%);
width: 290rpx;
height: 290rpx;
}
} }
.popup7 { .popup7 {
@ -187,7 +196,7 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.code{ .code {
position: absolute; position: absolute;
top: 372rpx; top: 372rpx;
left: 50%; left: 50%;

3
src/components/popup/index.wxml

@ -55,7 +55,8 @@
</view> </view>
</view> </view>
<view class="popup6" wx:if="{{type==='popup6'}}"> <view class="popup6" wx:if="{{type==='popup6'}}">
<image class="p-img" src="{{imageUrl}}bg20.png?t={{Timestamp}}" show-menu-by-longpress></image> <image class="p-img" src="{{imageUrl}}bg32.png?t={{Timestamp}}"></image>
<image class="code" src="{{params.qrCode}}" show-menu-by-longpress></image>
</view> </view>
<view class="popup7" wx:if="{{type==='popup7'}}"> <view class="popup7" wx:if="{{type==='popup7'}}">
<image class="badge" src="{{imageUrl}}icon78.png?t={{Timestamp}}"></image> <image class="badge" src="{{imageUrl}}icon78.png?t={{Timestamp}}"></image>

BIN
src/images/bg32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
src/images/icon87.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

BIN
src/images/za-images/live-banner.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 634 KiB

After

Width:  |  Height:  |  Size: 696 KiB

2
src/pages/d_patient/index.wxml

@ -35,7 +35,7 @@
<view class="edc" wx:if="{{item.IsEDC==1}}">EDC患者</view> <view class="edc" wx:if="{{item.IsEDC==1}}">EDC患者</view>
</view> </view>
</view> </view>
<view class="replay-date">注册时间:{{item.BecomePatientTime}}</view> <view class="replay-date">邀约时间:{{item.InviteTime}}</view>
</view> </view>
<view class="send" catch:tap="handleSend" data-index="{{index}}">消息</view> <view class="send" catch:tap="handleSend" data-index="{{index}}">消息</view>
</view> </view>

39
src/pages/start/index.ts

@ -1,47 +1,54 @@
const app = getApp<IAppOption>(); const app = getApp<IAppOption>()
Page({ Page({
data: {}, data: {},
onLoad() { onLoad() {
app.waitLogin().then(() => { app.waitLogin().then(() => {
const { isLogin, isNewReg, loginType } = app.globalData; const { isLogin, isNewReg, loginType, scene } = app.globalData
if (isLogin === 0) { if (isLogin === 0) {
// 未登录用户,扫医生邀请码,重定向到患者登录页
if (scene?.doctorId) {
wx.reLaunch({
url: '/patient/pages/login/index',
})
return
}
wx.reLaunch({ wx.reLaunch({
url: '/patient/pages/index/index', url: '/patient/pages/index/index',
}); })
return; return
} }
if (loginType === 0) { if (loginType === 0) {
wx.reLaunch({ wx.reLaunch({
url: '/patient/pages/index/index', url: '/patient/pages/index/index',
}); })
return; return
} }
if (loginType === 1) { if (loginType === 1) {
if (isNewReg === 1) { if (isNewReg === 1) {
wx.reLaunch({ wx.reLaunch({
url: '/patient/pages/index/index', url: '/patient/pages/index/index',
}); })
return; return
} }
wx.reLaunch({ wx.reLaunch({
url: '/patient/pages/enterInfo/index', url: '/patient/pages/enterInfo/index',
}); })
return; return
} }
if (loginType === 2) { if (loginType === 2) {
if (isNewReg === 1) { if (isNewReg === 1) {
wx.reLaunch({ wx.reLaunch({
url: '/pages/home/index', url: '/pages/home/index',
}); })
return; return
} }
wx.reLaunch({ wx.reLaunch({
url: '/pages/login/index', url: '/pages/login/index',
}); })
} }
}); })
}, },
}); })
export {}; export {}

2
src/patient/pages/index/index.scss

@ -282,7 +282,7 @@ page {
} }
.labels { .labels {
margin-top: 16rpx; margin-top: 16rpx;
max-width: 56vw; max-width: 64vw;
font-size: 28rpx; font-size: 28rpx;
color: rgba(173, 172, 178, 1); color: rgba(173, 172, 178, 1);
white-space: nowrap; white-space: nowrap;

45
src/patient/pages/index/index.ts

@ -1,4 +1,5 @@
import dayjs from 'dayjs' import dayjs from 'dayjs'
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
const licia = require('miniprogram-licia') const licia = require('miniprogram-licia')
@ -307,7 +308,8 @@ Page({
}, },
routerTo(e) { routerTo(e) {
let { url, active, code } = e.currentTarget.dataset let { url, active, code } = e.currentTarget.dataset
if (!url) return if (!url)
return
if (code === 'doctor') { if (code === 'doctor') {
app.mpBehavior({ PageName: 'BTN_PatientHomeDoctorCard' }) app.mpBehavior({ PageName: 'BTN_PatientHomeDoctorCard' })
} }
@ -399,7 +401,8 @@ Page({
wx.navigateTo({ wx.navigateTo({
url: '/patient/pages/vipLogin/index', url: '/patient/pages/vipLogin/index',
}) })
} else if (MedicineAuditSwitch === '1') { }
else if (MedicineAuditSwitch === '1') {
const pendPath = { const pendPath = {
0: '/patient/pages/vipPending/index', 0: '/patient/pages/vipPending/index',
1: '/patient/pages/vipStartPending/index', 1: '/patient/pages/vipStartPending/index',
@ -411,7 +414,8 @@ Page({
wx.navigateTo({ wx.navigateTo({
url: url || '/patient/pages/vipCert/index', url: url || '/patient/pages/vipCert/index',
}) })
} else { }
else {
wx.showToast({ wx.showToast({
icon: 'none', icon: 'none',
title: '工程师正在努力建设中,敬请期待!', title: '工程师正在努力建设中,敬请期待!',
@ -423,26 +427,31 @@ Page({
if (toastType === 'vipScan') { if (toastType === 'vipScan') {
this.routerVipTo() this.routerVipTo()
this.handleToastCancel() this.handleToastCancel()
} else if (toastType === 'aldAlert') { }
else if (toastType === 'aldAlert') {
wx.navigateTo({ wx.navigateTo({
url: '/patient/pages/adl/index', url: '/patient/pages/adl/index',
}) })
this.handleToastCancel() this.handleToastCancel()
} else if (toastType === 'healthCare') { }
else if (toastType === 'healthCare') {
this.setPopupInfo() this.setPopupInfo()
this.handleNRDL() this.handleNRDL()
this.handleToastCancel() this.handleToastCancel()
} else if (toastType === 'ndrlAldAlert') { }
else if (toastType === 'ndrlAldAlert') {
wx.navigateTo({ wx.navigateTo({
url: '/patient/pages/adl/index?nrdl=1', url: '/patient/pages/adl/index?nrdl=1',
}) })
this.handleToastCancel() this.handleToastCancel()
} else if (toastType === 'doubleStandards') { }
else if (toastType === 'doubleStandards') {
wx.navigateTo({ wx.navigateTo({
url: '/patient/pages/adl/index', url: '/patient/pages/adl/index',
}) })
this.handleToastCancel() this.handleToastCancel()
} else if (toastType === 'dedicatedDoctor') { }
else if (toastType === 'dedicatedDoctor') {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=zd/popup/close-popup', url: '?r=zd/popup/close-popup',
@ -455,7 +464,8 @@ Page({
}) })
}) })
this.handleToastCancel(null, false) this.handleToastCancel(null, false)
} else if (toastType === 'referral-toast') { }
else if (toastType === 'referral-toast') {
this.setData({ this.setData({
referralFromShow: true, referralFromShow: true,
}) })
@ -465,14 +475,15 @@ Page({
data: {}, data: {},
}) })
this.handleToastCancel(null, false) this.handleToastCancel(null, false)
} else if (toastType === 'drug-guide') { }
else if (toastType === 'drug-guide') {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=zd/popup/add-record', url: '?r=zd/popup/add-record',
data: { type: 1 }, data: { type: 1 },
}).then(() => { }).then(() => {
wx.navigateTo({ wx.navigateTo({
url: '/patient/pages/personalInformation/index?bottom=1', url: '/patient/pages/personalInformation/index?bottom=1&submit=1',
}) })
}) })
this.handleToastCancel(null, false) this.handleToastCancel(null, false)
@ -488,7 +499,8 @@ Page({
Type: 5, Type: 5,
}, },
}) })
} else if (toastType === 'dedicatedDoctor' && sure) { }
else if (toastType === 'dedicatedDoctor' && sure) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=zd/popup/close-popup', url: '?r=zd/popup/close-popup',
@ -496,13 +508,15 @@ Page({
Type: 6, Type: 6,
}, },
}) })
} else if (toastType === 'referral-toast') { }
else if (toastType === 'referral-toast') {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=zd/re-visit/update-popup-show-status', url: '?r=zd/re-visit/update-popup-show-status',
data: {}, data: {},
}) })
} else if (toastType === 'drug-guide' && sure) { }
else if (toastType === 'drug-guide' && sure) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=zd/popup/add-record', url: '?r=zd/popup/add-record',
@ -570,7 +584,8 @@ Page({
infoList: list, infoList: list,
}) })
}) })
} else { }
else {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=zd/pic-text/collection', url: '?r=zd/pic-text/collection',

15
src/patient/pages/index/index.wxml

@ -99,10 +99,21 @@
<view <view
class="l-banner" class="l-banner"
bind:tap="routerTo" bind:tap="routerTo"
data-url="/patient/pages/live/index?index=0" data-url="{{card.configLinkUrl || '/patient/pages/live/index?index=0'}}"
data-code="{{card.code}}" data-code="{{card.code}}"
> >
<image class="live-img" mode="aspectFill" src="{{imageUrl}}za-images/live-banner.png?t={{Timestamp}}"></image> <image
wx:if="{{card.configImg}}"
class="live-img"
mode="aspectFill"
src="{{card.configImg}}"
></image>
<image
wx:else
class="live-img"
mode="aspectFill"
src="{{imageUrl}}za-images/live-banner.png?t={{Timestamp}}"
></image>
</view> </view>
<view class="list" wx:if="{{liveList.length}}"> <view class="list" wx:if="{{liveList.length}}">
<view <view

95
src/patient/pages/liveDetail/index.ts

@ -1,6 +1,6 @@
/* eslint-disable eqeqeq */
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { parseScene } from '../../../utils/util' import { parseScene } from '../../../utils/util'
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
let live_time: null | number = null let live_time: null | number = null
@ -39,7 +39,8 @@ Page({
optionsScene: optionsScene || {}, optionsScene: optionsScene || {},
id: options.id || optionsScene?.id, id: options.id || optionsScene?.id,
}) })
} else if (options.proMethodId) { }
else if (options.proMethodId) {
this.setData({ this.setData({
'optionsScene.proMethodId': options.proMethodId, 'optionsScene.proMethodId': options.proMethodId,
}) })
@ -129,7 +130,8 @@ Page({
wx.setNavigationBarTitle({ wx.setNavigationBarTitle({
title: '会议详情', title: '会议详情',
}) })
} else { }
else {
wx.setNavigationBarTitle({ wx.setNavigationBarTitle({
title: '活动详情', title: '活动详情',
}) })
@ -218,25 +220,11 @@ Page({
}) })
}, },
handleSignUp() { handleSignUp() {
const { SubscribeTemplateList } = this.data.detail
app.mpBehavior({ PageName: 'BTN_PatientLiveSign' }) app.mpBehavior({ PageName: 'BTN_PatientLiveSign' })
wx.requestSubscribeMessage({
tmplIds: SubscribeTemplateList,
success: (res) => {
const subscribe = SubscribeTemplateList.map((item) => {
return res[item] === 'accept' ? 1 : 2
})
this.handleSignUpCallback(subscribe)
},
fail: () => {
this.handleSignUpCallback([2, 2])
},
})
},
handleSignUpCallback(res = [2, 2]) {
const { Type } = this.data.detail const { Type } = this.data.detail
const { UserType } = this.data.zdUserInfo const { UserType } = this.data.zdUserInfo
const optionsScene = this.data.optionsScene const optionsScene = this.data.optionsScene
const { SubscribeTemplateList } = this.data.detail
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=zd/activity/sign-up', url: '?r=zd/activity/sign-up',
@ -244,7 +232,6 @@ Page({
Id: this.data.id, Id: this.data.id,
PreUserIdentity: UserType, PreUserIdentity: UserType,
promotionMethodId: optionsScene.proMethodId, promotionMethodId: optionsScene.proMethodId,
subscribe: [...res],
}, },
}).then((res) => { }).then((res) => {
app app
@ -255,10 +242,44 @@ Page({
this.data.id, this.data.id,
) )
.then(() => { .then(() => {
this.handleSignUpCallback()
wx.navigateTo({ wx.navigateTo({
url: `/patient/pages/liveResult/index?id=${this.data.id}&rewardScore=${res.rewardScore}`, url: `/patient/pages/liveResult/index?id=${this.data.id}&rewardScore=${res.rewardScore}`,
}) })
}) })
.catch(() => {
app.globalData.liveSubscribe = {
sub: true,
tmplIds: SubscribeTemplateList,
}
})
})
},
handleSignUpCallback() {
const { SubscribeTemplateList } = this.data.detail
wx.requestSubscribeMessage({
tmplIds: SubscribeTemplateList,
success: (res) => {
const subscribe = SubscribeTemplateList.map((item) => {
return res[item] === 'accept' ? 1 : 2
})
this.postSubscribe(subscribe)
},
fail: () => {
const subscribe = Array.from({ length: SubscribeTemplateList.length }).fill(2)
this.postSubscribe(subscribe)
},
})
},
postSubscribe(subscribe) {
wx.ajax({
method: 'POST',
url: '?r=zd/activity/subscribe',
data: {
ActivityId: this.data.id,
subscribe,
},
showMsg: false,
}) })
}, },
handleShare() { handleShare() {
@ -300,33 +321,37 @@ Page({
wx.getSetting({ wx.getSetting({
success(res) { success(res) {
if ( if (
res.authSetting['scope.writePhotosAlbum'] != undefined && res.authSetting['scope.writePhotosAlbum'] != undefined
res.authSetting['scope.writePhotosAlbum'] == true && res.authSetting['scope.writePhotosAlbum'] == true
) { ) {
that.saveImage() that.saveImage()
} else if (res.authSetting['scope.writePhotosAlbum'] == undefined) { }
//获取当前位置 else if (res.authSetting['scope.writePhotosAlbum'] == undefined) {
// 获取当前位置
that.saveImage() that.saveImage()
} else { }
else {
wx.showModal({ wx.showModal({
title: '请求授权相册权限', title: '请求授权相册权限',
content: '需要保存海报到相册,请确认授权', content: '需要保存海报到相册,请确认授权',
confirmColor: '#8c75d0', confirmColor: '#8c75d0',
success(res) { success(res) {
if (res.cancel) { if (res.cancel) {
//取消授权 // 取消授权
wx.showToast({ wx.showToast({
title: '拒绝授权', title: '拒绝授权',
icon: 'none', icon: 'none',
duration: 1000, duration: 1000,
}) })
} else if (res.confirm) { }
//确定授权,通过wx.openSetting发起授权请求 else if (res.confirm) {
// 确定授权,通过wx.openSetting发起授权请求
wx.openSetting({ wx.openSetting({
success(res) { success(res) {
if (res.authSetting['scope.writePhotosAlbum'] == true) { if (res.authSetting['scope.writePhotosAlbum'] == true) {
that.saveImage() that.saveImage()
} else { }
else {
wx.showToast({ wx.showToast({
title: '授权失败', title: '授权失败',
icon: 'none', icon: 'none',
@ -387,13 +412,23 @@ Page({
}) })
}, },
handleOffice() { handleOffice() {
wx.ajax({
method: 'GET',
url: '?r=zd/common/get-channel-wx-code',
data: {
ChannelType: this.data.detail.Type == 1 ? '1' : '11',
Id: this.data.id,
},
}).then((res) => {
this.setData({ this.setData({
popupShow: true, popupShow: true,
popupType: 'popup6', popupType: 'popup6',
popupParams: { popupParams: {
qrCode: res,
close: true, close: true,
}, },
}) })
})
}, },
handlePopupCancel() { handlePopupCancel() {
this.setData({ this.setData({
@ -413,12 +448,12 @@ Page({
}, },
handleTimeFinish() { handleTimeFinish() {
this.setData({ this.setData({
dateValue: dayjs().valueOf(), 'dateValue': dayjs().valueOf(),
'detail.LeftTime': 0, 'detail.LeftTime': 0,
}) })
}, },
handleLightDetail(e) { handleLightDetail(e) {
const {index} = e.currentTarget.dataset; const { index } = e.currentTarget.dataset
wx.navigateTo({ wx.navigateTo({
url: `/patient/pages/liveDetailVideo/index?id=${this.data.id}&index=${index}`, url: `/patient/pages/liveDetailVideo/index?id=${this.data.id}&index=${index}`,
}) })

15
src/patient/pages/liveDetail/index.wxml

@ -107,7 +107,11 @@
<view class="c-title">详情介绍</view> <view class="c-title">详情介绍</view>
<image class="c-img" mode="widthFix" src="{{item.url}}" wx:for="{{detail.DetailJson}}" wx:key="name"></image> <image class="c-img" mode="widthFix" src="{{item.url}}" wx:for="{{detail.DetailJson}}" wx:key="name"></image>
</view> </view>
<view class="public" wx:if="{{detail.Status==3}}" style="background: url('{{imageUrl}}bg24.png?t={{Timestamp}}') no-repeat center/100%"> <view
class="public"
wx:if="{{detail.Status==3}}"
style="background: url('{{imageUrl}}bg24.png?t={{Timestamp}}') no-repeat center/100%"
>
<image class="p-code" src="{{detail.subscribe_img}}" show-menu-by-longpress></image> <image class="p-code" src="{{detail.subscribe_img}}" show-menu-by-longpress></image>
</view> </view>
</view> </view>
@ -175,12 +179,9 @@
</video> </video>
</view> </view>
<image <button open-type="share" wx:if="{{detail.PosterUrl}}" class="fixed-share">
class="fixed-share" <image class="fixed-share" src="{{imageUrl}}icon67.png?t={{Timestamp}}"></image>
wx:if="{{detail.PosterUrl}}" </button>
src="{{imageUrl}}icon67.png?t={{Timestamp}}"
bind:tap="handleShare"
></image>
<van-popup show="{{shareShow}}" custom-class="custom-popup" bind:click-overlay="handleShareClose"> <van-popup show="{{shareShow}}" custom-class="custom-popup" bind:click-overlay="handleShareClose">
<view class="p-share"> <view class="p-share">

19
src/patient/pages/liveDetailVideo/index.scss

@ -7,9 +7,26 @@
position: relative; position: relative;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
.video { .video {
width: 100%; width: 100%;
height: 100%; }
.full-screen {
position: absolute;
right: 0;
color: #fff;
padding: 32rpx;
display: flex;
align-items: center;
gap: 12rpx;
font-size: 28rpx;
color: rgba(255, 255, 255, 0.6);
.icon {
width: 40rpx;
height: 40rpx;
}
} }
.play { .play {
position: absolute; position: absolute;

98
src/patient/pages/liveDetailVideo/index.ts

@ -1,5 +1,7 @@
import dayjs from 'dayjs' import dayjs from 'dayjs'
const licia = require('miniprogram-licia') const licia = require('miniprogram-licia')
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
// 组件说明文档 https://github.com/wechat-miniprogram/miniprogram-component-plus/blob/master/docs/video-swiper.md // 组件说明文档 https://github.com/wechat-miniprogram/miniprogram-component-plus/blob/master/docs/video-swiper.md
@ -20,6 +22,8 @@ Page({
starShow: false, starShow: false,
index: 0, index: 0,
offsetTop: 310,
}, },
onLoad(options) { onLoad(options) {
this.setData({ this.setData({
@ -78,11 +82,37 @@ Page({
item.drag = false item.drag = false
if (index === current) { if (index === current) {
item.ctx.play() item.ctx.play()
} else { }
else {
item.ctx.pause() item.ctx.pause()
} }
}) })
}, },
handleFullScreenChange(e) {
const { index } = e.currentTarget.dataset
const fullScreenKey = `videoList[${index}].fullScreen`
this.setData({
[fullScreenKey]: e.detail.fullScreen,
})
},
handelFullScreen(e) {
const { id } = e.currentTarget.dataset
const context = wx.createVideoContext(id)
context.requestFullScreen({})
},
handleLoadedMetaData(e) {
const { index } = e.currentTarget.dataset
const offsetTopKey = `videoList[${index}].offsetTop`
const query = wx.createSelectorQuery()
query
.select(`#${e.target.id}`)
.boundingClientRect((rect) => {
this.setData({
[offsetTopKey]: rect.height + e.target.offsetTop + 10,
})
})
.exec()
},
handlePlay(e: any) { handlePlay(e: any) {
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
const key = `videoList[${index}].play` const key = `videoList[${index}].play`
@ -100,7 +130,8 @@ Page({
handleTimeUpdate(e: any) { handleTimeUpdate(e: any) {
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
const { videoList } = this.data const { videoList } = this.data
if (videoList[index].drag) return if (videoList[index].drag)
return
const { currentTime, duration } = e.detail const { currentTime, duration } = e.detail
const progress = (currentTime / duration) * 100 const progress = (currentTime / duration) * 100
const progressKey = `videoList[${index}].progress` const progressKey = `videoList[${index}].progress`
@ -115,7 +146,8 @@ Page({
const { videoList } = this.data const { videoList } = this.data
if (videoList[index].play) { if (videoList[index].play) {
videoList[index].ctx.pause() videoList[index].ctx.pause()
} else { }
else {
videoList[index].ctx.play() videoList[index].ctx.play()
} }
}, },
@ -138,60 +170,22 @@ Page({
[dragKey]: false, [dragKey]: false,
}) })
}, },
_timer: null as any, onShareAppMessage() {
handleLike(e: any) { const { id, current, videoList } = this.data
const { index } = e.currentTarget.dataset return {
const { videoList } = this.data title: videoList[current].Title,
const currentVideo = videoList[index] path: `/patient/pages/liveDetailVideo/index?id=${id}&index=${current}`,
const LikeTimes = Number(currentVideo.LikeTimes) + 1 imageUrl: videoList[current].imgUrl,
const key = `videoList[${index}].LikeTimes`
this.setData({
LikeTimes: this.data.LikeTimes + 1,
[key]: LikeTimes,
[`videoList[${index}].IsLike`]: true,
starShow: true,
})
const header = this.selectComponent('#animate')
header.start()
if (this._timer) {
clearInterval(this._timer)
} }
this._timer = setTimeout(() => {
this.setData({
starShow: false,
})
}, 2000)
this.likePost()
}, },
likePost: licia.debounce(function (this: any) { handleBack() {
const { activeId, LikeTimes } = this.data wx.navigateBack({
this.setData({ fail: () => {
LikeTimes: 0, wx.reLaunch({
url: `/patient/pages/liveDetail/index?id=${this.data.id}`,
}) })
wx.ajax({
method: 'POST',
url: '?r=wtx/knowledge/like',
data: {
Id: activeId,
LikeTimes,
}, },
}) })
}, 1000),
onShareAppMessage() {
const { current, videoList } = this.data
const currentVideo = videoList[current]
this.setData({
[`videoList[${current}].ShareTimes`]: Number(currentVideo.ShareTimes) + 1,
[`videoList[${current}].IsShare`]: true,
})
wx.ajax({
method: 'POST',
url: '?r=wtx/knowledge/share',
data: { Id: this.data.activeId },
})
},
handleBack() {
wx.navigateBack()
}, },
}) })

32
src/patient/pages/liveDetailVideo/index.wxml

@ -11,19 +11,31 @@
src="{{item.videoUrl}}" src="{{item.videoUrl}}"
poster="{{item.imgUrl}}" poster="{{item.imgUrl}}"
loop loop
title="{{item.title}}"
object-fit="contain" object-fit="contain"
enable-play-gesture enable-play-gesture
enable-progress-gesture enable-progress-gesture
show-center-play-btn="{{false}}" show-center-play-btn="{{false}}"
play-btn-position="center" controls="{{item.fullScreen}}"
controls="{{false}}" bindloadedmetadata="handleLoadedMetaData"
bindprogress="handleProgress" bindprogress="handleProgress"
bindplay="handlePlay" bindplay="handlePlay"
bindpause="handlePause" bindpause="handlePause"
bindfullscreenchange="handleFullScreenChange"
bindtimeupdate="handleTimeUpdate" bindtimeupdate="handleTimeUpdate"
data-index="{{index}}" data-index="{{index}}"
bind:tap="handleTogglePlay" data-full="{{item.fullScreen}}"
></video> ></video>
<view
wx:if="{{item.offsetTop}}"
class="full-screen"
style="top:{{item.offsetTop}}px"
catch:tap="handelFullScreen"
data-id="video-{{item.attachmentId}}"
>
<image class="icon" src="{{imageUrl}}icon87.png?t={{Timestamp}}"></image>
全屏观看
</view>
<image <image
wx:if="{{!item.play}}" wx:if="{{!item.play}}"
class="play" class="play"
@ -33,7 +45,7 @@
data-index="{{index}}" data-index="{{index}}"
></image> ></image>
<view class="swiper-item-footer"> <view class="swiper-item-footer">
<view class="title">{{item.Title}}</view> <view class="title">{{item.title}}</view>
<view class="progress"> <view class="progress">
<van-slider <van-slider
value="{{item.progress}}" value="{{item.progress}}"
@ -51,7 +63,7 @@
<view class="container"> <view class="container">
<view class="user"> <view class="user">
<image class="avatar" src="{{imageUrl}}logo1.png?t={{Timestamp}}"></image> <image class="avatar" src="{{imageUrl}}logo1.png?t={{Timestamp}}"></image>
<view class="name">基因知识库</view> <view class="name">TED关爱小助手</view>
</view> </view>
<view class="options"> <view class="options">
<button class="o-item" open-type="share"> <button class="o-item" open-type="share">
@ -59,11 +71,11 @@
<image wx:else class="icon" src="{{imageUrl}}icon85.png?t={{Timestamp}}"></image> <image wx:else class="icon" src="{{imageUrl}}icon85.png?t={{Timestamp}}"></image>
<view class="num {{item.IsShare && 'active'}}">{{item.ShareTimes}}</view> <view class="num {{item.IsShare && 'active'}}">{{item.ShareTimes}}</view>
</button> </button>
<view class="o-item" bind:tap="handleLike" data-index="{{index}}"> <!-- <view class="o-item" bind:tap="handleLike" data-index="{{index}}"> -->
<image wx:if="{{item.IsLike}}" class="icon" src="{{imageUrl}}icon84.png?t={{Timestamp}}"></image> <!-- <image wx:if="{{item.IsLike}}" class="icon" src="{{imageUrl}}icon84.png?t={{Timestamp}}"></image> -->
<image wx:else class="icon" src="{{imageUrl}}icon86.png?t={{Timestamp}}"></image> <!-- <image wx:else class="icon" src="{{imageUrl}}icon86.png?t={{Timestamp}}"></image> -->
<view class="num {{item.IsLike && 'active'}}">{{item.LikeTimes}}</view> <!-- <view class="num {{item.IsLike && 'active'}}">{{item.LikeTimes}}</view> -->
</view> <!-- </view> -->
</view> </view>
</view> </view>
</view> </view>

18
src/patient/pages/liveResult/index.ts

@ -1,5 +1,5 @@
const app = getApp<IAppOption>()
import dayjs from 'dayjs' import dayjs from 'dayjs'
const app = getApp<IAppOption>()
let live_time: null | number = null let live_time: null | number = null
Page({ Page({
@ -11,6 +11,7 @@ Page({
codeUrl: '', codeUrl: '',
dateValue: '' as string | number, dateValue: '' as string | number,
rewardScore: 0 as number | undefined, rewardScore: 0 as number | undefined,
qrCode: '',
}, },
onLoad(options) { onLoad(options) {
this.setData({ this.setData({
@ -47,6 +48,21 @@ Page({
this.setData({ this.setData({
detail: res, detail: res,
}) })
this.getQrCode()
})
},
getQrCode() {
wx.ajax({
method: 'GET',
url: '?r=zd/common/get-channel-wx-code',
data: {
ChannelType: this.data.detail.Type == 1 ? '1' : '11',
Id: this.data.id,
},
}).then((res) => {
this.setData({
qrCode: res,
})
}) })
}, },
getLiveDetail() { getLiveDetail() {

2
src/patient/pages/liveResult/index.wxml

@ -16,7 +16,7 @@
<view class="tip">欢迎您参与此次活动</view> <view class="tip">欢迎您参与此次活动</view>
<view class="office"> <view class="office">
<view class="o-title">关注公众号,活动提醒不错过</view> <view class="o-title">关注公众号,活动提醒不错过</view>
<image class="code" src="{{imageUrl}}code1.png?t={{Timestamp}}" show-menu-by-longpress></image> <image class="code" src="{{qrCode}}" show-menu-by-longpress></image>
<view class="btn">长按识别二维码</view> <view class="btn">长按识别二维码</view>
</view> </view>
<view class="container"> <view class="container">

8
src/patient/pages/personalInformation/index.scss

@ -39,7 +39,7 @@ page {
.row-sub { .row-sub {
margin-top: 8rpx; margin-top: 8rpx;
font-size: 28rpx; font-size: 28rpx;
color: #ADACB2; color: #adacb2;
} }
.row-content { .row-content {
padding-top: 24rpx; padding-top: 24rpx;
@ -267,7 +267,7 @@ page {
} }
.cancellation { .cancellation {
margin: 32rpx 0 24rpx; margin: 32rpx 0 0;
height: 88rpx; height: 88rpx;
background: #ffffff; background: #ffffff;
border-radius: 156rpx 156rpx 156rpx 156rpx; border-radius: 156rpx 156rpx 156rpx 156rpx;
@ -275,10 +275,6 @@ page {
line-height: 96rpx; line-height: 96rpx;
font-size: 32rpx; font-size: 32rpx;
color: #c394ff; color: #c394ff;
&:last-of-type {
margin-top: 0;
border: none;
}
} }
.picker { .picker {

36
src/patient/pages/personalInformation/index.ts

@ -1,10 +1,12 @@
import dayjs from 'dayjs' import dayjs from 'dayjs'
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
const licia = require('miniprogram-licia') const licia = require('miniprogram-licia')
Page({ Page({
data: { data: {
scrollBottom: '', scrollBottom: '',
submit: '',
isEdit: false, isEdit: false,
area: [] as string[][], area: [] as string[][],
city: [] as string[][], city: [] as string[][],
@ -65,6 +67,7 @@ Page({
if (options.bottom) { if (options.bottom) {
this.setData({ this.setData({
scrollBottom: options.bottom, scrollBottom: options.bottom,
submit: options.submit,
}) })
} }
}, },
@ -105,7 +108,7 @@ Page({
formatUserInfo(res) { formatUserInfo(res) {
this.formatBorn(res.Birth) this.formatBorn(res.Birth)
this.handleChaneDiagnosisTime({ detail: { value: res.DiagnosisTime } }, false) this.handleChaneDiagnosisTime({ detail: { value: res.DiagnosisTime } }, false)
const diagnoseTypeValue = this.data.DTList.findIndex((item) => item.id == res.DiagnoseType) const diagnoseTypeValue = this.data.DTList.findIndex(item => item.id == res.DiagnoseType)
this.handleChangeDiagnoseType({ detail: { value: [diagnoseTypeValue] } }) this.handleChangeDiagnoseType({ detail: { value: [diagnoseTypeValue] } })
this.handleDiagnoseTypeSave(false) this.handleDiagnoseTypeSave(false)
// this.handleTapRT(); // this.handleTapRT();
@ -128,13 +131,15 @@ Page({
if (!Birth) { if (!Birth) {
bron = `${Birth}` bron = `${Birth}`
age = '岁' age = '岁'
} else if (Birth && Birth.split('-').length > 1) { }
else if (Birth && Birth.split('-').length > 1) {
bron = `${Birth.split('-')[0]}${Birth.split('-')[1]}` bron = `${Birth.split('-')[0]}${Birth.split('-')[1]}`
age = age
month - Birth.split('-')[1] >= 0 = month - Birth.split('-')[1] >= 0
? `${year - Birth.split('-')[0]}${month - Birth.split('-')[1]}个月` ? `${year - Birth.split('-')[0]}${month - Birth.split('-')[1]}个月`
: `${year - Birth.split('-')[0] - 1}${12 - Birth.split('-')[1] + month}个月` : `${year - Birth.split('-')[0] - 1}${12 - Birth.split('-')[1] + month}个月`
} else { }
else {
bron = `${Birth}` bron = `${Birth}`
age = `${year - Birth}` age = `${year - Birth}`
} }
@ -155,7 +160,7 @@ Page({
handleChaneDiagnosisTime(e, update = true) { handleChaneDiagnosisTime(e, update = true) {
const DiagnosisTime = e.detail.value const DiagnosisTime = e.detail.value
this.setData({ this.setData({
DiagnosisTime: dayjs(DiagnosisTime).format('YYYY年MM月'), 'DiagnosisTime': dayjs(DiagnosisTime).format('YYYY年MM月'),
'zdUserInfo.DiagnosisTime': DiagnosisTime, 'zdUserInfo.DiagnosisTime': DiagnosisTime,
}) })
this.updateUserInfo(update) this.updateUserInfo(update)
@ -171,7 +176,7 @@ Page({
const value = e.detail.value const value = e.detail.value
const id = this.data.RTList.filter((_item, index) => index == value)[0]?.id const id = this.data.RTList.filter((_item, index) => index == value)[0]?.id
this.setData({ this.setData({
rtValue: value, 'rtValue': value,
'zdUserInfo.RelationType': id, 'zdUserInfo.RelationType': id,
}) })
this.updateUserInfo(update) this.updateUserInfo(update)
@ -180,7 +185,7 @@ Page({
const value = e.detail.value const value = e.detail.value
const id = this.data.GenderList.filter((_item, index) => index == value)[0]?.id const id = this.data.GenderList.filter((_item, index) => index == value)[0]?.id
this.setData({ this.setData({
genderValue: value, 'genderValue': value,
'zdUserInfo.Gender': id, 'zdUserInfo.Gender': id,
}) })
this.updateUserInfo(update) this.updateUserInfo(update)
@ -189,7 +194,7 @@ Page({
const value = e.detail.value const value = e.detail.value
const id = this.data.dict.AgeRange.filter((_item, index) => index == value)[0]?.id const id = this.data.dict.AgeRange.filter((_item, index) => index == value)[0]?.id
this.setData({ this.setData({
ageRangeValue: value, 'ageRangeValue': value,
'zdUserInfo.AgeRange': id, 'zdUserInfo.AgeRange': id,
}) })
this.updateUserInfo(update) this.updateUserInfo(update)
@ -198,7 +203,7 @@ Page({
const rangeIndex = this.data.selectDiagnoseTypeIndex const rangeIndex = this.data.selectDiagnoseTypeIndex
const id = this.data.DTList.filter((_item, index) => index == rangeIndex)[0]?.id const id = this.data.DTList.filter((_item, index) => index == rangeIndex)[0]?.id
this.setData({ this.setData({
diagnoseTypeValue: rangeIndex, 'diagnoseTypeValue': rangeIndex,
'zdUserInfo.DiagnoseType': id, 'zdUserInfo.DiagnoseType': id,
}) })
if (update) { if (update) {
@ -233,9 +238,10 @@ Page({
this.updateUserInfo() this.updateUserInfo()
}, },
updateUserInfo(update = true) { updateUserInfo(update = true) {
if (!update) return if (!update)
const { PatientName, RelationType, Gender, Birth, DiagnosisTime, DiagnoseType, ...zdUserInfo } = return
this.data.zdUserInfo const { PatientName, RelationType, Gender, Birth, DiagnosisTime, DiagnoseType, ...zdUserInfo }
= this.data.zdUserInfo
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=zd/account/update-info', url: '?r=zd/account/update-info',
@ -290,8 +296,8 @@ Page({
}, },
handlePopupOk() { handlePopupOk() {
this.setData({ this.setData({
popupShow: false, 'popupShow': false,
popupType: '', 'popupType': '',
'zdUserInfo.prescriptionImg': '', 'zdUserInfo.prescriptionImg': '',
}) })
this.updateUserInfo() this.updateUserInfo()

10
src/patient/pages/personalInformation/index.wxml

@ -179,7 +179,12 @@
<view class="del" catchtap="handleDelData" wx:if="{{zdUserInfo.DrugsAuditStatus==2}}"> <view class="del" catchtap="handleDelData" wx:if="{{zdUserInfo.DrugsAuditStatus==2}}">
<image class="d-icon" src="{{imageUrl}}icon77.png?t={{Timestamp}}"></image> <image class="d-icon" src="{{imageUrl}}icon77.png?t={{Timestamp}}"></image>
</view> </view>
<image class="img" src="{{zdUserInfo.PrescriptionImg}}" mode="aspectFill" catch:tap="handlePreview"></image> <image
class="img"
src="{{zdUserInfo.PrescriptionImg}}"
mode="aspectFill"
catch:tap="handlePreview"
></image>
<view class="check" wx:if="{{zdUserInfo.DrugsAuditStatus==1}}"> <view class="check" wx:if="{{zdUserInfo.DrugsAuditStatus==1}}">
<image class="check-icon" src="{{imageUrl}}icon81.png?t={{Timestamp}}"></image> <image class="check-icon" src="{{imageUrl}}icon81.png?t={{Timestamp}}"></image>
审核中... 审核中...
@ -197,8 +202,11 @@
</block> </block>
</view> </view>
</view> </view>
<view wx:if="{{submit}}" class="cancellation" bind:tap="routerTo" data-url="/patient/pages/my/index">提交</view>
<block wx:else>
<view class="cancellation" bind:tap="routerTo" data-url="/pages/login/index?back=1">切换医生端</view> <view class="cancellation" bind:tap="routerTo" data-url="/pages/login/index?back=1">切换医生端</view>
<view wx:if="{{zdUserInfo.IsRootUser==1}}" class="cancellation" bind:tap="handleLogout">注销账号</view> <view wx:if="{{zdUserInfo.IsRootUser==1}}" class="cancellation" bind:tap="handleLogout">注销账号</view>
</block>
</view> </view>
<van-popup <van-popup

2
typings/index.d.ts vendored

@ -1,3 +1,5 @@
declare module 'miniprogram-licia';
type pageType = 0 | 1 | 2 type pageType = 0 | 1 | 2
interface IAppOption { interface IAppOption {
globalData: { globalData: {

Loading…
Cancel
Save