ll
liukangdong
2025-01-22 a5f40b4c2590a3d61592f1918d689d4932545248
ll
已添加4个文件
已修改9个文件
582 ■■■■■ 文件已修改
h5/api/staff.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/yw.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/index.vue 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/inventory/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/login.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/polling/detail.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/polling/task.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/workOrder/wait.vue 431 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/home/ic_daiban@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/home/ic_pandian@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/side/xiaoxi_ic_tongzhi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/staff.js
@@ -45,3 +45,10 @@
  })
}
export const myNoticesH5 = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywWorkDesk/myNoticesH5',
    method: 'post',
    data
  })
}
h5/api/yw.js
@@ -141,6 +141,13 @@
    data
  })
}
// å¾®ä¿¡æ‰«ä¸€æ‰«
export const getRecordByUserPoint = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywPatrolTaskRecord/getRecordByUserPoint',
    data
  })
}
export const getFindByCode = (code) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywDevice/findByCode?deviceCode=' + code,
h5/pages.json
@@ -111,6 +111,13 @@
            {
                "navigationBarTitleText" : "问题上报"
            }
        },
        {
            "path" : "pages/workOrder/wait",
            "style" :
            {
                "navigationBarTitleText" : "任务中心"
            }
        }
    ],
    "globalStyle": {
h5/pages/index.vue
@@ -17,7 +17,8 @@
        <view class="list">
            <view v-for="item in list2" class="item" @click="itemClick(item)">
                <image :src="item.img"></image>
                <view class="name">{{item.name}}</view>
                <view class="name">{{item.name}}</view>
                <view v-if="item.name == '待办中心' && taskNum" class="superscript">{{taskNum}}</view>
            </view>
        </view>
        <view class="loginout" @click="loginOut">退出登陆</view>
@@ -26,7 +27,8 @@
<script>
    import {
        logoutPost
        logoutPost,
        myNoticesH5
    } from '@/api'
    export default {
        data() {
@@ -49,6 +51,12 @@
                        url: '/pages/operation/device',
                        img: require('@/static/home/ic_fangkebaobe@2x.png'),
                        auth: 'weixin:menu:visitcar'
                    },
                    {
                        name: '库存盘点',
                        url: '/pages/inventory/index',
                        img: require('@/static/home/ic_pandian@2x.png'),
                        auth: 'weixin:menu:visitcar'
                    },
                ],
                list2: [{
@@ -62,12 +70,21 @@
                        url: '/pages/operation/record',
                        img: require('@/static/home/ic_wodehuiyi@2x.png'),
                        auth: 'weixin:menu:visitcar'
                    },
                    {
                        name: '待办中心',
                        url: '/pages/workOrder/wait',
                        img: require('@/static/home/ic_daiban@2x.png'),
                        auth: 'weixin:menu:visitcar'
                    },
                ]
                ],
                taskNum: 0
            }
        },
        onLoad() {
        onShow() {
            myNoticesH5({ page: 1, capacity: 1,model: {status: 0}}).then(res => {
                this.taskNum = res.data.total
            })
        },
        methods: {
            itemClick(item) {
@@ -132,8 +149,8 @@
                display: flex;
                flex-direction: column;
                align-items: center;
                width: 25%;
                width: 25%;
                position: relative;
                image {
                    width: 88rpx;
                    height: 88rpx;
@@ -143,6 +160,20 @@
                .name {
                    font-size: 26rpx;
                }
                .superscript{
                    height: 40rpx;
                    width: 40rpx;
                    position: absolute;
                    top: -16rpx;
                    right: 24rpx;
                    background-color: red;
                    color: #fff;
                    font-size: 24rpx;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    border-radius: 50%;
                }
            }
        }
h5/pages/inventory/index.vue
@@ -88,7 +88,6 @@
                        } 
                    }
                })
            },
            handleQuery() {
                this.list = []
h5/pages/login.vue
@@ -29,7 +29,9 @@
        loginPost,
        getUserInfo,
        sendSMsPost,
        ywWxAuthorize
        ywWxAuthorize,
        getRecordByUserPoint
    } from '@/api'
    import {
        mapState,
@@ -45,11 +47,19 @@
                    code: ''
                },
                downTime: 0,
                code: '111'
                // code: ''
                code: ''
            }
        },
        onLoad(option) {
            console.log('onLoad');
            // https://zhcg.fnwtzx.com/#/pages/login?type=0&ywid=ywid
            if (option.ywid || option.ywid == 0) {
                uni.setStorageSync('ywinfo', {
                    type: option.type,
                    ywid: option.ywid
                })
            }
        },
        onShow() {
            // return
            var that = this
@@ -66,19 +76,31 @@
                ywWxAuthorize({
                    code: code || this.code
                }).then(res => {
                    if (res.code === 200) {
                    if (res.code === 200) {
                        console.log('res', res);
                        that.$store.commit('setOpenId', res.data.openid)
                        if (res.data.token && res.data.token != '') {
                        if (res.data.token && res.data.token != '') {
                            that.$store.commit('setToken', res.data.token)
                            getUserInfo().then(ress => {
                                that.$store.commit('setUserInfo', ress.data)
                            })
                            setTimeout(() => {
                                uni.redirectTo({
                                    url: "/pages/index"
                            const ywinfo = uni.getStorageSync('ywinfo') || {}
                            if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
                                getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
                                    if(res.data && res.data.id){
                                        uni.setStorageSync('ywinfo', {})
                                        uni.redirectTo({
                                            url: "/pages/polling/point?id=" + res.data.id
                                        })
                                    }
                                })
                            }, 300)
                            } else {
                                setTimeout(() => {
                                    uni.redirectTo({
                                        url: "/pages/index"
                                    })
                                }, 300)
                            }
                        }
                    }
                })
@@ -92,12 +114,6 @@
            }
        },
        // onBackPress(options) {
        //     uni.redirectTo({
        //         url: '/pages/login/login'
        //     })
        //     return true
        // },
        methods: {
            ...mapMutations(["setToken", "setUserInfo"]),
            onLogin() {
@@ -122,10 +138,24 @@
                        this.setToken(res.data)
                        this.showToast('登录成功')
                        getUserInfo().then(ress => {
                            this.setUserInfo(ress.data)
                            uni.redirectTo({
                                url: "/pages/index"
                            })
                            this.setUserInfo(ress.data)
                            const ywinfo = uni.getStorageSync('ywinfo') || {}
                            if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
                            getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
                                getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
                                    if(res.data && res.data.id){
                                        uni.setStorageSync('ywinfo', {})
                                        uni.redirectTo({
                                            url: "/pages/polling/point?id=" + res.data.id
                                        })
                                    }
                                })
                            })
                            } else {
                                uni.redirectTo({
                                    url: "/pages/index"
                                })
                            }
                        })
                    }
                })
h5/pages/polling/detail.vue
@@ -129,10 +129,12 @@
                            },
                            (decodeText, decodeResult) => {
                                if (decodeText) { //这里decodeText就是通过扫描二维码得到的内容
                                    this.stopScan(); //关闭扫码功能
                                    this.stopScan(); //关闭扫码功能
                                    const index = decodeText.indexOf('ywid')
                                    let pointCode = decodeText.slice(index + 5)
                                    getPointRecordByCode({
                                        taskId: this.id,
                                        pointCode: decodeText
                                        pointCode
                                    }).then(ress => {
                                        if (ress.data) {
                                            uni.navigateTo({
h5/pages/polling/task.vue
@@ -117,10 +117,12 @@
                            },
                            (decodeText, decodeResult) => {
                                if (decodeText) { //这里decodeText就是通过扫描二维码得到的内容
                                    const index = decodeText.indexOf('ywid')
                                    let pointCode = decodeText.slice(index + 5)
                                    this.stopScan(); //关闭扫码功能
                                    getPointRecordByCode({
                                        taskId: item.id,
                                        pointCode: decodeText
                                        pointCode
                                    }).then(ress=> {
                                        if(ress.data){
                                            uni.navigateTo({
h5/pages/workOrder/wait.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,431 @@
<template>
    <view class="main_app">
        <view class="tabs">
            <view class="tab" :class="{active: queryStatus == 0}" @click="tabsClick(0)">
                <text>待办</text>
                <text class="border"></text>
            </view>
            <view class="tab" :class="{active: queryStatus == 1}" @click="tabsClick(1)">
                <text>已办</text>
                <text class="border"></text>
            </view>
        </view>
        <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
            <view class="list">
                <view class="item" @click="itemClick(item)" v-for="item in list">
                    <view class="img">
                        <image v-if="item.type == 0 && item.status == 0" src="@/static/side/ic_pandian@2x.png"></image>
                        <image v-if="item.type == 1 && item.status == 0" src="@/static/side/xunjianed.png"></image>
                        <image v-if="item.type == 2 && item.status == 0" src="@/static/side/workordered.png"></image>
                        <image v-if="item.type == 0 && item.status == 1" src="@/static/side/ic_pandian_grey@2x.png"></image>
                        <image v-if="item.type == 1 && item.status == 1" src="@/static/side/xunjian.png"></image>
                        <image v-if="item.type == 2 && item.status == 1" src="@/static/side/workorder.png"></image>
                    </view>
                    <view class="content">
                        <view class="title" v-if="item.obj">
                            <view>{{item.obj.key1}}</view>
                            <view v-if="item.status == 0 && item.type == 2" class="status">待处理</view>
                            <view v-if="item.status == 0 && item.param3 == 0 && (item.type == 0 || item.type == 1)" class="status">未开始
                            </view>
                            <view v-if="item.status == 0 && item.param3 == 1 && (item.type == 0 || item.type == 1)"
                                class="status green">进行中</view>
                            <view v-if="item.status == 1 && item.type == 2" class="status gray">已处理</view>
                            <view v-if="item.status == 1 && (item.type == 0 || item.type == 1)" class="status gray">已完成</view>
                        </view>
                        <template v-if="item.obj && item.type == 1">
                            <view class="text">任务日期:{{item.obj.key2}}</view>
                            <view class="text">执行时间:{{item.obj.key3}}</view>
                            <view class="text">
                                <view class="">巡检负责人:{{item.obj.key4}}</view>
                                <view class="btn" @click.stop="openSc(item)">
                                    <image src="@/static/side/ic_saoma@2x.png" mode=""></image>
                                    <view v-if="item.status == 0" class="">扫码巡检</view>
                                </view>
                            </view>
                        </template>
                        <template v-if="item.obj && item.type == 0">
                            <view class="content">
                                <view class="text">盘点日期:{{item.obj.key2}}</view>
                                <view class="text">盘点仓库:{{item.obj.key3}}</view>
                                <view class="text">
                                    <view class="">盘点员:{{item.obj.key4}}</view>
                                    <view v-if="item.status == 0 && item.param3 == 0" class="btn" @click.stop="startHandle(item)">开始盘点
                                    </view>
                                    <view v-if="item.status == 0 && item.param3 == 1" class="btn" @click.stop="startHandle(item)">继续盘点
                                    </view>
                                </view>
                            </view>
                        </template>
                        <template v-if="item.obj && item.type == 2">
                            <view class="content">
                                <view class="text">上报时间:{{item.obj.key2}}</view>
                                <view class="text">位置类型:{{item.obj.key3}}</view>
                                <view class="text">工单分类:{{item.obj.key4}}</view>
                            </view>
                        </template>
                    </view>
                </view>
            </view>
            <view class="empty" v-if="list.length == 0">
                <image src="@/static/empty.png" mode=""></image>
                <view class="">暂无数据</view>
            </view>
        </scroll-view>
        <!--  -->
        <view class="reader-box" @click="stopScan" v-if="isScaning">
            <view class="reader" id="reader"></view>
        </view>
    </view>
</template>
<script>
    import {
        myNoticesH5,
        ywStocktakingBegin,
        getPointRecordByCode
    } from '@/api'
    import {
        Html5Qrcode
    } from 'html5-qrcode';
    export default {
        data() {
            return {
                list: [],
                total: 0,
                page: 1,
                queryStatus: 0,
                html5Qrcode: null,
                isScaning: false,
            };
        },
        onShow() {
            this.page = 1
            this.list = []
            this.getList()
        },
        methods: {
            tabsClick(val) {
                this.list = []
                this.page = 1
                this.queryStatus = val
                this.getList()
            },
            itemClick(item) {
                if (item.objType == 0) {
                    return
                    uni.navigateTo({
                        url: `/pages/inventory/detail?id=${item.objId}`
                    })
                } else if (item.objType == 1) {
                    // return
                    uni.navigateTo({
                        url: `/pages/polling/detail?id=${item.objId}`
                    })
                } else {
                    uni.navigateTo({
                        url: `/pages/workOrder/detail?id=${item.objId}`
                    })
                }
            },
            startHandle(item) {
                if (item.param3 == 0) {
                    uni.showModal({
                        content: '盘点期间不可进行出入库操作',
                        success: (res) => {
                            if (res.confirm) {
                                ywStocktakingBegin(item.objId).then(() => {
                                    uni.navigateTo({
                                        url: '/pages/inventory/detail?id=' + item.objId
                                    })
                                })
                            }
                        }
                    })
                }else{
                    uni.navigateTo({
                        url: '/pages/inventory/detail?id=' + item.objId
                    })
                }
            },
            getList() {
                const {
                    page,
                    total,
                    list,
                    queryStatus
                } = this
                myNoticesH5({
                    page,
                    capacity: 20,
                    model: {
                        status: queryStatus
                    }
                }).then(res => {
                    this.list = [...this.list, ...res.data.records]
                    this.list.forEach(item => {
                        item.obj = JSON.parse(item.param2)
                    })
                    console.log(this.list);
                    this.total = res.data.total
                })
            },
            scrolltolower() {
                const {
                    total,
                    list
                } = this
                if (list.length < total) {
                    this.page = this.page + 1
                    this.getList()
                } else {
                    this.showToast('暂无更多数据')
                }
            },
            openSc(item) {
                this.isScaning = true;
                Html5Qrcode.getCameras().then((devices) => {
                    if (devices && devices.length) {
                        this.html5Qrcode = new Html5Qrcode('reader');
                        this.html5Qrcode.start({
                                facingMode: 'environment'
                            }, {
                                focusMode: 'continuous', //设置连续聚焦模式
                                fps: 5, //设置扫码识别速度
                                qrbox: 280 //设置二维码扫描框大小
                            },
                            (decodeText, decodeResult) => {
                                if (decodeText) { //这里decodeText就是通过扫描二维码得到的内容
                                    this.stopScan(); //关闭扫码功能
                                    const index = decodeText.indexOf('ywid')
                                    let pointCode = decodeText.slice(index + 5)
                                    getPointRecordByCode({
                                        taskId: item.objId,
                                        pointCode
                                    }).then(ress => {
                                        if (ress.data) {
                                            uni.navigateTo({
                                                url: '/pages/polling/point?id=' + ress.data.id
                                            })
                                        } else {
                                            this.showToast('未匹配到巡检点,请重新扫描')
                                        }
                                    })
                                }
                            },
                            (err) => {
                                // console.log(err);  //错误信息
                            }
                        );
                    }
                });
            },
            stopScan() {
                console.log('停止扫码')
                this.isScaning = false;
                if (this.html5Qrcode) {
                    this.html5Qrcode.stop();
                }
            },
        }
    }
</script>
<style lang="scss">
    page {
        background-color: #f7f7f7;
        .main_app {
            padding: 0;
            height: 100vh;
            overflow: hidden;
        }
        .tabs {
            display: flex;
            width: 750rpx;
            margin: 12rpx 0rpx 0;
            border-bottom: 1rpx solid #E5E5E5;
            background-color: #fff;
            .tab {
                font-size: 30rpx;
                color: #666666;
                flex: 1;
                display: flex;
                flex-direction: column;
                align-items: center;
                justify-content: flex-end;
                height: 88rpx;
                .name {
                    display: flex;
                    align-items: center;
                }
                .icon {
                    width: 28rpx;
                    height: 28rpx;
                    margin-right: 10rpx;
                }
                .border {
                    width: 54rpx;
                    height: 6rpx;
                    background-color: #fff;
                    border-radius: 3rpx;
                    margin-top: 24rpx;
                }
            }
            .active {
                font-weight: 600;
                font-size: 32rpx;
                color: #222222;
                .border {
                    background-color: $primaryColor;
                }
            }
        }
        .scroll_Y {
            height: calc(100vh - 120rpx);
            .empty {
                padding-top: 260rpx;
                image {
                    width: 360rpx;
                    height: 360rpx;
                    margin-bottom: 10rpx;
                }
                display: flex;
                flex-direction: column;
                justify-content: center;
                align-items: center;
                color: #999999;
            }
        }
        .list {
            // padding-top: 20rpx;
            .item {
                width: 100%;
                background: #FFFFFF;
                border-radius: 8rpx;
                display: flex;
                padding: 30rpx 24rpx;
                border-bottom: 1rpx solid #e5e5e5;
                .img {
                    position: relative;
                    margin-right: 20rpx;
                    flex-shrink: 0;
                    position: relative;
                    image {
                        width: 72rpx;
                        height: 72rpx;
                    }
                    .dian {
                        position: absolute;
                        background-color: red;
                        width: 18rpx;
                        height: 18rpx;
                        border-radius: 50%;
                        top: -8rpx;
                        right: -8rpx;
                    }
                }
                .content {
                    flex: 1;
                    .title {
                        font-weight: 500;
                        font-size: 32rpx;
                        color: #222222;
                        margin-bottom: 6rpx;
                        display: flex;
                        align-items: center;
                        justify-content: space-between;
                        .status {
                            color: $primaryColor;
                            font-weight: 400;
                            font-size: 28rpx;
                        }
                        .green {
                            color: #0ADE79;
                        }
                        .gray {
                            color: #999999;
                        }
                    }
                    .text {
                        font-size: 26rpx;
                        color: #666666;
                        height: 60rpx;
                        display: flex;
                        align-items: center;
                        justify-content: space-between;
                        .btn {
                            background-color: $primaryColor;
                            padding: 0 24rpx;
                            height: 60rpx;
                            border-radius: 30rpx;
                            display: flex;
                            align-items: center;
                            color: #fff;
                            image {
                                width: 28rpx;
                                height: 28rpx;
                                margin-right: 6rpx;
                            }
                        }
                    }
                    .time {
                        font-size: 26rpx;
                        color: #999999;
                    }
                }
            }
        }
    }
    .reader-box {
        position: fixed;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        background-color: rgba(0, 0, 0, 0.5);
    }
    .reader {
        width: 100%;
        // width: 540rpx;
        // height: 540rpx;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }
</style>
h5/static/home/ic_daiban@2x.png
h5/static/home/ic_pandian@2x.png
h5/static/side/xiaoxi_ic_tongzhi@2x.png
h5/utils/config.js
@@ -1,6 +1,6 @@
 export const baseUrl = 'gateway_interface/'
 // export const baseUrl = 'gateway_interface/'
// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
// export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/'
export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/'
export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`