index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898
  1. <template>
  2. <view>
  3. <nav-bar :navbarData="navbarData"></nav-bar>
  4. <view :style="`margin-top: ${height * 2 - 20}rpx; height: calc(100vh - ${height * 2 - 2}rpx)`">
  5. <view class="userbg" :style="`background-image:url(${imgDomain}/images/icon/bg_patients_bg.png)`">
  6. <view class="search">
  7. <van-row>
  8. <view class="searchcontent">
  9. <input
  10. type="text"
  11. class="search-input"
  12. placeholder="输入电话,登记号,身份证,姓名,病案号搜索"
  13. placeholder-style="color: #999"
  14. @input="handleInput"
  15. />
  16. </view>
  17. <view class="scan" @tap="scan">
  18. <image :src="`${imgDomain}/images/icon/ydhl_scan.png`" class="custom-icon" />
  19. </view>
  20. </van-row>
  21. </view>
  22. <view class="user" :style="`background-image:url(${imgDomain}/images/icon/bg_user.png)`">
  23. <view class="usericon">
  24. <image class="icon" :src="`${imgDomain}/images/icon/avatar_nurse.png`"></image>
  25. </view>
  26. <view class="userinfo">
  27. <view class="date">{{ dateStr }}</view>
  28. <view class="username">
  29. {{ userData?.userName }}
  30. <span class="but-span">
  31. <view class="userout" @tap="userOutFun">退出登录</view>
  32. <view class="changeloc" @tap="changeloc">切换科室</view>
  33. </span>
  34. </view>
  35. </view>
  36. </view>
  37. <progress :percent="percent" activeColor="#D52424" stroke-width="1"></progress>
  38. </view>
  39. <view class="wardtitle">
  40. <!-- <text style="padding-left: 3px">在院患者 ({{ userData.locDesc }})</text> -->
  41. <view @click="togglePatientType">
  42. <text style="padding-left: 3px">{{ currentType }}</text>
  43. <text class="refresh-icon"> ↺切换</text>
  44. </view>
  45. </view>
  46. <view class="patcontent">
  47. <!-- 在院患者列表 -->
  48. <view
  49. v-if="+currentTypeIndex === 0"
  50. class="patlist"
  51. @tap="gotoPatMainPage(item)"
  52. v-for="(item, index) in wardPatList"
  53. :key="index">
  54. <van-cell
  55. :icon="item.patSexCode === '1' ? `${imgDomain}/images/icon/gender-male.png` : `${imgDomain}/images/icon/gender-female.png`"
  56. use-label-slot>
  57. <van-row slot="title" class="topinfo">
  58. <van-col span="4">{{ item.admBedCode }}</van-col>
  59. <van-col span="15">
  60. <view style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
  61. {{ item.patName }}
  62. </view>
  63. </van-col>
  64. <van-col span="5">
  65. <view class="paticon">
  66. <view
  67. :style="`width:18px;height:18px;background:url(${imgDomain}/images/mobilenurse/bedicon.png);background-position: ${getposition(iconitem)}`"
  68. v-for="(iconitem, iconindex) in item.admIcon"
  69. :key="iconindex"
  70. ></view>
  71. </view>
  72. </van-col>
  73. </van-row>
  74. <van-row slot="label" class="bottominfo">
  75. <van-col span="19">入院时间: {{ item.admDatetime }}</van-col>
  76. <van-col span="5">
  77. <view v-if="item.nurseLv === '特级'" class="nurse-lv-css-red">{{ item.nurseLv }}</view>
  78. <view v-if="item.nurseLv === '一级'" class="nurse-lv-css-pink">{{ item.nurseLv }}</view>
  79. <view v-if="item.nurseLv === '二级'" class="nurse-lv-css-blue">{{ item.nurseLv }}</view>
  80. <view v-if="item.nurseLv === '三级'" class="nurse-lv-css-greenyellow">{{ item.nurseLv }}</view>
  81. </van-col>
  82. </van-row>
  83. </van-cell>
  84. </view>
  85. <!-- 今日门诊手术患者列表 -->
  86. <view
  87. v-if="+currentTypeIndex === 1"
  88. class="patlist"
  89. @tap="openPatOperaModal(item)"
  90. v-for="(item, index) in wardPatList"
  91. :key="index">
  92. <van-cell
  93. :icon="item.patSexCode === '1' ? `${imgDomain}/images/icon/gender-male.png` : `${imgDomain}/images/icon/gender-female.png`"
  94. use-label-slot>
  95. <van-row slot="title" class="topinfo">
  96. <van-col span="20">{{ item.admLocDesc+ ' - ' + item.patName}}</van-col>
  97. <van-col span="4">
  98. <view class="paticon">
  99. <view
  100. :style="`width:18px;height:18px;background:url(${imgDomain}/images/mobilenurse/bedicon.png);background-position: ${getposition(iconitem)}`"
  101. v-for="(iconitem, iconindex) in item.admIcon"
  102. :key="iconindex"
  103. ></view>
  104. </view>
  105. </van-col>
  106. </van-row>
  107. <van-row slot="label" class="bottominfo">
  108. <van-col span="19">就诊时间: {{ item.admDatetime }}</van-col>
  109. <van-col span="5"></van-col>
  110. </van-row>
  111. </van-cell>
  112. </view>
  113. </view>
  114. </view>
  115. <van-action-sheet
  116. :show="showchangeLoc"
  117. title="请选择科室"
  118. @close="onClose"
  119. @cancel="onClose"
  120. >
  121. <van-cell
  122. :title="loc.logonGroupDesc"
  123. :label="loc.logonHospDesc"
  124. :value="loc.logonLocDesc"
  125. value-class="locclass"
  126. :class="curLoc === index ? 'locitemcur' : 'locitem'"
  127. label-class="label"
  128. title-class="title"
  129. @tap="changeToLoc(loc, index)"
  130. v-for="(loc, index) in locList"
  131. :key="index"
  132. ></van-cell>
  133. </van-action-sheet>
  134. <!-- 引入弹框组件 -->
  135. <PaymentDetailPopup
  136. :show="showPopup"
  137. :patientInfo="patientInfo"
  138. :paymentDetails="paymentDetails"
  139. @close="showPopup = false"
  140. />
  141. </view>
  142. </template>
  143. <script setup>
  144. import { ref, onMounted, onUnmounted, computed } from 'vue';
  145. import { httpconfig } from '../../config/httpconfig';
  146. import WXBizDataCrypt from '../../utils/WXBizDataCrypt';
  147. import { onLoad ,onShow } from '@dcloudio/uni-app';
  148. import Util from '../../utils/util.js';
  149. import Common from '../../utils/common.js';
  150. import { $http } from '../../config/https';
  151. import navBar from '@/pages/components/navbar/index';
  152. import PaymentDetailPopup from '@/pages/components/PaymentDetailPopup.vue'
  153. // // 工具函数(替代原wxs模块)
  154. // const getspan = (widh) => {
  155. // return widh.replace("px", "");
  156. // };
  157. // const findPat = (patinfo, searchData) => {
  158. // if (!searchData) return 1;
  159. // const searchStr = searchData.toUpperCase();
  160. // return (
  161. // patinfo.patName.includes(searchData) ||
  162. // patinfo.admBedCode.includes(searchData) ||
  163. // patinfo.patID.includes(searchData) ||
  164. // patinfo.patNameSpell.includes(searchStr) ||
  165. // patinfo.patNo.includes(searchStr) ||
  166. // patinfo.patMedicalNo.includes(searchStr) ||
  167. // patinfo.admID === searchData
  168. // ) ? 1 : 0;
  169. // };
  170. const getposition = (iconitem) => {
  171. return `-${(iconitem.position % 10 - 1) * 18}px -${Math.floor(iconitem.position / 10) * 18}px`;
  172. };
  173. // 响应式数据
  174. const height = ref('');
  175. const navbarData = ref({
  176. background: '',
  177. title: '普瑞眼科移动护理',
  178. height: '100',
  179. bottom: true,
  180. isGoBack: false,
  181. cleanPat: 'Y'
  182. });
  183. const userData = ref(uni.getStorageSync('userData') || {});
  184. const patInfo = ref(uni.getStorageSync('patInfo') || {});
  185. const timer = ref(null);
  186. const dateStr = ref('2020年11月15日 14:25 星期三');
  187. const searchData = ref('');
  188. const countTime = ref(1500);
  189. const searchWaiting = ref(false);
  190. const showchangeLoc = ref(false);
  191. const imgDomain = ref(httpconfig.imgDomain);
  192. const locList = ref([]);
  193. const curLoc = ref(-1);
  194. const wardPatList = ref('');
  195. const percent = ref(0);
  196. const downLineShow = ref(true);
  197. // 控制弹框显示/隐藏
  198. const showPopup = ref(false);
  199. // 患者信息(响应式对象)
  200. const patientInfo = ref({name: '',department: '',doctor: '',time: ''});
  201. // 缴费明细数组(响应式数组)
  202. const paymentDetails = ref([]);
  203. // 定义患者类型选项
  204. const patientTypes = [
  205. { key: 'inpatient', label: `在院患者 (${userData.value.locDesc})` },
  206. { key: 'outpatient', label: '今日门诊手术患者' }
  207. ];
  208. // 当前选中的类型
  209. const currentTypeIndex = ref(0);
  210. // 切换患者类型
  211. const togglePatientType = () => {
  212. currentTypeIndex.value = (currentTypeIndex.value + 1) % patientTypes.length;
  213. wardPatList.value = '';
  214. getAuthorityApply();
  215. };
  216. // 当前显示的类型文本
  217. const currentType = computed(() => {
  218. return patientTypes[currentTypeIndex.value].label;
  219. });
  220. onShow(() => {
  221. try {
  222. const pages = getCurrentPages()
  223. if (pages.length > 0) {
  224. const currentPage = pages[pages.length - 1]
  225. const currentRoute = currentPage.route // 当前页面路由
  226. // 更新全局变量
  227. if (uni.$appGlobal) {
  228. uni.$appGlobal.globalData.value.currentRoute = currentRoute
  229. }
  230. }
  231. getAuthorityApply();
  232. getAppVersion();
  233. } catch (err) {
  234. console.error('更新当前路由失败:', err)
  235. }
  236. })
  237. // 生命周期
  238. onMounted(() => {
  239. // 页面显示时执行
  240. if (!imgDomain.value) {
  241. imgDomain.value = uni.getStorageSync('appUrlAddress');
  242. }
  243. const storedUserData = uni.getStorageSync('userData');
  244. const storedPatInfo = uni.getStorageSync('patInfo');
  245. if (storedUserData) {
  246. userData.value = storedUserData;
  247. patInfo.value = storedPatInfo;
  248. }
  249. getAuthorityApply();
  250. showTime();
  251. getAppVersion();
  252. });
  253. onUnmounted(() => {
  254. if (timer.value) {
  255. clearInterval(timer.value);
  256. }
  257. });
  258. // 获取应用版本
  259. const getAppVersion = async () => {
  260. const appInfo = uni.getAppBaseInfo();
  261. const appVersion = appInfo.appVersion;
  262. const appVersionMessage = await getAppVersionMessage();
  263. $http.post('urlDeault',this, {
  264. code: '02010011',
  265. data: {
  266. params: [{ propId: '76||377' }]
  267. },
  268. success: (res) => {
  269. if (+res.errorCode === 0) {
  270. const setValue = res.result.rows[0].setValue;
  271. if (setValue > appVersion) {
  272. uni.showModal({
  273. title: `检测到新版本V${setValue}`,
  274. content: appVersionMessage.replace(/\\n/g, '\n'),
  275. confirmText: '开始下载更新',
  276. cancelText: '稍后更新',
  277. complete: (res) => {
  278. if (res.confirm) {
  279. downAppApk(setValue);
  280. }
  281. }
  282. });
  283. }
  284. }
  285. }
  286. });
  287. };
  288. const getAppVersionMessage = () => {
  289. return new Promise((resolve) => {
  290. $http.post('urlDeault',this, {
  291. code: '02010011',
  292. data: {
  293. params: [{ propId: '76||400' }]
  294. },
  295. success: (res) => {
  296. if (+res.errorCode === 0) {
  297. const setMessage = res.result.rows[0].setValue;
  298. resolve(setMessage);
  299. } else {
  300. resolve('是否立即下载更新?');
  301. }
  302. },
  303. fail: () => {
  304. resolve('是否立即下载更新?');
  305. }
  306. });
  307. });
  308. };
  309. const downAppApk = (setValue) => {
  310. const appUrlAddress = uni.getStorageSync('appUrlAddress');
  311. const downloadTask = uni.downloadFile({
  312. url: `${appUrlAddress}/images/apk/ydhl-${setValue}.apk`,
  313. success: (downloadResult) => {
  314. plus.runtime.install(
  315. downloadResult.tempFilePath,
  316. { force: true },
  317. () => {
  318. uni.showToast({ title: '更新成功,重启中', icon: 'none' });
  319. plus.runtime.restart();
  320. }
  321. );
  322. },
  323. fail: (res) => {
  324. uni.showToast({ title: `download apk fail: ${res}`, icon: 'none' });
  325. },
  326. complete: () => {
  327. downloadTask.offProgressUpdate();
  328. }
  329. });
  330. downloadTask.onProgressUpdate((res) => {
  331. percent.value = res.progress;
  332. });
  333. };
  334. const scan = () => {
  335. uni.scanCode({
  336. success: (res) => {
  337. const scValue = res.result;
  338. if (scValue.length > 20) {
  339. uni.navigateTo({ url: scValue });
  340. } else {
  341. Util.getPatInfoNew(res.result, () => {
  342. uni.navigateTo({ url: '../patMainPage/patMainPage' });
  343. });
  344. }
  345. }
  346. });
  347. };
  348. const getPatInfo = (admID) => {
  349. $http.post('urlDeault',this, {
  350. code: '03030002',
  351. data: { params: [{ admID }] },
  352. success: (res) => {
  353. if (+res.errorCode === 0) {
  354. patInfo.value = res.result;
  355. uni.setStorage({ key: 'patInfo', data: res.result });
  356. }
  357. }
  358. });
  359. };
  360. //获取列表数据前校验是否处于登录状态
  361. const getAuthorityApply = () => {
  362. const storedUserData = uni.getStorageSync('userData');
  363. if (storedUserData) {
  364. userData.value = storedUserData;
  365. if(+currentTypeIndex.value === 1){
  366. getMZOperaPatList();
  367. }else{
  368. getWardPatList();
  369. }
  370. } else {
  371. gotoAuthority();
  372. }
  373. };
  374. const gotoAuthority = () => {
  375. uni.reLaunch({ url: '../authentication/authentication' });
  376. };
  377. //获取住院病区患者列表数据
  378. const getWardPatList = () => {
  379. const userData = uni.getStorageSync('userData');
  380. uni.showLoading({ title: '数据加载中...' });
  381. $http.post('urlDeault',this, {
  382. code: '04020025',
  383. data: {
  384. params: [{ wardID: userData.locID, patMessage: searchData.value || '' }]
  385. },
  386. success: (res) => {
  387. uni.hideLoading();
  388. if (+res.errorCode === 0) {
  389. wardPatList.value = res.result.patList;
  390. showchangeLoc.value = false;
  391. } else if (['01040053', '01040054', '01040055'].includes(res.errorCode)) {
  392. getWardPatList();
  393. }
  394. }
  395. });
  396. };
  397. //获取今日门诊手术患者列表数据
  398. const getMZOperaPatList = () => {
  399. const userData = uni.getStorageSync('userData');
  400. uni.showLoading({ title: '数据加载中...' });
  401. $http.post('urlDeault',this, {
  402. code: '04020033',
  403. data: {
  404. params: [{ patMessage: searchData.value || '' }]
  405. },
  406. success: (res) => {
  407. uni.hideLoading();
  408. if (+res.errorCode === 0) {
  409. wardPatList.value = res.result.patList;
  410. } else {
  411. uni.showToast({ title: res.errorMessage, icon: 'none' });
  412. }
  413. }
  414. });
  415. };
  416. //住院患者前往患者主页
  417. const gotoPatMainPage = (patInfoData) => {
  418. Util.getPatInfo(patInfoData.admID, () => {
  419. uni.navigateTo({ url: '../patMainPage/patMainPage' });
  420. });
  421. };
  422. //门诊患者打开缴费弹框
  423. const openPatOperaModal = (patInfoData) => {
  424. patientInfo.value = {
  425. name: patInfoData.patName,
  426. department: patInfoData.admLocDesc,
  427. doctor: patInfoData.admDocDesc,
  428. time: patInfoData.admDatetime,
  429. };
  430. //获取门诊手术患者详情数据
  431. getMZOperaPatDetail(patInfoData.admID);
  432. };
  433. //门诊手术患者详情数据
  434. const getMZOperaPatDetail = (admID) => {
  435. uni.showLoading({ title: '数据加载中...' });
  436. $http.post('urlDeault',this, {
  437. code: '04020034',
  438. data: {
  439. params: [{ admID: admID }]
  440. },
  441. success: (res) => {
  442. uni.hideLoading();
  443. if (+res.errorCode === 0) {
  444. paymentDetails.value = res.result;
  445. showPopup.value = true;
  446. } else {
  447. uni.showToast({ title: res.errorMessage, icon: 'none' });
  448. }
  449. }
  450. });
  451. };
  452. const changeloc = () => {
  453. getLocList();
  454. };
  455. const userOutFun = () => {
  456. uni.showModal({
  457. title: '退出登录',
  458. content: '您确定要退出当前登录工号吗?',
  459. success: (res) => {
  460. if (res.confirm) {
  461. uni.removeStorageSync('userData');
  462. gotoAuthority();
  463. }
  464. }
  465. });
  466. };
  467. const onClose = () => {
  468. showchangeLoc.value = false;
  469. };
  470. const showTime = () => {
  471. const showDay = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
  472. timer.value = setInterval(() => {
  473. const time = new Date();
  474. const year = time.getFullYear();
  475. const month = time.getMonth() + 1;
  476. const date = time.getDate();
  477. const day = time.getDay();
  478. const hour = time.getHours().toString().padStart(2, '0');
  479. const minutes = time.getMinutes().toString().padStart(2, '0');
  480. const second = time.getSeconds().toString().padStart(2, '0');
  481. dateStr.value = `${year}年${month}月${date}日 ${hour}:${minutes}:${second} ${showDay[day]}`;
  482. }, 1000);
  483. };
  484. const handleInput = (val) => {
  485. let inputvalue = val.detail.value.replace(/\s+/g, '');
  486. if (inputvalue.length === 10) {
  487. searchData.value = '';
  488. Util.getPatInfoNew(inputvalue, () => {
  489. uni.navigateTo({ url: '../patMainPage/patMainPage' });
  490. });
  491. } else {
  492. searchData.value = inputvalue;
  493. if (!searchWaiting.value) {
  494. searchTimer();
  495. }
  496. }
  497. };
  498. const searchTimer = () => {
  499. searchWaiting.value = true;
  500. const setTimer = setInterval(() => {
  501. countTime.value -= 500;
  502. if (countTime.value <= 0) {
  503. countTime.value = 1500;
  504. searchWaiting.value = false;
  505. clearInterval(setTimer);
  506. getWardPatList();
  507. }
  508. }, 500);
  509. };
  510. const getLocList = () => {
  511. const userData = uni.getStorageSync('userData');
  512. const data = {
  513. params: [{
  514. currentLocFlag: 'Y',
  515. language: 'CN',
  516. userCode: userData.userCode
  517. }]
  518. };
  519. $http.post('urlDeault',this, {
  520. code: '01040043',
  521. data,
  522. success: (res) => {
  523. if (+res.errorCode === 0) {
  524. let currentIndex = -1;
  525. const logonLocAry = res.result.logonLocAry;
  526. logonLocAry.forEach((locInfo, index) => {
  527. if (
  528. locInfo.logonLocID === userData.locID &&
  529. locInfo.logonHospID === userData.hospID &&
  530. locInfo.logonGroupID === userData.groupID
  531. ) {
  532. currentIndex = index;
  533. }
  534. });
  535. locList.value = logonLocAry;
  536. curLoc.value = currentIndex;
  537. showchangeLoc.value = true;
  538. }
  539. }
  540. });
  541. };
  542. const changeToLoc = (loc) => {
  543. const updatedUserData = { ...userData.value };
  544. updatedUserData.locID = loc.logonLocID;
  545. updatedUserData.locDesc = loc.logonLocDesc;
  546. updatedUserData.groupID = loc.logonGroupID;
  547. updatedUserData.groupDesc = loc.logonGroupDesc;
  548. updatedUserData.hospID = loc.logonHospID;
  549. updatedUserData.hospDesc = loc.logonHospDesc;
  550. updatedUserData.hospCode = loc.logonHospCode;
  551. userData.value = updatedUserData;
  552. uni.setStorage({
  553. key: 'userData',
  554. data: updatedUserData,
  555. success: () => {
  556. uni.removeStorage({ key: 'patInfo' });
  557. getWardPatList();
  558. }
  559. });
  560. };
  561. </script>
  562. <style>
  563. /* 保持原样式不变 */
  564. .pat {
  565. font-size: 30rpx;
  566. padding: 0 20rpx;
  567. }
  568. .patInfo {
  569. font-size: 26rpx;
  570. font-weight: 400;
  571. }
  572. .userbg {
  573. width: 100%;
  574. height: 340rpx;
  575. background-size: 100% auto;
  576. background-repeat: no-repeat;
  577. }
  578. .search {
  579. height: 100rpx;
  580. padding: 20rpx 30rpx 0;
  581. }
  582. .searchcontent {
  583. width: calc(100% - 120rpx);
  584. float: left;
  585. }
  586. .search-input {
  587. margin-top: 18rpx;
  588. height: 70rpx;
  589. border-radius: 40rpx;
  590. background-color: #ffffff;
  591. border: #007aff 1px solid;
  592. padding: 0rpx 10rpx;
  593. }
  594. .searchcontent .van-cell__title {
  595. max-width: 0 !important;
  596. min-width: 0 !important;
  597. -webkit-flex: 0;
  598. flex: 0;
  599. }
  600. .scan {
  601. width: 100rpx;
  602. padding-left: 16rpx;
  603. float: left;
  604. color: #fff;
  605. text-align: center;
  606. }
  607. .user {
  608. width: calc(100% - 30rpx);
  609. height: 200rpx;
  610. background-size: 100% auto;
  611. background-repeat: no-repeat;
  612. padding: 0 18rpx 20rpx;
  613. margin-top: -8rpx !important;
  614. }
  615. .usericon {
  616. border-radius: 50%;
  617. margin-left: 12rpx;
  618. background: #e3e4fc;
  619. height: 120rpx;
  620. width: 120rpx;
  621. text-align: center;
  622. line-height: 120rpx;
  623. float: left;
  624. margin: 40rpx 20rpx;
  625. }
  626. .userinfo {
  627. float: left;
  628. width: calc(100% - 190rpx);
  629. height: 120rpx;
  630. margin: 40rpx 0;
  631. line-height: 60rpx;
  632. padding-right: 30rpx;
  633. }
  634. .date {
  635. font-size: 15px;
  636. font-weight: 400;
  637. color: #333333;
  638. }
  639. .icon {
  640. height: 120rpx;
  641. width: 120rpx;
  642. border-radius: 50%;
  643. }
  644. .wardtitle {
  645. width: calc(100% - 56px);
  646. margin: 0 28rpx;
  647. height: 42rpx;
  648. font-size: 15px;
  649. border-left: 8rpx solid #007aff;
  650. font-weight: 400;
  651. color: #333333;
  652. line-height: 42rpx;
  653. margin-bottom: 10rpx;
  654. }
  655. .refresh-icon {
  656. font-size: 14px;
  657. margin-left: 8px;
  658. color: #007aff;
  659. transition: transform 0.5s ease;
  660. }
  661. .username {
  662. font-size: 14px;
  663. font-weight: 400;
  664. color: #666666;
  665. display: flex;
  666. justify-content: space-between;
  667. }
  668. .unwrite {
  669. color: red !important;
  670. font-size: 10px !important;
  671. }
  672. .but-span {
  673. display: flex;
  674. flex-direction: row;
  675. }
  676. .changeloc {
  677. width: 140rpx;
  678. height: 50rpx;
  679. background: #007aff;
  680. border-radius: 4px;
  681. font-size: 25rpx;
  682. color: #fff;
  683. line-height: 50rpx;
  684. border-radius: 8rpx;
  685. text-align: center;
  686. }
  687. .userout {
  688. width: 120rpx;
  689. height: 46rpx;
  690. border-radius: 4px;
  691. border: 1px solid;
  692. color: #007aff;
  693. font-size: 25rpx;
  694. line-height: 46rpx;
  695. border-radius: 8rpx;
  696. text-align: center;
  697. margin-right: 20rpx;
  698. }
  699. .write {
  700. color: #809aff !important;
  701. font-size: 10px !important;
  702. }
  703. .patcontent {
  704. overflow: auto;
  705. height: calc(100% - 500rpx);
  706. }
  707. .patlist .van-cell,
  708. .patlist .van-cell__left-icon-wrap {
  709. height: 120rpx !important;
  710. padding: 0 8px !important;
  711. }
  712. .patlist .van-cell__left-icon-wrap {
  713. line-height: 120rpx !important;
  714. }
  715. .patlist .van-icon--image,
  716. .patlist .van-icon__image {
  717. height: 90rpx !important;
  718. width: 90rpx !important;
  719. bottom: 20rpx !important;
  720. }
  721. .patlist .van-col {
  722. white-space: nowrap;
  723. min-height: 1px;
  724. }
  725. .patlist .van-cell__value {
  726. width: 0 !important;
  727. }
  728. .patlist .van-cell__title {
  729. padding-left: 10rpx;
  730. }
  731. .patlist .van-cell__right-icon-wrap {
  732. height: 100%;
  733. }
  734. .topinfo {
  735. font-size: 32rpx;
  736. font-weight: 400;
  737. color: #666666;
  738. height: 45rpx;
  739. line-height: 40rpx;
  740. padding-top: 8px;
  741. }
  742. .topinfo .van-col {
  743. text-align: left;
  744. }
  745. .paticon {
  746. display: flex;
  747. flex-direction: row;
  748. padding: 0rpx !important;
  749. }
  750. .bottominfo {
  751. font-weight: 400;
  752. color: #999999;
  753. height: 40rpx;
  754. line-height: 40rpx;
  755. }
  756. /* 让row下的所有col内容左对齐 */
  757. .bottominfo .van-col {
  758. text-align: left;
  759. }
  760. .nurse-lv-css-red {
  761. background-color: red;
  762. color: #fff;
  763. border-radius: 4rpx;
  764. padding: 0rpx 18rpx;
  765. font-size: 20rpx;
  766. width: 50rpx;
  767. }
  768. .nurse-lv-css-pink {
  769. background-color: pink;
  770. color: #fff;
  771. border-radius: 4rpx;
  772. padding: 0rpx 18rpx;
  773. font-size: 20rpx;
  774. width: 50rpx;
  775. }
  776. .nurse-lv-css-greenyellow {
  777. background-color: rgb(93, 187, 93);
  778. color: #fff;
  779. border-radius: 4rpx;
  780. padding: 0rpx 18rpx;
  781. font-size: 20rpx;
  782. width: 50rpx;
  783. }
  784. .nurse-lv-css-blue {
  785. background-color: #007aff;
  786. color: #fff;
  787. border-radius: 4rpx;
  788. padding: 0rpx 18rpx;
  789. font-size: 20rpx;
  790. width: 50rpx;
  791. }
  792. .custom-icon {
  793. margin-top: 24rpx;
  794. width: 60rpx;
  795. height: 60rpx;
  796. }
  797. .locclass {
  798. font-size: 34rpx;
  799. font-weight: 500;
  800. color: #000 !important;
  801. }
  802. .locitem .van-cell {
  803. background: #fff;
  804. }
  805. .locitemcur .van-cell {
  806. background: #bfe6f8 !important;
  807. }
  808. .label {
  809. font-size: 32rpx !important;
  810. font-weight: 500;
  811. }
  812. .title {
  813. font-size: 34rpx;
  814. font-weight: 500;
  815. color: #000;
  816. }
  817. </style>