作者 韩昌

gaibug

@@ -82,7 +82,7 @@ @@ -82,7 +82,7 @@
82 </template> 82 </template>
83 83
84 <script lang="ts"> 84 <script lang="ts">
85 -import { defineComponent, watchEffect, reactive, toRefs, onMounted, computed, nextTick, getCurrentInstance, ComponentPublicInstance } from 'vue' 85 +import { defineComponent, defineEmits, watchEffect, reactive, toRefs, onMounted, computed, nextTick, getCurrentInstance, ComponentPublicInstance } from 'vue'
86 import Face from './message/face.vue' 86 import Face from './message/face.vue'
87 import AudioMessage from './message/audio.vue' 87 import AudioMessage from './message/audio.vue'
88 import store from '../../../../TUICore/store' 88 import store from '../../../../TUICore/store'
@@ -110,7 +110,8 @@ const TUIChatInput = defineComponent({ @@ -110,7 +110,8 @@ const TUIChatInput = defineComponent({
110 default: () => ({}) 110 default: () => ({})
111 } 111 }
112 }, 112 },
113 - setup(props) { 113 + emits: ['scrollbottomHandler'],
  114 + setup(props, { emit }) {
114 const { proxy } = getCurrentInstance() as { proxy: ComponentPublicInstance } 115 const { proxy } = getCurrentInstance() as { proxy: ComponentPublicInstance }
115 116
116 const TUIServer: any = uni.$TUIKit.TUIChatServer 117 const TUIServer: any = uni.$TUIKit.TUIChatServer
@@ -149,6 +150,7 @@ const TUIChatInput = defineComponent({ @@ -149,6 +150,7 @@ const TUIChatInput = defineComponent({
149 uni.$TUIKit.TUIChatServer.sendTextMessage(JSON.parse(JSON.stringify(data.inputText))) 150 uni.$TUIKit.TUIChatServer.sendTextMessage(JSON.parse(JSON.stringify(data.inputText)))
150 } 151 }
151 data.inputText = ' ' 152 data.inputText = ' '
  153 + emit('scrollbottomHandler')
152 } 154 }
153 155
154 // 处理需要合并的数据 156 // 处理需要合并的数据
1 <template> 1 <template>
2 <u-sticky> 2 <u-sticky>
3 - <u-navbar title="问诊中" :autoBack="true" bgColor="#fff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }" leftIconColor="#000"></u-navbar> 3 + <u-navbar :title="navbarTitle" :autoBack="true" bgColor="#fff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }" leftIconColor="#000"></u-navbar>
4 <view class="imtopinfo"> 4 <view class="imtopinfo">
5 <view class="flexJ"> 5 <view class="flexJ">
6 <view class="flexA"> 6 <view class="flexA">
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 <view class="TUI-message-list" @touchstart="handleTouchStart" @click="dialogID = ''"> 43 <view class="TUI-message-list" @touchstart="handleTouchStart" @click="dialogID = ''">
44 <!-- 用户信息卡片 --> 44 <!-- 用户信息卡片 -->
45 <!-- <UserInfoCard :detailData="detailData" /> --> 45 <!-- <UserInfoCard :detailData="detailData" /> -->
46 - <view style="height: 280rpx"></view> 46 + <view style="height: 340rpx"></view>
47 <template v-if="history === 'err'"> 47 <template v-if="history === 'err'">
48 <view class="loading-text" v-if="isCompleted">没有更多</view> 48 <view class="loading-text" v-if="isCompleted">没有更多</view>
49 <view v-for="(item, index) in messages" :key="item.ID" :id="'view' + item.ID"> 49 <view v-for="(item, index) in messages" :key="item.ID" :id="'view' + item.ID">
@@ -79,7 +79,7 @@ @@ -79,7 +79,7 @@
79 <MessageBubble :data="item"> 79 <MessageBubble :data="item">
80 <MessageText :id="item.flow + '-' + item.ID" v-if="item.chatType === 1" :data="item" :messageData="item" @longpress="handleItem($event, item)"></MessageText> 80 <MessageText :id="item.flow + '-' + item.ID" v-if="item.chatType === 1" :data="item" :messageData="item" @longpress="handleItem($event, item)"></MessageText>
81 <MessageImage :id="item.flow + '-' + item.ID" v-if="item.chatType === 2" :data="item.payload" :messageData="item" @longpress="handleItem($event, item)"></MessageImage> 81 <MessageImage :id="item.flow + '-' + item.ID" v-if="item.chatType === 2" :data="item.payload" :messageData="item" @longpress="handleItem($event, item)"></MessageImage>
82 - <MessageVideo :id="item.flow + '-' + item.ID" v-if="item.chatType === 3" :data="item.payload" :messageData="item" @longpress="handleItem($event, item)" /> 82 + <MessageVideo :id="item.flow + '-' + item.ID" v-if="item.chatType === 3" :data="item" :messageData="item" @longpress="handleItem($event, item)" />
83 </MessageBubble> 83 </MessageBubble>
84 <MessageRevoked v-if="item.isRevoked" :data="item" @edit="handleEdit(item)" /> 84 <MessageRevoked v-if="item.isRevoked" :data="item" @edit="handleEdit(item)" />
85 </view> 85 </view>
@@ -95,7 +95,7 @@ @@ -95,7 +95,7 @@
95 <view @click="sendPrescriptionState = true" v-if="[null, undefined, ''].includes(detailData?.drugId)">发送处方单</view> 95 <view @click="sendPrescriptionState = true" v-if="[null, undefined, ''].includes(detailData?.drugId)">发送处方单</view>
96 <view @click="showPrescriptionDetailState = true">查看处方单</view> 96 <view @click="showPrescriptionDetailState = true">查看处方单</view>
97 </view> 97 </view>
98 - <TUIChatInput :text="text" :conversationData="conversation" :detailData="detailData"></TUIChatInput> 98 + <TUIChatInput :text="text" :conversationData="conversation" :detailData="detailData" @scrollbottomHandler="scrollbottomHandler"></TUIChatInput>
99 </template> 99 </template>
100 </view> 100 </view>
101 <!-- <view class="TUIChat" v-if="conversationType === 'system'"> 101 <!-- <view class="TUIChat" v-if="conversationType === 'system'">
@@ -232,7 +232,8 @@ export default defineComponent({ @@ -232,7 +232,8 @@ export default defineComponent({
232 pageSize: 15 232 pageSize: 15
233 }, 233 },
234 imUserId: '', 234 imUserId: '',
235 - historyList: [] as any 235 + historyList: [] as any,
  236 + navbarTitle: ''
236 }) 237 })
237 238
238 // 判断当前会话类型:无/系统会话/正常C2C、群聊 239 // 判断当前会话类型:无/系统会话/正常C2C、群聊
@@ -266,6 +267,12 @@ export default defineComponent({ @@ -266,6 +267,12 @@ export default defineComponent({
266 data.Event = options 267 data.Event = options
267 getDetailHandler() 268 getDetailHandler()
268 269
  270 + data.navbarTitle = { err: '问诊中', success: '问诊记录' }[data.history] as string
  271 +
  272 + setTimeout(() => {
  273 + data.scrollTop = 10000
  274 + }, 1300)
  275 +
269 // uni.setNavigationBarTitle({ 276 // uni.setNavigationBarTitle({
270 // // title: options && options.conversationName 277 // // title: options && options.conversationName
271 // title: '自定义用户名' 278 // title: '自定义用户名'
@@ -346,6 +353,12 @@ export default defineComponent({ @@ -346,6 +353,12 @@ export default defineComponent({
346 } 353 }
347 }) 354 })
348 355
  356 + const scrollbottomHandler = () => {
  357 + setTimeout(() => {
  358 + data.scrollTop = 10000
  359 + }, 500)
  360 + }
  361 +
349 const imageFormatMap = new Map([ 362 const imageFormatMap = new Map([
350 ['jpg', 1], 363 ['jpg', 1],
351 ['gif', 2], 364 ['gif', 2],
@@ -622,7 +635,8 @@ export default defineComponent({ @@ -622,7 +635,8 @@ export default defineComponent({
622 getEndInformationHandler, 635 getEndInformationHandler,
623 computedTotalHandler, 636 computedTotalHandler,
624 finishCountDownHandler, 637 finishCountDownHandler,
625 - getOrder_chatHandler 638 + getOrder_chatHandler,
  639 + scrollbottomHandler
626 } 640 }
627 } 641 }
628 }) 642 })
  1 +<template>
  2 + <view class="flexC" style="margin: 0 auto; flex-direction: column">
  3 + <image src="/static/images/empty.png" mode="scaleToFill" />
  4 + <view class="flexC">{{ props.text }}</view>
  5 + </view>
  6 +</template>
  7 +
  8 +<script setup lang="ts">
  9 +const props = defineProps({
  10 + text: String
  11 +})
  12 +</script>
  13 +
  14 +<style scoped>
  15 +image {
  16 + width: 320rpx;
  17 + height: 320rpx;
  18 + margin-bottom: 32rpx;
  19 +}
  20 +.flexC {
  21 + color: #323233;
  22 + font-size: 28rpx;
  23 + font-weight: 700;
  24 +}
  25 +</style>
1 <template> 1 <template>
2 - <div class="trundown"> 2 + <view class="trundown">
3 <view class="trundown-bottom"> 3 <view class="trundown-bottom">
4 <view class="shuiyin flexC" v-if="props.isShowSY">宠物问诊</view> 4 <view class="shuiyin flexC" v-if="props.isShowSY">宠物问诊</view>
5 <view class="flexJ zbjz" @click="jumpHandler"> 5 <view class="flexJ zbjz" @click="jumpHandler">
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <u-icon name="arrow-right" color="#10bfd1" size="24"></u-icon> 8 <u-icon name="arrow-right" color="#10bfd1" size="24"></u-icon>
9 </view> 9 </view>
10 </view> 10 </view>
11 - </div> 11 + </view>
12 </template> 12 </template>
13 13
14 <script setup lang="ts"> 14 <script setup lang="ts">
@@ -26,8 +26,8 @@ const props = withDefaults(defineProps<IProps>(), { @@ -26,8 +26,8 @@ const props = withDefaults(defineProps<IProps>(), {
26 }) 26 })
27 27
28 const jumpHandler = () => { 28 const jumpHandler = () => {
29 - if([20,'20'].includes(props.examineState)) return proxy.$h.jumpUrl(`/pages2/mineinfo/state?state=${props.state}`)  
30 - 29 + if ([20, '20'].includes(props.examineState)) return proxy.$h.jumpUrl(`/pages2/mineinfo/state?state=${props.state}`)
  30 +
31 uni.$u.toast('请先完成认证') 31 uni.$u.toast('请先完成认证')
32 } 32 }
33 </script> 33 </script>
@@ -263,6 +263,12 @@ @@ -263,6 +263,12 @@
263 } 263 }
264 }, 264 },
265 { 265 {
  266 + "path": "money/addAccount",
  267 + "style": {
  268 + "navigationStyle": "custom"
  269 + }
  270 + },
  271 + {
266 "path": "datatotal/index", 272 "path": "datatotal/index",
267 "style": { 273 "style": {
268 "navigationStyle": "custom" 274 "navigationStyle": "custom"
1 <template> 1 <template>
2 - <div class="fillinfo flexCCol"> 2 + <view class="fillinfo flexCCol">
3 <view class="fillinfo-title">完善个人信息</view> 3 <view class="fillinfo-title">完善个人信息</view>
4 <view class="subtitle">为了更好体验,请尽快完善个人信息</view> 4 <view class="subtitle">为了更好体验,请尽快完善个人信息</view>
5 <image src="/static/images/fillinfo.png" class="logo" mode="aspectFill" /> 5 <image src="/static/images/fillinfo.png" class="logo" mode="aspectFill" />
6 <up-button color="#05B8D2" shape="circle" text="我已准备好,去认证" throttleTime="1500" @click="proxy.$h.jumpUrl(`/pages2/auth/step`), emit('close', false)"></up-button> 6 <up-button color="#05B8D2" shape="circle" text="我已准备好,去认证" throttleTime="1500" @click="proxy.$h.jumpUrl(`/pages2/auth/step`), emit('close', false)"></up-button>
7 <view class="er" @click="emit('close', false)">稍后完善</view> 7 <view class="er" @click="emit('close', false)">稍后完善</view>
8 - </div> 8 + </view>
9 </template> 9 </template>
10 10
11 <script setup lang="ts"> 11 <script setup lang="ts">
@@ -20,7 +20,9 @@ @@ -20,7 +20,9 @@
20 /> 20 />
21 <image v-else @click.stop="proxy.$h.previewImage('/static/images/mAvatar.png')" class="index-avatar" src="/static/images/mAvatar.png" mode="aspectFill" /> 21 <image v-else @click.stop="proxy.$h.previewImage('/static/images/mAvatar.png')" class="index-avatar" src="/static/images/mAvatar.png" mode="aspectFill" />
22 <view @click="proxy.$h.jumpUrl(`/pages2/mineinfo/info`)"> 22 <view @click="proxy.$h.jumpUrl(`/pages2/mineinfo/info`)">
23 - <view class="index-username ffftext">{{ IndexData?.nickname || '未登录' }}</view> 23 + <view class="index-username ffftext" v-if="[null, undefined, ''].includes(IndexData?.nickname) && LoginState">{{ '未设置用户名' }}</view>
  24 + <view class="index-username ffftext" v-if="![null, undefined, ''].includes(IndexData?.nickname) && LoginState">{{ IndexData.nickname }}</view>
  25 + <view class="index-username ffftext" v-if="!LoginState && [null, undefined, ''].includes(IndexData?.nickname)">{{ '未登录' }}</view>
24 <view class="ffftext">在线认证资质</view> 26 <view class="ffftext">在线认证资质</view>
25 </view> 27 </view>
26 </view> 28 </view>
1 <template> 1 <template>
2 <view class="login"> 2 <view class="login">
3 - <!-- <image class="login-bgimg" src="/static/images/startup.png" mode="aspectFill" /> -->  
4 - <view class="login-bgcolor"></view>  
5 <view class="login-positiontopbox"> 3 <view class="login-positiontopbox">
6 - <image class="login-avatar flexC" :src="proxy.$h.downFile(startimg)" mode="aspectFill"></image> 4 + <view class="login-avatar flexC" mode="aspectFill">
  5 + <image :src="proxy.$h.downFile(startimg)" mode="scaleToFill" />
  6 + </view>
7 <view class="login-title flexC">宠研兽医</view> 7 <view class="login-title flexC">宠研兽医</view>
8 </view> 8 </view>
9 </view> 9 </view>
@@ -22,46 +22,30 @@ const { proxy } = getCurrentInstance() @@ -22,46 +22,30 @@ const { proxy } = getCurrentInstance()
22 const startUpHandler = async () => { 22 const startUpHandler = async () => {
23 const { result }: { result: StartType } = await getStart() 23 const { result }: { result: StartType } = await getStart()
24 24
25 - if (result === null) return 25 + ![null, undefined, ''].includes(result?.image) && (startimg.value = result?.image)
26 26
27 - startimg.value = result.image 27 + setTimeout(() => {
  28 + if (uni.getStorageSync('token')) {
  29 + proxy.$h.relaunchUrl('/pages/index/index')
  30 +
  31 + return
  32 + }
  33 +
  34 + proxy.$h.relaunchUrl('/pages/login/login')
  35 + }, 3000)
28 } 36 }
29 37
30 onShow(startUpHandler()) 38 onShow(startUpHandler())
31 -  
32 -setTimeout(() => {  
33 - if (uni.getStorageSync('token')) {  
34 - proxy.$h.relaunchUrl('/pages/index/index')  
35 - return  
36 - }  
37 - proxy.$h.relaunchUrl('/pages/login/login')  
38 -}, 3000)  
39 </script> 39 </script>
40 40
41 <style lang="scss" scoped> 41 <style lang="scss" scoped>
  42 +page {
  43 + background: #05b8d2;
  44 +}
42 .login { 45 .login {
43 text { 46 text {
44 font-size: 26rpx; 47 font-size: 26rpx;
45 } 48 }
46 - &-bgcolor {  
47 - width: 100vw;  
48 - height: 100vh;  
49 - position: fixed;  
50 - top: 0;  
51 - left: 0;  
52 - right: 0;  
53 - z-index: -100;  
54 - background: #05b8d2;  
55 - }  
56 - &-bgimg {  
57 - width: 100vw;  
58 - height: 100vh;  
59 - position: fixed;  
60 - top: 0;  
61 - left: 0;  
62 - right: 0;  
63 - z-index: -100;  
64 - }  
65 &-positiontopbox { 49 &-positiontopbox {
66 position: fixed; 50 position: fixed;
67 top: 30%; 51 top: 30%;
@@ -72,6 +56,11 @@ setTimeout(() => { @@ -72,6 +56,11 @@ setTimeout(() => {
72 width: 172rpx; 56 width: 172rpx;
73 height: 172rpx; 57 height: 172rpx;
74 border-radius: 32rpx; 58 border-radius: 32rpx;
  59 + background: #fff;
  60 + image {
  61 + width: 100%;
  62 + height: 100%;
  63 + }
75 } 64 }
76 &-title { 65 &-title {
77 margin: 36rpx auto 0; 66 margin: 36rpx auto 0;
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 </view> 16 </view>
17 <view class="flexJ" style="margin-top: 28rpx"> 17 <view class="flexJ" style="margin-top: 28rpx">
18 <view class="bluetext" @click="emit('editLoginStateHandler', 2)">验证码登录</view> 18 <view class="bluetext" @click="emit('editLoginStateHandler', 2)">验证码登录</view>
19 - <view class="bluetext" @click="proxy.$h.jumpUrl(`/pages2/mineinfo/editphone?type=editpassword`)">忘记密码</view> 19 + <view class="bluetext" @click="proxy.$h.jumpUrl(`/pages2/mineinfo/editphone?type=editpassword&disabled=err`)">忘记密码</view>
20 </view> 20 </view>
21 </view> 21 </view>
22 </template> 22 </template>
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 <up-input placeholder="请输入验证码" border="bottom" placeholderClass="placeholderClass" v-model="params.code"></up-input> 14 <up-input placeholder="请输入验证码" border="bottom" placeholderClass="placeholderClass" v-model="params.code"></up-input>
15 </view> 15 </view>
16 <view class="bluetext" style="margin-top: 28rpx" @click="emit('editLoginStateHandler', 3)">账号密码登录</view> 16 <view class="bluetext" style="margin-top: 28rpx" @click="emit('editLoginStateHandler', 3)">账号密码登录</view>
17 - <view style="font-size: 18rpx; color: red">*未注册用户在登录后自动注册</view> 17 + <view style="font-size: 32rpx; color: red; margin-top: 20rpx">*未注册用户在登录后自动注册</view>
18 </view> 18 </view>
19 </template> 19 </template>
20 20
@@ -7,8 +7,6 @@ @@ -7,8 +7,6 @@
7 </view> 7 </view>
8 <image class="login-avatar flexC" src="/static/images/bg.png" mode="aspectFill"></image> 8 <image class="login-avatar flexC" src="/static/images/bg.png" mode="aspectFill"></image>
9 <image class="login-logo flexC" src="/static/images/logo.png" mode="aspectFill"></image> 9 <image class="login-logo flexC" src="/static/images/logo.png" mode="aspectFill"></image>
10 - <!-- <view class="login-phone flexC">187****5857</view>  
11 - <view class="login-remark flexC">认证服务由中国联通服务</view> -->  
12 </template> 10 </template>
13 <template v-if="loginState === 2"> 11 <template v-if="loginState === 2">
14 <PhoneLogin @editLoginStateHandler="(state: number) => loginState = state" ref="phoneLoginRef" /> 12 <PhoneLogin @editLoginStateHandler="(state: number) => loginState = state" ref="phoneLoginRef" />
@@ -17,11 +15,11 @@ @@ -17,11 +15,11 @@
17 <AccountLogin @editLoginStateHandler="(state: number) => loginState = state" ref="accountLoginRef" /> 15 <AccountLogin @editLoginStateHandler="(state: number) => loginState = state" ref="accountLoginRef" />
18 </template> 16 </template>
19 <template v-if="loginState === 4"> 17 <template v-if="loginState === 4">
20 - <view>暂无需求</view> 18 + <view></view>
21 </template> 19 </template>
22 <ConfirmProtocol @login="loginHandler" :loginState="loginState" ref="confirmProtocolRef" /> 20 <ConfirmProtocol @login="loginHandler" :loginState="loginState" ref="confirmProtocolRef" />
23 <template v-if="loginState === 1 && iosVersion >= 13"> 21 <template v-if="loginState === 1 && iosVersion >= 13">
24 - <AppleLogin ref="AppleLoginRef" /> 22 + <AppleLogin v-if="false" ref="AppleLoginRef" />
25 </template> 23 </template>
26 <view v-if="loginState === 1" class="login-other flexC" @click="loginState = 2">其他登录方式</view> 24 <view v-if="loginState === 1" class="login-other flexC" @click="loginState = 2">其他登录方式</view>
27 </view> 25 </view>
@@ -60,9 +58,7 @@ onShow(() => { @@ -60,9 +58,7 @@ onShow(() => {
60 if (version >= 13) { 58 if (version >= 13) {
61 iosVersion.value = version 59 iosVersion.value = version
62 } 60 }
63 - console.log('当前设备为iOS ' + version)  
64 } else { 61 } else {
65 - console.log('当前设备不是iOS')  
66 } 62 }
67 } 63 }
68 }) 64 })
@@ -38,12 +38,14 @@ @@ -38,12 +38,14 @@
38 38
39 <view class="infomain Zindex"> 39 <view class="infomain Zindex">
40 <view class="infomain-title">您已完成认证</view> 40 <view class="infomain-title">您已完成认证</view>
41 - <view style="margin-bottom: 10rpx">{{ UserInfo?.nickname }}</view> 41 + <view style="margin-bottom: 10rpx">
  42 + {{ UserInfo?.nickname }}
  43 + <!-- <text>{{ UserInfo?.doctorUserType ? `- ${UserInfo?.doctorUserType}` : '' }}</text> -->
  44 + </view>
42 <view class="flexX intrbox" style="margin-bottom: 42rpx"> 45 <view class="flexX intrbox" style="margin-bottom: 42rpx">
43 <view> 46 <view>
44 - {{ UserInfo?.hospitalName }}  
45 - <!-- -  
46 - <text>{{ UserInfo?.department.join() }}</text> --> 47 + {{ UserInfo?.hospitalName }} &nbsp;
  48 + <text v-for="_ in UserInfo?.department">{{ _.name || '空的' }}&nbsp;</text>
47 </view> 49 </view>
48 </view> 50 </view>
49 <view class="flexJA"> 51 <view class="flexJA">
@@ -69,7 +71,7 @@ @@ -69,7 +71,7 @@
69 <template #confirmButton> 71 <template #confirmButton>
70 <view class="flexJ"> 72 <view class="flexJ">
71 <up-button type="info" plain shape="circle" text="暂不修改" throttleTime="1000" :customStyle="{ width: '248rpx', height: '92rpx', color: '#000', border: '2rpx solid #e5e5e5' }" @click="showIsEditAuthState = false"></up-button> 73 <up-button type="info" plain shape="circle" text="暂不修改" throttleTime="1000" :customStyle="{ width: '248rpx', height: '92rpx', color: '#000', border: '2rpx solid #e5e5e5' }" @click="showIsEditAuthState = false"></up-button>
72 - <up-button color="#05B8D2" shape="circle" text="修改信息" throttleTime="1000" :customStyle="{ width: '248rpx', height: '92rpx' }" @click="proxy.$h.jumpUrl(`/pages2/auth/step?type=edit`, () => (showIsEditAuthState = false))"></up-button> 74 + <up-button color="#05B8D2" shape="circle" text="修改信息" throttleTime="1000" :customStyle="{ width: '248rpx', height: '92rpx' }" @click="proxy.$h.jumpUrl(`/pages2/auth/step?type=edit&reapply=success`, () => (showIsEditAuthState = false))"></up-button>
73 </view> 75 </view>
74 </template> 76 </template>
75 </u-modal> 77 </u-modal>
@@ -79,8 +81,8 @@ @@ -79,8 +81,8 @@
79 <script setup lang="ts"> 81 <script setup lang="ts">
80 import { ref, getCurrentInstance, ComponentPublicInstance } from 'vue' 82 import { ref, getCurrentInstance, ComponentPublicInstance } from 'vue'
81 import { onLoad, onShow } from '@dcloudio/uni-app' 83 import { onLoad, onShow } from '@dcloudio/uni-app'
82 -import { getMy } from '../../api'  
83 -import type { UserInfoType } from '../../types' 84 +import { getMy, getDepartment } from '../../api'
  85 +import type { UserInfoType, IndexListType } from '../../types'
84 const { proxy } = getCurrentInstance() as { proxy: ComponentPublicInstance } 86 const { proxy } = getCurrentInstance() as { proxy: ComponentPublicInstance }
85 87
86 interface EventType { 88 interface EventType {
@@ -102,6 +104,15 @@ onLoad((e: EventType) => { @@ -102,6 +104,15 @@ onLoad((e: EventType) => {
102 const getUserInfoHandler = async () => { 104 const getUserInfoHandler = async () => {
103 const { result }: { result: UserInfoType } = await getMy() 105 const { result }: { result: UserInfoType } = await getMy()
104 106
  107 + const { result: departmentList }: { result: { records: IndexListType[] } } = await getDepartment({ keyword: '' })
  108 +
  109 + result.doctorUserType = result.doctorUserType
  110 + ?.split(',')
  111 + .map(_ => proxy.$h.optData('doctorUserType')[_])
  112 + .join(' ')
  113 +
  114 + ![null, undefined, ''].includes(result.department) && (result.department = departmentList.records.flatMap(item => item.list).filter(item => result.department.includes(item.id)))
  115 +
105 UserInfo.value = result 116 UserInfo.value = result
106 } 117 }
107 118
1 <template> 1 <template>
2 <u-navbar title="在线认证" :autoBack="true" bgColor="#40434e" placeholder safeAreaInsetTop :titleStyle="{ color: '#fff' }" leftIconColor="#fff"></u-navbar> 2 <u-navbar title="在线认证" :autoBack="true" bgColor="#40434e" placeholder safeAreaInsetTop :titleStyle="{ color: '#fff' }" leftIconColor="#fff"></u-navbar>
3 - <div class="step"> 3 + <view class="step">
4 <view class="step-top flexJ" v-if="!['detail'].includes(Event?.type as string)"> 4 <view class="step-top flexJ" v-if="!['detail'].includes(Event?.type as string)">
5 <view class="flexA"> 5 <view class="flexA">
6 <view class="step-num flexC" :class="{ numac: step === 1 }">1</view> 6 <view class="step-num flexC" :class="{ numac: step === 1 }">1</view>
@@ -30,13 +30,13 @@ @@ -30,13 +30,13 @@
30 <u-form-item labelWidth="160rpx" label="性别" prop="sex" borderBottom @click="showActionSheepHandler('sex')" ref="name"> 30 <u-form-item labelWidth="160rpx" label="性别" prop="sex" borderBottom @click="showActionSheepHandler('sex')" ref="name">
31 <u-input v-model="ShowSelectData.sex" disabled disabledColor="#ffffff" placeholder="请选择性别" border="none" inputAlign="right"></u-input> 31 <u-input v-model="ShowSelectData.sex" disabled disabledColor="#ffffff" placeholder="请选择性别" border="none" inputAlign="right"></u-input>
32 <template #right> 32 <template #right>
33 - <u-icon name="arrow-right"></u-icon> 33 + <u-icon name="arrow-right" v-if="!['detail'].includes(Event?.type as string)"></u-icon>
34 </template> 34 </template>
35 </u-form-item> 35 </u-form-item>
36 <view class="grayLine"></view> 36 <view class="grayLine"></view>
37 - <u-form-item labelWidth="160rpx" label="选择种类" prop="category" borderBottom @click="!formDisabled && proxy.$h.jumpUrl(`/pages2/mineinfo/hospitalList?flag=KESHI`)" ref="selectDepartment"> 37 + <u-form-item labelWidth="160rpx" label="选择种类" prop="doctorUserType" borderBottom @click="!formDisabled && proxy.$h.jumpUrl(`/pages2/mineinfo/hospitalList?flag=KESHI`)" ref="selectDepartment">
38 <view class="flexD" style="width: 100%"> 38 <view class="flexD" style="width: 100%">
39 - <u-checkbox-group v-model="form.category" placement="row" shape="circle"> 39 + <u-checkbox-group v-model="form.doctorUserType" placement="row" shape="circle" :disabled="formDisabled">
40 <u-checkbox activeColor="#05b8d2" name="1" label="猫猫"></u-checkbox> 40 <u-checkbox activeColor="#05b8d2" name="1" label="猫猫"></u-checkbox>
41 <u-checkbox activeColor="#05b8d2" name="2" label="狗狗"></u-checkbox> 41 <u-checkbox activeColor="#05b8d2" name="2" label="狗狗"></u-checkbox>
42 <u-checkbox activeColor="#05b8d2" name="3" label="异宠"></u-checkbox> 42 <u-checkbox activeColor="#05b8d2" name="3" label="异宠"></u-checkbox>
@@ -46,20 +46,20 @@ @@ -46,20 +46,20 @@
46 <u-form-item labelWidth="160rpx" label="选择科室" prop="selectDepartment" borderBottom @click="!formDisabled && proxy.$h.jumpUrl(`/pages2/mineinfo/hospitalList?flag=KESHI`)" ref="selectDepartment"> 46 <u-form-item labelWidth="160rpx" label="选择科室" prop="selectDepartment" borderBottom @click="!formDisabled && proxy.$h.jumpUrl(`/pages2/mineinfo/hospitalList?flag=KESHI`)" ref="selectDepartment">
47 <u-input v-model="form.selectDepartment" disabled disabledColor="#ffffff" placeholder="请选择科室" border="none" inputAlign="right"></u-input> 47 <u-input v-model="form.selectDepartment" disabled disabledColor="#ffffff" placeholder="请选择科室" border="none" inputAlign="right"></u-input>
48 <template #right> 48 <template #right>
49 - <u-icon name="arrow-right"></u-icon> 49 + <u-icon name="arrow-right" v-if="!['detail'].includes(Event?.type as string)"></u-icon>
50 </template> 50 </template>
51 </u-form-item> 51 </u-form-item>
52 <!-- <u-form-item labelWidth="160rpx" label="选择职称" prop="career" borderBottom @click="showActionSheepHandler('career')" ref="career"> --> 52 <!-- <u-form-item labelWidth="160rpx" label="选择职称" prop="career" borderBottom @click="showActionSheepHandler('career')" ref="career"> -->
53 <u-form-item labelWidth="160rpx" label="选择职称" prop="selectCareer" borderBottom @click="!formDisabled && proxy.$h.jumpUrl(`/pages2/mineinfo/hospitalList?flag=ZHICHENG`)" ref="career"> 53 <u-form-item labelWidth="160rpx" label="选择职称" prop="selectCareer" borderBottom @click="!formDisabled && proxy.$h.jumpUrl(`/pages2/mineinfo/hospitalList?flag=ZHICHENG`)" ref="career">
54 <u-input v-model="form.selectCareer" disabled disabledColor="#ffffff" placeholder="请选择职称" border="none" inputAlign="right"></u-input> 54 <u-input v-model="form.selectCareer" disabled disabledColor="#ffffff" placeholder="请选择职称" border="none" inputAlign="right"></u-input>
55 <template #right> 55 <template #right>
56 - <u-icon name="arrow-right"></u-icon> 56 + <u-icon name="arrow-right" v-if="!['detail'].includes(Event?.type as string)"></u-icon>
57 </template> 57 </template>
58 </u-form-item> 58 </u-form-item>
59 <u-form-item labelWidth="160rpx" label="坐诊医院" prop="selectHospital" borderBottom @click="!formDisabled && proxy.$h.jumpUrl(`/pages2/mineinfo/hospitalList?flag=ZUOZHENYIYUAN`)" ref="career"> 59 <u-form-item labelWidth="160rpx" label="坐诊医院" prop="selectHospital" borderBottom @click="!formDisabled && proxy.$h.jumpUrl(`/pages2/mineinfo/hospitalList?flag=ZUOZHENYIYUAN`)" ref="career">
60 <u-input v-model="form.selectHospital" disabled disabledColor="#ffffff" placeholder="请选择医院" border="none" inputAlign="right"></u-input> 60 <u-input v-model="form.selectHospital" disabled disabledColor="#ffffff" placeholder="请选择医院" border="none" inputAlign="right"></u-input>
61 <template #right> 61 <template #right>
62 - <u-icon name="arrow-right"></u-icon> 62 + <u-icon name="arrow-right" v-if="!['detail'].includes(Event?.type as string)"></u-icon>
63 </template> 63 </template>
64 </u-form-item> 64 </u-form-item>
65 <view style="font-size: 18rpx; color: red">若为居家办公则选择宠物研究院</view> 65 <view style="font-size: 18rpx; color: red">若为居家办公则选择宠物研究院</view>
@@ -131,7 +131,7 @@ @@ -131,7 +131,7 @@
131 </view> 131 </view>
132 <u-safe-bottom></u-safe-bottom> 132 <u-safe-bottom></u-safe-bottom>
133 </view> 133 </view>
134 - </div> 134 + </view>
135 <u-action-sheet :show="showActionSheep" :actions="actions" :title="actionsTitle" @close="showActionSheep = false" @select="selectActionSheepHandler"></u-action-sheet> 135 <u-action-sheet :show="showActionSheep" :actions="actions" :title="actionsTitle" @close="showActionSheep = false" @select="selectActionSheepHandler"></u-action-sheet>
136 </template> 136 </template>
137 137
@@ -179,7 +179,7 @@ const form = ref<ApplyAuthType>({ @@ -179,7 +179,7 @@ const form = ref<ApplyAuthType>({
179 selectDepartment: '', 179 selectDepartment: '',
180 selectCareer: '', 180 selectCareer: '',
181 selectHospital: '', 181 selectHospital: '',
182 - category: [] 182 + doctorUserType: []
183 }) 183 })
184 184
185 const actions = ref() 185 const actions = ref()
@@ -196,7 +196,7 @@ const rules = ref({ @@ -196,7 +196,7 @@ const rules = ref({
196 selectDepartment: { type: 'string', required: true, message: '请选择科室', trigger: ['blur', 'change'] }, 196 selectDepartment: { type: 'string', required: true, message: '请选择科室', trigger: ['blur', 'change'] },
197 selectCareer: { type: 'string', required: true, message: '请选择职称', trigger: ['blur', 'change'] }, 197 selectCareer: { type: 'string', required: true, message: '请选择职称', trigger: ['blur', 'change'] },
198 selectHospital: { type: 'string', required: true, message: '请选坐诊医院', trigger: ['blur', 'change'] }, 198 selectHospital: { type: 'string', required: true, message: '请选坐诊医院', trigger: ['blur', 'change'] },
199 - category: { type: 'array', min: 1, required: true, message: '请选择种类', trigger: ['blur', 'change'] } 199 + doctorUserType: { type: 'array', min: 1, required: true, message: '请选择种类', trigger: ['blur', 'change'] }
200 }) 200 })
201 201
202 const formDisabled = ref<boolean>(false) // true 禁用代表回显数据 false 可以填写可以提交 202 const formDisabled = ref<boolean>(false) // true 禁用代表回显数据 false 可以填写可以提交
@@ -268,12 +268,15 @@ const uploadFormImgHandler = () => @@ -268,12 +268,15 @@ const uploadFormImgHandler = () =>
268 const submitAuthHandler = async () => { 268 const submitAuthHandler = async () => {
269 if (!form.value.file.length) return uni.$u.toast('请上传资质证明') 269 if (!form.value.file.length) return uni.$u.toast('请上传资质证明')
270 270
271 - await updateRegister({ 271 + const data = {
272 ...form.value, 272 ...form.value,
273 department: typeof form.value.department === 'string' ? form.value.department : JSON.stringify(form.value.department), 273 department: typeof form.value.department === 'string' ? form.value.department : JSON.stringify(form.value.department),
274 career: typeof form.value.career === 'string' ? form.value.career : JSON.stringify(form.value.career), 274 career: typeof form.value.career === 'string' ? form.value.career : JSON.stringify(form.value.career),
275 - hospital: typeof form.value.hospital === 'string' ? form.value.hospital : JSON.stringify(form.value.hospital)  
276 - }) 275 + hospital: typeof form.value.hospital === 'string' ? form.value.hospital : JSON.stringify(form.value.hospital),
  276 + doctorUserType: form.value.doctorUserType?.join()
  277 + }
  278 +
  279 + await updateRegister(data)
277 280
278 const delta = Event.value?.reapply === 'success' ? 2 : 1 281 const delta = Event.value?.reapply === 'success' ? 2 : 1
279 282
@@ -310,7 +313,8 @@ const getVeterinaryHandler = async () => { @@ -310,7 +313,8 @@ const getVeterinaryHandler = async () => {
310 ? JSON.parse(result.hospital as string) 313 ? JSON.parse(result.hospital as string)
311 .map(item => item.name) 314 .map(item => item.name)
312 .join() 315 .join()
313 - : result.hospital 316 + : result.hospital,
  317 + doctorUserType: result.doctorUserType?.split(',')
314 } 318 }
315 } 319 }
316 320
@@ -17,9 +17,9 @@ @@ -17,9 +17,9 @@
17 <text class="message-text">{{ _.text }}</text> 17 <text class="message-text">{{ _.text }}</text>
18 </view> 18 </view>
19 </view> 19 </view>
20 - <!-- <view>  
21 - <view class="message-time">{{ _.time }}</view>  
22 - </view> --> 20 + <view>
  21 + <view class="message-time">{{ _.time }}</view>
  22 + </view>
23 </view> 23 </view>
24 <view class="flexD"> 24 <view class="flexD">
25 <u-line margin="30rpx 0" v-if="index !== list.length - 1" length="80%"></u-line> 25 <u-line margin="30rpx 0" v-if="index !== list.length - 1" length="80%"></u-line>
@@ -5,26 +5,31 @@ @@ -5,26 +5,31 @@
5 </template> 5 </template>
6 </u-navbar> 6 </u-navbar>
7 <view class="msglist"> 7 <view class="msglist">
8 - <view class="msglist-item" v-for="_ in pageList?.records" :key="_.id" @click="jumpUrlHandler(_)">  
9 - <view class="flexJ" style="margin-bottom: 28rpx">  
10 - <view class="msglist-title">{{ proxy.$h.optObjectValue('MessageType', _?.type) }}</view>  
11 - <view class="msglist-time">{{ _?.time }}</view> 8 + <template v-if="pageList?.records.length">
  9 + <view class="msglist-item" v-for="_ in pageList?.records" :key="_.id" @click="jumpUrlHandler(_)">
  10 + <view class="flexJ" style="margin-bottom: 28rpx">
  11 + <view class="msglist-title">{{ proxy.$h.optObjectValue('MessageType', _?.type) }}</view>
  12 + <view class="msglist-time">{{ _?.time }}</view>
  13 + </view>
  14 + <view class="msglist-message">{{ _?.content }}</view>
  15 + <u-line margin="32rpx 0"></u-line>
  16 + <view class="flexJ">
  17 + <view class="msglist-todetail">查看详情</view>
  18 + <u-icon size="20" name="arrow-right" color="#c1c1c1"></u-icon>
  19 + </view>
12 </view> 20 </view>
13 - <view class="msglist-message">{{ _?.content }}</view>  
14 - <u-line margin="32rpx 0"></u-line>  
15 - <view class="flexJ">  
16 - <view class="msglist-todetail">查看详情</view>  
17 - <u-icon size="20" name="arrow-right" color="#c1c1c1"></u-icon>  
18 - </view>  
19 - </view>  
20 -  
21 - <view class="msglist-empty flexC">没有更多数据了~</view> 21 + <view class="msglist-empty flexC">没有更多数据了~</view>
  22 + </template>
  23 + <template v-else>
  24 + <Empty text="暂无通知" />
  25 + </template>
22 </view> 26 </view>
23 </template> 27 </template>
24 28
25 <script setup lang="ts"> 29 <script setup lang="ts">
26 import { ref, getCurrentInstance, ComponentPublicInstance } from 'vue' 30 import { ref, getCurrentInstance, ComponentPublicInstance } from 'vue'
27 import { onLoad, onReachBottom } from '@dcloudio/uni-app' 31 import { onLoad, onReachBottom } from '@dcloudio/uni-app'
  32 +import Empty from '@/components/Empty.vue'
28 import { getMsg_list, getis_all_read } from '../../api' 33 import { getMsg_list, getis_all_read } from '../../api'
29 import { MessageListParamsType, PageListType, MessageListType } from '../../types' 34 import { MessageListParamsType, PageListType, MessageListType } from '../../types'
30 35
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 </u-sticky> 5 </u-sticky>
6 <image src="/static/images/commentBg.png" class="mineCom-bg" mode="aspectFill" /> 6 <image src="/static/images/commentBg.png" class="mineCom-bg" mode="aspectFill" />
7 7
8 - <div class="mineCom Zindex"> 8 + <view class="mineCom Zindex">
9 <template v-if="pageList.records.length"> 9 <template v-if="pageList.records.length">
10 <view class="mineCom-item" v-for="_ in pageList?.records" :key="_.id"> 10 <view class="mineCom-item" v-for="_ in pageList?.records" :key="_.id">
11 <view class="flexJ" style="margin-bottom: 50rpx"> 11 <view class="flexJ" style="margin-bottom: 50rpx">
@@ -51,7 +51,7 @@ @@ -51,7 +51,7 @@
51 <view class="mineCom-time">没有更多数据</view> 51 <view class="mineCom-time">没有更多数据</view>
52 </view> 52 </view>
53 </template> 53 </template>
54 - </div> 54 + </view>
55 </template> 55 </template>
56 56
57 <script setup lang="ts"> 57 <script setup lang="ts">
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 </view> 5 </view>
6 <view class="phone-title">{{ Event?.type === 'editpassword' ? '修改密码' : '更换手机号' }}</view> 6 <view class="phone-title">{{ Event?.type === 'editpassword' ? '修改密码' : '更换手机号' }}</view>
7 <view style="margin-bottom: 56rpx"> 7 <view style="margin-bottom: 56rpx">
8 - <up-input placeholder="请输入手机号" border="bottom" placeholderClass="placeholderClass" v-model="phone" disabled disabledColor="#fff"> 8 + <up-input placeholder="请输入手机号" border="bottom" placeholderClass="placeholderClass" v-model="phone" :disabled="Event?.disabled === 'err' ? false : true" disabledColor="#fff">
9 <template #suffix> 9 <template #suffix>
10 <view class="phone-suffix" @click="sendCodeHandler">{{ countdown === 60 ? '获取验证码' : `${countdown}秒后可重新获取` }}</view> 10 <view class="phone-suffix" @click="sendCodeHandler">{{ countdown === 60 ? '获取验证码' : `${countdown}秒后可重新获取` }}</view>
11 </template> 11 </template>
@@ -34,6 +34,7 @@ import { DebounceBy } from '../../utils/debounceBy' @@ -34,6 +34,7 @@ import { DebounceBy } from '../../utils/debounceBy'
34 34
35 interface EventType { 35 interface EventType {
36 type: string 36 type: string
  37 + disabled?: string
37 } 38 }
38 39
39 const Event = ref<EventType>() 40 const Event = ref<EventType>()
@@ -96,8 +97,6 @@ const editPhoneHandler = async () => { @@ -96,8 +97,6 @@ const editPhoneHandler = async () => {
96 uni.$u.toast(error) 97 uni.$u.toast(error)
97 } 98 }
98 } 99 }
99 -  
100 - // proxy.$h.jumpUrl(`/pages2/mineinfo/editPasssword`)  
101 } 100 }
102 101
103 onLoad((e: EventType) => { 102 onLoad((e: EventType) => {
1 <template> 1 <template>
2 <u-navbar title="更改状态" :autoBack="true" bgColor="#fff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }" leftIconColor="#000"></u-navbar> 2 <u-navbar title="更改状态" :autoBack="true" bgColor="#fff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }" leftIconColor="#000"></u-navbar>
3 - <div class="state"> 3 + <view class="state">
4 <view class="flexJ" style="margin-bottom: 62rpx"> 4 <view class="flexJ" style="margin-bottom: 62rpx">
5 <view v-for="(_, index) in statelist" :key="index" class="stateBtn flexC" :class="{ activeBtn: params.state === _.value }" @click="params.state = _.value">{{ _.title }}</view> 5 <view v-for="(_, index) in statelist" :key="index" class="stateBtn flexC" :class="{ activeBtn: params.state === _.value }" @click="params.state = _.value">{{ _.title }}</view>
6 </view> 6 </view>
@@ -57,7 +57,7 @@ @@ -57,7 +57,7 @@
57 <view style="margin-top: 160rpx" v-if="params.state === 0"> 57 <view style="margin-top: 160rpx" v-if="params.state === 0">
58 <up-button color="#05B8D2" shape="circle" text="提交" throttleTime="1500" @click="submitMineStateHandler(params.state)"></up-button> 58 <up-button color="#05B8D2" shape="circle" text="提交" throttleTime="1500" @click="submitMineStateHandler(params.state)"></up-button>
59 </view> 59 </view>
60 - </div> 60 + </view>
61 <u-datetime-picker :show="showTimePickerState" mode="time" @cancel="showTimePickerState = false" @confirm="confirmSelectTimeHandler"></u-datetime-picker> 61 <u-datetime-picker :show="showTimePickerState" mode="time" @cancel="showTimePickerState = false" @confirm="confirmSelectTimeHandler"></u-datetime-picker>
62 </template> 62 </template>
63 63
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 <u-navbar title="账户设置" :autoBack="true" bgColor="#fff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }" leftIconColor="#000"></u-navbar> 2 <u-navbar title="账户设置" :autoBack="true" bgColor="#fff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }" leftIconColor="#000"></u-navbar>
3 <u-cell-group> 3 <u-cell-group>
4 <template v-for="_ in accountList"> 4 <template v-for="_ in accountList">
5 - <u-cell 5 + <!-- <u-cell
6 :title="_.title + _.account" 6 :title="_.title + _.account"
7 :isLink="true" 7 :isLink="true"
8 @click=" 8 @click="
@@ -13,7 +13,8 @@ @@ -13,7 +13,8 @@
13 nameFlag = _.nameFlag 13 nameFlag = _.nameFlag
14 } 14 }
15 " 15 "
16 - ></u-cell> 16 + ></u-cell> -->
  17 + <u-cell :title="_.title + _.account" :isLink="true" @click="proxy.$h.jumpUrl(proxy.$h.setObjToUrlParams(_.url, _))"></u-cell>
17 </template> 18 </template>
18 </u-cell-group> 19 </u-cell-group>
19 <u-modal :show="bindAccountModalState" :title="''" @confirm="bindAccountHandler" @cancel="bindAccountModalState = false" showCancelButton confirmText="确认绑定"> 20 <u-modal :show="bindAccountModalState" :title="''" @confirm="bindAccountHandler" @cancel="bindAccountModalState = false" showCancelButton confirmText="确认绑定">
@@ -50,8 +51,8 @@ const bindAccountModalState = ref<boolean>(false) @@ -50,8 +51,8 @@ const bindAccountModalState = ref<boolean>(false)
50 const bindAccountModalTitle = ref<string>('') 51 const bindAccountModalTitle = ref<string>('')
51 52
52 const accountList = ref([ 53 const accountList = ref([
53 - { account: '', title: '微信账户', nameFlag: 'doctorWXRealName', flag: 'wxUserName' },  
54 - { account: '', title: '支付宝账户', nameFlag: 'doctorRealName', flag: 'aliUserName' } 54 + { account: '', title: '微信账户', nameFlag: 'doctorWXRealName', url: '/pages2/money/addAccount', flag: 'wxUserName' },
  55 + { account: '', title: '支付宝账户', nameFlag: 'doctorRealName', url: '/pages2/money/addAccount', flag: 'aliUserName' }
55 ]) 56 ])
56 57
57 onShow(() => { 58 onShow(() => {
1 <template> 1 <template>
2 <u-navbar title="添加银行卡" :autoBack="true" bgColor="#ffffff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }"></u-navbar> 2 <u-navbar title="添加银行卡" :autoBack="true" bgColor="#ffffff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }"></u-navbar>
3 - <div class="step"> 3 + <view class="step">
4 <view class="main"> 4 <view class="main">
5 <u-form labelPosition="left" :model="form" :rules="rules" ref="stepForm1"> 5 <u-form labelPosition="left" :model="form" :rules="rules" ref="stepForm1">
6 <view class="grayLine"></view> 6 <view class="grayLine"></view>
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 </u-form> 33 </u-form>
34 <up-button color="#05B8D2" shape="circle" text="同意协议并添加" throttleTime="1500" :customStyle="{ width: '100%', height: '94rpx', fontWeight: 700 }" @click="confirmAddBankCardHandler"></up-button> 34 <up-button color="#05B8D2" shape="circle" text="同意协议并添加" throttleTime="1500" :customStyle="{ width: '100%', height: '94rpx', fontWeight: 700 }" @click="confirmAddBankCardHandler"></up-button>
35 </view> 35 </view>
36 - </div> 36 + </view>
37 </template> 37 </template>
38 38
39 <script setup lang="ts"> 39 <script setup lang="ts">
  1 +<template>
  2 + <u-navbar title="账户设置" :autoBack="true" bgColor="#fff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }" leftIconColor="#000"></u-navbar>
  3 + <view class="step">
  4 + <view class="main">
  5 + <u-form labelPosition="left" :model="form" ref="AddAccountFormRef">
  6 + <view class="grayLine"></view>
  7 + <u-form-item labelWidth="200rpx" :label="Event.title" :prop="Event.flag" borderBottom>
  8 + <u-input :placeholder="`请输入${Event.title}`" border="none" v-model="form[Event.flag]" disabledColor="#ffffff"></u-input>
  9 + </u-form-item>
  10 + <u-form-item labelWidth="200rpx" :label="`真实姓名`" :prop="Event.nameFlag" borderBottom>
  11 + <u-input :placeholder="`请输入真实姓名`" border="none" v-model="form[Event.nameFlag]" disabledColor="#ffffff"></u-input>
  12 + </u-form-item>
  13 + <u-form-item labelWidth="200rpx" :label="`手机号`" prop="phone" borderBottom>
  14 + <u-input :placeholder="`请输入手机号`" border="none" v-model="UserInfo.phone" disabledColor="#ffffff" disabled></u-input>
  15 + <view style="color: #06b8d3; font-size: 26rpx" @click="sendCodeHandler">{{ countdown === 60 ? '获取验证码' : `${countdown}秒后可重新获取` }}</view>
  16 + </u-form-item>
  17 + <u-form-item labelWidth="200rpx" :label="`验证码`" prop="code" borderBottom>
  18 + <u-input :placeholder="`请输入验证码`" border="none" v-model="form.code" disabledColor="#ffffff"></u-input>
  19 + </u-form-item>
  20 + </u-form>
  21 + </view>
  22 + <up-button color="#05B8D2" shape="circle" text="添加" throttleTime="1500" :customStyle="{ width: '90%', height: '94rpx', marginTop: '32rpx' }" @click="bindAccountHandler"></up-button>
  23 + </view>
  24 +</template>
  25 +
  26 +<script setup lang="ts">
  27 +import { ref, getCurrentInstance, ComponentPublicInstance, nextTick } from 'vue'
  28 +import { onLoad } from '@dcloudio/uni-app'
  29 +import useTimeHandler from '@/hooks/useTimeChange'
  30 +import { DebounceBy } from '@/utils/debounceBy'
  31 +import { updateBindUserCard, getChangePhonePwdCode } from '../../api'
  32 +import { BindUserCardType, AddAccountEventType } from '../../types'
  33 +import { AddAccountFormRules } from '@/static/json/rules'
  34 +
  35 +const { proxy } = getCurrentInstance() as { proxy: ComponentPublicInstance }
  36 +
  37 +const [countdown, startCountdown] = useTimeHandler()
  38 +
  39 +const Event = ref<AddAccountEventType>({
  40 + account: '',
  41 + flag: '',
  42 + nameFlag: '',
  43 + title: '',
  44 + url: ''
  45 +})
  46 +
  47 +const AddAccountFormRef = ref()
  48 +
  49 +const UserInfo = ref()
  50 +
  51 +const form = ref<BindUserCardType>({
  52 + wxUserName: '',
  53 + aliUserName: '',
  54 + doctorRealName: '',
  55 + doctorWXRealName: ''
  56 +})
  57 +
  58 +onLoad(async (e: AddAccountEventType) => {
  59 + Event.value = e
  60 +
  61 + UserInfo.value = uni.getStorageSync('UserInfo')
  62 +
  63 + nextTick(() => {
  64 + AddAccountFormRef.value.setRules(AddAccountFormRules)
  65 + })
  66 +})
  67 +
  68 +const clickGetCodeHandler = async () => await getChangePhonePwdCode({ type: 3 })
  69 +
  70 +const sendCodeHandler = DebounceBy(() => startCountdown(clickGetCodeHandler), 2000)
  71 +
  72 +const bindAccountHandler = () =>
  73 + AddAccountFormRef.value.validate().then(async () => {
  74 + await updateBindUserCard({ [Event.value.flag]: form.value[Event.value.flag].replace(/\s/g, ''), [Event.value.nameFlag]: form.value[Event.value.nameFlag] })
  75 +
  76 + proxy.$h.timeCallBack('绑定成功')
  77 + })
  78 +</script>
  79 +
  80 +<style lang="scss" scoped>
  81 +page {
  82 + background: #f6f8fa;
  83 +}
  84 +.step {
  85 + &-top {
  86 + background: #fff;
  87 + box-sizing: border-box;
  88 + padding: 44rpx 24rpx;
  89 + margin-bottom: 20rpx;
  90 + }
  91 + &-num {
  92 + width: 36rpx;
  93 + height: 36rpx;
  94 + box-sizing: border-box;
  95 + padding: 2rpx 10rpx;
  96 + border-radius: 50%;
  97 + background: #cccccc;
  98 + color: #ffffff;
  99 + font-size: 24rpx;
  100 + margin-right: 14rpx;
  101 + }
  102 + .numac {
  103 + background: #05b8d2;
  104 + }
  105 + &-title {
  106 + color: #cccccc;
  107 + font-size: 30rpx;
  108 + font-weight: 700;
  109 + }
  110 + .titleac {
  111 + color: #05b8d2;
  112 + }
  113 + &-img {
  114 + width: 52rpx;
  115 + height: 52rpx;
  116 + }
  117 +}
  118 +.main {
  119 + box-sizing: border-box;
  120 + padding: 0 32rpx;
  121 + background: #fff;
  122 + .formSubTitle {
  123 + margin-bottom: 46rpx;
  124 + color: #666666;
  125 + font-size: 24rpx;
  126 + }
  127 + .fileImg {
  128 + position: relative;
  129 + .fileimage {
  130 + width: 210rpx;
  131 + height: 210rpx;
  132 + border-radius: 24rpx;
  133 + margin-right: 24rpx;
  134 + }
  135 + .fileimage:nth-child(3n) {
  136 + margin-right: 0 !important;
  137 + }
  138 + .close {
  139 + position: absolute;
  140 + top: 12rpx;
  141 + right: 12rpx;
  142 + width: 40rpx;
  143 + height: 40rpx;
  144 + border-radius: 50%;
  145 + }
  146 + }
  147 + .uploadImg {
  148 + box-sizing: border-box;
  149 + padding: 68rpx 60rpx 60rpx;
  150 + border: 1rpx dashed #cbcbcb;
  151 + color: #999999;
  152 + font-size: 22rpx;
  153 + font-weight: 700;
  154 + image {
  155 + width: 48rpx;
  156 + height: 48rpx;
  157 + margin-bottom: 4rpx;
  158 + }
  159 + }
  160 + .formTitle {
  161 + color: #323233;
  162 + font-size: 30rpx;
  163 + font-weight: 700;
  164 + box-sizing: border-box;
  165 + padding: 30rpx 0;
  166 + }
  167 +}
  168 +</style>
@@ -101,11 +101,6 @@ @@ -101,11 +101,6 @@
101 :showStep="`err`" 101 :showStep="`err`"
102 /> 102 />
103 </u-popup> 103 </u-popup>
104 - <div id="u-a-p">  
105 - <div>  
106 - <div></div>  
107 - </div>  
108 - </div>  
109 </template> 104 </template>
110 105
111 <script setup lang="ts"> 106 <script setup lang="ts">
@@ -5,9 +5,14 @@ @@ -5,9 +5,14 @@
5 </view> 5 </view>
6 <view class="Prescription"> 6 <view class="Prescription">
7 <view class="Prescription-title flexC" v-if="props.title">{{ props.title }}</view> 7 <view class="Prescription-title flexC" v-if="props.title">{{ props.title }}</view>
8 - <template v-if="!['success'].includes(props.isRenew)"> 8 +
  9 + <!-- <template v-if="!['success'].includes(props.isRenew) && ![null, undefined, ''].includes(PrescriptionDetail?.prescriptionForm)">
9 <view class="text mb24">问诊病情</view> 10 <view class="text mb24">问诊病情</view>
10 - <view class="text mb24">{{ PrescriptionDetail?.supplement || '病情描述' }}</view> 11 + <view class="text mb24">{{ PrescriptionDetail?.prescriptionForm || '病情描述' }}</view>
  12 + </template> -->
  13 + <template v-if="!['success'].includes(props.isRenew) && ![null, undefined, ''].includes(PrescriptionDetail?.supplement) && props.showX">
  14 + <view class="text mb24">{{ props.showX ? '续方原因' : '问诊病情' }}</view>
  15 + <view class="text mb24">{{ PrescriptionDetail?.supplement || '续方原因' }}</view>
11 </template> 16 </template>
12 <template v-if="![null, undefined, ''].includes(PrescriptionDetail?.renewRemark) && ['success'].includes(props.isRenew)"> 17 <template v-if="![null, undefined, ''].includes(PrescriptionDetail?.renewRemark) && ['success'].includes(props.isRenew)">
13 <view class="text mb24">续方原因</view> 18 <view class="text mb24">续方原因</view>
@@ -82,13 +87,15 @@ interface IProps { @@ -82,13 +87,15 @@ interface IProps {
82 showTopState: boolean 87 showTopState: boolean
83 showStep?: string 88 showStep?: string
84 order?: string 89 order?: string
  90 + showX?: boolean
85 } 91 }
86 const props = withDefaults(defineProps<IProps>(), { 92 const props = withDefaults(defineProps<IProps>(), {
87 bg: '#fff', 93 bg: '#fff',
88 isRenew: 'err', 94 isRenew: 'err',
89 showTopState: true, 95 showTopState: true,
90 showStep: 'success', 96 showStep: 'success',
91 - order: 'xf' 97 + order: 'xf',
  98 + showX: false
92 }) 99 })
93 100
94 const amount = computed(() => { 101 const amount = computed(() => {
@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
30 </view> 30 </view>
31 <u-line margin="32rpx 0 22rpx 0"></u-line> 31 <u-line margin="32rpx 0 22rpx 0"></u-line>
32 <view class="moneytext flexD" v-if="!props.isPrescriptionDrug && !props.isRecord">¥{{ props.item?.award || 0 }}/预计收入</view> 32 <view class="moneytext flexD" v-if="!props.isPrescriptionDrug && !props.isRecord">¥{{ props.item?.award || 0 }}/预计收入</view>
  33 + <view v-if="[2, '2'].includes(props.item.renewExamineState as string)" style="font-size: 20rpx">驳回原因:{{ props.item.examineRemark }}</view>
33 <view class="flexD"> 34 <view class="flexD">
34 <view class="flexA"> 35 <view class="flexA">
35 <!-- <up-button type="info" @click="clickOrderItemHandler" plain shape="circle" text="查看" throttleTime="1500" :customStyle="{ width: '170rpx', marginRight: '20rpx', fontWeight: 700 }"></up-button> --> 36 <!-- <up-button type="info" @click="clickOrderItemHandler" plain shape="circle" text="查看" throttleTime="1500" :customStyle="{ width: '170rpx', marginRight: '20rpx', fontWeight: 700 }"></up-button> -->
@@ -60,7 +61,7 @@ @@ -60,7 +61,7 @@
60 </view> 61 </view>
61 </u-modal> 62 </u-modal>
62 <u-popup :show="showPrescriptionState" @close="showPrescriptionState = false" mode="bottom" closeIconPos="top-right" closeable round="20"> 63 <u-popup :show="showPrescriptionState" @close="showPrescriptionState = false" mode="bottom" closeIconPos="top-right" closeable round="20">
63 - <Prescription :showTopState="false" :PrescriptionDetail="PrescriptionDetail" :isRenew="isRenew" bg="linear-gradient(188deg, #E0FFF4 5.54%, #FFF 24.89%)" :title="`${props.item.user?.nickName}的处方单`" showStep="err" /> 64 + <Prescription :showTopState="false" :PrescriptionDetail="PrescriptionDetail" :isRenew="isRenew" bg="linear-gradient(188deg, #E0FFF4 5.54%, #FFF 24.89%)" :title="`${props.item.user?.nickName}的处方单`" showStep="err" :showX="true" />
64 </u-popup> 65 </u-popup>
65 </template> 66 </template>
66 67
@@ -17,16 +17,21 @@ @@ -17,16 +17,21 @@
17 ></u-tabs> 17 ></u-tabs>
18 </u-sticky> 18 </u-sticky>
19 <view class="order"> 19 <view class="order">
20 - <template v-for="_ in orderList">  
21 - <OrderCard  
22 - :isPrescriptionDrug="Boolean(orderState)"  
23 - :isRecords="Event?.isRecords"  
24 - :bg="Event?.isRecords === 'success' ? 'linear-gradient(188deg, #E0FFF4 5.54%, #FFF 24.89%)' : '#fff'"  
25 - :isRecord="false"  
26 - :item="_"  
27 - @editIsJumpHandler="e => (isJump = e)"  
28 - @fetchOrderListHandler="orderStore.getOrderListHandler(true, orderState, subOrderState)"  
29 - /> 20 + <template v-if="orderList.length">
  21 + <template v-for="_ in orderList">
  22 + <OrderCard
  23 + :isPrescriptionDrug="Boolean(orderState)"
  24 + :isRecords="Event?.isRecords"
  25 + :bg="Event?.isRecords === 'success' ? 'linear-gradient(188deg, #E0FFF4 5.54%, #FFF 24.89%)' : '#fff'"
  26 + :isRecord="false"
  27 + :item="_"
  28 + @editIsJumpHandler="e => (isJump = e)"
  29 + @fetchOrderListHandler="orderStore.getOrderListHandler(true, orderState, subOrderState)"
  30 + />
  31 + </template>
  32 + </template>
  33 + <template v-else>
  34 + <Empty :text="Event?.isRecords !== 'success' ? '暂无订单信息' : '暂无问诊记录'" />
30 </template> 35 </template>
31 </view> 36 </view>
32 </template> 37 </template>
@@ -38,6 +43,7 @@ import { storeToRefs } from 'pinia' @@ -38,6 +43,7 @@ import { storeToRefs } from 'pinia'
38 import { useOrderStore } from '../../store/order' 43 import { useOrderStore } from '../../store/order'
39 import type { SubOrderTabsType } from '@/types' 44 import type { SubOrderTabsType } from '@/types'
40 import OrderCard from './com/OrderCard.vue' 45 import OrderCard from './com/OrderCard.vue'
  46 +import Empty from '@/components/Empty.vue'
41 import { imlogin } from '../../hooks/imLogin' 47 import { imlogin } from '../../hooks/imLogin'
42 48
43 interface EventType { 49 interface EventType {
1 <template> 1 <template>
2 <u-navbar title="续方" :autoBack="true" bgColor="#ffffff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }"></u-navbar> 2 <u-navbar title="续方" :autoBack="true" bgColor="#ffffff" placeholder safeAreaInsetTop :titleStyle="{ color: '#000' }"></u-navbar>
3 <view class="Renew"> 3 <view class="Renew">
4 - <template v-for="_ in pageList?.records">  
5 - <!-- <template v-for="_ in 2"> -->  
6 - <xfCom :isRecord="true" bg="#fff" @confirmSubmitExamineOrderStateHandler="getListHandler(true)" :isPrescriptionDrug="false" :item="_" /> 4 + <template v-if="pageList?.records.length">
  5 + <template v-for="_ in pageList?.records">
  6 + <!-- <template v-for="_ in 2"> -->
  7 + <xfCom :isRecord="true" bg="#fff" @confirmSubmitExamineOrderStateHandler="getListHandler(true)" :isPrescriptionDrug="false" :item="_" />
  8 + </template>
  9 + </template>
  10 + <template v-else>
  11 + <Empty text="暂无续方订单" />
7 </template> 12 </template>
8 </view> 13 </view>
9 </template> 14 </template>
@@ -15,6 +20,7 @@ import { storeToRefs } from 'pinia' @@ -15,6 +20,7 @@ import { storeToRefs } from 'pinia'
15 import { getOrder_renew_list } from '@/api' 20 import { getOrder_renew_list } from '@/api'
16 import { PageListType, RenewListType } from '../../types' 21 import { PageListType, RenewListType } from '../../types'
17 import xfCom from './com/xfCom.vue' 22 import xfCom from './com/xfCom.vue'
  23 +import Empty from '@/components/Empty.vue'
18 24
19 const { proxy } = getCurrentInstance() as { proxy: ComponentPublicInstance } 25 const { proxy } = getCurrentInstance() as { proxy: ComponentPublicInstance }
20 26
  1 +export const AddAccountFormRules = {
  2 + wxUserName: { type: 'string', required: true, message: '请填写微信账户', trigger: ['blur', 'change'] },
  3 + aliUserName: { type: 'string', required: true, message: '请填写支付宝账户', trigger: ['blur', 'change'] },
  4 + doctorRealName: { type: 'string', required: true, message: '请填写真实姓名', trigger: ['blur', 'change'] },
  5 + doctorWXRealName: { type: 'string', required: true, message: '请填写真实姓名', trigger: ['blur', 'change'] },
  6 + code: { type: 'string', required: true, message: '请填写验证码', trigger: ['blur', 'change'] }
  7 +}
@@ -15,6 +15,7 @@ export interface ApplyAuthType { @@ -15,6 +15,7 @@ export interface ApplyAuthType {
15 selectDepartment?: string 15 selectDepartment?: string
16 selectCareer?: string 16 selectCareer?: string
17 selectHospital?: string 17 selectHospital?: string
  18 + doctorUserType?: string[]
18 [property: string]: any; 19 [property: string]: any;
19 20
20 } 21 }
@@ -76,6 +77,8 @@ export interface BindUserCardType { @@ -76,6 +77,8 @@ export interface BindUserCardType {
76 aliUserName?: string 77 aliUserName?: string
77 doctorRealName?: string 78 doctorRealName?: string
78 doctorWXRealName?: string 79 doctorWXRealName?: string
  80 + code?: string
  81 + [property: string]: any;
79 } 82 }
80 83
81 // 续方订单审核 84 // 续方订单审核
@@ -236,4 +239,13 @@ export interface DiaLogEventType { @@ -236,4 +239,13 @@ export interface DiaLogEventType {
236 239
237 export interface IcomeEventType { 240 export interface IcomeEventType {
238 flag?: string 241 flag?: string
  242 +}
  243 +
  244 +export interface AddAccountEventType {
  245 + account: string
  246 + flag: string
  247 + nameFlag: string
  248 + title: string
  249 + url: string
  250 + [property: string]: any;
239 } 251 }
@@ -78,6 +78,7 @@ export interface VeterinaryType { @@ -78,6 +78,7 @@ export interface VeterinaryType {
78 introduction: string // 个人简介 78 introduction: string // 个人简介
79 qualifications: string // 资质证明 79 qualifications: string // 资质证明
80 hospital?: string 80 hospital?: string
  81 + doctorUserType?: string
81 [property: string]: any; 82 [property: string]: any;
82 } 83 }
83 84
@@ -101,6 +102,7 @@ export interface UserInfoType { @@ -101,6 +102,7 @@ export interface UserInfoType {
101 state: number // 接诊状态 0-暂不接诊 1-在线坐诊 102 state: number // 接诊状态 0-暂不接诊 1-在线坐诊
102 amount: number // 可提现金额 103 amount: number // 可提现金额
103 hospitalName?: string; // 坐诊医院名称 104 hospitalName?: string; // 坐诊医院名称
  105 + doctorUserType?: string
104 [property: string]: any; 106 [property: string]: any;
105 } 107 }
106 108
@@ -10,7 +10,7 @@ const GlobalData = { @@ -10,7 +10,7 @@ const GlobalData = {
10 consultationWay: { 10: '快速问诊', 21: '专家图文语音问诊', 22: '专家视频问诊', 23: '专家电话问诊', 'err': '状态码错误' }, 10 consultationWay: { 10: '快速问诊', 21: '专家图文语音问诊', 22: '专家视频问诊', 23: '专家电话问诊', 'err': '状态码错误' },
11 isReply: { 0: '否', 1: '是', 'err': '状态码错误' }, 11 isReply: { 0: '否', 1: '是', 'err': '状态码错误' },
12 paramsOrderState: ['', 20, 30, 40, 50, 50], 12 paramsOrderState: ['', 20, 30, 40, 50, 50],
13 - orderState: { 10: '待接诊', 20: '待问诊', 30: '问诊中', 40: '问诊结束', 50: '已取消', 'err': '状态码错误' }, 13 + orderState: { 10: '待接诊', 20: '待问诊', 30: '问诊中', 40: '问诊结束', 50: '已取消', 60: '已退款', 'err': '状态码错误' },
14 paramsstate: ['', 0, 1, 2], 14 paramsstate: ['', 0, 1, 2],
15 state: { 0: '待支付', 1: '待发货', 2: '已发货', 3: '已完成', 4: '已取消', 'err': '状态码错误' }, 15 state: { 0: '待支付', 1: '待发货', 2: '已发货', 3: '已完成', 4: '已取消', 'err': '状态码错误' },
16 isSterilization: { 0: '未绝育', 1: '已绝育', 'err': '状态码错误' }, // 是否绝育 16 isSterilization: { 0: '未绝育', 1: '已绝育', 'err': '状态码错误' }, // 是否绝育
@@ -24,7 +24,8 @@ const GlobalData = { @@ -24,7 +24,8 @@ const GlobalData = {
24 symptom: { 1: '呕吐', 2: '软便拉稀', 3: '皮肤问题', 4: '眼睛问题', 5: '泌尿问题', 6: '绝育', 7: '疫苗', 8: '驱虫', 9: '养护问题', 10: '其他', 'err': '状态码错误' }, 24 symptom: { 1: '呕吐', 2: '软便拉稀', 3: '皮肤问题', 4: '眼睛问题', 5: '泌尿问题', 6: '绝育', 7: '疫苗', 8: '驱虫', 9: '养护问题', 10: '其他', 'err': '状态码错误' },
25 renewExamineState: { 0: '待审核', 1: '审核通过', 2: '审核驳回', 6: '审核驳回', 'err': '状态码错误' }, 25 renewExamineState: { 0: '待审核', 1: '审核通过', 2: '审核驳回', 6: '审核驳回', 'err': '状态码错误' },
26 logisticsState: { 0: '待发货', 1: '已发货', 2: '已完成', 3: '已退货', 'err': '暂无' }, 26 logisticsState: { 0: '待发货', 1: '已发货', 2: '已完成', 3: '已退货', 'err': '暂无' },
27 - account: { 1: '微信', 2: '支付宝', 'err': '状态码错误' } 27 + account: { 1: '微信', 2: '支付宝', 'err': '状态码错误' },
  28 + doctorUserType: { '1': '猫猫', '2': '狗狗', '3': '异宠' }
28 } 29 }
29 30
30 export default { 31 export default {