健康同学微信公众号h5项目
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.

887 line
27KB

  1. <template>
  2. <div class="setting-container">
  3. <!-- nav -->
  4. <van-nav-bar title="参数设置" left-arrow :border="true" @click-left="onNavBack"> </van-nav-bar>
  5. <!-- main -->
  6. <div class="setting-main">
  7. <div class="top">
  8. <div
  9. class="setting-item"
  10. v-for="(item, index) in settingListTop"
  11. :key="index"
  12. @click="onRoute(item)"
  13. v-show="item.show"
  14. >
  15. <div class="left">
  16. <span
  17. >{{ item.name }} <span v-show="item.remark !== ''">({{ item.remark }})</span></span
  18. >
  19. </div>
  20. <div class="right">
  21. <img :src="rightIcon" alt="" />
  22. </div>
  23. </div>
  24. </div>
  25. <div class="bottom">
  26. <div
  27. class="setting-item"
  28. v-for="(item, index) in settingListBottom"
  29. :key="index"
  30. @click="onRoute(item)"
  31. v-show="item.show"
  32. >
  33. <div class="left">
  34. <span
  35. >{{ item.name }}<span v-show="item.remark !== ''">({{ item.remark }})</span></span
  36. >
  37. </div>
  38. <div class="right">
  39. <span>{{ item.powerStatus }}</span>
  40. <img :src="rightIcon" alt="" />
  41. </div>
  42. </div>
  43. </div>
  44. <div class="bottom">
  45. <div class="setting-item" v-for="(item, index) in settingListBottomUp" :key="index" @click="onRoute(item)">
  46. <div class="left">
  47. <span>{{ item.name }}({{ item.remark }})</span>
  48. </div>
  49. <div class="right">
  50. <span>{{ item.powerStatus }}</span>
  51. <img :src="rightIcon" alt="" />
  52. </div>
  53. </div>
  54. </div>
  55. </div>
  56. <!-- 弹窗 -->
  57. <van-dialog
  58. v-model="dialog.isDialogshow"
  59. :show-cancel-button="false"
  60. :show-confirm-button="true"
  61. confirm-button-text="返回"
  62. >
  63. <template #title>
  64. <div class="title">
  65. <span>{{ dialog.title }}</span>
  66. </div>
  67. </template>
  68. <template #default>
  69. <div class="dialog-container">
  70. <div class="selectConfirm">
  71. <div class="con">
  72. <p>请选择多少时间上报一次数据:</p>
  73. <div class="select-con" ref="select">
  74. <van-cell
  75. v-for="(item, index) in dialog.confirmData"
  76. :key="`selectVPT${index}`"
  77. @click="onSelect(item)"
  78. >
  79. <div class="text">
  80. <div v-html="item.text"></div>
  81. </div>
  82. <em :class="['circle', { on: selectConfirmActive == index }]"></em>
  83. </van-cell>
  84. </div>
  85. <div class="tips">
  86. <p>温馨提示:</p>
  87. <p>数字越小,越耗电,请慎重修改</p>
  88. </div>
  89. </div>
  90. </div>
  91. </div>
  92. </template>
  93. </van-dialog>
  94. <van-dialog
  95. v-model="isUserRoleDialogshow"
  96. show-cancel-button
  97. cancel-button-text="返回"
  98. :show-confirm-button="false"
  99. >
  100. <template #title>
  101. <div class="title">
  102. <span>监护角色</span>
  103. </div>
  104. </template>
  105. <template #default>
  106. <div class="dialog-container">
  107. <div class="selectConfirm">
  108. <div class="con">
  109. <van-cell
  110. v-for="(item, index) in userRoleData"
  111. :key="`selectUserRole${index}`"
  112. @click="onSelectUserRole(item)"
  113. >
  114. <div class="text">
  115. <div v-html="item.text"></div>
  116. </div>
  117. <em :class="['circle', { on: selectUserConfirmActive == index }]"></em>
  118. </van-cell>
  119. </div>
  120. </div>
  121. </div>
  122. </template>
  123. </van-dialog>
  124. </div>
  125. </template>
  126. <script>
  127. import ToastService from '@/services/toast-service';
  128. import DialogService from '@/services/dialog-service';
  129. import APIHealthy from '@/api/heathly';
  130. export default {
  131. name: '',
  132. data() {
  133. // Do Not disturb
  134. return {
  135. settingListTop: [
  136. { name: '监护角色', iconUrl: '', className: 'userRole', routerName: '', remark: '', show: true },
  137. { name: '场景模式', iconUrl: '', className: 'sceneMode', routerName: 'sceneMode', remark: '', show: true },
  138. {
  139. name: '加强省电模式',
  140. iconUrl: '',
  141. className: 'deepPowerDownMode',
  142. routerName: 'deepPowerDownMode',
  143. remark: '',
  144. show: false
  145. },
  146. { name: '免扰设置', iconUrl: '', className: '', routerName: 'notDisturb', remark: '', show: false },
  147. {
  148. name: '健康信息登记',
  149. iconUrl: '',
  150. className: '',
  151. routerName: 'psychologicalRegUserInfos',
  152. remark: '',
  153. show: false
  154. },
  155. { name: '设备名片', iconUrl: '', className: '', routerName: 'equipmentCard', remark: '', show: false }
  156. ],
  157. settingListBottom: [
  158. {
  159. name: '定位监测',
  160. iconUrl: '',
  161. className: 'locationMonitor',
  162. routerName: 'locationMonitor',
  163. remark: '',
  164. powerStatus: '',
  165. show: true
  166. },
  167. {
  168. name: '危险区域监测',
  169. iconUrl: '',
  170. className: 'dangerAreaMonitor',
  171. routerName: 'dangerAreaMonitor',
  172. remark: '',
  173. powerStatus: '',
  174. show: true
  175. },
  176. {
  177. name: '健康监测',
  178. iconUrl: '',
  179. className: 'healthMonitor',
  180. routerName: 'healthMonitor',
  181. remark: '',
  182. powerStatus: '',
  183. show: true
  184. },
  185. {
  186. name: '血压监测',
  187. iconUrl: '',
  188. className: 'blood',
  189. routerName: 'blood',
  190. remark: '',
  191. powerStatus: '',
  192. show: true
  193. },
  194. {
  195. name: '心理监测',
  196. iconUrl: '',
  197. className: 'psychologicalSetting',
  198. routerName: 'psychologicalSetting',
  199. remark: '',
  200. show: true
  201. },
  202. {
  203. name: '佩戴监测',
  204. iconUrl: '',
  205. className: 'wearMonitor',
  206. routerName: 'wearMonitor',
  207. remark: '',
  208. powerStatus: '',
  209. show: true
  210. },
  211. {
  212. name: '久坐提醒',
  213. iconUrl: '',
  214. className: 'longSitReminder',
  215. routerName: 'longSitReminder',
  216. remark: '',
  217. powerStatus: '',
  218. show: false
  219. },
  220. {
  221. name: '抬腕亮屏',
  222. iconUrl: '',
  223. className: 'raiseToLightScreen',
  224. routerName: 'raiseToLightScreen',
  225. remark: '',
  226. powerStatus: '',
  227. show: false
  228. }
  229. ],
  230. userRoleData: [
  231. { text: '学生', value: 1 },
  232. { text: '老人', value: 2 }
  233. ],
  234. selectUserConfirmActive: 0,
  235. isUserRoleDialogshow: false,
  236. settingListBottomUp: [
  237. { name: '上报周期', iconUrl: '', className: 'uploadinteval', routerName: '', remark: '', powerStatus: '' }
  238. ],
  239. rightIcon: /* require('../../../assets/myself/health/right_more.png') */ '',
  240. dialog: {
  241. isDialogshow: false,
  242. title: '上报周期',
  243. confirmData: [
  244. {
  245. text: '15分钟',
  246. model: 0,
  247. checked: false,
  248. value: 15
  249. },
  250. {
  251. text: '30分钟',
  252. model: 1,
  253. checked: false,
  254. value: 30
  255. },
  256. {
  257. text: '60分钟',
  258. model: 2,
  259. checked: false,
  260. value: 60
  261. },
  262. {
  263. text: '120分钟',
  264. model: 3,
  265. checked: false,
  266. value: 120
  267. }
  268. ]
  269. },
  270. selectConfirmActive: 0, // 弹窗选中
  271. uploadinteval: 60,
  272. roleId: null,
  273. version: 30071 //可以显示强省电模式设置菜单的设备的版本
  274. };
  275. },
  276. computed: {
  277. imei() {
  278. return this.$store.getters.serialNo;
  279. },
  280. iotCardTitle() {
  281. return this.$store.getters.iotCardTitle;
  282. },
  283. deviceVersion() {
  284. return this.$store.getters.deviceVersion;
  285. }
  286. },
  287. created() {
  288. /* this.settingListBottom[6].show = process.env.NODE_ENV !== 'production'; */
  289. /* this.settingListBottom[7].show = process.env.NODE_ENV !== "production"; */
  290. /* this.settingListTop[2].show =
  291. this.iotCardTitle === '零川' &&
  292. process.env.NODE_ENV !== 'production' &&
  293. parseInt(this.deviceVersion) > this.version; */
  294. this.loadRequest();
  295. },
  296. methods: {
  297. async loadRequest() {
  298. ToastService.loading({
  299. message: '数据加载中'
  300. });
  301. const allPromise = [
  302. this.getLocationConfig(),
  303. this.getHealthConfig(),
  304. this.getDrownConfig(),
  305. this.getNowearConfig(),
  306. this.getWatchConfig(),
  307. this.getPsychAbilityConfig(),
  308. this.getBloodConfig(),
  309. this.getUploadConfig(),
  310. this.getLongSitReminder()
  311. ];
  312. const promise = Promise.all(allPromise);
  313. try {
  314. const result = await promise;
  315. const isLoadAllSuccess = result.every(item => {
  316. return item;
  317. });
  318. if (isLoadAllSuccess) {
  319. ToastService.success({
  320. message: '数据加载完成',
  321. duration: 2000
  322. });
  323. } else {
  324. ToastService.clear();
  325. DialogService.comfirm({
  326. title: '提示',
  327. message: '数据加载失败,请重试'
  328. });
  329. }
  330. } catch (error) {
  331. console.log('error', error);
  332. ToastService.clear();
  333. }
  334. },
  335. onNavBack() {
  336. this.$router.push({
  337. name: 'Myself'
  338. });
  339. },
  340. onRoute(item) {
  341. if (this.modeId === 2 && item.className !== 'sceneMode' && item.className !== 'userRole') {
  342. DialogService.confirm({
  343. message: '当前模式为省电模式,请关闭省电模式后再操作',
  344. showCancelButton: true,
  345. cancelButtonText: '返回'
  346. });
  347. } else if (item.className === 'uploadinteval') {
  348. let selectIndex = this.dialog.confirmData.findIndex(item => {
  349. return item.value === this.uploadinteval;
  350. });
  351. this.selectConfirmActive = selectIndex;
  352. this.dialog.isDialogshow = true;
  353. // 2023.6.7 因弹窗参数减少,取消动态滚动
  354. /* setTimeout(() => {
  355. let selectScollEl = this.$refs.select;
  356. selectScollEl.scrollTop = this.getScroll(uploadinteval);
  357. },1000); */
  358. } else if (item.className === 'userRole') {
  359. let selectIndex = this.userRoleData.findIndex(item => {
  360. return item.value === this.roleId;
  361. });
  362. this.selectUserConfirmActive = selectIndex;
  363. this.isUserRoleDialogshow = true;
  364. } else if (
  365. item.routerName === 'psychologicalSetting' ||
  366. item.routerName === 'psychologicalRegUserInfos' ||
  367. item.routerName === 'blood'
  368. ) {
  369. this.$router.push({
  370. name: item.routerName,
  371. query: {
  372. from: 'watchSetting'
  373. }
  374. });
  375. } else if (item.routerName !== '') {
  376. this.$router.push({ name: item.routerName });
  377. }
  378. },
  379. getScroll(value) {
  380. console.log('value', value);
  381. if (value > 90) {
  382. return 600;
  383. } else if (value > 60 && value < 90) {
  384. return 350;
  385. } else if (value === 60) {
  386. return 120;
  387. } else if (value < 60) {
  388. return 10;
  389. }
  390. },
  391. onSelect(data) {
  392. console.log('选择了', data);
  393. this.selectConfirmActive = data.model;
  394. if (data.value === 10) {
  395. DialogService.confirm({
  396. message: '切换后数据更新更快、但耗电也高,确定切换吗?',
  397. showCancelButton: true
  398. })
  399. .then(() => {
  400. this.uploadinteval = data.value;
  401. this.setUploadConfig();
  402. })
  403. .catch(() => {});
  404. } else {
  405. this.uploadinteval = data.value;
  406. this.setUploadConfig();
  407. }
  408. this.dialog.isDialogshow = false;
  409. },
  410. // 获取设备上报参数
  411. getUploadConfig() {
  412. return new Promise((resolve, reject) => {
  413. APIHealthy.getUploadConfig({ imei: this.imei })
  414. .then(res => {
  415. console.log('获取上报参数', res);
  416. const data = res.data;
  417. if (data.data) {
  418. this.uploadinteval = data.data.uploadinteval;
  419. let selectIndex = this.dialog.confirmData.findIndex(item => {
  420. return item.value === data.data.uploadinteval;
  421. });
  422. console.log('selectIndex', selectIndex);
  423. this.selectConfirmActive = selectIndex;
  424. this.$store.commit('uploadinteval', data.data.uploadinteval);
  425. let index = this.settingListBottomUp.findIndex(item => {
  426. return item.className === 'uploadinteval';
  427. });
  428. this.settingListBottomUp[index].remark = data.data.uploadinteval + '分钟';
  429. /* ToastService.success({message: "加载成功"}); */
  430. }
  431. resolve(true);
  432. })
  433. .catch(() => {
  434. reject(false);
  435. });
  436. });
  437. },
  438. // 获取设备定位参数
  439. getLocationConfig() {
  440. return new Promise((resolve, reject) => {
  441. APIHealthy.getLocationConfig({ imei: this.imei })
  442. .then(res => {
  443. let data = res.data.data;
  444. if (data) {
  445. let index = this.settingListBottom.findIndex(item => {
  446. return item.routerName === 'locationMonitor';
  447. });
  448. this.settingListBottom[index].remark = data.enabled === 1 ? '打开' : '关闭';
  449. this.settingListBottom[index].powerStatus = data.enabled === 1 ? '耗电高' : '耗电低';
  450. }
  451. resolve(true);
  452. })
  453. .catch(() => {
  454. reject(false);
  455. });
  456. });
  457. },
  458. // 获取设备危险区域参数
  459. getDrownConfig() {
  460. return new Promise((resolve, reject) => {
  461. APIHealthy.getDrownConfig(this.imei)
  462. .then(res => {
  463. let data = res.data.data;
  464. if (data) {
  465. let index = this.settingListBottom.findIndex(item => {
  466. return item.routerName === 'dangerAreaMonitor';
  467. });
  468. this.settingListBottom[index].remark = data.config.enabled === 1 ? '打开' : '关闭';
  469. this.settingListBottom[index].powerStatus = data.config.enabled === 1 ? '耗电高' : '耗电低';
  470. }
  471. resolve(true);
  472. })
  473. .catch(() => {
  474. reject(false);
  475. });
  476. });
  477. },
  478. getPsychAbilityConfig() {
  479. return new Promise((resolve, reject) => {
  480. APIHealthy.getPsychAbilityConfig(this.imei)
  481. .then(res => {
  482. let data = res.data.data;
  483. let index = this.settingListBottom.findIndex(item => {
  484. return item.routerName === 'psychologicalSetting';
  485. });
  486. if (data) {
  487. this.settingListBottom[index].remark = data.enabled === 1 ? '打开' : '关闭';
  488. this.settingListBottom[index].powerStatus = data.enabled === 1 ? '耗电高' : '耗电低';
  489. } else {
  490. this.settingListBottom[index].remark = '关闭';
  491. this.settingListBottom[index].powerStatus = '耗电低';
  492. }
  493. resolve(true);
  494. })
  495. .catch(() => {
  496. reject(false);
  497. });
  498. });
  499. },
  500. // 获取设备健康参数
  501. getHealthConfig() {
  502. return new Promise((resolve, reject) => {
  503. APIHealthy.getHealthConfig({ imei: this.imei })
  504. .then(res => {
  505. let data = res.data.data;
  506. if (data) {
  507. let index = this.settingListBottom.findIndex(item => {
  508. return item.routerName === 'healthMonitor';
  509. });
  510. let healthEnablelist = [
  511. { enabled: data.config.heartrateenabled },
  512. { enabled: data.config.spo2enabled },
  513. { enabled: data.config.temperatureenabled }
  514. ];
  515. console.log('healthEnablelist', healthEnablelist);
  516. // 获取健康设置打开的次数
  517. const healthSettingCount = healthEnablelist.reduce((acc, cur) => (cur.enabled === 1 ? ++acc : acc), 0);
  518. console.log('healthSettingCount', healthSettingCount);
  519. this.settingListBottom[index].remark =
  520. healthSettingCount >= 3 ? '打开' : healthSettingCount >= 1 ? '部分' : '关闭';
  521. this.settingListBottom[index].powerStatus =
  522. healthSettingCount > 2 ? '耗电高' : healthSettingCount === 2 ? '耗电中' : '耗电低';
  523. }
  524. resolve(true);
  525. })
  526. .catch(() => {
  527. reject(false);
  528. });
  529. });
  530. },
  531. // 获取设备佩戴检测参数
  532. getNowearConfig() {
  533. return new Promise((resolve, reject) => {
  534. APIHealthy.getNowearConfig(this.imei)
  535. .then(res => {
  536. let data = res.data.data;
  537. if (data) {
  538. let index = this.settingListBottom.findIndex(item => {
  539. return item.routerName === 'wearMonitor';
  540. });
  541. this.settingListBottom[index].remark = data.enabled === 1 ? '打开' : '关闭';
  542. this.settingListBottom[index].powerStatus = data.enabled === 1 ? '耗电高' : '耗电低';
  543. }
  544. resolve(true);
  545. })
  546. .catch(() => {
  547. reject(false);
  548. });
  549. });
  550. },
  551. // 设置设备数据上报周期
  552. setWatchConfig(value) {
  553. if (value) {
  554. ToastService.loading({ message: '设置中' });
  555. }
  556. let reqBody = {
  557. imei: this.imei,
  558. roleId: this.roleId,
  559. modeId: this.modeId
  560. };
  561. console.log('reqBody', reqBody);
  562. APIHealthy.setWatchConfig(reqBody)
  563. .then(res => {
  564. console.log('设置上报参数', res);
  565. const data = res.data;
  566. if (data.stateCode === 1) {
  567. if (value) {
  568. ToastService.success({ message: '设置成功' });
  569. }
  570. this.getWatchConfig();
  571. this.getHealthConfig();
  572. } else {
  573. DialogService.confirm({
  574. title: '设置失败',
  575. message: `${res.data.message}`
  576. });
  577. }
  578. })
  579. .catch(error => {
  580. console.log('接口报错了', error);
  581. })
  582. .finally(() => {
  583. ToastService.clear();
  584. });
  585. },
  586. // 获取设备场景模式参数
  587. getWatchConfig() {
  588. return new Promise((resolve, reject) => {
  589. APIHealthy.getWatchConfig(this.imei)
  590. .then(res => {
  591. let data = res.data.data;
  592. if (data) {
  593. console.log('场景模式', data);
  594. const modeId = data.modeId;
  595. const roleId = data.roleId;
  596. this.modeId = data.modeId;
  597. this.roleId = roleId;
  598. this.$store.commit('watchRole', roleId);
  599. this.settingListTop[0].remark = roleId === 1 ? '学生' : '老人';
  600. this.settingListTop[1].remark = this.getModeById(modeId);
  601. } else {
  602. this.modeId = 1;
  603. this.roleId = 1;
  604. this.$store.commit('watchRole', 1);
  605. this.setWatchConfig(false);
  606. }
  607. resolve(true);
  608. })
  609. .catch(() => {
  610. reject(false);
  611. });
  612. });
  613. },
  614. // 获取设备血压周期性参数
  615. getBloodConfig() {
  616. return new Promise((resolve, reject) => {
  617. APIHealthy.getBloodPressConfig(this.imei)
  618. .then(res => {
  619. let data = res.data.data;
  620. let index = this.settingListBottom.findIndex(item => {
  621. return item.routerName === 'blood';
  622. });
  623. if (data) {
  624. this.settingListBottom[index].remark = data.bloodPressenabled === 1 ? '打开' : '关闭';
  625. this.settingListBottom[index].powerStatus = data.bloodPressenabled === 1 ? '耗电高' : '耗电低';
  626. } else {
  627. this.settingListBottom[index].remark = '关闭';
  628. this.settingListBottom[index].powerStatus = '耗电低';
  629. }
  630. resolve(true);
  631. })
  632. .catch(() => {
  633. reject(false);
  634. });
  635. });
  636. },
  637. getRaiseToLightScreen() {
  638. APIHealthy.getRaiseToLightScreen(this.imei).then(res => {
  639. let data = res.data.data;
  640. let index = this.settingListBottom.findIndex(item => {
  641. return item.routerName === 'raiseToLightScreen';
  642. });
  643. if (data) {
  644. this.settingListBottom[index].remark = data.enabled === 1 ? '打开' : '关闭';
  645. this.settingListBottom[index].powerStatus = data.enabled === 1 ? '耗电高' : '耗电低';
  646. } else {
  647. this.settingListBottom[index].remark = '关闭';
  648. this.settingListBottom[index].powerStatus = '耗电低';
  649. }
  650. });
  651. },
  652. getLongSitReminder() {
  653. return new Promise((resolve, reject) => {
  654. APIHealthy.getLongSitReminder(this.imei)
  655. .then(res => {
  656. let data = res.data.data;
  657. let index = this.settingListBottom.findIndex(item => {
  658. return item.routerName === 'longSitReminder';
  659. });
  660. if (data) {
  661. this.settingListBottom[index].remark = data.enabled === 1 ? '打开' : '关闭';
  662. this.settingListBottom[index].powerStatus = data.enabled === 1 ? '耗电高' : '耗电低';
  663. } else {
  664. this.settingListBottom[index].remark = '关闭';
  665. this.settingListBottom[index].powerStatus = '耗电低';
  666. }
  667. resolve(true);
  668. })
  669. .catch(() => {
  670. reject(false);
  671. });
  672. });
  673. },
  674. // 通过模式id获取场景模式
  675. getModeById(id) {
  676. if (id === 1) {
  677. return '标准';
  678. } else if (id === 2) {
  679. return '省电';
  680. } else {
  681. return '个性';
  682. }
  683. },
  684. // 设置设备数据上报周期
  685. setUploadConfig() {
  686. /* let reg = /^[1-9]+[0-9]*$/;
  687. if(this.uploadinteval === '') {
  688. return DialogService.confirm({
  689. message: '上报周期不能为空'
  690. })
  691. } else if(!reg.test(this.uploadinteval)) {
  692. return DialogService.confirm({
  693. message: '上报周期只能为正整数'
  694. })
  695. } */
  696. ToastService.loading({ message: '设置中' });
  697. let reqBody = {
  698. imei: this.imei,
  699. uploadinteval: Number(this.uploadinteval)
  700. };
  701. APIHealthy.setUploadConfig(reqBody).then(res => {
  702. console.log('设置上报参数', res);
  703. this.$store.commit('uploadinteval', this.uploadinteval);
  704. ToastService.success({ message: '设置成功' });
  705. this.getUploadConfig();
  706. this.getWatchConfig();
  707. });
  708. },
  709. // 设置选择属性
  710. onSelectUserRole(value) {
  711. console.log('this.roleI', this.roleId);
  712. DialogService.confirm({
  713. message: '切换后默认参数会变化,确定要切换?',
  714. showCancelButton: true,
  715. cancelButtonText: '返回'
  716. })
  717. .then(() => {
  718. this.roleId = value.value;
  719. this.modeId = this.modeId === 3 ? 1 : this.modeId;
  720. this.isUserRoleDialogshow = false;
  721. this.setWatchConfig(true);
  722. })
  723. .catch(() => {});
  724. }
  725. }
  726. };
  727. </script>
  728. <style scoped lang="scss">
  729. .setting-container {
  730. height: 100vh;
  731. background-color: $background;
  732. overflow: hidden;
  733. .setting-main {
  734. height: calc(100vh - 160px);
  735. padding: 20px;
  736. background-color: $background;
  737. overflow: scroll;
  738. .top {
  739. background-color: white;
  740. .setting-item {
  741. height: 120px;
  742. padding: 0 40px;
  743. display: flex;
  744. justify-content: space-between;
  745. align-items: center;
  746. border-bottom: 2px solid #d2d0d0;
  747. .left {
  748. @include center();
  749. img {
  750. height: 45px;
  751. width: 45px;
  752. margin-right: 20px;
  753. }
  754. span {
  755. color: #282828;
  756. font-size: 34px;
  757. }
  758. }
  759. .right {
  760. @include center();
  761. img {
  762. height: 35px;
  763. width: 35px;
  764. }
  765. }
  766. }
  767. }
  768. .bottom {
  769. margin: 20px 0 40px 0;
  770. background-color: white;
  771. .setting-item {
  772. height: 120px;
  773. padding: 0 40px;
  774. display: flex;
  775. justify-content: space-between;
  776. align-items: center;
  777. border-bottom: 2px solid #d2d0d0;
  778. .left {
  779. @include center();
  780. img {
  781. height: 45px;
  782. width: 45px;
  783. margin-right: 20px;
  784. }
  785. span {
  786. color: #282828;
  787. font-size: 34px;
  788. }
  789. }
  790. .middle {
  791. span {
  792. color: #c0baba;
  793. font-size: 32px;
  794. }
  795. }
  796. .right {
  797. @include center();
  798. span {
  799. padding-right: 80px;
  800. color: #c0baba;
  801. font-size: 32px;
  802. }
  803. img {
  804. height: 35px;
  805. width: 35px;
  806. }
  807. }
  808. }
  809. }
  810. }
  811. .dialog-container {
  812. padding: 20px 60px;
  813. font-size: 32px;
  814. .selectConfirm {
  815. padding: 0;
  816. .con {
  817. .van-cell {
  818. height: 60px;
  819. .van-cell__value {
  820. em {
  821. font-style: normal;
  822. position: absolute;
  823. top: 0;
  824. right: 0;
  825. @include colorAndFont(#999, 24);
  826. &.circle {
  827. width: 20px;
  828. height: 20px;
  829. border: 2px solid #bfbfbf;
  830. border-radius: 50%;
  831. position: absolute;
  832. right: 15px;
  833. &.on {
  834. border-color: $green;
  835. &:before {
  836. content: '';
  837. position: absolute;
  838. left: 50%;
  839. top: 50%;
  840. transform: translate(-50%, -50%);
  841. width: 14px;
  842. height: 14px;
  843. background: $green;
  844. border-radius: 50%;
  845. }
  846. }
  847. }
  848. }
  849. }
  850. }
  851. }
  852. }
  853. .input-con {
  854. display: flex;
  855. justify-content: flex-start;
  856. align-items: center;
  857. label {
  858. color: #000;
  859. }
  860. input {
  861. // width: 100%;
  862. margin-left: 15px;
  863. display: flex;
  864. width: 80px;
  865. height: 72px;
  866. text-indent: 15px;
  867. border-bottom: 1px solid #000;
  868. }
  869. }
  870. p {
  871. font-size: 32px;
  872. margin: 5px 0;
  873. color: #999;
  874. }
  875. }
  876. .title {
  877. font-size: 32px;
  878. }
  879. }
  880. </style>