conductInspections.vue 26 KB

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