shuishen
2022-03-24 369b82a3d81afe2f0574e2c44fd0a2918516b433
日历部分调整,视频部分调整,专题部分调整
14 files modified
4 files added
1673 ■■■■■ changed files
package-lock.json 23 ●●●●● patch | view | raw | blame | history
package.json 3 ●●●●● patch | view | raw | blame | history
public/img/icon/school-celebrate.png patch | view | raw | blame | history
src/components/leftNav/index.vue 45 ●●●● patch | view | raw | blame | history
src/components/map/components/calender.vue 585 ●●●● patch | view | raw | blame | history
src/components/map/components/mapPopup.vue 9 ●●●● patch | view | raw | blame | history
src/components/map/index.vue 9 ●●●●● patch | view | raw | blame | history
src/components/orgNavBar/index.vue 97 ●●●●● patch | view | raw | blame | history
src/components/playVideo/index copy.vue 197 ●●●●● patch | view | raw | blame | history
src/components/playVideo/index.vue 73 ●●●●● patch | view | raw | blame | history
src/pcLayout/index.vue 4 ●●●● patch | view | raw | blame | history
src/pcviews/specialmap/celebrate.vue 548 ●●●●● patch | view | raw | blame | history
src/pcviews/specialmap/welcome.vue 2 ●●● patch | view | raw | blame | history
src/store/getters.js 7 ●●●●● patch | view | raw | blame | history
src/store/modules/viewer.js 4 ●●●● patch | view | raw | blame | history
src/styles/pcpage/calender.scss 62 ●●●●● patch | view | raw | blame | history
src/styles/pcpage/dc-ui.scss 4 ●●●● patch | view | raw | blame | history
src/styles/pcpage/index.scss 1 ●●●● patch | view | raw | blame | history
package-lock.json
@@ -1352,6 +1352,11 @@
        }
      }
    },
    "@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",
@@ -6830,6 +6835,11 @@
      "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",
@@ -8589,6 +8599,11 @@
      "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",
@@ -12302,6 +12317,14 @@
      "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",
package.json
@@ -19,7 +19,10 @@
        "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",
public/img/icon/school-celebrate.png
src/components/leftNav/index.vue
@@ -39,7 +39,8 @@
    computed: {
        ...mapGetters([
            'closeMapClick', // 关闭地图点击,防止新增标签误触
            'addIconsLayerIconPopup' // 传送关闭编辑窗口,刷新标签数据
            'addIconsLayerIconPopup', // 传送关闭编辑窗口,刷新标签数据
            'calenderShow'
        ])
    },
    data () {
@@ -77,14 +78,14 @@
                    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',
@@ -123,6 +124,19 @@
            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: {
@@ -196,10 +210,18 @@
            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 () {
@@ -484,7 +506,6 @@
                    )
                ]
            })
            // console.log(value, "see");
            this.$store.dispatch('setOurDataInPoput', value)
            this.$store.dispatch('pcFlyView', {
                jd: value.lng,
src/components/map/components/calender.vue
@@ -1,6 +1,15 @@
<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>
@@ -16,11 +25,378 @@
// 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: {
@@ -50,9 +426,10 @@
                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',
@@ -64,45 +441,72 @@
                    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, // 日程拖动事件
@@ -110,21 +514,21 @@
                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)
                        }
                    }
                }
@@ -137,15 +541,16 @@
    },
    methods: {
        prev () {
        prev (e) {
            this.calendarApi.prev()
        },
        // 切换下一个按钮事件
        next () {
        next (e) {
            this.calendarApi.next()
        },
        // 点击今天按钮
        today () {
        today (e) {
            this.calendarApi.today()
        },
        // 日程保存
@@ -185,27 +590,64 @@
        },
        // 日程事件点击
        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) {
@@ -214,13 +656,16 @@
        },
        // 日程拖动事件
        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)
        }
    }
}
@@ -238,13 +683,33 @@
    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 {
@@ -252,9 +717,5 @@
        padding: 0 10px 10px 10px;
        height: calc(100% - 50px);
    }
}
.read-all-day {
    background: red;
    color: green;
}
</style>
src/components/map/components/mapPopup.vue
@@ -219,7 +219,10 @@
                                    />
                                </div>
                                <div class="content">
                                    <video :src="monitorUrl" controls autoplay></video>
                                    <play-video
                                        :sourceUrl="monitorUrl"
                                        @playStatus="changePlayStatus"
                                    ></play-video>
                                </div>
                            </div>
                        </div>
@@ -1087,6 +1090,10 @@
            this.$store.commit('SET_MONITORPOPUP', false)
        },
        changePlayStatus (status) { // 获取子组件的播放状态
            console.log(status)
        },
        audioPlay () {
            if (this.audioFlag == false) {
                this.audioMsg.text = this.audioSource
src/components/map/index.vue
@@ -31,7 +31,7 @@
        <dimension />
        <!-- <calender /> -->
        <calender v-if="calenderShow" />
        <left-nav ref="leftNav"></left-nav>
@@ -65,8 +65,8 @@
    components: {
        mapPopup,
        campusBuildingSearch,
        dimension
        // calender
        dimension,
        calender
    },
    data () {
        return {
@@ -158,7 +158,8 @@
            'campusNavFlag',
            'orgNavBarFlag',
            'arcNavBarFlag',
            'searchPopupFlag'
            'searchPopupFlag',
            'calenderShow'
        ])
    },
    mounted () {
src/components/orgNavBar/index.vue
@@ -9,7 +9,13 @@
        </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>
@@ -20,6 +26,8 @@
<script>
import { mapGetters } from 'vuex'
let currentOrgLayer = null
export default {
    name: 'OrgNavBar',
@@ -47,7 +55,47 @@
            '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)
@@ -120,6 +168,53 @@
            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)
        }
    }
}
src/components/playVideo/index copy.vue
New file
@@ -0,0 +1,197 @@
<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>
src/components/playVideo/index.vue
New file
@@ -0,0 +1,73 @@
<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>
src/pcLayout/index.vue
@@ -70,8 +70,8 @@
                        <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">
src/pcviews/specialmap/celebrate.vue
@@ -1,52 +1,514 @@
/* * @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>
src/pcviews/specialmap/welcome.vue
@@ -136,7 +136,7 @@
    },
    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
src/store/getters.js
@@ -21,8 +21,8 @@
    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, // 路线导航终点数据改变
@@ -61,6 +61,7 @@
    ...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,
@@ -91,4 +92,4 @@
    addIconsLayerIconPopup: (state) => state.popupParams.addIconsLayerIconPopup, // 自定义标签编辑窗口
    addIconsLayerIconPosition: (state) => state.popupParams.addIconsLayerIconPosition // 自定义标签编辑窗口
}
export default getters
export default getters
src/store/modules/viewer.js
@@ -1,6 +1,7 @@
const viewer = {
    state: {
        viewerExist: false,
        calenderShow: false,
        visitedViews: [],
        cachedViews: [],
        twoOrThree: '三 维'
@@ -9,6 +10,9 @@
        SET_VIEWEREXIST (state, viewerExist) {
            state.viewerExist = viewerExist
        },
        SET_CALENDERSHOW (state, calenderShow) {
            state.calenderShow = calenderShow
        },
        SET_TWOORTHREE (state, twoOrThree) {
            state.twoOrThree = twoOrThree
        },
src/styles/pcpage/calender.scss
New file
@@ -0,0 +1,62 @@
.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;
}
src/styles/pcpage/dc-ui.scss
@@ -42,6 +42,10 @@
}
.layer-entity-animation {
    animation: moveLayerIcon 1s linear infinite;
}
@keyframes moveLayerIcon {
    0% {
        transform: translateY(0px);
src/styles/pcpage/index.scss
@@ -1,4 +1,5 @@
@import './campus-nav.scss';
@import './calender.scss';
@import './element-ui.scss';
@import './dc-ui.scss';