hiddenDangerItemsDetail.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. <!-- 检查详情 -->
  2. <template>
  3. <view class="snapshotDetail">
  4. <scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
  5. <view class="list">
  6. <view class="list-li srearch">
  7. <view class="srearch-l">{{newData.subName?newData.subName:'实验室名称'}}</view>
  8. </view>
  9. <view class="list-li" style="margin-bottom: 20rpx;border:none;">
  10. <view>
  11. {{newData.roomNum?newData.roomNum:''}}房间&{{newData.buildName?newData.buildName:'楼栋'}}&{{newData.deptName?newData.deptName:'学院单位'}}
  12. </view>
  13. </view>
  14. <view v-if="newData.checkCollapse">
  15. <view class="list-li">
  16. <view>现场照片</view>
  17. </view>
  18. <view v-if="pageType==0" class="photo" @click="lockImg(newData.photoList)">
  19. <img v-for="(item,index) in newData.photoList" :src="baseUrl+item.fileUrl">
  20. </view>
  21. <view class="list-li" style="border-bottom: none;">
  22. <view> {{newData.hazardCheckCode?newData.hazardCheckCode:''}}
  23. {{newData.hazardCheckName?newData.hazardCheckName:'检查项'}}
  24. </view>
  25. </view>
  26. <view class="hazardCheckNum" @click="hiddenDangerClick()">
  27. <img class="hazardCheckNum-l" src="@/pages_safetyCheck/images/icon_aqjc_yinhuan.png">
  28. <view class="hazardCheckNum-r">{{'已连续出现'+hazardCheckNum+'次隐患'}} </view>
  29. </view>
  30. <view class="list-li">
  31. <view>隐患描述</view>
  32. <view></view>
  33. </view>
  34. <view class="hidden" v-if="!newData.checkFlag">
  35. <view class="hidden-content">{{newData.hazardDescribe}}</view>
  36. </view>
  37. <view v-if="pageType==1 || pageType==2" class="photo" @click="lockImg(newData.yhDtoList)">
  38. <img v-for="(item,index) in newData.yhDtoList" :src="baseUrl+item.fileUrl">
  39. </view>
  40. <view class="list-li">
  41. <view>检查人:</view>
  42. <view>{{newData.checkUserName}}</view>
  43. </view>
  44. <view class="list-li">
  45. <view>检查时间</view>
  46. <view>{{newData.checkTime}}</view>
  47. </view>
  48. <view class="voice">
  49. <view class="voice_t">
  50. <view class="voice_t_t" v-if="!newData.voiceList[0]"><text>语音备注:</text><text></text></view>
  51. <view class="voice_t_b" v-if="newData.voiceList[0]">语音备注:({{newData.voiceList.length}})</view>
  52. </view>
  53. <view class="voice_b" v-if="newData.voiceList[0]" v-for="(voiceItem,voiceIndex) in newData.voiceList"
  54. :key="voiceIndex">
  55. <view class="voice_b_l" @tap="voicePlay(voiceItem.fileUrl)">
  56. <img class="add-button" src="@/pages_safetyCheck/images//icon_yybz_yy.png" />
  57. {{voiceItem.fileLength}}″
  58. </view>
  59. </view>
  60. </view>
  61. </view>
  62. <view v-if="pageType==1 || pageType==2" v-for="(item,index) in newData.checkRectifyVoList" :key="index">
  63. <view class="list-li" v-if="item.rectifyTime" @click="rectifyCollapse(item)">
  64. <view>隐患整改</view>
  65. <view :id="item.rectifyResult?'fontColor-B':(item.rectifyResult?'fontColor-C':'')">
  66. {{item.rectifyResult?'已整改':(item.rectifyResult?'暂无法整改':'')}}
  67. <img v-if="!item.rectifyCollapse" src="@/pages_safetyCheck/images/icon_06.png">
  68. <img v-if="item.rectifyCollapse" src="@/pages_safetyCheck/images/icon_06_1.png">
  69. </view>
  70. </view>
  71. <view v-if="item.rectifyCollapse && item.rectifyTime">
  72. <view v-if="item.rectifyMeasure" class="hidden">
  73. <view class="hidden-content">{{item.rectifyMeasure}}</view>
  74. </view>
  75. <view class="photo" @click="lockImg(item.rectifyUploadList)">
  76. <img v-for="(item2,index2) in item.rectifyUploadList" :src="baseUrl+item2.fileUrl">
  77. </view>
  78. <view class="list-li">
  79. <view>姓名:</view>
  80. <view>{{item.rectifyName}}</view>
  81. </view>
  82. <view class="list-li">
  83. <view>整改时间</view>
  84. <view>{{item.rectifyTime}}</view>
  85. </view>
  86. </view>
  87. <view class="list-li" v-if="item.reviewTime" @click="reviewCollapse(item)">
  88. <view>复查验证</view>
  89. <view :id="item.examineResult?'fontColor-B':'fontColor-C'">
  90. {{item.examineResult?'复查完毕':'退回整改'}}
  91. <img v-if="!item.reviewCollapse" src="@/pages_safetyCheck/images/icon_06.png">
  92. <img v-if="item.reviewCollapse" src="@/pages_safetyCheck/images/icon_06_1.png">
  93. </view>
  94. </view>
  95. <view v-if="item.reviewCollapse && item.reviewTime">
  96. <view v-if="item.examineOpinion" class="hidden">
  97. <view class="hidden">
  98. <view class="hidden-content">{{item.examineOpinion}}</view>
  99. </view>
  100. </view>
  101. <view class="photo" @click="lockImg(item.examineUploadList)">
  102. <img v-for="(item3,index3) in item.examineUploadList" :src="baseUrl+item3.fileUrl">
  103. </view>
  104. <view class="list-li">
  105. <view>姓名:</view>
  106. <view>{{item.reviewName}}</view>
  107. </view>
  108. <view class="list-li">
  109. <view>复查时间</view>
  110. <view>{{item.reviewTime}}</view>
  111. </view>
  112. </view>
  113. </view>
  114. </view>
  115. </scroll-view>
  116. <view class="subBtn" v-if="pageType==0 && newData.checkSetProgress !=100 && !hiddenDangerRecordStatus">
  117. <img @click="submitBtn(1)" src="@/pages_safetyCheck/images/icon_aqjc_bianji.png" />
  118. <img @click="submitBtn(2)" src="@/pages_safetyCheck/images/icon_aqjc_jiancha.png" />
  119. </view>
  120. <!-- <view class="sub-btn" v-if="pageType==0 && newData.checkSetProgress !=100 && !hiddenDangerRecordStatus">
  121. <view @click="submitBtn(1)">编辑</view>
  122. <view @click="submitBtn(2)">继续检查</view>
  123. </view> -->
  124. <view class="sub-btn-tow" v-if="pageType==1 && !hiddenDangerRecordStatus" @click="submitBtn(2)">继续复查</view>
  125. <view class="sub-btn" v-if="pageType==2 && !hiddenDangerRecordStatus && !newData.finishRectify">
  126. <view @click="submitBtn(1)">编辑</view>
  127. <view @click="submitBtn(2)">继续整改</view>
  128. </view>
  129. <view v-if="pageType==0 && newData.checkSetProgress ==100 && !hiddenDangerRecordStatus" @click="submitBtn(2)" class="sub-btn-tow">继续检查</view>
  130. </view>
  131. </template>
  132. <script>
  133. const myaudio = uni.createInnerAudioContext();
  134. import {
  135. config
  136. } from '@/api/request/config.js'
  137. import {
  138. parseTime
  139. } from '@/component/public.js'
  140. import {
  141. securityAppCheckPlanCheckInfo,
  142. securityAppCheckPhotoGetCheckNumBySub,
  143. securityAppCheckDangerGetCheckProDetail,
  144. securityAppCheckSetOptionList,
  145. } from '@/pages_safetyCheck/api/index.js'
  146. export default {
  147. name: "snapshotDetail",
  148. components: {
  149. },
  150. data() {
  151. return {
  152. baseUrl: config.base_url,
  153. inspectionItems: 0, //0有检查项 1无检查项
  154. newData: {},
  155. setOptionId: '',
  156. manageId: '',
  157. subId: '',
  158. hazardCheckPro: '',
  159. hazardCheckNum: 0,
  160. pageType: 0, //0检查 1复查 2整改
  161. itemsStatus:'',
  162. optionData:null,
  163. lotName: null,
  164. hiddenDangerRecordStatus: null,//判断是否是从隐患列表页面跳转过来
  165. }
  166. },
  167. onLoad(option) {
  168. let optionData = JSON.parse(decodeURIComponent(option.infoData));
  169. console.log('详情',optionData)
  170. this.$set(this, 'pageType', optionData.pageType);
  171. this.$set(this, 'itemsStatus', optionData.itemsStatus);
  172. this.$set(this, 'setOptionId', optionData.setOptionId);
  173. this.$set(this, 'manageId', optionData.manageId);
  174. this.$set(this, 'subId', optionData.subId);
  175. this.$set(this, 'hazardCheckPro', optionData.hazardCheckPro);
  176. this.$set(this, 'hiddenDangerRecordStatus', optionData.hiddenDangerRecordStatus);
  177. this.$set(this, 'optionData', optionData);
  178. this.$set(this, 'lotName',
  179. optionData.pageType == 0 ? optionData.checkPlanSetVoList.checkName : (
  180. optionData.checkPlanSetVoList.overdueUnrectify ? '整改期限' + optionData.checkPlanSetVoList
  181. .rectifyDeadline +
  182. '(逾期未完成整改关闭实验室)' : '整改期限' + optionData.checkPlanSetVoList.rectifyDeadline));
  183. },
  184. onShow() {
  185. },
  186. mounted() {
  187. if(this.pageType==0){
  188. this.securityAppCheckPlanCheckInfo();
  189. }else if(this.pageType==1 || this.pageType==2){
  190. //复查-整改
  191. this.securityAppCheckDangerGetCheckProDetail();
  192. }
  193. this.securityAppCheckPhotoGetCheckNumBySub();
  194. },
  195. methods: {
  196. //滚动事件
  197. scrollGet() {},
  198. //获取检查提交详情
  199. async securityAppCheckPlanCheckInfo() {
  200. let obj = {
  201. setOptionId: this.setOptionId,
  202. manageId: this.manageId,
  203. }
  204. const {
  205. data
  206. } = await securityAppCheckPlanCheckInfo(obj);
  207. if (data.code == 200) {
  208. uni.setNavigationBarTitle({
  209. title: data.data.subName + '(' + (this.pageType == 0 ? data.data.roomNum?data.data.roomNum:'-' : data.data
  210. .subRoom?data.data.subRoom:'-') + ')'
  211. })
  212. data.data.checkCollapse=true;
  213. data.data.inspectDot=false;
  214. this.$set(this, 'newData', data.data);
  215. this.$set(this.newData, 'checkTime', parseTime(data.data.checkTime, "{y}-{m}-{d}"));
  216. }
  217. },
  218. //整改详情
  219. async securityAppCheckDangerGetCheckProDetail() {
  220. let obj = {
  221. planId: this.optionData.checkPlanSetVoList.planId,
  222. planSetId: this.optionData.checkPlanSetVoList.planSetId,
  223. checkCategory: this.optionData.checkCategory,
  224. hazardCheckPro: this.optionData.hazardCheckPro,
  225. subId: this.optionData.subId,
  226. }
  227. const {
  228. data
  229. } = await securityAppCheckDangerGetCheckProDetail(obj);
  230. if (data.code == 200) {
  231. uni.setNavigationBarTitle({
  232. title: data.data.subName + '(' + data.data.roomNum + ')'
  233. })
  234. data.data.checkCollapse=false;
  235. data.data.inspectDot=false;
  236. data.data.checkTime= parseTime(data.data.checkTime, "{y}-{m}-{d}");
  237. data.data.checkRectifyVoList.forEach(function(item,index){
  238. item.rectifyTime= parseTime(item.rectifyTime, "{y}-{m}-{d}");
  239. item.reviewTime= parseTime(item.reviewTime, "{y}-{m}-{d}");
  240. item.rectifyCollapse=false;
  241. item.reviewCollapse=false;
  242. if(index==data.data.checkRectifyVoList.length-1){
  243. item.rectifyCollapse=true;
  244. item.reviewCollapse=true;
  245. }
  246. })
  247. this.$set(this, 'newData', data.data);
  248. }
  249. },
  250. async securityAppCheckSetOptionList(item, checkStatus) {
  251. let self = this;
  252. let upData = item;
  253. let obj = {
  254. page: 1,
  255. pageSize: 20,
  256. checkStatus: checkStatus,
  257. manageId: upData.manageId,
  258. }
  259. this.inspectRemporaryList = [];
  260. const {
  261. data
  262. } = await securityAppCheckSetOptionList(obj);
  263. if (data.code == 200 && checkStatus == 0) { //先查询待检查数据
  264. if (data.data.records[0]) {
  265. let infoData = self.optionData;
  266. uni.redirectTo({
  267. url: '/pages_safetyCheck/views/itemsManage/hiddenDangerItems?infoData=' +
  268. encodeURIComponent(JSON
  269. .stringify(infoData))
  270. });
  271. } else {
  272. uni.showToast({
  273. title: '该实验室暂无检查工作!',
  274. icon: "none",
  275. mask: true,
  276. duration: 2000
  277. });
  278. }
  279. }
  280. },
  281. //语音备忘播放
  282. async voicePlay(item) {
  283. myaudio.src = config.base_url + item;
  284. myaudio.play();
  285. },
  286. //获取检查项在当前实验室出现的次数
  287. async securityAppCheckPhotoGetCheckNumBySub() {
  288. let obj = {
  289. subId: this.subId,
  290. hazardCheckPro: this.hazardCheckPro,
  291. }
  292. const {
  293. data
  294. } = await securityAppCheckPhotoGetCheckNumBySub(obj);
  295. if (data.code == 200) {
  296. this.$set(this, 'hazardCheckNum', data.data);
  297. }
  298. },
  299. hiddenDangerClick(row) {
  300. if(!this.hiddenDangerRecordStatus){
  301. let infoData = this.optionData;
  302. infoData.subName=this.newData.subName;
  303. infoData.roomNum=this.newData.roomNum;
  304. infoData.hiddenDangerRecordStatus = true;//判断是否跳转隐患列表
  305. uni.redirectTo({
  306. url: '/pages_safetyCheck/views/inspectManage/hiddenDangerRecord?infoData=' +
  307. encodeURIComponent(JSON.stringify(infoData))
  308. });
  309. }
  310. },
  311. //检查-按钮
  312. submitBtn(status) {
  313. if (status == 1) {
  314. //编辑
  315. if(this.pageType==0){
  316. //检查
  317. let infoData = this.optionData;
  318. infoData.editStatus = true;
  319. uni.redirectTo({
  320. url: '/pages_safetyCheck/views/inspectManage/conductInspections?infoData=' + encodeURIComponent(
  321. JSON
  322. .stringify(infoData))
  323. });
  324. }else if(this.pageType==1){
  325. //复核
  326. let infoData=this.optionData
  327. infoData.editStatus=true;
  328. uni.redirectTo({
  329. url: '/pages_safetyCheck/views/itemsManage/hiddenDangerRectification?infoData=' + encodeURIComponent(
  330. JSON
  331. .stringify(infoData))
  332. });
  333. }else if(this.pageType==2){
  334. //整改
  335. let infoData=this.optionData
  336. infoData.editStatus=true;
  337. uni.redirectTo({
  338. url: '/pages_safetyCheck/views/itemsManage/hiddenDangerRectification?infoData=' + encodeURIComponent(
  339. JSON
  340. .stringify(infoData))
  341. });
  342. }
  343. } else if (status == 2) {
  344. //继续检查
  345. if(this.pageType==0){
  346. this.securityAppCheckSetOptionList(this.optionData,0)
  347. }else{
  348. let infoData = this.optionData;
  349. uni.redirectTo({
  350. url: '/pages_safetyCheck/views/itemsManage/hiddenDangerItems?infoData=' +
  351. encodeURIComponent(JSON
  352. .stringify(infoData))
  353. });
  354. }
  355. }
  356. },
  357. //图片预览
  358. lockImg(list) {
  359. if (!list[0]) {
  360. return
  361. }
  362. let urlList = [];
  363. for (let i = 0; i < list.length; i++) {
  364. urlList.push(config.base_url + list[i].fileUrl)
  365. }
  366. wx.previewImage({
  367. urls: urlList, //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
  368. current: '', // 当前显示图片的http链接,默认是第一个
  369. success: function(res) {},
  370. fail: function(res) {},
  371. complete: function(res) {},
  372. })
  373. },
  374. //折叠展开
  375. inspectDot(){
  376. this.newData.inspectDot=!this.newData.inspectDot
  377. },
  378. checkCollapse(row){
  379. this.newData.checkCollapse=!this.newData.checkCollapse
  380. },
  381. rectifyCollapse(row){
  382. row.rectifyCollapse=!row.rectifyCollapse
  383. },
  384. reviewCollapse(row){
  385. row.reviewCollapse=!row.reviewCollapse
  386. },
  387. }
  388. }
  389. </script>
  390. <style lang="stylus" scoped>
  391. .snapshotDetail {
  392. height: 100%;
  393. display flex;
  394. box-sizing: border-box;
  395. padding-bottom: 160rpx;
  396. box-sizing: border-box;
  397. .tip {
  398. width: 750rpx;
  399. height: 80rpx;
  400. background: rgba(1, 131, 250, 0.2);
  401. border-radius: 0rpx 0rpx 0rpx 0rpx;
  402. font-size: 30rpx;
  403. color: #0183FA;
  404. line-height: 80rpx;
  405. text-align: center;
  406. }
  407. .tip-tow {
  408. width: 750rpx;
  409. height: 80rpx;
  410. background: rgba(255, 140, 0, 0.2);
  411. border-radius: 0rpx 0rpx 0rpx 0rpx;
  412. font-size: 30rpx;
  413. color: #FF8C00;
  414. line-height: 80rpx;
  415. text-align: center;
  416. }
  417. .list {
  418. width: 750rpx;
  419. .list-li {
  420. display: flex;
  421. justify-content: space-between;
  422. align-items: center;
  423. border-bottom: 1rpx solid #E0E0E0;
  424. background: #FFFFFF;
  425. padding: 0 30rpx;
  426. box-sizing: border-box;
  427. >view:nth-of-type(1) {
  428. font-size: 30rpx;
  429. color: #333333;
  430. line-height: 100rpx;
  431. text-align: left;
  432. }
  433. >view:nth-of-type(2) {
  434. font-size: 28rpx;
  435. color: #666666;
  436. line-height: 100rpx;
  437. text-align: left;
  438. display: flex;
  439. justify-content: space-between;
  440. align-items: center;
  441. >img {
  442. width: 24rpx;
  443. height: 12rpx;
  444. margin-left: 10rpx;
  445. }
  446. }
  447. }
  448. .file-li {
  449. display: flex;
  450. justify-content: space-between;
  451. align-items: center;
  452. padding: 0 30rpx;
  453. box-sizing: border-box;
  454. >img:nth-of-type(1) {
  455. width: 30rpx;
  456. height: 30rpx;
  457. }
  458. >view {
  459. flex: 1;
  460. font-size: 28rpx;
  461. color: #333333;
  462. line-height: 80rpx;
  463. text-align: left;
  464. margin: 0 92rpx 0 16rpx;
  465. overflow: hidden;
  466. text-overflow: ellipsis;
  467. white-space: nowrap;
  468. }
  469. >img:nth-of-type(2) {
  470. width: 30rpx;
  471. height: 30rpx;
  472. }
  473. }
  474. .hidden{
  475. width: 750rpx;
  476. background: #fff;
  477. overflow: hidden;
  478. border-bottom: 2rpx solid #E0E0E0;
  479. .hidden-content {
  480. border-radius: 20rpx 20rpx 20rpx 20rpx;
  481. width: 690rpx;
  482. min-height: 180rpx;
  483. background: #F5F5F5;
  484. margin: 40rpx 30rpx;
  485. padding: 20rpx;
  486. box-sizing: border-box;
  487. font-size: 28rpx;
  488. color: #666666;
  489. line-height: 44rpx;
  490. text-align: left;
  491. }
  492. }
  493. .photo {
  494. display: flex;
  495. justify-content: flex-start;
  496. flex-wrap: wrap;
  497. padding: 20rpx 30rpx 0;
  498. box-sizing: border-box;
  499. background: #fff;
  500. border-bottom: 2rpx solid #E0E0E0;
  501. >img {
  502. width: 150rpx;
  503. height: 150rpx;
  504. border-radius: 10rpx 10rpx 10rpx 10rpx;
  505. margin: 0 10rpx 10rpx 0;
  506. }
  507. >img:nth-of-type(4) {
  508. margin-right: 0;
  509. }
  510. }
  511. /* .list-li:last-of-type {
  512. border: none;
  513. } */
  514. .hazardCheckNum{
  515. border-bottom: 2rpx solid #E0E0E0;
  516. padding: 30rpx 40rpx 34rpx 40rpx;
  517. box-sizing: border-box;
  518. background: #fff;
  519. display: flex;
  520. justify-content: flex-end;
  521. align-items: center;
  522. .hazardCheckNum-l{
  523. width: 30rpx;
  524. height: 30rpx;
  525. margin-right: 18rpx;
  526. }
  527. .hazardCheckNum-r{
  528. font-size: 28rpx;
  529. color: #FF5900;
  530. line-height: 40rpx;
  531. text-align: left;
  532. }
  533. }
  534. }
  535. .srearch {
  536. display: flex;
  537. justify-content: space-between;
  538. align-items: center;
  539. .srearch-l {
  540. font-size: 30rpx;
  541. color: #333333;
  542. line-height: 100rpx;
  543. text-align: left;
  544. }
  545. .srearch-r {
  546. width: 30rpx;
  547. height: 30rpx;
  548. margin-right: 0rpx;
  549. }
  550. }
  551. }
  552. /* 语音备注 */
  553. .voice {
  554. width: 750rpx;
  555. min-height: 100rpx;
  556. background: #FFFFFF;
  557. border-radius: 20rpx 20rpx 20rpx 20rpx;
  558. overflow: hidden;
  559. .voice_t {
  560. height: 100rpx;
  561. display: flex;
  562. justify-content: space-between;
  563. align-items: center;
  564. padding: 0 30rpx;
  565. box-sizing: border-box;
  566. border-bottom: 2rpx solid #E0E0E0;
  567. margin-bottom: 40rpx;
  568. .voice_t_t {
  569. width: 100%;
  570. display: flex;
  571. justify-content: space-between;
  572. >text:nth-of-type(1) {
  573. font-size: 30rpx;
  574. color: #333333;
  575. line-height: 100rpx;
  576. }
  577. >text:nth-of-type(2) {
  578. font-size: 28rpx;
  579. color: #999999;
  580. line-height: 100rpx;
  581. }
  582. }
  583. .voice_t_b {
  584. width: 100%;
  585. font-size: 30rpx;
  586. font-family: PingFang SC-Medium, PingFang SC;
  587. font-weight: 400;
  588. color: #333333;
  589. line-height: 100rpx;
  590. text-align: left;
  591. }
  592. }
  593. .voice_b {
  594. display flex;
  595. justify-content flex-start;
  596. align-items center;
  597. margin-bottom: 20rpx;
  598. padding: 0 30rpx;
  599. box-sizing: border-box;
  600. .voice_b_l {
  601. width: 400rpx;
  602. height: 40rpx;
  603. background: #0183FA;
  604. border-radius: 10rpx;
  605. display flex;
  606. justify-content flex-start;
  607. align-items center;
  608. font-size: 24rpx;
  609. color: #FFFFFF;
  610. line-height: 30rpx;
  611. text-align: left;
  612. >img {
  613. width: 20rpx;
  614. height: 20rpx;
  615. margin-left: 16rpx;
  616. margin-right: 20rpx;
  617. }
  618. }
  619. .voice_b_r {
  620. width: 28rpx;
  621. height: 28rpx;
  622. margin-left: 20rpx;
  623. }
  624. }
  625. .voice-btn {
  626. width: 150rpx;
  627. height: 150rpx;
  628. position: fixed;
  629. right: 24rpx;
  630. bottom: 176rpx;
  631. >img {
  632. width: 150rpx;
  633. height: 150rpx;
  634. position: absolute;
  635. }
  636. >text {
  637. font-size: 24rpx;
  638. color: #999999;
  639. line-height: 30rpx;
  640. text-align: center;
  641. position: absolute;
  642. top: 84rpx;
  643. left: 26rpx;
  644. }
  645. }
  646. }
  647. .subBtn {
  648. display: flex;
  649. justify-content: center;
  650. position: fixed;
  651. bottom: 30rpx;
  652. width: 750rpx;
  653. padding: 0 46rpx;
  654. box-sizing: border-box;
  655. >img {
  656. width: 160rpx;
  657. height: 160rpx;
  658. }
  659. >img:nth-of-type(1) {
  660. margin-right: 184rpx;
  661. }
  662. }
  663. .sub-btn {
  664. display: flex;
  665. justify-content: center;
  666. position: fixed;
  667. left: 30rpx;
  668. bottom: 30rpx;
  669. >view:nth-of-type(1) {
  670. width: 345rpx;
  671. height: 100rpx;
  672. background: #FF8C00;
  673. border-radius: 50rpx 0rpx 0rpx 50rpx;
  674. font-size: 30rpx;
  675. color: #FFFFFF;
  676. line-height: 100rpx;
  677. text-align: center;
  678. }
  679. >view:nth-of-type(2) {
  680. width: 345rpx;
  681. height: 100rpx;
  682. background: #0183FA;
  683. border-radius: 0rpx 50rpx 50rpx 0rpx;
  684. font-size: 30rpx;
  685. color: #FFFFFF;
  686. line-height: 100rpx;
  687. text-align: center;
  688. }
  689. }
  690. .sub-btn-tow {
  691. width: 686rpx;
  692. height: 100rpx;
  693. background: #0183FA;
  694. border-radius: 50rpx 50rpx 50rpx 50rpx;
  695. position: fixed;
  696. left: 30rpx;
  697. bottom: 30rpx;
  698. font-weight: 400;
  699. font-size: 30rpx;
  700. color: #FFFFFF;
  701. line-height: 100rpx;
  702. text-align: center;
  703. }
  704. </style>