Tool.vue 46 KB

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