index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  1. <template>
  2. <view class="page home">
  3. <view class="page-back"></view>
  4. <view class="uni-page-head navgator justify-center align-center">
  5. <uni-row style="width: 100%; display: flex">
  6. <uni-col :span="6" />
  7. <uni-col :span="12">
  8. <view class="nav-title" style="text-align: center">{{
  9. $t("app.appName")
  10. }}</view>
  11. </uni-col>
  12. <uni-col
  13. :span="6"
  14. style="display: flex; justify-content: end; padding-right: 20px">
  15. <uni-badge absolute="rightTop" size="small" :text="messageCount">
  16. <image
  17. src="~@/static/home/message.png"
  18. style="width: 20px; height: 20px; background-color: transparent"
  19. @click="navigatorTo('/pages/message/index')" />
  20. </uni-badge>
  21. </uni-col>
  22. </uni-row>
  23. </view>
  24. <view class="page-content flex-col">
  25. <uni-row class="row-full">
  26. <uni-col class="daiban-tixing flex-row align-center justify-between">
  27. <!-- <view class="dt-title">
  28. <view class="todo font-BiaoTiHei">
  29. {{ $t('home.todo') }}
  30. </view>
  31. <view class="remind font-BiaoTiHei">
  32. {{ $t('home.remind') }}
  33. </view>
  34. </view> -->
  35. <swiper
  36. class="dt-swiper"
  37. circular="true"
  38. :indicator-dots="false"
  39. :autoplay="true"
  40. :vertical="true"
  41. :interval="2000"
  42. :duration="500">
  43. <swiper-item
  44. class="flex-col justify-between"
  45. v-for="{ item1, item2 } in overtimeTaskList"
  46. @click="navigatorTo('/pages/overtime/index')">
  47. <view
  48. class="daiban flex-row align-center justify-around"
  49. style="margin-top: 10px">
  50. <view class="dt-status green">
  51. <!-- 超时未保养 -->
  52. {{ item1.status }}
  53. </view>
  54. <view class="dt-content">
  55. <!-- 增压机十年使用到期保养 -->
  56. {{ item1.type + "-" + item1.title }}
  57. </view>
  58. <!-- <view class="dt-time">-->
  59. <!-- &lt;!&ndash; 1小时前 &ndash;&gt;-->
  60. <!-- {{ item1.createTime }}-->
  61. <!-- </view>-->
  62. </view>
  63. <view
  64. v-if="item2"
  65. class="daiban flex-row align-center justify-around"
  66. style="margin-bottom: 10px">
  67. <view class="dt-status green">
  68. <!-- 超时未保养 -->
  69. {{ item2?.status }}
  70. </view>
  71. <view class="dt-content">
  72. <!-- 增压机十年使用到期保养 -->
  73. {{ item2?.type + "-" + item2?.title }}
  74. </view>
  75. <!-- <view class="dt-time">-->
  76. <!-- &lt;!&ndash; 1小时前 &ndash;&gt;-->
  77. <!-- {{ item2?.createTime }}-->
  78. <!-- </view>-->
  79. </view>
  80. </swiper-item>
  81. </swiper>
  82. </uni-col>
  83. </uni-row>
  84. <uni-row class="row-half flex-row justify-between">
  85. <!-- 运行记录填报 -->
  86. <uni-col
  87. :span="12"
  88. class="yunxingjilu flex-col justify-between"
  89. @click="navigatorTo('/pages/recordFilling/list')">
  90. <view class="half-title">
  91. {{ $t("home.operationRecordFilling") }}
  92. </view>
  93. <view class="half-subtitle">
  94. {{ $t("home.fillDailyOperationRecord") }}
  95. </view>
  96. </uni-col>
  97. <!-- 保养工单 -->
  98. <uni-col
  99. :span="12"
  100. class="baoyang flex-col justify-between"
  101. @click="navigatorTo('/pages/maintenance/index')">
  102. <view class="half-title">
  103. {{ $t("home.maintenanceWorkOrder") }}
  104. </view>
  105. <view class="half-subtitle">
  106. {{ $t("home.receiveMaintenanceWorkOrderAndSubmit") }}
  107. </view>
  108. </uni-col>
  109. </uni-row>
  110. <uni-row class="row-half" :gutter="5">
  111. <!-- 设备维修 -->
  112. <uni-col
  113. :span="12"
  114. class="shebeiweixiu flex-col justify-between"
  115. @click="navigatorTo('/pages/repair/index')">
  116. <view class="half-title">
  117. {{ $t("home.equipmentMaintenance") }}
  118. </view>
  119. <view class="half-subtitle">
  120. {{ $t("home.fillMaintenanceWorkOrder") }}
  121. </view>
  122. </uni-col>
  123. <!-- 巡检工单 -->
  124. <uni-col
  125. :span="12"
  126. class="xunjian flex-col justify-between"
  127. @click="navigatorTo('/pages/inspection/index')">
  128. <view class="half-title">
  129. {{ $t("home.inspectionWorkOrder") }}
  130. </view>
  131. <view class="half-subtitle">
  132. {{ $t("home.receiveInspectionWorkOrderAndSubmit") }}
  133. </view>
  134. </uni-col>
  135. </uni-row>
  136. <uni-row class="row-full">
  137. <!-- 故障上报 -->
  138. <uni-col
  139. class="guzhang flex-row align-center"
  140. @click="navigatorTo('/pages/fault/index')">
  141. <view class="half-title" style="margin-right: 10px">
  142. {{ $t("home.faultReporting") }}
  143. </view>
  144. <view class="half-subtitle">
  145. {{ $t("home.fillAndReportFaultWorkOrder") }}
  146. </view>
  147. </uni-col>
  148. </uni-row>
  149. <view class="card">
  150. <!-- 瑞都日报 -->
  151. <view
  152. class="card-cell flex-row align-center justify-between"
  153. @click="navigatorTo('/pages/ruiDu/index')"
  154. v-if="isShowRuiduDaily">
  155. <image src="/static/home/ribao.svg" mode="aspectFill"></image>
  156. <view class="cell-con flex-row align-center justify-between">
  157. <view class="cell-text flex-row align-center justify-start">
  158. <view class="title">
  159. {{ $t("home.dailyReportRuiDu") }}
  160. </view>
  161. <view class="subtitle">
  162. {{ $t("home.dailyReportRuiDuTip") }}
  163. </view>
  164. </view>
  165. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  166. </view>
  167. </view>
  168. <view
  169. class="card-cell flex-row align-center justify-between"
  170. @click="navigatorTo('/pages/ruihen-task/index')"
  171. v-if="rhTaskFlag">
  172. <image src="/static/home/ribao.svg" mode="aspectFill"></image>
  173. <view class="cell-con flex-row align-center justify-between">
  174. <view class="cell-text flex-row align-center justify-start">
  175. <view class="title">
  176. {{ $t("home.dailyReportRuiHen") }}
  177. </view>
  178. <view class="subtitle">
  179. {{ $t("home.dailyReportRuiHenTaskTip") }}
  180. </view>
  181. </view>
  182. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  183. </view>
  184. </view>
  185. <view
  186. class="card-cell flex-row align-center justify-between"
  187. @click="navigatorTo('/pages/ruihen/index?type=edit')"
  188. v-if="rhReportFlag">
  189. <image src="/static/home/ribao.svg" mode="aspectFill"></image>
  190. <view class="cell-con flex-row align-center justify-between">
  191. <view class="cell-text flex-row align-center justify-start">
  192. <view class="title">
  193. {{ $t("home.dailyReportRuiHen") }}
  194. </view>
  195. <view class="subtitle">
  196. {{ $t("home.dailyReportRuiHenTip") }}
  197. </view>
  198. </view>
  199. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  200. </view>
  201. </view>
  202. <view
  203. class="card-cell flex-row align-center justify-between"
  204. @click="navigatorTo('/pages/ruihen/index?type=approval')"
  205. v-if="rhReportApprovalFlag">
  206. <image src="/static/home/ribao.svg" mode="aspectFill"></image>
  207. <view class="cell-con flex-row align-center justify-between">
  208. <view class="cell-text flex-row align-center justify-start">
  209. <view class="title">
  210. {{ $t("home.dailyReportRuiHen") }}
  211. </view>
  212. <view class="subtitle">
  213. {{ $t("home.dailyReportRuiHenApproval") }}
  214. </view>
  215. </view>
  216. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  217. </view>
  218. </view>
  219. <view
  220. class="card-cell flex-row align-center justify-between"
  221. @click="navigatorTo('/pages/ruiying/index?type=edit')"
  222. v-if="ryReportFlag">
  223. <image src="/static/home/ribao.svg" mode="aspectFill"></image>
  224. <view class="cell-con flex-row align-center justify-between">
  225. <view class="cell-text flex-row align-center justify-start">
  226. <view class="title">
  227. {{ $t("home.dailyReportRuiYing") }}
  228. </view>
  229. <view class="subtitle">
  230. {{ $t("home.dailyReportRuiYingTip") }}
  231. </view>
  232. </view>
  233. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  234. </view>
  235. </view>
  236. <view
  237. class="card-cell flex-row align-center justify-between"
  238. @click="navigatorTo('/pages/ruiying/index?type=approval')"
  239. v-if="ryReportApprovalFlag">
  240. <image src="/static/home/ribao.svg" mode="aspectFill"></image>
  241. <view class="cell-con flex-row align-center justify-between">
  242. <view class="cell-text flex-row align-center justify-start">
  243. <view class="title">
  244. {{ $t("home.dailyReportRuiYing") }}
  245. </view>
  246. <view class="subtitle">
  247. {{ $t("home.dailyReportRuiYingApproval") }}
  248. </view>
  249. </view>
  250. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  251. </view>
  252. </view>
  253. <view
  254. class="card-cell flex-row align-center justify-between"
  255. @click="navigatorTo('/pages/ruiyingx/index?type=edit')"
  256. v-if="ryXjReportFlag">
  257. <image src="/static/home/ribao.svg" mode="aspectFill"></image>
  258. <view class="cell-con flex-row align-center justify-between">
  259. <view class="cell-text flex-row align-center justify-start">
  260. <view class="title">
  261. {{ $t("home.dailyReportRuiYingX") }}
  262. </view>
  263. <view class="subtitle">
  264. {{ $t("home.dailyReportRuiYingXTip") }}
  265. </view>
  266. </view>
  267. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  268. </view>
  269. </view>
  270. <view
  271. class="card-cell flex-row align-center justify-between"
  272. @click="navigatorTo('/pages/ruiyingx/index?type=approval')"
  273. v-if="ryXjReportApprovalFlag">
  274. <image src="/static/home/ribao.svg" mode="aspectFill"></image>
  275. <view class="cell-con flex-row align-center justify-between">
  276. <view class="cell-text flex-row align-center justify-start">
  277. <view class="title">
  278. {{ $t("home.dailyReportRuiYingX") }}
  279. </view>
  280. <view class="subtitle">
  281. {{ $t("home.dailyReportRuiYingXApproval") }}
  282. </view>
  283. </view>
  284. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  285. </view>
  286. </view>
  287. <!-- 库存查询 -->
  288. <view
  289. class="card-cell flex-row align-center justify-between"
  290. @click="navigatorTo('/pages/inventory/index')">
  291. <image src="/static/home/kucun.svg" mode="aspectFill"></image>
  292. <view class="cell-con flex-row align-center justify-between">
  293. <view class="cell-text flex-row align-center justify-start">
  294. <view class="title">
  295. {{ $t("home.inventoryQuery") }}
  296. </view>
  297. <view class="subtitle">
  298. {{ $t("home.clickToQueryInventoryData") }}
  299. </view>
  300. </view>
  301. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  302. </view>
  303. </view>
  304. <!-- 设备台账 -->
  305. <view
  306. class="card-cell flex-row align-center justify-between"
  307. @click="navigatorTo('/pages/ledger/index')">
  308. <image src="/static/home/taizhang.svg" mode="aspectFill"></image>
  309. <view class="cell-con flex-row align-center justify-between">
  310. <view class="cell-text flex-row align-center justify-start">
  311. <view class="title">
  312. {{ $t("home.equipmentLedger") }}
  313. </view>
  314. <view class="subtitle">
  315. {{ $t("home.viewEquipmentLedger") }}
  316. </view>
  317. </view>
  318. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  319. </view>
  320. </view>
  321. <!-- 设备状态变更 -->
  322. <view
  323. class="card-cell flex-row align-center justify-between"
  324. @click="navigatorTo('/pages/statusChange/index')">
  325. <image
  326. src="/static/home/zhuangtaibiangeng.svg"
  327. mode="aspectFill"></image>
  328. <view class="cell-con flex-row align-center justify-between">
  329. <view class="cell-text flex-row align-center justify-start">
  330. <view class="title">
  331. {{ $t("home.equipmentStatusChange") }}
  332. </view>
  333. <view class="subtitle">
  334. {{ $t("home.adjustEquipmentStatus") }}
  335. </view>
  336. </view>
  337. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  338. </view>
  339. </view>
  340. <!-- 设备责任人 -->
  341. <view
  342. class="card-cell flex-row align-center justify-between"
  343. @click="navigatorTo('/pages/deviceUser/index')">
  344. <image src="/static/home/deviceUser.svg" mode="aspectFill"></image>
  345. <view class="cell-con flex-row align-center justify-between">
  346. <view class="cell-text flex-row align-center justify-start">
  347. <view class="title">
  348. {{ $t("home.deviceUser") }}
  349. </view>
  350. <view class="subtitle">
  351. {{ $t("home.deviceUserTip") }}
  352. </view>
  353. </view>
  354. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  355. </view>
  356. </view>
  357. <!-- 设备实时数据监控 -->
  358. <view
  359. class="card-cell flex-row align-center justify-between"
  360. @click="navigatorTo('/pages/realTimeData/index')">
  361. <image src="/static/home/shujujiankong.svg" mode="aspectFill"></image>
  362. <view class="cell-con flex-row align-center justify-between">
  363. <view class="cell-text flex-row align-center justify-start">
  364. <view class="title">
  365. {{ $t("home.realTimeEquipmentDataMonitoring") }}
  366. </view>
  367. <view class="subtitle">
  368. {{ $t("home.viewRealTimeEquipmentData") }}
  369. </view>
  370. </view>
  371. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  372. </view>
  373. </view>
  374. <!-- 统计分析 -->
  375. <view
  376. class="card-cell flex-row align-center justify-between"
  377. @click="navigatorTo('/pages/statistic/index')">
  378. <image src="/static/home/tongjifenxi.svg" mode="aspectFill"></image>
  379. <view class="cell-con flex-row align-center justify-between">
  380. <view class="cell-text flex-row align-center justify-start">
  381. <view class="title">
  382. {{ $t("home.statisticalAnalysis") }}
  383. </view>
  384. <view class="subtitle">
  385. {{ $t("home.equipmentDataStatisticalAnalysis") }}
  386. </view>
  387. </view>
  388. <uni-icons type="right" :color="'#CACCCF'" size="15" />
  389. </view>
  390. </view>
  391. </view>
  392. </view>
  393. <!-- 升级提示 -->
  394. <upgrade />
  395. </view>
  396. </template>
  397. <script setup>
  398. import { onShow } from "@dcloudio/uni-app";
  399. import { nextTick, onMounted, ref } from "vue";
  400. import { getUnreadMessageCount } from "@/api/message";
  401. import { getOvertimeTaskList } from "@/api/task";
  402. import { getLoginUserInfo } from "@/api/login";
  403. import { useDataDictStore } from "@/store/modules/dataDict";
  404. import { useDeptStore } from "@/store/modules/dept";
  405. import { useDeviceStore } from "@/store/modules/device";
  406. import { messageNavigate } from "@/utils/navigate";
  407. import Upgrade from "@/components/upgrade.vue";
  408. const navigatorTo = (url) => {
  409. uni.navigateTo({
  410. url: url,
  411. });
  412. };
  413. const messageCount = ref(0);
  414. onMounted(async () => {
  415. await Promise.all([
  416. useDataDictStore().loadDataDictList(),
  417. useDeptStore().loadDeptList(),
  418. useDeviceStore().loadDeviceTypeList(),
  419. ]);
  420. });
  421. // 是否展示瑞都日报入口
  422. const isShowRuiduDaily = ref(false);
  423. const rhReportFlag = ref(false);
  424. const rhTaskFlag = ref(false);
  425. const rhReportApprovalFlag = ref(false);
  426. const ryReportFlag = ref(false);
  427. const ryReportApprovalFlag = ref(false);
  428. const ryXjReportFlag = ref(false);
  429. const ryXjReportApprovalFlag = ref(false);
  430. const userInfo = ref({});
  431. const getLoginUser = async () => {
  432. const response = await getLoginUserInfo();
  433. if (response.code === 0) {
  434. userInfo.value = response.data;
  435. isShowRuiduDaily.value = response.data.rdReportFlag;
  436. // isShowRuiduDaily.value = true;
  437. rhReportFlag.value = response.data.rhReportFlag;
  438. rhTaskFlag.value = response.data.rhReportFlag;
  439. // rhTaskFlag.value = true;
  440. rhReportApprovalFlag.value = response.data.rhReportApprovalFlag;
  441. ryReportFlag.value = response.data.ryReportFlag;
  442. // ryReportFlag.value = true;
  443. ryReportApprovalFlag.value = response.data.ryReportApprovalFlag;
  444. // ryReportApprovalFlag.value = true;
  445. ryXjReportFlag.value = response.data.ryXjReportFlag;
  446. // ryXjReportFlag.value = true;
  447. ryXjReportApprovalFlag.value = response.data.ryXjReportApprovalFlag;
  448. // ryXjReportApprovalFlag.value = true;
  449. }
  450. };
  451. getLoginUser();
  452. const overtimeTaskList = ref([]);
  453. const isNavigated = ref(false);
  454. // 处理缓存的钉钉消息传递的消息
  455. onShow(async () => {
  456. const response = await Promise.all([
  457. getUnreadMessageCount(),
  458. getOvertimeTaskList({ pageNo: 1, pageSize: 10 }),
  459. ]);
  460. // const response = await getUnreadMessageCount()
  461. // messageCount.value = response.data
  462. if (response[0].code === 0) {
  463. messageCount.value = response[0].data;
  464. }
  465. if (response[1].code === 0) {
  466. const list = response[1].data.list;
  467. const mapList = [];
  468. for (let i = 0; i < list.length; i += 2) {
  469. mapList.push({
  470. item1: list[i],
  471. item2: list[i + 1],
  472. });
  473. }
  474. overtimeTaskList.value = mapList;
  475. }
  476. // await getOvertimeTaskList({ pageNo: 1, pageSize: 10 })
  477. await nextTick(() => {
  478. const json = uni.getStorageSync("dingTalkJson");
  479. // console.log('home: dingTalkJson -> ' + json + `, isTrue: ${!!json}`)
  480. if (json) {
  481. const obj = JSON.parse(json);
  482. if (obj.type) {
  483. messageNavigate(obj);
  484. uni.removeStorageSync("dingTalkJson");
  485. // console.log('home: dingTalkJson -> ' + uni.getStorageSync('dingTalkJson'))
  486. }
  487. } else {
  488. if (isNavigated.value) return;
  489. let args = "";
  490. // #ifdef APP
  491. args = plus.runtime.arguments;
  492. // #endif
  493. // console.log('home: args -> ' + args)
  494. const parts = args.match(/^deepoil:\/\/([^/]+)\/([^/]+)$/);
  495. if (parts) {
  496. const type = parts[1];
  497. const id = parts[2];
  498. messageNavigate({ type, id });
  499. isNavigated.value = true;
  500. }
  501. }
  502. });
  503. });
  504. </script>
  505. <style lang="scss" scoped>
  506. .home {
  507. width: 100%;
  508. height: 100%;
  509. position: relative;
  510. box-sizing: border-box;
  511. overflow: hidden;
  512. }
  513. .row-full {
  514. width: 100%;
  515. height: 64px;
  516. margin-bottom: 10px;
  517. }
  518. .row-half {
  519. width: 100%;
  520. height: 68px;
  521. margin-bottom: 5px;
  522. .uni-col {
  523. padding: 15px !important;
  524. box-sizing: border-box;
  525. }
  526. }
  527. .daiban-tixing {
  528. height: 100%;
  529. min-height: 128rpx;
  530. background-image: url("/static/home/kapian.png");
  531. background-repeat: no-repeat;
  532. background-size: 100% 100%;
  533. padding: 0 10px !important;
  534. padding-left: 15px !important;
  535. box-sizing: border-box;
  536. }
  537. .dt-title {
  538. width: 37px;
  539. font-size: 20px;
  540. line-height: 20px;
  541. text-shadow: 0 2px 4px rgba(98, 114, 125, 0.36);
  542. text-align: center;
  543. font-style: normal;
  544. .todo {
  545. color: #004098;
  546. }
  547. .remind {
  548. color: #333333;
  549. }
  550. }
  551. .dt-swiper {
  552. width: calc(100%);
  553. height: 100%;
  554. }
  555. .dt-status {
  556. width: 60px;
  557. height: 18px;
  558. background: #ffffff;
  559. box-shadow:
  560. 0 2px 4px 0 rgba(98, 114, 125, 0.36),
  561. 0 2px 4px 0 rgba(0, 0, 0, 0.13);
  562. border-radius: 6px;
  563. font-family:
  564. PingFangSC,
  565. PingFang SC;
  566. font-weight: 500;
  567. font-size: 10px;
  568. line-height: 18px;
  569. text-shadow: 0px 2px 4px rgba(98, 114, 125, 0.36);
  570. text-align: center;
  571. &.green {
  572. color: #2bbb80;
  573. }
  574. &.blue {
  575. color: #3b63c9;
  576. }
  577. }
  578. .dt-content {
  579. flex: 1;
  580. width: auto;
  581. margin-left: 10px;
  582. font-family:
  583. PingFangSC,
  584. PingFang SC;
  585. font-weight: 500;
  586. font-size: 10px;
  587. color: #595959;
  588. line-height: 14px;
  589. text-shadow: 0px 2px 4px rgba(98, 114, 125, 0.36);
  590. text-overflow: ellipsis;
  591. white-space: nowrap;
  592. overflow: hidden;
  593. }
  594. .dt-time {
  595. font-family:
  596. PingFangSC,
  597. PingFang SC;
  598. font-weight: 500;
  599. font-size: 10px;
  600. color: #646464;
  601. line-height: 14px;
  602. text-shadow: 0px 2px 4px rgba(98, 114, 125, 0.36);
  603. }
  604. .half-title {
  605. font-family:
  606. PingFangSC,
  607. PingFang SC;
  608. font-weight: 500;
  609. font-size: 14px;
  610. color: #ffffff;
  611. }
  612. .half-subtitle {
  613. font-family:
  614. PingFangSC,
  615. PingFang SC;
  616. font-weight: 500;
  617. font-size: 10px;
  618. color: #ffffff;
  619. }
  620. .yunxingjilu {
  621. width: calc(50% - 2.5px);
  622. height: 100%;
  623. background-image: url("/static/home/yunxingjilu.png");
  624. background-repeat: no-repeat;
  625. background-size: 100% 100%;
  626. margin-right: 2.5px;
  627. }
  628. .baoyang {
  629. width: calc(50% - 2.5px);
  630. height: 100%;
  631. background-image: url("/static/home/baoyang.png");
  632. background-repeat: no-repeat;
  633. background-size: 100% 100%;
  634. margin-left: 2.5px;
  635. }
  636. .shebeiweixiu {
  637. width: calc(50% - 2.5px);
  638. height: 100%;
  639. background-image: url("/static/home/shebeiweixiu.png");
  640. background-repeat: no-repeat;
  641. background-size: 100% 100%;
  642. margin-right: 2.5px;
  643. }
  644. .xunjian {
  645. width: calc(50% - 2.5px);
  646. height: 100%;
  647. background-image: url("/static/home/xunjian.png");
  648. background-repeat: no-repeat;
  649. background-size: 100% 100%;
  650. margin-left: 2.5px;
  651. }
  652. .guzhang {
  653. // width: 100%;
  654. height: 100%;
  655. background-image: url("/static/home/guzhang.png");
  656. background-repeat: no-repeat;
  657. background-size: 100% 100%;
  658. padding: 15px !important;
  659. box-sizing: border-box;
  660. }
  661. .card {
  662. width: 100%;
  663. background: #ffffff;
  664. border-radius: 6px;
  665. padding: 20px;
  666. box-sizing: border-box;
  667. }
  668. .card-cell {
  669. width: 100%;
  670. height: 50px;
  671. image {
  672. width: 32px;
  673. height: 32px;
  674. }
  675. }
  676. .cell-con {
  677. margin-left: 10px;
  678. margin-right: 10px;
  679. width: calc(100% - 32px - 10px - 10px);
  680. height: 100%;
  681. border-bottom: 0.5px solid #cacccf;
  682. }
  683. .cell-text {
  684. width: 100%;
  685. font-weight: 500;
  686. .title {
  687. font-size: 14px;
  688. color: #333333;
  689. line-height: 20px;
  690. }
  691. .subtitle {
  692. font-size: 12px;
  693. color: #999999;
  694. line-height: 17px;
  695. margin-left: 10px;
  696. }
  697. .icon {
  698. width: 6px;
  699. height: 10px;
  700. }
  701. }
  702. </style>