14 files modified
4 files added
| | |
| | | } |
| | | } |
| | | }, |
| | | "@popperjs/core": { |
| | | "version": "2.11.4", |
| | | "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz", |
| | | "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==" |
| | | }, |
| | | "@soda/friendly-errors-webpack-plugin": { |
| | | "version": "1.8.0", |
| | | "resolved": "https://registry.nlark.com/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz", |
| | |
| | | "integrity": "sha1-aXJy45kTVuQMPKxWanTu9oF1ZTE=", |
| | | "dev": true |
| | | }, |
| | | "hls.js": { |
| | | "version": "1.1.5", |
| | | "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.1.5.tgz", |
| | | "integrity": "sha512-mQX5TSNtJEzGo5HPpvcQgCu+BWoKDQM6YYtg/KbgWkmVAcqOCvSTi0SuqG2ZJLXxIzdnFcKU2z7Mrw/YQWhPOA==" |
| | | }, |
| | | "hmac-drbg": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", |
| | |
| | | "requires": { |
| | | "minimist": "^1.2.5" |
| | | } |
| | | }, |
| | | "moment": { |
| | | "version": "2.29.1", |
| | | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", |
| | | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" |
| | | }, |
| | | "move-concurrently": { |
| | | "version": "1.0.1", |
| | |
| | | "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", |
| | | "dev": true |
| | | }, |
| | | "tippy.js": { |
| | | "version": "6.3.7", |
| | | "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", |
| | | "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", |
| | | "requires": { |
| | | "@popperjs/core": "^2.9.0" |
| | | } |
| | | }, |
| | | "tmp": { |
| | | "version": "0.0.33", |
| | | "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1592843137359&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz", |
| | |
| | | "core-js": "^3.6.5", |
| | | "echarts": "^5.2.1", |
| | | "element-ui": "^2.15.6", |
| | | "hls.js": "^1.1.5", |
| | | "lodash": "^4.17.21", |
| | | "moment": "^2.29.1", |
| | | "tippy.js": "^6.3.7", |
| | | "vue": "^2.6.11", |
| | | "vue-axios": "^3.3.7", |
| | | "vue-router": "^3.5.2", |
| | |
| | | computed: { |
| | | ...mapGetters([ |
| | | 'closeMapClick', // 关闭地图点击,防止新增标签误触 |
| | | 'addIconsLayerIconPopup' // 传送关闭编辑窗口,刷新标签数据 |
| | | 'addIconsLayerIconPopup', // 传送关闭编辑窗口,刷新标签数据 |
| | | 'calenderShow' |
| | | ]) |
| | | }, |
| | | data () { |
| | |
| | | checked: '/img/leftnav/monitor-checked.png', |
| | | layer: 'leftMonitorLayer' |
| | | }, |
| | | // { |
| | | // flag: false, |
| | | // label: '活动', |
| | | // img: '/img/leftnav/activity.png', |
| | | // normal: '/img/leftnav/activity.png', |
| | | // checked: '/img/leftnav/activity-checked.png', |
| | | // layer: 'leftActivityLayer' |
| | | // }, |
| | | { |
| | | flag: false, |
| | | label: '活动', |
| | | img: '/img/leftnav/activity.png', |
| | | normal: '/img/leftnav/activity.png', |
| | | checked: '/img/leftnav/activity-checked.png', |
| | | layer: 'leftActivityLayer' |
| | | }, |
| | | // { |
| | | // flag: false, |
| | | // label: 'AED', |
| | |
| | | if (!this.addIconsLayerIconPopup) { |
| | | this.reself() |
| | | } |
| | | }, |
| | | calenderShow: { |
| | | handler (newData, oldData) { |
| | | if (newData == false) { |
| | | this.leftNavData.forEach(item => { |
| | | if (item.label == '活动') { |
| | | item.flag = false |
| | | item.img = item.normal |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | immediate: true |
| | | } |
| | | }, |
| | | methods: { |
| | |
| | | item.flag = !item.flag |
| | | if (item.flag == true) { |
| | | item.img = item.checked |
| | | LeftNavLayer[item.layer].show = true |
| | | } else { |
| | | item.img = item.normal |
| | | LeftNavLayer[item.layer].show = false |
| | | } |
| | | |
| | | if (item.label == '活动') { |
| | | this.$store.commit('SET_CALENDERSHOW', item.flag) |
| | | } else { |
| | | if (item.flag == true) { |
| | | LeftNavLayer[item.layer].show = true |
| | | } else { |
| | | LeftNavLayer[item.layer].show = false |
| | | } |
| | | } |
| | | }, |
| | | initialize () { |
| | |
| | | ) |
| | | ] |
| | | }) |
| | | // console.log(value, "see"); |
| | | this.$store.dispatch('setOurDataInPoput', value) |
| | | this.$store.dispatch('pcFlyView', { |
| | | jd: value.lng, |
| | |
| | | <template> |
| | | <div class="calender-box"> |
| | | <div class="header">活动</div> |
| | | <div class="header"> |
| | | <img class="celebrate deblurring" src="/img/icon/school-celebrate.png" alt /> |
| | | 校园活动 |
| | | <img |
| | | @click="closeCurrent" |
| | | class="close deblurring" |
| | | src="/img/navicon/close.png" |
| | | alt |
| | | /> |
| | | </div> |
| | | <div class="content"> |
| | | <full-calendar ref="fullCalendar" style="height: 100%" :options="calendarOptions"></full-calendar> |
| | | </div> |
| | |
| | | // import '@fullcalendar/core/main.css' |
| | | import '@fullcalendar/daygrid/main.css' |
| | | |
| | | import moment from 'moment' |
| | | import tippy from 'tippy.js' |
| | | import 'tippy.js/dist/tippy.css' |
| | | import 'tippy.js/themes/light-border.css' |
| | | // const getTime = (time) => { |
| | | // const datetime = new Date(time) |
| | | // const year = datetime.getFullYear() |
| | | |
| | | // const month = datetime.getMonth() |
| | | // const date = datetime.getDate() |
| | | // const hour = datetime.getHours() |
| | | // const minute = datetime.getMinutes() |
| | | // const second = datetime.getSeconds() |
| | | |
| | | // const result1 = year + |
| | | // '-' + |
| | | // ((month + 1) >= 10 ? (month + 1) : '0' + (month + 1)) + |
| | | // '-' + |
| | | // ((date + 1) < 10 ? '0' + date : date) + |
| | | // ' ' + |
| | | // ((hour + 1) < 10 ? '0' + hour : hour) + |
| | | // ':' + |
| | | // ((minute + 1) < 10 ? '0' + minute : minute) + |
| | | // ':' + |
| | | // ((second + 1) < 10 ? '0' + second : second) |
| | | |
| | | // const result2 = year + |
| | | // '-' + |
| | | // ((month + 1) >= 10 ? (month + 1) : '0' + (month + 1)) + |
| | | // '-' + |
| | | // ((date + 1) < 10 ? '0' + date : date) |
| | | |
| | | // const result = { |
| | | // hasTime: result1, |
| | | // withoutTime: result2 |
| | | // } |
| | | |
| | | // return result |
| | | // } |
| | | |
| | | const timeEvents = [{ |
| | | id: '92963', |
| | | title: '文化素质教育讲座:逻辑的现实性意义——大学生为何需要逻辑学?', |
| | | start: '2022-03-25T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '本科生院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/23/92963', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92944', |
| | | title: '青年教师交流发展论坛之对话“青椒“第二期', |
| | | start: '2022-03-23T13:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '人事处', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/22/92944', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92862', |
| | | title: '国际组织实习项目线上宣讲会预告', |
| | | start: '2022-03-22T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '学工处', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/20/92862', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92769', |
| | | title: '文化素质教育讲座:物理与创新漫谈', |
| | | start: '2022-03-20T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: |
| | | '讲座报告', |
| | | department: '本科生院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/15/92769', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92763', |
| | | title: '马克思主义学院“世界大变局与疫情交织背景下的时代盛会”两会专题讲座预告', |
| | | start: '2022-03-18T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '马克思主义学院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/15/92763', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92736', |
| | | title: '青年教师交流发展论坛之对话“青椒”第一期', |
| | | start: '2022-03-17T12:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '人事处', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/14/92736', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92733', |
| | | title: '【因斯图们交流会】仪器学院研究生微沙龙第三十六期活动——关注心理健康', |
| | | start: '2022-03-16T18:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '仪器科学与工程学院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/14/92733', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92653', |
| | | title: '仪器学院寒假政务实习分享交流会', |
| | | start: '2022-03-12T18:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '仪器科学与工程学院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/11/92653', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92624', |
| | | title: '文化素质教育讲座:“核”你有约', |
| | | start: '2022-03-18T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '本科生院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/10/92624', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92500', |
| | | title: '德累斯顿工业大学硕士团审项目介绍及校友经验分享', |
| | | start: '2022-03-12T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '国际合作部', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/07/92500', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92496', |
| | | title: '德国亚琛工业大学4+2项目招生宣讲会', |
| | | start: '2022-03-10T19:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '国际合作部', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/07/92496', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92358', |
| | | title: '【生科青年说第3期】博士生郑善亮关于iASPP与内质网Ca2+稳态的研究分享', |
| | | start: '2022-03-02T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '生命科学与技术学院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/03/02/92358', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92313', |
| | | title: '文化素质教育讲座:从物理,到“悟理”——对科技、文化与人生的若干思考', |
| | | start: '2022-03-02T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | |
| | | department: '本科生院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/02/28/92313', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '92026', |
| | | title: '【career讲坛】公职系列“银行校招考情介绍备考指导”讲座', |
| | | start: '2022-01-18T19:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '学工处', |
| | | url2: 'http://today.hit.edu.cn/event/2022/01/15/92026', |
| | | color: '#337ab7' |
| | | }, { |
| | | id: '91997', |
| | | title: '伦敦国王学院Kawal Rhode教授线上学术讲座', |
| | | start: '2022-01-20T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '医学与健康学院', |
| | | url2: 'http://today.hit.edu.cn/event/2022/01/11/91997', |
| | | color: '#337ab7' |
| | | }, { |
| | | id: '91982', |
| | | title: '【career讲坛】公职系列“人民银行考情介绍备考指导”讲座', |
| | | start: '2022-01-11T19:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '学工处', |
| | | url2: 'http://today.hit.edu.cn/event/2022/01/09/91982', |
| | | color: '#337ab7' |
| | | }, { |
| | | id: '91879', |
| | | title: '“全驱系统方法---诞生背景、优越性及展望”段广仁院士报告通知', |
| | | start: '2021-12-29T15:30:18', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '科工院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/29/91879', |
| | | color: '#337ab7' |
| | | }, { |
| | | id: '91825', |
| | | title: '【生科青年说第2期】博士生徐珍媚关于G蛋白偶联受体结构与功能的研究分享', |
| | | start: '2021-12-30T18:30:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '生命科学与技术学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/26/91825', |
| | | color: '#337ab7' |
| | | }, |
| | | |
| | | { |
| | | id: '91817', |
| | | title: '美国大学生数学建模竞赛经验分享会(第二期)', |
| | | start: '2021-12-26T15:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '数学学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/25/91817', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '91758', |
| | | title: '第六届国际青年学者神舟论坛机电分论坛学术报告通知', |
| | | start: '2021-12-23T19:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '机电学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/23/91758', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '91737', |
| | | title: '【新百年 睿思无界】哈尔滨工业大学建筑学院2021学术月——专题系列讲座', |
| | | start: '2021-12-22T19:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '建筑学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/22/91737', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '91731', |
| | | title: '第六届国际青年学者神舟论坛化工与化学分论坛学术报告通知', |
| | | start: '2021-12-26T08:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '化工化学学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/22/91731', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '91708', |
| | | title: '【Career讲坛】公职系列“军队文职考情介绍及备考”讲座预告', |
| | | start: '2021-12-22T18:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '学工处', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/21/91708', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '91696', |
| | | title: '【新百年 睿思无界】哈尔滨工业大学建筑学院2021学术月——专题系列讲座', |
| | | start: '2021-12-20T19:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '建筑学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/20/91696', |
| | | color: '#337ab7' |
| | | }, { |
| | | id: '91678', |
| | | title: '预告| 第六届哈尔滨工业大学国际青年学者神舟论坛-电气工程及自动化学院分论坛学术报告通知', |
| | | start: '2021-12-21T08:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '电气工程及自动化学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/20/91678', |
| | | color: '#337ab7' |
| | | }, |
| | | { |
| | | id: '91655', |
| | | title: '【从炘创新讲坛】特邀报告第2期:《数学分析》课程学习的点滴体会(多元积分学部分)', |
| | | start: '2021-12-20T14:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '数学学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/19/91655', |
| | | color: '#337ab7' |
| | | }, { |
| | | id: '91645', |
| | | title: '哈尔滨工业大学国际青年学者神舟论坛宇航分论坛学术报告会', |
| | | start: '2021-12-21T14:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '会议', |
| | | department: '航天学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/17/91645', |
| | | color: '#f0ad4e' |
| | | }, { |
| | | id: '91621', |
| | | title: '【Career讲坛】公职系列“国考、省考、选调生考情介绍及备考”讲座预告', |
| | | start: '2021-12-18T15:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '学工处', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/17/91621', |
| | | color: '#337ab7' |
| | | }, { |
| | | id: '91552', |
| | | title: '【预告】美国大学生数学建模竞赛经验分享', |
| | | start: '2021-12-19T15:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '讲座报告', |
| | | department: '数学学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/14/91552', |
| | | color: '#337ab7' |
| | | }, { |
| | | id: '91548', |
| | | title: '“炘火•学知”讲师团开展《数学分析》考前知识梳理', |
| | | start: '2021-12-14T19:00:00', |
| | | end: null, |
| | | location: null, |
| | | category: '其它', |
| | | department: '数学学院', |
| | | url2: 'http://today.hit.edu.cn/event/2021/12/14/91548', |
| | | color: '#996600' |
| | | }] |
| | | |
| | | export default { |
| | | name: 'calender', |
| | | |
| | | components: { |
| | | FullCalendar |
| | | }, |
| | | |
| | | data () { |
| | | return { |
| | | calendarOptions: { |
| | |
| | | eventColor: '#2196f3', // 修改日程背景色 |
| | | timeGridEventMinHeight: '20', // 设置事件的最小高度 |
| | | aspectRatio: '1.5', // 设置日历单元格宽高比 |
| | | displayEventTime: true, // 是否显示事件时间 |
| | | displayEventTime: false, // 是否显示事件时间 |
| | | allDaySlot: false, // 周、日视图时,all-day不显示 |
| | | eventLimit: true, // 设置月日程,与all-day slot 的最大显示数量,超过的通过弹窗展示 |
| | | // eventLimitText: '更多', |
| | | eventTimeFormat: { |
| | | hour: 'numeric', |
| | | minute: '2-digit', |
| | |
| | | meridiem: false, |
| | | hour12: false // 设置时间为24小时制 |
| | | }, |
| | | events: [ |
| | | { |
| | | id: 1, |
| | | title: '09:30~11:30 小破孩', |
| | | start: '2022-03-11', // 事件开始时间必须 |
| | | end: '2022-03-20', // 事件结束事件,可选 |
| | | allDay: false, // 是否为全天事件,可选 |
| | | // color: '#f08f00', |
| | | // textColor: '#000', |
| | | className: 'read-all-day' |
| | | }, |
| | | { |
| | | id: 3, |
| | | title: '09:30~11:30 小1破孩', |
| | | start: '2022-03-11', |
| | | end: '2022-03-20', |
| | | color: '#f08f01' |
| | | }, |
| | | { |
| | | id: 2, |
| | | title: '9:30~14:30 项目会议', |
| | | start: '2022-03-21', |
| | | end: '2022-03-25', |
| | | color: '#6bb377' |
| | | } |
| | | ], // 日程数组 |
| | | |
| | | // 日程函数 |
| | | events (time, callback) { |
| | | // const startTime = getTime(time.start).withoutTime |
| | | // const endTime = getTime(time.end).withoutTime |
| | | |
| | | const events = [] |
| | | |
| | | timeEvents.forEach(item => { |
| | | events.push({ |
| | | id: item.id, |
| | | title: item.title, |
| | | start: moment(item.start).format('YYYY-MM-DD HH:mm:ss'), // 事件开始时间必须 |
| | | // end: item.endTime, // 事件结束事件,可选 |
| | | // allDay: item.allDay, // 是否为全天事件,可选 |
| | | color: item.color, |
| | | textColor: '#fff' |
| | | // className: item.className |
| | | }) |
| | | }) |
| | | |
| | | callback(events) |
| | | }, |
| | | |
| | | // [ |
| | | // { |
| | | // id: 1, |
| | | // title: '09:30~11:30 小破孩', |
| | | // start: '2022-03-11', // 事件开始时间必须 |
| | | // end: '2022-03-20', // 事件结束事件,可选 |
| | | // allDay: false, // 是否为全天事件,可选 |
| | | // // color: '#f08f00', |
| | | // // textColor: '#000', |
| | | // className: 'read-all-day' |
| | | // }, |
| | | // { |
| | | // id: 3, |
| | | // title: '09:30~11:30 小1破孩', |
| | | // start: '2022-03-11', |
| | | // end: '2022-03-20', |
| | | // color: '#f08f01' |
| | | // }, |
| | | // { |
| | | // id: 2, |
| | | // title: '9:30~14:30 项目会议', |
| | | // start: '2022-03-21', |
| | | // end: '2022-03-25', |
| | | // color: '#6bb377' |
| | | // } |
| | | // ] |
| | | |
| | | // 事件 |
| | | editable: true, // 是否可以进行(拖动、缩放)修改 |
| | | eventStartEditable: true, // Event日程开始时间可以改变,默认为true,若为false,则表示开始结束时间范围不能拉伸,只能拖拽 |
| | | eventDurationEditable: true, // Event日程的开始结束时间距离是否可以改变,默认为true,若为false,则表示开始结束时间范围不能拉伸,只能拖拽 |
| | | selectable: true, // 是否可以选中日历格 |
| | | selectMirror: true, |
| | | editable: false, // 是否可以进行(拖动、缩放)修改 |
| | | eventStartEditable: false, // Event日程开始时间可以改变,默认为true,若为false,则表示开始结束时间范围不能拉伸,只能拖拽 |
| | | eventDurationEditable: false, // Event日程的开始结束时间距离是否可以改变,默认为true,若为false,则表示开始结束时间范围不能拉伸,只能拖拽 |
| | | selectable: false, // 是否可以选中日历格 |
| | | selectMirror: false, |
| | | selectMinDistance: 0, // 选中日历格的最小距离 |
| | | weekends: true, |
| | | weekMode: 'liquid', // 在月视图里显示周的模式,因为每月周数可能不同,所以月视图高度不一定。 |
| | | navLinks: true, // 天链接 |
| | | selectHelper: false, |
| | | selectEventOverlap: false, // 相同时间段的多个日程视觉上是否允许重叠,默认为true,允许 |
| | | dayMaxEvents: true, |
| | | dayMaxEvents: false, |
| | | dateClick: this.handleDateClick, // 日期点击 |
| | | eventMouseEnter: this.handleEventMouseEnter, |
| | | eventsSet: this.handleEvents, // 事件点击 |
| | | eventClick: this.handleEventClick, // 日程点击信息展示 |
| | | eventDrop: this.handleEventDrop, // 日程拖动事件 |
| | |
| | | select: this.handleDateSelect, |
| | | customButtons: { |
| | | prev: { // this overrides the prev button |
| | | text: 'PREV', |
| | | click: () => { |
| | | this.prev() |
| | | // text: 'PREV', |
| | | click: (e) => { |
| | | this.prev(e) |
| | | } |
| | | }, |
| | | next: { // this overrides the next button |
| | | text: 'PREV', |
| | | // text: 'PREV', |
| | | click: () => { |
| | | this.next() |
| | | } |
| | | }, |
| | | today: { |
| | | text: '今天', |
| | | click: () => { |
| | | this.today() |
| | | click: (e) => { |
| | | this.today(e) |
| | | } |
| | | } |
| | | } |
| | |
| | | }, |
| | | |
| | | methods: { |
| | | prev () { |
| | | |
| | | prev (e) { |
| | | this.calendarApi.prev() |
| | | }, |
| | | // 切换下一个按钮事件 |
| | | next () { |
| | | next (e) { |
| | | this.calendarApi.next() |
| | | }, |
| | | // 点击今天按钮 |
| | | today () { |
| | | today (e) { |
| | | this.calendarApi.today() |
| | | }, |
| | | // 日程保存 |
| | |
| | | }, |
| | | // 日程事件点击 |
| | | handleEvents (info) { |
| | | console.log('handleEvents.info:', info) |
| | | // console.log('handleEvents.info:', info) |
| | | // this.currentEvents = events |
| | | }, |
| | | handleWeekendsToggle () { |
| | | console.log('handleWeekendsToggle') |
| | | this.calendarOptions.weekends = !this.calendarOptions.weekends |
| | | }, |
| | | // 日期点击 |
| | | handleDateClick (selectInfo) { |
| | | if (confirm('您是否要在【' + selectInfo.dateStr + '】添加一个新的事件?')) { |
| | | // 父组件直接调用子组件方法 |
| | | this.$refs.eventDialogue.openDialog('add') |
| | | // 父组件直接修改子组件变量 |
| | | // this.$refs['eventDialogue'].dialogVisible = true |
| | | } |
| | | |
| | | // if (confirm('您是否要在【' + selectInfo.dateStr + '】添加一个新的事件?')) { |
| | | // // 父组件直接调用子组件方法 |
| | | // this.$refs.eventDialogue.openDialog('add') |
| | | // // 父组件直接修改子组件变量 |
| | | // // this.$refs['eventDialogue'].dialogVisible = true |
| | | // } |
| | | |
| | | }, |
| | | // 日程点击信息展示 |
| | | handleEventClick (info) { |
| | | console.log('handleEventClick.info:', info) |
| | | info.el.style.borderColor = 'red' |
| | | this.$refs.eventDialogue.openDialog('view', info) |
| | | // console.log('handleEventClick.info:', info) |
| | | // info.el.style.borderColor = 'red' |
| | | // this.$refs.eventDialogue.openDialog('view', info) |
| | | }, |
| | | handleDateSelect (startDate, endDate, allDay, jsEvent, view) { |
| | | console.log(startDate, endDate, allDay, jsEvent, view) |
| | | }, |
| | | handleEventMouseEnter (info) { |
| | | const col = info.event.borderColor |
| | | const eve = info.event._def.extendedProps |
| | | const category = info.event._def.extendedProps.category |
| | | |
| | | tippy(info.el, { |
| | | // content:"<div style='width: 280px;background-color:#FAFAFA;padding:5px;font-size:14px;z-index:99999'>" + |
| | | // "<div style='color: #666666;overflow: hidden;'><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议名称:" + info.event.title+"</div>" + |
| | | // "<div style='color: #666666;overflow: hidden;'><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议类型:"+eve.type+"</div>" + |
| | | // "<div style='color: #666666;overflow: hidden;'><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议时间:"+eve.times+"</div>" + |
| | | // "<div style='color: #666666;overflow: hidden;'><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议状态:"+eve.status+"</div>" + |
| | | // "</div>", |
| | | content: `<div style='width: 260px;background-color:#FAFAFA;padding:5px;font-size:14px;z-index:99999;'> |
| | | <div style='display:flex;color: #666666;overflow: hidden;' class="${eve.category == 1 ? 'hidden' : ''}"> |
| | | <div><span style='display:inline-block;width:6px;height:6px;background-color:${col};border-radius:50%;margin:0 5px;'></span>活动名称: </div> |
| | | <div style="width:161px;white-space:normal;overflow: auto;table-layout:fixed; word-break: break-all; height:auto;display:inner-block">${info.event.title}</div> |
| | | </div> |
| | | |
| | | </div>`, |
| | | // <div style='color: #666666;overflow: hidden;' class="${eve.category == 1 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议类型:${eve.type}</div> |
| | | // <div style='color: #666666;overflow: hidden;' class="${eve.category == 1 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议时间:${eve.times}</div> |
| | | // <div style='color: #666666;overflow: hidden;' class="${eve.category == 1 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议状态:${eve.status}</div> |
| | | // <div style='color: #666666;overflow: hidden;' class="${eve.category == 0 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>年份:${eve.year}</div> |
| | | // <div style='color: #666666;overflow: hidden;' class="${eve.category == 0 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>领域角色:${eve.depRoleName}</div> |
| | | // <div style='color: #666666;overflow: hidden;' class="${eve.category == 0 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>姓名:${eve.name}</div> |
| | | theme: 'light-border', // 主题选取 |
| | | // trigger: 'click', //触发类型 |
| | | interactive: true, // 可交互的 |
| | | placement: 'top-start', // 悬浮框位置 |
| | | allowHTML: true, // 是否允许html文本 |
| | | zIndex: 99999 |
| | | }) |
| | | }, |
| | | // 日程事件触发 |
| | | eventClick (info) { |
| | |
| | | }, |
| | | // 日程拖动事件 |
| | | handleEventDrop (info) { |
| | | this.$refs.eventDialogue.eventFormModel.start = info.event.start |
| | | this.$refs.eventDialogue.eventFormModel.end = info.event.end |
| | | // this.$refs.eventDialogue.eventFormModel.start = info.event.start |
| | | // this.$refs.eventDialogue.eventFormModel.end = info.event.end |
| | | }, |
| | | // 日程缩放事件 |
| | | eventResize (info) { |
| | | this.$refs.eventDialogue.eventFormModel.start = info.event.start |
| | | this.$refs.eventDialogue.eventFormModel.end = info.event.end |
| | | // this.$refs.eventDialogue.eventFormModel.start = info.event.start |
| | | // this.$refs.eventDialogue.eventFormModel.end = info.event.end |
| | | }, |
| | | closeCurrent () { |
| | | this.$store.commit('SET_CALENDERSHOW', false) |
| | | } |
| | | } |
| | | } |
| | |
| | | right: 0; |
| | | bottom: 0; |
| | | margin: auto; |
| | | border-radius: 10px; |
| | | overflow: hidden; |
| | | box-shadow: 0 0 4px 2px #dddddd; |
| | | |
| | | .header { |
| | | position: relative; |
| | | padding: 0 10px; |
| | | line-height: 40px; |
| | | background: #2196f3; |
| | | color: #fff; |
| | | font-size: 18px; |
| | | .celebrate { |
| | | width: 20px; |
| | | height: 20px; |
| | | vertical-align: middle; |
| | | } |
| | | .close { |
| | | position: absolute; |
| | | right: 10px; |
| | | top: 0; |
| | | left: auto; |
| | | bottom: 0; |
| | | margin: auto; |
| | | width: 16px; |
| | | height: 16px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | |
| | | .content { |
| | |
| | | padding: 0 10px 10px 10px; |
| | | height: calc(100% - 50px); |
| | | } |
| | | } |
| | | .read-all-day { |
| | | background: red; |
| | | color: green; |
| | | } |
| | | </style> |
| | |
| | | /> |
| | | </div> |
| | | <div class="content"> |
| | | <video :src="monitorUrl" controls autoplay></video> |
| | | <play-video |
| | | :sourceUrl="monitorUrl" |
| | | @playStatus="changePlayStatus" |
| | | ></play-video> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | this.$store.commit('SET_MONITORPOPUP', false) |
| | | }, |
| | | |
| | | changePlayStatus (status) { // 获取子组件的播放状态 |
| | | console.log(status) |
| | | }, |
| | | |
| | | audioPlay () { |
| | | if (this.audioFlag == false) { |
| | | this.audioMsg.text = this.audioSource |
| | |
| | | |
| | | <dimension /> |
| | | |
| | | <!-- <calender /> --> |
| | | <calender v-if="calenderShow" /> |
| | | |
| | | <left-nav ref="leftNav"></left-nav> |
| | | |
| | |
| | | components: { |
| | | mapPopup, |
| | | campusBuildingSearch, |
| | | dimension |
| | | // calender |
| | | dimension, |
| | | calender |
| | | }, |
| | | data () { |
| | | return { |
| | |
| | | 'campusNavFlag', |
| | | 'orgNavBarFlag', |
| | | 'arcNavBarFlag', |
| | | 'searchPopupFlag' |
| | | 'searchPopupFlag', |
| | | 'calenderShow' |
| | | ]) |
| | | }, |
| | | mounted () { |
| | |
| | | </template> |
| | | <template slot="public-box-content"> |
| | | <ul> |
| | | <li v-for="(item, index) in orgNavBarList" :key="index" @click="mapPopup(item)"> |
| | | <li |
| | | @mouseover="flickerStart(item, item.navTitle)" |
| | | @mouseout="flickerEnd(item, item.navTitle)" |
| | | v-for="(item, index) in orgNavBarList" |
| | | :key="index" |
| | | @click="mapPopup(item)" |
| | | > |
| | | <img :src="item.icon" alt /> |
| | | <span>{{ item.navTitle }}</span> |
| | | </li> |
| | |
| | | |
| | | <script> |
| | | import { mapGetters } from 'vuex' |
| | | |
| | | let currentOrgLayer = null |
| | | |
| | | export default { |
| | | name: 'OrgNavBar', |
| | |
| | | 'orgNavBarTitle' |
| | | ]) |
| | | }, |
| | | watch: { |
| | | orgNavBarList: { |
| | | handler (newData, oldData) { |
| | | if (newData.length > 0) { |
| | | currentOrgLayer = new global.DC.HtmlLayer('currentOrgLayer') |
| | | global.viewer.addLayer(currentOrgLayer) |
| | | |
| | | newData.forEach((item, index) => { |
| | | const divIcon = new global.DC.DivIcon( |
| | | new global.DC.Position(Number(item.longitude), Number(item.latitude), 0), |
| | | ` |
| | | <div class="tag-entitys-box"> |
| | | <div class="tag-content"> |
| | | ${item.navTitle} |
| | | </div> |
| | | <div class="tag-angle-content"> |
| | | <img src="https://map.hit.edu.cn/images/tarrow_xq.png"> |
| | | </div> |
| | | </div> |
| | | ` |
| | | ) |
| | | |
| | | divIcon.attr.name = item.navTitle |
| | | |
| | | currentOrgLayer.addOverlay(divIcon) |
| | | }) |
| | | } else { |
| | | this.removeLayer() |
| | | } |
| | | }, |
| | | immediate: true |
| | | } |
| | | }, |
| | | methods: { |
| | | removeLayer () { |
| | | if (currentOrgLayer != null) { |
| | | global.viewer.removeLayer(currentOrgLayer) |
| | | currentOrgLayer = null |
| | | } |
| | | }, |
| | | |
| | | mapPopup (item) { |
| | | this.$store.commit('CLEAR_ALL', null) |
| | | |
| | |
| | | this.$store.commit('SET_DETAILSPOPUP', false) |
| | | this.$store.commit('SET_PANORAMAPOPUP', false) |
| | | this.$store.commit('SET_MONITORPOPUP', false) |
| | | this.removeLayer() |
| | | }, |
| | | flickerStart (param, name) { |
| | | const layerIcon = currentOrgLayer.getOverlaysByAttr('name', name) |
| | | |
| | | currentOrgLayer.removeOverlay(layerIcon[0]) |
| | | |
| | | const divIcon = new global.DC.DivIcon( |
| | | new global.DC.Position(Number(param.longitude), Number(param.latitude), 0), |
| | | ` |
| | | <div class="tag-entitys-box layer-entity-animation"> |
| | | <div class="tag-content"> |
| | | ${param.navTitle} |
| | | </div> |
| | | <div class="tag-angle-content"> |
| | | <img src="https://map.hit.edu.cn/images/tarrow_xq.png"> |
| | | </div> |
| | | </div> |
| | | ` |
| | | ) |
| | | |
| | | divIcon.attr.name = param.navTitle |
| | | |
| | | currentOrgLayer.addOverlay(divIcon) |
| | | }, |
| | | flickerEnd (param, name) { |
| | | const layerIcon = currentOrgLayer.getOverlaysByAttr('name', name) |
| | | |
| | | currentOrgLayer.removeOverlay(layerIcon[0]) |
| | | |
| | | const divIcon = new global.DC.DivIcon( |
| | | new global.DC.Position(Number(param.longitude), Number(param.latitude), 0), |
| | | ` |
| | | <div class="tag-entitys-box"> |
| | | <div class="tag-content"> |
| | | ${param.navTitle} |
| | | </div> |
| | | <div class="tag-angle-content"> |
| | | <img src="https://map.hit.edu.cn/images/tarrow_xq.png"> |
| | | </div> |
| | | </div> |
| | | ` |
| | | ) |
| | | |
| | | divIcon.attr.name = param.navTitle |
| | | |
| | | currentOrgLayer.addOverlay(divIcon) |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <template> |
| | | <div class="ali-player"> |
| | | <div class="main"> |
| | | <div class="video-center"> |
| | | <div v-if="!sourceUrls && !loadingVideo" class="tips">请选择视频源</div> |
| | | <div v-if="waiting" class="tips">获取视频中,请稍等...</div> |
| | | <div |
| | | v-if="!hls" |
| | | class="video" |
| | | v-loading="loadingVideo" |
| | | style="background-color: #0c0b0b" |
| | | ></div> |
| | | <video |
| | | v-show="hls" |
| | | id="publicVideo" |
| | | v-loading="loadingVideo" |
| | | controls |
| | | class="video" |
| | | ref="publicVideo" |
| | | style="background-color: #0c0b0b" |
| | | ></video> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Hls from 'hls.js' |
| | | export default { |
| | | name: 'playVideo', |
| | | components: {}, |
| | | props: { |
| | | sourceUrl: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | height: { |
| | | type: String, |
| | | default: '550px' |
| | | } |
| | | }, |
| | | data () { |
| | | return { |
| | | hls: null, |
| | | sourceUrls: this.sourceUrl, // 如果不赋值,在加载组件时会报错 |
| | | loadingVideo: false, |
| | | waiting: false, |
| | | reloadPlayTime: null // 当视频流获取超时定时器 |
| | | } |
| | | }, |
| | | computed: { |
| | | |
| | | }, |
| | | watch: { |
| | | sourceUrl: { |
| | | handler (newVal, oldVal) { |
| | | console.log(newVal, 465) |
| | | if (this.reloadPlayTime) { // 重新播放或者播放新视频时,清空定时器 |
| | | console.log('清空定时器...') |
| | | this.videoPause() |
| | | clearTimeout(this.reloadPlayTime) |
| | | } |
| | | if (newVal && newVal !== oldVal) { |
| | | this.waiting = true |
| | | this.sourceUrls = newVal |
| | | this.playVideo() |
| | | } |
| | | }, |
| | | // 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法 |
| | | immediate: true |
| | | } |
| | | |
| | | }, |
| | | created () { }, |
| | | mounted () { |
| | | }, |
| | | methods: { |
| | | playVideo () { |
| | | this.$nextTick(() => { |
| | | this.loadingVideo = false |
| | | }) |
| | | if (Hls.isSupported()) { |
| | | this.hls = new Hls() |
| | | this.hls.loadSource(this.sourceUrls) |
| | | this.hls.attachMedia(this.$refs.publicVideo) |
| | | |
| | | this.hls.on(Hls.Events.MANIFEST_PARSED, (event, data) => { |
| | | // console.log(event, data); |
| | | this.loadingVideo = false |
| | | this.waiting = false |
| | | this.$emit('playStatus', true) // 当点位存在播放地址时,可以截图 |
| | | console.log('playing...') |
| | | this.$refs.publicVideo.play() |
| | | /* playSetTime = setTimeout(()=>{ |
| | | clearTimeout(this.reloadPlayTime); |
| | | },3000) */ |
| | | // 当正在播放时,取消定时器 |
| | | }) |
| | | const timerArr = [] |
| | | let delay = 5000 |
| | | this.hls.on(Hls.Events.ERROR, (event, data) => { |
| | | delay += 1000 |
| | | console.log(event, data) |
| | | if (data.type === 'networkError') { // 网络故障 |
| | | console.log('网络故障了...') |
| | | this.reloadPlayTime = setTimeout(() => { |
| | | this.$message.warning('获取视频失败,请重新播放...') |
| | | this.sourceUrls = '' |
| | | this.loadingVideo = false |
| | | this.waiting = false |
| | | this.disabledShot = true |
| | | this.$emit('playStatus', false) |
| | | this.videoPause() |
| | | // 监听出错事件 |
| | | }, delay) |
| | | timerArr.push(this.reloadPlayTime) |
| | | |
| | | if (timerArr.length > 1) { |
| | | // 当视频播放中无法播放时,会多次执行Hls.Events.ERROR,因此需要处理一下定时器触发问题 |
| | | for (let i = 1; i < timerArr.length; i++) { |
| | | clearTimeout(timerArr[i]) |
| | | timerArr.splice(i, 1) |
| | | } |
| | | } |
| | | console.log(timerArr) |
| | | } else if (data.type === 'mediaError') { // 推流失败 |
| | | // console.log("播放流断了...."); |
| | | } |
| | | }) |
| | | } else if (this.$refs.publicVideo.canPlayType('application/vnd.apple.mpegurl')) { |
| | | /* this.$refs.video.src = 'https://video-dev.github.io/streams/x36xhzz/x36xhzz.m3u8'; |
| | | this.$refs.video.addEventListener('loadedmetadata',function() { |
| | | this.$refs.video.play(); |
| | | }); */ |
| | | } |
| | | }, |
| | | // 停止流 |
| | | videoPause () { |
| | | if (this.hls) { |
| | | this.$refs.publicVideo.pause() |
| | | this.hls.destroy() |
| | | this.hls = null |
| | | } |
| | | } |
| | | }, |
| | | beforeDestroy () { |
| | | clearTimeout(this.reloadPlayTime) |
| | | this.hls = null |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .ali-player { |
| | | width: 460px; |
| | | height: 320px; |
| | | .main { |
| | | width: 100%; |
| | | height: 100%; |
| | | box-sizing: border-box; |
| | | color: #ffffff; |
| | | .video-center { |
| | | position: relative; |
| | | width: 100%; |
| | | height: 100%; |
| | | .name { |
| | | position: absolute; |
| | | left: 50%; |
| | | top: -20px; |
| | | font-size: 18px; |
| | | -webkit-transform: translateX(-50%); |
| | | transform: translateX(-50%); |
| | | } |
| | | .tips { |
| | | position: absolute; |
| | | top: 50%; |
| | | left: 50%; |
| | | -webkit-transform: translate(-50%, -50%); |
| | | transform: translate(-50%, -50%); |
| | | z-index: 9999; |
| | | opacity: 0.79; |
| | | } |
| | | } |
| | | } |
| | | #publicVideo { |
| | | width: 100%; |
| | | height: 100%; |
| | | object-fit: fill; |
| | | opacity: 0.79; |
| | | } |
| | | .video { |
| | | width: 100%; |
| | | height: 100%; |
| | | opacity: 0.79; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div id="video-box"> |
| | | <video id="hlsVideo" ref="hlsVideo" controls preload="true"></video> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Hls from 'hls.js' |
| | | export default { |
| | | name: 'playVideo', |
| | | data () { |
| | | return { |
| | | hls: '' |
| | | } |
| | | }, |
| | | methods: { |
| | | destroyHls: function () { |
| | | if (this.hls) { |
| | | this.$refs.hlsVideo.pause() |
| | | this.hls.destroy() |
| | | this.hls = null |
| | | } |
| | | }, |
| | | loadVideoFn: function () { |
| | | if (Hls.isSupported()) { |
| | | this.hls = new Hls() |
| | | this.hls.loadSource('http://171.34.197.243:786/devimages/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8') // CCTV1直播源 |
| | | this.hls.attachMedia(this.$refs.hlsVideo) |
| | | this.hls.on(Hls.Events.MANIFEST_PARSED, () => { |
| | | console.log('加载成功') |
| | | this.$refs.hlsVideo.play() |
| | | }) |
| | | this.hls.on(Hls.Events.ERROR, (event, data) => { |
| | | // console.log(event, data); |
| | | // 监听出错事件 |
| | | console.log('加载失败') |
| | | }) |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | |
| | | }, |
| | | |
| | | created: function () { |
| | | const _this = this |
| | | _this.$once('hook:beforeDestroy', () => { |
| | | _this.destroyHls() |
| | | }) |
| | | }, |
| | | |
| | | mounted () { |
| | | const _this = this |
| | | _this.loadVideoFn() |
| | | }, |
| | | |
| | | watch: { |
| | | }, |
| | | |
| | | components: { |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | #hlsVideo { |
| | | width: 460px; |
| | | height: 320px; |
| | | border: none; |
| | | object-fit: fill; |
| | | } |
| | | </style> |
| | |
| | | <template slot="title"> |
| | | <i class="custom-icon menu-ztdt"></i> 专题地图 |
| | | </template> |
| | | <!-- <el-menu-item index="/pcLayout/default/specialmap/celebrate">校区庆</el-menu-item> --> |
| | | <el-menu-item index="/pcLayout/default/specialmap/welcome">校区迎新</el-menu-item> |
| | | <el-menu-item index="/pcLayout/default/specialmap/welcome?name=校庆">校庆</el-menu-item> |
| | | <el-menu-item index="/pcLayout/default/specialmap/welcome?name=校区迎新">校区迎新</el-menu-item> |
| | | </el-submenu> |
| | | |
| | | <el-submenu index="tool"> |
| | |
| | | /* * @Author: Morpheus * @Name: 校区庆 * @Date: 2021-11-15 17:14:47 * @Last |
| | | Modified by: Morpheus * @Last Modified time: 2022-01-05 14:05:59 */ |
| | | /* * @Author: Morpheus * @Name: 校区迎新 * @Date: 2021-11-15 17:14:47 * @Last |
| | | Modified by: Morpheus * @Last Modified time: 2022-01-26 10:51:24 */ |
| | | <template> |
| | | <div> |
| | | <service-nav-bar |
| | | :title="title" |
| | | :arcCode="code" |
| | | :headerLog="headerLog" |
| | | ></service-nav-bar> |
| | | </div> |
| | | <div> |
| | | <div class="welcome-container"> |
| | | <div class="header"> |
| | | <div class="title"> |
| | | {{ title }} |
| | | <a href="javascript:void(0);" title="全景浏览"> |
| | | <img |
| | | @click="panoramaPlay" |
| | | class="panorama-control deblurring" |
| | | src="/img/icon/panorama.png" |
| | | alt |
| | | /> |
| | | </a> |
| | | <a href="javascript:void(0);" title="语音介绍"> |
| | | <img |
| | | @click="audioPlay" |
| | | class="audio-control deblurring" |
| | | :src="audioImgUrl" |
| | | alt |
| | | /> |
| | | </a> |
| | | <a href="javascript:void(0);" title="关闭"> |
| | | <img |
| | | @click="closeModel" |
| | | class="close-box deblurring" |
| | | src="/img/navicon/close.png" |
| | | alt |
| | | /> |
| | | </a> |
| | | </div> |
| | | </div> |
| | | <div class="content-box"> |
| | | <div class="img-exhibition"> |
| | | <div class="content"> |
| | | <el-carousel :interval="5000" arrow="always" height="300px"> |
| | | <el-carousel-item v-for="item in list" :key="item"> |
| | | <el-image :src="item" :preview-src-list="[item]"></el-image> |
| | | </el-carousel-item> |
| | | </el-carousel> |
| | | </div> |
| | | </div> |
| | | <div class="organizer">主办:{{ sponsor }}</div> |
| | | <div class="undertake">承办:{{ undertake }}</div> |
| | | <div class="time-box">时间:{{ time }}</div> |
| | | <div class="text-introduce"> |
| | | <div class="title">相关介绍:</div> |
| | | <div class="content"> |
| | | <p v-text="introduce"></p> |
| | | </div> |
| | | </div> |
| | | <div class="panorama-box" v-show="panoramaShow"> |
| | | <div class="title"> |
| | | 全景浏览 |
| | | <a href="javascript:void(0);" title="关闭"> |
| | | <img |
| | | @click="(panoramaShow = false), (panoramaUrl = '')" |
| | | class="close-box" |
| | | src="/img/navicon/close.png" |
| | | alt |
| | | /> |
| | | </a> |
| | | </div> |
| | | <div class="content"> |
| | | <iframe |
| | | style="width: 100%; height: 100%" |
| | | :src="panoramaUrl" |
| | | frameborder="0" |
| | | ></iframe> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { mapGetters } from "vuex"; |
| | | import { getWelcome } from '@/api/pc/public/specialmap' |
| | | import { mapGetters } from 'vuex' |
| | | |
| | | let pathLayer = null |
| | | let pointLayer = null |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | title: "圈存机", |
| | | code: 6, |
| | | headerLog: "/img/icon/service-qcj.png", |
| | | }; |
| | | }, |
| | | created() { |
| | | if (this.orgNavBarFlag == true) { |
| | | this.$store.commit("SET_ORGNAVBARTITLE", ""); |
| | | this.$store.commit("SET_ORGNAVBARLIST", []); |
| | | this.$store.commit("SET_ORGNAVBARFLAG", false); |
| | | } |
| | | if (this.arcNavBarFlag == true) { |
| | | this.$store.commit("SET_ARCNAVBARTITLE", ""); |
| | | this.$store.commit("SET_ARCNAVBARCODE", ""); |
| | | this.$store.commit("SET_ARCNAVBARFLAG", false); |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters([ |
| | | // 校区内导航的显示关闭 |
| | | "orgNavBarFlag", |
| | | "arcNavBarFlag", |
| | | ]), |
| | | }, |
| | | methods: { |
| | | closeModel() { |
| | | this.$store.dispatch("delVisitedViews", this.$route); |
| | | this.$router.push("/pcLayout/default"); |
| | | data () { |
| | | return { |
| | | time: '', |
| | | sponsor: '', |
| | | undertake: '', |
| | | title: '', |
| | | introduce: '', |
| | | list: [], |
| | | pathList: [], |
| | | pointNameList: [], |
| | | pointList: [], |
| | | panoramaUrlOne: '', |
| | | panoramaUrl: '', |
| | | audioSource: '', |
| | | audioFlag: false, |
| | | audioCourse: false, |
| | | audioSynth: null, |
| | | audioMsg: null, |
| | | panoramaShow: false, |
| | | audioImgUrl: '/img/icon/start-video.png' |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | created () { }, |
| | | mounted () { |
| | | var that = this |
| | | |
| | | this.audioSynth = window.speechSynthesis |
| | | |
| | | this.audioMsg = new window.SpeechSynthesisUtterance() |
| | | |
| | | this.audioMsg.onend = function () { |
| | | // this.audioSynth.cancel(); |
| | | that.audioFlag = false |
| | | that.audioCourse = false |
| | | that.audioImgUrl = '/img/icon/close-video.png' |
| | | } |
| | | this.getData() |
| | | |
| | | window.onbeforeunload = e => { // 刷新时弹出提示 |
| | | this.audioSynth.cancel() |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters([ |
| | | // 校区内导航的显示关闭 |
| | | 'campusNavFlag', |
| | | 'orgNavBarFlag', |
| | | 'arcNavBarFlag' |
| | | ]) |
| | | }, |
| | | methods: { |
| | | getData () { |
| | | getWelcome({ hdname: '校区迎新' }).then((res) => { |
| | | var result = res.data.data |
| | | this.title = result.hdname |
| | | this.time = result.time |
| | | this.sponsor = result.sponsor |
| | | this.undertake = result.undertake |
| | | this.panoramaUrl = result.panoramaurl |
| | | this.panoramaUrlOne = result.panoramaurl |
| | | this.introduce = result.context |
| | | this.audioSource = result.context |
| | | |
| | | this.audioPlay() |
| | | |
| | | this.list = result.tpurl.split(',') |
| | | this.pointNameList = result.addressname.split(',') |
| | | this.pointList = result.address.split(';') |
| | | |
| | | var a = result.lx.split(';') |
| | | |
| | | a.forEach((item) => { |
| | | var b = item.split('(') |
| | | var c = b[1].substr(0, b[1].length - 1) |
| | | var d = c.split(',') |
| | | var j = [] |
| | | d.forEach((it) => { |
| | | var e = it.split(' ') |
| | | var f = e.join(',') |
| | | j.push(f) |
| | | }) |
| | | var k = j.join(';') |
| | | this.pathList.push(k) |
| | | }) |
| | | |
| | | pathLayer = new global.DC.VectorLayer('pathLayer') |
| | | global.viewer.addLayer(pathLayer) |
| | | |
| | | pointLayer = new global.DC.HtmlLayer('pointLayer') |
| | | global.viewer.addLayer(pointLayer) |
| | | |
| | | this.pathList.forEach((item) => { |
| | | this.drawPolyline(item) |
| | | }) |
| | | |
| | | this.pointList.forEach((item, index) => { |
| | | this.drawPoint(item.split(','), this.pointNameList[index]) |
| | | }) |
| | | if (this.pointList.length > 0) { |
| | | this.$store.dispatch('pcMoveView', { |
| | | viewer: global.viewer, |
| | | jd: +this.pointList[0].split(',')[0] - 0.0005, |
| | | wd: this.pointList[0].split(',')[1] |
| | | }) |
| | | } else { |
| | | this.$store.dispatch('pcMoveView', { |
| | | viewer: global.viewer, |
| | | jd: +this.pathList[0].split(';')[0].split(',')[0] - 0.0005, |
| | | wd: this.pathList[0].split(';')[0].split(',')[1] |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | drawPolyline (item) { |
| | | const polyline = new global.DC.Polyline(item) |
| | | |
| | | polyline.setStyle({ |
| | | width: 6, |
| | | arcType: true, |
| | | material: new global.DC.PolylineImageTrailMaterialProperty({ |
| | | color: global.DC.Namespace.Cesium.Color.fromBytes(10, 255, 10), |
| | | speed: 60, |
| | | image: '/img/icon/right.png', |
| | | repeat: { x: 320, y: 1 } |
| | | }), |
| | | clampToGround: true |
| | | }) |
| | | |
| | | pathLayer.addOverlay(polyline) |
| | | }, |
| | | drawPoint (item, name) { |
| | | const divIcon = new global.DC.DivIcon( |
| | | new global.DC.Position(Number(item[0]), Number(item[1]), 0), |
| | | ` |
| | | <div class="point-entitys-box"> |
| | | <div class="point-logo"> |
| | | <img src="/img/icon/activity.png"> |
| | | </div> |
| | | <div class="point-title"> |
| | | ${name} |
| | | </div> |
| | | </div> |
| | | ` |
| | | ) |
| | | pointLayer.addOverlay(divIcon) |
| | | }, |
| | | audioPlay () { |
| | | if (this.audioFlag == false) { |
| | | this.audioMsg.text = this.audioSource |
| | | this.audioSynth.speak(this.audioMsg) |
| | | this.audioFlag = true |
| | | this.audioCourse = true |
| | | this.audioImgUrl = '/img/icon/start-video.png' |
| | | } else { |
| | | if (this.audioCourse == true) { |
| | | this.audioSynth.pause() |
| | | this.audioCourse = false |
| | | this.audioImgUrl = '/img/icon/close-video.png' |
| | | } else { |
| | | this.audioSynth.resume() |
| | | this.audioCourse = true |
| | | this.audioImgUrl = '/img/icon/start-video.png' |
| | | } |
| | | } |
| | | }, |
| | | |
| | | closeModel () { |
| | | global.viewer.removeLayer(pathLayer) |
| | | global.viewer.removeLayer(pointLayer) |
| | | |
| | | this.audioSynth.cancel() |
| | | this.audioFlag = false |
| | | this.audioCourse = false |
| | | |
| | | this.$store.dispatch('delVisitedViews', this.$route) |
| | | this.$router.push('/pcLayout/default') |
| | | }, |
| | | |
| | | panoramaPlay () { |
| | | this.panoramaShow = true |
| | | this.panoramaUrl = this.panoramaUrlOne |
| | | } |
| | | }, |
| | | destroyed () { |
| | | this.audioSynth.cancel() |
| | | global.viewer.removeLayer(pathLayer) |
| | | global.viewer.removeLayer(pointLayer) |
| | | // console.log("关闭", "see1"); |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style></style> |
| | | <style lang="scss" scope> |
| | | .welcome-container { |
| | | padding: 10px; |
| | | position: fixed; |
| | | top: 132px; |
| | | left: 132px; |
| | | width: 480px; |
| | | height: 720px; |
| | | background: rgba(40, 187, 240, 0.7); |
| | | border-radius: 10px; |
| | | color: #fff; |
| | | border: 1px solid #29baf1; |
| | | box-shadow: 0 0 10px 2px #29baf1; |
| | | |
| | | .header { |
| | | margin-bottom: 10px; |
| | | height: 36px; |
| | | line-height: 36px; |
| | | text-align: center; |
| | | position: relative; |
| | | background: #29baf1; |
| | | |
| | | .title { |
| | | .panorama-control { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 56px; |
| | | bottom: 0; |
| | | left: auto; |
| | | margin: auto; |
| | | width: 16px; |
| | | height: 16px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .audio-control { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 32px; |
| | | bottom: 0; |
| | | left: auto; |
| | | margin: auto; |
| | | width: 16px; |
| | | height: 16px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .close-box { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 8px; |
| | | bottom: 0; |
| | | left: auto; |
| | | margin: auto; |
| | | width: 16px; |
| | | height: 16px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .content-box { |
| | | padding: 0 16px; |
| | | height: calc(100% - 36px); |
| | | |
| | | & > div { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | & > div:last-child { |
| | | margin-bottom: 0px; |
| | | } |
| | | |
| | | .text-introduce { |
| | | height: calc(100% - 458px); |
| | | |
| | | .title { |
| | | position: relative; |
| | | padding-left: 24px; |
| | | height: 36px; |
| | | line-height: 36px; |
| | | |
| | | &::before { |
| | | position: absolute; |
| | | top: 12px; |
| | | left: 0; |
| | | width: 0; |
| | | height: 6px; |
| | | border: 6px solid #fff; |
| | | box-sizing: border-box; |
| | | box-shadow: 0px 0px 4px 1px #fff; |
| | | border-radius: 50%; |
| | | content: ''; |
| | | } |
| | | } |
| | | |
| | | .content { |
| | | height: calc(100% - 36px); |
| | | |
| | | p { |
| | | height: 100%; |
| | | text-indent: 2em; |
| | | font-size: 16px; |
| | | letter-spacing: 2px; |
| | | line-height: 24px; |
| | | overflow-y: auto; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .organizer, |
| | | .undertake, |
| | | .time-box { |
| | | padding-left: 24px; |
| | | position: relative; |
| | | |
| | | height: 36px; |
| | | line-height: 36px; |
| | | |
| | | &::before { |
| | | position: absolute; |
| | | top: 12px; |
| | | left: 0px; |
| | | width: 0; |
| | | height: 6px; |
| | | border: 6px solid #fff; |
| | | box-sizing: border-box; |
| | | box-shadow: 0px 0px 4px 1px #fff; |
| | | border-radius: 50%; |
| | | content: ''; |
| | | } |
| | | } |
| | | |
| | | .panorama-box { |
| | | padding: 10px; |
| | | margin: auto !important; |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | z-index: 10; |
| | | width: 560px; |
| | | height: 406px; |
| | | background: rgba(40, 187, 240, 0.7); |
| | | border-radius: 10px; |
| | | color: #fff; |
| | | border: 1px solid #29baf1; |
| | | box-shadow: 0 0 10px 2px #29baf1; |
| | | |
| | | .title { |
| | | margin-bottom: 10px; |
| | | height: 36px; |
| | | line-height: 36px; |
| | | text-align: center; |
| | | position: relative; |
| | | background: #29baf1; |
| | | |
| | | .panorama-control { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 56px; |
| | | bottom: 0; |
| | | left: auto; |
| | | margin: auto; |
| | | width: 16px; |
| | | height: 16px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .audio-control { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 32px; |
| | | bottom: 0; |
| | | left: auto; |
| | | margin: auto; |
| | | width: 16px; |
| | | height: 16px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .close-box { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 8px; |
| | | bottom: 0; |
| | | left: auto; |
| | | margin: auto; |
| | | width: 16px; |
| | | height: 16px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | |
| | | .content { |
| | | padding: 0 10px; |
| | | height: calc(100% - 46px); |
| | | |
| | | .iframe { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .img-exhibition { |
| | | height: 300px; |
| | | |
| | | .content { |
| | | .el-image { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | margin: auto; |
| | | // width: 100%; |
| | | height: 100%; |
| | | |
| | | img { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | margin: auto; |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | }, |
| | | methods: { |
| | | getData () { |
| | | getWelcome({ hdname: '校区迎新' }).then((res) => { |
| | | getWelcome({ hdname: this.$route.query.name }).then((res) => { |
| | | var result = res.data.data |
| | | this.title = result.hdname |
| | | this.time = result.time |
| | |
| | | dimensionData: (state) => state.mobile.dimensionData, // 维度镜头数据 |
| | | perspectiveControl: (state) => state.mobile.perspectiveControl, /// 视角控制:高度、角度 ()=>{} |
| | | audioState: (state) => state.mobile.audioState, // 文字转语音状态 |
| | | // areaLayer: (state) => state.mobile.areaLayer, // |
| | | // areaLayerSelect: (state) => state.mobile.select, // |
| | | // areaLayer: (state) => state.mobile.areaLayer, // |
| | | // areaLayerSelect: (state) => state.mobile.select, // |
| | | |
| | | isOpenDrawALine: (state) => state.mobile.isOpenDrawALine, // 是否开启路线 |
| | | isendPosition: (state) => state.mobile.isendPosition, // 路线导航终点数据改变 |
| | |
| | | ...navigation, |
| | | ...search, |
| | | viewerExist: (state) => state.viewer.viewerExist, |
| | | calenderShow: (state) => state.viewer.calenderShow, |
| | | twoOrThree: (state) => state.viewer.twoOrThree, |
| | | popupBgUrl: (state) => state.popupParams.popupBgUrl, |
| | | pupupQRUrl: (state) => state.popupParams.pupupQRUrl, |
| | |
| | | addIconsLayerIconPopup: (state) => state.popupParams.addIconsLayerIconPopup, // 自定义标签编辑窗口 |
| | | addIconsLayerIconPosition: (state) => state.popupParams.addIconsLayerIconPosition // 自定义标签编辑窗口 |
| | | } |
| | | export default getters |
| | | export default getters |
| | |
| | | const viewer = { |
| | | state: { |
| | | viewerExist: false, |
| | | calenderShow: false, |
| | | visitedViews: [], |
| | | cachedViews: [], |
| | | twoOrThree: '三 维' |
| | |
| | | SET_VIEWEREXIST (state, viewerExist) { |
| | | state.viewerExist = viewerExist |
| | | }, |
| | | SET_CALENDERSHOW (state, calenderShow) { |
| | | state.calenderShow = calenderShow |
| | | }, |
| | | SET_TWOORTHREE (state, twoOrThree) { |
| | | state.twoOrThree = twoOrThree |
| | | }, |
| New file |
| | |
| | | .calender-box { |
| | | .fc-toolbar-chunk { |
| | | button { |
| | | background: #2196f3; |
| | | border-color: #969696; |
| | | box-shadow: none !important; |
| | | } |
| | | } |
| | | |
| | | .fc .fc-button-primary:disabled { |
| | | background: #969696; |
| | | border-color: #969696; |
| | | } |
| | | |
| | | .fc .fc-button-primary:hover { |
| | | background: #116cb2 !important; |
| | | border-color: #969696 !important; |
| | | } |
| | | |
| | | .fc .fc-button-primary:not(:disabled):active, |
| | | .fc .fc-button-primary:not(:disabled).fc-button-active { |
| | | background: #116cb2 !important; |
| | | border-color: #969696 !important; |
| | | } |
| | | |
| | | .fc-event-title { |
| | | text-overflow: ellipsis !important; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | .red-all-day { |
| | | background: rgb(255, 0, 0); |
| | | color: white; |
| | | } |
| | | |
| | | .green-all-day { |
| | | background: rgb(69, 255, 69); |
| | | color: white; |
| | | } |
| | | |
| | | .yellow-all-day { |
| | | background: rgb(173, 69, 0); |
| | | color: white; |
| | | } |
| | | |
| | | .orange-all-day { |
| | | background: rgb(255, 175, 25); |
| | | color: white; |
| | | } |
| | | |
| | | .blue-all-day { |
| | | background: rgb(9, 157, 255); |
| | | color: white; |
| | | } |
| | | |
| | | .pink-all-day { |
| | | background: rgb(170, 42, 63); |
| | | color: white; |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | .layer-entity-animation { |
| | | animation: moveLayerIcon 1s linear infinite; |
| | | } |
| | | |
| | | @keyframes moveLayerIcon { |
| | | 0% { |
| | | transform: translateY(0px); |
| | |
| | | @import './campus-nav.scss'; |
| | | @import './calender.scss'; |
| | | @import './element-ui.scss'; |
| | | @import './dc-ui.scss'; |
| | | |