ll
liukangdong
2024-09-19 80d1d37bfad07bb37154f3dc471de6dabdbba688
ll
已添加1个文件
已修改8个文件
255 ■■■■ 文件已修改
admin/src/views/meeting/components/OperaRoomsWindow.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staffLogin/login.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/redirect.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/.hbuilderx/launch.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/package-lock.json 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/package.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/pages/index/index.vue 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/components/OperaRoomsWindow.vue
@@ -150,9 +150,6 @@
    open(title, target) {
      this.title = title
      this.visible = true
      this.form.imgFullUrl = ''
      // this.timeRange = ['14:34:55', '14:34:55']
      // debugger
      this.timeRange = ['', '']
      // æ–°å»º
      if (target == null) {
@@ -167,13 +164,14 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        if(target.fileType == 1 && target.multifileList && target.multifileList.length > 0){
          this.$set(this.form, 'videoFullUrl', target.multifileList[0].fileurlFull)
          this.$set(this.form, 'videourl', target.multifileList[0].fileurl)
        }
        this.timeRange = [target.startTime, target.endTime]
        this.form.projectList = this.form.projectList ? target.projectList.map(item => item.projectId) : []
        this.form.sysList = this.form.sysList ? this.form.sysList.map(item => item.userId) : []
        // console.log(this.form.imgFullUrl);
        console.log(this.form)
        console.log(this.form.intervalTime)
        console.log(target)
      })
    },
    imgDel(i) {
h5/manifest.json
@@ -91,7 +91,7 @@
            "proxy" : {
                "/admin_interface" : {
                    // è¿™ä¸ªå­—段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
                    "target" : "http://192.168.0.139/admin_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "target" : "http://192.168.137.1:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://192.168.31.42:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://10.50.250.178:8088/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "changeOrigin" : true, // å…è®¸è·¨åŸŸ 
h5/pages/staffLogin/login.vue
@@ -71,7 +71,7 @@
  data() {
    return {
      form: {
        username: '18056814089',
        username: '13996529050',
        password: '123456',
                code: 1
      },
h5/static/redirect.html
@@ -7,6 +7,7 @@
    var p = location.href.split("?")
    // window.location.href = 'http://192.168.0.173/h5/#/pages/notice/notice?' + 'code=123123'
      window.location.href = 'http://192.168.0.173/h5/#/pages/notice/notice?' + p[1]
      // window.location.href = 'http://192.168.0.173/h5/#/pages/staff/meetingDetail?' + p[1]
      // window.location.href = 'http://192.168.0.173/h5/#/pages/staff/index?' + p[1]
  </script>
</head>
h5_meeting/.hbuilderx/launch.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
{
    "version" : "1.0",
    "configurations" : [
        {
            "openVueDevtools" : false,
            "type" : "uni-app:h5"
        }
    ]
}
h5_meeting/manifest.json
@@ -19,7 +19,7 @@
                        "/meetingAdmin": {
                            // è¿™ä¸ªå­—段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
                            // "target" : "http://192.168.0.173/admin_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                            "target": "http://192.168.0.139:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                            "target": "http://192.168.137.1:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                            "changeOrigin": true, // å…è®¸è·¨åŸŸ 
                            "pathRewrite": {
                                "^/meetingAdmin": "" // é‡å†™åœ°å€ï¼Œå¦‚果实际接口中是不带/dev-api,需要将这个前缀置空,因为这个前缀只是为了识别用,识别完之后就没用了
h5_meeting/package-lock.json
@@ -1,17 +1,131 @@
{
  "name": "h5_meeting",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
  "lockfileVersion": 1,
      "dependencies": {
        "dayjs": "^1.11.13"
    "balanced-match": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
    },
    "brace-expansion": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
      "requires": {
        "balanced-match": "^1.0.0"
      }
    },
    "node_modules/dayjs": {
      "version": "1.11.13",
      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
    "dayjs": {
      "version": "1.11.13"
    },
    "decompress-response": {
      "version": "6.0.0",
      "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
      "requires": {
        "mimic-response": "^3.1.0"
      }
    },
    "fs.realpath": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
    },
    "glob": {
      "version": "8.1.0",
      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
      "requires": {
        "fs.realpath": "^1.0.0",
        "inflight": "^1.0.4",
        "inherits": "2",
        "minimatch": "^5.0.1",
        "once": "^1.3.0"
      }
    },
    "inflight": {
      "version": "1.0.6",
      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
      "requires": {
        "once": "^1.3.0",
        "wrappy": "1"
      }
    },
    "inherits": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
    },
    "js-binary-schema-parser": {
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
      "integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg=="
    },
    "mimic-response": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
    },
    "minimatch": {
      "version": "5.1.6",
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
      "requires": {
        "brace-expansion": "^2.0.1"
      }
    },
    "once": {
      "version": "1.4.0",
      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
      "requires": {
        "wrappy": "1"
      }
    },
    "parenthesis": {
      "version": "3.1.8",
      "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz",
      "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="
    },
    "simple-concat": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
    },
    "simple-get": {
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
      "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
      "requires": {
        "decompress-response": "^6.0.0",
        "once": "^1.3.1",
        "simple-concat": "^1.0.0"
      }
    },
    "string-split-by": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz",
      "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
      "requires": {
        "parenthesis": "^3.1.5"
      }
    },
    "vue-qr": {
      "version": "4.0.9",
      "resolved": "https://registry.npmjs.org/vue-qr/-/vue-qr-4.0.9.tgz",
      "integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
      "requires": {
        "glob": "^8.0.1",
        "js-binary-schema-parser": "^2.0.2",
        "simple-get": "^4.0.1",
        "string-split-by": "^1.0.0"
      }
    },
    "wrappy": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
    }
  }
}
h5_meeting/package.json
@@ -1,5 +1,6 @@
{
  "dependencies": {
    "dayjs": "^1.11.13"
    "dayjs": "^1.11.13",
    "vue-qr": "^4.0.9"
  }
}
h5_meeting/pages/index/index.vue
@@ -2,37 +2,44 @@
    <view class="main_app">
        <image src="@/static/bg@2x.png" class="main_bg" mode=""></image>
        <view class="header_wrap">
            <view class="title" @touchend="touchend">会议室</view>
            <view class="title" @touchend="touchend">{{info.roomName}}</view>
            <view class="time_wrap">
                <view class="time">{{time}}</view>
                <view class="date">{{date}}</view>
            </view>
        </view>
        <view class="home_status orange">会议中</view>
        <view class="meeting_name">会议名称</view>
        <view class="home_status">
            <text v-if="!info.meetingListResponseList || info.meetingListResponseList.length == 0">空闲中</text>
            <text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 4">即将开始</text>
            <text class="orange" v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 2">会议中</text>
            <text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 1">未开始</text>
            <text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 3">已结束</text>
            <text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 5">已撤销</text>
        </view>
        <view class="meeting_name">{{meetingInfo.meetingName}}</view>
        <view class="meeting_con">
            <view class="content">
                <view class="line">
                    <image src="@/static/ic_time@2x.png"></image>
                    <text>10~12</text>
                    <text>{{meetingInfo.meetingTime }}</text>
                </view>
                <view class="line">
                    <image src="@/static/ic_people@2x.png"></image>
                    <text>10~12</text>
                    <text>预约人:{{meetingInfo.bookingUser }}</text>
                </view>
            </view>
            <view class="qrcode"></view>
            <vueQr v-if="meetingInfo.id" :text="meetingInfo.id" class="qrcode" />
        </view>
        <view class="meeting_wrap">
            <view class="title">今日会议(6)</view>
            <view class="title">今日会议({{ info.meetingListResponseList && info.meetingListResponseList.length > 0 ? info.meetingListResponseList.length : 0 }})</view>
            <view class="list">
                <view class="item">
                    <view class="name">开发部会议</view>
                    <view class="line">预约人:李怀英</view>
                    <view class="line">13:30~15:00(即将开始)</view>
                <view class="item" v-for="item in info.meetingListResponseList">
                    <view class="name">{{item.meetingName}}</view>
                    <view class="line">预约人:{{item.bookingUser}}</view>
                    <view class="line">{{item.meetingTime}}({{statusMap[item.meetingStatus]}})</view>
                    <image src="@/static/ic_meeting@2x.png" class="item_bg"></image>
                </view>
                <view class="item empty">
                <view v-if="!info.meetingListResponseList || info.meetingListResponseList.length == 0" class="item empty">
                    <view class="name">暂无会议</view>
                    <view class="line">预约人:-</view>
                    <view class="line">-</view>
@@ -40,22 +47,44 @@
                </view>
            </view>
        </view>
        <!--  -->
        <swiper v-if="info.fileType == 0 && info.multifileList && info.multifileList.length > 0" class="swiper" circular autoplay indicator-dots>
            <swiper-item v-for="item in info.multifileList">
                <image class="swiper_item" :src="item.fileurlFull" mode="aspectFill"></image>
            </swiper-item>
        </swiper>
        <!--  -->
        <template v-if="info.fileType == 1 && info.multifileList && info.multifileList.length > 0">
            <video  :src="info.multifileList[0].fileurlFull" class="app_video" :autoplay="true" loop :controls="false"></video>
        </template>
    </view>
</template>
<script>
    import dayjs from 'dayjs'
    import vueQr from 'vue-qr/src/packages/vue-qr.vue'
    import {
        meetScreenData
    } from '@/api/index.js'
    export default {
        components: {vueQr},
        data() {
            return {
                time: '',
                date: '',
                timer: null,
                touchNum: 0,
                param: {}
                param: {},
                info: {},
                statusMap: {
                    1: '未开始',
                    2: '进行中',
                    3: '已结束',
                    4: '即将开始',
                    5: '已撤销',
                },
                meetingInfo: {}
            }
        },
        onLoad() {
@@ -72,6 +101,12 @@
            getData() {
                meetScreenData({
                    roomId: this.param.code
                }).then(res => {
                    this.info = res.data
                    if(this.info.meetingListResponseList && this.info.meetingListResponseList.length > 0){
                        this.meetingInfo = this.info.meetingListResponseList[0]
                        this.$forceUpdate()
                    }
                })
            },
            touchend() {
@@ -96,12 +131,36 @@
                    this.time = dayjs().format('HH:mm')
                    this.date = dayjs().format('YYYY-MM-DD') + ' ' + weeks[new Date().getDay()]
                }, 1000)
                setInterval(() => {
                    this.getData()
                },this.param.time ? this.param.time * 1000 : 60 * 1000)
            }
        }
    }
</script>
<style lang="scss" scoped>
    .swiper{
        position: fixed;
        top: 0;
        left: 0;
        z-index: 999;
        width: 100%;
        height: 100vh;
        .swiper_item{
            background-color: #0095AC;
            width: 100%;
            height: 100vh;
        }
    }
    .app_video{
        width: 100%;
        height: 100vh;
        position: fixed;
        top: 0;
        left: 0;
        z-index: 999;
    }
    .main_app {
        width: 100%;
        min-height: 100vh;
@@ -112,7 +171,7 @@
        justify-content: space-between;
        padding-bottom: 35rpx;
        color: #fff;
        overflow: hidden;
        .meeting_wrap {
            margin-left: 42rpx;
            margin-top: 85rpx;
@@ -144,11 +203,13 @@
                    flex-direction: column;
                    width: 403rpx;
                    height: 315rpx;
                    background: linear-gradient(90deg, #0095AC 0%, #00B5D1 100%);
                    background: linear-gradient( 90deg, #0080FF 0%, #00B0FF 100%);
                    border-radius: 7rpx;
                    margin-right: 28rpx;
                    position: relative;
                    &:nth-of-type(1){
                        background: linear-gradient(90deg, #0095AC 0%, #00B5D1 100%);
                    }
                    .item_bg {
                        position: absolute;
                        width: 178rpx;
@@ -201,7 +262,6 @@
            .qrcode {
                width: 166rpx;
                height: 166rpx;
                border: 1px solid red;
            }
        }