CustomMessageRender.vue 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111
  1. <template>
  2. <view class="custom" @click.stop="handleCustomerItem" @touchstart="handleTouchStart" @longpress="handleLongPress">
  3. <template v-if="isCustom === 'order'">
  4. <view class="wechat-bill-card">
  5. <view class="wechat-bill-header">
  6. <text class="wechat-bill-title">问诊订单</text>
  7. <text class="wechat-bill-status">已创建</text>
  8. </view>
  9. <view class="wechat-bill-body">
  10. <view class="wechat-bill-row">
  11. <text class="wechat-bill-label">患者信息</text>
  12. <text class="wechat-bill-value">{{ extension.patientName }} {{ extension.sex }} {{ extension.mobile }}</text>
  13. </view>
  14. <view class="wechat-bill-row">
  15. <text class="wechat-bill-label">患病时间</text>
  16. <text class="wechat-bill-value">{{ extension.duration }}</text>
  17. </view>
  18. <view class="wechat-bill-row">
  19. <text class="wechat-bill-label">就诊情况</text>
  20. <text class="wechat-bill-value">{{ extension.isVisit }}</text>
  21. </view>
  22. <view class="wechat-bill-row">
  23. <text class="wechat-bill-label">病情描述</text>
  24. <text class="wechat-bill-value wechat-bill-value-multi">{{ extension.title }}</text>
  25. </view>
  26. </view>
  27. <view class="wechat-bill-footer">
  28. <text class="wechat-bill-action">查看订单详情</text>
  29. <text class="wechat-bill-arrow">></text>
  30. </view>
  31. </view>
  32. </template>
  33. <template v-else-if="isCustom === 'prescribe'">
  34. <view class="wechat-service-card">
  35. <view class="wechat-service-header">
  36. <text class="wechat-service-icon">💊</text>
  37. <text class="wechat-service-title">电子处方单</text>
  38. </view>
  39. <view class="wechat-service-body">
  40. <text class="wechat-service-desc">诊断结果:{{ extension.diagnose }}</text>
  41. </view>
  42. <view class="wechat-service-footer">
  43. <text class="wechat-service-action">查看处方</text>
  44. </view>
  45. </view>
  46. </template>
  47. <template v-else-if="isCustom === 'report'">
  48. <view class="wechat-service-card">
  49. <view class="wechat-service-header">
  50. <text class="wechat-service-icon">📝</text>
  51. <text class="wechat-service-title">问诊报告单</text>
  52. </view>
  53. <view class="wechat-service-body">
  54. <text class="wechat-service-desc">点击查看详细问诊报告</text>
  55. </view>
  56. <view class="wechat-service-footer">
  57. <text class="wechat-service-action">查看报告单</text>
  58. </view>
  59. </view>
  60. </template>
  61. <template v-else-if="isCustom === 'follow'">
  62. <view class="wechat-service-card">
  63. <view class="wechat-service-header">
  64. <text class="wechat-service-icon">📋</text>
  65. <text class="wechat-service-title">随访单</text>
  66. </view>
  67. <view class="wechat-service-body">
  68. <text class="wechat-service-desc">请填写随访记录</text>
  69. </view>
  70. <view class="wechat-service-footer">
  71. <text class="wechat-service-action">查看随访</text>
  72. </view>
  73. </view>
  74. </template>
  75. <template v-else-if="isCustom === 'drugReport'">
  76. <view class="wechat-service-card">
  77. <view class="wechat-service-header">
  78. <text class="wechat-service-icon">🔬</text>
  79. <text class="wechat-service-title">用药报告单</text>
  80. </view>
  81. <view class="wechat-service-body">
  82. <text class="wechat-service-desc">点击查看详细用药报告</text>
  83. </view>
  84. <view class="wechat-service-footer">
  85. <text class="wechat-service-action">查看报告单</text>
  86. </view>
  87. </view>
  88. </template>
  89. <template v-else-if="isCustom === 'package'">
  90. <view class="wechat-link-card">
  91. <view class="wechat-link-content">
  92. <text class="wechat-link-title">{{extension.title}}</text>
  93. </view>
  94. <image class="wechat-link-image" :src="extension.image" mode="aspectFill" v-if="!!extension.image"></image>
  95. <view class="wechat-link-placeholder" v-else>
  96. <text class="wechat-link-icon">🔗</text>
  97. </view>
  98. </view>
  99. </template>
  100. <template v-else-if="isCustom === 'couponPackage'">
  101. <view class="wechat-coupon-card">
  102. <view class="wechat-coupon-body">
  103. <view class="wechat-coupon-left">
  104. <text class="wechat-coupon-symbol">¥</text>
  105. <text class="wechat-coupon-price">{{ extension.price.toFixed(2) }}</text>
  106. </view>
  107. <view class="wechat-coupon-right">
  108. <text class="wechat-coupon-title">{{extension.title}}</text>
  109. <text class="wechat-coupon-cond">满{{ extension.minPrice.toFixed(2) }}元可用</text>
  110. </view>
  111. </view>
  112. <view class="wechat-coupon-footer">
  113. <text class="wechat-coupon-date">{{ extension.limitTime }} 到期</text>
  114. <text class="wechat-coupon-action">查看详情 ></text>
  115. </view>
  116. </view>
  117. </template>
  118. <template v-else-if="isCustom === 'inquirySelect'">
  119. <view class="wechat-link-card">
  120. <view class="wechat-link-content">
  121. <text class="wechat-link-title">{{extension.title}}</text>
  122. <text class="wechat-link-desc">医疗专家团队远程咨询</text>
  123. </view>
  124. <image class="wechat-link-image" :src="extension.image" mode="aspectFill" v-if="!!extension.image"></image>
  125. <view class="wechat-link-placeholder" v-else>
  126. <text class="wechat-link-icon">🔗</text>
  127. </view>
  128. </view>
  129. </template>
  130. <template v-else-if="isCustom === 'applyForm'">
  131. <view class="package-item">
  132. <view class="title">{{extension.diagnose}}</view>
  133. <!-- <view class="stitle">医疗专家团队远程咨询</view> -->
  134. <view class="btns">
  135. <view class="btn">申请确认</view>
  136. </view>
  137. </view>
  138. </template>
  139. <template v-else-if="isCustom === 'startInquiry'">
  140. <view class="system-bubble">
  141. <text class="system-bubble-text">{{ extension.title }}</text>
  142. </view>
  143. </template>
  144. <template v-else-if="isCustom === 'finishInquiry'">
  145. <view class="system-bubble">
  146. <text class="system-bubble-text">{{ extension.title }}</text>
  147. </view>
  148. </template>
  149. <template v-else-if="isCustom === 'course'">
  150. <view class="wechat-link-card">
  151. <view class="wechat-link-content course-item" style="min-height: 80px;">
  152. <text class="wechat-link-title course-title" style="font-size: 21px; ">{{extension.title}}</text>
  153. <text class="wechat-link-desc course-desc" v-if="extension.courseName">{{extension.courseName}}</text>
  154. </view>
  155. <image class="wechat-link-image" style="width: 130rpx;height: 130rpx;margin-top:3px " :src="extension.courseUrl" mode="aspectFill" v-if="!!extension.courseUrl"></image>
  156. <view class="wechat-link-placeholder" v-else>
  157. <text class="wechat-link-icon">🎬</text>
  158. </view>
  159. </view>
  160. </template>
  161. <template v-else-if="isCustom === 'luckyBag'">
  162. <view class="box">
  163. <view class="luckyBagBox" :class="isSender ? 'image_right' : 'image_left'">
  164. <view class="u-f es-ac">
  165. <view class="u-f-ajc es-mr-20">
  166. <image class="es-icon-56" src="/pages_im/static/images/luckyBag/new_lucky_bag_icon.png" mode=""></image>
  167. </view>
  168. <view class="es-fs-32 es-fw-500 es-c-white">
  169. 给你发送福袋
  170. </view>
  171. </view>
  172. <view class="es-mt-16 luckyBagBox-line"></view>
  173. <view class="es-mt-16 es-fs-20 es-c-white">
  174. 专属福袋
  175. </view>
  176. </view>
  177. </view>
  178. </template>
  179. <template v-else>
  180. <view class="content"></view>
  181. </template>
  182. </view>
  183. </template>
  184. <script>
  185. import MyAvatar from '../../../../../components/MyAvatar/index.vue';
  186. export default {
  187. name: 'CustomMessageRender',
  188. components: { MyAvatar },
  189. props: {
  190. message: {
  191. type: Object,
  192. default: () => ({
  193. customElem: {
  194. data: '{}' // 默认空JSON
  195. },
  196. cardElem: {
  197. userID: ''
  198. }
  199. })
  200. },
  201. isSender: {
  202. type: Boolean,
  203. default: false
  204. }
  205. },
  206. data() {
  207. return {
  208. isCustom: null,
  209. payload: {},
  210. extension: {},
  211. touchStartTime: 0,
  212. isLongPress: false
  213. };
  214. },
  215. watch: {
  216. message: {
  217. handler(val) {
  218. this.safeParseData();
  219. },
  220. deep: true,
  221. immediate: true
  222. }
  223. },
  224. methods: {
  225. safeParseData() {
  226. try {
  227. const rawData = this.message?.customElem?.data || '{}';
  228. const parsed = JSON.parse(rawData);
  229. //结构化赋值
  230. this.payload = parsed.payload || {};
  231. this.extension = this.payload.extension || {};
  232. this.isCustom = this.payload.data ?? null;
  233. } catch (e) {
  234. console.error('[消息解析失败]', e);
  235. this.$emit('parse-error', {
  236. raw: this.message,
  237. error: e
  238. });
  239. }
  240. },
  241. /**
  242. * 处理触摸开始事件,记录时间戳
  243. */
  244. handleTouchStart() {
  245. this.touchStartTime = Date.now();
  246. this.isLongPress = false;
  247. },
  248. /**
  249. * 处理长按事件
  250. */
  251. handleLongPress() {
  252. this.isLongPress = true;
  253. this.$emit('longpress', this.message);
  254. },
  255. /**
  256. * 处理点击事件,根据触摸时长拦截长按触发的点击
  257. */
  258. handleCustomerItem() {
  259. // 如果是长按触发的(通过标志位或时间差判断),则拦截点击
  260. const duration = Date.now() - this.touchStartTime;
  261. if (this.isLongPress || duration > 350) return;
  262. const rawData = this.message?.customElem.data;
  263. let item = JSON.parse(rawData);
  264. // console.log("handleCustomerItem:::", item);
  265. if (item.payload.data == 'order') {
  266. this.$emit('enterSubPage');
  267. uni.navigateTo({
  268. url: '/pages/store/inquiryOrderDetails?orderId=' + item.payload.description
  269. });
  270. } else if (item.payload.data == 'prescribe') {
  271. var prescribe = item.payload.extension;
  272. this.$emit('enterSubPage');
  273. uni.navigateTo({
  274. url: '/pages/store/prescribeDetails?prescribeId=' + prescribe.prescribeId
  275. });
  276. } else if (item.payload.data == 'package') {
  277. var packageItem = item.payload.extension;
  278. let companyId=packageItem.companyId;
  279. let companyUserId=packageItem.companyUserId;
  280. let nUrl="/pages/store/packageDetails?packageId="+packageItem.packageId+"&companyId="+companyId+"&companyUserId="+companyUserId;
  281. this.$emit('enterSubPage');
  282. uni.navigateTo({url: nUrl});
  283. }
  284. else if (item.payload.data == 'couponPackage') {
  285. // console.log("qxj item",item);
  286. var cItem = item.payload.extension;
  287. let companyId=cItem.companyId;
  288. let companyUserId=cItem.companyUserId;
  289. let nUrl='/pages/company/couponDetails?couponId='+cItem.couponId+"&isShare=1";
  290. this.$emit('enterSubPage');
  291. uni.navigateTo({url: nUrl});
  292. }
  293. else if (item.payload.data == 'inquirySelect') {
  294. var cItem = item.payload.extension;
  295. let companyId=cItem.companyId;
  296. let companyUserId=cItem.companyUserId;
  297. let type=cItem.type;
  298. this.$emit('enterSubPage');
  299. if(type==3){
  300. let nUrl="/pages/store/inquiryForm2_2?inquiryType=2&orderType=2&inquirySubType="+type+"&companyId="+companyId+"&companyUserId="+companyUserId+"&isShare=1";
  301. uni.navigateTo({url: nUrl});
  302. } else if(type==4){
  303. } else {
  304. let nUrl="/pages/store/inquiryForm2_1?inquiryType=2&orderType=2&inquirySubType="+type+"&companyId="+companyId+"&companyUserId="+companyUserId+"&isShare=1";
  305. uni.navigateTo({url: nUrl});
  306. }
  307. }
  308. else if (item.payload.data == 'follow') {
  309. var follow = item.payload.extension;
  310. this.$emit('enterSubPage');
  311. if (follow.writeStatus == 0) {
  312. uni.navigateTo({
  313. url: '/pages/user/doFollow?followId=' + follow.followId
  314. });
  315. } else if (follow.writeStatus == 1) {
  316. uni.navigateTo({
  317. url: '/pages/user/followDetails?followId=' + follow.followId
  318. });
  319. }
  320. } else if (item.payload.data == 'report') {
  321. this.$emit('enterSubPage');
  322. uni.navigateTo({
  323. url: '/pages/store/inquiryOrderReport?orderId=' + item.payload.description
  324. });
  325. } else if (item.payload.data == 'drugReport') {
  326. // var report=JSON.parse(item.payload.extension);
  327. this.$emit('enterSubPage');
  328. uni.navigateTo({
  329. url: '/pages/user/drugReportDetails?reportId=' + item.payload.description
  330. });
  331. }else if (item.payload.data == 'course') {
  332. //console.log("qxj extension:",item);
  333. var couseItem=item.payload.extension;
  334. if(couseItem.appRealLink) {
  335. this.$emit('enterSubPage');
  336. uni.navigateTo({
  337. url: couseItem.appRealLink
  338. });
  339. }else {
  340. uni.showToast({
  341. icon:'none',
  342. title: "暂无看课链接",
  343. });
  344. }
  345. } else if (item.payload.data == "luckyBag") {
  346. console.log("qxj extension:",item);
  347. let luckyBagItem=item.payload.extension;
  348. if(luckyBagItem.appRealLink) {
  349. let str = luckyBagItem.appRealLink.split('?link=')[1]
  350. uni.navigateTo({
  351. url: '/pages/courseAnswer/luckyBag?link='+str
  352. });
  353. }else {
  354. uni.showToast({
  355. icon:'none',
  356. title: "福袋信息为空",
  357. });
  358. }
  359. }
  360. }
  361. }
  362. };
  363. </script>
  364. <style lang="scss" scoped>
  365. .card_message_container {
  366. display: flex;
  367. flex-direction: column;
  368. background-color: #fff;
  369. box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.1);
  370. border-radius: 12rpx;
  371. width: 444rpx;
  372. border-width: 1px;
  373. border-style: solid;
  374. border-color: #ececec;
  375. }
  376. .card_info {
  377. display: flex;
  378. flex-direction: row;
  379. align-items: center;
  380. padding: 24rpx 32rpx;
  381. border-bottom-width: 1px;
  382. border-bottom-style: solid;
  383. border-bottom-color: #e9e9e9;
  384. }
  385. .card_name {
  386. overflow: hidden;
  387. text-overflow: ellipsis;
  388. lines: 1;
  389. margin-left: 24rpx;
  390. font-size: 16px;
  391. }
  392. .card_desc {
  393. padding: 8rpx 0 8rpx 42rpx;
  394. color: #999;
  395. }
  396. .custom {
  397. padding:0 0 12px 0;
  398. }
  399. .order-item {
  400. width: 400rpx;
  401. padding: 15rpx;
  402. border-width: 1rpx;
  403. border-style: solid;
  404. border-color: #ececec;
  405. box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
  406. background-color: #fff;
  407. border-radius: 15rpx;
  408. display: flex;
  409. flex-direction: column;
  410. align-items: flex-start;
  411. justify-content: flex-start;
  412. }
  413. .order-item-title {
  414. font-size: 16px;
  415. font-family: PingFang SC;
  416. font-weight: bold;
  417. color: #111111;
  418. }
  419. .order-item-text {
  420. font-size: 16px;
  421. font-family: PingFang SC;
  422. color: #9a9a9c;
  423. padding:6rpx 0;
  424. }
  425. .prescribe-item {
  426. width: 400rpx;
  427. padding: 15rpx;
  428. border-width: 1rpx;
  429. border-style: solid;
  430. border-color: #ececec;
  431. box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
  432. background-color: #fff;
  433. border-radius: 15rpx;
  434. display: flex;
  435. flex-direction: column;
  436. align-items: flex-start;
  437. justify-content: flex-start;
  438. }
  439. .prescribe-item-title {
  440. font-size: 16px;
  441. font-family: PingFang SC;
  442. font-weight: bold;
  443. color: #111111;
  444. }
  445. .prescribe-item-text {
  446. margin-top: 10rpx;
  447. font-size: 14px;
  448. font-family: PingFang SC;
  449. color: #9a9a9c;
  450. }
  451. .prescribe-item-btns {
  452. padding: 15rpx;
  453. display: flex;
  454. flex-direction: row;
  455. align-items: center;
  456. justify-content: center;
  457. width: 100%;
  458. }
  459. .prescribe-item-btn {
  460. border-radius: 30rpx;
  461. padding: 15rpx 30rpx;
  462. border-width: 1rpx;
  463. border-style: solid;
  464. border-color: #ececec;
  465. font-family: PingFang SC;
  466. color: #333333;
  467. }
  468. .report-item {
  469. width: 400rpx;
  470. padding: 15rpx;
  471. border-width: 1rpx;
  472. border-style: solid;
  473. border-color: #ececec;
  474. box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
  475. background-color: #fff;
  476. border-radius: 15rpx;
  477. display: flex;
  478. flex-direction: column;
  479. align-items: flex-start;
  480. justify-content: flex-start;
  481. }
  482. .report-item-title {
  483. font-size: 17px;
  484. font-family: PingFang SC;
  485. font-weight: bold;
  486. color: #111111;
  487. }
  488. .report-item-text {
  489. margin-top: 10rpx;
  490. font-size: 15px;
  491. font-family: PingFang SC;
  492. color: #9a9a9c;
  493. }
  494. .report-item-btns {
  495. padding: 15rpx;
  496. display: flex;
  497. flex-direction: row;
  498. align-items: center;
  499. justify-content: center;
  500. width: 100%;
  501. }
  502. .report-item-btn {
  503. border-radius: 30rpx;
  504. padding: 15rpx 30rpx;
  505. border-width: 1rpx;
  506. border-style: solid;
  507. border-color: #ececec;
  508. font-family: PingFang SC;
  509. color: #333333;
  510. }
  511. .package-item {
  512. width: 450rpx;
  513. padding: 15rpx;
  514. border-width: 1rpx;
  515. border-style: solid;
  516. border-color: #ececec;
  517. box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
  518. background-color: #fff;
  519. border-radius: 15rpx;
  520. display: flex;
  521. flex-direction: column;
  522. align-items: flex-start;
  523. justify-content: flex-start;
  524. }
  525. .package-item-title {
  526. font-size: 17px;
  527. font-family: PingFang SC;
  528. font-weight: bold;
  529. color: #333;
  530. margin-bottom: 10rpx;
  531. }
  532. .package-item-stitle {
  533. font-size: 15px;
  534. font-family: PingFang SC;
  535. font-weight: 500;
  536. color: #666;
  537. margin-bottom: 10rpx;
  538. display: flex;
  539. flex-direction: row;
  540. align-items: center;
  541. }
  542. .package-item-stitle-text {
  543. font-size: 15px;
  544. font-family: PingFang SC;
  545. font-weight: 500;
  546. color: #666;
  547. }
  548. .package-item-psub {
  549. color: #e41f19;
  550. font-size: 15px;
  551. font-style: normal;
  552. }
  553. .package-item-price {
  554. font-size: 18px;
  555. font-style: normal;
  556. font-weight: bold;
  557. }
  558. .package-item-stitle1 {
  559. font-size: 16px;
  560. }
  561. .package-item-cover {
  562. width: 100%;
  563. height: 400rpx;
  564. border-radius: 16rpx;
  565. box-sizing: border-box;
  566. }
  567. .package-item-image {
  568. width: 100%;
  569. height: 100%;
  570. }
  571. .package-item-btns {
  572. padding: 15rpx;
  573. display: flex;
  574. flex-direction: row;
  575. align-items: center;
  576. justify-content: center;
  577. width: 100%;
  578. }
  579. .package-item-btn {
  580. border-radius: 30rpx;
  581. padding: 15rpx 30rpx;
  582. border-width: 1rpx;
  583. border-style: solid;
  584. border-color: #ececec;
  585. font-family: PingFang SC;
  586. color: #333333;
  587. }
  588. .content {
  589. padding: 10px;
  590. background-color: #f0f0f0;
  591. }
  592. .content-in {
  593. border-radius: 0px 10px 10px 10px;
  594. }
  595. .content-ou {
  596. border-radius: 10px 0px 10px 10px;
  597. }
  598. .content-text {
  599. font-size: 16px;
  600. color: #333;
  601. }
  602. .list-item {
  603. width: 450rpx;
  604. padding: 0rpx;
  605. border-width: 1rpx;
  606. border-style: solid;
  607. border-color: #ececec;
  608. box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
  609. background-color: #fff;
  610. border-radius: 16rpx;
  611. margin-bottom: 20rpx;
  612. box-sizing: border-box;
  613. font-family: PingFang SC, PingFang SC;
  614. font-weight: 400;
  615. font-size: 16px;
  616. color: #333333;
  617. line-height: 36rpx;
  618. }
  619. .list-cover-image {
  620. width: 150rpx;
  621. height: 120rpx;
  622. margin-left: 16rpx;
  623. background-color: #F5F6F6;
  624. border-radius: 10rpx 10rpx 10rpx 10rpx;
  625. }
  626. .list-con {
  627. width: 100%;
  628. padding: 24rpx;
  629. box-sizing: border-box;
  630. display: flex;
  631. flex-direction: column;
  632. align-items: flex-start;
  633. justify-content: space-between;
  634. }
  635. .list-cover {
  636. width: 100%;
  637. margin-top: 20rpx;
  638. display: flex;
  639. flex-direction: row;
  640. align-items: flex-start;
  641. justify-content: flex-end;
  642. }
  643. .list-itemtxt {
  644. flex: 1;
  645. overflow: hidden;
  646. word-break: break-all;
  647. display: flex;
  648. flex-direction: column;
  649. }
  650. .list-title {
  651. word-break: break-all;
  652. }
  653. .list-desc {
  654. margin-top: 0rpx;
  655. font-size: 16px;
  656. color: #333;
  657. line-height: 22px;
  658. }
  659. .list-time {
  660. font-size: 14px;
  661. color: #999999;
  662. }
  663. .list-footer {
  664. padding: 20rpx 24rpx;
  665. box-sizing: border-box;
  666. display: flex;
  667. flex-direction: row;
  668. align-items: center;
  669. justify-content: space-between;
  670. position: relative;
  671. }
  672. .list-footer-view {
  673. display: flex;
  674. flex-direction: row;
  675. align-items: center;
  676. justify-content: flex-start;
  677. }
  678. .list-footer-image {
  679. height: 50rpx;
  680. width: 50rpx;
  681. border-radius: 50%;
  682. margin: 0 10rpx 0 0;
  683. }
  684. /* WeChat Style Link Card (Package) */
  685. .wechat-link-card {
  686. width: 500rpx;
  687. background-color: #FFFFFF;
  688. border-radius: 10rpx;
  689. padding: 24rpx;
  690. display: flex;
  691. flex-direction: row;
  692. align-items: flex-start;
  693. justify-content: space-between;
  694. border-width: 1rpx;
  695. border-style: solid;
  696. border-color: #ededed;
  697. }
  698. .wechat-link-content {
  699. flex: 1;
  700. margin-right: 20rpx;
  701. min-height: 100rpx;
  702. display: flex;
  703. flex-direction: column;
  704. justify-content: space-between;
  705. }
  706. .wechat-link-title {
  707. font-size: 19px;
  708. color: #333333;
  709. lines: 2;
  710. text-overflow: ellipsis;
  711. line-height: 44rpx;
  712. font-weight: 400;
  713. }
  714. .wechat-link-desc {
  715. font-size: 16px;
  716. color: #666666;
  717. lines: 1;
  718. text-overflow: ellipsis;
  719. margin-top: 8rpx;
  720. }
  721. .course-title{
  722. text-overflow: ellipsis;
  723. lines: 3;
  724. }
  725. .course-item {
  726. justify-content: center;
  727. }
  728. .course-desc {
  729. text-overflow: inherit;
  730. }
  731. .wechat-link-image {
  732. width: 100rpx;
  733. height: 100rpx;
  734. border-radius: 8rpx;
  735. background-color: #f5f5f5;
  736. }
  737. .wechat-link-placeholder {
  738. width: 100rpx;
  739. height: 100rpx;
  740. border-radius: 8rpx;
  741. background-color: #f5f5f5;
  742. display: flex;
  743. align-items: center;
  744. justify-content: center;
  745. }
  746. .wechat-link-icon {
  747. font-size: 40rpx;
  748. }
  749. /* WeChat Style Coupon Card (CouponPackage) */
  750. .wechat-coupon-card {
  751. width: 500rpx;
  752. background-color: #FFFFFF;
  753. border-radius: 12rpx;
  754. border-width: 1rpx;
  755. border-style: solid;
  756. border-color: #ededed;
  757. overflow: hidden;
  758. display: flex;
  759. flex-direction: column;
  760. }
  761. .wechat-coupon-body {
  762. display: flex;
  763. flex-direction: row;
  764. padding: 30rpx 24rpx;
  765. align-items: center;
  766. }
  767. .wechat-coupon-left {
  768. display: flex;
  769. flex-direction: row;
  770. align-items: baseline;
  771. }
  772. .wechat-coupon-symbol {
  773. font-size: 14px;
  774. color: #fa5151;
  775. font-weight: 500;
  776. margin-right: 4rpx;
  777. }
  778. .wechat-coupon-price {
  779. font-size: 56rpx;
  780. color: #fa5151;
  781. font-weight: bold;
  782. line-height: 56rpx;
  783. }
  784. .wechat-coupon-right {
  785. flex: 1;
  786. margin-left: 24rpx;
  787. display: flex;
  788. flex-direction: column;
  789. justify-content: center;
  790. }
  791. .wechat-coupon-title {
  792. font-size: 17px;
  793. color: #333333;
  794. font-weight: bold;
  795. lines: 1;
  796. text-overflow: ellipsis;
  797. margin-bottom: 8rpx;
  798. }
  799. .wechat-coupon-cond {
  800. font-size: 14px;
  801. color: #999999;
  802. lines: 1;
  803. text-overflow: ellipsis;
  804. }
  805. .wechat-coupon-footer {
  806. background-color: #fafafa;
  807. padding: 16rpx 24rpx;
  808. border-top-width: 1rpx;
  809. border-top-style: dashed;
  810. border-top-color: #e0e0e0;
  811. display: flex;
  812. flex-direction: row;
  813. justify-content: space-between;
  814. align-items: center;
  815. }
  816. .wechat-coupon-date {
  817. font-size: 14px;
  818. color: #999999;
  819. }
  820. .wechat-coupon-action {
  821. font-size: 14px;
  822. color: #999999;
  823. }
  824. /* WeChat Style Bill Card (Order) */
  825. .wechat-bill-card {
  826. width: 500rpx;
  827. background-color: #FFFFFF;
  828. border-radius: 12rpx;
  829. border-width: 1rpx;
  830. border-style: solid;
  831. border-color: #ededed;
  832. overflow: hidden;
  833. display: flex;
  834. flex-direction: column;
  835. }
  836. .wechat-bill-header {
  837. padding: 24rpx;
  838. border-bottom-width: 1rpx;
  839. border-bottom-style: solid;
  840. border-bottom-color: #f0f0f0;
  841. display: flex;
  842. flex-direction: row;
  843. justify-content: space-between;
  844. align-items: center;
  845. }
  846. .wechat-bill-title {
  847. font-size: 17px;
  848. font-weight: bold;
  849. color: #333333;
  850. }
  851. .wechat-bill-status {
  852. font-size: 14px;
  853. color: #fa5151; /* Or green #07c160 depending on state */
  854. }
  855. .wechat-bill-body {
  856. padding: 24rpx;
  857. display: flex;
  858. flex-direction: column;
  859. }
  860. .wechat-bill-row {
  861. display: flex;
  862. flex-direction: row;
  863. margin-bottom: 12rpx;
  864. align-items: flex-start;
  865. }
  866. .wechat-bill-label {
  867. font-size: 14px;
  868. color: #999999;
  869. width: 140rpx;
  870. flex-shrink: 0;
  871. }
  872. .wechat-bill-value {
  873. font-size: 14px;
  874. color: #333333;
  875. flex: 1;
  876. }
  877. .wechat-bill-value-multi {
  878. lines: 2;
  879. text-overflow: ellipsis;
  880. }
  881. .wechat-bill-footer {
  882. padding: 20rpx 24rpx;
  883. border-top-width: 1rpx;
  884. border-top-style: solid;
  885. border-top-color: #f0f0f0;
  886. display: flex;
  887. flex-direction: row;
  888. justify-content: space-between;
  889. align-items: center;
  890. }
  891. .wechat-bill-action {
  892. font-size: 14px;
  893. color: #333333;
  894. }
  895. .wechat-bill-arrow {
  896. font-size: 14px;
  897. color: #c7c7cc;
  898. }
  899. /* WeChat Style Service Card (Prescribe, Report, Follow) */
  900. .wechat-service-card {
  901. width: 500rpx;
  902. background-color: #FFFFFF;
  903. border-radius: 12rpx;
  904. border-width: 1rpx;
  905. border-style: solid;
  906. border-color: #ededed;
  907. padding: 30rpx 24rpx;
  908. display: flex;
  909. flex-direction: column;
  910. align-items: center;
  911. }
  912. .wechat-service-header {
  913. display: flex;
  914. flex-direction: column;
  915. align-items: center;
  916. margin-bottom: 16rpx;
  917. }
  918. .wechat-service-icon {
  919. font-size: 60rpx;
  920. margin-bottom: 10rpx;
  921. }
  922. .wechat-service-title {
  923. font-size: 17px;
  924. font-weight: bold;
  925. color: #333333;
  926. }
  927. .wechat-service-body {
  928. margin-bottom: 24rpx;
  929. }
  930. .wechat-service-desc {
  931. font-size: 14px;
  932. color: #666666;
  933. text-align: center;
  934. lines: 2;
  935. text-overflow: ellipsis;
  936. }
  937. .wechat-service-footer {
  938. width: 100%;
  939. }
  940. .wechat-service-action {
  941. width: 100%;
  942. height: 72rpx;
  943. line-height: 72rpx;
  944. text-align: center;
  945. background-color: #f7f7f7;
  946. border-radius: 8rpx;
  947. font-size: 28rpx;
  948. color: #576b95; /* WeChat Link Blue */
  949. font-weight: 500;
  950. }
  951. /* System Bubble */
  952. .system-bubble {
  953. padding: 10rpx 24rpx;
  954. background-color: rgba(0, 0, 0, 0.1); /* Semi-transparent gray */
  955. border-radius: 8rpx;
  956. align-self: center; /* Center in chat flow */
  957. margin: 10rpx 0;
  958. }
  959. .system-bubble-text {
  960. font-size: 17px;
  961. color: #FFFFFF;
  962. color: #666666;
  963. }
  964. .luckyBagBox {
  965. width: 384rpx;
  966. height: 160rpx;
  967. border-radius: 8rpx;
  968. padding: 24rpx 24rpx 20rpx 24rpx;
  969. background-repeat: no-repeat;
  970. background-size: 100% 100%;
  971. .luckyBagBox-line {
  972. width: 100%;
  973. height: 1rpx;
  974. background: rgba(255, 255, 255,0.2);
  975. }
  976. }
  977. .image_right {
  978. background-image: url('/pages_im/static/images/luckyBag/lucky_bag_new_bg_right.png');
  979. }
  980. .image_left {
  981. background-image: url('/pages_im/static/images/luckyBag/lucky_bag_new_bg_left.png');
  982. }
  983. </style>