index.vue 22 KB

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