check_inspection.vue 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321
  1. <template>
  2. <view class="uni-container uni-container-bg">
  3. <view class="example container" :style="'height: ' + (screenHeight - 75) + 'px'">
  4. <!-- 下拉框 -->
  5. <view class="u-page__tag-item" style="margin-bottom: 26upx;width: 700upx;border-bottom: 2px solid #55cbbf;">
  6. <u-form>
  7. <u-form-item prop="orgName" @click="
  8. showOrg = true;
  9. hideKeyboard();
  10. " label="单位选择:" labelWidth="120px">
  11. <u--input border="none" disabled v-model="formData.orgName" placeholder="请选择所属单位"></u--input>
  12. <u-icon slot="right" name="arrow-down" class="danwei"></u-icon>
  13. </u-form-item>
  14. </u-form>
  15. </view>
  16. <view class="tops" v-if="!getqrcode">
  17. <view style="display: flex;flex-direction: column;">
  18. <image :src="scan" class="tupian" @click="erWeiMa"></image>
  19. <view style="margin-top: 20rpx;">设施扫码</view>
  20. </view>
  21. <!-- #ifdef H5 -->
  22. <u-popup :show="qrScanShow" mode="center" @close="qrScanClose" @open="qrScanOpen" closeable
  23. :safeAreaInsetTop="true" zoom>
  24. <view class="qr-scan-containner">
  25. <view class="qr-scan-middle">
  26. <view class="qr-scan-title">
  27. 扫码
  28. </view>
  29. <qrcode-stream class="qr-scan-view" @decode="onDecode" />
  30. </view>
  31. </view>
  32. </u-popup>
  33. <!-- <view class="qrcode" v-if="qrcodeShow">
  34. <qrcode-stream @decode="onDecode" />
  35. </view> -->
  36. <!-- #endif -->
  37. <view>
  38. <image :src="Group" @click="
  39. showMCheck = true;
  40. hideKeyboard();
  41. " class="tiantupian"></image>
  42. <view style="margin-top: 20rpx;">手动添加</view>
  43. </view>
  44. </view>
  45. <view class="cont" v-if="!getqrcode">
  46. 主动检查记录
  47. </view>
  48. <view v-if="!getqrcode" class="main-content">
  49. <uni-card v-for="(item, index) in tableData" :key="index">
  50. <view class="titles"><text class="name-align-task">检查项:</text>{{item.inspName}}
  51. <u-icon v-if="item.isdenger==1" name="warning-fill" color="#ff5647" size="28"
  52. :customStyle="{marginTop:'20px',backgroundColor:'#fff'}"></u-icon>
  53. </view>
  54. <view><text class="name-align-task">检查结果:</text>{{item.handleResult}}</view>
  55. <view class="an-niu">
  56. <text><text class="name-align-task">检查时间:</text>{{item.inspectTime}}</text>
  57. <text @click="addClickDetail(item.id)" class="detail">查看详情</text>
  58. </view>
  59. </uni-card>
  60. </view>
  61. </view>
  62. <!-- 扫码弹出层 -->
  63. <u-popup :show="maShow" :round="10" @close="maShow=false">
  64. <view v-if="insTypeData!=''">
  65. <view class="springFarm" v-for="(item,index) in insTypeData" :key="index">
  66. <view class="show-title">设备名称:{{item.fpdName}}</view>
  67. <view class="show-title">设备序列号:{{item.fpdCode}}</view>
  68. <view>
  69. <view class="show-title">设备检查项:</view>
  70. </view>
  71. <view style="display: flex;flex-direction: column;">
  72. <view class="" v-if="item.inspectResultList!=''">
  73. <uni-grid :column="3" :showBorder="false">
  74. <uni-grid-item v-for="(items,indexs) in item.inspectResultList" :key="indexs">
  75. <view class="grid-item-box">
  76. <image :src="items.subValue==1?zhengchang:moren" class="tupians"
  77. @click="normalPopup(items,indexs,index)">
  78. </image>
  79. <text class="text">{{items.subLable}}</text>
  80. </view>
  81. </uni-grid-item>
  82. </uni-grid>
  83. </view>
  84. <!-- <view class="slot-contents" v-if="show2">
  85. <textarea v-model="dangerDescribe" placeholder="请输入隐患描述内容"></textarea>
  86. </view> -->
  87. </view>
  88. <!-- ----扫码选择隐患 -->
  89. <view class="slot-contents" v-if="show2">
  90. <textarea v-model="dangerDescribe" placeholder="请输入隐患描述内容"
  91. @click="popupChoiceDangerFpd('show2')"></textarea>
  92. <u-popup :show="showPopupDanger" :round="10" @close="showPopupDanger=false">
  93. <view style="width: 90vw;overflow-y: auto;margin-bottom: 80rpx;padding:10px">
  94. <text class="text-xl">选择隐患类型:</text>
  95. <view class="" class="person-forward">
  96. <u-checkbox-group v-for="(items, indexs) in choiceDanger" :key="indexs"
  97. placement="column" v-model="items.checkedListDanger"
  98. @change="checkboxChange3(items.name,$event)" activeColor="#4CB2B6"
  99. iconSize="red">
  100. <u-checkbox :customStyle="{marginBottom: '60rpx'}" :label="items.name"
  101. :name="items.name">
  102. </u-checkbox>
  103. </u-checkbox-group>
  104. </view>
  105. <view class="flex flex-direction-row "
  106. style="position: fixed;bottom: 10px;left: 50%;transform: translate(-50%);height: 100rpx;width: 80%">
  107. <u-button shape="circle" type="primary" color="#4CB2B6" text="确定"
  108. @click="checkboxConfirm3()" customStyle="margin-right:20px;padding:0 30px">
  109. </u-button>
  110. <u-button type="primary" plain color="#4CB2B6" text="取消" shape="circle"
  111. @click="checkboxCancel3()" customStyle="padding:0 30px">
  112. </u-button>
  113. </view>
  114. </view>
  115. </u-popup>
  116. </view>
  117. <!-- ----扫码选择隐患 -->
  118. <view class="show-title">
  119. <view class="">巡检拍照:<text style="color:#822e2e;"></text></view>
  120. <view class="">
  121. <image :src="photograph" @click="photoUpload(item)" class="tiantupian"></image>
  122. </view>
  123. <uni-load-more v-show="loading" status="loading" :content-text="contentText" />
  124. </view>
  125. <view class="uni-grid-wraps">
  126. <view style="position: relative;width: 180rpx;float: left;margin: 10rpx 15rpx 0 0rpx;"
  127. v-for="(items,indexs) in item.attUrl" :key="indexs">
  128. <image :src="items" style="width: 160rpx;height: 160rpx;border-radius: 30rpx;float: left;">
  129. <u-icon name="close" color="#4CB2B6" size="19" @click="closeImage(item,indexs,index)">
  130. </u-icon>
  131. </view>
  132. </view>
  133. <view style="width: 60%;position: absolute;left:150rpx;;bottom:60rpx;z-index: 9999;">
  134. <div class="btnList" v-if="show2">
  135. <u-button shape="circle" type="primary" color="#4CB2B6" text="立即处理"
  136. customStyle="margin-right:20%" @click="checkPopupConfirmNow">
  137. </u-button>
  138. <u-button v-if="show2" shape="circle" type="primary" color="#4CB2B6" text="生成隐患"
  139. @click="checkPopupYinHuan">
  140. </u-button>
  141. </div>
  142. <div class="btnList" v-if="!show2">
  143. <u-button shape="circle" type="primary" color="#4CB2B6" text="保存"
  144. customStyle="margin-right:20%" @click="checkPopupConfirm()">
  145. </u-button>
  146. <u-button shape="circle" type="primary" color="#4CB2B6" text="取消" @click="checkPopupCancel">
  147. </u-button>
  148. </div>
  149. </view>
  150. </view>
  151. </view>
  152. <view v-else>
  153. 暂无数据
  154. </view>
  155. </u-popup>
  156. <!-- 手动添加弹出层-->
  157. <u-popup :show="manualPopup" :round="10" @close="manualPopup=false">
  158. <view v-if="checkManualData!=[]">
  159. <view class="springFarm" v-for="(item,index) in checkManualData" :key="index">
  160. <view class="show-title">检查项名称:{{item.inspName}}</view>
  161. <view>
  162. <view class="show-title">设备检查项:</view>
  163. </view>
  164. <view style="display: flex;flex-direction: column;">
  165. <view class="" v-if="item.inspectSubDOList!=''">
  166. <uni-grid :column="3" :showBorder="false">
  167. <uni-grid-item v-for="(items,indexs) in item.inspectSubDOList" :key="indexs">
  168. <view class="grid-item-box">
  169. <image :src="items.isdenger==1?zhengchang:moren" class="tupians"
  170. @click="checkPopupManual(items,indexs,index)">
  171. </image>
  172. <text class="text">{{items.subLable}}</text>
  173. </view>
  174. </uni-grid-item>
  175. </uni-grid>
  176. </view>
  177. <!-- <view class="slot-contents" v-if="showManual">
  178. <textarea v-model="dangerDescribe" placeholder="请输入隐患描述内容"></textarea>
  179. </view> -->
  180. <!-- <view class="slot-contents" @click="descript(index)">
  181. <textarea class="slot-contents" v-model="remark" placeholder="请输入描述内容"></textarea>
  182. </view> -->
  183. </view>
  184. <!-- ----扫码选择隐患 -->
  185. <view class="slot-contents" v-if="showManual">
  186. <textarea v-model="dangerDescribe" placeholder="请输入隐患描述内容"
  187. @click="popupChoiceDangerFpd('Manual')"></textarea>
  188. <u-popup :show="showPopupDanger" :round="10" @close="showPopupDanger=false">
  189. <view style="width: 90vw;overflow-y: auto;margin-bottom: 80rpx;padding:10px">
  190. <text class="text-xl">选择隐患类型:</text>
  191. <view class="" class="person-forward">
  192. <u-checkbox-group v-for="(items, indexs) in choiceDanger" :key="indexs"
  193. placement="column" v-model="items.checkedListDanger"
  194. @change="checkboxChange3(items.name,$event)" activeColor="#4CB2B6"
  195. iconSize="red">
  196. <u-checkbox :customStyle="{marginBottom: '60rpx'}" :label="items.name"
  197. :name="items.name">
  198. </u-checkbox>
  199. </u-checkbox-group>
  200. </view>
  201. <view class="flex flex-direction-row "
  202. style="position: fixed;bottom: 10px;left: 50%;transform: translate(-50%);height: 100rpx;width: 80%">
  203. <u-button shape="circle" type="primary" color="#4CB2B6" text="确定"
  204. @click="checkboxConfirm3()" customStyle="margin-right:20px;padding:0 30px">
  205. </u-button>
  206. <u-button type="primary" plain color="#4CB2B6" text="取消" shape="circle"
  207. @click="checkboxCancel3()" customStyle="padding:0 30px">
  208. </u-button>
  209. </view>
  210. </view>
  211. </u-popup>
  212. </view>
  213. <!-- ----扫码选择隐患 -->
  214. <view class="show-title">
  215. <view class="">巡检拍照:<text style="color:#822e2e;"></text></view>
  216. <view class="">
  217. <image :src="photograph" @click="photoUpload(item)" class="tiantupian"></image> <!-- 加载中 -->
  218. </view>
  219. <uni-load-more v-show="loading" status="loading" :content-text="contentText" />
  220. </view>
  221. <view class="uni-grid-wraps">
  222. <view style="position: relative;width: 180rpx;float: left;margin: 10rpx 15rpx 0 0rpx;"
  223. v-for="(items,indexs) in item.attUrl" :key="indexs">
  224. <image :src="items" style="width: 160rpx;height: 160rpx;border-radius: 30rpx;float: left;">
  225. <u-icon name="close" color="#4CB2B6" size="19" @click="closeImage(item,indexs,index)">
  226. </u-icon>
  227. </view>
  228. </view>
  229. <view style="width: 60%;position: fixed;left:150rpx;;bottom:60rpx;z-index: 9999;">
  230. <div class="btnList" v-if="showManual">
  231. <u-button shape="circle" type="primary" color="#4CB2B6" text="立即处理"
  232. customStyle="margin-right:20%" @click="checkPopupConfirmNow">
  233. </u-button>
  234. <u-button v-if="showManual" shape="circle" type="primary" color="#4CB2B6" text="生成隐患"
  235. @click="checkPopupYinHuan">
  236. </u-button>
  237. </div>
  238. <div class="btnList" v-if="!showManual">
  239. <u-button shape="circle" type="primary" color="#4CB2B6" text="保存"
  240. customStyle="margin-right:20%" @click="checkPopupConfirm()">
  241. </u-button>
  242. <u-button shape="circle" type="primary" color="#4CB2B6" text="取消" @click="checkPopupCancel">
  243. </u-button>
  244. </div>
  245. </view>
  246. </view>
  247. </view>
  248. <view v-else>
  249. 暂无数据
  250. </view>
  251. </u-popup>
  252. <u-modal :show="show5" title="请输入处理结果" @confirm="descriptFpd" @cancel="show5 = false">
  253. <view class="slot-content jieguo">
  254. <textarea v-model="handleResult" placeholder="请输入" />
  255. </view>
  256. </u-modal>
  257. <u-action-sheet :show="showOrg" :actions="actions" title="请选择单位" @close="showOrg = false" @select="sexSelect">
  258. </u-action-sheet>
  259. <u-action-sheet :show="showMCheck" :actions="actionsManual" title="请选择检查项" @close="showMCheck = false">
  260. <view style="margin-bottom: 20rpx;">
  261. <view class="manual-hand">
  262. 手动输入设施编码:
  263. </view>
  264. <view class="manual-hand-item">
  265. <u--input placeholder="请输入设施编号" v-model="manualValue" class="manual-hand-input"></u--input>
  266. <u-button shape="circle" type="primary" color="#4CB2B6" text="确认"
  267. customStyle="width:120rpx;margin-left:2%" @click="manualHandConfirm()">
  268. </u-button>
  269. </view>
  270. </view>
  271. <hr>
  272. <view class="manual-hand">
  273. 选择检查项大类:
  274. </view>
  275. <view v-for="(item,index) in actionsManual" :key="index" @click="SelectMCheck(item)" class="manual">
  276. {{item.name}}
  277. </view>
  278. </u-action-sheet>
  279. </view>
  280. </template>
  281. <script>
  282. // #ifdef H5
  283. import {
  284. QrcodeStream
  285. } from 'vue-qrcode-reader'
  286. // #endif
  287. import {
  288. getInspect, //获取主动检查列表
  289. inspTypeList,
  290. createInspect, //创建主动检查
  291. getInspectInfo, //手动添加的检查项列表
  292. getFpd //根据编码获取设施信息
  293. } from "@/api/check_active";
  294. import loadImage from 'blueimp-load-image';
  295. import {
  296. getAccessToken
  297. } from '@/utils/auth'
  298. import config from '@/config'
  299. import store from "@/store"
  300. const baseUrl = config.baseUrl
  301. const baseUrlImg = config.baseUrlImg
  302. import {
  303. getOrgId //获取orgId
  304. } from '@/api/fire_device';
  305. import {
  306. shijianc
  307. } from '@/utils/common.js'
  308. //隐患弹框--
  309. import {
  310. DICT_TYPE,
  311. getDictDatas
  312. } from '@/utils/dict';
  313. //隐患弹框--
  314. let that = '';
  315. export default {
  316. components: {
  317. // #ifdef H5
  318. QrcodeStream
  319. // #endif
  320. },
  321. data() {
  322. return {
  323. contentText: {
  324. contentrefresh: '上传照片中',
  325. },
  326. screenHeight: this.$screenHeight,
  327. // ----扫码选择隐患
  328. showPopupDanger: false,
  329. dangerDict: getDictDatas(DICT_TYPE.DANGER_RESULT),
  330. choiceDanger: getDictDatas(DICT_TYPE.DANGER_TYPE),
  331. checkedPopupDanger: [], //
  332. // ----扫码选择隐患
  333. manualValue: '', //手动输入的设施编号
  334. manualPopup: false,
  335. scan: `${baseUrlImg}/checkActive/scan.png`,
  336. // 是否开启扫描
  337. qrScanShow: false,
  338. Group: `${baseUrlImg}/checkActive/Group2.png`,
  339. erWeiMaShu: '', //二维码内容对象
  340. tableData: [],
  341. loading: false,
  342. dengerType: 0,
  343. saveImplement: {
  344. dengerType: 0,
  345. attUrl: [],
  346. dangerDescribe: "", //隐患描述
  347. fpdId: "",
  348. fpdResultCreateReqVOList: [], //传的当前事件
  349. hisResultCreateReqVOList: [], //手动检查
  350. handleMethod: "", //处理方式
  351. handleResult: "", //处理结果描述
  352. handleTime: '',
  353. inspectTime: '',
  354. imgUrl1: "",
  355. imgUrl2: "",
  356. imgUrl3: "",
  357. orgId: 0,
  358. taskId: 0,
  359. broadId: 0,
  360. remark: "", //附加描述
  361. isdenger: 0,
  362. },
  363. maShow: false, //扫码后弹框是否展示
  364. manualCheck: false, //手动检查弹框是否显示
  365. actionsManual: [], //手动检查弹框数据
  366. ManualData: [], //手动检查弹框完整数据
  367. checkManualData: [], //手动检查选中的一条检查项数据
  368. showManual: false, //手动检查是否显示描述
  369. showMCheck: false,
  370. insTypeData: '', //扫二维码后出现的消防列表数据内容
  371. moren: `${baseUrlImg}/checkActive/moren.png`, //默认图片
  372. zhengchang: `${baseUrlImg}/checkActive/zhengchang.png`,
  373. show5: false,
  374. remark: '',
  375. photograph: `${baseUrlImg}/checkActive/photograph.png`,
  376. show2: false,
  377. handleResult: '',
  378. dangerDescribe: '',
  379. showOrg: false,
  380. actions: [],
  381. // 每页数据量
  382. pageSize: 10,
  383. // 当前页
  384. pageNo: 1,
  385. // 数据总量
  386. total: 0,
  387. formData: {
  388. orgName: '',
  389. orgId: ''
  390. },
  391. getqrcode: false,
  392. qrcodeShow: false, //h5端扫码是否显示
  393. }
  394. },
  395. watch: {
  396. loading: {
  397. handler(newLength, oldLength) {
  398. this.$modal.isLoadingModel(this.loading)
  399. },
  400. immediate: true
  401. }
  402. },
  403. onShow() {
  404. this.choiceDanger.map(i => {
  405. i.name = i.label;
  406. i.id = i.value;
  407. });
  408. this.tableData = []
  409. this.actions = []
  410. that = this;
  411. getOrgId({
  412. pageNo: this.pageNo,
  413. pageSize: this.pageSize,
  414. userId: this.$store.state.user.id
  415. }).then(response => {
  416. // 取到用户对应的单位名称与id
  417. response.data.map(v => {
  418. this.actions.push({
  419. id: v.dwid,
  420. name: v.orgName
  421. });
  422. });
  423. this.formData.orgName = response.data.length > 0 ? response.data[0].orgName : '' //默认
  424. this.formData.orgId = response.data.length > 0 ? response.data[0].dwid : ''
  425. });
  426. this.getData(1)
  427. this.getInspect()
  428. },
  429. methods: {
  430. // ----扫码选择隐患
  431. popupChoiceDangerFpd(type) {
  432. this.checkedPopupDanger = this.dangerDescribe.split(',')
  433. if (this.checkedPopupDanger.includes('其他')) {
  434. this.showPopupDanger = false
  435. } else {
  436. this.showPopupDanger = true
  437. this.$forceUpdate()
  438. }
  439. this.choiceDanger.map((i, indexs) => { //选中的回显
  440. i.checkedListDanger = []
  441. this.checkedPopupDanger.map(v => {
  442. if (i.name == v) {
  443. this.choiceDanger[indexs].checkedListDanger.push(v)
  444. }
  445. })
  446. })
  447. },
  448. checkboxConfirm3(index) {
  449. this.choiceDanger.map(i => {
  450. if (i.name == this.checkedPopupDanger[this.checkedPopupDanger.length - 1]) {
  451. this.dengerType = i.value
  452. }
  453. });
  454. this.dangerDescribe = this.checkedPopupDanger.toString()
  455. if (this.dangerDescribe.startsWith(',')) {
  456. this.dangerDescribe = this.dangerDescribe.slice(1);
  457. }
  458. this.showPopupDanger = false
  459. this.$forceUpdate()
  460. },
  461. checkboxCancel3(index) {
  462. this.showPopupDanger = false
  463. this.checkedPopupDanger = []
  464. this.$forceUpdate()
  465. },
  466. checkboxChange3(i, n) { //勾选的事件
  467. if (i && n.length != 0) {
  468. this.checkedPopupDanger.push(i)
  469. } else if (i && n.length == 0) {
  470. this.checkedPopupDanger = this.checkedPopupDanger.filter(item => item != i)
  471. }
  472. },
  473. // ----扫码选择隐患
  474. qrScanOpen() {},
  475. async getInspect() {
  476. const res = await getInspectInfo({
  477. pageNo: 1,
  478. pageSize: 100
  479. })
  480. this.ManualData = res.data.list
  481. this.actionsManual = res.data.list.filter(obj => obj.inspType !== 'fpd').map(obj => {
  482. return {
  483. id: obj.id,
  484. name: obj.inspName
  485. };
  486. })
  487. },
  488. closeImage(item, val, k) { //删除图片---5.25新加--未验证
  489. if (this.manualPopup) { //手动检查
  490. this.checkManualData[0].attUrl.splice(val, 1)
  491. } else { //扫码添加
  492. if (item.fpdType) {
  493. this.insTypeData[k].attUrl.splice(val, 1)
  494. }
  495. // this.tableData[k].attUrl.splice(val, 1)
  496. }
  497. that.$forceUpdate();
  498. },
  499. sexSelect(e) { //单位
  500. this.formData.orgId = e.id;
  501. this.formData.orgName = e.name;
  502. this.tableData = []
  503. this.getData(1)
  504. },
  505. manualHandConfirm() { //手动输入编号确认
  506. var that = this
  507. getFpd({
  508. fpdCode: this.manualValue
  509. }).then(res => {
  510. if (res.data.list.length > 0) {
  511. inspTypeList({
  512. id: res.data.list[0].id,
  513. fpdCode: this.manualValue
  514. }).then(reponse => {
  515. that.showMCheck = false
  516. that.maShow = true
  517. that.show2 = false
  518. this.manualValue = ''
  519. that.insTypeData = reponse.data.records
  520. that.insTypeData.map(i => i.attUrl = [])
  521. })
  522. } else {
  523. this.$modal.msg('不存在该设备编码,请确认是否输入正确')
  524. }
  525. })
  526. },
  527. SelectMCheck(e) { //手动选择
  528. this.reselt()
  529. this.loading = false
  530. this.checkManualData = this.ManualData.filter(ManualDataItem => {
  531. return ManualDataItem.id == e.id
  532. })
  533. this.showMCheck = false
  534. this.manualPopup = true
  535. this.checkManualData.map(i => {
  536. i.inspectSubDOList.map(v => {
  537. v.isdenger = 0
  538. })
  539. i.isdenger = i.isdenger
  540. i.remark = ''
  541. i.attUrl = []
  542. i.handleMethod = ''
  543. i.handleResult = ''
  544. i.handleTime = ''
  545. i.inspectTime = ''
  546. })
  547. this.remark = ''
  548. },
  549. checkPopupManual(items, indexs, index) { //手动选择
  550. this.checkManualData[0].inspectSubDOList.map(i => {
  551. if (i.id == items.id) {
  552. i.isdenger = i.isdenger === 1 ? 0 : 1;
  553. this.showManual = i.isdenger === 1 ? true : false;
  554. } else {
  555. i.isdenger = 0
  556. this.showManual = false
  557. }
  558. })
  559. this.$forceUpdate()
  560. },
  561. descript(index) { //隐患描述点击确认
  562. // this.show2 = false
  563. },
  564. getData(pageNo) {
  565. this.loading = true
  566. const id = this.$store.state.user.id
  567. getInspect({
  568. pageNo: pageNo,
  569. pageSize: this.pageSize,
  570. userId: id,
  571. orgId: this.formData.orgId
  572. }).then(response => {
  573. this.loading = false
  574. this.tableData = [...this.tableData, ...response.data.list]
  575. this.dangerDict.map(i => {
  576. this.tableData.map(k => {
  577. if (k?.handleResult == i.value) {
  578. k.handleResult = i.label
  579. }
  580. })
  581. })
  582. // this.tableData = response.data.list
  583. this.total = response.data.total
  584. })
  585. },
  586. //小程序端扫码
  587. erWeiMa() {
  588. // #ifdef H5
  589. this.qrScanShow = true
  590. // #endif
  591. // #ifdef MP-WEIXIN
  592. var that = this
  593. this.remark = ''
  594. // 只允许从相机扫码
  595. uni.scanCode({
  596. onlyFromCamera: true, //只允许从相机扫码
  597. success: function(res) {
  598. if (res.errMsg == "scanCode:ok") {
  599. let result = JSON.parse(res.result)
  600. inspTypeList(JSON.parse(res.result)).then(reponse => {
  601. if (reponse.code == 0) {
  602. that.maShow = true
  603. that.show2 = false
  604. that.insTypeData = reponse.data.records
  605. that.insTypeData.map(i => {
  606. i.remark = ''
  607. i.attUrl = []
  608. i.handleMethod = ''
  609. i.handleResult = ''
  610. i.handleTime = ''
  611. i.inspectTime = ''
  612. })
  613. }
  614. })
  615. setTimeout(() => {
  616. that.$modal.msgSuccess('扫码成功')
  617. }, 200)
  618. }
  619. },
  620. fail: () => {
  621. that.$modal.msgError('未识别到二维码,请重新尝试!')
  622. }
  623. })
  624. // #endif
  625. },
  626. // #ifdef H5
  627. // 扫码成功后执行函数
  628. onDecode(qrcodeVal) {
  629. this.$modal.msgSuccess('扫码成功', qrcodeVal)
  630. this.qrcodeResault = qrcodeVal
  631. this.qrScanShow = false
  632. let result = JSON.parse(qrcodeVal)
  633. var that = this
  634. inspTypeList(JSON.parse(qrcodeVal)).then(reponse => {
  635. if (reponse.code == 0) {
  636. that.maShow = true
  637. that.show2 = false
  638. that.insTypeData = reponse.data.records
  639. that.insTypeData.map(i => i.attUrl = [])
  640. }
  641. })
  642. setTimeout(() => {
  643. that.$modal.msgSuccess('扫码成功')
  644. }, 200)
  645. },
  646. // 点击关闭按钮
  647. qrScanClose() {
  648. this.qrScanShow = false
  649. },
  650. onInit(promise) { //未使用
  651. promise
  652. .then(console.log)
  653. .catch(console.error)
  654. },
  655. // #endif
  656. descriptFpd() { //隐患描述点击确认
  657. this.show5 = false
  658. // this.handleResult = this.handleResult
  659. this.handleMethod = this.handleResult
  660. if (this.manualPopup) {
  661. // this.checkManualData[0].handleResult = this.handleResult
  662. this.checkManualData[0].handleMethod = this.handleResult
  663. this.checkManualData[0].handleResult = 1
  664. }
  665. this.handleResult = 1
  666. this.checkPopupConfirm()
  667. // this.maShow=false
  668. },
  669. checkPopupConfirmNow() {
  670. this.show5 = true
  671. this.handleMethod = "立即处理" //立即整改
  672. if (this.manualPopup) {
  673. this.checkManualData[0].handleMethod = "立即处理"
  674. }
  675. },
  676. checkPopupYinHuan() {
  677. console.log(this.dengerType, 'this.dengerType');
  678. this.handleMethod = "生成隐患" //生成隐患
  679. // this.handleResult = "不正常"
  680. this.handleResult = 2
  681. if (this.manualPopup) { //手动检查
  682. this.checkManualData[0].handleMethod = "生成隐患"
  683. // this.checkManualData[0].handleResult = "不正常"
  684. this.checkManualData[0].handleResult = 2
  685. }
  686. this.checkPopupConfirm()
  687. },
  688. photoUpload(val) {
  689. let pictures = [];
  690. let that = this;
  691. uni.chooseImage({
  692. sourceType: ['camera'], //实现拍照
  693. count: 3,
  694. sizeType: ['original', 'compressed'],
  695. // sourceType: ['album','camera'], //打开系统相册
  696. success(res) {
  697. that.loading = true
  698. if (Array.isArray(res.tempFilePaths)) { //从相册选择有三张的情况
  699. res.tempFilePaths.forEach(item => {
  700. loadImage(
  701. item,
  702. function(canvas) {
  703. canvas.toBlob(function(blob) {
  704. // 压缩后的 Blob 对象
  705. const compressedFile = blob;
  706. // 将压缩后的文件 `compressedFile` 转换为临时URL
  707. const fileUrl = URL.createObjectURL(
  708. compressedFile);
  709. uni.uploadFile({
  710. url: baseUrl +
  711. '/admin-api/infra/file/upload', //后端用于处理图片并返回图片地址的接口
  712. filePath: item,
  713. name: 'file',
  714. header: {
  715. "Authorization": 'Bearer ' +
  716. getAccessToken(),
  717. }, //请求token
  718. success: (res) => {
  719. let imgUrl = JSON.parse(res
  720. .data)
  721. that.loading = false
  722. //消防设备外(扫一扫下方)展示的图片
  723. //弹出层的消防设备展示的图片
  724. if (that.manualPopup) { //手动检查
  725. that.checkManualData.map(
  726. i => {
  727. i.attUrl.push(
  728. imgUrl
  729. .data)
  730. })
  731. } else { //扫码添加
  732. that.insTypeData.map((i,
  733. index) => {
  734. if (val.id == i
  735. .id) {
  736. i.attUrl
  737. .push(
  738. imgUrl
  739. .data
  740. )
  741. }
  742. })
  743. }
  744. that.$forceUpdate();
  745. // // 返回的url
  746. },
  747. fail: () => {
  748. that.loading = false
  749. }
  750. })
  751. // 上传完毕后,释放临时URL
  752. URL.revokeObjectURL(fileUrl);
  753. }, 'image/jpeg', 0.6); // 设置压缩后的图片格式为 JPEG,压缩质量为 0.6
  754. }, {
  755. canvas: true,
  756. maxWidth: 800
  757. } // 设置最大宽度为 800px
  758. );
  759. })
  760. }
  761. }
  762. })
  763. },
  764. // 消防设备扫码
  765. normalPopup(items, indexs, index) {
  766. // this.insTypeData.map(k => {
  767. // k.attUrl = []
  768. // })
  769. this.insTypeData[index].inspectResultList.map(k => {
  770. if (k.isNormal == 1) this.nnorNormalValue = k.id
  771. if (this.insTypeData[index].inspectResultList[indexs].isNormal != 1 && this
  772. .insTypeData[index]
  773. .inspectResultList[indexs].subValue != 1) {
  774. // this.show5 = true
  775. this.show2 = true
  776. }
  777. })
  778. let tableItem = this.insTypeData[index].inspectResultList[indexs]
  779. let ALLinspectResultList = this.insTypeData[index].inspectResultList
  780. let YesinspectResultList = []
  781. let NorinspectResultList = []
  782. var Y = ALLinspectResultList.filter(i => i.id == this.nnorNormalValue)
  783. var N = ALLinspectResultList.filter(i => i.id != this.nnorNormalValue)
  784. N.map(n => {
  785. NorinspectResultList.push(n.subValue)
  786. })
  787. Y.map(y => {
  788. YesinspectResultList.push(y.subValue)
  789. })
  790. // items.isdenger = 0 ? 1 : 0
  791. if (NorinspectResultList.includes(1)) { //如果互斥的数组存在true normal!=1的数组
  792. if (tableItem.id == this.nnorNormalValue) {
  793. this.insTypeData[index].inspectResultList.map((i, kindex) => {
  794. if (i.id != this.nnorNormalValue) {
  795. i.subValue = 0
  796. this.show2 = false
  797. } else {
  798. i.subValue = 1
  799. }
  800. })
  801. } else {
  802. items.subValue = items.subValue == 0 ? 1 : 0
  803. this.show2 = false
  804. }
  805. } else {
  806. if (tableItem.id == this.nnorNormalValue) {
  807. items.subValue = items.subValue == 0 ? 1 : 0
  808. } else {
  809. // if (YesinspectResultList.includes(true)) { //是否存在第一份
  810. this.insTypeData[index].inspectResultList.map((i, kindex) => {
  811. if (i.id == this.nnorNormalValue) {
  812. i.subValue = 0
  813. }
  814. })
  815. // }
  816. items.subValue = items.subValue == 0 ? 1 : 0
  817. }
  818. }
  819. },
  820. checkPopupConfirm() { //弹出得到的那一条数据insTypeData的id 弹出保存
  821. if (this.manualPopup) { //手动检查
  822. this.saveImplement = this.checkManualData[0]
  823. this.saveImplement.dengerType = this.dengerType
  824. this.saveImplement.hisResultCreateReqVOList = this.checkManualData[0].inspectSubDOList
  825. this.saveImplement.dangerDescribe = this.dangerDescribe
  826. this.saveImplement.handleTime = shijianc(new Date().getTime())
  827. this.saveImplement.inspectTime = shijianc(new Date().getTime())
  828. this.saveImplement.remark = this.remark
  829. this.saveImplement.imgUrl1 = this.checkManualData[0].attUrl[0] ? this.checkManualData[0].attUrl[0] :
  830. "";
  831. this.saveImplement.imgUrl2 = this.checkManualData[0].attUrl[1] ? this.checkManualData[0].attUrl[1] :
  832. "";
  833. this.saveImplement.imgUrl3 = this.checkManualData[0].attUrl[2] ? this.checkManualData[0].attUrl[2] :
  834. "";
  835. this.saveImplement.hisResultCreateReqVOList.map(z => {
  836. z.resLable = z.subLable
  837. z.resValue = z.isdenger
  838. })
  839. this.saveImplement.inspId = this.saveImplement.id
  840. this.saveImplement.inspectSubDOList.map(i => {
  841. if (i.isdenger == 1 && i.isNormal == 0) { //必传参数,只有该检查项正常为0,那么isdenger==1
  842. this.saveImplement.isdenger = 1
  843. } else {
  844. this.saveImplement.isdenger = 0
  845. }
  846. })
  847. this.saveImplement.orgId = this.formData.orgId
  848. if (!this.saveImplement.dangerDescribe && this.saveImplement.isdenger == 1) return that.$modal
  849. .msgError('请填写隐患描述');
  850. this.baocun(this.saveImplement)
  851. } else { //设施扫码
  852. //this.insTypeData[0]扫二维码后点击出现的一条消防列表数据内容 this.newInsTypeData的多条数据列表
  853. let arr = []
  854. let normalArr = 0
  855. this.insTypeData[0].inspectResultList.map((i, index) => {
  856. arr.push(i.subValue)
  857. if (i.isNormal == 1) {
  858. normalArr = index //找到正常的所在的index
  859. }
  860. })
  861. if (arr.includes(1)) { //包含了证明勾选了
  862. this.insTypeData.map(i => {
  863. })
  864. this.saveImplement = this.insTypeData
  865. this.saveImplement.map(i => {
  866. i.dengerType = this.dengerType
  867. i.handleTime = shijianc(new Date().getTime())
  868. i.inspectTime = shijianc(new Date().getTime())
  869. i.orgId = this.formData.orgId
  870. i.dangerDescribe = this.dangerDescribe
  871. i.handleMethod = this.handleMethod
  872. i.remark = this.remark
  873. i.handleResult = this.handleResult
  874. i.fpdId = i.id
  875. i.inspType = "fpd"
  876. i.imgUrl1 = i.attUrl[0] ? i.attUrl[0] : ""
  877. i.imgUrl2 = i.attUrl[1] ? i.attUrl[1] : ""
  878. i.imgUrl3 = i.attUrl[2] ? i.attUrl[2] : ""
  879. i.inspName = i.fpdName
  880. i.inspCode = i.fpdCode
  881. i.inspId = i.id
  882. i.fpdResultCreateReqVOList = i.inspectResultList
  883. i.fpdResultCreateReqVOList.map(z => {
  884. z.broadId = 0
  885. z.fpdId = z.id
  886. z.resLable = z.subLable
  887. z.resValue = z.subValue
  888. z.status = 0
  889. if (z.subValue == 1 && z.isNormal ==
  890. 0) { //必传参数,只有该检查项正常为0,那么isdenger==1
  891. i.isdenger = 1
  892. } else {
  893. i.isdenger = 0
  894. }
  895. })
  896. })
  897. if (!this.saveImplement[0].dangerDescribe && this.saveImplement[0].isdenger == 1) return that
  898. .$modal.msgError('请填写隐患描述');
  899. this.baocun(this.saveImplement[0])
  900. // ----扫码选择隐患
  901. this.description2 = ''
  902. this.show2 = false
  903. } else {
  904. that.$modal.alert('请勾选检查结果')
  905. }
  906. }
  907. },
  908. baocun(val) {
  909. createInspect(JSON.stringify(val)).then(response => {
  910. if (response.data) {
  911. uni.showToast({
  912. title: '提交成功',
  913. icon: 'none',
  914. duration: 2000
  915. })
  916. this.tableData = []
  917. this.getData(1)
  918. this.reselt()
  919. this.$forceUpdate()
  920. } else {
  921. this.$modal.msgError('提交失败')
  922. }
  923. })
  924. this.maShow = false
  925. this.manualPopup = false
  926. },
  927. reselt() {
  928. this.dangerDescribe = ''
  929. this.handleResult = ''
  930. this.saveImplement = { //重置
  931. attUrl: [],
  932. dangerDescribe: "", //隐患描述
  933. fpdId: "",
  934. fpdResultCreateReqVOList: [], //传的当前事件
  935. hisResultCreateReqVOList: [],
  936. handleMethod: "", //处理方式
  937. handleResult: "", //处理结果描述
  938. handleTime: "",
  939. inspectTime: "",
  940. imgUrl1: "",
  941. imgUrl2: "",
  942. imgUrl3: "",
  943. orgId: 0,
  944. taskId: 0,
  945. broadId: 0,
  946. remark: "", //附加描述
  947. isdenger: 0,
  948. }
  949. this.checkManualData = [{ //重置
  950. attUrl: [],
  951. dangerDescribe: "", //隐患描述
  952. fpdId: "",
  953. fpdResultCreateReqVOList: [], //传的当前事件
  954. hisResultCreateReqVOList: [],
  955. handleMethod: "", //处理方式
  956. handleResult: "", //处理结果描述
  957. handleTime: "",
  958. inspectTime: "",
  959. imgUrl1: "",
  960. imgUrl2: "",
  961. imgUrl3: "",
  962. orgId: 0,
  963. taskId: 0,
  964. broadId: 0,
  965. remark: "", //附加描述
  966. isdenger: 0,
  967. }]
  968. },
  969. checkPopupCancel() {
  970. this.maShow = false
  971. this.showManual = false
  972. this.manualPopup = false
  973. },
  974. // 隐藏键盘
  975. hideKeyboard() {
  976. uni.hideKeyboard();
  977. },
  978. addClick() {
  979. this.manualCheck = true
  980. },
  981. addClickDetail(val) {
  982. uni.navigateTo({
  983. url: `/pagesA/fire/check_inspection/inspect_detail/inspect_detail?id=${val}`,
  984. success: function(res) {
  985. res.eventChannel.emit('acceptDataFromOpenerPage', val);
  986. }
  987. })
  988. },
  989. },
  990. // 触底的事件
  991. onReachBottom() {
  992. // 判断是否还有下一页数据
  993. if (this.pageNo * this.pageSize >= this.total) return uni.showToast({
  994. title: `数据加载完毕`
  995. })
  996. // 判断是否正在请求其它数据,如果是,则不发起额外的请求
  997. if (this.loading) return
  998. this.pageNo += 1
  999. this.getData(this.pageNo)
  1000. },
  1001. }
  1002. </script>
  1003. <style>
  1004. page {
  1005. background-color: #F5F7F9;
  1006. }
  1007. </style>
  1008. <style lang="scss" scoped>
  1009. page {
  1010. background-color: #F5F7F9 !important;
  1011. }
  1012. .tops {
  1013. display: flex;
  1014. justify-content: space-between;
  1015. width: 80%;
  1016. margin: 50rpx 10%;
  1017. // 二维码扫描相关样式
  1018. .qr-scan-containner {
  1019. max-width: 600rpx;
  1020. display: flex;
  1021. flex-direction: column;
  1022. justify-content: center;
  1023. align-items: center;
  1024. align-content: center;
  1025. background-color: transparent;
  1026. .qr-scan-middle {
  1027. .qr-scan-title {
  1028. font-size: 30rpx;
  1029. text-align: center;
  1030. padding: 20rpx 0;
  1031. }
  1032. max-width: 100%;
  1033. }
  1034. }
  1035. }
  1036. .tupian {
  1037. width: 95rpx;
  1038. height: 95rpx;
  1039. }
  1040. .tupians {
  1041. width: 45rpx;
  1042. height: 45rpx;
  1043. }
  1044. .tiantupian {
  1045. width: 95rpx;
  1046. height: 95rpx;
  1047. }
  1048. .cont {
  1049. font-size: 16px;
  1050. color: #4CB2B6;
  1051. margin-bottom: 30rpx;
  1052. }
  1053. .text {
  1054. text-align: center;
  1055. color: #000;
  1056. font-size: 26rpx;
  1057. margin-left: 20rpx;
  1058. }
  1059. .text2 {
  1060. text-align: center;
  1061. color: #000;
  1062. font-size: 22rpx;
  1063. margin-top: 10rpx;
  1064. }
  1065. ::v-deep .u-icon__icon {
  1066. margin-right: 0px !important;
  1067. }
  1068. .child {
  1069. margin: 20rpx 0 0 20rpx;
  1070. border-radius: 10rpx;
  1071. .child-new {
  1072. display: flex;
  1073. .child-new-item {
  1074. width: 30%;
  1075. margin-top: 25%;
  1076. transform: translateY(-50px);
  1077. }
  1078. .child-result {
  1079. /deep/.data-v-525ecd67 {
  1080. // width: 130rpx;
  1081. height: 100rpx;
  1082. }
  1083. }
  1084. }
  1085. }
  1086. .titles {
  1087. padding: 20rpx 0;
  1088. color: #383838;
  1089. }
  1090. .grid-item-box {
  1091. display: flex;
  1092. align-items: center;
  1093. justify-content: center;
  1094. padding: 15px 0;
  1095. }
  1096. /deep/ .uni-grid-item {
  1097. height: 140rpx !important;
  1098. }
  1099. /deep/.uni-textarea-textarea {
  1100. border: 1px solid #4CB2B6;
  1101. border-radius: 16rpx;
  1102. }
  1103. .btnList {
  1104. display: flex
  1105. }
  1106. .main-content {
  1107. /deep/.u-icon--right[data-v-172979f2],
  1108. /deep/.u-icon--right.data-v-172979f2,
  1109. .u-icon--right {
  1110. // background-color: #f8f8f8;
  1111. border-radius: 5rpx;
  1112. position: absolute;
  1113. top: -14rpx;
  1114. right: 14rpx;
  1115. }
  1116. }
  1117. /deep/.danwei.u-icon--right[data-v-172979f2],
  1118. /deep/.danwei.u-icon--right.data-v-172979f2,
  1119. .danwei.u-icon--right {
  1120. top: 58rpx !important;
  1121. right: 58rpx !important;
  1122. }
  1123. .uni-grid-wraps {
  1124. margin-left: 60rpx;
  1125. margin-bottom: 480rpx !important;
  1126. // margin-bottom: 200rpx;
  1127. }
  1128. /deep/.u-slide-up-enter-active[data-v-39e33bf2],
  1129. /deep/.u-slide-up-enter-active.data-v-39e33bf2,
  1130. .u-slide-up-enter-active {
  1131. height: 90% !important;
  1132. overflow-y: auto;
  1133. }
  1134. .springFarm {
  1135. margin-left: 40rpx;
  1136. }
  1137. .show-title {
  1138. font-size: 32rpx;
  1139. color: #383838;
  1140. margin: 40rpx 0;
  1141. }
  1142. /deep/.u-modal {
  1143. border: 1px solid #4CB2B6 !important;
  1144. }
  1145. .slot-contents {
  1146. // margin-left: 40rpx;
  1147. margin-bottom: 20rpx;
  1148. border-radius: 1px solid #E5E5E5 !important;
  1149. // background-color: #F0F2F3 !important;
  1150. }
  1151. /deep/ .slot-contents .uni-textarea-textarea {
  1152. border: 1px solid #4CB2B6 !important;
  1153. // background-color: #F0F2F3 !important;
  1154. }
  1155. .jieguo {
  1156. /deep/.uni-textarea-textarea {
  1157. border: none !important
  1158. }
  1159. }
  1160. /deep/ .uni-textarea-placeholder {
  1161. color: #a4a8ab;
  1162. margin-top: 20rpx;
  1163. margin-left: 30rpx;
  1164. }
  1165. .detail {
  1166. // width: 72px;
  1167. // height: 60rpx;
  1168. float: right;
  1169. border-radius: 30px;
  1170. background-color: #F7C41E;
  1171. margin-right: 20rpx;
  1172. text-align: center;
  1173. // line-height: 60rpx;
  1174. padding: 3rpx 15rpx;
  1175. }
  1176. .an-niu {
  1177. display: flex;
  1178. justify-content: space-between;
  1179. }
  1180. /deep/.u-input {
  1181. padding: 4px !important;
  1182. }
  1183. /deep/.canvasBox {
  1184. .box {
  1185. width: 600rpx;
  1186. /* 设置扫码容器宽度 */
  1187. height: 600rpx;
  1188. /* 设置扫码容器高度 */
  1189. }
  1190. }
  1191. .manual {
  1192. font-size: 16px;
  1193. padding: 25rpx 0;
  1194. }
  1195. .manual:last-child {
  1196. font-size: 25px;
  1197. padding: 60rpx 0;
  1198. background-color: red;
  1199. }
  1200. .manual-hand {
  1201. margin-left: 30rpx;
  1202. display: flex;
  1203. font-size: 18px;
  1204. color: #30746b;
  1205. margin: 20rpx;
  1206. }
  1207. .manual-hand-item {
  1208. display: flex;
  1209. width: 90%;
  1210. justify-content: space-between;
  1211. margin-left: 3%;
  1212. /deep/.u-input {
  1213. border: 1px solid #726f74 !important;
  1214. }
  1215. }
  1216. //隐患弹框
  1217. /deep/.u-popup__content {
  1218. overflow-y: auto;
  1219. }
  1220. .text-xl {
  1221. font-size: 18px;
  1222. font-weight: 600;
  1223. }
  1224. .person-forward {
  1225. padding-top: 40rpx;
  1226. display: flex;
  1227. flex-direction: column;
  1228. flex-wrap: wrap;
  1229. overflow-y: auto;
  1230. margin-bottom: 100rpx;
  1231. }
  1232. .example {
  1233. overflow-y: auto;
  1234. }
  1235. /deep/.u-action-sheet {
  1236. height: 80vh;
  1237. background-color: #fff;
  1238. overflow-y: auto;
  1239. }
  1240. </style>vh