addAir.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. <template>
  2. <view class="container">
  3. <view class="line"></view>
  4. <view class="show-selected">
  5. <view class="title-selected">已选择:</view>
  6. <view class="air-selected-name">{{show_airs}}</view>
  7. </view>
  8. <view class="btn">
  9. <view class="btn-bg" @tap="confirm_selection">确认选择</view>
  10. </view>
  11. <view class="line"></view>
  12. <view class="title-tip">请选择</view>
  13. <view class="line"></view>
  14. <view class="tree-box">
  15. <scroll-view scroll-y="true" class="tree-scroll" :style="{height: screenHeight}">
  16. <!-- 校区 -->
  17. <view class="item-school" v-for="(item0, index0) in treeData" :key="index0">
  18. <view class="school" :id="item0.id" @tap="handle_toggle_items">
  19. <view>{{item0.label}}</view>
  20. <uni-icons type="top" size="22" color="#ffffff" :style="{display: item0.isShow ? '' : 'none'}">
  21. </uni-icons>
  22. <uni-icons type="bottom" size="22" color="#ffffff"
  23. :style="{display: item0.isShow ? 'none' : ''}">
  24. </uni-icons>
  25. </view>
  26. <!-- 楼栋 -->
  27. <view class="item-loudong" v-for="(item1, index1) in item0.children" :key="index1"
  28. :style="{display: item0.isShow ? '' : 'none'}">
  29. <view class="loudong" :id="item1.id" @tap="handle_toggle_items">
  30. <view class="title-loudong">
  31. <uni-icons type="plus-filled" size="22" color="#2979ff"
  32. :style="{display: item1.isShow ? 'none' : ''}"></uni-icons>
  33. <uni-icons type="minus-filled" size="22" color="#2979ff"
  34. :style="{display: item1.isShow ? '' : 'none'}"></uni-icons>
  35. <view class="txt-loudong">{{item1.label}}</view>
  36. </view>
  37. <uni-icons type="top" size="22" color="#2979ff"
  38. :style="{display: item1.isShow ? '' : 'none'}"></uni-icons>
  39. <uni-icons type="bottom" size="22" color="#2979ff"
  40. :style="{display: item1.isShow ? 'none' : ''}">
  41. </uni-icons>
  42. </view>
  43. <!-- 楼层 -->
  44. <view class="item-loucheng" v-for="(item2, index2) in item1.children" :key="index2"
  45. :style="{display: item1.isShow ? '' : 'none'}">
  46. <view class="loucheng" :id="item2.id" @tap="handle_toggle_items">
  47. <view class="title-loucheng">
  48. <uni-icons type="plus-filled" size="22" color="#2979ff"
  49. :style="{display: item2.isShow ? 'none' : ''}"></uni-icons>
  50. <uni-icons type="minus-filled" size="22" color="#2979ff"
  51. :style="{display: item2.isShow ? '' : 'none'}"></uni-icons>
  52. <view class="txt-loucheng">{{item2.label}}</view>
  53. </view>
  54. <uni-icons type="top" size="22" color="#2979ff"
  55. :style="{display: item2.isShow ? '' : 'none'}"></uni-icons>
  56. <uni-icons type="bottom" size="22" color="#2979ff"
  57. :style="{display: item2.isShow ? 'none' : ''}"></uni-icons>
  58. </view>
  59. <!-- 教室、房间 -->
  60. <view class="item-jiaoshi" v-for="(item3, index3) in item2.children" :key="index3"
  61. :style="{display: item2.isShow ? '' : 'none'}">
  62. <view class="jiaoshi" :id="item3.id"
  63. @tap="get_air_in_the_room($event, item0.id + '|' + item1.id + '|' + item2.id + '|' + item3.id, item0.label + '|' + item1.label + '|'+ item2.label + '|' + item3.label, item3.isShow)">
  64. <view class="title-jiaoshi">
  65. <uni-icons type="plus-filled" size="22" color="#2979ff"
  66. :style="{display: item3.isShow ? 'none' : ''}"></uni-icons>
  67. <uni-icons type="minus-filled" size="22" color="#2979ff"
  68. :style="{display: item3.isShow ? '' : 'none'}"></uni-icons>
  69. <view class="txt-jiaoshi">{{item3.label.split('-')[1]}}</view>
  70. </view>
  71. <uni-icons type="top" size="22" color="#2979ff"
  72. :style="{display: item3.isShow ? '' : 'none'}"></uni-icons>
  73. <uni-icons type="bottom" size="22" color="#2979ff"
  74. :style="{display: item3.isShow ? 'none' : ''}"></uni-icons>
  75. </view>
  76. <!-- 空调 -->
  77. <view v-for="(item4, index4) in item3.children" :key="index4"
  78. :style="{display: item3.isShow ? '' : 'none'}">
  79. <view class="item-kongtiao" v-if="item4.isUsering">
  80. <view :style="{color: item4.isUsering ? '#dc0000' : '#2979ff'}">
  81. {{item4.label}}(使用中)
  82. </view>
  83. <checkbox :value="index4" :id="item4.id" :checked="item4.isChecked"
  84. @tap="handle_kongtiao" />
  85. </view>
  86. <view class="item-kongtiao" v-else>
  87. <view :style="{color: item4.isUsering ? '#dc0000' : '#2979ff'}">
  88. {{item4.label}}
  89. </view>
  90. <checkbox :value="index4" :id="item4.id" :checked="item4.isChecked"
  91. @tap="handle_kongtiao" />
  92. </view>
  93. </view>
  94. </view>
  95. </view>
  96. </view>
  97. </view>
  98. </scroll-view>
  99. </view>
  100. </view>
  101. </template>
  102. <script>
  103. export default {
  104. data() {
  105. return {
  106. ceshi: 'air',
  107. id_card: '', // 身份证号
  108. user_name: '', // 姓名
  109. airs_selected: '', //
  110. return_selected_airs: '', // 用于返回到上一页面的结果变量
  111. show_airs: '', // 用于显示已经选择的空调
  112. treeData: [], // 树形选择器的数据,目录树treeData
  113. airsData: [], // 点击教室的时候,获取该教室的空调数据
  114. screenHeight: '' // 屏幕的高度
  115. };
  116. },
  117. onLoad(options) {
  118. uni.showLoading({
  119. title: '加载中'
  120. })
  121. // 获取表格数据
  122. this.getTableData()
  123. setTimeout(() => {
  124. uni.hideLoading();
  125. }, 500);
  126. // 获取身份证号
  127. this.get_base_info(options)
  128. },
  129. onShow() {
  130. // 从新计算高度
  131. setTimeout(() => {
  132. this.calc_screen_height()
  133. }, 1500)
  134. },
  135. methods: {
  136. /**
  137. * 获取身份证号
  138. */
  139. get_base_info(options) {
  140. try {
  141. if (this.id_card == '' || typeof(this.id_card) == 'undefined') {
  142. const userinfo = uni.getStorageSync('userinfo_storage_key')
  143. if (userinfo) {
  144. this.id_card = userinfo.id_card
  145. this.user_name = userinfo.name
  146. } else {
  147. uni.navigateTo({
  148. url: '../../pages/index/index?from=' + options.from
  149. })
  150. uni.showToast({
  151. icon: 'none',
  152. title: '身份证号为空,请进行授权',
  153. duration: 3000
  154. });
  155. return
  156. }
  157. }
  158. } catch (e) {
  159. console.log('获取基本信息:' + e.message);
  160. }
  161. },
  162. /**
  163. * 点击房间,显示空调
  164. * @param {Object} e
  165. * @param {Object} id
  166. * @param {Object} label
  167. * @param {Object} rooms
  168. */
  169. async get_air_in_the_room(e, id, label, isShow) {
  170. let ids = id.split('|')
  171. let labels = label.split('|')
  172. // console.log(ids);
  173. // console.log(labels);
  174. // 展开或收起
  175. this.handle_toggle_items(e)
  176. // 展开时获取接口空调信息
  177. if (false === isShow) {
  178. const res = await this.$myRequest({
  179. host: this.ceshi,
  180. url: '/airManage/buildairqueryAirMes.action',
  181. method: 'POST',
  182. header: {
  183. 'content-type': 'application/x-www-form-urlencoded'
  184. },
  185. data: {
  186. school: labels[0],
  187. build: labels[1],
  188. floors: labels[2],
  189. dom: labels[3]
  190. }
  191. })
  192. // console.log(res.data);
  193. let data = res.data
  194. if (typeof data.code === 'undefined') {
  195. uni.showToast({
  196. title: '未找到code!',
  197. icon: 'success'
  198. });
  199. return
  200. }
  201. if (data.code === 200 && typeof data.data !== 'undefined') {
  202. // 清空
  203. this.airsData = []
  204. for (var i = 0; i < data.data.length; i++) {
  205. this.airsData.push({
  206. isUsering: data.data[i].is_on == 1 ? true : false,
  207. label: data.data[i].air_name + '-' + data.data[i].air_config,
  208. isChecked: false,
  209. id: data.data[i].air_ip
  210. })
  211. }
  212. // 排序
  213. this.airsData.sort((a, b) => a.label.localeCompare(b.label))
  214. if (this.airsData.length > 0) {
  215. // 填充数据
  216. this.insert_into_treeData_rooms(this.treeData, ids[3])
  217. }
  218. } else {
  219. uni.showToast({
  220. title: '该房间未配空调'
  221. });
  222. }
  223. }
  224. },
  225. /**
  226. * 填充空调到教室下面,供选择
  227. * @param {Object} obj
  228. * @param {Object} id
  229. */
  230. insert_into_treeData_rooms(obj, id) {
  231. for (var i = 0; i < obj.length; i++) {
  232. if (obj[i].id == id) {
  233. obj[i].children = this.airsData
  234. return
  235. }
  236. if (typeof obj[i].children != 'undefined' && obj[i].children.length > 0) {
  237. this.insert_into_treeData_rooms(obj[i].children, id)
  238. }
  239. }
  240. },
  241. /**
  242. * 树形选择器的数据
  243. */
  244. async getTableData() {
  245. const res = await this.$myRequest({
  246. host: this.ceshi,
  247. url: '/airManage/buildqueryDom.action',
  248. method: 'POST',
  249. header: {
  250. 'content-type': 'application/x-www-form-urlencoded'
  251. }
  252. })
  253. // console.log(res.data);
  254. if (typeof res.data.code === 'undefined') {
  255. uni.showToast({
  256. title: '未找到code!',
  257. icon: 'success'
  258. });
  259. return
  260. }
  261. if (typeof res.data.data === 'undefined') {
  262. uni.showToast({
  263. title: '未返回数据data!',
  264. icon: 'success'
  265. });
  266. return
  267. }
  268. if (res.data.code === 200) {
  269. let data = res.data.data
  270. // 校区
  271. let school = JSON.parse(data)
  272. // console.log('school', school);
  273. if (typeof school !== 'undefined' && school !== '') {
  274. this.treeData = []
  275. let tmpSchool = []
  276. for (var i = 0; i < school.length; i++) {
  277. let nData = []
  278. let builds = school[i]["builds"]
  279. for (var j = 0; j < builds.length; j++) {
  280. let tmpBuilds = {}
  281. let tmpFloors = []
  282. let floors = builds[j]['floors']
  283. for (var k = 0; k < floors.length; k++) {
  284. let room = []
  285. let tmpRooms = []
  286. let rooms = floors[k].rooms
  287. for (var p = 0; p < rooms.length; p++) {
  288. room.push({
  289. id: school[i].id + '' + builds[j].id + '' + floors[k].id + '' + i +
  290. '' + j + '' + k + '' + p,
  291. isShow: false,
  292. label: rooms[p],
  293. children: []
  294. })
  295. }
  296. // 房间排序
  297. room.sort((a, b) => a.label.localeCompare(b.label));
  298. let floor = {
  299. id: floors[k].id,
  300. label: floors[k].floor,
  301. isShow: false,
  302. children: room
  303. }
  304. tmpFloors.push(floor)
  305. }
  306. // 楼层排序
  307. tmpFloors.sort((a, b) => {
  308. return a - b;
  309. })
  310. tmpBuilds.id = builds[j].id
  311. tmpBuilds.label = builds[j].building
  312. tmpBuilds.isShow = false
  313. tmpBuilds.children = []
  314. tmpBuilds.children = tmpFloors
  315. nData.push(tmpBuilds)
  316. }
  317. // 栋排序
  318. nData.sort((a, b) => a.label.localeCompare(b.label))
  319. tmpSchool.push({
  320. id: school[i].id,
  321. label: school[i].school,
  322. isShow: true,
  323. children: nData
  324. })
  325. }
  326. // 校区排序
  327. tmpSchool.sort((a, b) => b.label.localeCompare(a.label))
  328. this.treeData = tmpSchool
  329. // console.log(JSON.stringify(this.treeData));
  330. } else {
  331. this.treeData = []
  332. uni.showToast({
  333. title: '无符合的数据!'
  334. });
  335. }
  336. } else {
  337. uni.showToast({
  338. title: res.data.message,
  339. icon: 'success'
  340. });
  341. }
  342. },
  343. /**
  344. * 获取空调的全称,勾选返回空调全称,不勾返回-空调全称,递归调用
  345. * @param {Object} obj
  346. * @param {Object} id
  347. * @param {Object} parentName
  348. */
  349. get_airs_full_name(obj, id, parentName) {
  350. for (var i = 0; i < obj.length; i++) {
  351. if (obj[i].id == id) {
  352. if (parentName == '') {
  353. return obj[i].label
  354. }
  355. if (obj[i].isChecked) {
  356. obj[i].isChecked = false
  357. return '+' + parentName + ' ' + obj[i].label
  358. } else {
  359. obj[i].isChecked = true
  360. return parentName + ' ' + obj[i].label
  361. }
  362. }
  363. let selfName = ''
  364. if (typeof obj[i].children !== 'undefined' && obj[i].children.length > 0) {
  365. if (parentName == '') {
  366. selfName = this.get_airs_full_name(obj[i].children, id, obj[i].label)
  367. } else {
  368. selfName = this.get_airs_full_name(obj[i].children, id, parentName + '+' + obj[i].label)
  369. }
  370. if (typeof selfName !== 'undefined') {
  371. return selfName
  372. }
  373. }
  374. }
  375. },
  376. /**
  377. * 获取空调的ids
  378. * @param {Object} obj
  379. * @param {Object} id
  380. */
  381. get_airs_ids() {
  382. let airs_selected_ids = ''
  383. let obj0 = this.treeData
  384. for (var i = 0; i < obj0.length; i++) {
  385. if (typeof obj0[i].children !== 'undefined' && obj0[i].children.length > 0) {
  386. let obj1 = obj0[i].children
  387. for (var j = 0; j < obj1.length; j++) {
  388. if (typeof obj1[j].children !== 'undefined' && obj1[j].children.length > 0) {
  389. let obj2 = obj1[j].children
  390. for (var k = 0; k < obj2.length; k++) {
  391. if (typeof obj2[k].children !== 'undefined' && obj2[k].children.length > 0) {
  392. let obj3 = obj2[k].children
  393. for (var p = 0; p < obj3.length; p++) {
  394. if (typeof obj3[p].children !== 'undefined' && obj3[p].children.length > 0) {
  395. let obj4 = obj3[p].children
  396. for (var u = 0; u < obj4.length; u++) {
  397. if (obj4[u].isChecked) {
  398. airs_selected_ids += obj0[i].label + '-' + obj1[j].label + '-' +obj2[k]
  399. .label + '-' + obj3[p].label + '|' + obj4[u].label + '|' +obj4[u].id + ','
  400. }
  401. }
  402. }
  403. }
  404. }
  405. }
  406. }
  407. }
  408. }
  409. }
  410. this.return_selected_airs = airs_selected_ids.substring(0, airs_selected_ids.length - 1);
  411. },
  412. /**
  413. * 更新airs_selected中的数据
  414. * @param {Object} param
  415. */
  416. update_airs_selected(param) {
  417. let tmp_airs_selected = ''
  418. if (param.indexOf('+') == 0) { // 删除airs_selected中的数据
  419. // 把前面的'+'去除
  420. let del_val = param.substring(1)
  421. // 需要删除的值进行拆分成:【楼栋+楼层+房间, 空调】
  422. let room = del_val.split(' ')
  423. if (this.airs_selected.trim() !== '') {
  424. let arrAirs = this.airs_selected.trim().split(',')
  425. let airs = ''
  426. for (var i = 0; i < arrAirs.length; i++) {
  427. airs = arrAirs[i].trim() // 删除空格后,赋给临时变量
  428. // 如果找到指定的房间,则删除
  429. if (airs.indexOf(room[0]) == 0) {
  430. // 删除 楼栋-楼层-房间 中的空调
  431. airs = airs.replace(' ' + room[1], '')
  432. // 如果只剩下 楼栋-楼层-房间,没有了空调,则置为空
  433. if (airs == room[0]) {
  434. airs = ''
  435. }
  436. }
  437. if (airs !== '') {
  438. // 保存到临时变量tmp_airs_selected中
  439. tmp_airs_selected += airs + ','
  440. }
  441. }
  442. }
  443. } else { // 添加、合并到airs_selected中
  444. // 如果为空,直接加入
  445. if (this.airs_selected.trim() == '') {
  446. tmp_airs_selected = param + ','
  447. } else {
  448. let arrAirs = this.airs_selected.trim().split(',')
  449. let num = 0
  450. // 需要添加的数据
  451. let room = param.split(' ')
  452. for (var i = 0; i < arrAirs.length; i++) {
  453. let airs = arrAirs[i].trim().split(' ')
  454. // 如果找到指定的房间,则合并
  455. if (airs[0] == room[0]) {
  456. // 临时数组, 为排序做准备
  457. let tmp_arr = []
  458. // 数组转字符串, 即拼接
  459. tmp_arr.push(room[1])
  460. for (var j = 1; j < airs.length; j++) {
  461. tmp_arr.push(airs[j])
  462. }
  463. // 数组排序
  464. tmp_arr.sort()
  465. // 生成字符串
  466. tmp_airs_selected += room[0]
  467. for (var k = 0; k < tmp_arr.length; k++) {
  468. tmp_airs_selected += ' ' + tmp_arr[k]
  469. }
  470. // 加入分隔符
  471. tmp_airs_selected += ','
  472. } else {
  473. num++ // 计数
  474. tmp_airs_selected += arrAirs[i] + ','
  475. }
  476. }
  477. // 如果没有找到同一房间的,则直接拼接要添加的数据
  478. if (num == arrAirs.length) {
  479. tmp_airs_selected += param + ','
  480. }
  481. }
  482. }
  483. // 更新变量airs_selected
  484. this.airs_selected = tmp_airs_selected.substring(0, tmp_airs_selected.length - 1)
  485. // 更新显示框的内容
  486. this.show_selected_airs()
  487. },
  488. /**
  489. * 选择空调
  490. * @param {Object} e
  491. */
  492. handle_kongtiao(e) {
  493. // console.log(e.currentTarget.id);
  494. // 获取id
  495. let id = e.currentTarget.id
  496. // 获取勾选的值
  497. let airsFullName = this.get_airs_full_name(this.treeData, id, '')
  498. // 获取所有选中的id
  499. this.get_airs_ids()
  500. if (typeof airsFullName !== 'undefined') {
  501. // 更新airs_selected中的数据
  502. this.update_airs_selected(airsFullName)
  503. } else {
  504. uni.showToast({
  505. title: '选取无效!',
  506. duration: 1500
  507. })
  508. }
  509. },
  510. /**
  511. * 选项的展开与收起,进行切换,递归调用
  512. * @param {Object} obj
  513. * @param {Object} id
  514. */
  515. toggle_item(obj, id) {
  516. for (var i = 0; i < obj.length; i++) {
  517. if (obj[i].id == id) {
  518. if (obj[i].isShow) {
  519. obj[i].isShow = false
  520. } else {
  521. obj[i].isShow = true
  522. }
  523. return
  524. }
  525. if (typeof obj[i].children != 'undefined' && obj[i].children.length > 0) {
  526. this.toggle_item(obj[i].children, id)
  527. }
  528. }
  529. },
  530. /**
  531. * 选项的展开与收起,进行切换
  532. * @param {Object} e
  533. */
  534. handle_toggle_items(e) {
  535. // console.log(e.currentTarget.id);
  536. // 获取id
  537. let id = e.currentTarget.id
  538. this.toggle_item(this.treeData, id)
  539. },
  540. /**
  541. * 确认选择,将结果返回到前一页面显示
  542. */
  543. confirm_selection() {
  544. // 触发全局的自定义事件,附加参数都会传给监听器回调函数。
  545. if (this.return_selected_airs !== '') {
  546. // 保存到数据库
  547. let arrAirs = this.return_selected_airs.trim().split(',').sort()
  548. for (var i = 0; i < arrAirs.length; i++) {
  549. let tmpAirs = arrAirs[i].split('|');
  550. let _this = this;
  551. // 绑定空调
  552. (function(t, air_ip) {
  553. setTimeout(function() {
  554. _this.bangding_airs(air_ip);
  555. }, 100 * t);
  556. })(i, tmpAirs[2])
  557. }
  558. uni.$emit('selectAirs', {
  559. sel_airs: this.return_selected_airs
  560. });
  561. }
  562. setTimeout(()=>{
  563. // 返回空调列表页面
  564. uni.navigateTo({
  565. url: '/pagesAir/shareAir/shareAir'
  566. });
  567. }, 1000);
  568. },
  569. /**
  570. * 绑定空调
  571. * @param {Object} air_id
  572. */
  573. async bangding_airs(air_id) {
  574. const res = await this.$myRequest({
  575. host: this.ceshi,
  576. url: '/airManage/usersbdair.action',
  577. method: 'POST',
  578. header: {
  579. 'content-type': 'application/json'
  580. },
  581. data: {
  582. user_name: this.user_name,
  583. sfzh: this.id_card,
  584. air_ip: air_id
  585. }
  586. })
  587. // console.log(res.data);
  588. if (res.data.code == 200) {
  589. uni.showToast({
  590. icon: 'none',
  591. title: res.data.message,
  592. duration: 3000
  593. })
  594. } else {
  595. uni.showToast({
  596. icon: 'none',
  597. title: res.data.message,
  598. duration: 3000
  599. })
  600. }
  601. },
  602. /**
  603. * 超出左边显示"..."
  604. */
  605. show_selected_airs() {
  606. // 显示到上方
  607. this.show_airs = this.airs_selected.split('').reverse().join('').replaceAll('(', '>').replaceAll(')', '<')
  608. .replaceAll('>', ')').replaceAll('<', '(')
  609. },
  610. /**
  611. * 计算屏幕的高度
  612. */
  613. calc_screen_height() {
  614. uni.getSystemInfo({
  615. success: res => {
  616. let h = ((res.screenHeight * (750 / res.windowWidth)) - 480) //将px 转换rpx
  617. this.screenHeight = Math.floor(h) + 'rpx'
  618. }
  619. });
  620. }
  621. }
  622. }
  623. </script>
  624. <style lang="scss" scoped>
  625. .container {
  626. display: flex;
  627. flex-direction: column;
  628. font-size: 28rpx;
  629. font-family: "Microsoft YaHei-3970(82674968)";
  630. width: 730rpx;
  631. padding: 10rpx;
  632. .line {
  633. height: 20rpx;
  634. }
  635. .show-selected {
  636. display: flex;
  637. padding: 20rpx;
  638. border-radius: 10rpx;
  639. border: 1px solid #c7c9ce;
  640. font-size: 32rpx;
  641. .title-selected {
  642. color: #686b71;
  643. white-space: nowrap;
  644. }
  645. .air-selected-name {
  646. width: 600rpx;
  647. font-weight: bold;
  648. white-space: nowrap;
  649. text-overflow: ellipsis;
  650. direction: rtl;
  651. unicode-bidi: bidi-override;
  652. overflow: hidden;
  653. }
  654. }
  655. .btn {
  656. display: flex;
  657. justify-content: flex-end;
  658. .btn-bg {
  659. margin-top: 30rpx;
  660. padding: 20rpx 40rpx;
  661. border-radius: 10rpx;
  662. font-size: 32rpx;
  663. color: #ffffff;
  664. background-color: #2979ff;
  665. }
  666. }
  667. .title-tip {
  668. font-size: 36rpx;
  669. }
  670. .tree-box {
  671. border-radius: 10rpx;
  672. border: 1px solid #c7c9ce;
  673. color: #2979ff;
  674. .tree-scroll {
  675. border-radius: 10rpx;
  676. overflow: scroll;
  677. }
  678. .item-school {
  679. display: flex;
  680. flex-direction: column;
  681. padding: 10rpx 0 0 10rpx;
  682. .school {
  683. display: flex;
  684. align-items: center;
  685. justify-content: space-between;
  686. background-color: #2979ff;
  687. color: #ffffff;
  688. padding: 10rpx 10rpx 10rpx 20rpx;
  689. height: 60rpx;
  690. width: 668rpx;
  691. font-size: 30rpx;
  692. }
  693. .item-loudong {
  694. display: flex;
  695. flex-direction: column;
  696. padding: 10rpx 0 0 10rpx;
  697. margin-left: 30rpx;
  698. .loudong {
  699. display: flex;
  700. align-items: center;
  701. justify-content: space-between;
  702. border: 1rpx solid #c7c9ce;
  703. padding: 10rpx;
  704. height: 60rpx;
  705. width: 636rpx;
  706. font-size: 30rpx;
  707. .title-loudong {
  708. display: flex;
  709. }
  710. .txt-loudong {
  711. padding-left: 5rpx;
  712. }
  713. }
  714. .item-loucheng {
  715. display: flex;
  716. flex-direction: column;
  717. margin-left: 60rpx;
  718. .loucheng {
  719. display: flex;
  720. align-items: center;
  721. justify-content: space-between;
  722. border: 1rpx solid #c7c9ce;
  723. padding: 10rpx;
  724. height: 60rpx;
  725. width: 578rpx;
  726. font-size: 30rpx;
  727. .title-loucheng {
  728. display: flex;
  729. }
  730. .txt-loucheng {
  731. padding-left: 5rpx;
  732. }
  733. }
  734. .item-jiaoshi {
  735. display: flex;
  736. flex-direction: column;
  737. margin-left: 60rpx;
  738. .jiaoshi {
  739. display: flex;
  740. align-items: center;
  741. justify-content: space-between;
  742. border: 1rpx solid #c7c9ce;
  743. padding: 10rpx;
  744. height: 60rpx;
  745. width: 520rpx;
  746. font-size: 30rpx;
  747. .title-jiaoshi {
  748. display: flex;
  749. }
  750. .txt-jiaoshi {
  751. padding-left: 5rpx;
  752. }
  753. }
  754. .item-kongtiao {
  755. display: flex;
  756. justify-content: space-between;
  757. align-items: center;
  758. border: 1rpx solid #c7c9ce;
  759. margin-left: 60rpx;
  760. padding: 10rpx 10rpx 10rpx 30rpx;
  761. height: 60rpx;
  762. width: 442rpx;
  763. font-size: 32rpx;
  764. }
  765. }
  766. }
  767. }
  768. }
  769. }
  770. }
  771. </style>