safetyCardScan.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020
  1. <!-- 安全检查扫一扫 实验室详情 -->
  2. <template>
  3. <view class="safetyCardScan">
  4. <view class="header">
  5. <view class="tabTitle">
  6. <view class="tabTitle_li" @tap="tabClick(index)" :key="index" v-for="(item,index) in tabText">
  7. <view class="tabTitle_text">
  8. <img :src="item.img">
  9. <view
  10. :id="pageType==index&&index==0?'fontColor-A':(pageType==1&&index==1?'fontColor-B':(pageType==2&&index==2?'fontColor-C':''))">
  11. {{item.name}}
  12. </view>
  13. </view>
  14. <view :class="{on:pageType==index}" class="tabTitle_across">
  15. <img src="@/pages_safetyCheck/images/img_xyzc_bg@1x.png">
  16. </view>
  17. <view class="line"></view>
  18. </view>
  19. </view>
  20. </view>
  21. <view class="safetyCard" v-if="pageType==0">
  22. <view class="lab-info">
  23. <img class="lab-info-l" src="@/pages_safetyCheck/images/icon_aqjc_shiyanshi.png">
  24. <view class="lab-info-c">
  25. <view class="lab-info-c-t">
  26. <view class="lab-info-c-t-l">{{newData.subName}}</view>
  27. <view class="lab-info-c-t-r"
  28. :style="'border:1rpx solid '+newData.levelColor+';background:'+newData.levelColorTow+';'">
  29. <text
  30. :style="'border-right:1rpx solid '+newData.levelColor+';color:'+newData.levelColor+';'">{{newData.levelName?newData.levelName:''}}</text>
  31. <text
  32. :style="'color:'+newData.levelColor+';'">{{newData.typeName?newData.typeName:''}}</text>
  33. </view>
  34. </view>
  35. <view class="lab-info-c-b">
  36. {{newData.roomNum}}房间&{{newData.buildName}}
  37. </view>
  38. </view>
  39. <view class="lab-info-r">{{newData.subArea}}㎡</view>
  40. </view>
  41. <view class="liability-unit">
  42. <view>学院单位</view>
  43. <view>{{newData.deptName}}</view>
  44. </view>
  45. <view class="small-title-new" @click="unfoldPackUp('subAdminShowType')">
  46. <view>实验室负责人</view>
  47. <uni-icons :type="newData.subAdminShowType?'up':'down'" size="12" color='#A2A2A2'></uni-icons>
  48. </view>
  49. <view class="sub-head" v-if="newData.subAdminShowType">
  50. <view>{{newData.adminName}}</view>
  51. <view @click="callPhone(newData.adminPhone)">
  52. <img src="@/pages_manage/images/icon_aqxxp_dh.png">
  53. <view>{{newData.adminPhone}}</view>
  54. </view>
  55. </view>
  56. <view class="small-title-new" @click="unfoldPackUp('adminShowType')">
  57. <view>安全员</view>
  58. <uni-icons :type="newData.adminShowType?'up':'down'" size="12" color='#A2A2A2'></uni-icons>
  59. </view>
  60. <view v-if="newData.adminShowType">
  61. <view class="sub-head" v-for="(item,index) in newData.safeUserList" :key="index">
  62. <view>{{item.safeUserName}}</view>
  63. <view @click="callPhone(item.safeUserPhone)">
  64. <img src="@/pages_manage/images/icon_aqxxp_dh.png">
  65. <view>{{item.safeUserPhone}}</view>
  66. </view>
  67. </view>
  68. </view>
  69. <view class="classify" v-for="(item,index) in newData.labInfoBrandModels" :key="index">
  70. <view v-if="item.privateList.length>0" class="small-title-new" @click="unfoldPackUp('list',index)">
  71. <view>{{item.brandName}}</view>
  72. <uni-icons :type="item.showType?'up':'down'" size="12" color='#A2A2A2'></uni-icons>
  73. </view>
  74. <view v-if="item.privateList.length>0 && item.brandType==1 && !item.isSpecial&&item.showType">
  75. <view class="small-items-new" v-for="(item2,index2) in item.privateList" :key="index2">
  76. <view>{{index2+1}}. </view>
  77. <view>{{item2.infoName}}</view>
  78. </view>
  79. </view>
  80. <view v-if="item.privateList.length>0 && item.brandType==1 && item.isSpecial&&item.showType">
  81. <view class="small-items-new" v-for="(item2,index2) in item.privateList" :key="index2">
  82. <view></view>
  83. <view>{{item2.infoName}}</view>
  84. </view>
  85. </view>
  86. <view v-if="item.privateList.length>0 && item.brandType==2&&item.showType">
  87. <view class="logotype-img-new">
  88. <img v-for="(item3,index3) in item.privateList" :key="index3" :src="baseUrl+item3.infoContent">
  89. </view>
  90. </view>
  91. </view>
  92. </view>
  93. <view class="position-button-box" v-if="pageType == 0">
  94. <img class="position-button-p-1" @click="goPage('securityCheck')"
  95. src="@/pages_safetyCheck/images/icon_aqjc_anquanjiancha.png">
  96. <img class="position-button-p-2" @click="goPage('snapshot')"
  97. src="@/pages_safetyCheck/images/icon_aqjc_suishoupai.png">
  98. </view>
  99. <view class="shade" v-if="dialogVisible">
  100. <view class="null-box" @click="dialogClose()"></view>
  101. <view class="shade_n">
  102. <view class="title">
  103. <view>{{dialogTtile}}</view>
  104. <img src="@/pages_safetyCheck/images/icon_06.png">
  105. </view>
  106. <view class="batch">
  107. <view class="batch-li" @click="batchClick(item)" v-for="(item,index) in batchList">
  108. <view class="batch-li-l">
  109. <text v-if="dialogStatus==0">{{item.planTitle}}</text>
  110. <text v-if="dialogStatus==1">{{item.checkName}}</text>
  111. </view>
  112. <view class="batch-li-r">
  113. <img src="@/pages_safetyCheck/images/icon_wd_gd@1x.png">
  114. </view>
  115. </view>
  116. </view>
  117. </view>
  118. </view>
  119. <!-- 物联控制 -->
  120. <iotControl ref="iotControl" v-if="pageType == 1" :subjectData="subjectData"></iotControl>
  121. <!-- 进出记录 -->
  122. <accessRecord v-if="pageType == 2" :subjectData="subjectData"></accessRecord>
  123. <!-- 语音广播弹窗 -->
  124. <voiceBroadcast v-if="broadcastPage" :subjectData="subjectData"></voiceBroadcast>
  125. <!-- 空调弹窗 -->
  126. <airConditioning v-if="conditioningPage" :airConditioningData="airConditioningData"></airConditioning>
  127. </view>
  128. </template>
  129. <script>
  130. import {
  131. pageRestrictVerify
  132. } from '@/utils/index'
  133. import {
  134. securityAppCheckPlanAppTitleList,
  135. securityAppCheckManageList,
  136. securityAppCheckSetOptionList,
  137. } from '@/pages_safetyCheck/api/index.js'
  138. import {
  139. iotControl
  140. } from '@/pages_manage/views/laboratory/iotControl.vue'
  141. import {
  142. accessRecord
  143. } from '@/pages_manage/views/laboratory/accessRecord.vue'
  144. import {
  145. voiceBroadcast
  146. } from '@/pages_manage/views/laboratory/voiceBroadcast.vue'
  147. import {
  148. airConditioning
  149. } from '@/pages_manage/views/laboratory/airConditioning.vue'
  150. import {
  151. config
  152. } from '@/api/request/config.js'
  153. import {
  154. } from '@/pages/api/index.js'
  155. export default {
  156. name: "safetyCardScan",
  157. components: {
  158. iotControl,
  159. accessRecord,
  160. voiceBroadcast,
  161. airConditioning,
  162. },
  163. data() {
  164. return {
  165. baseUrl: config.base_url,
  166. pageType: 1,
  167. tabText: [{
  168. name: '安全信息牌',
  169. img: require('@/pages_safetyCheck/images/icon_sys_aqxxp@1x.png'),
  170. },
  171. {
  172. name: '监测控制',
  173. img: require('@/pages_safetyCheck/images/icon_sys_jckz@1x.png'),
  174. },
  175. {
  176. name: '进出记录',
  177. img: require('@/pages_safetyCheck/images/icon_sys_jcjl@1x.png'),
  178. },
  179. ],
  180. pageType: 0,
  181. newData: {
  182. adminName: '',
  183. adminPhone: '',
  184. safeUserList: [],
  185. labInfoBrandModels: [],
  186. },
  187. subjectData: null,
  188. identityData: uni.getStorageSync('identityData'),
  189. //语音广播弹窗
  190. broadcastPage: false,
  191. //空调弹窗
  192. conditioningPage: false,
  193. // 空调弹窗
  194. airConditioningData: null,
  195. saoCodeType: false,
  196. dialogVisible: false,
  197. dialogTtile: '',
  198. dialogStatus: 0, //0计划 1批次 2实验室
  199. batchData: {},
  200. batchList: [],
  201. queryParams: {
  202. page: 1,
  203. pageSize: 100,
  204. checkCategory: '', //1校院巡查 2学院自查
  205. subId:'',
  206. },
  207. checkPlanSetVoList:null,
  208. form:{},
  209. }
  210. },
  211. // 父页面
  212. onReachBottom() {
  213. uni.$emit('onReachBottom') // 设置监听事件
  214. },
  215. onPullDownRefresh() {
  216. uni.$emit('onPullDownRefresh') // 设置监听事件
  217. },
  218. onLoad(option) {
  219. let newData = JSON.parse(decodeURIComponent(option.infoData));
  220. newData.subAdminShowType = true;
  221. newData.adminShowType = true;
  222. if (newData.labInfoBrandModels) {
  223. for (let i = 0; i < newData.labInfoBrandModels.length; i++) {
  224. newData.labInfoBrandModels[i].showType = true;
  225. }
  226. }
  227. if(newData.levelColor){
  228. newData.levelColorTow = this.hexToRgb(newData.levelColor, 0.2)
  229. }
  230. this.$nextTick(() => {
  231. this.$set(this, 'newData', newData);
  232. this.$set(this, 'subjectData', newData);
  233. this.$set(this, 'pageType', 0);
  234. })
  235. },
  236. onShow() {
  237. },
  238. mounted() {
  239. },
  240. methods: {
  241. dialogClose(){
  242. this.dialogVisible=false;
  243. },
  244. //十六进制颜色值和RGB格式转换
  245. hexToRgb(hex, opacity = 1) {
  246. // 去除#号
  247. var color = hex.replace("#", "");
  248. // 分割成红、绿、蓝三部分的16进制字符串
  249. var red = parseInt(color.substring(0, 2), 16);
  250. var green = parseInt(color.substring(2, 4), 16);
  251. var blue = parseInt(color.substring(4, 6), 16);
  252. return `RGB(${red}, ${green}, ${blue},${opacity})`;
  253. },
  254. batchClick(row) {
  255. let self=this;
  256. if (this.dialogStatus == 0) { //计划点击
  257. if (row.checkPlanSetVoList.length ==1) {
  258. //如果只有1个检查批次不弹窗
  259. this.$set(this, 'batchData', {
  260. planId: row.planId,
  261. planTitle: row.planTitle,
  262. checkCategory: row.checkCategory,
  263. checkTypeName: row.checkTypeName,
  264. crossCheck: row.crossCheck,
  265. checkPlanSetVoList: row.checkPlanSetVoList[0]
  266. });
  267. let planSetId = row.checkPlanSetVoList[0].planSetId
  268. self.checkPlanSetVoList=row.checkPlanSetVoList[0];
  269. self.securityAppCheckManageList(planSetId)
  270. } else {
  271. this.$set(this, 'batchData', {
  272. planId: row.planId,
  273. planTitle: row.planTitle,
  274. checkCategory: row.checkCategory,
  275. checkTypeName: row.checkTypeName,
  276. crossCheck: row.crossCheck,
  277. });
  278. this.$set(this, 'batchList', row.checkPlanSetVoList);
  279. this.dialogStatus = 1;
  280. this.dialogTtile = '批次';
  281. this.dialogVisible = true;
  282. }
  283. } else if (this.dialogStatus == 1) { //批次点击
  284. this.dialogStatus = 2;
  285. this.dialogTtile = '实验室';
  286. let planSetId = row.planSetId
  287. console.log(row)
  288. self.checkPlanSetVoList=row;
  289. this.securityAppCheckManageList(planSetId)
  290. }
  291. },
  292. //查询计划
  293. async securityAppCheckPlanAppTitleList() {
  294. console.log(this.newData.subId)
  295. this.queryParams.subId=this.newData.subId;
  296. this.queryParams.checkStatus=1;
  297. let self = this;
  298. const {
  299. data
  300. } = await securityAppCheckPlanAppTitleList(this.queryParams);
  301. if (data.code == 200 && data.data.records[0]) {
  302. if (data.data.records.length == 1) { //一个计划
  303. let planSetId = data.data.records[0]
  304. if (data.data.records[0].checkPlanSetVoList[0]) { //一个批次
  305. let planSetId = data.data.records[0].checkPlanSetVoList[0].planSetId
  306. self.checkPlanSetVoList=data.data.records[0].checkPlanSetVoList[0];
  307. self.securityAppCheckManageList(planSetId)
  308. }
  309. } else { //多个计划
  310. this.batchList = data.data.records;
  311. this.dialogVisible = true;
  312. this.dialogTtile = '计划标题';
  313. }
  314. }else{
  315. uni.showToast({
  316. title: '该实验室暂无检查计划!',
  317. icon: "none",
  318. mask: true,
  319. duration: 2000
  320. });
  321. return
  322. }
  323. },
  324. //检查任务-在此结果里对比实验室Id判断是否有实验室
  325. async securityAppCheckManageList(planSetId) {
  326. let self = this;
  327. let obj = {
  328. page: 1,
  329. pageSize: 20,
  330. planSetId: planSetId,
  331. subId:self.newData.subId,
  332. }
  333. const {
  334. data
  335. } = await securityAppCheckManageList(obj);
  336. if (data.code == 200) {
  337. //this.shadeList = data.data.records;
  338. if(data.data.records[0]){
  339. let manageId = data.data.records[0].manageId;
  340. self.securityAppCheckSetOptionList(data.data.records[0]);
  341. }else {
  342. self.dialogVisible = false;
  343. uni.showToast({
  344. title: '该实验室暂无检查计划!',
  345. icon: "none",
  346. mask: true,
  347. duration: 2000
  348. });
  349. return
  350. }
  351. }
  352. },
  353. //查询检查项
  354. async securityAppCheckSetOptionList(item) {
  355. let self = this;
  356. let upData=item;
  357. let obj = {
  358. page: 1,
  359. pageSize: 20,
  360. checkStatus: '0',
  361. manageId: upData.manageId,
  362. }
  363. const {
  364. data
  365. } = await securityAppCheckSetOptionList(obj);
  366. if (data.code == 200) {
  367. if (data.data.records[0]) {
  368. let infoData = {};
  369. infoData.pageType = 0;
  370. infoData.itemsStatus = 0;
  371. infoData.subName = upData.subName;
  372. infoData.checkPlanSetVoList = self.checkPlanSetVoList;
  373. infoData.roomNum = upData.roomNum;
  374. infoData.subId = data.data.records[0].subId;
  375. infoData.manageId = data.data.records[0].manageId;
  376. infoData.setOptionId = data.data.records[0].setOptionId;
  377. infoData.hazardCheckPro = data.data.records[0].hazardCheckPro;
  378. uni.redirectTo({
  379. url: '/pages_safetyCheck/views/inspectManage/conductInspections?infoData=' +
  380. encodeURIComponent(
  381. JSON
  382. .stringify(infoData))
  383. });
  384. }
  385. }
  386. },
  387. //拨打电话
  388. callPhone(tel) {
  389. uni.makePhoneCall({
  390. phoneNumber: tel
  391. })
  392. },
  393. goVideoPage() {
  394. console.log('视频')
  395. let obj = {
  396. type: 4,
  397. subId: this.newData.subId
  398. }
  399. uni.navigateTo({
  400. url: '/pages_manage/views/laboratory/videoPlayer?item=' + encodeURIComponent(JSON.stringify(
  401. obj))
  402. });
  403. },
  404. getIotControlData() {
  405. this.$refs['iotControl'].iotAppHardwareFindByType();
  406. },
  407. buttonClick(type, row) {
  408. let self = this;
  409. if (type == 'subDetail') {
  410. //实验室详情
  411. } else if (type == 'broadcastOpen') {
  412. //语音弹窗开启
  413. this.$set(this, 'broadcastPage', true);
  414. } else if (type == 'broadcastClose') {
  415. //语音弹窗关闭
  416. this.$set(this, 'broadcastPage', false);
  417. } else if (type == 'conditioningOpen') {
  418. //空调弹窗开启
  419. this.$set(this, 'airConditioningData', row);
  420. this.$set(this, 'conditioningPage', true);
  421. } else if (type == 'conditioningClose') {
  422. //空调弹窗关闭
  423. this.$set(this, 'conditioningPage', false);
  424. } else if (type == 'back') {
  425. this.$set(this, 'pageType', 2);
  426. }
  427. },
  428. //展开/收起操作
  429. unfoldPackUp(type, index) {
  430. if (type == 'subAdminShowType') {
  431. this.$set(this.newData, 'subAdminShowType', !this.newData.subAdminShowType);
  432. } else if (type == 'adminShowType') {
  433. this.$set(this.newData, 'adminShowType', !this.newData.adminShowType);
  434. } else if (type == 'list') {
  435. this.$set(this.newData.labInfoBrandModels[index], 'showType', !this.newData.labInfoBrandModels[index]
  436. .showType);
  437. }
  438. },
  439. //顶部tab点击
  440. tabClick(index) {
  441. if (this.pageType != index) {
  442. this.$set(this, 'pageType', index);
  443. }
  444. },
  445. goPage(type) {
  446. if (!pageRestrictVerify(type)) {
  447. uni.showToast({
  448. title: '没有相关权限,请联系管理员',
  449. icon: "none",
  450. mask: true,
  451. duration: 2000
  452. });
  453. return
  454. }
  455. if (type == 'securityCheck') {
  456. //安全检查
  457. this.securityAppCheckPlanAppTitleList();
  458. /* uni.navigateTo({
  459. url: "/pages_safetyCheck/views/safetyCheck",
  460. }); */
  461. } else if (type == 'snapshot') {
  462. console.log(this.newData)
  463. this.$set(this.form, "subId", this.newData.subId)
  464. this.$set(this.form, "subName", this.newData.subName)
  465. this.$set(this.form, "subRoom", this.newData.roomNum)
  466. this.$set(this.form, "deptId", this.newData.deptId)
  467. this.$set(this.form, "deptName", this.newData.deptName)
  468. this.$set(this.form, "buildId", this.newData.buildId)
  469. this.$set(this.form, "buildName", this.newData.buildName)
  470. this.$set(this.form, "floorId", this.newData.floorId)
  471. this.$set(this.form, "floorName", this.newData.floorName)
  472. this.$set(this.form, "typeId", this.newData.typeId)
  473. this.$set(this.form, "classTypeNames", this.newData.typeName)
  474. this.$set(this.form, "levelId", this.newData.levelId)
  475. this.$set(this.form, "classLevelName", this.newData.levelName)
  476. uni.redirectTo({
  477. url: '/pages_safetyCheck/views/snapshotManage/snapshotList?form=' +
  478. encodeURIComponent(JSON.stringify(this.form))
  479. });
  480. }
  481. },
  482. }
  483. }
  484. </script>
  485. <style lang="stylus" scoped>
  486. .safetyCardScan {
  487. height: 100%;
  488. #fontColor-A {
  489. color: #00DEDE;
  490. }
  491. #fontColor-B {
  492. color: #FF8C00;
  493. }
  494. #fontColor-C {
  495. color: #0083FD;
  496. }
  497. .header {
  498. height: 192rpx;
  499. width: 100%;
  500. // position: fixed;
  501. // top: 0rpx;
  502. // z-index: 100;
  503. background: #fff;
  504. .tabTitle {
  505. width: 750rpx;
  506. height: 188rpx;
  507. display flex;
  508. justify-content: flex-start;
  509. align-items: center;
  510. border-bottom: 4rpx solid #F5F5F5;
  511. .tabTitle_li {
  512. height: 188rpx;
  513. flex: 1;
  514. position: relative;
  515. text-align center;
  516. .tabTitle_text {
  517. display: flex;
  518. justify-content: center;
  519. flex-direction: column;
  520. align-items: center;
  521. >img {
  522. width: 80rpx;
  523. height: 80rpx;
  524. margin-top: 20rpx;
  525. }
  526. >view:nth-of-type(1) {
  527. font-size: 30rpx;
  528. color: #333333;
  529. line-height: 42rpx;
  530. text-align: left;
  531. margin-top: 10rpx;
  532. }
  533. >view:nth-of-type(2) {
  534. font-size: 24rpx;
  535. color: #666666;
  536. line-height: 34rpx;
  537. text-align: left;
  538. }
  539. position: relative;
  540. &.on {}
  541. }
  542. .line {
  543. width: 2rpx;
  544. height: 40rpx;
  545. background: #D8D8D8;
  546. position: absolute;
  547. top: 40%;
  548. }
  549. .tabTitle_across {
  550. /* width: 50rpx;
  551. height: 4rpx;
  552. background: #0183FA;
  553. border-radius: 2rpx; */
  554. margin-left: 38%;
  555. margin-top: 12rpx;
  556. display none;
  557. >img {
  558. width: 40rpx;
  559. height: 26rpx;
  560. }
  561. &.on {
  562. display block;
  563. }
  564. }
  565. }
  566. }
  567. }
  568. /* 安全信息牌 */
  569. .safetyCard {
  570. padding-bottom: 150rpx;
  571. .lab-info {
  572. background: #FFFFFF;
  573. display: flex;
  574. justify-content: space-between;
  575. .lab-info-l {
  576. width: 80rpx;
  577. height: 80rpx;
  578. background: #0183FA;
  579. border-radius: 10rpx 10rpx 10rpx 10rpx;
  580. margin-left: 30rpx;
  581. margin-top: 30rpx;
  582. }
  583. .lab-info-c {
  584. width: 500rpx;
  585. margin: 24rpx 30rpx 0 20rpx;
  586. .lab-info-c-t {
  587. display: flex;
  588. justify-content: space-between;
  589. .lab-info-c-t-l {
  590. font-size: 30rpx;
  591. color: #333333;
  592. line-height: 42rpx;
  593. text-align: left;
  594. overflow: hidden;
  595. text-overflow: ellipsis;
  596. white-space: nowrap;
  597. }
  598. .lab-info-c-t-r {
  599. display: flex;
  600. justify-content: flex-start;
  601. background: rgba(255, 0, 0, 0.2);
  602. border-radius: 10rpx 10rpx 10rpx 10rpx;
  603. border: 2rpx solid #FF0000;
  604. width: 180rpx;
  605. height: 40rpx;
  606. margin-left: 10rpx;
  607. >text {
  608. display: inline-block;
  609. flex: 1;
  610. text-align: center;
  611. font-size: 24rpx;
  612. color: #FF0000;
  613. line-height: 40rpx;
  614. text-align: center;
  615. }
  616. >text:nth-of-type(1) {
  617. border-right: 2rpx solid #FF0000;
  618. }
  619. >text:nth-of-type(2) {}
  620. }
  621. }
  622. .lab-info-c-b {
  623. font-size: 30rpx;
  624. color: #666666;
  625. line-height: 42rpx;
  626. text-align: left;
  627. margin-top: 10rpx;
  628. }
  629. }
  630. .lab-info-r {
  631. width: 100rpx;
  632. height: 150rpx;
  633. background: rgba(1, 131, 250, 0.2);
  634. border-radius: 0rpx 0rpx 0rpx 0rpx;
  635. font-size: 28rpx;
  636. color: #0183FA;
  637. line-height: 150rpx;
  638. text-align: center;
  639. }
  640. }
  641. .liability-unit {
  642. width: 750rpx;
  643. height: 80rpx;
  644. background: #FFFFFF;
  645. border-bottom: 1rpx solid #E0E0E0;
  646. padding: 0 30rpx;
  647. box-sizing: border-box;
  648. display: flex;
  649. justify-content: space-between;
  650. margin-top: 14rpx;
  651. >view:nth-of-type(1) {
  652. font-size: 30rpx;
  653. color: #333333;
  654. line-height: 80rpx;
  655. text-align: left;
  656. }
  657. >view:nth-of-type(2) {
  658. font-size: 30rpx;
  659. color: #666666;
  660. line-height: 80rpx;
  661. text-align: left;
  662. }
  663. }
  664. .small-title {
  665. width: 750rpx;
  666. height: 80rpx;
  667. background: #FFFFFF;
  668. border-bottom: 1rpx solid #E0E0E0;
  669. padding: 0 30rpx;
  670. box-sizing: border-box;
  671. display: flex;
  672. justify-content: space-between;
  673. align-items: center;
  674. >view {
  675. font-size: 30rpx;
  676. color: #333333;
  677. line-height: 80rpx;
  678. text-align: left;
  679. }
  680. >img {
  681. width: 24rpx;
  682. height: 12rpx;
  683. }
  684. }
  685. .sub-head {
  686. width: 750rpx;
  687. height: 80rpx;
  688. background: #fff;
  689. padding: 0 30rpx;
  690. box-sizing: border-box;
  691. display: flex;
  692. justify-content: space-between;
  693. align-items: center;
  694. border-bottom: 1rpx solid #E0E0E0;
  695. >view:nth-of-type(1) {
  696. font-family: PingFang SC;
  697. font-weight: 500;
  698. font-size: 30rpx;
  699. color: #666666;
  700. line-height: 30rpx;
  701. }
  702. >view:nth-of-type(2) {
  703. display: flex;
  704. justify-content: flex-end;
  705. align-items: center;
  706. >img {
  707. width: 34rpx;
  708. height: 34rpx;
  709. margin-right: 14rpx;
  710. }
  711. >view {
  712. font-family: PingFang SC;
  713. font-weight: 500;
  714. font-size: 30rpx;
  715. color: #0183FA;
  716. line-height: 30rpx;
  717. }
  718. }
  719. }
  720. .sub-head:last-child {
  721. border-bottom: none;
  722. }
  723. .small-title-new {
  724. width: 750rpx;
  725. height: 80rpx;
  726. background: #FFFFFF;
  727. border-bottom: 1rpx solid #E0E0E0;
  728. padding: 0 30rpx;
  729. box-sizing: border-box;
  730. display: flex;
  731. justify-content: space-between;
  732. align-items: center;
  733. >view {
  734. font-size: 30rpx;
  735. color: #333333;
  736. line-height: 80rpx;
  737. text-align: left;
  738. }
  739. >img {
  740. width: 24rpx;
  741. height: 12rpx;
  742. }
  743. }
  744. .classify {
  745. .small-items-new {
  746. padding-left: 20rpx;
  747. box-sizing: border-box;
  748. background: #fff;
  749. display: flex;
  750. justify-content: flex-start;
  751. padding: 30rpx;
  752. box-sizing: border-box;
  753. border-bottom: 1rpx solid #E0E0E0;
  754. >view:nth-of-type(1) {
  755. color: #999999;
  756. font-weight: 500;
  757. font-size: 28rpx;
  758. margin-right: 12rpx;
  759. line-height: 34rpx;
  760. }
  761. >view:nth-of-type(2) {
  762. display: block;
  763. font-family: PingFang SC;
  764. font-weight: 500;
  765. font-size: 28rpx;
  766. line-height: 34rpx;
  767. color: #999999;
  768. }
  769. }
  770. .logotype-img-new {
  771. padding: 26rpx 0 34rpx 0;
  772. box-sizing: border-box;
  773. background: #fff;
  774. >img {
  775. display: inline-block;
  776. width: 86rpx;
  777. height: 114rpx;
  778. margin-left: 30rpx;
  779. margin-bottom: 20rpx;
  780. }
  781. }
  782. .small-items {
  783. padding-left: 20rpx;
  784. box-sizing: border-box;
  785. background: #fff;
  786. display: flex;
  787. justify-content: flex-start;
  788. padding: 20rpx;
  789. box-sizing: border-box;
  790. >view:nth-of-type(1) {
  791. color: #999999;
  792. font-weight: 500;
  793. font-size: 28rpx;
  794. margin-right: 12rpx;
  795. line-height: 34rpx;
  796. }
  797. >view:nth-of-type(2) {
  798. display: block;
  799. font-family: PingFang SC;
  800. font-weight: 500;
  801. font-size: 28rpx;
  802. line-height: 34rpx;
  803. color: #999999;
  804. }
  805. }
  806. .logotype {
  807. width: 750rpx;
  808. height: 100rpx;
  809. font-family: PingFang SC;
  810. font-weight: 500;
  811. font-size: 32rpx;
  812. color: #333333;
  813. line-height: 100rpx;
  814. padding-left: 20rpx;
  815. box-sizing: border-box;
  816. background: #0183FA;
  817. color: #fff;
  818. }
  819. .logotype-img {
  820. padding: 26rpx 0 34rpx 0;
  821. box-sizing: border-box;
  822. background: #fff;
  823. >img {
  824. display: inline-block;
  825. width: 86rpx;
  826. height: 114rpx;
  827. margin-left: 30rpx;
  828. margin-bottom: 20rpx;
  829. }
  830. }
  831. }
  832. }
  833. .position-button-box {
  834. position: fixed;
  835. bottom: 26rpx;
  836. display: flex;
  837. justify-content: center;
  838. >img {
  839. width: 130rpx;
  840. height: 130rpx;
  841. }
  842. .position-button-p-1 {
  843. margin-left: 174rpx;
  844. margin-right: 120rpx;
  845. }
  846. .position-button-p-2 {}
  847. }
  848. .shade {
  849. height: 100%;
  850. width: 100%;
  851. position: fixed;
  852. display: flex;
  853. flex-direction: column;
  854. z-index: 200;
  855. background: rgba(0, 0, 0, 0.2);
  856. top: 0;
  857. .null-box {
  858. flex: 1;
  859. }
  860. .shade_n {
  861. position: absolute;
  862. bottom: 0;
  863. left: 0;
  864. width: 750rpx;
  865. height: 466rpx;
  866. background: #FFFFFF;
  867. border-radius: 20rpx 20rpx 0rpx 0rpx;
  868. overflow-y: auto;
  869. .title {
  870. display: flex;
  871. justify-content: space-between;
  872. align-items: center;
  873. padding: 0 50rpx 0 284rpx;
  874. box-sizing: border-box;
  875. border-bottom: 1rpx solid #E0E0E0;
  876. >view {
  877. font-size: 30rpx;
  878. color: #3D3D3D;
  879. line-height: 90rpx;
  880. text-align: left;
  881. }
  882. >img {
  883. width: 24rpx;
  884. height: 12rpx;
  885. }
  886. }
  887. .batch {
  888. padding: 0 30rpx;
  889. box-sizing: border-box;
  890. .batch-li {
  891. display: flex;
  892. justify-content: space-between;
  893. align-items: center;
  894. border-bottom: 1rpx solid #E0E0E0;
  895. padding: 20rpx 0 16rpx 0rpx;
  896. box-sizing: border-box;
  897. .batch-li-l {
  898. >text:nth-of-type(1) {
  899. display: block;
  900. font-size: 30rpx;
  901. color: #333333;
  902. line-height: 42rpx;
  903. text-align: left;
  904. }
  905. >text:nth-of-type(2) {
  906. display: block;
  907. font-size: 28rpx;
  908. color: #666666;
  909. line-height: 39rpx;
  910. text-align: left;
  911. margin-top: 6rpx;
  912. }
  913. }
  914. .batch-li-r {
  915. font-size: 28rpx;
  916. color: #666666;
  917. line-height: 39rpx;
  918. text-align: left;
  919. display: flex;
  920. justify-content: flex-start;
  921. align-items: center;
  922. >img {
  923. width: 24rpx;
  924. height: 24rpx;
  925. margin-left: 9rpx;
  926. }
  927. }
  928. }
  929. }
  930. }
  931. }
  932. }
  933. </style>