memberList.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923
  1. <template>
  2. <view class="container">
  3. <view class="content">
  4. <view v-if="showNoData" class="noData">
  5. <no-data :value="noDataValue"></no-data>
  6. </view>
  7. <template v-if="memberList.length > 0">
  8. <view class="member_item" v-for="(item, index) in memberList" :key="index">
  9. <view class="bg_white member_infoBox" data-tag="member" :data-index="index" :data-item="item" @click="setDefaultMemberAndCard($event, item, 'member')">
  10. <view class="member_info displayFlexRow">
  11. <view class="info_memberMsg">
  12. <text class="name">{{item.memberName}}</text>
  13. <text class="tip">{{item.sex=='1'?'男':item.sex=='2'?'女':''}} {{item.age?item.age+'岁':''}}</text>
  14. <text class="tag">
  15. <text class="bg backgroundCustom "></text>
  16. <text class="text colorCustom">{{item.relationName}}</text>
  17. </text>
  18. </view>
  19. <view class="auto_btn displayFlexRow" v-if="item.isOpen || (item.userMemberList && item.userMemberList[0] && item.userMemberList[0].isDefaultMember == 1)">
  20. <image :src="item.userMemberList && item.userMemberList[0] && item.userMemberList[0].isDefaultMember == 1 ? iconUrl.icon_roundHook : iconUrl.icon_roundHook_n" />
  21. <text :class="item.userMemberList && item.userMemberList[0] && item.userMemberList[0].isDefaultMember == 1 ? 'colorCustom' : 'color666'">默认</text>
  22. </view>
  23. </view>
  24. <view class="member_info_num displayFlexRow">
  25. <view class="displayFlexCol">
  26. <text>证件号:{{item.idCardNo}}</text>
  27. <view>
  28. <text>手机号:{{item.mobile}}</text>
  29. <text class="upload_mobile colorCustom" @click.stop="updateMemberMobileClick(item)">更新</text>
  30. </view>
  31. </view>
  32. </view>
  33. <view class="electronMedical displayFlexCol" @click.stop="clickElectronMedical" v-if="item.memberType == 1">
  34. <image class="electronMedical_img" :src="iconUrl.memberList_icondzyb"></image>
  35. <view class="colorCustom">刷医保码</view>
  36. </view>
  37. <!-- 判断第0条数据不等于本人,显示点击认证 -->
  38. <view class="electronMedical displayFlexCol" @click.stop="toAddMember('addMy')" v-if="memberList[0].memberType != 1">
  39. <image class="electronMedical_img" :src="iconUrl.memberList_iconNo"></image>
  40. <view class="colorCustom_999">点击本人认证</view>
  41. </view>
  42. </view>
  43. <image :src="iconUrl.icon_memDivision" class="icon_memDivision" mode="widthFix"></image>
  44. <!-- 等于人本时展示授权与信用管理 -->
  45. <template v-if="item.memberType == 1">
  46. <view class="personallyBox">
  47. <view class="moduleBox displayFlexBetween" @click="forWard('authorizeIndex', item)">
  48. <view class="bg backgroundCustom_F08"></view>
  49. <view class="moduleInfo">
  50. <view class="moduleInfo_txt">已授权他人使用</view>
  51. <view class="colorCustom_F08">授权{{item.authQuantity || 0}}人</view>
  52. </view>
  53. <view class="moduleBox_btn backgroundCustom_F08">去管理</view>
  54. </view>
  55. <view class="moduleBox displayFlexBetween" @click="forWard('creditIndex', item)">
  56. <view class="bg backgroundCustom"></view>
  57. <view class="moduleInfo">
  58. <view class="moduleInfo_txt">信用权益</view>
  59. <view class="colorCustom">您的诊疗信用良好,可享受先诊后付费权益</view>
  60. </view>
  61. <view class="moduleBox_btn backgroundCustom">去管理</view>
  62. </view>
  63. </view>
  64. <image :src="iconUrl.icon_memDivision" class="icon_memDivision" mode="widthFix"></image>
  65. </template>
  66. <!-- 卡列表未展开 -->
  67. <view class="bg_white member_card_list displayFlexBetween" v-if="!item.isOpen">
  68. <view class="operateTxt displayFlexRow">
  69. <view class="operateTxt_btn boderColorCustom" @click.stop="delMemberInfo(item)" v-if="item.memberType != 1">
  70. <text class="bg backgroundCustom "></text>
  71. <text class="text colorCustom">解除绑定</text>
  72. </view>
  73. <view class="operateTxt_btn boderColorCustom" @click.stop="setDefaultMemberAndCard($event, item, 'member')" v-if="!item.isOpen && (item.userMemberList && item.userMemberList[0] && item.userMemberList[0].isDefaultMember != 1)">
  74. <text class="bg backgroundCustom "></text>
  75. <text class="text colorCustom">设为默认</text>
  76. </view>
  77. </view>
  78. <view class="transform displayFlexRow" @click="openaOrFold(index, 'open')">
  79. <image class="arrow transform_rotate_90" :src="iconUrl.icon_right"></image>就诊卡管理
  80. </view>
  81. </view>
  82. <!-- 展开的卡列表 -->
  83. <view class="bg_white member_card_list" v-if="item.isOpen">
  84. <view class="transform displayFlexRow retractTransform" @click="openaOrFold(index, 'fold')">
  85. <image class="arrow " :src="iconUrl.icon_right"></image>收起
  86. </view>
  87. <template v-if="item.cardNum > 0">
  88. <view class="member_card_num">
  89. <text>就诊卡</text>
  90. <text>{{item.cardNum}}</text>
  91. <text>张</text>
  92. </view>
  93. <view class="card_list_box">
  94. <template v-for="(childItem, childIndex) in item.Data_1" :key="childIndex">
  95. <view class="card_item_box" v-if="childItem.cardType == 1">
  96. <view class="card_item_info displayFlexRow">
  97. <text>{{childItem.cardTypeName || "就诊卡"}}:{{childItem.cardNo}}</text>
  98. </view>
  99. <view class="mobile_box displayFlexRow">
  100. <text>手机号:</text>
  101. <text class="colorCustom" @click="lookMobile(index, childIndex, childItem)">{{childItem.mobile}}</text>
  102. <image class="edit_icon" :src="iconUrl.edit" @click="setHisMobileClick(childItem)"/>
  103. </view>
  104. <view class="card_operation_box displayFlexRow">
  105. <view class="auto_card displayFlexRow" @click="setDefaultMemberAndCard($event, item, 'card', childItem)">
  106. <image :src="item.userMemberList && item.userMemberList[0] && item.userMemberList[0].isDefaultMember == 1 && childItem.isDefault == 1 ? iconUrl.icon_roundHook : iconUrl.icon_roundHook_n" mode=""/>
  107. <text :class="item.userMemberList && item.userMemberList[0] && item.userMemberList[0].isDefaultMember == 1 && childItem.isDefault == 1 ? 'colorCustom' : 'color666'">默认就诊卡</text>
  108. </view>
  109. <view @click.stop="getCardBalance(index, childIndex, childItem)">
  110. <text>余额:</text>
  111. <text class="colorCustom">{{childItem.yuan}}</text>
  112. </view>
  113. </view>
  114. </view>
  115. </template>
  116. </view>
  117. </template>
  118. <template v-if="item.hosNum > 0">
  119. <view class="member_card_num">
  120. <text>住院号</text>
  121. <text>{{item.hosNum}}</text>
  122. <text>个</text>
  123. </view>
  124. <view class="card_list_box">
  125. <template v-for="(childItem, childIndex) in item.Data_1" :key="childIndex">
  126. <view class="card_item_box" v-if="childItem.cardType == 14">
  127. <view class="card_item_info displayFlexBetween">
  128. <text>住院号:{{childItem.cardNo}}</text>
  129. </view>
  130. <view :class="['card_operation_box', 'displayFlexBetween', childItem.inHospitalStatus == 1?'colorCustom':'colorCustom_999']">
  131. <text>在院状态:{{childItem.inHospitalStatus == 1 ? '在院' : '离院'}}</text>
  132. <view @click.stop="getCardBalance(index, childIndex, childItem)">
  133. <text>余额:</text>
  134. <text class="colorCustom">{{childItem.yuan}}</text>
  135. </view>
  136. </view>
  137. </view>
  138. </template>
  139. </view>
  140. </template>
  141. <template v-if="item.healthNum > 0">
  142. <view class="member_card_num">
  143. <text>健康卡</text>
  144. <text>{{item.healthNum}}</text>
  145. <text>个</text>
  146. </view>
  147. <view class="card_list_box">
  148. <template v-for="(childItem, childIndex) in item.Data_1" :key="childIndex">
  149. <view class="card_item_box" v-if="childItem.cardType == 16">
  150. <view class="card_item_info displayFlexRow">
  151. <text>{{childItem.cardTypeName || "就诊卡"}}:{{childItem.cardNo}}</text>
  152. </view>
  153. <view class="mobile_box displayFlexRow">
  154. <text>手机号:</text>
  155. <text class="colorCustom" @click="lookMobile(index, childIndex, childItem)">{{childItem.mobile}}</text>
  156. <image class="edit_icon" :src="iconUrl.ic_personalcentre_addressadministration_edit" @click="setHisMobileClick(childItem)"/>
  157. </view>
  158. <view class="card_operation_box displayFlexRow">
  159. <view class="auto_card displayFlexRow" @click="setDefaultMemberAndCard($event, item, 'card', childItem)">
  160. <image :src="item.userMemberList && item.userMemberList[0] && item.userMemberList[0].isDefaultMember == 1 && childItem.isDefault == 1 ? iconUrl.icon_roundHook : iconUrl.icon_roundHook_n" mode=""/>
  161. <text :class="item.userMemberList && item.userMemberList[0] && item.userMemberList[0].isDefaultMember == 1 && childItem.isDefault == 1 ? 'colorCustom' : 'color666'">默认就诊卡</text>
  162. </view>
  163. <view @click.stop="getCardBalance(index, childIndex, childItem)">
  164. <text>余额:</text>
  165. <text class="colorCustom">{{childItem.yuan}}</text>
  166. </view>
  167. </view>
  168. </view>
  169. </template>
  170. </view>
  171. </template>
  172. </view>
  173. </view>
  174. <view class="relativesBox displayFlexLeft" v-if="memberList.length > 0 && memberList[0].memberType == 1">
  175. <image :src="iconUrl.icon_relatives" class="icon_relatives"></image>
  176. <view>亲友成员({{memberList.length-1}}人)</view>
  177. </view>
  178. </template>
  179. <view class="public_btn_con bg_white">
  180. <view class="public_btn backgroundCustom" @click="toAddMember('all')">添加就诊人</view>
  181. </view>
  182. </view>
  183. <view class="public_dialog" v-if="codeIsShow">
  184. <view class="code_inner">
  185. <image class="code_img_out" :src="iconUrl.icon_whiteClose" @click="codeStateChange"></image>
  186. <image class="code_img" :src="iconUrl.icon_codeBgTop"></image>
  187. <view class="code_tit">{{codeInfo.memberName}}-电子就诊码</view>
  188. <view class="code_con">
  189. <image :src="codeInfo.imagesApi"></image>
  190. </view>
  191. </view>
  192. </view>
  193. <view class="public_dialog" v-if="mobileModel">
  194. <view class="code_inner mobile_content_box">
  195. <text class="mobile_title_box">请选择手机号码</text>
  196. <text class="mobile_tips_box">修改手机号码涉及到就诊人的身份信息安全,请确认再修改</text>
  197. <view :class="['mobile_item_box', 'displayFlexRow', mobileIndex == index ? 'backgroundCustom' : '']"
  198. v-for="(item, index) in mobileList" :key="index" @click="choiceMobile(index)">
  199. <text>{{item}}</text>
  200. </view>
  201. <view class="mobile_footer_box displayFlexRow">
  202. <text class="backgroundCustom_D9" @click="updateMobileModel">取消</text>
  203. <text class="backgroundCustom" @click="btnUpdateMobile">确定</text>
  204. </view>
  205. </view>
  206. </view>
  207. </view>
  208. </template>
  209. <script lang="ts" setup>
  210. import { ref, reactive, getCurrentInstance } from 'vue';
  211. import { onLoad, onShow } from '@dcloudio/uni-app';
  212. import { common } from '@/utils';
  213. import icon from '@/utils/icon';
  214. import {
  215. delMemberInfo_V3,
  216. setDefaultMemberV3,
  217. setDefaultClinicCard_V3,
  218. queryCardBalance_V3,
  219. updateMemberMobile as updateMemberMobileApi,
  220. queryBaseMemberList_V3 as queryBaseMemberListApi,
  221. queryMemberCardList_V3 as queryMemberCardListApi
  222. } from '@/pagesPersonal/service/patientManagement';
  223. import { queryMemberHeaderInfo } from '@/pages/st1/service/base';
  224. import { usePreserMember, queryMemberCardList_V3 } from '@/hook';
  225. import noData from '@/pages/st1/components/noData/noData.vue';
  226. const app = getApp();
  227. const iconUrl = ref(icon);
  228. const memberList = ref<any[]>([]);
  229. const codeIsShow = ref(false);
  230. const codeInfo = ref<any>({});
  231. const showNoData = ref(false);
  232. const noDataValue = ref('暂无就诊人,请添加就诊人');
  233. const mobileModel = ref(false);
  234. const mobileList = ref<string[]>([]);
  235. const mobileIndex = ref(0);
  236. const selectMemberId = ref('');
  237. onLoad(async () => {
  238. await usePreserMember();
  239. });
  240. onShow(() => {
  241. main();
  242. });
  243. const main = () => {
  244. queryBaseMemberList_V3();
  245. };
  246. const queryBaseMemberList_V3 = async () => {
  247. let resp = await usePreserMember();
  248. if (!resp || resp.length === 0) {
  249. resp = uni.getStorageSync('memberList') || [];
  250. }
  251. if (common.isEmpty(resp)) {
  252. memberList.value = [];
  253. showNoData.value = true;
  254. return;
  255. }
  256. // Sort logic
  257. resp = resp.sort(function (a: any, b: any) {
  258. if (a.memberType !== b.memberType) {
  259. return a.memberType < b.memberType ? -1 : 1;
  260. } else {
  261. let aDefault = a.userMemberList && a.userMemberList[0] ? a.userMemberList[0].isDefaultMember : 0;
  262. let bDefault = b.userMemberList && b.userMemberList[0] ? b.userMemberList[0].isDefaultMember : 0;
  263. return a.memberType == 1 ? -1 : bDefault - aDefault;
  264. }
  265. });
  266. const asyncRequests = resp.map(async (item: any) => getQueryMemberHeaderInfo(item));
  267. await Promise.all(asyncRequests);
  268. memberList.value = resp;
  269. showNoData.value = common.isEmpty(resp);
  270. };
  271. const getQueryMemberHeaderInfo = async (item: any) => {
  272. if (item.memberType == 1) {
  273. let { resData } = await queryMemberHeaderInfo({
  274. memberId: item.memberId,
  275. accountSn: item.accountSn
  276. });
  277. item.authQuantity = resData.RespCode == 10000 && resData.Data && resData.Data[0] ? resData.Data[0].userCount : 0;
  278. }
  279. return item;
  280. };
  281. const delMemberInfo = (item: any) => {
  282. common.showModal(`尊敬的用户,是否确定解除【${item.memberName}】的 绑定?该操作无法回退!`, async () => {
  283. let queryData = {
  284. memberId: item.memberId,
  285. accountSn: item.accountSn,
  286. };
  287. let { resData } = await delMemberInfo_V3(queryData);
  288. if (resData.RespCode == 10000) {
  289. if (app.globalData.currentUser && item.memberId == app.globalData.currentUser.memberId) {
  290. app.globalData.currentUser = "";
  291. }
  292. common.showModal(`已成功解绑【${item.memberName}】`, async () => {
  293. await usePreserMember();
  294. queryBaseMemberList_V3();
  295. });
  296. }
  297. }, {
  298. title: '温馨提示',
  299. cancelText: '取消'
  300. });
  301. };
  302. const toAddMember = (type: string) => {
  303. common.goToUrl(`/pagesPersonal/st1/business/patientManagement/selecteBindCardMode/selecteBindCardMode?type=${type}`);
  304. };
  305. const codeStateChange = () => {
  306. codeIsShow.value = !codeIsShow.value;
  307. };
  308. const clickElectronMedical = () => {
  309. // #ifdef MP-WEIXIN
  310. uni.navigateToMiniProgram({
  311. appId: "wxb032bc789053daf4",
  312. path: "pages/esscard/scancode-nhsa/main?channel=AAEQHg2Pe4b-JhLqiIyHf2g0&cityCode=350000",
  313. });
  314. // #endif
  315. // #ifndef MP-WEIXIN
  316. common.showToast('请在微信小程序中使用');
  317. // #endif
  318. };
  319. const getCardBalance = async (index: number, childIndex: number, childItem: any) => {
  320. let data = {
  321. cardType: childItem.cardType,
  322. cardNo: childItem.cardNo,
  323. Store: {
  324. cardEncryptionStore: childItem.encryptionStore || '',
  325. baseMemberEncryptionStore: memberList.value[index].baseMemberEncryptionStore
  326. }
  327. };
  328. let { resData } = await queryCardBalance_V3(data);
  329. if (resData.RespCode == 10000 && resData.Data && resData.Data.length > 0) {
  330. if (resData.Data[0].balance == "") {
  331. memberList.value[index].Data_1[childIndex].yuan = 0;
  332. } else {
  333. memberList.value[index].Data_1[childIndex].yuan = common.centToYuan(resData.Data[0].balance);
  334. }
  335. }
  336. };
  337. const setDefaultMemberAndCard = async (e: any, item: any, tag: string, childItem?: any) => {
  338. let setMemberData = {
  339. memberId: item.memberId,
  340. };
  341. let { resData } = await setDefaultMemberV3(setMemberData);
  342. if (resData.RespCode == "10000") {
  343. if (tag == 'card' && childItem) {
  344. let data = {
  345. memberId: item.memberId,
  346. cardNo: childItem.cardNo,
  347. cardType: childItem.cardType,
  348. encryptionStore: childItem.encryptionStore,
  349. };
  350. await setDefaultClinicCard_V3(data);
  351. }
  352. common.showModal("设置成功", async () => {
  353. await usePreserMember();
  354. queryBaseMemberList_V3();
  355. });
  356. }
  357. };
  358. const openaOrFold = async (index: number, type: string) => {
  359. let item = memberList.value[index];
  360. if (type == "open") {
  361. console.log("open", item);
  362. if (common.isEmpty(item.Data_1)) {
  363. item = await getUserCardInfo(item);
  364. }
  365. item.isOpen = true;
  366. }
  367. if (type == "fold") {
  368. item.isOpen = false;
  369. }
  370. // Force reactivity update if needed, but array element mutation usually picked up if item is object
  371. memberList.value[index] = { ...item };
  372. };
  373. const getUserCardInfo = async (currentUser: any) => {
  374. let resp = await queryMemberCardList_V3(currentUser.memberId);
  375. if (!common.isEmpty(resp)) {
  376. resp.map((item: any) => {
  377. if (item.cardType == 16 && item.cardNo.length > 9) {
  378. item.cardNo = item.cardNo.replace(/\*{3,}/g, '***');
  379. }
  380. item.yuan = "点击查看";
  381. });
  382. currentUser.cardNum = resp.filter((cell: any) => cell.cardType == '1').length;
  383. currentUser.hosNum = resp.filter((cell: any) => cell.cardType == '14').length;
  384. currentUser.healthNum = resp.filter((cell: any) => cell.cardType == '16').length;
  385. currentUser.Data_1 = resp;
  386. }
  387. return currentUser;
  388. };
  389. const forWard = (router: string, memberInfo: any) => {
  390. app.globalData.myInfo = memberInfo;
  391. uni.setStorageSync('myInfo', memberInfo);
  392. let url = null;
  393. if (router == 'creditIndex') {
  394. url = `/pagesPersonal/st1/business/creditManagement/${router}/${router}`;
  395. } else if (router == 'authorizeIndex') {
  396. url = `/pagesPersonal/st1/business/authorizeMangement/${router}/${router}`;
  397. }
  398. if (url) common.goToUrl(url);
  399. };
  400. const lookMobile = (index: number, childIndex: number, childItem: any) => {
  401. if (childItem.mobile) {
  402. common.showModal(`手机号:${childItem.mobile}`, () => {}, { showCancel: false, confirmText: '知道了' });
  403. }
  404. };
  405. const updateMemberMobileClick = async (item: any) => {
  406. let queryMember = {
  407. accountSn: item.accountSn,
  408. memberId: item.memberId,
  409. isCache: "false",
  410. mobileFormatDesensitization: "false"
  411. };
  412. let { resData } = await queryBaseMemberListApi(queryMember);
  413. console.log("queryBaseMemberListApi", resData);
  414. if (resData.RespCode == 10000 && resData.Data && resData.Data.length > 0) {
  415. let realMobile = resData.Data[0].mobile;
  416. let cardMobiles = await queryMemberCardMobile(item.memberId);
  417. if (common.isNotEmpty(cardMobiles)) {
  418. let leafMobiel = cardMobiles.filter((p: string) => p !== realMobile);
  419. if (common.isNotEmpty(leafMobiel)) {
  420. mobileList.value = leafMobiel;
  421. selectMemberId.value = item.memberId;
  422. mobileIndex.value = 0;
  423. updateMobileModel();
  424. } else {
  425. common.showToast("您的手机号码已是最新的");
  426. }
  427. } else {
  428. common.showToast("您的手机号码已是最新的");
  429. }
  430. }
  431. };
  432. const queryMemberCardMobile = async (memberId: string) => {
  433. let querData = {
  434. memberId: memberId,
  435. cardNoFormatDesensitization: "false",
  436. mobileFormatDesensitization: "false"
  437. };
  438. let { resData } = await queryMemberCardListApi(querData);
  439. if (resData.RespCode == 10000 && resData.Data) {
  440. const mobiles = resData.Data.filter((p: any) => p.cardType === 1 && common.isNotEmpty(p.mobile)).map((p: any) => p.mobile);
  441. const uniquemobiles = Array.from(new Set(mobiles));
  442. return uniquemobiles;
  443. }
  444. return [];
  445. };
  446. const setHisMobileClick = async (childItem: any) => {
  447. let queryMember = {
  448. accountSn: childItem.accountSn,
  449. memberId: childItem.memberId,
  450. memberNameFormatDesensitization: "false",
  451. certNumFormatDesensitization: "false"
  452. };
  453. let { resData } = await queryBaseMemberListApi(queryMember);
  454. if (resData.RespCode == 10000 && resData.Data && resData.Data.length > 0 && resData.Data[0].certType == '01') {
  455. let params = {
  456. CardNo: childItem.cardNo,
  457. MemberName: resData.Data[0].memberName,
  458. MemberId: childItem.memberId,
  459. IdCardNo: resData.Data[0].certNum
  460. };
  461. let url = `/pagesPersonal/st1/business/patientAuth/authFace/authFace?pageType=changeMobile&params=${JSON.stringify(params)}`;
  462. common.goToUrl(url);
  463. }
  464. };
  465. const choiceMobile = (index: number) => {
  466. mobileIndex.value = index;
  467. };
  468. const updateMobileModel = () => {
  469. mobileModel.value = !mobileModel.value;
  470. };
  471. const btnUpdateMobile = async () => {
  472. let selectMobiel = mobileList.value[mobileIndex.value];
  473. let updateParam = {
  474. "memberId": selectMemberId.value,
  475. "mobile": selectMobiel
  476. };
  477. let { resData } = await updateMemberMobileApi(updateParam);
  478. if (resData.RespCode == 10000) {
  479. updateMobileModel();
  480. await usePreserMember();
  481. queryBaseMemberList_V3();
  482. }
  483. };
  484. </script>
  485. <style lang="scss" scoped>
  486. /* pages2/st1/merge/business/patientManagement/memberList/memberList.wxss */
  487. .content{
  488. height: 100%;
  489. overflow: auto;
  490. padding-bottom: 210upx;
  491. }
  492. .member_item {
  493. box-sizing: border-box;
  494. margin: 30upx;
  495. border-radius: 20upx;
  496. overflow: hidden;
  497. }
  498. .member_infoBox {
  499. padding: 30upx 30upx 15upx;
  500. position: relative;
  501. }
  502. .member_info {
  503. margin-bottom: 37upx;
  504. justify-content: space-between;
  505. }
  506. .info_memberMsg .name {
  507. font-size: 36upx;
  508. font-weight: bold;
  509. color: #222326;
  510. margin-right: 20upx;
  511. }
  512. .info_memberMsg .tip {
  513. font-size: 28upx;
  514. color: #62626D;
  515. margin-right: 20upx;
  516. }
  517. .info_memberMsg .tag{
  518. position: relative;
  519. display: inline-block;
  520. font-size: 22upx;
  521. padding: 4upx 8upx;
  522. box-sizing: border-box;
  523. border-radius: 8upx;
  524. }
  525. .info_memberMsg .tag .bg{
  526. opacity: .1;
  527. position: absolute;
  528. width: 100%;
  529. height: 100%;
  530. left: 0;
  531. top: 0;
  532. }
  533. .auto_btn image {
  534. width: 35upx;
  535. height: 35upx;
  536. margin-right: 12upx;
  537. }
  538. .auto_btn text {
  539. font-size: 28upx;
  540. }
  541. .member_info_num {
  542. justify-content: space-between;
  543. }
  544. .member_info_num view {
  545. align-items: flex-start;
  546. }
  547. .member_info_num view text {
  548. font-size: 28upx;
  549. color: #222326;
  550. }
  551. .member_info_num view text:nth-child(1) {
  552. margin-bottom: 20upx;
  553. }
  554. .upload_mobile {
  555. font-size: 28upx;
  556. margin-left: 50upx;
  557. border-radius: 100upx;
  558. }
  559. .member_infoBox .electronMedical{
  560. position: absolute;
  561. right: 30upx;
  562. top: 70upx;
  563. font-size: 22upx;
  564. }
  565. .electronMedical_img{
  566. width: 80upx;
  567. height: 80upx;
  568. margin: 10upx 0;
  569. }
  570. .personallyBox{
  571. background-color: #fff;
  572. padding: 1upx 30upx;
  573. }
  574. .personallyBox .moduleBox{
  575. height: 120upx;
  576. position: relative;
  577. border-radius: 24upx;
  578. overflow: hidden;
  579. padding: 0 24upx;
  580. }
  581. .personallyBox .bg{
  582. position: absolute;
  583. width: 100%;
  584. height: 100%;
  585. opacity: .2;
  586. left: 0;
  587. top: 0;
  588. }
  589. .personallyBox .moduleBox{
  590. font-size: 24upx;
  591. margin-top: 15upx;
  592. }
  593. .personallyBox .moduleInfo_txt{
  594. font-size: 28upx;
  595. font-weight: 600;
  596. margin-bottom: 8upx;
  597. }
  598. .personallyBox .moduleBox_btn{
  599. padding: 12upx 18upx;
  600. border-radius: 20upx;
  601. }
  602. .transform{
  603. font-size: 26upx;
  604. color: #898999;
  605. }
  606. .transform image {
  607. transform: rotate(270deg);
  608. margin-right: 10upx ;
  609. }
  610. .transform_rotate_90 {
  611. transform: rotate(90deg) !important;
  612. }
  613. .retractTransform{
  614. position: absolute;
  615. top: 0;
  616. right: 30upx;
  617. }
  618. .relativesBox{
  619. margin: 30upx;
  620. font-size: 30upx;
  621. font-weight: 600;
  622. }
  623. .relativesBox .icon_relatives{
  624. width: 42upx;
  625. height: 39upx;
  626. margin-right: 18upx;
  627. }
  628. /* 下半部分 */
  629. .operateTxt .operateTxt_btn{
  630. padding: 10upx 17upx;
  631. font-size: 26upx;
  632. position: relative;
  633. border-radius: 5upx;
  634. border: 1upx solid #fff;
  635. overflow: hidden;
  636. margin-right: 10upx;
  637. }
  638. .operateTxt_btn .bg{
  639. opacity: 0.15;
  640. position: absolute;
  641. width: 100%;
  642. height: 100%;
  643. top: 0;
  644. left: 0;
  645. display: block;
  646. }
  647. .member_card_list {
  648. position: relative;
  649. padding:0 30upx 30upx;
  650. }
  651. .icon_memDivision{
  652. width: 100%;
  653. height: 50upx;
  654. }
  655. .member_card_num text {
  656. font-size: 28upx;
  657. color: #8A8A99;
  658. }
  659. .member_card_num text:nth-child(2) {
  660. color: #222326;
  661. padding: 0 10upx;
  662. }
  663. .card_list_box {
  664. padding: 0upx 30upx;
  665. box-sizing: border-box;
  666. margin: 30upx 0;
  667. background: #F8F8FA;
  668. border-radius: 10upx;
  669. }
  670. .member_card_list .card_list_box:last-child{
  671. margin-bottom: 0;
  672. }
  673. .card_item_box {
  674. padding: 38upx 0;
  675. box-sizing: border-box;
  676. border-bottom: 1px dotted #E6E6E6;
  677. }
  678. .card_item_box:last-child {
  679. border-bottom: none;
  680. }
  681. .card_item_info {
  682. justify-content: space-between;
  683. }
  684. .card_item_info text {
  685. font-size: 32upx;
  686. font-weight: bold;
  687. color: #222326;
  688. }
  689. .card_item_info image {
  690. width: 26upx;
  691. height: 26upx;
  692. }
  693. .mobile_box {
  694. margin-top: 24upx;
  695. justify-content: flex-start;
  696. position: relative;
  697. }
  698. .mobile_box text {
  699. font-size: 32upx;
  700. font-weight: bold;
  701. color: #222326;
  702. }
  703. .edit_icon {
  704. width: 35upx;
  705. height: 35upx;
  706. position: absolute;
  707. right: 0;
  708. }
  709. .card_operation_box {
  710. margin-top: 30upx;
  711. justify-content: space-between;
  712. }
  713. .card_operation_box text {
  714. font-size: 28upx;
  715. color: #8A8A99;
  716. }
  717. .card_operation_box view:nth-child(2) text {
  718. color: #222326;
  719. }
  720. .auto_card image {
  721. width: 30upx;
  722. height: 30upx;
  723. margin-right: 12upx;
  724. }
  725. /* 二维码 */
  726. .public_dialog {
  727. background-color: rgba(1, 1, 1, 0.6);
  728. position: fixed;
  729. top: 0;
  730. left: 0;
  731. width: 100%;
  732. height: 100%;
  733. z-index: 2;
  734. display: flex;
  735. align-items: center;
  736. justify-content: center;
  737. }
  738. .code_inner {
  739. width: 600upx;
  740. border-radius: 24upx;
  741. position: relative;
  742. background-color: #fff;
  743. padding-bottom: 50upx;
  744. display: flex;
  745. flex-direction: column;
  746. align-items: center;
  747. justify-content: center;
  748. }
  749. .code_img_out {
  750. width: 24upx;
  751. height: 24upx;
  752. position: absolute;
  753. right: 30upx;
  754. top: 30upx;
  755. z-index: 1;
  756. }
  757. .code_img {
  758. width: 100%;
  759. height: 200upx;
  760. position: absolute;
  761. top: 0;
  762. left: 0;
  763. }
  764. .code_tit {
  765. font-size: 40upx;
  766. font-weight: 500;
  767. height: 200upx;
  768. line-height: 210upx;
  769. position: relative;
  770. color: #fff;
  771. }
  772. .code_card {
  773. font-size: 28upx;
  774. font-family: Arial;
  775. font-weight: 400;
  776. color: rgba(255, 255, 255, 1);
  777. margin: 23upx 0 107upx;
  778. position: relative;
  779. }
  780. .code_subtit {
  781. font-size: 28upx;
  782. }
  783. .code_con {
  784. margin: 37upx 0 30upx;
  785. width: 340upx;
  786. height: 340upx;
  787. }
  788. .code_tip {
  789. font-size: 26upx;
  790. color: #58AB56;
  791. }
  792. .qr_code {
  793. box-sizing: content-box;
  794. width: 340upx;
  795. height: 340upx;
  796. padding: 10upx 0;
  797. }
  798. /* 更新手机号弹窗 */
  799. .mobile_content_box {
  800. width: 76%;
  801. padding: 30upx;
  802. box-sizing: border-box;
  803. background: white;
  804. border-radius: 20upx;
  805. }
  806. .mobile_title_box {
  807. font-size: 34upx;
  808. font-weight: bold;
  809. margin-bottom: 30upx;
  810. }
  811. .mobile_tips_box {
  812. font-size: 30upx;
  813. color: #666;
  814. margin-bottom: 60upx;
  815. }
  816. .mobile_item_box {
  817. width: 100%;
  818. margin-bottom: 30upx;
  819. padding: 20upx;
  820. box-sizing: border-box;
  821. background: #f9f9f9;
  822. border-radius: 10upx;
  823. justify-content: flex-start;
  824. }
  825. .mobile_item_box image {
  826. width: 40upx;
  827. height: 40upx;
  828. margin-right: 30upx;
  829. }
  830. .mobile_item_box text {
  831. font-size: 30upx;
  832. font-weight: bold;
  833. }
  834. .mobile_footer_box {
  835. width: 100%;
  836. margin-top: 40upx;
  837. justify-content: space-between;
  838. }
  839. .mobile_footer_box text {
  840. width: 49%;
  841. line-height: 78upx;
  842. text-align: center;
  843. border-radius: 100upx;
  844. }
  845. </style>