Tool.vue 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583
  1. <template>
  2. <div class="tool">
  3. <ul class="func">
  4. <li
  5. v-for="(item, index) in funcList"
  6. :key="index"
  7. :class="{ active: item.active }"
  8. @click="toolClickHandle(item)"
  9. >
  10. <p></p>
  11. <!-- {{ item.label }} -->
  12. </li>
  13. </ul>
  14. <div
  15. :class="{ help: true, active: helpActive }"
  16. v-show="false"
  17. @click="showHelp"
  18. ></div>
  19. <!-- 展示索引页面 -->
  20. <van-popup
  21. v-model:show="indexesShow"
  22. :class="'indexesListContent'"
  23. :style="{ background: 'transparent' }"
  24. :close-on-click-overlay="false"
  25. :closed="hideIndexesInfoDailog"
  26. >
  27. <!-- closeable
  28. close-icon="close" -->
  29. <div class="indexesList">
  30. <!-- <div class="header">
  31. <span>青浦行政服务中心</span>
  32. </div> -->
  33. <div class="listContent">
  34. <div class="header">
  35. <!-- <span>青浦行政服务中心</span> -->
  36. </div>
  37. <!-- <div class="title_container">
  38. <ul>
  39. <li
  40. v-for="(item, index) in cameraInfo"
  41. :key="index"
  42. :class="{ active: item.active }"
  43. @click="changeFloor(item)"
  44. >
  45. {{ item.name }}
  46. </li>
  47. </ul>
  48. </div> -->
  49. <div class="list_container">
  50. <div>
  51. <div
  52. class="first_content"
  53. v-for="(item, index) in cameraInfo"
  54. :key="index"
  55. >
  56. <div class="title">{{ item.name }}</div>
  57. <ul>
  58. <li
  59. v-for="(item_, index_) in item.children"
  60. :key="index_"
  61. :class="{ active: item_.active }"
  62. @click="changeView(item_)"
  63. >
  64. {{ item_.name }}
  65. </li>
  66. </ul>
  67. </div>
  68. </div>
  69. <!-- <ul>
  70. <li
  71. v-for="(item, index) in cameraInfoChildren"
  72. :key="index"
  73. :class="{ active: item.active }"
  74. @click="changeView(item)"
  75. >
  76. {{ item.name }}
  77. </li>
  78. </ul> -->
  79. </div>
  80. </div>
  81. </div>
  82. <div
  83. class="close"
  84. @click="hideIndexesInfoDailog"
  85. ></div>
  86. </van-popup>
  87. <!-- 展示点位文字信息 -->
  88. <van-popup
  89. v-model:show="pointShow"
  90. class="point_popup"
  91. :style="{ background: 'transparent' }"
  92. :close-on-click-overlay="false"
  93. :closed="hidePointInfoDailog"
  94. >
  95. <div class="pointInfoContent">
  96. <div v-html="pointInfos"></div>
  97. </div>
  98. <div
  99. class="close"
  100. @click="hidePointInfoDailog"
  101. ></div>
  102. </van-popup>
  103. <!-- 展示平面图 -->
  104. <van-popup
  105. v-model:show="planeShow"
  106. class="plane_popup"
  107. :style="{ background: 'transparent' }"
  108. :close-on-click-overlay="false"
  109. :closed="hidePlaneInfoDailog"
  110. >
  111. <!-- :style="{
  112. height: '460px',
  113. width: '100%',
  114. top: '55%',
  115. background: 'transparent',
  116. }" -->
  117. <div class="plane_container">
  118. <div class="image_container">
  119. <ul>
  120. <li
  121. v-for="(item, index) in planeArr"
  122. :key="index"
  123. v-show="item.active"
  124. >
  125. <img
  126. :src="item.src"
  127. alt=""
  128. />
  129. </li>
  130. <div
  131. class="close"
  132. @click="hidePlaneInfoDailog"
  133. ></div>
  134. </ul>
  135. </div>
  136. <div class="image_header">
  137. <ul>
  138. <li
  139. v-for="(item, index) in planeArr"
  140. :key="index"
  141. :class="{ active: item.active }"
  142. @click="choosePlane(index)"
  143. >
  144. {{ item.name }}
  145. </li>
  146. </ul>
  147. </div>
  148. </div>
  149. </van-popup>
  150. <!-- 展示帮助 -->
  151. <van-popup
  152. v-model:show="helpShow"
  153. class="help_popup"
  154. :style="{
  155. height: '180px',
  156. width: '75%',
  157. top: '50%',
  158. background: 'transparent'
  159. }"
  160. :close-on-click-overlay="false"
  161. :closed="hideHelpInfoDailog"
  162. >
  163. <div class="help_container">
  164. <div class="header">提示</div>
  165. <div class="content">
  166. 1. 选择模型中“ <span></span> ”可以移动,支持360°旋转
  167. <div>2. 使用工具栏内“索引”功能,可快速切换场景</div>
  168. </div>
  169. </div>
  170. <div
  171. class="close"
  172. @click="hideHelpInfoDailog"
  173. ></div>
  174. </van-popup>
  175. <!-- 展示点位可办事项 -->
  176. <van-popup
  177. v-model:show="doThingShow"
  178. class="doThing_popup"
  179. :style="{ background: 'transparent' }"
  180. :close-on-click-overlay="false"
  181. :closed="hidePointInfoDailog"
  182. >
  183. <div class="content">
  184. <div
  185. class="doThingFirstContent"
  186. v-if="doThingFirst.length != 0 && Object.getOwnPropertyNames(doThingSecond).length == 0"
  187. >
  188. <div class="header">部门</div>
  189. <div class="list">
  190. <ul>
  191. <li
  192. v-for="(item, index) in doThingFirst"
  193. :key="index"
  194. @click="chooseDBSecond(item)"
  195. >
  196. <span>{{ item.unit }}</span>
  197. <span v-if="item.chiles">({{ item.chiles.length }})</span>
  198. </li>
  199. </ul>
  200. </div>
  201. </div>
  202. <div
  203. class="doThingSecondContent"
  204. v-if="Object.getOwnPropertyNames(doThingSecond).length != 0"
  205. >
  206. <div class="header">青浦区{{ doThingSecond.unit }}</div>
  207. <div class="list">
  208. <van-collapse
  209. v-model="activeNames"
  210. accordion
  211. >
  212. <div
  213. v-for="(item, index) in doThingSecond.chiles"
  214. :key="index"
  215. >
  216. <van-collapse-item
  217. :title="item.name"
  218. :name="index + 1 + ''"
  219. v-if="item.chiles[0].name.length != 0"
  220. >
  221. <ul>
  222. <li
  223. v-for="(item_, index_) in item.chiles"
  224. :key="index_"
  225. @click="searchInfoAndJump(item_)"
  226. >
  227. {{ item_.name }}
  228. </li>
  229. </ul>
  230. </van-collapse-item>
  231. <span
  232. class="item"
  233. @click="searchInfoAndJump(item.chiles[0])"
  234. v-else
  235. >
  236. {{ item.name }}
  237. </span>
  238. </div>
  239. </van-collapse>
  240. </div>
  241. </div>
  242. </div>
  243. <div
  244. class="close"
  245. @click="closeDoThingPopup"
  246. ></div>
  247. <!-- v-if="Object.getOwnPropertyNames(doThingSecond).length == 0" -->
  248. <div
  249. class="back"
  250. @click="backDoThingPopup"
  251. v-if="Object.getOwnPropertyNames(doThingSecond).length != 0"
  252. ></div>
  253. </van-popup>
  254. <!-- 事项库 -->
  255. <van-popup
  256. v-model:show="showEventState"
  257. class="plane_popup"
  258. :style="{
  259. background: 'transparent'
  260. }"
  261. :close-on-click-overlay="false"
  262. :closed="hideEventListDailog"
  263. >
  264. <div class="plane_container_event">
  265. <div
  266. class="close"
  267. @click="hideEventListDailog"
  268. ></div>
  269. <div class="paramsBox">
  270. 关键字:<input
  271. type="text"
  272. v-model="eventData.params.where"
  273. /> 当前页:<input
  274. type="number"
  275. v-model="eventData.params.page"
  276. />
  277. 每页数:<input
  278. type="number"
  279. v-model="eventData.params.pageSize"
  280. />
  281. <div class="paramBtuBox">
  282. <div
  283. class="paramBtu"
  284. @click="reSetParam()"
  285. >重置</div>
  286. <div
  287. class="paramBtu"
  288. @click="showEvent()"
  289. >查询</div>
  290. </div>
  291. </div>
  292. <p
  293. v-for="(item, index) in eventData.data"
  294. :key="'event_' + index"
  295. >
  296. <span
  297. v-if="(item.link_ck || item.jsfs_ck) && (item.link_ws || item.jsfs_ws)"
  298. @click="windowOpenNewPage(item.link_ws || item.jsfs_ws)"
  299. >{{ item.link_ck || item.jsfs_ck }}</span>
  300. </p>
  301. </div>
  302. </van-popup>
  303. <van-popup
  304. v-model:show="tipsShow"
  305. class="tips"
  306. ><van-icon
  307. name="warning-o"
  308. style="color:red;margin-right:5px"
  309. />当前选项暂不支持跳转</van-popup>
  310. </div>
  311. </template>
  312. <script>
  313. import { postform } from "../utils/request.js";
  314. export default {
  315. data() {
  316. return {
  317. indexesTitleShow: false,
  318. indexesTitleStr: "",
  319. funcList: [],
  320. viewClickHandle: null,
  321. indexesShow: false,
  322. pointShow: false,
  323. planeShow: false,
  324. showEventState: false, // 事项库弹窗显示状态
  325. eventData: {
  326. url: systemConfig.eventUrl,
  327. data: [],
  328. params: {
  329. tableName: "ywtb_auditfwzn",
  330. page: 1,
  331. pageSize: 20,
  332. where: "",
  333. },
  334. },
  335. helpShow: false,
  336. doThingShow: false,
  337. pointInfos: "",
  338. doThingFirst: [],
  339. doThingSecond: {},
  340. Exection: null,
  341. cameraInfo: systemConfig.pointInfo.camera,
  342. mark: systemConfig.pointInfo.mark,
  343. positionPoint: systemConfig.positionPoint,
  344. cameraInfoChildren: [],
  345. planeArr: [
  346. {
  347. name: "一层1F",
  348. src: "./static/images/plane/plane1.png",
  349. active: true,
  350. },
  351. {
  352. name: "二层2F",
  353. src: "./static/images/plane/plane2.png",
  354. active: false,
  355. },
  356. {
  357. name: "三层3F",
  358. src: "./static/images/plane/plane3.png",
  359. active: false,
  360. },
  361. ],
  362. activeNames: "0",
  363. helpActive: false,
  364. tipsShow: false,
  365. };
  366. },
  367. mounted() {
  368. let that = this;
  369. this.funcList = [
  370. {
  371. label: "热点",
  372. changeActive: true,
  373. active: true,
  374. clickFunc: this.loadPoint,
  375. },
  376. {
  377. label: "索引",
  378. changeActive: true,
  379. active: false,
  380. clickFunc: this.showIndexes,
  381. },
  382. {
  383. label: "漫游",
  384. changeActive: true,
  385. active: false,
  386. clickFunc: this.lookaround,
  387. },
  388. {
  389. label: "复位",
  390. changeActive: false,
  391. active: false,
  392. clickFunc: this.setViewDefaultlocation,
  393. },
  394. {
  395. label: "平面图",
  396. changeActive: true,
  397. active: false,
  398. clickFunc: this.showPlane,
  399. },
  400. // {
  401. // label: "事项库",
  402. // changeActive: true,
  403. // active: false,
  404. // clickFunc: this.showEvent,
  405. // },
  406. ];
  407. window.cancelLookAround = this.cancelLookAround;
  408. setTimeout(() => {
  409. that.loadPoint(that.funcList[0]);
  410. that.loadPositionPoint();
  411. }, 1000);
  412. },
  413. methods: {
  414. // 事项库跳转
  415. windowOpenNewPage(linkUrl) {
  416. if (linkUrl) {
  417. window.location.href = linkUrl;
  418. }
  419. },
  420. // 工具栏点击事件
  421. toolClickHandle(item) {
  422. if (item.changeActive) item.active = !item.active;
  423. item.clickFunc(item);
  424. },
  425. // 暂无功能的提示
  426. undefinedFunction() {
  427. this.$toast("功能暂未开通");
  428. },
  429. // 展示索引弹窗
  430. showIndexes() {
  431. this.cameraInfo = this.cameraInfo.map(function (tdd) {
  432. tdd.active = false;
  433. return tdd;
  434. });
  435. this.cameraInfo[0].active = true;
  436. this.cameraInfoChildren = this.cameraInfo[0].children;
  437. this.indexesShow = true;
  438. },
  439. // 索引页面关闭
  440. hideIndexesInfoDailog() {
  441. this.indexesShow = false;
  442. this.funcList[1].active = false;
  443. },
  444. // 展示平面图弹窗
  445. showPlane() {
  446. this.planeShow = true;
  447. },
  448. hidePlaneInfoDailog() {
  449. this.planeShow = false;
  450. this.funcList[4].active = false;
  451. },
  452. // 事项库查询条件重置
  453. reSetParam() {
  454. this.eventData.params.where = "";
  455. this.eventData.params.page = 1;
  456. this.eventData.params.pageSize = 20;
  457. this.showEvent();
  458. },
  459. // 展示事项库弹窗
  460. showEvent() {
  461. let params_ = Object.assign({}, this.eventData.params);
  462. if (params_.where) {
  463. params_.where =
  464. "link_ck like '%" +
  465. params_.where +
  466. "%' or jsfs_ck like '%" +
  467. params_.where +
  468. "%'";
  469. }
  470. if (params_.page > 0) {
  471. params_.page -= 1;
  472. }
  473. postform(this.eventData.url, params_).then((res) => {
  474. if (!this.showEventState) {
  475. this.showEventState = true;
  476. }
  477. if (res.code == 200) {
  478. this.eventData.data = res.content;
  479. } else {
  480. this.eventData.message = res.message;
  481. }
  482. });
  483. },
  484. hideEventListDailog() {
  485. this.showEventState = false;
  486. this.funcList[5].active = false;
  487. },
  488. // 帮助弹窗
  489. showHelp() {
  490. this.helpShow = true;
  491. },
  492. hideHelpInfoDailog() {
  493. this.helpShow = false;
  494. },
  495. // 漫游
  496. lookaround(item) {
  497. let that = this;
  498. // 清除场景激活
  499. clearSceneActive();
  500. this.$store.commit("changeFenceng", true);
  501. hideTitle();
  502. // 关闭热点
  503. if (this.funcList[0].active == true) {
  504. this.funcList[0].active = false;
  505. this.funcList[0].clickFunc(this.funcList[0]);
  506. }
  507. // 叫号隐藏
  508. if (closeJH) closeJH();
  509. if (hideJH) hideJH();
  510. closeHull(0);
  511. unbindLimitCameraFunc();
  512. if (!item.active) {
  513. this.cancelLookAround();
  514. return;
  515. }
  516. let options = {
  517. lng: 121.12275503870025,
  518. lat: 31.153914277622604,
  519. pitch: -35,
  520. height: 140,
  521. };
  522. // rotateCamera({lng:121.12275503870025, lat:31.153914277622604, pitch: -35, height: 140});
  523. // // 相机绕点环绕飞行
  524. // function rotateCamera(options){
  525. var position = Cesium.Cartesian3.fromDegrees(
  526. options.lng,
  527. options.lat,
  528. 0.0
  529. );
  530. // 相机看点的角度,如果大于0那么则是从地底往上看,所以要为负值,这里取-30度
  531. var pitch = Cesium.Math.toRadians(options.pitch);
  532. // 给定飞行一周所需时间,比如30s, 那么每秒转动度数
  533. var angle = 360 / systemConfig.roveTime;
  534. // 给定相机距离点多少距离飞行
  535. var distance = options.height;
  536. var startTime = Cesium.JulianDate.fromDate(new Date());
  537. var stopTime = Cesium.JulianDate.addSeconds(
  538. startTime,
  539. 30,
  540. new Cesium.JulianDate()
  541. );
  542. globalVariable.viewer.clock.startTime = startTime.clone(); // 开始时间
  543. globalVariable.viewer.clock.stopTime = stopTime.clone(); // 结速时间
  544. globalVariable.viewer.clock.currentTime = startTime.clone(); // 当前时间
  545. globalVariable.viewer.clock.clockRange = Cesium.ClockRange.CLAMPED; // 行为方式
  546. globalVariable.viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK; // 时钟设置为当前系统时间; 忽略所有其他设置。
  547. // 相机的当前heading
  548. var initialHeading = globalVariable.viewer.camera.heading;
  549. this.Exection = function TimeExecution() {
  550. // 当前已经过去的时间,单位s
  551. var delTime = Cesium.JulianDate.secondsDifference(
  552. globalVariable.viewer.clock.currentTime,
  553. globalVariable.viewer.clock.startTime
  554. );
  555. // 根据过去的时间,计算偏航角的变化
  556. var heading = Cesium.Math.toRadians(delTime * angle) + initialHeading;
  557. globalVariable.viewer.camera.lookAt(
  558. position,
  559. new Cesium.HeadingPitchRange(heading, pitch, distance)
  560. );
  561. if (
  562. Cesium.JulianDate.compare(
  563. globalVariable.viewer.clock.currentTime,
  564. globalVariable.viewer.clock.stopTime
  565. ) >= 0
  566. ) {
  567. that.cancelLookAround();
  568. }
  569. };
  570. globalVariable.viewer.clock.onTick.addEventListener(that.Exection);
  571. },
  572. cancelLookAround() {
  573. this.$store.commit("changeFenceng", false);
  574. returnDefault();
  575. if (this.Exection) {
  576. globalVariable.viewer.clock.onTick.removeEventListener(this.Exection);
  577. this.Exection = null;
  578. globalVariable.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
  579. }
  580. bindLimitCameraFunc();
  581. this.funcList[2].active = false;
  582. // 叫号显示
  583. if (showJH) showJH();
  584. if (openJH) openJH();
  585. },
  586. // 复位
  587. setViewDefaultlocation(time) {
  588. // 清除场景激活
  589. clearSceneActive();
  590. // 取消漫游
  591. this.cancelLookAround();
  592. showTitle("大门");
  593. return new Promise((resolve, reject) => {
  594. this.$flyTo({
  595. lon: systemConfig.mapDefault.center.lon,
  596. lat: systemConfig.mapDefault.center.lat,
  597. h: systemConfig.mapDefault.height,
  598. heading: systemConfig.mapDefault.heading,
  599. pitch: systemConfig.mapDefault.pitch,
  600. roll: systemConfig.mapDefault.roll,
  601. time: 1,
  602. pitchAdjustHeight: 1000,
  603. callback: function () {},
  604. }).then(() => {
  605. resolve();
  606. });
  607. });
  608. },
  609. // 加载点位
  610. loadPoint(param) {
  611. let that = this;
  612. // function getGuid() {
  613. // return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
  614. // /[xy]/g,
  615. // function (c) {
  616. // var r = (Math.random() * 16) | 0,
  617. // v = c == "x" ? r : (r & 0x3) | 0x8;
  618. // return v.toString(16);
  619. // }
  620. // );
  621. // }
  622. // return;
  623. if (param.active) {
  624. if (globalVariable.hotMarkerArr.length == 0) {
  625. this.mark.map(function (item, index) {
  626. // item.name;
  627. // item.param.lon;
  628. // item.param.lat;
  629. // item.param.h;
  630. // item.type;
  631. let position = Cesium.Cartesian3.fromDegrees(
  632. item.param.lon,
  633. item.param.lat,
  634. // item.param.lat,
  635. item.param.h
  636. );
  637. let id = "entity_" + index;
  638. if (item.img.indexOf("gif") > -1) {
  639. let entity = globalVariable.viewer.entities.add({
  640. id: id,
  641. position: position,
  642. // billboard: {
  643. // width: item.sizeW,
  644. // height: item.sizeH,
  645. // scale: 1.0,
  646. // horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
  647. // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
  648. // pixelOffset: new Cesium.Cartesian2(0, 0),
  649. // scaleByDistance: new Cesium.NearFarScalar(20, 0.6, 30, 0.8),
  650. // },
  651. // point: {
  652. // show: true, //是否显示,默认显示
  653. // pixelSize: 15,
  654. // },
  655. label: {
  656. text: item.name,
  657. font: "15pt Source Han Sans CN", //字体样式
  658. fillColor: Cesium.Color.WHITE, //字体颜色
  659. backgroundColor: Cesium.Color.fromCssColorString("#00000066"), //背景颜色
  660. showBackground: true, //是否显示背景颜色
  661. style: Cesium.LabelStyle.FILL, //label样式
  662. outlineWidth: 2,
  663. outlineColor: Cesium.Color.fromCssColorString("#00000066"), //背景颜色
  664. verticalOrigin: Cesium.VerticalOrigin.BOTTOM, //垂直位置
  665. horizontalOrigin: Cesium.HorizontalOrigin.CENTER, //水平位置
  666. pixelOffset: new Cesium.Cartesian2(0, -20), //偏移
  667. },
  668. });
  669. entity.infos = item;
  670. entity.callback = that.pointClickHandle;
  671. globalVariable.point_positions[id] = entity;
  672. globalVariable.hotMarkerArr.push(entity);
  673. // that.analysisImage(item.img, entity);
  674. } else {
  675. let entity = globalVariable.viewer.entities.add({
  676. id: id,
  677. position: position,
  678. // billboard: {
  679. // image: item.img,
  680. // width: item.sizeW,
  681. // height: item.sizeH,
  682. // scale: 1.0,
  683. // horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
  684. // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
  685. // pixelOffset: new Cesium.Cartesian2(0, 0),
  686. // },
  687. label: {
  688. text: item.name,
  689. font: "15pt Source Han Sans CN", //字体样式
  690. fillColor: Cesium.Color.WHITE, //字体颜色
  691. backgroundColor: Cesium.Color.fromCssColorString("#00000066"), //背景颜色
  692. showBackground: true, //是否显示背景颜色
  693. style: Cesium.LabelStyle.FILL, //label样式
  694. outlineWidth: 2,
  695. outlineColor: Cesium.Color.fromCssColorString("#00000066"), //背景颜色
  696. verticalOrigin: Cesium.VerticalOrigin.BOTTOM, //垂直位置
  697. horizontalOrigin: Cesium.HorizontalOrigin.CENTER, //水平位置
  698. pixelOffset: new Cesium.Cartesian2(0, 23), //偏移
  699. },
  700. });
  701. entity.infos = item;
  702. entity.callback = that.pointClickHandle;
  703. globalVariable.point_positions[id] = entity;
  704. globalVariable.hotMarkerArr.push(entity);
  705. }
  706. // that.addGIF2(item, position, id);
  707. });
  708. } else {
  709. if (globalVariable.hotMarkerArr.length > 0)
  710. globalVariable.hotMarkerArr.map(function (item) {
  711. item.show = true;
  712. });
  713. }
  714. } else {
  715. if (globalVariable.hotMarkerArr.length > 0)
  716. globalVariable.hotMarkerArr.map(function (item) {
  717. item.show = false;
  718. });
  719. }
  720. return;
  721. globalVariable.viewer.scene.postRender.addEventListener(function () {
  722. globalVariable.hotMarkerArr.map(function (item) {
  723. var canvasPosition =
  724. globalVariable.viewer.scene.cartesianToCanvasCoordinates(
  725. item._position._value,
  726. new Cesium.Cartesian2()
  727. );
  728. if (
  729. Cesium.defined(canvasPosition) &&
  730. !isNaN(canvasPosition.x) &&
  731. !isNaN(canvasPosition.y)
  732. ) {
  733. document.getElementsByClassName(item.id)[0].style.display = "block";
  734. if (!document.getElementsByClassName(item.id)) return;
  735. document.getElementsByClassName(item.id)[0].style.top = `${
  736. canvasPosition.y - 15
  737. }px`;
  738. document.getElementsByClassName(item.id)[0].style.left = `${
  739. canvasPosition.x - 15
  740. }px`;
  741. } else {
  742. document.getElementsByClassName(item.id)[0].style.display = "none";
  743. }
  744. });
  745. });
  746. },
  747. addGIF2(item, position, id) {
  748. let c = globalVariable.viewer.scene.cartesianToCanvasCoordinates(
  749. position,
  750. new Cesium.Cartesian2()
  751. );
  752. //创建一个div
  753. var div = document.createElement("div");
  754. //为div创建属性class = "test"
  755. var divattr = document.createAttribute("class");
  756. divattr.value = "hotpoint image " + id;
  757. //把属性class = "test"添加到div
  758. div.setAttributeNode(divattr);
  759. document.getElementById("cesiumContainer").appendChild(div);
  760. //创建一个值为test的按钮
  761. var img = document.createElement("img");
  762. var imgAttr = document.createAttribute("src");
  763. imgAttr.value = item.img;
  764. img.style.width = "100%";
  765. img.style.height = "100%";
  766. img.setAttributeNode(imgAttr);
  767. div.appendChild(img);
  768. div.style.position = "absolute";
  769. div.style.width = "30px";
  770. div.style.height = "30px";
  771. div.style.top = `${c.y - 15}px`;
  772. div.style.left = `${c.x - 15}px`;
  773. },
  774. // 关闭可办事项
  775. closeDoThingPopup() {
  776. this.doThingShow = false;
  777. this.doThingFirst = [];
  778. this.doThingSecond = {};
  779. },
  780. // 返回至可办事项一级菜单
  781. backDoThingPopup() {
  782. this.doThingSecond = {};
  783. },
  784. // 选择可办事项展示
  785. chooseDBSecond(item) {
  786. this.doThingSecond = item;
  787. },
  788. // 可办事项地址查询并跳转
  789. searchInfoAndJump(item) {
  790. let that = this;
  791. if (item.executeNumber.length < 6) {
  792. // this.$message({
  793. // type: "info",
  794. // messsage: "当前选项无法跳转!",
  795. // });
  796. this.tipsShow = true;
  797. setTimeout(() => {
  798. that.tipsShow = false;
  799. }, 1500);
  800. return;
  801. }
  802. let params = {
  803. page: 0,
  804. pageSize: 10,
  805. tableName: "ywtb_auditfwzn",
  806. where: "item_code = '" + item.executeNumber + "'",
  807. };
  808. postform(this.eventData.url, params).then((res) => {
  809. if (res.code == 200) {
  810. // window.open(res.content[0].login_url); // 在safari中失效
  811. that.setCLJ(res.content[0].login_url);
  812. }
  813. });
  814. },
  815. // 页面跳转(为了结局在safari浏览器中无法跳转的问题)
  816. setCLJ(url) {
  817. let dom = document.createElement("a");
  818. dom.setAttribute("href", url);
  819. document.body.appendChild(dom);
  820. dom.click();
  821. setTimeout(() => {
  822. document.body.removeChild(dom);
  823. }, 100);
  824. },
  825. // 点位触发事件
  826. pointClickHandle(item) {
  827. let that = this;
  828. switch (item.type) {
  829. case 1:
  830. // 弹窗
  831. let strTo = ``;
  832. item.text.map(function (str) {
  833. strTo += str + "<br>";
  834. });
  835. this.pointInfos = strTo;
  836. this.pointShow = true;
  837. break;
  838. case 2:
  839. // 跳转
  840. if (this.$store.state.IsPC) {
  841. let openUrl = item.pc_url ? item.pc_url : item.url;
  842. window.open(openUrl, "_blank");
  843. } else {
  844. window.location.href = item.pc_url ? item.pc_url : item.url;
  845. }
  846. break;
  847. case 3:
  848. break;
  849. case 4:
  850. // 点位触发camera转换
  851. this.$flyTo({
  852. lon: item.camera.lon,
  853. lat: item.camera.lat,
  854. h: item.camera.h,
  855. heading: item.camera.heading,
  856. pitch: item.camera.pitch,
  857. roll: item.camera.roll,
  858. time: 1,
  859. pitchAdjustHeight: 1000,
  860. details: item,
  861. callback: function (item) {
  862. // closeHull(item.camera.sceneType);
  863. showTitle(item.details.areaName);
  864. },
  865. }).then(() => {});
  866. break;
  867. case 5:
  868. $.getJSON(item.json, function (arr) {
  869. that.doThingFirst = arr;
  870. that.doThingShow = true;
  871. });
  872. break;
  873. default:
  874. break;
  875. }
  876. },
  877. // 加载跳转点位
  878. loadPositionPoint() {
  879. let that = this;
  880. this.positionPoint.map(function (item, index) {
  881. // console.log(
  882. // item.areaName +
  883. // ":" +
  884. // Cesium.Math.toDegrees(item.lon) +
  885. // ", " +
  886. // Cesium.Math.toDegrees(item.lat)
  887. // );
  888. let id = "jump_" + index;
  889. let entity = globalVariable.viewer.entities.add({
  890. id: id,
  891. position: Cesium.Cartesian3.fromRadians(item.lon, item.lat, item.h),
  892. billboard: {
  893. image: "./static/images/position_point.png",
  894. width: 36,
  895. height: 18,
  896. scale: 1.0,
  897. horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
  898. verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
  899. pixelOffset: new Cesium.Cartesian2(0, 0),
  900. distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
  901. 0,
  902. 15
  903. ),
  904. },
  905. // label: {
  906. // text: item.areaName != "" ? item.areaName : "" + (index + 1),
  907. // // text: "" + (index + 1),
  908. // font: "10pt Source Han Sans CN", //字体样式
  909. // fillColor: Cesium.Color.WHITE, //字体颜色
  910. // backgroundColor: Cesium.Color.fromCssColorString("#00000066"), //背景颜色
  911. // showBackground: false, //是否显示背景颜色
  912. // style: Cesium.LabelStyle.FILL, //label样式
  913. // outlineWidth: 2,
  914. // outlineColor: Cesium.Color.fromCssColorString("#00000066"), //背景颜色
  915. // verticalOrigin: Cesium.VerticalOrigin.BOTTOM, //垂直位置
  916. // horizontalOrigin: Cesium.HorizontalOrigin.CENTER, //水平位置
  917. // pixelOffset: new Cesium.Cartesian2(0, 0), //偏移
  918. // },
  919. });
  920. entity.infos = item;
  921. entity.callback = that.jumpPositionEvent;
  922. globalVariable.point_positions[id] = entity;
  923. globalVariable.jumpPointArr.push(entity);
  924. });
  925. },
  926. // 跳转事件触发
  927. jumpPositionEvent(item) {
  928. showTitle(item.areaName);
  929. this.$flyTo({
  930. lon: Cesium.Math.toDegrees(item.lon),
  931. lat: Cesium.Math.toDegrees(item.lat),
  932. h: item.viewH,
  933. heading: Cesium.Math.toDegrees(globalVariable.viewer.camera.heading),
  934. pitch: 0, // globalVariable.viewer.camera.pitch,
  935. roll: 0, // globalVariable.viewer.camera.roll,
  936. time: 1,
  937. pitchAdjustHeight: 1000,
  938. details: item,
  939. callback: function () {},
  940. }).then(() => {
  941. // resolve();
  942. });
  943. },
  944. // 解析图片
  945. analysisImage(src, entity) {
  946. // return new Promise((resolve, reject) => {
  947. // if (src.indexOf("gif") > -1) {
  948. let can = document.createElement("canvas");
  949. let gif = gifler(src);
  950. gif.animate(can);
  951. gif.frames(can, function (ctx, frame) {
  952. // console.log(frame.buffer.toDataURL());
  953. entity.billboard.image = new Cesium.CallbackProperty(() => {
  954. // console.log(frame.buffer.toDataURL());
  955. return frame.buffer.toDataURL();
  956. }, false);
  957. // resolve(d);
  958. });
  959. // } else {
  960. // resolve(src);
  961. // }
  962. // });
  963. },
  964. // 切换视角
  965. changeView(item) {
  966. // 清除场景激活
  967. clearSceneActive();
  968. this.cancelLookAround();
  969. if (item.lon == null) {
  970. this.$toast("暂无当前位置信息");
  971. return;
  972. }
  973. if (item.showTitle) {
  974. showTitle(item.name);
  975. }
  976. this.$flyTo({
  977. lon: item.lon,
  978. lat: item.lat,
  979. h: item.h,
  980. heading: item.heading,
  981. pitch: item.pitch,
  982. roll: item.roll,
  983. time: 1,
  984. pitchAdjustHeight: 1000,
  985. details: item,
  986. callback: function (item) {
  987. closeHull(item.details.sceneType);
  988. },
  989. });
  990. this.indexesShow = false;
  991. this.funcList[1].active = false;
  992. },
  993. // 切换索引楼层
  994. changeFloor(item) {
  995. this.cameraInfo = this.cameraInfo.map(function (tdd) {
  996. tdd.active = false;
  997. return tdd;
  998. });
  999. item.active = true;
  1000. this.cameraInfoChildren = item.children;
  1001. },
  1002. hidePointInfoDailog() {
  1003. this.pointShow = false;
  1004. },
  1005. // 切换楼层
  1006. choosePlane(index) {
  1007. this.planeArr = this.planeArr.map(function (item, ind) {
  1008. if (index == ind) {
  1009. item.active = true;
  1010. } else {
  1011. item.active = false;
  1012. }
  1013. return item;
  1014. });
  1015. },
  1016. },
  1017. watch: {
  1018. helpShow: {
  1019. handler(newVal, oldVal) {
  1020. if (newVal) {
  1021. this.helpActive = true;
  1022. } else {
  1023. this.helpActive = false;
  1024. }
  1025. },
  1026. },
  1027. },
  1028. };
  1029. </script>
  1030. <style lang="less" scoped>
  1031. @media screen and (orientation: landscape) {
  1032. .tool {
  1033. position: absolute;
  1034. right: 15px;
  1035. top: 20px !important;
  1036. z-index: 1;
  1037. }
  1038. }
  1039. .tool {
  1040. position: absolute;
  1041. right: 15px !important;
  1042. top: 35px !important;
  1043. z-index: 1;
  1044. .func {
  1045. overflow: hidden;
  1046. li {
  1047. width: 30px;
  1048. height: 30px;
  1049. overflow: hidden;
  1050. font-weight: bold;
  1051. position: relative;
  1052. margin-bottom: 6px;
  1053. p {
  1054. width: 100%;
  1055. height: 100%;
  1056. }
  1057. &:nth-child(1) {
  1058. p {
  1059. background: url(~@/assets/img/tool/new_tb/hotpoint.png) center
  1060. center/100% 100% no-repeat;
  1061. }
  1062. &.active p {
  1063. background: url(~@/assets/img/tool/new_tb/hotpoint_active.png) center
  1064. center/100% 100% no-repeat;
  1065. }
  1066. }
  1067. &:nth-child(2) {
  1068. p {
  1069. background: url(~@/assets/img/tool/new_tb/indexes.png) center
  1070. center/100% 100% no-repeat;
  1071. }
  1072. &.active p {
  1073. background: url(~@/assets/img/tool/new_tb/indexes_active.png) center
  1074. center/100% 100% no-repeat;
  1075. }
  1076. }
  1077. &:nth-child(3) {
  1078. p {
  1079. background: url(~@/assets/img/tool/new_tb/pan.png) center center/100%
  1080. 100% no-repeat;
  1081. }
  1082. &.active p {
  1083. background: url(~@/assets/img/tool/new_tb/pan_active.png) center
  1084. center/100% 100% no-repeat;
  1085. }
  1086. }
  1087. &:nth-child(4) {
  1088. p {
  1089. background: url(~@/assets/img/tool/new_tb/reposition.png) center
  1090. center/100% 100% no-repeat;
  1091. }
  1092. &.active p {
  1093. background: url(~@/assets/img/tool/new_tb/reposition_active.png)
  1094. center center/100% 100% no-repeat;
  1095. }
  1096. }
  1097. &:nth-child(5) {
  1098. p {
  1099. background: url(~@/assets/img/tool/new_tb/plan.png) center center/100%
  1100. 100% no-repeat;
  1101. }
  1102. &.active p {
  1103. background: url(~@/assets/img/tool/new_tb/plan_active.png) center
  1104. center/100% 100% no-repeat;
  1105. }
  1106. }
  1107. &:nth-child(6) {
  1108. p {
  1109. background: url(~@/assets/img/tool/new_tb/event_library.png) center
  1110. center/100% 100% no-repeat;
  1111. }
  1112. &.active p {
  1113. background: url(~@/assets/img/tool/new_tb/event_library_active.png)
  1114. center center/100% 100% no-repeat;
  1115. }
  1116. }
  1117. }
  1118. }
  1119. .help {
  1120. width: 50px;
  1121. height: 50px;
  1122. background: url(~@/assets/img/tool/new_tb/help.png) center center / 100%
  1123. 100% no-repeat;
  1124. &.active {
  1125. background: url(~@/assets/img/tool/new_tb/help_active.png) center
  1126. center/100% 100% no-repeat;
  1127. }
  1128. }
  1129. :deep(.indexesListContent) {
  1130. width: 394px;
  1131. height: 380px;
  1132. .indexesList {
  1133. box-sizing: border-box;
  1134. width: 100%;
  1135. height: calc(100% - 34px);
  1136. background: #33333366;
  1137. border-radius: 2px;
  1138. .listContent {
  1139. padding: 5px 20px;
  1140. box-sizing: border-box;
  1141. width: 100%;
  1142. height: 100%;
  1143. overflow: hidden;
  1144. overflow-y: auto;
  1145. .header {
  1146. width: 265.2px;
  1147. height: 22.8px;
  1148. overflow: hidden;
  1149. position: relative;
  1150. text-align: center;
  1151. color: #ffffff;
  1152. margin: 21px auto;
  1153. background: url(~@/assets/img/tool/indexes_header.png) center center /
  1154. 100% 100% no-repeat;
  1155. }
  1156. .list_container {
  1157. width: 100%;
  1158. // height: 50px;
  1159. height: calc(100% - 61px);
  1160. overflow: hidden;
  1161. overflow-y: auto;
  1162. .first_content {
  1163. overflow: hidden;
  1164. .title {
  1165. color: #ffffff;
  1166. font-size: 20px;
  1167. }
  1168. }
  1169. li {
  1170. width: 150px;
  1171. height: 50px;
  1172. margin: 5px calc(50% - 150px);
  1173. float: left;
  1174. line-height: 50px;
  1175. text-align: center;
  1176. font-size: 15px;
  1177. color: #fefeff;
  1178. position: relative;
  1179. background: #ffffff33;
  1180. border-radius: 2px;
  1181. &:nth-child(2n) {
  1182. margin-right: 0px;
  1183. }
  1184. &:nth-child(2n-1) {
  1185. margin-left: 0px;
  1186. }
  1187. }
  1188. }
  1189. }
  1190. }
  1191. .close {
  1192. width: 16px;
  1193. height: 16px;
  1194. margin: 4px 4px;
  1195. background: url(~@/assets/img/tool/close.png) center center / 100% 100%
  1196. no-repeat;
  1197. position: absolute;
  1198. top: 0px;
  1199. right: 0px;
  1200. }
  1201. }
  1202. :deep(.point_popup) {
  1203. width: 394px;
  1204. height: 380px;
  1205. .pointInfoContent {
  1206. width: 100%;
  1207. height: 100%;
  1208. font-size: 20px;
  1209. padding: 20px 25px;
  1210. box-sizing: border-box;
  1211. line-height: 30px;
  1212. color: #ffffff;
  1213. background: #33333366;
  1214. border-radius: 2px;
  1215. div {
  1216. width: 100%;
  1217. height: 100%;
  1218. overflow: hidden;
  1219. overflow-y: auto;
  1220. }
  1221. }
  1222. .close {
  1223. width: 16px;
  1224. height: 16px;
  1225. margin: 4px 4px;
  1226. background: url(~@/assets/img/tool/close.png) center center / 100% 100%
  1227. no-repeat;
  1228. position: absolute;
  1229. top: 0px;
  1230. right: 0px;
  1231. }
  1232. }
  1233. :deep(.plane_popup) {
  1234. width: 394px;
  1235. height: 380px;
  1236. .plane_container {
  1237. width: 100%;
  1238. &_event {
  1239. padding: 1.5rem 1rem;
  1240. width: calc(100% - 2rem);
  1241. max-height: calc(100% - 3rem);
  1242. overflow-x: hidden;
  1243. background: rgba(0, 0, 0, 0.4);
  1244. border-radius: 1rem;
  1245. position: absolute;
  1246. p {
  1247. color: #ffffff;
  1248. margin: 0.5rem 0;
  1249. font-size: 1.2rem;
  1250. font-weight: bold;
  1251. }
  1252. .paramsBox {
  1253. max-width: calc(100% - 20px);
  1254. font-size: 1rem;
  1255. color: #dbdbdb;
  1256. position: relative;
  1257. input {
  1258. color: #333;
  1259. }
  1260. .paramBtuBox {
  1261. display: flex;
  1262. justify-content: flex-end;
  1263. .paramBtu {
  1264. margin: 0.2rem 0.6rem;
  1265. padding: 0.3rem 0.5rem;
  1266. color: #ffffff;
  1267. font-size: 1.2rem;
  1268. background: #1fb4ffaa;
  1269. border-radius: 0.3rem;
  1270. }
  1271. }
  1272. }
  1273. }
  1274. }
  1275. .image_header {
  1276. color: #dbdbdb;
  1277. font-size: 16px;
  1278. height: 32px;
  1279. background: rgba(0, 0, 0, 0.4);
  1280. margin-top: 10px;
  1281. ul {
  1282. display: block;
  1283. width: fit-content;
  1284. height: 32px;
  1285. margin: 0 auto;
  1286. li {
  1287. float: left;
  1288. padding: 5px 10px;
  1289. margin-right: 10px;
  1290. height: 28px;
  1291. box-sizing: border-box;
  1292. font-size: 12px;
  1293. &.active {
  1294. border-bottom: 2px solid #ffc125;
  1295. color: #ffffff;
  1296. }
  1297. }
  1298. }
  1299. }
  1300. .image_container {
  1301. display: block;
  1302. width: 394px;
  1303. height: 280px;
  1304. margin: 0 auto;
  1305. position: relative;
  1306. background: #33333366;
  1307. border-radius: 2px;
  1308. ul {
  1309. display: block;
  1310. width: 100%;
  1311. height: 100%;
  1312. li {
  1313. display: block;
  1314. width: 100%;
  1315. height: 100%;
  1316. padding: 10px 10px;
  1317. box-sizing: border-box;
  1318. img {
  1319. display: block;
  1320. width: 100%;
  1321. height: 100%;
  1322. margin: 0 auto;
  1323. object-fit: contain;
  1324. }
  1325. }
  1326. }
  1327. }
  1328. .close {
  1329. width: 16px;
  1330. height: 16px;
  1331. margin: 4px 4px;
  1332. margin-right: 10px;
  1333. background: url(~@/assets/img/tool/close.png) center center / 100% 100%
  1334. no-repeat;
  1335. position: absolute;
  1336. top: 0px;
  1337. right: 0px;
  1338. }
  1339. }
  1340. :deep(.help_popup) {
  1341. width: 394px;
  1342. height: 380px;
  1343. .help_container {
  1344. box-sizing: border-box;
  1345. overflow: hidden;
  1346. overflow-y: auto;
  1347. width: 100%;
  1348. height: 100%;
  1349. background: #33333366;
  1350. border-radius: 2px;
  1351. .header {
  1352. color: #ffffff;
  1353. font-size: 18px;
  1354. margin-top: 10px;
  1355. text-align: center;
  1356. font-weight: bold;
  1357. }
  1358. .content {
  1359. color: #ffffff;
  1360. font-size: 16px;
  1361. line-height: 32px;
  1362. padding: 0 15px;
  1363. span {
  1364. display: inline-block;
  1365. background: #1fb4ff;
  1366. width: 16px;
  1367. height: 16px;
  1368. border-radius: 16px;
  1369. }
  1370. }
  1371. }
  1372. .close {
  1373. width: 16px;
  1374. height: 16px;
  1375. margin: 4px 4px;
  1376. background: url(~@/assets/img/tool/close.png) center center / 100% 100%
  1377. no-repeat;
  1378. position: absolute;
  1379. top: 0px;
  1380. right: 0px;
  1381. }
  1382. }
  1383. :deep(.doThing_popup) {
  1384. width: 394px;
  1385. height: 380px;
  1386. .content {
  1387. width: 100%;
  1388. height: 100%;
  1389. font-size: 20px;
  1390. padding: 25px 0px;
  1391. box-sizing: border-box;
  1392. line-height: 30px;
  1393. color: #ffffff;
  1394. background: #33333366;
  1395. border-radius: 2px;
  1396. .doThingFirstContent {
  1397. width: 100%;
  1398. height: 100%;
  1399. .header {
  1400. text-align: center;
  1401. height: 30px;
  1402. letter-spacing: 30px;
  1403. text-indent: 30px;
  1404. }
  1405. .list {
  1406. height: calc(100% - 30px);
  1407. overflow: hidden;
  1408. overflow-y: auto;
  1409. li {
  1410. width: 150px;
  1411. height: 50px;
  1412. margin: 5px calc(25% - 75px);
  1413. float: left;
  1414. line-height: 48.05px;
  1415. text-align: center;
  1416. font-size: 15px;
  1417. color: #fefeff;
  1418. position: relative;
  1419. &::after {
  1420. content: "";
  1421. height: 2px;
  1422. width: 120px;
  1423. position: absolute;
  1424. background: url(~@/assets/img/tool/indexes_point_bottom.png)
  1425. center center / 100% 100% no-repeat;
  1426. bottom: 0px;
  1427. left: 15px;
  1428. }
  1429. &.active {
  1430. color: #ffc44d;
  1431. background: url(~@/assets/img/tool/indexes_point_active.png)
  1432. center center / 100% 100% no-repeat;
  1433. &::after {
  1434. display: none;
  1435. }
  1436. }
  1437. }
  1438. }
  1439. }
  1440. .doThingSecondContent {
  1441. width: 100%;
  1442. height: 100%;
  1443. .header {
  1444. text-align: center;
  1445. height: 30px;
  1446. letter-spacing: 8px;
  1447. text-indent: 8px;
  1448. }
  1449. .list {
  1450. height: calc(100% - 30px);
  1451. overflow: hidden;
  1452. overflow-y: auto;
  1453. .van-collapse {
  1454. .item {
  1455. display: inline-block;
  1456. width: calc(100% - 32px);
  1457. height: 24px;
  1458. line-height: 24px;
  1459. padding: 10px 0px;
  1460. margin: 0px 16px;
  1461. font-size: 12px;
  1462. position: relative;
  1463. border-bottom: 1px solid #ffffff;
  1464. }
  1465. .van-collapse-item {
  1466. .van-cell {
  1467. background: transparent;
  1468. color: #ffffff;
  1469. margin: 0px 16px;
  1470. padding: 10px 0px;
  1471. width: calc(100% - 32px);
  1472. border-bottom: 1px solid #ffffff;
  1473. font-size: 12px;
  1474. .van-cell__right-icon:before {
  1475. color: #ffffff;
  1476. }
  1477. .van-cell__title {
  1478. line-height: 20.75px;
  1479. }
  1480. }
  1481. .van-collapse-item__content {
  1482. background: transparent;
  1483. padding-top: 0px;
  1484. padding-bottom: 0px;
  1485. margin: 0px 16px;
  1486. padding: 0 0;
  1487. li {
  1488. min-height: 20.75px;
  1489. line-height: 20.75px;
  1490. padding: 10px 0px;
  1491. color: #ffffff;
  1492. border-bottom: 1px solid rgba(235, 237, 240);
  1493. text-indent: 20px;
  1494. font-size: 12px;
  1495. }
  1496. }
  1497. :deep(.van-collapse-item--border:after) {
  1498. border-top: 0px;
  1499. }
  1500. }
  1501. }
  1502. }
  1503. }
  1504. }
  1505. .close {
  1506. width: 16px;
  1507. height: 16px;
  1508. margin: 4px 4px;
  1509. background: url(~@/assets/img/tool/close.png) center center / 100% 100%
  1510. no-repeat;
  1511. position: absolute;
  1512. top: 0px;
  1513. right: 0px;
  1514. }
  1515. .back {
  1516. width: 24px;
  1517. height: 24px;
  1518. background: url(~@/assets/img/tool/back.png) center center / 100% 100%
  1519. no-repeat;
  1520. position: absolute;
  1521. top: 0px;
  1522. left: 0px;
  1523. border-radius: 50px;
  1524. }
  1525. }
  1526. }
  1527. :deep(.hotpoint) {
  1528. img {
  1529. width: 100%;
  1530. height: 100%;
  1531. }
  1532. }
  1533. :deep(.tips) {
  1534. font-size: 8px;
  1535. padding: 5px 5px;
  1536. border-radius: 2px;
  1537. top: 4vh;
  1538. left: 14vh;
  1539. }
  1540. </style>