Açıklama Yok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Home2.vue 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579
  1. <!-- 首页 -->
  2. <template>
  3. <!-- 主要内容区域 -->
  4. <div class="body-bg">
  5. <div class="card">
  6. <div class="title">常用应用</div>
  7. <van-grid :border="false" :column-num="4">
  8. <van-grid-item v-for="(item,idx) in functionList" :key="idx" :to="item.jumpPath">
  9. <img :src="item.img" width="45rpx" />
  10. <span class="vanicon_text">{{ item.title }}</span>
  11. </van-grid-item>
  12. </van-grid>
  13. </div>
  14. <div class="card">
  15. <div class="title">制度管理</div>
  16. <van-grid :border="false" :column-num="4">
  17. <van-grid-item to="/institution/law">
  18. <img src="../../public/images/fl.png" width="45rpx" />
  19. <span class="vanicon_text">法律法规</span>
  20. </van-grid-item>
  21. <van-grid-item to="/institution/institutionRegime">
  22. <img src="../../public/images/aqzd.png" width="45rpx" />
  23. <span class="vanicon_text">安全制度管理</span>
  24. </van-grid-item>
  25. <van-grid-item to="/institution/institutionRule">
  26. <img src="../../public/images/zd.png" width="45rpx" />
  27. <span class="vanicon_text">安全操作规程</span>
  28. </van-grid-item>
  29. </van-grid>
  30. </div>
  31. <div class="card">
  32. <div class="title">安全责任履职</div>
  33. <van-grid :border="false" :column-num="4">
  34. <van-grid-item to="/lvzhi">
  35. <img src="../../public/images/lz.png" width="45rpx" />
  36. <span class="vanicon_text">履职记录</span>
  37. </van-grid-item>
  38. <van-grid-item to="/lvzhicx">
  39. <img src="../../public/images/lzcx.png" width="45rpx" />
  40. <span class="vanicon_text">履职查询</span>
  41. </van-grid-item>
  42. <van-grid-item v-if='false'>
  43. <img src="../../public/images/zj.png" width="45rpx" @click="handleClick" />
  44. <span class="vanicon_text">站内信推送</span>
  45. </van-grid-item>
  46. </van-grid>
  47. </div>
  48. <div class="card">
  49. <div class="title">风险分级管理</div>
  50. <van-grid :border="false" :column-num="4">
  51. <van-grid-item to="/institution/riskList">
  52. <img src="../../public/images/fx.png" width="45rpx" />
  53. <span class="vanicon_text">风险分级管控记录</span>
  54. </van-grid-item>
  55. </van-grid>
  56. </div>
  57. <div class="card">
  58. <div class="title">隐患排查治理</div>
  59. <van-grid :border="false" :column-num="4">
  60. <van-grid-item to="/yinhuan/registration">
  61. <img src="../../public/images/yhdj.png" width="45rpx" />
  62. <span class="vanicon_text">隐患登记</span>
  63. </van-grid-item>
  64. <van-grid-item to="/yinhuan/todo">
  65. <img src="../../public/images/yhdb.png" width="45rpx" />
  66. <span class="vanicon_text">隐患待办</span>
  67. </van-grid-item>
  68. <van-grid-item to="/yinhuan/hdLedger">
  69. <img src="../../public/images/yh.png" width="45rpx" />
  70. <span class="vanicon_text">隐患台账</span>
  71. </van-grid-item>
  72. <van-grid-item to="/yinhuan/riskChecklist">
  73. <img src="../../public/images/riskChecklist.png" width="45rpx" />
  74. <span class="vanicon_text">隐患排查清单</span>
  75. </van-grid-item>
  76. <van-grid-item to="/yinhuan/riskChecklistRecords">
  77. <img src="../../public/images/riskChecklistRecords.png" width="45rpx" />
  78. <span class="vanicon_text">隐患排查记录</span>
  79. </van-grid-item>
  80. <van-grid-item to="/yinhuan/hdRwardReporting">
  81. <img src="../../public/images/yhdb.png" width="45rpx" />
  82. <span class="vanicon_text">隐患有奖举报</span>
  83. </van-grid-item>
  84. <van-grid-item to="/yinhuan/hdLedgerJuBao">
  85. <img src="../../public/images/yh.png" width="45rpx" />
  86. <span class="vanicon_text">隐患有奖举报台账</span>
  87. </van-grid-item>
  88. </van-grid>
  89. </div>
  90. <div class="card">
  91. <div class="title">安全检查</div>
  92. <van-grid :border="false" :column-num="4">
  93. <van-grid-item to="/safeCheck/task">
  94. <img src="../../public/images/aq.png" width="45rpx" />
  95. <span class="vanicon_text">安全检查任务</span>
  96. </van-grid-item>
  97. </van-grid>
  98. </div>
  99. <div class="card">
  100. <div class="title">事故管理</div>
  101. <van-grid :border="false" :column-num="4">
  102. <van-grid-item to="/accidentManager/accidentBaoGaoLedger/index">
  103. <img src="../../public/images/sgbgtz.png" width="45rpx" />
  104. <span class="vanicon_text">事故报告台账</span>
  105. </van-grid-item>
  106. <van-grid-item to="/accidentManager/accidentJuBao/index">
  107. <img src="../../public/images/sgjb.png" width="45rpx" />
  108. <span class="vanicon_text">事故举报</span>
  109. </van-grid-item>
  110. <van-grid-item v-if="true" to="/accidentManager/accidentJuBaoLedger/index">
  111. <img src="../../public/images/sgjbtz.png" width="45rpx" />
  112. <span class="vanicon_text">事故举报台账</span>
  113. </van-grid-item>
  114. </van-grid>
  115. </div>
  116. <div class="card">
  117. <div class="title">教育培训</div>
  118. <van-grid :border="false" :column-num="4">
  119. <van-grid-item to="/dailyproblem">
  120. <img src="../../public/images/dt.png" width="45rpx" />
  121. <span class="vanicon_text">每日答题</span>
  122. </van-grid-item>
  123. <van-grid-item to="/cardManager">
  124. <img src="../../public/images/zj.png" width="45rpx" />
  125. <span class="vanicon_text">证件管理</span>
  126. </van-grid-item>
  127. <van-grid-item to="/checkTake">
  128. <img src="../../public/images/dt.png" width="45rpx" />
  129. <span class="vanicon_text">逢查必考</span>
  130. </van-grid-item>
  131. <van-grid-item to="/examtask" v-if="showCheckTake">
  132. <img src="../../public/images/zyqk.png" width="45rpx" />
  133. <span class="vanicon_text">考试任务</span>
  134. </van-grid-item>
  135. <van-grid-item to="/class2" v-if="showCheckTake">
  136. <img src="../../public/images/zyqk.png" width="45rpx" />
  137. <span class="vanicon_text">学习课程管理</span>
  138. </van-grid-item>
  139. <van-grid-item to="/courseManagement" v-if="showCheckTake">
  140. <img src="../../public/images/zyqk.png" width="45rpx" />
  141. <span class="vanicon_text">课程管理</span>
  142. </van-grid-item>
  143. </van-grid>
  144. </div>
  145. <div class="card">
  146. <div class="title">应急管理</div>
  147. <van-grid :border="false" :column-num="4">
  148. <van-grid-item to="/institution/emergencyPlan">
  149. <img src="../../public/images/yjya.png" width="45rpx" />
  150. <span class="vanicon_text">应急预案</span>
  151. </van-grid-item>
  152. <van-grid-item to="/emergencyResources">
  153. <img src="../../public/images/yj.png" width="45rpx" />
  154. <span class="vanicon_text">应急物资</span>
  155. </van-grid-item>
  156. <van-grid-item to="/emergencyDrillPlan">
  157. <img src="../../public/images/yjyl.png" width="45rpx" />
  158. <span class="vanicon_text">应急演练</span>
  159. </van-grid-item>
  160. <van-grid-item to="/drillProcess">
  161. <img src="../../public/images/drillProcess.png" width="45rpx" />
  162. <span class="vanicon_text">掌上演练</span>
  163. </van-grid-item>
  164. </van-grid>
  165. </div>
  166. <div class="card">
  167. <div class="title">项目管理</div>
  168. <van-grid :border="false" :column-num="4">
  169. <van-grid-item to="/projectManage/taiZhang">
  170. <img src="../../public/images/xm.png" width="45rpx" />
  171. <span class="vanicon_text">项目台账</span>
  172. </van-grid-item>
  173. <van-grid-item to="/projectManage/projectConstructionOperation">
  174. <img src="../../public/images/xm.png" width="45rpx" />
  175. <span class="vanicon_text">项目施工作业管理</span>
  176. </van-grid-item>
  177. <van-grid-item to="/projectManage/projectWorkLedger">
  178. <img src="../../public/images/xm.png" width="45rpx" />
  179. <span class="vanicon_text">项目作业台账</span>
  180. </van-grid-item>
  181. <van-grid-item to="/projectManage/todo">
  182. <img src="../../public/images/yhdb.png" width="45rpx" />
  183. <span class="vanicon_text">项目作业待办</span>
  184. </van-grid-item>
  185. </van-grid>
  186. </div>
  187. <div class="card">
  188. <div class="title">作业现场管控</div>
  189. <van-grid :border="false" :column-num="4">
  190. <van-grid-item to="/safeClient">
  191. <img src="../../public/images/zdgl.png" width="45rpx" />
  192. <span class="vanicon_text">终端管理</span>
  193. </van-grid-item>
  194. <van-grid-item to="/jobCondition">
  195. <img src="../../public/images/zyqk.png" width="45rpx" />
  196. <span class="vanicon_text">作业情况</span>
  197. </van-grid-item>
  198. </van-grid>
  199. </div>
  200. <div class="card">
  201. <div class="title">事务汇报</div>
  202. <van-grid :border="false" :column-num="4">
  203. <van-grid-item to="/keyMatters">
  204. <img src="../../public/images/keyMatters.png" width="45rpx" />
  205. <span class="vanicon_text">重点事项</span>
  206. </van-grid-item>
  207. <van-grid-item to="/planManagement">
  208. <img src="../../public/images/planManagement.png" width="45rpx" />
  209. <span class="vanicon_text">计划任务</span>
  210. </van-grid-item>
  211. </van-grid>
  212. </div>
  213. <div class="card">
  214. <div class="title">考核评价</div>
  215. <van-grid :border="false" :column-num="4">
  216. <van-grid-item to="/performanceReview/units">
  217. <img src="../../public/images/unitsPerformance.png" width="45rpx" />
  218. <span class="vanicon_text">单位考核</span>
  219. </van-grid-item>
  220. </van-grid>
  221. </div>
  222. <div class="card">
  223. <div class="title">考核管理</div>
  224. <van-grid :border="false" :column-num="4" v-if="showCheckTakeN">
  225. <van-grid-item to="/assRec">
  226. <img src="../../public/images/zdgl.png" width="45rpx" />
  227. <span class="vanicon_text">考核登记</span>
  228. </van-grid-item>
  229. <van-grid-item to="/assRecN" v-if="showCheckTakeN">
  230. <img src="../../public/images/lzcx.png" width="45rpx" />
  231. <span class="vanicon_text">考核记录</span>
  232. </van-grid-item>
  233. </van-grid>
  234. </div>
  235. <div class="card">
  236. <div class="title">通知公告</div>
  237. <van-grid :border="false" :column-num="4" v-if="showCheckTakeN">
  238. <van-grid-item to="/annex">
  239. <img src="../../public/images/zyqk.png" width="45rpx" />
  240. <span class="vanicon_text">文件发布</span>
  241. </van-grid-item>
  242. <van-grid-item to="/notice" v-if="showCheckTakeN">
  243. <img src="../../public/images/yj.png" width="45rpx" />
  244. <span class="vanicon_text">通知公告</span>
  245. </van-grid-item>
  246. </van-grid>
  247. </div>
  248. <div class="card">
  249. <div class="title">知识共享库</div>
  250. <van-grid :border="false" :column-num="4" v-if="showCheckTakeN">
  251. <van-grid-item to="/knowledge/accident">
  252. <img src="../../public/images/zd.png" width="45rpx" />
  253. <span class="vanicon_text">事故案例</span>
  254. </van-grid-item>
  255. <van-grid-item to="/knowledge/manager">
  256. <img src="../../public/images/zd.png" width="45rpx" />
  257. <span class="vanicon_text">管理案例</span>
  258. </van-grid-item>
  259. <van-grid-item to="/knowledge/Culture">
  260. <img src="../../public/images/zd.png" width="45rpx" />
  261. <span class="vanicon_text">安全环保文化</span>
  262. </van-grid-item>
  263. <van-grid-item to="/knowledge/project">
  264. <img src="../../public/images/zd.png" width="45rpx" />
  265. <span class="vanicon_text">项目案例</span>
  266. </van-grid-item>
  267. </van-grid>
  268. </div>
  269. <div class="card">
  270. <div class="title">安环费用管理</div>
  271. <van-grid :border="false" :column-num="4" v-if="showCheckTakeN">
  272. <van-grid-item to="/moneySafe/safeMoneyManagement">
  273. <img src="../../public/images/aq.png" width="45rpx" />
  274. <span class="vanicon_text">安环费用管理</span>
  275. </van-grid-item>
  276. <van-grid-item to="/moneySafe/safeMoneyBudget">
  277. <img src="../../public/images/aq.png" width="45rpx" />
  278. <span class="vanicon_text">安全费用预算</span>
  279. </van-grid-item>
  280. </van-grid>
  281. </div>
  282. </div>
  283. </template>
  284. <script setup>
  285. import { ref, getCurrentInstance, onMounted } from 'vue';
  286. import { onBeforeRouteLeave } from 'vue-router';
  287. import { showFailToast, showSuccessToast } from 'vant';
  288. const {
  289. proxy
  290. } = getCurrentInstance();
  291. const showCheckTake = ref(false);
  292. const showCheckTakeN = ref(false);
  293. const userDesc = localStorage.getItem('userDesc');
  294. const role = localStorage.getItem('role')[0].roleCode;
  295. if (role == 'SX0201' || role == 'SX0201' || role == 'SX0302' || role == 'SX0303') {
  296. showCheckTake.value = true;
  297. }
  298. if (userDesc == '贾俊臣' || userDesc == '张瑞楠' || userDesc == '刘焯') {
  299. showCheckTake.value = true;
  300. showCheckTakeN.value=true
  301. }
  302. /**
  303. * 修改最近使用的页面记录
  304. */
  305. const recentlyUsed = ref({
  306. userCode: localStorage.getItem('userCode'),
  307. menuIcon: '',
  308. menuName: '',
  309. jumpPath: ''
  310. });
  311. const userCode = localStorage.getItem('userCode');
  312. const handleClick = () => {
  313. console.log('111');
  314. const url = '/sgsafe/RecordMaster/tuisong';
  315. const param = {
  316. userCode: userCode
  317. };
  318. proxy.$axios.get(url, param).then(response => {
  319. if (response.data.code == 0) {
  320. showSuccessToast('已推送');
  321. } else {
  322. showFailToast(response.data.msg);
  323. }
  324. }, 500);
  325. };
  326. const getRecentlyUsed = () => {
  327. const url = '/sgsafe/MenuRecentlyUsedMobile/updateMenuRecentlyUsedStatus';
  328. const param = {
  329. json: JSON.stringify(recentlyUsed.value)
  330. };
  331. proxy.$axios.post(url, param).then(res => {
  332. if (res.data.code !== 0) {
  333. console.log('执行失败');
  334. }
  335. });
  336. };
  337. onBeforeRouteLeave((to, from) => {
  338. recentlyUsed.value.jumpPath = to.path;
  339. recentlyUsed.value.menuIcon = getPicPathByPath(to.path);
  340. recentlyUsed.value.menuName = getNameByPath(to.path);
  341. if (recentlyUsed.value.menuIcon) {
  342. getRecentlyUsed();
  343. }
  344. });
  345. /**
  346. * 获取最近使用页面记录
  347. */
  348. const functionList = ref([]);
  349. const coincideNotList = ref([]);
  350. const queryMenuRecently = () => {
  351. const url = '/sgsafe/MenuRecentlyUsedMobile/queryRecentlyUsed';
  352. const param = {
  353. userCode: localStorage.getItem('userCode')
  354. };
  355. proxy.$axios.get(url, param).then(res => {
  356. functionList.value = res.data.data.map(item => ({
  357. title: item.menuName,
  358. img: item.menuIcon,
  359. jumpPath: item.jumpPath
  360. }));
  361. if (functionList.value.length < 4) {
  362. coincideNotList.value = defaultPageList.value;
  363. for (let item of functionList.value) {
  364. coincideNotList.value = coincideNotList.value.filter(info => info.jumpPath !== item.jumpPath);
  365. }
  366. coincideNotList.value = coincideNotList.value.slice(0, 4 - functionList.value.length);
  367. functionList.value = [...functionList.value, ...coincideNotList.value];
  368. } else {
  369. functionList.value = functionList.value.slice(0, 4);
  370. }
  371. });
  372. };
  373. onMounted(() => {
  374. queryMenuRecently();
  375. });
  376. /**
  377. * 默认页面
  378. */
  379. const defaultPageList = ref([
  380. { title: '隐患登记', img: 'images/yhdj.png', jumpPath: '/yinhuan/registration' },
  381. { title: '隐患台账', img: 'images/yh.png', jumpPath: '/yinhuan/hdLedger' },
  382. { title: '每日答题', img: 'images/dt.png', jumpPath: '/dailyproblem' },
  383. { title: '履职记录', img: 'images/lz.png', jumpPath: '/lvzhi' },
  384. { title: '安全制度管理', img: 'images/aqzd.png', jumpPath: '/institution/institutionRegime' },
  385. { title: '证件管理', img: 'images/zj.png', jumpPath: '/cardManager' },
  386. { title: '隐患待办', img: 'images/yhdb.png', jumpPath: '/yinhuan/todo' }
  387. ]);
  388. /**
  389. * 根据路由获取名称
  390. */
  391. const getNameByPath = (path) => {
  392. const recentlyUsedMapping = {
  393. '/institution/law': '法律法规',
  394. '/institution/institutionRegime': '安全制度管理',
  395. '/institution/institutionRule': '安全操作规程',
  396. '/lvzhi': '履职记录',
  397. '/lvzhicx': '履职查询',
  398. '/institution/riskList': '风险分级管控记录',
  399. '/yinhuan/registration': '隐患登记',
  400. '/yinhuan/todo': '隐患待办',
  401. '/yinhuan/hdLedger': '隐患台账',
  402. '/safeCheck/task': '安全检查任务',
  403. '/dailyproblem': '每日答题',
  404. '/cardManager': '证件管理',
  405. '/institution/emergencyPlan': '应急预案',
  406. '/emergencyResources': '应急物资',
  407. '/emergencyDrillPlan': '应急演练',
  408. '/projectManage/taiZhang': '项目台账',
  409. '/safeClient': '终端管理',
  410. '/jobCondition': '作业情况',
  411. '/yinhuan/riskChecklist': '隐患排查清单',
  412. '/yinhuan/riskChecklistRecords': '隐患排查记录',
  413. '/drillProcess': '掌上演练',
  414. '/checkTake': '逢查必考',
  415. '/projectManage/projectConstructionOperation': '项目施工作业管理',
  416. '/projectManage/projectWorkLedger': '项目作业台账',
  417. '/keyMatters': '重点事项',
  418. '/planManagement': '计划任务',
  419. '/performanceReview/units': '单位考核'
  420. };
  421. return recentlyUsedMapping[path];
  422. };
  423. /**
  424. * 根据路由获取图片路径
  425. */
  426. const getPicPathByPath = (path) => {
  427. const recentlyUsedMapping = {
  428. '/institution/law': 'images/fl.png',
  429. '/institution/institutionRegime': 'images/aqzd.png',
  430. '/institution/institutionRule': 'images/zd.png',
  431. '/lvzhi': 'images/lz.png',
  432. '/lvzhicx': 'images/lzcx.png',
  433. '/institution/riskList': 'images/fx.png',
  434. '/yinhuan/registration': 'images/yhdj.png',
  435. '/yinhuan/todo': 'images/yhdb.png',
  436. '/yinhuan/hdLedger': 'images/yh.png',
  437. '/safeCheck/task': 'images/aq.png',
  438. '/dailyproblem': 'images/dt.png',
  439. '/cardManager': 'images/zj.png',
  440. '/institution/emergencyPlan': 'images/yjya.png',
  441. '/emergencyResources': 'images/yj.png',
  442. '/emergencyDrillPlan': 'images/yjyl.png',
  443. '/projectManage/taiZhang': 'images/xm.png',
  444. '/safeClient': 'images/zdgl.png',
  445. '/jobCondition': 'images/zyqk.png',
  446. '/yinhuan/riskChecklist': 'images/riskChecklist.png',
  447. '/yinhuan/riskChecklistRecords': 'images/riskChecklistRecords.png',
  448. '/drillProcess': 'images/drillProcess.png',
  449. '/checkTake': 'images/dt.png',
  450. '/projectManage/projectConstructionOperation': 'images/xm.png',
  451. '/projectManage/projectWorkLedger': 'images/xm.png',
  452. '/keyMatters': 'images/keyMatters.png',
  453. '/planManagement': 'images/planManagement.png',
  454. '/performanceReview/units': 'images/unitsPerformance.png'
  455. };
  456. return recentlyUsedMapping[path];
  457. };
  458. /**
  459. * 测试消息
  460. */
  461. const getAccessToken = () => {
  462. const url = '/sgsafe/MobileMessage/getAccessToken';
  463. const params = {};
  464. proxy.$axios.get(url, params).then(response => {
  465. if (response.data.code === 0) {
  466. console.log('accessToken操作成功', response.data.data);
  467. } else {
  468. console.log('accessToken操作失败操作失败', response.data.fullMsg);
  469. }
  470. });
  471. };
  472. const sendMobileMsg = () => {
  473. const url = '/sgsafe/MobileMessage/sendMsg';
  474. const params = {};
  475. proxy.$axios.get(url, params).then(response => {
  476. if (response.data.code === 0) {
  477. console.log('accessToken操作成功', response.data.data);
  478. } else {
  479. showFailToast('操作失败', response.data.msg);
  480. console.log('accessToken操作失败操作失败', response.data.fullMsg);
  481. }
  482. });
  483. };
  484. </script>
  485. <style scoped>
  486. /* 固定在顶部的标题栏样式 */
  487. .header-title {
  488. background-color: #3875c6;
  489. height: 50px;
  490. padding: 15px 20px;
  491. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  492. z-index: 100;
  493. }
  494. .title-text {
  495. margin-top: 12px;
  496. color: white;
  497. font-size: 18px;
  498. /* font-weight: 600; */
  499. text-align: center;
  500. font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
  501. letter-spacing: 1px;
  502. }
  503. .body-bg {
  504. background-color: #ffffff;
  505. padding-top: 10px;
  506. }
  507. :deep(.van-grid-item__text) {
  508. font-size: var(--van-font-size-lg0);
  509. }
  510. .dbTitle {
  511. margin-top: 10px;
  512. }
  513. .daiban_titile_img {
  514. vertical-align: middle;
  515. width: 20px;
  516. height: 20px;
  517. }
  518. .custom-title {
  519. font-size: var(--van-font-size-lg);
  520. font-weight: bold;
  521. color: var(--van-gray-9);
  522. }
  523. .vanicon_text {
  524. font-size: var(--van-font-size-lg0);
  525. color: var(--van-grid-item-text-color);
  526. margin-top: var(--van-padding-xs);
  527. line-height: 1.5;
  528. word-break: break-all;
  529. text-align: center;
  530. height: 40px;
  531. }
  532. .card {
  533. margin: 10px;
  534. border-radius: 8px;
  535. overflow: hidden;
  536. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  537. background-color: #fff;
  538. }
  539. .title {
  540. padding-left: 20px;
  541. padding-top: 20px;
  542. font-weight: bold;
  543. font-size: 20px;
  544. }
  545. </style>