liuyg
2022-02-21 bb04d82473b44a79e9b823ab2054ee79814098a2
+整体任务实行流程完善
9 files modified
5 files added
1475 ■■■■ changed files
App.vue 23 ●●●●● patch | view | raw | blame | history
leafletMapOur/grabOrdersMap/js/vueMain.js 31 ●●●● patch | view | raw | blame | history
pages/grabOrders/feedback.vue 19 ●●●● patch | view | raw | blame | history
pages/grabOrders/grabOrders.vue 650 ●●●● patch | view | raw | blame | history
pages/grabOrders/inPage/page0.vue 13 ●●●●● patch | view | raw | blame | history
pages/grabOrders/map - 副本.vue 83 ●●●●● patch | view | raw | blame | history
pages/grabOrders/map.vue 59 ●●●● patch | view | raw | blame | history
store/actions.js 17 ●●●●● patch | view | raw | blame | history
store/lid/getPosition.js 180 ●●●●● patch | view | raw | blame | history
store/lid/websocketL.js 128 ●●●●● patch | view | raw | blame | history
store/mutations.js 9 ●●●● patch | view | raw | blame | history
store/positions.js 113 ●●●●● patch | view | raw | blame | history
store/state.js 66 ●●●● patch | view | raw | blame | history
store/websocket.js 84 ●●●●● patch | view | raw | blame | history
App.vue
@@ -27,8 +27,27 @@
                }
            }
        },
        watch: {},
        mounted() {},
        computed: {
            socketValue() {
                return this.$store.state.socketValue;
            }
        },
        watch: {
            socketValue() {
                console.log(this.socketValue);
                let that = this;
                if (that.socketValue.type === "start") {
                    console.log("任务开启")
                    this.$store.commit("addTask", this.socketValue.rid);
                } else if (that.socketValue.type === "stop") {
                    console.log("任务结束")
                    this.$store.commit("stopTask", this.socketValue.rid);
                }
            }
        },
        mounted() {
            this.$store.dispatch("connectws");
        },
        onLaunch: function() { //初始化完成时触发(全局只触发一次)
            console.log('第一次进入')
            // Window.say = Window.console;
leafletMapOur/grabOrdersMap/js/vueMain.js
@@ -40,17 +40,7 @@
    },
    methods: {
        setUniAppMsg(data) {
            // console.log(data)
            // console.log(uni)
            uni.postMessage({
                data: {
                    action: 'message'
                }
            });
            uni.getEnv(function(res) {
                console.log('当前环境:' + JSON.stringify(res));
            });
            window.parent.hBackMsg(data)
        },
        openAPP(type) {
            // console.log(type)
@@ -59,13 +49,22 @@
                if (that.data.butCT == "beginUp") {
                    // 反馈
                    uni.navigateTo({
                        url: '/pages/grabOrders/feedback?data=' + JSON.stringify(this.data)
                        url: '/pages/grabOrders/feedback?data=' + JSON.stringify(this.data) +
                            '&other="11111"'
                    });
                } else if (that.data.butCT == "begin") {
                    // 开始任务
                    this.setUniAppMsg({
                        type: "begin",
                        data: that.data
                        type: "start",
                        data: {
                            id: that.data.id,
                            serid: that.data.serid
                        },
                        fn: function(val) {
                            if(val == "success"){
                                console.log("成功开启任务")
                            }
                        }
                    })
                }
            } else {
@@ -135,10 +134,10 @@
            }
            //url解码
            this.data = this.getQueryVariable('data') || data;
            if (this.data.team) {
            console.log(this.data)
            if (typeof this.data.team === "string") {
                this.data.team = this.data.team.split(',');
            }
            console.log(this.data)
            let lines = this.data.line
            let position = lines.slice(lines.indexOf("(") + 1, lines.indexOf(",")).split(" ");
            // console.log(position)
pages/grabOrders/feedback.vue
@@ -1,5 +1,6 @@
<template>
    <view class="mapJQtijiao">
        <u-top-tips ref="uTips"></u-top-tips>
        <!-- <view class="head">
            <u-navbar :is-fixed="false" :border-bottom="false" :is-back="false" title=""
                :background="{ background: '#0cd7e5' }">
@@ -90,7 +91,8 @@
            upData() {
                // console.log('开始上传');
                let video = "",
                    imgs = "";
                    imgs = "",
                    that = this;
                for (let k in this.imgs) {
                    imgs += this.imgs[k].src;
                    if (k != this.imgs.length - 1) {
@@ -112,14 +114,22 @@
                    serid: uni.getStorageSync("ids")
                    // result: this.content,
                };
                // console.log(dataList)
                // return;
                let ds = {
                }
                wx.showLoading({
                    title: "提交中...",
                    mask: true
                })
                // console.log(dataList);
                let d = {
                    rid: this.data.id,
                    serid: this.data.serid,
                    type: "stop",
                    that: that
                }
                that.$store.commit('useWebScoketApi', d);
                wx.request({
                    url: this.$store.state.piAPI + 'taskfk/save', //仅为示例,并非真实接口地址。
                    data: dataList,
@@ -139,7 +149,7 @@
                                clearTimeout(time);
                                time = null;
                                uni.redirectTo({
                                    url: './grabOrders'
                                    url: './grabOrders?from="feedback"'
                                });
                            }, 1000)
                        }
@@ -149,6 +159,7 @@
                        });
                    }
                });
            },
            takePhoto() {
                var that = this;
pages/grabOrders/grabOrders.vue
@@ -1,319 +1,373 @@
<template>
    <view class="grabOrders">
        <view>
            <u-tabs-swiper
                ref="uTabs"
                :list="list"
                :current="current"
                @change="tabsChange"
                :is-scroll="false"
                swiperWidth="750"
            ></u-tabs-swiper>
        </view>
        <!-- @animationfinish="animationfinish" -->
        <swiper
            :current="swiperCurrent"
            @transition="transition"
            @animationfinish="animationfinish"
            :style="{height: 'calc(' +  useHeight+' - 40px)', width: '100%'}"
        >
            <swiper-item
                class="swiper-item"
                v-for="(item, index) in list"
                :key="index"
                :style="{height: useHeight, width: '100%'}"
            >
                <scroll-view
                    scroll-y
                    :style="{height: useHeight, width: '100%'}"
                    @scrolltolower="onreachBottom"
                >
                    <page0
                        :listData="leftdata"
                        :swiperCurrent="0"
                        v-if="item.name == '正在进行'"
                        @openOnce="openOnce"
                        @getOrders="getOrders"
                    ></page0>
                    <page1
                        :listData="rightdata"
                        :swiperCurrent="1"
                        v-if="item.name == '可参与'"
                        @openOnce="openOnce"
                        @getOrders="getOrders"
                    ></page1>
    <view class="grabOrders">
        <u-top-tips ref="uTips"></u-top-tips>
        <view>
            <u-tabs-swiper ref="uTabs" :list="list" :current="current" @change="tabsChange" :is-scroll="false"
                swiperWidth="750"></u-tabs-swiper>
        </view>
        <!-- @animationfinish="animationfinish" -->
        <swiper :current="swiperCurrent" @transition="transition" @animationfinish="animationfinish"
            :style="{ height: 'calc(' + useHeight + ' - 40px)', width: '100%' }">
            <swiper-item class="swiper-item" v-for="(item, index) in list" :key="index"
                :style="{ height: useHeight, width: '100%' }">
                <scroll-view scroll-y :style="{ height: useHeight, width: '100%' }" @scrolltolower="onreachBottom">
                    <page0 :listData="leftdata" :swiperCurrent="0" v-if="item.name == '正在进行'" @openOnce="openOnce"
                        @getOrders="getOrders"></page0>
                    <page1 :listData="rightdata" :swiperCurrent="1" v-if="item.name == '可参与'" @openOnce="openOnce"
                        @getOrders="getOrders"></page1>
                    <!-- <view class="a" v-if="item.name == '正在进行'">
                    <!-- <view class="a" v-if="item.name == '正在进行'">
                             {{leftdata}}
                         </view>
                         <view class="b" v-if="item.name == '可参与'">
                             {{rightdata}}
                    </view>-->
                </scroll-view>
            </swiper-item>
        </swiper>
        <view>
            <u-modal
                v-model="showPopup"
                :content="appdetitle"
                :show-cancel-button="true"
                @confirm="confirms"
            ></u-modal>
            <!-- <u-button @click="open">
                </scroll-view>
            </swiper-item>
        </swiper>
        <view>
            <u-modal v-model="showPopup" :content="appdetitle" :show-cancel-button="true" @confirm="confirms"></u-modal>
            <!-- <u-button @click="open">
                打开模态框
            </u-button>-->
        </view>
    </view>
        </view>
    </view>
</template>
<script>
import page0 from "./inPage/page0.vue"
import page1 from "./inPage/page1.vue"
export default {
    components: {
        page0,
        page1,
    },
    data () {
        return {
            list: [{
                name: "正在进行",
            },
            {
                name: "可参与",
            },
            ],
            // 因为内部的滑动机制限制,请将tabs组件和swiper组件的current用不同变量赋值
            current: 0, // tabs组件的current值,表示当前活动的tab选项
            swiperCurrent: 0, // swiper组件的current值,表示当前那个swiper-item是活动的
            leftdata: [],
            rightdata: [],
            showPopup: false,
            appdetitle: "",
            popupData: {},
            useHeight: '100%'
        }
    },
    watch: {
        current () {
            // console.log(this.current)
            this.getGrabOrders(this.current)
        },
        change () {
            this.getGrabOrders(this.current)
        },
    },
    mounted () {
        // this.getGrabOrders(this.current);
        let type = uni.getSystemInfoSync().platform
        if (type == "android") {
            this.useHeight = "100vh"
        }
    },
    computed: {
        change () {
            return this.$store.state.gotuGrabOrders
        },
    },
    onLoad: function (options) {
        // debugger
        // console.log(options)
        if (options.detailData == 0) {
            this.current = 0
            this.swiperCurrent = 0
        } else {
            this.current = 1
            this.swiperCurrent = 1
        }
        this.getGrabOrders(this.current)
    },
    methods: {
        // tabs通知swiper切换
        tabsChange (index) {
            this.swiperCurrent = index
        },
        // swiper-item左右移动,通知tabs的滑块跟随移动
        transition (e) {
            let dx = e.detail.dx
            this.$refs.uTabs.setDx(dx)
        },
        // 由于swiper的内部机制问题,快速切换swiper不会触发dx的连续变化,需要在结束时重置状态
        // swiper滑动结束,分别设置tabs和swiper的状态
        animationfinish (e) {
            let current = e.detail.current
            this.$refs.uTabs.setFinishCurrent(current)
            this.swiperCurrent = current
            this.current = current
        },
        // scroll-view到底部加载更多
        onreachBottom () { },
        openOnce (val) {
            //打开地图
            // console.log(this.swiperCurrent)
            val["buttype"] = this.swiperCurrent //tab标识,0正在进行,1可参与
            val["serid"] = uni.getStorageSync("ids") + ","
            val["appenUrl"] = this.$store.state.piAPI
            //打开地图
    import page0 from "./inPage/page0.vue";
    import page1 from "./inPage/page1.vue";
    export default {
        components: {
            page0,
            page1,
        },
        data() {
            return {
                list: [{
                        name: "正在进行",
                    },
                    {
                        name: "可参与",
                    },
                ],
                // 因为内部的滑动机制限制,请将tabs组件和swiper组件的current用不同变量赋值
                current: 0, // tabs组件的current值,表示当前活动的tab选项
                swiperCurrent: 0, // swiper组件的current值,表示当前那个swiper-item是活动的
                leftdata: [],
                rightdata: [],
                showPopup: false,
                appdetitle: "",
                popupData: {},
                useHeight: "100%",
            };
        },
        watch: {
            current() {
                // console.log(this.current)
                this.getGrabOrders(this.current);
            },
            change() {
                this.getGrabOrders(this.current);
            },
            if (val.iscation == 1) {
                if (val.type == 0) {
                    //是队长-上传反馈
                    val["butCT"] = "beginUp"
                } else if (val.type == 2) {
                    //是队长-开始任务
                    val["butCT"] = "begin"
                } else {
                    //是队长-完成任务任务
                    val["butCT"] = "over"
                }
            } else {
                if (val.type == 0) {
                    //不是队长-上传反馈
                    val["butCT"] = "over"
                } else if (val.type == 2) {
                    //不是队长-开始任务
                    val["butCT"] = "over"
                } else {
                    //不是队长-完成任务任务
                    val["butCT"] = "over"
                }
            }
            console.log(val)
            // return
            uni.navigateTo({
                url: "./map?data=" + JSON.stringify(val),
            })
        },
        getGrabOrders (val = 0) {
            //获取全部的数据
            let that = this,
                d = {
                    serid: uni.getStorageSync("ids"),
                    type: val + "",
                }
        },
        mounted() {
            // this.getGrabOrders(this.current);
            let type = uni.getSystemInfoSync().platform;
            if (type == "android") {
                this.useHeight = "100vh";
            }
        },
        computed: {
            change() {
                return this.$store.state.gotuGrabOrders;
            },
        },
        onLoad: function(options) {
            // debugger
            // console.log(options)
            if (options.detailData == 0) {
                this.current = 0;
                this.swiperCurrent = 0;
            } else {
                this.current = 1;
                this.swiperCurrent = 1;
            }
            this.getGrabOrders(this.current);
            if (val == 1) {
                d.jurisdiction = this.$store.state.UserData.jurisdiction
            }
            if (options.from == "feedback") {
                that.useWebScoketApi(item.id, item.serid, "stop");
            }
        },
        methods: {
            //实时位置传递
            setNowposition(rid, jd, wd) {
                console.log(uni.getStorageSync("ids"), rid, jd, wd);
            },
            // tabs通知swiper切换
            tabsChange(index) {
                this.swiperCurrent = index;
            },
            // swiper-item左右移动,通知tabs的滑块跟随移动
            transition(e) {
                let dx = e.detail.dx;
                this.$refs.uTabs.setDx(dx);
            },
            // 由于swiper的内部机制问题,快速切换swiper不会触发dx的连续变化,需要在结束时重置状态
            // swiper滑动结束,分别设置tabs和swiper的状态
            animationfinish(e) {
                let current = e.detail.current;
                this.$refs.uTabs.setFinishCurrent(current);
                this.swiperCurrent = current;
                this.current = current;
            },
            // scroll-view到底部加载更多
            onreachBottom() {},
            openOnce(val) {
                //打开地图
                // console.log(this.swiperCurrent)
                val["buttype"] = this.swiperCurrent; //tab标识,0正在进行,1可参与
                val["serid"] = uni.getStorageSync("ids") + ",";
                val["appenUrl"] = this.$store.state.piAPI;
                //打开地图
            uni.request({
                url: this.$store.state.piAPI + "taskqd/selectLi",
                method: "POST",
                data: d,
                header: {
                    "content-type": "application/x-www-form-urlencoded",
                },
                success (res) {
                    const data = res.data.data
                    // console.log(data);
                    if (val == 1) {
                        that.rightdata = data
                    } else {
                        let no = [],
                            ok = [],
                            bigin = [],
                            no1 = [],
                            ok1 = [],
                            bigin1 = []
                        for (var k in data) {
                            if (data[k].iscation == 1) {
                                if (data[k].type == 0) {
                                    //是队长-上传反馈
                                    no1.push(data[k])
                                } else if (data[k].type == 2) {
                                    //是队长-开始任务
                                    bigin1.push(data[k]) //是队长-上传反馈
                                } else {
                                    //是队长-完成任务任务
                                    ok1.push(data[k])
                                }
                            } else {
                                if (data[k].type == 0) {
                                    //不是队长-上传反馈
                                    no.push(data[k])
                                } else if (data[k].type == 2) {
                                    //不是队长-开始任务
                                    bigin.push(data[k])
                                } else {
                                    //不是队长-完成任务任务
                                    ok.push(data[k])
                                }
                            }
                        }
                if (val.iscation == 1) {
                    if (val.type == 0) {
                        //是队长-上传反馈
                        val["butCT"] = "beginUp";
                    } else if (val.type == 2) {
                        //是队长-开始任务
                        val["butCT"] = "begin";
                    } else {
                        //是队长-完成任务任务
                        val["butCT"] = "over";
                    }
                } else {
                    if (val.type == 0) {
                        //不是队长-上传反馈
                        val["butCT"] = "over";
                    } else if (val.type == 2) {
                        //不是队长-开始任务
                        val["butCT"] = "over";
                    } else {
                        //不是队长-完成任务任务
                        val["butCT"] = "over";
                    }
                }
                console.log(val);
                // return
                uni.navigateTo({
                    url: "./map?data=" + JSON.stringify(val),
                });
            },
            getGrabOrders(val = 0) {
                //获取全部的数据
                let that = this,
                    d = {
                        serid: uni.getStorageSync("ids"),
                        type: val + "",
                    };
                        that.leftdata = [...bigin1, ...bigin, ...no1, ...no, ...ok1, ...ok]
                    }
                },
            })
        },
        getOrders (b) {
            let val = b.val,
                item = b.item
            // console.log(val, item)
            let that = this
            if (val != 0) {
                //接单
                this.appdetitle = "是否参与任务:" + item.rname
                this.showPopup = true
                this.popupData = item
                // return;
            } else {
                //反馈
                //
                uni.navigateTo({
                    url: "./feedback?data=" + JSON.stringify(item),
                    // url: "./feedback"
                })
            }
        },
        confirms () {
            let that = this
            this.popupData["serid"] = uni.getStorageSync("ids") + ","
            this.popupData["captain"] = uni.getStorageSync("name")
            // console.log(item)
            // return;
            uni.request({
                url: this.$store.state.piAPI + "taskqd/Graborder",
                method: "POST",
                // data: {
                //     securityId: this.$store.state.puserID,
                //     status: tab
                // },
                header: {
                    "content-type": "application/json",
                },
                data: this.popupData,
                success (res) {
                    const data = res.data.msg
                    // console.log(data);
                    if (data == "抢单成功") {
                        uni.showToast({
                            title: data,
                            duration: 2000,
                        })
                    }
                    // that.listData = data;
                    // that.getGrabOrders(this.);
                    that.$store.commit("changegotuGrabOrders")
                },
            })
        },
    },
};
                if (val == 1) {
                    d.jurisdiction = this.$store.state.UserData.jurisdiction;
                }
                uni.request({
                    url: this.$store.state.piAPI + "taskqd/selectLi",
                    method: "POST",
                    data: d,
                    header: {
                        "content-type": "application/x-www-form-urlencoded",
                    },
                    success(res) {
                        const data = res.data.data;
                        // console.log(data);
                        if (val == 1) {
                            that.rightdata = data;
                        } else {
                            let no = [],
                                ok = [],
                                begin = [],
                                no1 = [],
                                ok1 = [],
                                begin1 = [];
                            for (var k in data) {
                                data[k].type = data[k].rtype;
                                if (data[k].iscation == 1) {
                                    if (data[k].type == 0) {
                                        //是队长-上传反馈
                                        no1.push(data[k]);
                                    } else if (data[k].type == 2) {
                                        //是队长-开始任务
                                        begin1.push(data[k]); //是队长-上传反馈
                                    } else {
                                        //是队长-完成任务任务
                                        ok1.push(data[k]);
                                    }
                                } else {
                                    if (data[k].type == 0) {
                                        //不是队长-上传反馈
                                        no.push(data[k]);
                                    } else if (data[k].type == 2) {
                                        //不是队长-开始任务
                                        begin.push(data[k]);
                                    } else {
                                        //不是队长-完成任务任务
                                        ok.push(data[k]);
                                    }
                                }
                            }
                            that.leftdata = [...begin1, ...begin, ...no1, ...no, ...ok1, ...ok];
                            // console.log(that.leftdata)
                            // for (let k in begin) {
                            //     let id = begin[k].id;
                            //     that.isBeginTask[id] = {
                            //         id: id,
                            //         // position: that.createPosition(id)
                            //     }
                            // }
                            // for (let k in begin1) {
                            //     let id = begin1[k].id;
                            //     that.isBeginTask[id] = {
                            //         id: id,
                            //         // position: that.createPosition(id)
                            //     }
                            // }
                            // for (let k in no1) {
                            //     let id = no1[k].id;
                            //     that.$store.commit("addTask", id)
                            // }
                            // for (let k in no) {
                            //     let id = no[k].id;
                            //     that.$store.commit("addTask", id)
                            // }
                            // that.isOnTask[44].position.continuedTime();
                        }
                    },
                });
            },
            createPosition(id) {
                return new $getPositions({
                    id: id,
                    fn: function(res) {
                        console.log(res);
                        // that.setNowposition(re)
                    }
                })
            },
            // tips(type, title) {
            //     this.$refs.uTips.show({
            //         title: title,
            //         type: type,
            //         duration: '2300'
            //     })
            //     this.getGrabOrders(this.current); //重获取数据
            // },
            // useWebScoketApi(rid, serid, type) {
            //     let that = this;
            //     uni.request({
            //         url: this.$store.state.piAPI + "taskqd/startTask?" + `rid=${rid}&serid=${serid}&type=${type}`,
            //         method: "GET",
            //         success(res) {
            //             let type = res.data.data.type;
            //             if (type == 'start') { //开启成功
            //                 that.tips('success', '开启任务成功')
            //                 return;
            //             }
            //             if (type == 'stop') { //开启成功
            //                 that.tips('success', '反馈任务成功')
            //                 return;
            //             }
            //         },
            //     });
            // },
            getOrders(b) {
                let val = b.val,
                    item = b.item,
                    that = this;
                console.log(val, item)
                if (val == 0) { //正在进行
                    if (item.type == "2") { //开始任务按钮
                        // that.useWebScoketApi(item.id, item.serid, "start");
                        let d = {
                            rid: item.id,
                            serid: item.serid,
                            type: "start",
                            that: that,
                            fn: () => {
                                that.getGrabOrders(that.current); //重获取数据
                            }
                        }
                        that.$store.commit('useWebScoketApi', d);
                    }
                    if (item.type == "0") { //上传反馈
                        //反馈
                        uni.navigateTo({
                            url: "./feedback?data=" + JSON.stringify(item),
                            // url: "./feedback"
                        });
                    }
                } else { //可参与
                    //接单
                    this.appdetitle = "是否参与任务:" + item.rname;
                    this.showPopup = true;
                    this.popupData = item;
                }
            },
            confirms() {
                let that = this;
                this.popupData["serid"] = uni.getStorageSync("ids") + ",";
                this.popupData["captain"] = uni.getStorageSync("name");
                // console.log(item)
                // return;
                uni.request({
                    url: this.$store.state.piAPI + "taskqd/Graborder",
                    method: "POST",
                    // data: {
                    //     securityId: this.$store.state.puserID,
                    //     status: tab
                    // },
                    header: {
                        "content-type": "application/json",
                    },
                    data: this.popupData,
                    success(res) {
                        const data = res.data.msg;
                        // console.log(data);
                        if (data == "抢单成功") {
                            uni.showToast({
                                title: data,
                                duration: 2000,
                            });
                        }
                        // that.listData = data;
                        // that.getGrabOrders(this.);
                        that.current = 0;
                        that.swiperCurrent = 0;
                        that.$store.commit("changegotuGrabOrders");
                    },
                });
            },
        },
    };
</script>
<style scoped lang="scss">
page,
.grabOrders {
    height: 100% !important;
    width: 100% !important;
}
    page,
    .grabOrders {
        height: 100% !important;
        width: 100% !important;
    }
page {
    overflow: hidden !important;
}
    page {
        overflow: hidden !important;
    }
// .uni-scroll-view{
//     height: 100% !important;
//     border: 1px solid red
// }
    // .uni-scroll-view{
    //     height: 100% !important;
    //     border: 1px solid red
    // }
</style>
pages/grabOrders/inPage/page0.vue
@@ -20,12 +20,12 @@
                </view>
            </view>
            <view class="onve-right">
                <u-button :class="[swiperCurrent == 0?'orange':'green',item.type == 0?'greens':'']" size="mini" :disabled="true"
                <u-button :class="[item.type == 1?'':item.type == 0?'blues':'greens']" size="mini" :disabled="true"
                    v-if="item.iscation == 0" @click="getOrders(swiperCurrent,item)">
                    <span class="Cation notCation">队员</span>{{item.type == 1?"完成反馈":item.type == 0?"正在进行":"还未开始"}}
                </u-button>
                <u-button :class="[swiperCurrent == 0?'orange':'green']" size="mini" :disabled="item.type == 1"
                    v-if="item.iscation == 1" @click="getOrders(swiperCurrent,item)">
                <u-button :class="[item.type == 1?'':item.type == 0?'blues':'greens']" size="mini"
                    :disabled="item.type == 1" v-if="item.iscation == 1" @click="getOrders(swiperCurrent,item)">
                    <span class="Cation">队长</span>{{item.type == 1?"完成反馈":item.type == 0?"上传反馈":"开始任务"}}
                </u-button>
                <view class="o-r-$">
@@ -154,16 +154,21 @@
    }
    .orange {
        color: orange;
        color: #FF7B15;
    }
    .green {
        color: #00e713;
    }
    .greens {
        color: #18a655 !important;
    }
    .blues {
        color: #2680F0 !important;
    }
    .Cation {
        display: inline-block;
        position: absolute;
pages/grabOrders/map - 副本.vue
New file
@@ -0,0 +1,83 @@
<template>
    <view class="content">
        <web-view :src="urls" @message="message"></web-view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                urls: '',
                // dataList: [],
            }
        },
        methods: {
            message(event) {
                console.log(event.detail.data)
            }
        },
        mounted() {},
        onLoad: function(options) {
            var data = [];
            // console.log(options.data);
            if (options.data == undefined) {
                data = JSON.stringify({
                    appenUrl: "http://192.168.0.108:83/",
                    butCT: "begin",
                    buttype: 0,
                    captain: "我",
                    city: "南昌市",
                    content: "测试",
                    district: "西湖区",
                    id: 37,
                    integral: "222",
                    iscation: "1",
                    jnum: 3,
                    line: "LINESTRING(115.8995839881188 28.687205773173343,115.89391916267935 28.678966027079593,115.90404718391959 28.673644524394046,115.91211526863638 28.681369286356936)",
                    num: 1,
                    nums: 0,
                    province: "江西省",
                    publisher: "管理",
                    raddress: null,
                    rname: "测试1",
                    rtype: "0",
                    serid: "1123598821738675201,",
                    team: "你,他,它",
                    time: "2022-02-18 14:15:52",
                    type: "2",
                    url: "http://223.82.109.183:2081/zhba/upload/20220218/67f0c8bf3e7b5024c64133691f265072.ico",
                })
            } else {
                data = options.data;
            }
            // console.log(data);
            // return
            // console.log(options.html)
            // var a = options.html != undefined ? options.html : "xcxMapJQ/xcxmap.html";
            // console.log(a)
            // let a = "grabOrdersMap/xcxmap.html";
            // this.urls = "http://223.82.109.183:2082/" + a + "?data=" + data;
            let name = 1; //1是本地  2是服务器
            // let name = 1;
            let b = this.$store.state.piAPI;
            if (b == '/api') {
                name = 1;
            }
            let a = name == 1 ? "http://127.0.0.1:8848/qfqk-android/leafletMapOur/" : b.slice(0, b.indexOf('api'));
            // this.urls = a + "grabOrdersMap/xcxmap.html?data=" + data;
            // a = a.slice(0, a.indexOf('api'));
            this.urls = a + "grabOrdersMap/xcxmap.html?data=" + data;
            // http://127.0.0.1:8848/qfqk-android/grabOrdersMap/xcxmap.html
            // this.dataList = data;
            // console.log(this.urls);
        },
        beforeDestroy() {
            this.$store.commit("changegotuGrabOrders");
        }
    }
</script>
<style>
</style>
pages/grabOrders/map.vue
@@ -1,5 +1,6 @@
<template>
    <view class="content">
        <u-top-tips ref="uTips"></u-top-tips>
        <web-view :src="urls"></web-view>
    </view>
</template>
@@ -12,14 +13,56 @@
                // dataList: [],
            }
        },
        methods: {},
        methods: {
        },
        mounted() {},
        onReady() {
            let that = this;
            window.hBackMsg = (val) => {
                let d = {
                    rid: val.data.id,
                    serid: val.data.serid,
                    type: val.type,
                    that: that,
                    fn: () => {
                        // that.getGrabOrders(that.current); //重获取数据
                        val.fn();
                    }
                }
                that.$store.commit('useWebScoketApi', d);
            }
        },
        onLoad: function(options) {
            var data = [];
            // console.log(options.data);
            if (options.data == undefined) {
                data =
                    '{"id":7,"rname":"无数据","content":"无数据","time":"2021-11-02 16:31:47","province":"江西省","city":"南昌市","district":"青山湖区","jnum":2,"line":"LINESTRING(115.95983713142935 28.674674492655765,115.96086709969107 28.7012820060835,115.97254007332388 28.701625328837405,115.97305505745474 28.68875072556592,115.96704690926138 28.68274257737256,115.96739023201529 28.674674492655765,115.9600087928063 28.674846154032718,115.95983713142935 28.674846154032718)","raddress":null,"rtype":"0","serid":"1416311615662448641,1123598821738675201","num":2,"integral":"100","url":"http://223.82.109.183:2081/zhba/upload/20211102/7050fe68e5d1e9921a3e93329996a943.png","current":0,"buttype":0}'
                data = JSON.stringify({
                    appenUrl: "http://192.168.0.108:83/",
                    butCT: "begin",
                    buttype: 0,
                    captain: "我",
                    city: "南昌市",
                    content: "测试",
                    district: "西湖区",
                    id: 37,
                    integral: "222",
                    iscation: "1",
                    jnum: 3,
                    line: "LINESTRING(115.8995839881188 28.687205773173343,115.89391916267935 28.678966027079593,115.90404718391959 28.673644524394046,115.91211526863638 28.681369286356936)",
                    num: 1,
                    nums: 0,
                    province: "江西省",
                    publisher: "管理",
                    raddress: null,
                    rname: "测试1",
                    rtype: "0",
                    serid: "1123598821738675201,",
                    team: "你,他,它",
                    time: "2022-02-18 14:15:52",
                    type: "2",
                    url: "http://223.82.109.183:2081/zhba/upload/20220218/67f0c8bf3e7b5024c64133691f265072.ico",
                })
            } else {
                data = options.data;
            }
@@ -33,10 +76,10 @@
            let name = 2; //1是本地  2是服务器
            // let name = 1;
            let b = this.$store.state.piAPI;
            if( b == '/api'){
            if (b == '/api') {
                name = 1;
            }
            let a = name == 1 ? "http://127.0.0.1:8848/qfqk-android/leafletMapOur/" :b.slice(0, b.indexOf('api'));
            let a = name == 1 ? "http://127.0.0.1:8848/qfqk-android/leafletMapOur/" : b.slice(0, b.indexOf('api'));
            // this.urls = a + "grabOrdersMap/xcxmap.html?data=" + data;
            // a = a.slice(0, a.indexOf('api'));
            this.urls = a + "grabOrdersMap/xcxmap.html?data=" + data;
@@ -51,4 +94,8 @@
</script>
<style>
    .content {
        flex: 1;
        height: 100%;
    }
</style>
store/actions.js
@@ -1,5 +1,8 @@
import md5 from 'js-md5'
import axios from 'axios'
import websocket from "./websocket.js"
import positions from "./positions.js"
const actions = {
    loging(store, data) {
        var user = [{
@@ -44,16 +47,16 @@
            //     // dataType: 'JSON',
            success: (res) => {
                if (res.statusCode == 200) {
                    if(res.data.error_code == "400"){
                    if (res.data.error_code == "400") {
                        uni.hideNavigationBarLoading();
                        uni.showToast({
                            title: '密码错误,请重试',
                            icon:'none',
                            icon: 'none',
                            duration: 2000
                        });
                        return;
                    }
                    store.commit('getUserData',res.data)
                    store.commit('getUserData', res.data)
                    // console.log(res.data,123542);
                    data.isit = true;
                    data.userName = res.data.nick_name; //警袁姓名
@@ -63,8 +66,8 @@
                    data.pass = data.pass;
                    // data.userPhon = res.user_id;
                    store.commit('login', data);
                }
                }
            },
            fail: (res) => {
                console.log('失去连接 请稍等');
@@ -86,7 +89,9 @@
        //     store.commit('login', data);
        // }, 2000)
    }
    },
    ...websocket.actions,
    ...positions.actions
}
export default actions
store/lid/getPosition.js
New file
@@ -0,0 +1,180 @@
class $getPositions {
    constructor(arg) {
        this.id = arg.id || 0; //任务id
        this.fn = arg.fn ? function(data) {
            arg.fn(data);
        } : function(data) {
            console.log("未设置输出回调")
            return data;
        };
        this.ourPosition = []; //全部位置
        this.nowPosition = []; //当前位置
        this.onceNowPosition = []; //当前一次位置
        this.getOnceSPosition = null;
        this.state = false;
        this.isContinued = false;
        this.isContinuedTimeInt = null;
        this.isContinuedTimeOut = null;
        return this;
    }
    //开始获取
    init() {
        //判断权限
        return this;
    }
    continued() {
        //开始持续获取定位
        console.log("开始持续定位")
        let that = this;
        this.isContinued = true;
        if (this.isContinuedTimeInt) {
            console.log("重复开始持续定位")
            return;
        } else {
            that.once(function(res) {
                if (res.state == false) {
                    console.log(res.intlat)
                }
            })
            this.isContinuedTimeInt = setInterval(() => {
                that.once(function(res) {
                    if (res.state == false) {
                        console.log(res.intlat)
                    }
                })
            }, 5000)
        }
    }
    continuedTime(val) {
        //开始持续获取定位
        let that = this;
        if (val != 1) {
            // console.log(that.id,"开始持续定位")
            this.isContinued = true;
            that.once(function(res) {
                if (res.state == false) {
                    // console.log(res.intlat)
                    that.outData();
                }
            })
            if (this.isContinuedTimeOut) {
                // console.log("重复开始持续定位")
                return;
            }
        }
        this.isContinuedTimeOut = setTimeout(() => {
            that.once(function(res) {
                if (res.state == false) {
                    // console.log(res.intlat)
                    that.outData();
                    if (res.ok) {
                        //返回成功
                        that.continuedTime(1);
                    } else {
                        //返回失败
                        that.continuedTime(1);
                    }
                }
            })
        }, 3000)
    }
    overContinued() {
        // console.log("结束持续定位")
        let that = this;
        if (this.isContinued) {
            this.isContinued = false;
            if (this.isContinuedTimeInt) {
                clearInterval(that.isContinuedTimeInt);
                this.isContinuedTimeInt = null;
            }
            if (this.isContinuedTimeOut) {
                clearTimeout(that.isContinuedTimeOut);
                this.isContinuedTimeOut = null;
            }
        }
        this.isContinued = false;
        that.outData('out');
    }
    once(fn) {
        // console.log("开始获取一次定位");
        this.state = true;
        let ok = true;
        let that = this,
            fns = fn || '',
            outit = function() {
                if (fns) {
                    fns({
                        state: that.state,
                        intlat: that.onceNowPosition,
                        ok: ok
                    })
                } else {
                    that.outData();
                }
            };
        outit();
        let success = function(position) {
            // console.log(position);
            var lat = position.coords.latitude;
            var lon = position.coords.longitude;
            // console.log("成功返回经纬度信息");
            // console.log(lon, lat, "成功");
            that.onceNowPosition = [lat, lon];
            that.state = false;
            ok = true;
            outit();
        };
        let error = function(error) {
            // console.log(error, "失败");
            let msg = "none";
            switch (error.code) {
                case error.PERMISSION_DENIED:
                    msg = "User denied the request for Geolocation.";
                    break;
                case error.POSITION_UNAVAILABLE:
                    msg = "Location information is unavailable.";
                    break;
                case error.TIMEOUT:
                    msg = "The request to get user location timed out.";
                    break;
                case error.UNKNOWN_ERROR:
                    msg = "An unknown error occurred.";
                    break;
            }
            that.onceNowPosition = msg;
            that.state = false;
            ok = false;
            outit();
        };
        let options = {
            enableHighAccuracy: true,
            // timeout: 5000,
            timeout: Infinity,
            maximumAge: 0,
        };
        this.getOnceSPosition = navigator.geolocation.getCurrentPosition(
            success,
            error,
            options
        );
    }
    //结束获取
    outInit() {
    }
    //抛出数据
    outData(val) {
        let d = {
            state: this.state,
            intlat: this.onceNowPosition
        }
        if (val) {
            d[val] = val
        }
        this.fn(d)
    }
}
export default $getPositions;
store/lid/websocketL.js
New file
@@ -0,0 +1,128 @@
// uniapp版本websocket总控制
function Wst(url) {
    this.url = url || "";
    this.ws = "";
    this.ourControl = true; //总控
    this.state = false;
    this.timeIntval = false;
    this.timeIntvalTime = 5000;
    this.WebSocketValue = "";
    this.backValue = function(res) {
        console.log(res, "未设置msg返回函数");
    };
    this.getws = "";
    this.Data = "";
    this.heartBeat = "";
    this.loginData = "";
    this.ids = '';
    return this;
}
Wst.prototype.$callBack = function(getValue, getState, getws, ids) {
    this.backValue = function(res) {
        if (!getValue && !getState) {
            console.log(res, "未设置msg返回函数");
        } else {
            if (getValue) {
                getValue(res);
            }
            if (getState) {
                getState(this.state);
            }
        }
    };
    this.getws = getws;
    this.ids = ids;
    return this;
};
Wst.prototype.$connect = function(Data) {
    this.ourControl = true;
    let that = this;
    this.Data = Data;
    this.loginData = {
        id: this.ids,
        type: 'login'
    };
    this.heartBeat = 'ping';
    this.ws = uni.connectSocket({
        url: that.url,
        success(data) {
            // console.log(data, "websocket连接成功");
        },
    });
    // console.log(that.url)
    this.ws.onOpen((res) => {
        // 注:只有连接正常打开中 ,才能正常成功发送消息
        that.ws.send({
            data: JSON.stringify(that.loginData),
            async success(res) {
                // console.log(res, "登入成功"); //设置登入成功状态 并开启心跳
                that.state = true;
                that.$heartbeat();
            },
        });
        // 注:只有连接正常打开中 ,才能正常收到消息
        that.ws.onMessage((res) => {
            // console.log("收到服务器内容:", JSON.parse(res.data));
            let d = res.data;
            try {
                d = JSON.parse(res.data);
            } catch (e) {}
            that.WebSocketValue = d;
            // that.state = true;
            // this.$heartbeat();
            that.backValue(d);
        });
    });
    // this.ws.onClose((e) => {
    //     console.log(11111111111111111)
    //     that.state = false;
    //     that.backValue(e);
    // });
    // this.$heartbeat();
    this.getws(this.ws);
    return this;
};
Wst.prototype.$heartbeat = function() {
    let that = this;
    let open = function() {
        // console.log('开启心跳');
        that.ws.send({
            data: that.heartBeat,
        });
    };
    let rel = function() {
        console.log('重新连接');
        that.$connect(that.Data);
    };
    if (that.timeIntval) {
        clearInterval(that.timeIntval);
    }
    that.timeIntval = setInterval(() => {
        if (!this.ourControl) {
            return;
        }
        // console.log(that.state)
        if (that.state) {
            open();
        } else {
            rel();
        }
    }, that.timeIntvalTime);
};
Wst.prototype.$outws = function() {
    this.ourControl = false;
    clearInterval(this.timeIntval);
    this.timeIntval = false;
    this.WebSocketValue = {};
    this.state = false;
    // this.backValue({});
};
export default Wst;
store/mutations.js
@@ -1,5 +1,9 @@
import WxStorage from "../static/lib/wxStorage.js" //微信Storage
import websocket from "./websocket.js"
import positions from "./positions.js"
import $store from './index.js'
const mutations = {
    login(state, data) {
        // console.log(data);
@@ -10,6 +14,7 @@
            state.puserID = data.userID;
            state.avatar = data.avatar;
        }
        $store.dispatch("connectws");
        //储存用户
        WxStorage.set("init", "true");
        WxStorage.set("name", data.userName);
@@ -32,7 +37,9 @@
    changegotuGrabOrders(state, data) {
        // console.log(2123131)
        state.gotuGrabOrders = !state.gotuGrabOrders;
    }
    },
    ...websocket.mutations,
    ...positions.mutations
}
export default mutations
store/positions.js
New file
@@ -0,0 +1,113 @@
// import $store from '../index.js'
// import vueconfig from '../../vue.config.js'
import $getPositions from './lid/getPosition.js'
import WxStorage from "../static/lib/wxStorage.js" //微信Storage
import $store from './index.js'
let positions = {
    state: {
        isBeginTask: {},
        isOnTask: {},
    },
    actions: {
        // connectws({
        //     state,
        //     commit
        // }) {
        //     console.log("开启websocket")
        // },
    },
    mutations: {
        addTask(state, value) {
            let id = value;
            state.isOnTask[id] = {
                id: id,
                position: new $getPositions({
                    id: id,
                    fn: function(res) {
                        // console.log(res);
                        $store.commit("setMsg", {
                            id: id,
                            intlat: res.intlat
                        })
                    }
                })
            }
            setTimeout(() => {
                $store.commit("startTask", id)
            }, 1000)
        },
        startTask(state, value) {
            if (!state.isOnTask[value]) {
                console.log("未创建该任务:", value)
                return
            }
            if (!state.isOnTask[value].position.isContinued) {
                state.isOnTask[value].position.continuedTime();
            }
        },
        stopTask(state, value) {
            if (!state.isOnTask[value]) {
                console.log("未创建该任务:", value)
                return
            }
            if (state.isOnTask[value].position.isContinued) {
                state.isOnTask[value].position.overContinued();
            }
        },
        setMsg(state, value) {
            //发送任务位置
            //uid ;自己id,rid: 任务id,jd,wd经度纬度
            // console.log(value)
            let d = {
                uid: WxStorage.get("ids"),
                rid: value.id,
                jd: value.intlat[0],
                wd: value.intlat[1],
            }
            uni.request({
                url: $store.state.piAPI + "trar/submit",
                method: "POST",
                data: d,
                success(res) {
                    // console.log(res.data.msg);
                },
            });
        },
        useWebScoketApi(state, val) {
            let rid = val.rid,
                serid = val.serid,
                type = val.type,
                that = val.that,
                tips = (type, title) => {
                    that.$refs.uTips.show({
                        title: title,
                        type: type,
                        duration: '2300'
                    })
                    // that.getGrabOrders(that.current); //重获取数据
                }
            uni.request({
                url: $store.state.piAPI + "taskqd/startTask?" +
                    `rid=${rid}&serid=${serid}&type=${type}`,
                method: "GET",
                success(res) {
                    let type = res.data.data.type;
                    if (val.fn) {
                        val.fn();
                    }
                    if (type == 'start') { //开启成功
                        tips('success', '开启任务成功')
                        return;
                    }
                    if (type == 'stop') { //开启成功
                        tips('success', '反馈任务成功')
                        return;
                    }
                },
            });
        },
    }
}
export default positions
store/state.js
@@ -1,3 +1,5 @@
import websocket from "./websocket.js"
import positions from "./positions.js"
const state = {
    loging: false,
    message: {
@@ -12,38 +14,40 @@
    avatar: "../../static/logo.png",
    UserData: {},
    tabbar: [{
        pagePath: "/pages/home/home",
        text: "首页",
        iconPath: "/static/tabbar/index01.png",
        selectedIconPath: "/static/tabbar/index02.png"
    },
    {
        pagePath: "/pages/article/article",
        text: "资讯",
        iconPath: "/static/tabbar/article.png",
        selectedIconPath: "/static/tabbar/articleH.png"
    },
    {
        pagePath: "/pages/issue/issue",
        iconPath: "/static/tabbar/addIcon.png",
        selectedIconPath: "/static/tabbar/addSelectedIcon.png",
        text: "发布",
        midButton: true,
    },
    {
        pagePath: "/pages/business/business",
        text: "工作台",
        iconPath: "/static/tabbar/workbench.png",
        selectedIconPath: "/static/tabbar/workbenchH.png"
    },
    {
        pagePath: "/pages/myself/myself",
        text: "我的",
        iconPath: "/static/tabbar/my.png",
        selectedIconPath: "/static/tabbar/my-blue.png"
    }
            pagePath: "/pages/home/home",
            text: "首页",
            iconPath: "/static/tabbar/index01.png",
            selectedIconPath: "/static/tabbar/index02.png"
        },
        {
            pagePath: "/pages/article/article",
            text: "资讯",
            iconPath: "/static/tabbar/article.png",
            selectedIconPath: "/static/tabbar/articleH.png"
        },
        {
            pagePath: "/pages/issue/issue",
            iconPath: "/static/tabbar/addIcon.png",
            selectedIconPath: "/static/tabbar/addSelectedIcon.png",
            text: "发布",
            midButton: true,
        },
        {
            pagePath: "/pages/business/business",
            text: "工作台",
            iconPath: "/static/tabbar/workbench.png",
            selectedIconPath: "/static/tabbar/workbenchH.png"
        },
        {
            pagePath: "/pages/myself/myself",
            text: "我的",
            iconPath: "/static/tabbar/my.png",
            selectedIconPath: "/static/tabbar/my-blue.png"
        }
    ],
    gotuGrabOrders: false
    gotuGrabOrders: false,
    ...websocket.state,
    ...positions.state
}
export default state
store/websocket.js
New file
@@ -0,0 +1,84 @@
// import $store from '../index.js'
// import vueconfig from '../../vue.config.js'
import Wst from './lid/websocketL.js'
import WxStorage from "../static/lib/wxStorage.js" //微信Storage
// var url = 'ws://' + vueconfig.devServer.proxy["/cloud"].target.substring(5) + '/websocket';
let url = 'ws://192.168.0.108:9034/websocket';
const webSockets = new Wst(url);
let websocket = {
    state: {
        webSockets: webSockets, //websocket实例
        socket: '', //websoclet主体
        socketValue: '', //接收的数据
        socketState: false, // 当前连接websocket状态
        socketInterval: false, //心跳
        socketTimeout: false, //检测服务器是否连接成功timeout
        socketInterTime: 5000, //心跳时间 秒*1000
        socketStateMY: true, //总控  在退出登入时,强行关闭心跳
    },
    actions: {
        connectws({
            state,
            commit
        }) {
            console.log("开启websocket")
            var getValue = function(res) { // 消息回调
                commit("setSocketValue", res);
            }
            var getState = function(res) { // 状态回调
                commit("setState", res);
            }
            var getws = function(res) { // 主体回调
                commit("setSocket", res);
            }
            let equipmentInformation = navigator.userAgent;
            // var Data = {
            //     router: "share",
            //     res: {
            //         ...$store.state.logs.user,
            //         equipmentInformation: equipmentInformation
            //     },
            // }
            var ws = webSockets.$callBack(getValue, getState, getws, state.puserID || WxStorage.get("ids"))
                .$connect();
        },
    },
    mutations: {
        wsOut(state, value) {
            webSockets.$outws();
        },
        setSocket(state, value) { //websocket主体
            state.socket = value;
        },
        setSocketValue(state, value) {
            // console.log(value)
            // if (value.router) { //正常数据返回
            //     //去除心跳数据
            //     if (value.router == 'share/heartbeat') {
            //         return;
            //     }
            state.socketValue = value;
            //     console.log(value, 'websocket信息')
            // } else { //异常数据返回
            //     console.log(value, '异常')
            // }
        },
        //本地建造数据传递
        setMyvalue(state, value) {
            state.socketValue = value;
        },
        setsocketStateMY(state, value) {
            state.socketStateMY = value;
        },
        setState(state, value) {
            state.socketState = value;
        },
    }
}
export default websocket