myRepair.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775
  1. <template>
  2. <view class="home">
  3. <view v-if="tabsIndex1==1">
  4. <view class="home_item" v-if="isDept.valueconfig==1">
  5. <view class="title">科室报修</view>
  6. <view class="content">
  7. <view @click="repairsView(1,'pending,handler,reassign')">
  8. <view class="con-title">处理中</view>
  9. <view class="con-value">{{repairData.deptHandlerCount}}</view>
  10. </view>
  11. <view @click="repairsView(1,'close0')">
  12. <view class="con-title">待评价</view>
  13. <view class="con-value">{{repairData.deptCloseCount}}</view>
  14. </view>
  15. <view>
  16. <view class="con-title">本月维修费用(元)</view>
  17. <view class="con-value-gr">{{repairData.deptCurrentMonthPrice || 0}}</view>
  18. </view>
  19. </view>
  20. </view>
  21. <view class="home_item">
  22. <view class="title">我的报修</view>
  23. <view class="content">
  24. <view @click="repairsView(0,'pending,handler,reassign')">
  25. <view class="con-title">处理中</view>
  26. <view class="con-value">{{repairData.userHandlerCount}}</view>
  27. </view>
  28. <view @click="repairsView(0,'close0')">
  29. <view class="con-title">待评价</view>
  30. <view class="con-value">{{repairData.userCloseCount}}</view>
  31. </view>
  32. </view>
  33. </view>
  34. <!-- <view class="home_item">
  35. <uni-notice-bar show-icon scrollable background-color="#ffffff" color="#000"
  36. :text="noticeData" />
  37. </view> -->
  38. <view class="home_item home-disp">
  39. <view class="bottom-left" @click="addRepairs">
  40. <view class="bottom-left-box">
  41. <text class="newicon newicon-kuaisubaoxiu icon"></text>
  42. <view>快速报修</view>
  43. </view>
  44. </view>
  45. <view class="bottom-right mar-t-20">
  46. <view class="bottom-right-item" v-if="isRepair.valueconfig==1" @click="scanCodes">
  47. <text class="newicon newicon-saoma icon"></text>
  48. <view class="name1">扫资产报修</view>
  49. </view>
  50. <view class="bottom-right-item" @click="repository">
  51. <text class="newicon newicon-zhishiku1 icon"></text>
  52. <view class="name2">知识库</view>
  53. </view>
  54. </view>
  55. </view>
  56. </view>
  57. <view v-if="tabsIndex2==1" class="mine">
  58. <view class="body">
  59. <view class="bottom">
  60. <view class="bottom_name">个人信息</view>
  61. <view class="bottom_list">
  62. <view class="bottom_list_item">
  63. <view class="name"><text class="required newicon newicon-bitian"></text>工号</view>
  64. <view class="value no-mar">{{loginUserStore.loginUser.user.account}}</view>
  65. </view>
  66. <view class="bottom_list_item">
  67. <view class="name"><text class="required newicon newicon-bitian"></text>姓名</view>
  68. <view class="value no-mar">{{loginUserStore.loginUser.user.name}}</view>
  69. </view>
  70. <view class="bottom_list_item">
  71. <view class="name"><text class="required newicon newicon-bitian"></text>院区名称</view>
  72. <uni-data-picker class="value" placeholder="请选择院区名称"
  73. v-model="dataForm.branch" :localdata="branchData" @change="branchChange"
  74. :clear-icon="false" :class="{formRed: isSubmit && !dataForm.branch}">
  75. </uni-data-picker>
  76. <text class="newicon newicon-youjiantou icon"></text>
  77. </view>
  78. <view class="bottom_list_item" v-if="deptRepair.valueconfig==1">
  79. <view class="name"><text class="required newicon newicon-bitian"></text>科室名称</view>
  80. <uni-data-picker class="value" placeholder="请选择报修科室"
  81. v-model="dataForm.dept" :localdata="deptData"
  82. :clear-icon="false" :class="{formRed: isSubmit && !dataForm.dept}">
  83. </uni-data-picker>
  84. <text class="newicon newicon-youjiantou icon"></text>
  85. </view>
  86. <view class="bottom_list_item" v-if="deptRepair.valueconfig==1" @click="deptSelect">
  87. <view class="name">常用科室</view>
  88. <view class="value">{{commonDeptName}}</view>
  89. <text class="newicon newicon-youjiantou icon"></text>
  90. </view>
  91. <view class="bottom_list_item">
  92. <view class="name"><text class="required newicon newicon-bitian"></text>联系电话</view>
  93. <view class="value no-mar" @click="makePhoneCall(loginUserStore.loginUser.user.phone)">{{loginUserStore.loginUser.user.phone}}</view>
  94. </view>
  95. </view>
  96. </view>
  97. </view>
  98. <view class="foot_common_btns fixed-btn">
  99. <button @click="addInfo" type="default" class="primaryButton btn">保存</button>
  100. </view>
  101. </view>
  102. <view class="bottom-tabs">
  103. <view class="tabs-list" @click="tabsClick1">
  104. <img src="/static/img/icon_incidentList.png" v-if="tabsIndex1==0" alt="">
  105. <img src="/static/img/icon_incidentList_active.png" v-if="tabsIndex1==1" alt="">
  106. <view class="tabs-title" :class="tabsIndex1==1?'active-class':''">我的报修</view>
  107. </view>
  108. <view class="tabs-list" @click="tabsClick2">
  109. <img src="/static/img/icon_my.png" v-if="tabsIndex2==0" alt="">
  110. <img src="/static/img/icon_my_active.png" v-if="tabsIndex2==1" alt="">
  111. <view class="tabs-title" :class="tabsIndex2==1?'active-class':''">设置</view>
  112. </view>
  113. </view>
  114. </view>
  115. </template>
  116. <script setup>
  117. import { SM } from "@/http/http.js"
  118. import { ref, reactive } from 'vue'
  119. import { onLoad ,onShow, onHide, onPullDownRefresh} from '@dcloudio/uni-app'
  120. import { api_systemConfiguration, api_userSave, api_user, api_department, api_repairScanCode, api_getNotice, api_getCount } from "@/http/api.js"
  121. import { useSetTitle } from '@/share/useSetTitle.js'
  122. import { repositoryListSearchStore } from '@/stores/repositorySearch'
  123. import { useLoginUserStore } from '@/stores/loginUser'
  124. import { useMakePhoneCall } from '@/share/useMakePhoneCall.js'
  125. import { useIncidentNumStore } from '@/stores/incidentNum'
  126. useSetTitle();
  127. // 数据
  128. const isDept = ref({})
  129. const isRepair = ref({})
  130. const isPublic = ref({})
  131. const noticeData = ref('')
  132. const repairData = ref({})
  133. const tabsIndex1 = ref(1)
  134. const tabsIndex2 = ref(0)
  135. const repositorySearchStore = repositoryListSearchStore();
  136. const loginUserStore = useLoginUserStore();
  137. const incidentNumStore = useIncidentNumStore();
  138. const { makePhoneCall } = useMakePhoneCall();
  139. const deptRepair = ref(null)
  140. const deptData = ref([])
  141. const branchData = ref([])
  142. const commonDeptName = ref(null)
  143. const commonDeptData = ref(null)
  144. const dataForm = reactive({
  145. dept: '',
  146. branch:''
  147. })
  148. const userTypes = ref(null)
  149. const userData = reactive(loginUserStore.loginUser.user)
  150. const commonDeptDTO = ref([])
  151. // 是否提交
  152. const isSubmit = ref(false)
  153. // 数据
  154. const dataInfo = reactive({
  155. num: 0,
  156. })
  157. function tabsClick1(){
  158. tabsIndex1.value=1
  159. tabsIndex2.value=0
  160. getCount()
  161. setTimeout(_=>{
  162. let data = JSON.parse(uni.getStorageSync('sysData'))
  163. isDept.value = data.find(i=>i.keyconfig=='deptRepair')
  164. isRepair.value = data.find(i=>i.keyconfig=='cmdbRepair')
  165. isPublic.value = data.find(i=>i.keyconfig=='publicRepair')
  166. },0)
  167. }
  168. function tabsClick2(){
  169. tabsIndex2.value=1
  170. tabsIndex1.value=0
  171. getUserInfo()
  172. }
  173. // 知识库
  174. function repository(){
  175. repositorySearchStore.clearRepositoryListSearchData()
  176. uni.navigateTo({
  177. url: `/pages/repository/repository?type=view&entranceType=repairs`
  178. })
  179. }
  180. // 报修列表
  181. function repairsView(type,value){
  182. uni.navigateTo({
  183. url: `/pages/repair/repairsList?type=${type}&value=${value}`
  184. })
  185. }
  186. // 获取报修数量
  187. function getCount(){
  188. uni.showLoading({
  189. title: "加载中",
  190. mask: true,
  191. });
  192. api_getCount({}).then(res=>{
  193. uni.hideLoading();
  194. repairData.value = res.data
  195. })
  196. }
  197. // 快速报修
  198. function addRepairs(){
  199. if(isDept.value.valueconfig==0 && isPublic.value.valueconfig==0){
  200. uni.showToast({
  201. icon: 'none',
  202. title: '请先开启科室报修或公共报修'
  203. });
  204. return
  205. }
  206. uni.setStorageSync('repairsType','subpage')
  207. uni.navigateTo({
  208. url: '/pages/repair/rapidRep'
  209. })
  210. }
  211. // 扫资产报修
  212. function scanCodes(){
  213. uni.showLoading({
  214. title: "加载中",
  215. mask: true,
  216. });
  217. SM().then((res) => {
  218. api_repairScanCode({
  219. code:res
  220. }).then((res2) => {
  221. uni.hideLoading();
  222. if (res2.state == 200) {
  223. uni.navigateTo({
  224. url: `/pages/repair/rapidRep?property=${res2.data.name}&assetId=${res2.data.id}`
  225. })
  226. } else {
  227. uni.showToast({
  228. icon: 'none',
  229. title: res2.msg || '请求数据失败!'
  230. });
  231. }
  232. });
  233. })
  234. }
  235. // 获取文本内容
  236. function getHtml(data) {
  237. const tempDiv = document.createElement('div');
  238. tempDiv.innerHTML = data.content;
  239. noticeData.value = tempDiv.textContent || tempDiv.innerText || '';
  240. }
  241. // 保存
  242. function addInfo(){
  243. if(!dataForm.branch){
  244. uni.showToast({
  245. icon: 'none',
  246. title: '院区不能为空'
  247. });
  248. return
  249. }
  250. if(!dataForm.dept){
  251. uni.showToast({
  252. icon: 'none',
  253. title: '报修科室不能为空'
  254. });
  255. return
  256. }
  257. uni.showLoading({
  258. title: "加载中",
  259. mask: true,
  260. });
  261. isSubmit.value = true
  262. userData.currentHospital.id = dataForm.branch
  263. userData.commonDeptName = commonDeptName.value
  264. userData.dept={
  265. id:dataForm.dept
  266. }
  267. let arr = []
  268. for(let i of commonDeptDTO.value){
  269. arr.push({
  270. dept:i
  271. })
  272. }
  273. let postData = {
  274. ...loginUserStore.loginUser.user,
  275. // ...userData,
  276. hospital:{
  277. id:dataForm.branch
  278. },
  279. dept:{
  280. id:dataForm.dept
  281. },
  282. commonDept:commonDeptData.value,
  283. commonDeptDTO:arr
  284. }
  285. api_userSave({
  286. user: postData,
  287. }).then(res => {
  288. uni.hideLoading();
  289. if(res.status == 200){
  290. loginUserStore.setLoginUser(postData);
  291. uni.showToast({
  292. icon: 'none',
  293. title: '保存成功'
  294. });
  295. }else{
  296. uni.showToast({
  297. icon: 'none',
  298. title: res.msg || '请求数据失败!'
  299. });
  300. }
  301. })
  302. }
  303. // 选择院区
  304. function branchChange(){
  305. dataForm.dept = null
  306. commonDeptName.value = null
  307. commonDeptData.value = null
  308. getRepairTypes()
  309. }
  310. // 获取科室列表
  311. function getRepairTypes(){
  312. uni.showLoading({
  313. title: "加载中",
  314. mask: true,
  315. });
  316. let postData = {
  317. department: {
  318. hospital: dataForm.branch?dataForm.branch:loginUserStore.loginUser.user.currentHospital.id,
  319. },
  320. idx:0,
  321. sum:9999
  322. }
  323. api_department(postData).then(res => {
  324. uni.hideLoading();
  325. res = res.list || [];
  326. deptData.value = res.map(v => ({
  327. text: v.dept,
  328. value: v.id,
  329. }));
  330. })
  331. }
  332. // 获取院区列表
  333. function getBranch(){
  334. let arr = loginUserStore.loginUser.hospital.filter(i=>i.parent==undefined)
  335. branchData.value = arr.map(v => ({
  336. text: v.hosName,
  337. value: v.id,
  338. }));
  339. }
  340. // 选择常用科室
  341. function deptSelect(){
  342. uni.setStorageSync('configData',JSON.stringify(dataForm))
  343. let data = commonDeptData.value ?
  344. commonDeptData.value : loginUserStore.loginUser.user.commonDept
  345. if(!data){
  346. data = 'none'
  347. }
  348. let deptId = dataForm.branch?dataForm.branch:loginUserStore.loginUser.user.currentHospital.id
  349. uni.navigateTo({
  350. url: `/pages/repair/deptSelect?data=${JSON.stringify(data)}&commonDeptName=${commonDeptName.value}&deptId=${deptId}&type=subpage`
  351. })
  352. }
  353. // 初始化
  354. function onLoadFn(){
  355. let data = JSON.parse(uni.getStorageSync('sysData'))
  356. deptRepair.value = data.find(i=>i.keyconfig=='deptRepair')
  357. getBranch()
  358. }
  359. function getUserInfo(){
  360. let user = loginUserStore.loginUser.user
  361. let userId = null
  362. if(user.currentHospital.parent){
  363. userId = user.currentHospital.parent.id
  364. }else{
  365. userId = user.currentHospital.id
  366. }
  367. let postData = {
  368. idx: 0,
  369. sum: 999,
  370. user: {
  371. hospital:{
  372. id:userId
  373. },
  374. name: user.name,
  375. userTypeIds: String(userTypes.value.map(v => v.id))
  376. }
  377. }
  378. api_user(postData).then(res => {
  379. if(res.status == 200){
  380. let item = res.list.find(i=>i.id==user.id)
  381. if(item){
  382. if(item.hospital.parent){
  383. dataForm.branch = item.hospital.parent.id
  384. }else{
  385. dataForm.branch = item.hospital.id
  386. }
  387. if(item.dept){
  388. dataForm.dept = item.dept.id
  389. }
  390. getRepairTypes()
  391. let id = []
  392. let name = []
  393. if(item.commonDeptDTO){
  394. for(let i of item.commonDeptDTO){
  395. id.push(i.id)
  396. name.push(i.dept)
  397. }
  398. commonDeptData.value = id.join(',')
  399. commonDeptName.value = name.join('/')
  400. }
  401. }else{
  402. // let data = uni.getStorageSync('configData')
  403. // if(data){
  404. // data = JSON.parse(data)
  405. // dataForm.dept = data.dept
  406. // dataForm.branch = data.branch
  407. // }else{
  408. if(user.currentHospital.parent){
  409. dataForm.branch = user.currentHospital.parent.id
  410. }else{
  411. dataForm.branch = user.currentHospital.id
  412. }
  413. if(user.dept){
  414. dataForm.dept = user.dept.id
  415. }
  416. // }
  417. if(user.commonDeptDTO){
  418. let name = []
  419. for(let i of user.commonDeptDTO){
  420. name.push(i.dept)
  421. }
  422. commonDeptData.value = user.commonDept
  423. commonDeptName.value = name.join('/')
  424. }
  425. getRepairTypes()
  426. }
  427. }else{
  428. uni.showToast({
  429. icon: 'none',
  430. title: res.msg || '请求数据失败!'
  431. });
  432. }
  433. })
  434. }
  435. onHide(opt=>{
  436. dataInfo.num = 0
  437. dataForm.branch = null
  438. })
  439. onLoad((option) => {
  440. userTypes.value = JSON.parse(uni.getStorageSync('groupData'))
  441. onLoadFn();
  442. dataInfo.num = 1
  443. if(option.type==2){
  444. if(option.data){
  445. tabsIndex1.value = 0
  446. tabsIndex2.value = 1
  447. let data = JSON.parse(option.data)
  448. commonDeptData.value = data.data.join(',')
  449. commonDeptName.value = data.name.join('/')
  450. commonDeptDTO.value = data.name
  451. let data2 = uni.getStorageSync('configData')
  452. if(data2){
  453. data2 = JSON.parse(data2)
  454. dataForm.dept = data2.dept
  455. dataForm.branch = data2.branch
  456. }
  457. getRepairTypes()
  458. }else{
  459. getUserInfo()
  460. }
  461. }else{
  462. tabsIndex1.value = 1
  463. tabsIndex2.value = 0
  464. getCount()
  465. setTimeout(_=>{
  466. let data = JSON.parse(uni.getStorageSync('sysData'))
  467. isDept.value = data.find(i=>i.keyconfig=='deptRepair')
  468. isRepair.value = data.find(i=>i.keyconfig=='cmdbRepair')
  469. isPublic.value = data.find(i=>i.keyconfig=='publicRepair')
  470. },0)
  471. }
  472. })
  473. onPullDownRefresh(_=>{
  474. uni.stopPullDownRefresh();
  475. })
  476. onShow((option) => {
  477. userTypes.value = JSON.parse(uni.getStorageSync('groupData'))
  478. onLoadFn()
  479. if(dataInfo.num==0){
  480. getUserInfo()
  481. }
  482. })
  483. </script>
  484. <style scoped>
  485. >>> .uni-data-tree-input{
  486. width: 100% !important;
  487. }
  488. >>> .input-value-border{
  489. border: none !important;
  490. }
  491. >>> .input-value{
  492. padding:0 !important;
  493. flex-direction: row-reverse !important;
  494. }
  495. >>> .selected-list{
  496. flex-direction: row-reverse !important;
  497. }
  498. >>> .arrow-area{
  499. display: none !important;
  500. }
  501. >>>.uni-data-tree-dialog{
  502. z-index: 9999;
  503. }
  504. </style>
  505. <style lang="scss" scoped>
  506. .home{
  507. // height: 100vh;
  508. padding: 20rpx;
  509. background: #fff;
  510. .home_item{
  511. padding: 20rpx;
  512. box-shadow: 0px 3px 6px 1px rgba(0,0,0,0.16);
  513. border-radius: 10rpx;
  514. margin-bottom: 30rpx;
  515. .title{
  516. font-size: 26rpx;
  517. color: $uni-primary;
  518. padding-left: 18rpx;
  519. position: relative;
  520. margin-bottom: 20rpx;
  521. &:before{
  522. content: '';
  523. width: 8rpx;
  524. height: 25rpx;
  525. background-color: $uni-primary;
  526. position: absolute;
  527. left: 0;
  528. top: 50%;
  529. transform: translateY(-50%);
  530. }
  531. }
  532. .content{
  533. display: flex;
  534. align-items: center;
  535. justify-content: space-around;
  536. text-align: center;
  537. .con-title{
  538. color: #949494;
  539. font-size: 24rpx;
  540. margin-bottom: 15rpx;
  541. }
  542. .con-value{
  543. color: #000;
  544. font-size: 50rpx;
  545. }
  546. .con-value-gr{
  547. color: #49B856;
  548. font-size: 50rpx;
  549. }
  550. }
  551. .uni-noticebar{
  552. margin: 0 !important;
  553. padding: 0 !important;
  554. }
  555. }
  556. .home-disp{
  557. display: flex;
  558. justify-content: space-around;
  559. .bottom-left{
  560. height: 380rpx;
  561. background: linear-gradient( 269deg, #54B99C 0%, #7AC481 100%);
  562. border-radius: 10rpx;
  563. flex: 1.5;
  564. margin-right: 20rpx;
  565. display: flex;
  566. align-items: center;
  567. justify-content: center;
  568. color: #FFFFFF;
  569. margin-top: 20rpx;
  570. .bottom-left-box{
  571. text-align: center;
  572. .icon{
  573. font-size: 100rpx;
  574. position: relative;
  575. top: -20rpx;
  576. }
  577. }
  578. }
  579. .mar-t-20{
  580. margin-top: 20rpx;
  581. }
  582. .bottom-right{
  583. flex: 2;
  584. .bottom-right-item{
  585. height: 175rpx;
  586. background: #FFFFFF;
  587. border-radius: 10rpx;
  588. border: 2rpx solid #6FC073;
  589. margin-bottom: 20rpx;
  590. display: flex;
  591. align-items: center;
  592. justify-content: center;
  593. position: relative;
  594. .icon{
  595. font-size: 50rpx;
  596. color: #6FC073;
  597. position: absolute;
  598. left: 60rpx;
  599. }
  600. .name1{
  601. font-size: 32rpx;
  602. position: absolute;
  603. right: 50rpx;
  604. }
  605. .name2{
  606. font-size: 32rpx;
  607. position: absolute;
  608. right: 80rpx;
  609. }
  610. }
  611. }
  612. }
  613. .bottom-tabs{
  614. border-top:1px solid rgba(0, 0, 0, 0.33);
  615. background: #fff;
  616. position: fixed;
  617. width: 100%;
  618. left: var(--window-left);
  619. right: var(--window-right);
  620. display: flex;
  621. bottom: 0;
  622. .tabs-list{
  623. height: 90rpx;
  624. display: flex;
  625. justify-content: center;
  626. align-items: center;
  627. flex-direction: column;
  628. flex: 1;
  629. font-size: 0;
  630. text-align: center;
  631. -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  632. img{
  633. width: 48rpx;
  634. height: 48rpx;
  635. }
  636. .tabs-title{
  637. color: rgb(136, 136, 136);
  638. font-size: 20rpx;
  639. line-height: normal;
  640. }
  641. .active-class{
  642. color: #49B856;
  643. }
  644. }
  645. }
  646. }
  647. .mine{
  648. height: 100%;
  649. display: flex;
  650. flex-direction: column;
  651. justify-content: space-between;
  652. .phone-filled{
  653. margin-right: 5rpx;
  654. }
  655. .newicon-xinjian2,
  656. .newicon-zhishiku{
  657. margin-right: 10rpx;
  658. }
  659. .body{
  660. width: 714rpx;
  661. height: 100%;
  662. margin: 16rpx auto var(--window-bottom) auto;
  663. box-sizing: border-box;
  664. border-radius: 8rpx;
  665. .top{
  666. padding: 30rpx;
  667. background-color: #fff;
  668. .top_name{
  669. font-size: 28rpx;
  670. font-weight: bold;
  671. }
  672. .top_count{
  673. margin-top: 45rpx;
  674. display: flex;
  675. align-items: center;
  676. justify-content: space-between;
  677. .top_count_item{
  678. text-align: center;
  679. .name{
  680. color: #949494;
  681. font-size: 22rpx;
  682. }
  683. .value{
  684. font-size: 50rpx;
  685. font-weight: bold;
  686. margin-top: 15rpx;
  687. }
  688. }
  689. }
  690. }
  691. .bottom{
  692. background-color: #fff;
  693. margin-top: 15rpx;
  694. .bottom_name{
  695. font-size: 26rpx;
  696. color: $uni-primary;
  697. padding: 21rpx 24rpx;
  698. }
  699. .bottom_list{
  700. .bottom_list_item{
  701. border-top: 1rpx solid #DEDEDE;
  702. padding: 30rpx 30rpx 30rpx 30rpx;
  703. display: flex;
  704. justify-content: space-between;
  705. align-items: center;
  706. font-size: 24rpx;
  707. position: relative;
  708. .value{
  709. max-width: 380rpx;
  710. color: #333;
  711. display: flex;
  712. align-items: center;
  713. text-align: justify;
  714. margin-right: 30rpx;
  715. }
  716. .no-mar{
  717. margin-right:0 !important;
  718. }
  719. .icon{
  720. position: absolute;
  721. right: 20rpx;
  722. }
  723. }
  724. }
  725. }
  726. }
  727. .fixed-btn{
  728. position: fixed;
  729. bottom: 100rpx;
  730. left: 0;
  731. }
  732. }
  733. </style>