conductInspections.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898
  1. <!-- 开展检查 -->
  2. <template>
  3. <view class="inspectAdd">
  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. <!-- <img class="srearch-r" src="@/pages_safetyCheck/images/icon_wd_gd@1x.png"> -->
  9. </view>
  10. <view class="list-li" style="margin-bottom: 20rpx;border:none;">
  11. <view>
  12. {{newData.roomNum?newData.roomNum:''}}房间&{{newData.buildName?newData.buildName:'楼栋'}}&{{newData.deptName?newData.deptName:'学院单位'}}
  13. </view>
  14. </view>
  15. <view class="list-li">
  16. <view>现场照片</view>
  17. </view>
  18. <view v-if="form.photoList[0]" class="check-for-img-max-box">
  19. <view class="left-title-p"></view>
  20. <view class="right-img-box">
  21. <view class="img-box" v-for="(imgUrl,imgIndex) in form.photoList" :key="imgIndex">
  22. <img class="img-data" :src="baseUrl+imgUrl.fileUrl">
  23. <img class="position-img" src="@/pages_safetyCheck/images/icon_ssp_closure.png"
  24. @click="delImg(imgIndex)">
  25. </view>
  26. <!-- <img class="add-button" src="@/pages_safetyCheck/images/img_ssp_pz@1x.png"
  27. @click="selectImage()" v-if="form.photoList.length<6"> -->
  28. </view>
  29. </view>
  30. <view class="list-li" @click="checkItemModuleButton('open')" style="border-bottom: none;">
  31. <view> {{newData.hazardCheckCode?newData.hazardCheckCode:''}}
  32. {{newData.hazardCheckName?newData.hazardCheckName:'检查项'}}
  33. </view>
  34. <view style="color: #0183FA;">
  35. <img src="@/pages_safetyCheck/images/icon_wd_gd@1x.png">
  36. </view>
  37. </view>
  38. <view class="hazardCheckNum" @click="hiddenDangerClick()">
  39. <img class="hazardCheckNum-l" src="@/pages_safetyCheck/images/icon_aqjc_yinhuan.png">
  40. <view class="hazardCheckNum-r">{{'已连续出现'+hazardCheckNum+'次隐患'}} </view>
  41. </view>
  42. <view class="list-li" v-if="!form.checkFlag">
  43. <view>隐患描述</view>
  44. <view></view>
  45. </view>
  46. <view class="describe">
  47. <textarea v-if="!form.checkFlag && !checkItemModuleType" cursor-spacing="40" class="describe-n" type="text"
  48. v-model="form.hazardDescribe" maxlength="200" placeholder="请填写隐患描述"
  49. placeholder-style="font-size:24rpx;color:#999;"></textarea>
  50. </view>
  51. </view>
  52. <view class="voice">
  53. <view class="voice_t">
  54. <view class="voice_t_t" v-if="!form.voiceList[0]"><text>语音备注:</text><text>按住话筒录音</text></view>
  55. <view class="voice_t_b" v-if="form.voiceList[0]">语音备注:({{form.voiceList.length}})</view>
  56. </view>
  57. <view class="voice_b" v-if="form.voiceList[0]" v-for="(voiceItem,voiceIndex) in form.voiceList"
  58. :key="voiceIndex">
  59. <view class="voice_b_l" @tap="voicePlay(voiceItem.fileUrl)">
  60. <img class="add-button" src="@/pages_safetyCheck/images//icon_yybz_yy.png" />
  61. {{voiceItem.fileLength}}″
  62. </view>
  63. <img class="voice_b_r" src="@/pages_safetyCheck/images/icon_yybz_sc.png"
  64. @tap="voiceDele('',voiceIndex)" />
  65. </view>
  66. <!-- <view class="voice-btn">
  67. <img class="voice_t_r" src="@/pages_safetyCheck/images/icon_sskz_azsh.png"
  68. @longpress.stop="recordButton(item,$event)" @touchmove.stop="cancelButton"
  69. @touchend.stop="sendButton(item,$event)" />
  70. <text>按住说话</text>
  71. </view> -->
  72. </view>
  73. </scroll-view>
  74. <checkItemModule :propsData="propsData" v-if="checkItemModuleType"></checkItemModule>
  75. <!-- <view class="sub-btn">
  76. <view @click="submitForm(1)">保存草稿</view>
  77. <view @click="submitForm(2)">提交</view>
  78. </view> -->
  79. <view class="sub-btn" v-if="!checkItemModuleType">
  80. <img @longpress.stop="recordButton(item,$event)" @touchmove.stop="cancelButton"
  81. @touchend.stop="sendButton(item,$event)" src="@/pages_safetyCheck/images/icon_aqjc_luyin.png" />
  82. <img @click="selectImage()" src="@/pages_safetyCheck/images/icon_aqjc_paizhao.png" />
  83. <img @click="submitForm(2)" src="@/pages_safetyCheck/images/icon_aqjc_tijiao.png" />
  84. </view>
  85. <view v-if="!checkItemModuleType" class="inspectRecord" @click="inspectRecordClick()">检查记录</view>
  86. </view>
  87. </template>
  88. <script>
  89. const myaudio = uni.createInnerAudioContext();
  90. import {
  91. config
  92. } from '@/api/request/config.js'
  93. import {
  94. securityAppCheckPlanCheckInfo,
  95. securityAppCheckSetOptionCheckCommit,
  96. securityAppCheckPhotoGetCheckNumBySub,
  97. } from '@/pages_safetyCheck/api/index.js'
  98. import {
  99. checkItemModule
  100. } from '@/pages_safetyCheck/component/checkItemModule.vue'
  101. export default {
  102. name: "inspectAdd",
  103. components: {
  104. checkItemModule
  105. },
  106. data() {
  107. return {
  108. baseUrl: config.base_url,
  109. form: {
  110. checkFlag: false,
  111. photoList: [],
  112. voiceList: [],
  113. },
  114. newData: {},
  115. radioList: [{
  116. id: 1,
  117. name: '符合',
  118. checked: false,
  119. },
  120. {
  121. id: 0,
  122. name: '不符合',
  123. checked: true,
  124. },
  125. ],
  126. pageType: '',
  127. sendLock: true, //发送锁,当为true时上锁,false时解锁发送
  128. recorderManager: wx.getRecorderManager(),
  129. optionData: null,
  130. //检查项组件数据
  131. checkItemModuleType: false,
  132. propsData: {},
  133. hazardCheckNum:0,
  134. }
  135. },
  136. onLoad(option) {
  137. let optionData = JSON.parse(decodeURIComponent(option.infoData));
  138. console.log('开展检查',optionData)
  139. uni.setNavigationBarTitle({
  140. title: optionData.subName + '(' + (optionData.pageType == 0 ? (optionData.roomNum ? optionData
  141. .roomNum : '-') : (optionData
  142. .subRoom ? optionData
  143. .subRoom : '-')) + ')'
  144. })
  145. this.$set(this, 'pageType', optionData.pageType);
  146. this.$set(this, 'optionData', optionData);
  147. },
  148. onShow() {
  149. },
  150. mounted() {
  151. if (this.pageType == 0) {
  152. this.securityAppCheckPlanCheckInfo();
  153. this.securityAppCheckPhotoGetCheckNumBySub();
  154. }
  155. },
  156. methods: {
  157. //折叠展开
  158. inspectDot() {
  159. this.newData.inspectDot = !this.newData.inspectDot
  160. },
  161. //检查记录
  162. inspectRecordClick(){
  163. let infoData = this.optionData;
  164. infoData.curTabTow=1;//已检查
  165. uni.navigateTo({
  166. url: '/pages_safetyCheck/views/itemsManage/hiddenDangerItems?infoData=' +
  167. encodeURIComponent(JSON
  168. .stringify(infoData))
  169. });
  170. },
  171. //获取提交详情
  172. async securityAppCheckPlanCheckInfo() {
  173. let obj = {
  174. setOptionId: this.optionData.setOptionId,
  175. manageId: this.optionData.manageId,
  176. }
  177. const {
  178. data
  179. } = await securityAppCheckPlanCheckInfo(obj);
  180. if (data.code == 200) {
  181. data.data.inspectDot = true;
  182. this.$set(this, 'newData', data.data);
  183. //编辑的时候
  184. this.$set(this.form, 'checkFlag', data.data.checkFlag ? data.data.checkFlag : false);
  185. if(data.data.hazardDescribe){
  186. this.$set(this.form, 'hazardDescribe', data.data.hazardDescribe);
  187. }else{
  188. let list=[];
  189. list=data.data.hazardCheckPoint.split('#');
  190. this.$set(this.form, 'hazardDescribe', list[0]);
  191. }
  192. this.$set(this.form, 'photoList', data.data.photoList ? data.data.photoList : []);
  193. this.$set(this.form, 'voiceList', data.data.voiceList ? data.data.voiceList : []);
  194. }
  195. },
  196. hiddenDangerClick(row) {
  197. if(!this.hiddenDangerRecordStatus){
  198. let infoData = this.optionData;
  199. infoData.subName=this.newData.subName;
  200. infoData.roomNum=this.newData.roomNum;
  201. infoData.hiddenDangerRecordStatus = true;//判断是否跳转隐患列表
  202. uni.navigateTo({
  203. url: '/pages_safetyCheck/views/inspectManage/hiddenDangerRecord?infoData=' +
  204. encodeURIComponent(JSON.stringify(infoData))
  205. });
  206. }
  207. },
  208. checkItemModuleButton(type, item,keyPoint) {
  209. if (type == 'open') {
  210. let obj = {
  211. infoType: this.pageType,
  212. checkType: 0,
  213. }
  214. if (this.pageType == 0) {
  215. //检查
  216. obj.manageId = this.optionData.manageId
  217. }
  218. this.$set(this, 'propsData', obj);
  219. this.$set(this, 'checkItemModuleType', true);
  220. } else if (type == 'out') {
  221. this.$set(this, 'checkItemModuleType', false);
  222. this.$set(this, 'propsData', {});
  223. } else if (type == 'submit') {
  224. //this.itemsClick(item);
  225. this.$set(this.newData, 'hazardCheckCode', item.hazardCheckCode);
  226. this.$set(this.newData, 'hazardCheckName', item.hazardCheckName);
  227. this.$set(this.newData, 'hazardCheckCode2', item.hazardCheckCode2);
  228. this.$set(this.newData, 'hazardCheckName2', item.hazardCheckName2);
  229. this.$set(this.newData, 'hazardCheckPoint', item.hazardCheckPoint);
  230. this.$set(this.form, 'hazardDescribe', keyPoint);
  231. this.$set(this.optionData, 'setOptionId', item.setOptionId);
  232. this.$set(this.optionData, 'hazardCheckPro', item.hazardCheckPro);
  233. this.$set(this, 'checkItemModuleType', false);
  234. this.securityAppCheckPhotoGetCheckNumBySub();
  235. }
  236. },
  237. //提交
  238. async submitForm(status) {
  239. if (!this.form.checkFlag) {
  240. if (!this.form.hazardDescribe) {
  241. uni.showToast({
  242. title: '请填写隐患描述!',
  243. icon: "none",
  244. mask: true,
  245. duration: 2000
  246. });
  247. return
  248. }
  249. if (!this.form.photoList[0]) {
  250. uni.showToast({
  251. title: '请选择现场照片!',
  252. icon: "none",
  253. mask: true,
  254. duration: 2000
  255. });
  256. return
  257. }
  258. }
  259. let obj = {
  260. checkFlag: this.form.checkFlag,
  261. checkStatus: 1,
  262. hazardDescribe: this.form.hazardDescribe,
  263. setOptionId: this.optionData.setOptionId,
  264. photoList: this.form.photoList,
  265. voiceList: this.form.voiceList,
  266. }
  267. const {
  268. data
  269. } = await securityAppCheckSetOptionCheckCommit(obj);
  270. if (data.code == 200) {
  271. uni.showToast({
  272. title: '提交成功!',
  273. icon: "none",
  274. mask: true,
  275. duration: 2000
  276. });
  277. let infoData = this.optionData;
  278. uni.redirectTo({
  279. url: '/pages_safetyCheck/views/itemsManage/hiddenDangerItemsDetail?infoData=' +
  280. encodeURIComponent(JSON
  281. .stringify(infoData))
  282. });
  283. }
  284. },
  285. //获取检查项在当前实验室出现的次数
  286. async securityAppCheckPhotoGetCheckNumBySub() {
  287. let obj = {
  288. subId: this.optionData.subId,
  289. hazardCheckPro: this.optionData.hazardCheckPro,
  290. }
  291. const {
  292. data
  293. } = await securityAppCheckPhotoGetCheckNumBySub(obj);
  294. if (data.code == 200) {
  295. this.$set(this, 'hazardCheckNum', data.data);
  296. }
  297. },
  298. //滚动事件
  299. scrollGet() {},
  300. //单选按钮
  301. radioClick(d) {
  302. let self = this;
  303. d.checked = !d.checked
  304. if (d.checked) {
  305. //如果有选中的,循环把其他选中的取消
  306. this.radioList.forEach(function(item) {
  307. if (item.id == d.id) {
  308. self.$set(self.form, 'checkFlag', item.id);
  309. } else {
  310. item.checked = false;
  311. }
  312. })
  313. } else {
  314. }
  315. },
  316. /******图片上传******/
  317. selectImage() {
  318. let self = this;
  319. let photoMaxNun = 0;
  320. if (this.form.photoList.length > 5) {
  321. uni.showToast({
  322. title: '最多上传6张图片',
  323. icon: "none",
  324. mask: true,
  325. duration: 2000
  326. });
  327. return
  328. }
  329. photoMaxNun = 6 - this.form.photoList.length;
  330. wx.chooseImage({
  331. count: photoMaxNun,
  332. sizeType: ["original", "compressed"],
  333. sourceType: ["album", "camera"],
  334. success: function(res) {
  335. if (res.tempFilePaths[0]) {
  336. res.tempFilePaths.forEach(function(item, index) {
  337. self.uploadImg(item);
  338. })
  339. }
  340. }
  341. });
  342. },
  343. async uploadImg(tempFilePaths) {
  344. var self = this;
  345. uni.showLoading({
  346. title: '上传中',
  347. mask: true
  348. });
  349. uni.uploadFile({
  350. url: config.base_url + '/system/file/upload', //仅为示例,非真实的接口地址
  351. header: {
  352. 'Authorization': uni.getStorageSync('token')
  353. },
  354. filePath: tempFilePaths,
  355. name: 'file',
  356. formData: {
  357. 'user': 'test'
  358. },
  359. success: (uploadFileRes) => {
  360. let res = JSON.parse(uploadFileRes.data);
  361. if (res.code == 200) {
  362. this.form.photoList.push({
  363. 'fileUrl': res.data.url,
  364. 'fileName': res.data.name
  365. });
  366. } else {
  367. uni.showToast({
  368. title: res.msg,
  369. icon: "none",
  370. mask: true,
  371. duration: 2000
  372. });
  373. }
  374. },
  375. fail: err => {},
  376. complete: () => {
  377. uni.hideLoading()
  378. }
  379. });
  380. },
  381. //删除图片
  382. delImg(minIndex) {
  383. this.form.photoList.splice(minIndex, 1);
  384. this.$forceUpdate();
  385. },
  386. /******语音备注 *******/
  387. //语音备忘播放
  388. async voicePlay(item) {
  389. myaudio.src = config.base_url + item;
  390. myaudio.play();
  391. },
  392. //语音备忘删除
  393. async voiceDele(item, voiceIndex) {
  394. let self = this;
  395. uni.showModal({
  396. title: '',
  397. cancelColor: '#999999',
  398. confirmColor: '#FF6E6E',
  399. content: '确定删除此语音吗?',
  400. success(res) {
  401. if (res.confirm) {
  402. console.log('用户点击确定')
  403. self.form.voiceList.splice(voiceIndex, 1);
  404. self.$forceUpdate();
  405. } else if (res.cancel) {
  406. console.log('用户点击取消')
  407. }
  408. }
  409. })
  410. },
  411. //录制
  412. recordButton(item, e) {
  413. console.log("按下")
  414. let self = this;
  415. if (this.form.voiceList.length >= 5) {
  416. uni.showToast({
  417. title: '语音备忘最多只能上传5条',
  418. icon: "none",
  419. mask: true,
  420. duration: 2000
  421. });
  422. return
  423. }
  424. this.liveType = true;
  425. console.log('录制', e)
  426. this.startPoint = e.touches[0]; //记录长按时开始点信息,后面用于计算上划取消时手指滑动的距离。
  427. const options = {
  428. duration: 60000,
  429. sampleRate: 16000,
  430. numberOfChannels: 1,
  431. encodeBitRate: 48000,
  432. format: 'mp3',
  433. frameSize: 50
  434. }
  435. this.recorderManager.start(options); //开始录音
  436. this.recorderManager.onStart(() => {
  437. console.log('recorder start')
  438. })
  439. this.recorderManager.onError((res) => {
  440. console.log(res);
  441. })
  442. wx.showToast({
  443. title: "正在录音,上划取消发送",
  444. icon: "none",
  445. duration: 60000 //先定义个60秒,后面可以手动调用wx.hideToast()隐藏
  446. });
  447. this.sendLock = false; //长按时是不上锁的。
  448. },
  449. //取消
  450. cancelButton(e) {
  451. console.log("移动")
  452. let self = this;
  453. this.liveType = false;
  454. console.log('取消', e)
  455. let moveLenght = e.touches[e.touches.length - 1].clientY - this.startPoint.clientY; //移动距离
  456. if (Math.abs(moveLenght) > 50) {
  457. wx.showToast({
  458. title: "松开手指,取消发送",
  459. icon: "none",
  460. duration: 60000
  461. });
  462. this.sendLock = true; //触发了上滑取消发送,上锁
  463. } else {
  464. wx.showToast({
  465. title: "正在录音,上划取消发送",
  466. icon: "none",
  467. duration: 60000
  468. });
  469. this.sendLock = false; //上划距离不足,依然可以发送,不上锁
  470. }
  471. },
  472. //发送
  473. sendButton(item, e) {
  474. console.log("松开")
  475. let self = this;
  476. this.liveType = false;
  477. console.log('发送', e)
  478. wx.hideToast(); //结束录音、隐藏Toast提示框
  479. this.recorderManager.stop(); //结束录音
  480. this.recorderManager.onStop((res) => {
  481. if (!this.sendLock) {
  482. this.uploadVoice(item, res.duration, res.tempFilePath);
  483. }
  484. console.log('停止录音', res.tempFilePath)
  485. console.log("sendLock", this.sendLock);
  486. })
  487. },
  488. //上传MP3
  489. async uploadVoice(item, times, tempFilePaths) {
  490. var self = this;
  491. uni.uploadFile({
  492. url: config.base_url + '/system/file/upload', //仅为示例,非真实的接口地址
  493. header: {
  494. 'Authorization': uni.getStorageSync('token')
  495. },
  496. filePath: tempFilePaths,
  497. name: 'file',
  498. formData: {
  499. 'user': 'test'
  500. },
  501. success: (uploadFileRes) => {
  502. let res = JSON.parse(uploadFileRes.data);
  503. if (res.code == 200) {
  504. console.log("上传成功", res)
  505. console.log(item)
  506. let seconds = Math.round((parseInt(times) % (1000 * 60)) / 1000);
  507. this.form.voiceList.push({
  508. 'fileLength': seconds,
  509. 'fileUrl': res.data.url,
  510. 'fileName': res.data.name
  511. })
  512. console.log(JSON.stringify(self.voice))
  513. //self.textParseUrlIps(res.data.url);
  514. // self.newData.imgList.push(res.data.url);
  515. } else {
  516. uni.showToast({
  517. title: res.msg,
  518. icon: "none",
  519. mask: true,
  520. duration: 2000
  521. });
  522. }
  523. },
  524. fail: err => {
  525. uni.hideLoading()
  526. },
  527. complete: () => {}
  528. });
  529. },
  530. }
  531. }
  532. </script>
  533. <style lang="stylus" scoped>
  534. .inspectAdd {
  535. height: 100%;
  536. display flex;
  537. box-sizing: border-box;
  538. padding-bottom: 230rpx;
  539. box-sizing: border-box;
  540. .tip {
  541. width: 750rpx;
  542. height: 80rpx;
  543. background: rgba(1, 131, 250, 0.2);
  544. font-weight: normal;
  545. font-size: 28rpx;
  546. color: #0183FA;
  547. line-height: 80rpx;
  548. text-align: center;
  549. }
  550. .list {
  551. width: 750rpx;
  552. margin: 20rpx 0rpx 0;
  553. border-radius: 20rpx 20rpx 20rpx 20rpx;
  554. overflow: hidden;
  555. .list-li {
  556. display: flex;
  557. justify-content: space-between;
  558. align-items: center;
  559. padding: 0 30rpx;
  560. box-sizing: border-box;
  561. border-bottom: 1rpx solid #E0E0E0;
  562. background: #fff;
  563. >view:nth-of-type(1) {
  564. font-size: 30rpx;
  565. color: #333333;
  566. line-height: 100rpx;
  567. text-align: left;
  568. overflow: hidden;
  569. text-overflow: ellipsis;
  570. white-space: nowrap;
  571. }
  572. >view:nth-of-type(2) {
  573. font-size: 28rpx;
  574. color: #666666;
  575. line-height: 100rpx;
  576. text-align: left;
  577. display: flex;
  578. justify-content: space-between;
  579. align-items: center;
  580. >img {
  581. width: 30rpx;
  582. height: 30rpx;
  583. margin-left: 10rpx;
  584. }
  585. }
  586. }
  587. .hidden-content {
  588. width: 630rpx;
  589. min-height: 200rpx;
  590. background: #F5F5F5;
  591. border-radius: 20rpx 20rpx 20rpx 20rpx;
  592. margin: 20rpx 30rpx 0;
  593. padding: 20rpx;
  594. box-sizing: border-box;
  595. font-size: 28rpx;
  596. color: #666666;
  597. line-height: 39rpx;
  598. text-align: left;
  599. }
  600. .photo {
  601. display: flex;
  602. justify-content: flex-start;
  603. flex-wrap: wrap;
  604. margin-top: 20rpx;
  605. padding: 0 30rpx;
  606. box-sizing: border-box;
  607. >img {
  608. width: 150rpx;
  609. height: 150rpx;
  610. border-radius: 10rpx 10rpx 10rpx 10rpx;
  611. margin: 0 10rpx 10rpx 0;
  612. }
  613. >img:nth-of-type(4) {
  614. margin-right: 0;
  615. }
  616. }
  617. .describe {
  618. width: 750rpx;
  619. background: #fff;
  620. overflow: hidden;
  621. .describe-n {
  622. width: 690rpx;
  623. min-height: 180rpx;
  624. border-radius: 10rpx 10rpx 10rpx 10rpx;
  625. border: 1rpx solid #E0E0E0;
  626. margin: 40rpx;
  627. padding: 22rpx;
  628. box-sizing: border-box;
  629. background: #F5F5F5;
  630. }
  631. }
  632. .check-for-img-max-box {
  633. padding: 20px 28rpx;
  634. box-sizing: border-box;
  635. background: #fff;
  636. border-bottom: 2rpx solid #E0E0E0;
  637. .left-title-p {
  638. width: 100%;
  639. text-align: left;
  640. font-size: 30rpx;
  641. font-family: PingFang SC-Medium, PingFang SC;
  642. font-weight: 400;
  643. color: #333333;
  644. line-height: 80rpx;
  645. }
  646. .right-img-box {
  647. .img-box {
  648. display inline-block;
  649. height: 150rpx;
  650. width: 150rpx;
  651. position relative;
  652. margin: 0 10rpx 20rpx 0;
  653. border-radius 10rpx;
  654. overflow hidden;
  655. .img-data {
  656. height: 150rpx;
  657. width: 150rpx;
  658. }
  659. .position-img {
  660. position absolute;
  661. right: 0;
  662. top: 0;
  663. width: 36rpx;
  664. height: 36rpx;
  665. }
  666. }
  667. .img-box:nth-of-type(4n+4) {
  668. margin-right: 0rpx;
  669. }
  670. .add-button {
  671. margin: 0 0rpx 20rpx 0;
  672. border-radius 10rpx;
  673. overflow hidden;
  674. display inline-block;
  675. height: 150rpx;
  676. width: 150rpx;
  677. }
  678. }
  679. }
  680. .list-li:last-of-type {
  681. border: none;
  682. }
  683. .hazardCheckNum{
  684. border-bottom: 2rpx solid #E0E0E0;
  685. padding: 30rpx 40rpx 34rpx 40rpx;
  686. box-sizing: border-box;
  687. background: #fff;
  688. display: flex;
  689. justify-content: flex-end;
  690. align-items: center;
  691. .hazardCheckNum-l{
  692. width: 30rpx;
  693. height: 30rpx;
  694. margin-right: 18rpx;
  695. }
  696. .hazardCheckNum-r{
  697. font-size: 28rpx;
  698. color: #FF5900;
  699. line-height: 40rpx;
  700. text-align: left;
  701. }
  702. }
  703. }
  704. .srearch {
  705. display: flex;
  706. justify-content: space-between;
  707. align-items: center;
  708. .srearch-l {
  709. font-size: 30rpx;
  710. color: #333333;
  711. line-height: 100rpx;
  712. text-align: left;
  713. }
  714. .srearch-r {
  715. width: 30rpx;
  716. height: 30rpx;
  717. margin-right: 0rpx;
  718. }
  719. }
  720. /* 语音备注 */
  721. .voice {
  722. width: 750rpx;
  723. min-height: 100rpx;
  724. background: #FFFFFF;
  725. border-radius: 20rpx 20rpx 20rpx 20rpx;
  726. overflow: hidden;
  727. .voice_t {
  728. height: 100rpx;
  729. display: flex;
  730. justify-content: space-between;
  731. align-items: center;
  732. padding: 0 30rpx;
  733. box-sizing: border-box;
  734. border-top: 2rpx solid #E0E0E0;
  735. .voice_t_t {
  736. width: 100%;
  737. display: flex;
  738. justify-content: space-between;
  739. >text:nth-of-type(1) {
  740. font-size: 30rpx;
  741. color: #333333;
  742. line-height: 100rpx;
  743. }
  744. >text:nth-of-type(2) {
  745. font-size: 28rpx;
  746. color: #999999;
  747. line-height: 100rpx;
  748. }
  749. }
  750. .voice_t_b {
  751. width: 100%;
  752. font-size: 30rpx;
  753. font-family: PingFang SC-Medium, PingFang SC;
  754. font-weight: 400;
  755. color: #333333;
  756. line-height: 100rpx;
  757. text-align: left;
  758. }
  759. }
  760. .voice_b {
  761. display flex;
  762. justify-content flex-start;
  763. align-items center;
  764. margin-bottom: 20rpx;
  765. padding: 0 30rpx;
  766. box-sizing: border-box;
  767. .voice_b_l {
  768. width: 400rpx;
  769. height: 40rpx;
  770. background: #0183FA;
  771. border-radius: 10rpx;
  772. display flex;
  773. justify-content flex-start;
  774. align-items center;
  775. font-size: 24rpx;
  776. color: #FFFFFF;
  777. line-height: 30rpx;
  778. text-align: left;
  779. >img {
  780. width: 20rpx;
  781. height: 20rpx;
  782. margin-left: 16rpx;
  783. margin-right: 20rpx;
  784. }
  785. }
  786. .voice_b_r {
  787. width: 28rpx;
  788. height: 28rpx;
  789. margin-left: 20rpx;
  790. }
  791. }
  792. .voice-btn {
  793. width: 150rpx;
  794. height: 150rpx;
  795. position: fixed;
  796. right: 24rpx;
  797. bottom: 176rpx;
  798. >img {
  799. width: 150rpx;
  800. height: 150rpx;
  801. position: absolute;
  802. }
  803. >text {
  804. font-size: 24rpx;
  805. color: #999999;
  806. line-height: 30rpx;
  807. text-align: center;
  808. position: absolute;
  809. top: 84rpx;
  810. left: 26rpx;
  811. }
  812. }
  813. }
  814. }
  815. .sub-btn {
  816. display: flex;
  817. justify-content: space-between;
  818. position: fixed;
  819. bottom: 30rpx;
  820. width: 750rpx;
  821. padding: 0 46rpx;
  822. box-sizing: border-box;
  823. >img {
  824. width: 160rpx;
  825. height: 160rpx;
  826. }
  827. }
  828. .inspectRecord{
  829. position: fixed;
  830. top: 118rpx;
  831. right: 0;
  832. z-index: 200;
  833. width: 160rpx;
  834. height: 60rpx;
  835. background: #0183FA;
  836. border-radius: 50rpx 0rpx 0rpx 50rpx;
  837. font-size: 30rpx;
  838. color: #FFFFFF;
  839. line-height: 60rpx;
  840. text-align: center;
  841. }
  842. </style>