index.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <template>
  2. <view class="home">
  3. <TopCard :data="userInfo" />
  4. <!-- tab导航栏 -->
  5. <view class="tabs">
  6. <view v-for="(item, index) in navList" :key="index" class="tab" :class="{'is-active': tabCurId === item.id}"
  7. @click="tabClick(index)">
  8. {{item.text}}
  9. </view>
  10. </view>
  11. <swiper :current="tabCurId" class="swiper-box" duration="300" @change="onChangeTab">
  12. <swiper-item class="tab-content" v-for="(_tabItem,tabIndex) in navList" :key="tabIndex">
  13. <CfStatus v-if="tabCurId==0" :dataList="cfztDataList" />
  14. <CfLogistics v-if="tabCurId==1" :dataList="wlxxDataList" />
  15. <CfContent v-if="tabCurId==2" :dataList="cfnrDataList" />
  16. <CfAppraise v-if="tabCurId==3" :ptwybh="ptwybh" :dataList="cfpjDataList" :isEdit="isEdit" @update="getCfEvaluate" />
  17. </swiper-item>
  18. </swiper>
  19. </view>
  20. </template>
  21. <script lang="ts" setup>
  22. import { nextTick, ref } from 'vue'
  23. import { onLoad } from "@dcloudio/uni-app";
  24. import rest from '@/stores/rest'
  25. import { aesEncrypt, aesDecrypt } from "@/lib/encryption";
  26. import { CfStatusVO,CfLogisticsVO,RecipeContentVO, EvaluateVO } from '../../lib/type';
  27. import {
  28. formatDate,
  29. filterStateTitle ,
  30. filterStateIcon,
  31. filterLogisticsTitle,
  32. getSexByCardNo,
  33. getAgeByCardNo,
  34. DictLabelFYFSYF,
  35. DictLabelFYFSLX,
  36. maskName,
  37. } from '@/lib/util'
  38. import TopCard from './TopCard.vue'
  39. import CfStatus from './CfStatus.vue'
  40. import CfLogistics from './CfLogistics.vue'
  41. import CfContent from './CfContent.vue'
  42. import CfAppraise from './CfAppraise.vue'
  43. const ptwybh = ref('')
  44. const topCardRef = ref()
  45. const tabCurId = ref(0)//当前tab选中Id
  46. // const loaded = ref(false)
  47. // const status = ref('loading')
  48. // const loadText = ref('数据加载中...')
  49. const navList = ref([{
  50. id: 0,
  51. text: '处方状态',
  52. },
  53. {
  54. id: 1,
  55. text: '物流信息',
  56. },
  57. {
  58. id: 2,
  59. text: '处方内容',
  60. },
  61. {
  62. id: 3,
  63. text: '处方评价',
  64. }
  65. ])
  66. const userInfo = ref({
  67. zjhm: '',
  68. hzxm:'',
  69. })
  70. const cfztDataList = ref([]) // 处方状态
  71. const wlxxDataList = ref({ // 物流信息
  72. no: '',
  73. statusList: [],
  74. })
  75. const cfnrDataList = ref({}) // 处方内容
  76. const cfpjDataList = ref({ // 处方评价
  77. orderId: null, //订单id
  78. zhpj:null,
  79. jyxg: null,
  80. kfys: null,
  81. jyzl: null,
  82. wlfw: null,
  83. content: null,
  84. imgList: [],
  85. anonymity: 1
  86. })
  87. const isEdit = ref(false) // 是否评价
  88. const swiperBoxStyle = () => {
  89. let _h = `calc(100% - 72rpx -
  90. cfListDtos: boolean;${topCardRef.value?.offsetHeight})`;
  91. console.log("_h", _h)
  92. return {
  93. height: '200px',
  94. };
  95. };
  96. //顶部tab点击
  97. const tabClick = (idx : number) => {
  98. if (tabCurId.value !== idx) {
  99. tabCurId.value = idx;
  100. getData();
  101. }
  102. }
  103. //滑动标签页
  104. const onChangeTab = (e) => {
  105. let _inx = e.detail.current;
  106. tabClick(_inx);
  107. }
  108. const getData = async ()=> {
  109. switch (tabCurId.value) {
  110. case 0:
  111. getCfStatusData()
  112. break;
  113. case 1:
  114. getLogisticsInfo()
  115. break;
  116. case 2:
  117. getCfContent()
  118. break;
  119. case 3:
  120. getCfEvaluate()
  121. break;
  122. }
  123. }
  124. const getCfStatusData = async ()=> {
  125. try {
  126. cfztDataList.value = []
  127. let statusRes = await rest.get('/app-api/bmfw/findCfStatus',{ptwybh:ptwybh.value}) as CfStatusVO
  128. let res = statusRes.statusList
  129. for (let i = 0; i < res.length; i++) {
  130. let cflist = { time: '',title:'',icon:'',createTime:'',isCur: false }
  131. if (res[i].prescriptionOperationType != '22'){
  132. cflist.time = formatDate(res[i].createTime,'{y}-{m}-{d} {h}:{i}')
  133. cflist.title = filterStateTitle(res[i].prescriptionOperationType)
  134. cflist.icon = filterStateIcon(res[i].prescriptionOperationType)
  135. cflist.createTime = res[i].createTime
  136. cfztDataList.value.push(cflist)
  137. }
  138. }
  139. cfztDataList.value.sort((a, b) => b.createTime - a.createTime)
  140. if (cfztDataList.value.length > 0) {
  141. cfztDataList.value[0].isCur = true
  142. }
  143. }catch (e) {
  144. console.log(e);
  145. }
  146. }
  147. const getLogisticsInfo = async()=> {
  148. try {
  149. let res = await rest.get('/app-api/bmfw/findCfWl',{ptwybh:ptwybh.value}) as CfLogisticsVO
  150. for (let i = 0; i < res.cfList.length; i++) {
  151. let msgList = JSON.parse(res.cfList[i].msg)
  152. for (let j = 0; j< msgList.length;j++){
  153. let listWl = { time: '',title:'',icon:'',message:'' }
  154. listWl.time = msgList[j].time2
  155. listWl.title = filterLogisticsTitle(msgList[j].wlzt)
  156. listWl.icon = '\ue674'
  157. listWl.message = msgList[j].context
  158. wlxxDataList.value.statusList.push(listWl)
  159. }
  160. wlxxDataList.value.no = res.cfList[i].ydh
  161. }
  162. }catch (e) {
  163. console.log(e);
  164. }
  165. }
  166. const getCfContent = async()=> {
  167. try{
  168. let res = await rest.get('/app-api/bmfw/findCfYp',{ptwybh:ptwybh.value}) as RecipeContentVO
  169. cfnrDataList.value = {
  170. hosName: res.yljgmc,
  171. name: res.patient.hzxm,
  172. sex: getSexByCardNo(res.patient.zjhm),
  173. age: `${getAgeByCardNo(res.patient.zjhm)}岁`,
  174. cfNo: `#${res.yncfbh}`,
  175. list: res.detail,
  176. ts: `${res.cfts}贴`,
  177. fs: DictLabelFYFSYF(res.fyfsyf),
  178. kd: DictLabelFYFSLX(res.fyfslx),
  179. doctor: maskName(res.doctor?.nickname),
  180. date: formatDate(res.createTime, '{y}-{m}-{d} {h}:{i}'),
  181. note: '根据卫生部《处方管理办法》规定,处方当日有效除药品质量原因外,药品一经发出,不得退换'
  182. }
  183. }catch (e) {
  184. console.log(e);
  185. }
  186. }
  187. const getCfEvaluate = async()=> {
  188. try{
  189. let res = await rest.get(
  190. '/app-api/zyyp/prescription-evaluate/getByOrderId',
  191. { orderId:ptwybh.value },
  192. ) as EvaluateVO
  193. if (res){
  194. isEdit.value = true
  195. cfpjDataList.value.orderId = ptwybh.value
  196. cfpjDataList.value.zhpj = res.zhpj
  197. cfpjDataList.value.jyxg = res.jyxg
  198. cfpjDataList.value.kfys = res.kfys
  199. cfpjDataList.value.jyzl = res.jyzl
  200. cfpjDataList.value.wlfw = res.wlfw
  201. cfpjDataList.value.imgList = res.image ? JSON.parse(res.image) : [];
  202. cfpjDataList.value.content = res.content
  203. cfpjDataList.value.anonymity = res.anonymity
  204. }
  205. }catch (e) {
  206. console.log(e);
  207. }
  208. }
  209. onLoad((data) => {
  210. ptwybh.value = aesDecrypt(data.ptwybh)
  211. userInfo.value.zjhm = aesDecrypt(data.hzsfzh)
  212. userInfo.value.hzxm = aesDecrypt(data.hzxm)
  213. getData();
  214. })
  215. </script>
  216. <style lang="scss" scoped>
  217. .home {
  218. display: flex;
  219. flex-direction: column;
  220. height: 100%;
  221. .tabs {
  222. margin: $uni-spacing-row-s4 0 $uni-spacing-row-s3;
  223. height: 88rpx;
  224. background-color: #fff;
  225. padding: 0 24rpx;
  226. @include flex-between;
  227. .tab {
  228. height: 100%;
  229. @include flex-center;
  230. &.is-active {
  231. color: $uni-color-primary;
  232. position: relative;
  233. &::after {
  234. content: '';
  235. position: absolute;
  236. bottom: 0;
  237. left: 0;
  238. background: $uni-color-primary;
  239. width: 100%;
  240. height: 4rpx;
  241. }
  242. }
  243. }
  244. }
  245. .swiper-box {
  246. flex: 1;
  247. .tab-content {
  248. :deep(.pub-loading) {
  249. height: 100%;
  250. }
  251. }
  252. }
  253. }
  254. </style>