transferPage.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <template>
  2. <view class="container">
  3. <view class="content">
  4. </view>
  5. </view>
  6. </template>
  7. <script lang="ts" setup>
  8. import { reactive, ref } from 'vue';
  9. import { useOnLoad } from '@/hook';
  10. import { onLoad } from '@dcloudio/uni-app';
  11. import {
  12. useSetMenuList,
  13. useLoadViewMenu,
  14. useIsToAuthPage,
  15. useGetDefaultMember,
  16. } from '@kasite/uni-app-base';
  17. import { GetRoomId, GetMemberChatList } from '@kasite/uni-app-base/service/base';
  18. import { common, menuClick } from '@/utils';
  19. import { menu } from '@/config';
  20. const app = getApp();
  21. const type = ref("")
  22. const main = async (options: any = {}) => {
  23. let menuList = common.isEmpty(uni.getStorageSync('menuList'))
  24. ? await useSetMenuList(menu)
  25. : uni.getStorageSync('menuList');
  26. let skipWay = 'redirectTo'; // 跳转方式 默认关闭当前页面跳转
  27. let url = ''; // 页面地址
  28. /**
  29. * 用于判断特定页面跳转是否需要查询就诊人
  30. * 为true时 memberId为必须条件 前端才可反向查询当前人的数据
  31. */
  32. let isQueryMember = false;
  33. /**
  34. * 跳转特定页面需要查询就诊人时 且当前特定页面需要就诊卡或住院号 1:就诊卡 14 住院号
  35. * 当当前页面为一定有卡号或住院号的 一定要传卡号 cardNo
  36. */
  37. let cardType;
  38. let queryBean; // 跳转特定页面需要一些特定参数
  39. // 二维码扫码跳转进入
  40. if (options.q) {
  41. let url_q = decodeURIComponent(options.q);
  42. url_q.replace(/([^?&=]+)=([^&]+)/g, (_, k, v) => (options[k] = v));
  43. // 基层预约挂号支付
  44. if (url_q && url_q?.split('?')[1]?.split('=')[0] == 'OrderId') {
  45. options.type = 'pay';
  46. options.orderId = url_q?.split('?')[1]?.split('=')[1];
  47. }
  48. }
  49. if (common.isNotEmpty(options.type)) {
  50. if (options.type == 0) {
  51. skipWay = 'reLaunch';
  52. /** 首页 **/
  53. url = `/pages/st1/business/tabbar/homePage/homePage`;
  54. options.isViewMenu && (await useLoadViewMenu());
  55. } else if (options.type == 1) {
  56. skipWay = 'reLaunch';
  57. /** 互联网医院 **/
  58. url = `/pages/st1/business/tabbar/netHosIndex/netHosIndex`;
  59. } else if (options.type == 2) {
  60. skipWay = 'reLaunch';
  61. /** 消息中心 **/
  62. url = `/pages/st1/business/tabbar/MsgContent/MsgContent`;
  63. } else if (options.type == 3) {
  64. skipWay = 'reLaunch';
  65. /** 个人中心 **/
  66. url = `/pages/st1/business/tabbar/personalCenter/personalCenter`;
  67. } else if (options.type == 4) {
  68. /** 订单详情页 **/
  69. url = `/pagesPatient/st1/business/pay/payState/payState?orderId=${options.orderId}`;
  70. } else if (options.type == 5) {
  71. /** AI到诊回调科室排班页 **/
  72. let queryBean = {
  73. DeptCode: options.deptCode,
  74. DeptName: decodeURIComponent(options.deptName),
  75. };
  76. url = `/pagesPatient/st1/business/yygh/yyghDoctorList/yyghDoctorList?queryBean=${JSON.stringify(
  77. queryBean
  78. )}`;
  79. } else if (options.type == 'satisfactionQuestions') {
  80. // CRM随访满意度问卷
  81. url = `/pagesAdmin/satisfaction/satisfactionQuestions/satisfactionQuestions?subjectId=${options.subjectId}`;
  82. } else if (options.type == 'articleDetail') {
  83. // CRM文章详情
  84. url = `/pagesAdmin/article/business/article/detail/detail?id=${options.articleId}&msgId=${options.msgId}`;
  85. } else if (options.type == 'fuchat') {
  86. // HCRM-我的随访
  87. const chatData = await this.getMemberChatList(options);
  88. if (!chatData) return;
  89. app.globalData.currentUser = { memberId: chatData.MemberId };
  90. url = `/pagesCrm/st1/business/myFollowUp/followUpList/followUpList?type=${chatData.Type}&roomId=${chatData.Id}&deptName=${chatData.DeptName}&doctorSn=${chatData.Doctorsn}`;
  91. } else if (options.type == 'fuvisit') {
  92. // HCRM-我的随访
  93. const roomIdData = await this.getRoomId(options);
  94. options.roomId = roomIdData.RoomId;
  95. const chatData = await this.getMemberChatList(options);
  96. if (!chatData) return;
  97. app.globalData.currentUser = { memberId: chatData.MemberId };
  98. url = `/pagesCrm/st1/business/myFollowUp/followUpList/followUpList?type=${chatData.Type}&roomId=${chatData.Id}&deptName=${chatData.DeptName}&doctorSn=${chatData.Doctorsn}`;
  99. } else if (options.type == 'article') {
  100. // 点击分享的链接跳转文章详情页面
  101. url = `/pagesAdmin/teamYy/st1/business/disease/articlenInfo/articlenInfo?heaId=${ata.heaId}`;
  102. } else if (options.type == 'pay') {
  103. /** 订单支付页 **/
  104. url = `/pagesPatient/st1/business/pay/payMent/payMent?orderId=${options.orderId}`;
  105. } else if (options.type == 'myddc') {
  106. // 满意度调查
  107. let subjectId = options.subjectId;
  108. let taskId = options.taskId;
  109. url = `/pagesAdmin/satisfaction/business/satisfactionQuestions/satisfactionQuestions?subjectId=${subjectId}&taskId=${taskId}`;
  110. } else if (options.type == 'overduePerson') {
  111. let overdueOptions = common.isJSON(uni.getStorageSync('overdueOptions'))
  112. ? JSON.parse(uni.getStorageSync('overdueOptions'))
  113. : uni.getStorageSync('overdueOptions');
  114. const options = overdueOptions.options;
  115. if (overdueOptions.route.indexOf('yyghClinicMsg') != -1) {
  116. app.globalData.queryBean = overdueOptions.options.queryBean;
  117. }
  118. overdueOptions.options.queryBean = common.isJSON(overdueOptions.options.queryBean)
  119. ? overdueOptions.options.queryBean
  120. : JSON.stringify(overdueOptions.options.queryBean);
  121. const queryString = Object.keys(options)
  122. .map((key) => `${key}=${options[key]}`)
  123. .join('&');
  124. url = `/${overdueOptions.route}?${queryString}`;
  125. await checkAuthAndDefaultMember(url);
  126. uni.setStorageSync('overdueOptions', '');
  127. } else if(options.type == 'sms_myddc') {
  128. let url = ""
  129. common.showModal("请选择问卷类型", () => {
  130. url = `/pagesAdmin/satisfaction/business/satisfactionHome/satisfactionHome?objType=4&type=${options.type}&cardNo=${options.cardNo}&cardType=${options.cardType}`
  131. common.goToUrl(url, {
  132. skipWay: 'reLaunch',
  133. })
  134. },{cancelColor: "#74B72F",confirmText: "住院问卷",cancelText: "门诊问卷",callBack:() => {
  135. url = `/pagesAdmin/satisfaction/business/satisfactionHome/satisfactionHome?objType=3&type=${options.type}&cardNo=${options.cardNo}&cardType=${options.cardType}`
  136. common.goToUrl(url, {
  137. skipWay: 'reLaunch',
  138. })
  139. }})
  140. return
  141. } else {
  142. // 不等于前面特定页面时 走菜单获取 type值为菜单名称
  143. const childArray = this.getAllChildren(menuList.map((item) => item.Children));
  144. let menuItem = childArray.filter((item) => item.MenuName == options.type);
  145. // 判断当前过滤的菜单名称列表不为空时,走定义的菜单跳转
  146. if (common.isNotEmpty(menuItem)) {
  147. menuItem = menuItem[0];
  148. menuClick(menuItem, this, skipWay);
  149. return;
  150. }
  151. }
  152. }
  153. if (common.isEmpty(url)) {
  154. common.showModal(`<<${options.type}>>跳转地址为空,请联系管理员`, () => {
  155. common.goToUrl(`/pages/st1/business/tabbar/homePage/homePage`, {
  156. skipWay: 'reLaunch',
  157. });
  158. });
  159. return;
  160. }
  161. common.goToUrl(url, {
  162. skipWay: skipWay,
  163. });
  164. };
  165. /** HCRM-我的随访-获取房间ID */
  166. const getRoomId = async (data) => {
  167. let params = {
  168. Doctorsn: data.doctorsn,
  169. MemberId: data.memberId,
  170. };
  171. let { resp, resData } = await GetRoomId(params);
  172. if (common.isNotEmpty(resp)) {
  173. return resp[0];
  174. }
  175. return null;
  176. };
  177. /** HCRM-我的随访-获取会话列表 */
  178. const getMemberChatList = async (data) => {
  179. const params = {
  180. MemberId: data.memberId,
  181. RoomId: data.roomId,
  182. ChatType: '0',
  183. };
  184. const { resp, resData } = await GetMemberChatList(params);
  185. if (common.isNotEmpty(resp[0])) {
  186. return resp[0];
  187. } else {
  188. common.showModal('未查询到记录');
  189. return null;
  190. }
  191. };
  192. /** 判断公众号授权和默认就诊人 */
  193. const checkAuthAndDefaultMember = async (url) => {
  194. /**跳转到挂号页面 需要判断就诊人 和公众号授权*/
  195. if (useIsToAuthPage()) {
  196. return;
  197. }
  198. // 获取当前设置的患者信息 判断是否可以无卡预约 取不同的值允许无卡预约或者默认就诊人信息 否者获取就诊卡信息,如当前默认就诊人无就诊卡,跳转选卡界面
  199. let lastOperatorResp = await useGetDefaultMember({
  200. cardType: '1',
  201. url: url,
  202. isKeepPage: true,
  203. pageType: 'doctorYygh', //个性化预约挂号
  204. });
  205. // 判断返回的炒作人为null 代表跳转选择界面了
  206. if (lastOperatorResp === null) return;
  207. if (common.isEmpty(lastOperatorResp)) {
  208. app.globalData.toUrl = url; //保存添加成功后跳转地址
  209. app.globalData.cardType = app.globalData.withoutCard ? '' : '1'; //保存添加成功,要查询的默认人信息
  210. url = `/pagesPersonal/st1/business/patientManagement/addMember/addMember`;
  211. }
  212. };
  213. /** 菜单数组处理 */
  214. const getAllChildren = (arr) => {
  215. return arr.flatMap((item) => {
  216. if (Array.isArray(item)) {
  217. return this.getAllChildren(item);
  218. } else if (item.Children) {
  219. return [item, ...this.getAllChildren(item.Children)];
  220. } else {
  221. return [item];
  222. }
  223. });
  224. };
  225. useOnLoad((options) => {
  226. uni.showLoading();
  227. main(options);
  228. });
  229. </script>
  230. <style lang="scss" scoped></style>