jiangping
2024-05-09 ca4bba65d4a8f5b64765aef792d43b71b8130830
Merge remote-tracking branch 'origin/master'
已添加7个文件
已修改6个文件
737 ■■■■■ 文件已修改
h5/App.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/index.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/main.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingSub.vue 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingSubOrder.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/memberSel.vue 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/snapshot.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/visitorApplication/visitorApplication.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/staff/ar_left@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/staff/ar_right@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/staff/renyuan_ic_open.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/App.vue
@@ -168,8 +168,14 @@
            margin: 0;
            display: flex;
        }
        .df_ac{
            display: flex;
            align-items: center;
        }
        .main_app{
            padding: 0 30rpx;
            font-size: 28rpx;
            color: #222222;
        }
        .mr24{
            margin-right: 24rpx;
@@ -177,5 +183,8 @@
        .mr12{
            margin-right: 12rpx;
        }
        .mr6{
            margin-right: 6rpx;
        }
</style>
h5/api/index.js
@@ -1,4 +1,5 @@
import { http } from '@/utils/service.js'
export * from '@/utils/config.js'
// æŸ¥è¯¢å­—典值数据
export const getSystemDictData = (data) => {
h5/main.js
@@ -18,6 +18,11 @@
Vue.component('Tabbar', Tabbar)
Vue.component('navigation', navigation)
Vue.prototype.$store = store
Vue.prototype.$jump = (url) => {
    uni.navigateTo({
        url
    })
}
Vue.prototype.$onWait = new Promise((resolve) => {
  Vue.prototype.$reslove = resolve
})
h5/pages.json
@@ -188,7 +188,43 @@
            }
        }
    ],
        ,{
            "path" : "pages/staff/snapshot",
            "style" :
            {
                "navigationBarTitleText": "隐患随手拍",
                "enablePullDownRefresh": false
            }
        }
        ,{
            "path" : "pages/staff/memberSel",
            "style" :
            {
                "navigationBarTitleText": "选择人员",
                "enablePullDownRefresh": false
            }
        }
        ,{
            "path" : "pages/staff/meetingSub",
            "style" :
            {
                "navigationBarTitleText": "预约会议室",
                "enablePullDownRefresh": false
            }
        }
        ,{
            "path" : "pages/staff/meetingSubOrder",
            "style" :
            {
                "navigationBarTitleText": "确认预约",
                "enablePullDownRefresh": false
            }
        }
    ],
    "subPackages": [{
            "root": "n_pages",
            "pages": [{
h5/pages/staff/index.vue
@@ -12,29 +12,29 @@
        <view class="title_wrap"><view class="name">业务办理</view></view>
        <view class="container1">
            <view class="left">
                <view class="img_wrap img1">
                <view class="img_wrap img1" @click="jump('/pages/staff/visitorReport')">
                    <image src="@/static/staff/ic_fangkebaobei.png" class="img"></image>
                    <view class="h1">访客报备</view>
                    <view class="h2">VISITOR REPORTING</view>
                </view>
                <view class="img_wrap img2">
                <view class="img_wrap img2" @click="jump('/pages/staff/meetingSub')">
                    <image src="@/static/staff/ic_yuyuehuiyishi.png" class="img"></image>
                    <view class="h1">预约会议室</view>
                    <view class="h2">BOOK A MEETING ROOM</view>
                </view>
            </view>
            <view class="right">
                <view class="img_wrap img2">
                <view class="img_wrap img2" @click="jump('/pages/staff/snapshot')">
                    <image src="@/static/staff/ic_yinhuansuipai.png" class="img"></image>
                    <view class="h1">隐患随手拍</view>
                    <view class="h2">HIDDEN DANGER</view>
                </view>
                <view class="img_wrap img2">
                <view class="img_wrap img2" @click="jump('/pages/staff/snapshot')">
                    <image src="@/static/staff/ic_yongcheshenqing.png" class="img"></image>
                    <view class="h1">用车申请</view>
                    <view class="h2">VEHICLE APPLICATION</view>
                </view>
                <view class="img_wrap img2">
                <view class="img_wrap img2" @click="jump('/pages/staff/snapshot')">
                    <image src="@/static/staff/ic_xiugaimima.png" class="img"></image>
                    <view class="h1">修改密码</view>
                    <view class="h2">CHANGE PASSWORD</view>
h5/pages/staff/meetingSub.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,236 @@
<template>
    <view class="main_app">
        <view class="heade_title">
            <image class="icon" src="../../static/staff/ar_left@2x.png" mode="widthFix"></image>
            <text class="date">{{ activeDate }}</text>
            <image class="icon" src="../../static/staff/ar_right@2x.png" mode="widthFix"></image>
        </view>
        <!--  -->
        <view class="meeting_list">
            <view class="item" :class="{active: i === 0}" v-for="item,i in meetingList" :key="i">
                <view class="name">{{ item.name }}</view>
                <view class="line"></view>
            </view>
        </view>
        <!--  -->
        <view class="time_list">
            <view class="item" v-for="item,i in timeList" :key="i">{{ item.time }}</view>
        </view>
        <!--  -->
        <view class="main_footer">
            <view class="df_ac">
                <view>已选择:</view>
                <view class="sel_time">xxxxxx</view>
            </view>
            <view class="btns">
                <view class="left">
                    <view class="item" v-for="item in colorOptions" :key="item.name">
                        <view class="box" :style="{ background: item.color }"></view>
                        <view class="">{{ item.name }}</view>
                    </view>
                </view>
                <view class="sub" @click="$jump('/pages/staff/meetingSubOrder')">确认预约</view>
            </view>
        </view>
        <!--  -->
        <u-popup :show="isShowDetail" :round="12" mode="bottom" @close="isShowDetail = false">
            <view class="detail_modal">
                <view class="title">会议室预约情况</view>
                <view class="h1">讨论xxxxx选型</view>
                <view class="line">
                    <view class="label">会议时间</view>
                    <view class="value">00000</view>
                </view>
                <view class="line">
                    <view class="label">会议室</view>
                    <view class="value">00000</view>
                </view>
                <view class="line">
                    <view class="label">预约人</view>
                    <view class="value">00000</view>
                </view>
                <view class="btn" @click="isShowDetail = false">关闭</view>
            </view>
        </u-popup>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                activeDate: '2022å¹´',
                isShowDetail: true,
                meetingList: [
                    { name: '201会议室' },
                    { name: '201会议室' },
                    { name: '201会议室' },
                    { name: '201会议室' },
                ],
                timeList: [
                    { time: '08:30-09:00' },
                    { time: '08:30-09:00' },
                    { time: '08:30-09:00' },
                    { time: '08:30-09:00' },
                ],
                colorOptions: [
                    { color: '#279BAA', name: '已选择' },
                    { color: '#F7F7F7', name: '可预约' },
                    { color: '#cccccc', name: '不可预约' },
                ]
            };
        }
    }
</script>
<style lang="scss">
    .detail_modal{
        padding: 40rpx 30rpx;
        .title{
            text-align: center;
            font-weight: 500;
            font-size: 32rpx;
            margin-bottom: 40rpx;
        }
        .h1{
            font-weight: 500;
            font-size: 32rpx;
            margin-bottom: 30rpx;
        }
        .line{
            display: flex;
            margin-bottom: 20rpx;
            .label{
                width: 140rpx;
                color: #888888;
            }
            .value{
                color: #333333;
            }
        }
        .btn{
            margin-top: 230rpx;
            width: 690rpx;
            height: 88rpx;
            line-height: 88rpx;
            text-align: center;
            background: #279BAA;
            border-radius: 44rpx;
            font-weight: 500;
            font-size: 32rpx;
            color: #FFFFFF;
        }
    }
    .main_footer{
        position: absolute;
        width: 100%;
        left: 0;
        bottom: 0;
        padding: 20rpx 30rpx 84rpx;
        box-shadow: 0rpx -3rpx 6rpx 0rpx #EEEEEE;
        .sel_time{
            color: #279BAA;
        }
        .btns{
            margin-top: 10rpx;
            display: flex;
            justify-content: space-between;
            align-items: center;
            .left{
                display: flex;
                .item{
                    display: flex;
                    align-items: center;
                    margin-right: 20rpx;
                    .box{
                        margin-right: 10rpx;
                        width: 32rpx;
                        height: 32rpx;
                    }
                }
            }
            .sub{
                width: 184rpx;
                height: 72rpx;
                line-height: 72rpx;
                text-align: center;
                background: #279BAA;
                box-shadow: 0rpx -1rpx 0rpx 0rpx #EEEEEE;
                border-radius: 36rpx;
                font-size: 30rpx;
                color: #FFFFFF;
            }
        }
    }
    .time_list{
        display: flex;
        justify-content: space-between;
        padding: 30rpx;
        flex-wrap: wrap;
        .item{
            width: 220rpx;
            height: 80rpx;
            line-height: 80rpx;
            text-align: center;
            background: #F7F7F7;
            border-radius: 4rpx;
            margin-bottom: 24rpx;
            font-size: 30rpx;
        }
        .active{
            background-color: #279BAA;
            color: #fff;
        }
        .disable{
            background-color: #cccccc;
            color: #999999;
        }
    }
    .meeting_list{
        display: flex;
        padding-left: 30rpx;
        width: 720rpx;
        overflow-x: auto;
        border-bottom: 1rpx solid #E5E5E5;
        .item{
            flex-shrink: 0;
            margin-right: 60rpx;
            padding: 30rpx 0 0;
            .line{
                width: 60rpx;
                height: 4rpx;
                background-color: #fff;
                margin: 26rpx auto 0;
            }
        }
        .active{
            color: #279BAA;
            font-weight: 600;
            font-size: 30rpx;
            .line{
                width: 60rpx;
                height: 4rpx;
                background-color: #279BAA;
                margin: 26rpx auto 0;
            }
        }
    }
    .main_app{
        padding: 0;
    }
.heade_title{
    display: flex;
    justify-content: center;
    align-items: center;
    .date{
        margin: 0 24rpx;
        font-weight: 600;
        font-size: 32rpx;
    }
    .icon{
        width: 30rpx;
    }
}
</style>
h5/pages/staff/meetingSubOrder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<template>
    <view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            };
        }
    }
</script>
<style lang="scss">
</style>
h5/pages/staff/memberSel.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,216 @@
<template>
    <view class="main_app">
        <view class="search_inp df_ac">
            <u-icon size="28" class="mr12" color="#B2B2B2" name="search" />
            <input type="text" placeholder="搜索" placeholder-style="color: #999999;" />
        </view>
        <view class="member_list">
            <view class="line">
                <image src="../../static/logo@2x.png" class="avatar" mode=""></image>
                <view class="content">
                    <view class="info">
                        <text class="name">name</text>
                        <text class="tag">tag</text>
                    </view>
                    <view class="depart">xx科室</view>
                </view>
                <checkbox class="checkbox" />
                <text></text>
            </view>
            <view class="empty"></view>
        </view>
        <!--  -->
        <view class="sub_wrap">
            <view class="sel_mem">
                <text>已选择:</text>
                <view class="members">
                    <text v-for="(item, i) in 100" :key="i">{{ item }}</text>
                </view>
                <image @click="isShowSelMem = true" class="open_icon" src="../../static/staff/renyuan_ic_open.png" mode=""></image>
            </view>
            <view class="btn" @click="onSubmit">确认(00/20)</view>
        </view>
        <!--  -->
        <u-popup :show="isShowSelMem" :round="12" mode="bottom" @close="isShowSelMem = false">
            <view class="modal">
                <view class="modal_header">
                    <text class="status">已选择:xx人</text>
                    <text class="btn" @click="isShowSelMem = false">确认</text>
                </view>
                <view class="modal_mem_list">
                    <view class="line">
                        <image src="../../static/logo@2x.png" class="avatar" mode=""></image>
                        <view class="content">
                            <view class="info">
                                <text class="name">name</text>
                            </view>
                            <view class="depart">xx科室</view>
                        </view>
                        <view class="btn">移除</view>
                    </view>
                </view>
            </view>
        </u-popup>
    </view>
</template>
<script>
export default {
    data() {
        return {
            memberList: [],
            selList: [],
            isShowSelMem: false
        }
    },
    methods: {
        onSubmit() {
            uni.navigateBack()
        }
    }
};
</script>
<style lang="scss">
.modal {
    padding: 40rpx 30rpx;
    .modal_header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        .status {
            font-weight: 600;
        }
        .btn {
            color: #279baa;
        }
    }
    .modal_mem_list {
        .line {
            display: flex;
            align-items: center;
            border-bottom: 1rpx solid #e5e5e5;
            padding: 30rpx 0;
            .avatar {
                width: 64rpx;
                height: 64rpx;
                border-radius: 50%;
                overflow: hidden;
                margin-right: 20rpx;
            }
            .content {
                flex: 1;
                .depart {
                    font-size: 24rpx;
                    color: #666666;
                }
                .info {
                    display: flex;
                    margin-bottom: 16rpx;
                    .name {
                        font-size: 30rpx;
                    }
                }
            }
            .btn{
                width: 80rpx;
                height: 48rpx;
                line-height: 48rpx;
                text-align: center;
                font-size: 24rpx;
                color: #333333;
                border-radius: 4rpx;
                border: 1rpx solid #999999;
            }
        }
    }
}
.sub_wrap {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    box-shadow: 0rpx 0rpx 6rpx 0rpx #b2b2b2;
    padding: 30rpx 30rpx 64rpx;
    .sel_mem {
        display: flex;
        align-items: center;
        .members {
            width: 500rpx;
            color: #4d98a7;
            white-space: nowrap;
            overflow: hidden; //文本超出隐藏
            text-overflow: ellipsis;
            margin-right: 20rpx;
        }
        .open_icon {
            width: 44rpx;
            height: 44rpx;
        }
    }
    .btn {
        width: 690rpx;
        height: 88rpx;
        line-height: 88rpx;
        background: #279baa;
        border-radius: 44rpx;
        color: #fff;
        text-align: center;
        margin-top: 22rpx;
    }
}
.member_list {
    .line {
        display: flex;
        align-items: center;
        border-bottom: 1rpx solid #e5e5e5;
        padding: 30rpx 0;
        .avatar {
            width: 64rpx;
            height: 64rpx;
            border-radius: 50%;
            overflow: hidden;
            margin-right: 20rpx;
        }
        .content {
            flex: 1;
            .depart {
                font-size: 24rpx;
                color: #666666;
            }
            .info {
                display: flex;
                margin-bottom: 16rpx;
                .name {
                    font-size: 30rpx;
                }
                .tag {
                    font-size: 24rpx;
                    border-radius: 4rpx;
                    border: 1rpx solid #f62710;
                    color: #f62710;
                    padding: 0rpx 6rpx;
                    margin-left: 8rpx;
                }
            }
        }
    }
    .empty {
        width: 100%;
        height: 280rpx;
    }
}
.search_inp {
    height: 72rpx;
    background: #f7f7f7;
    border-radius: 4rpx;
    padding-left: 16rpx;
    input {
        flex: 1;
        font-size: 28rpx;
        color: #333333;
    }
}
</style>
h5/pages/staff/snapshot.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,198 @@
<template>
    <view class="main_app">
        <view class="main_wrap">
            <!--  -->
            <view class="line">
                <view class="label">
                    <text>*</text>
                    <text>隐患区域</text>
                </view>
                <view class="value" @click="isShowArea = true">
                    <text class="mr6" :style="{ color: param.area ? '#000000' : '#999999' }">{{ param.area ? param.area : '请选择' }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="line">
                <view class="label">
                    <text>*</text>
                    <text>接受人</text>
                </view>
                <view class="value" @click="selMember">
                    <text class="mr6" :style="{ color: param.area ? '#000000' : '#999999' }">{{ param.area ? param.area : '请选择' }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="empty"></view>
            <view class="line">
                <view class="label">
                    <text>*</text>
                    <text>隐患类型</text>
                </view>
                <view class="value">
                    <text class="mr6" :style="{ color: param.area ? '#000000' : '#999999' }">{{ param.area ? param.area : '请选择' }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="upload_line">
                <view class="name">现场情况</view>
                <view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-if="!param.imgurlUrl"><u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon></view>
                <view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-else><image :src="param.imgurlUrl" mode="widthFix"></image></view>
            </view>
            <view class="line">
                <view class="label">
                    <text></text>
                    <text>提报人</text>
                </view>
                <view class="value"><input type="text" placeholder="请输入提报人" v-model="param.receptMemberName" @blur="getUser" placeholder-style="color: #999999;" /></view>
            </view>
            <view class="line">
                <view class="label">
                    <text></text>
                    <text>联系电话</text>
                </view>
                <view class="value"><input type="text" placeholder="请输入联系电话" v-model="param.receptMemberName" @blur="getUser" placeholder-style="color: #999999;" /></view>
            </view>
            <view class="line">
                <view class="label">
                    <text></text>
                    <text>提报时间</text>
                </view>
                <view class="value">
                    <text class="mr6" :style="{ color: param.area ? '#000000' : '#999999' }">{{ param.area ? param.area : '请选择' }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
        </view>
        <!--  -->
        <!-- åŒºåŸŸ -->
        <u-picker keyName="name" :show="isShowArea" :columns="areaOptions" @confirm="seletedArea" @cancel="isShowArea = false"></u-picker>
    </view>
</template>
<script>
    import { uploadUrl } from '@/api'
export default {
    data() {
        return {
            param: {},
            isShowArea: false,
            areaOptions: [[{ name: '111', id: 11 }, { name: '111', id: 11 }]]
        };
    },
    methods: {
        seletedArea(e) {
            const item = e.value[0];
            console.log(item);
            this.isShowArea = false;
        },
        selMember() {
            uni.navigateTo({
                url: '/pages/staff/memberSel'
            });
        },
        upload() {
            uni.chooseImage({
                success: (chooseImageRes) => {
                    uni.showLoading({ title: '上传中', mask: true });
                    for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
                        uni.uploadFile({
                            url: `${uploadUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
                            filePath: chooseImageRes.tempFilePaths[i],
                            name: 'file',
                            formData: {
                                folderCode: 'MEMBER_IMG'
                            },
                            success: (uploadFileRes) => {
                                console.log('uploadFileRes', uploadFileRes);
                                let res = JSON.parse(uploadFileRes.data)
                                if (type === 'faceImg') {
                                    this.param.faceImg = res.data.halfPath
                                    this.param.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                } else {
                                    this.param.imgurl = res.data.halfPath
                                    this.param.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                }
                            },
                            complete() {
                                if (i === chooseImageRes.tempFilePaths.length - 1) {
                                    uni.hideLoading();
                                }
                            }
                        });
                    }
                }
            });
        },
        getUser() {}
    }
};
</script>
<style lang="scss" scoped>
.main_wrap {
    .line {
        display: flex;
        justify-content: space-between;
        align-items: center;
        border-bottom: 1rpx solid #e5e5e5;
        padding: 30rpx 0;
        .label {
            font-size: 30rpx;
            font-weight: 400;
            text {
                &:nth-child(1) {
                    color: #e42d2d;
                    margin-right: 4rpx;
                }
            }
        }
        .value {
            flex: 1;
            height: 100%;
            margin-left: 30rpx;
            display: flex;
            align-items: center;
            justify-content: flex-end;
            input {
                width: 100%;
                height: 100%;
                text-align: right;
                font-size: 28rpx;
                font-weight: 400;
                color: #222222;
            }
        }
    }
    .upload_line {
        padding: 30rpx 0;
        .adduser_list_item_ipt1_upload {
            margin-top: 24rpx;
            width: 120rpx;
            height: 120rpx;
            border: 2rpx solid #E5E5E5;
            background: #f7f7f7;
            color: #666666;
            font-size: 22rpx;
            display: flex;
            align-items: center;
            justify-content: center;
            overflow: hidden;
            image {
                width: 100%;
                height: 100%;
            }
        }
    }
}
.main_app {
    // padding-top: 10rpx;
}
.empty {
    width: 750rpx;
    height: 20rpx;
    background-color: #f7f7f7;
    margin: 0 -30rpx;
}
</style>
h5/pages/visitorApplication/visitorApplication.vue
@@ -564,11 +564,6 @@
                }
                uni.chooseImage({
                    success: (chooseImageRes) => {
                        // if (type === 'faceImg') {
                        //     this.photoSrc = chooseImageRes.tempFilePaths[0];
                        //     this.$refs.tlyPictureCut.showPop();
                        //     return
                        // }
                        uni.showLoading({ title: '上传中', mask: true });
                        for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
                            uni.uploadFile({
h5/static/staff/ar_left@2x.png
h5/static/staff/ar_right@2x.png
h5/static/staff/renyuan_ic_open.png