guoshilong
2022-09-30 0e9f61d1697564f4adb188e363cb8f4aa196fba5
事件上报
5 files modified
3 files added
299 ■■■■■ changed files
api/dict/dict.js 12 ●●●●● patch | view | raw | blame | history
api/eventgm/eventgm.js 9 ●●●●● patch | view | raw | blame | history
api/taskinfo/list.js 8 ●●●●● patch | view | raw | blame | history
manifest.json 11 ●●●● patch | view | raw | blame | history
pages.json 8 ●●●● patch | view | raw | blame | history
pages/taskinfo/eventsReported.vue 212 ●●●●● patch | view | raw | blame | history
pages/taskinfo/list.vue 36 ●●●● patch | view | raw | blame | history
utils/func.js 3 ●●●● patch | view | raw | blame | history
api/dict/dict.js
New file
@@ -0,0 +1,12 @@
import http from '@/http/api.js'
export const getDicList = (code) => {
  return http.request({
    url: '/blade-system/dict-biz/dictionary',
    method: 'get',
    params: {
        code
    }
  })
}
api/eventgm/eventgm.js
New file
@@ -0,0 +1,9 @@
import http from '@/http/api.js'
export const add = (row) => {
  return http.request({
    url: '/eventgm/eventgm/submit',
    method: 'post',
    data: row
  })
}
api/taskinfo/list.js
@@ -11,3 +11,11 @@
        }
    })
}
export const update = (row) =>{
    return http.request({
        url:'/taskInfo/taskinfo/submit',
        method:'POST',
        data:row
    })
}
manifest.json
@@ -22,7 +22,9 @@
            "delay" : 0
        },
        /* 模块配置 */
        "modules" : {},
        "modules" : {
            "Geolocation" : {}
        },
        /* 应用发布信息 */
        "distribute" : {
            /* android打包配置 */
@@ -55,7 +57,12 @@
            "ios" : {},
            /* SDK配置 */
            "sdkConfigs" : {
                "ad" : {}
                "ad" : {},
                "geolocation" : {
                    "system" : {
                        "__platform__" : [ "ios", "android" ]
                    }
                }
            }
        }
    },
pages.json
@@ -25,7 +25,13 @@
                "navigationBarTitleText": "任务列表",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/taskinfo/eventsReported",
            "style": {
                "navigationBarTitleText": "事件上报",
                "enablePullDownRefresh": false
            }
        }
    ],
    "globalStyle": {
pages/taskinfo/eventsReported.vue
New file
@@ -0,0 +1,212 @@
<template>
    <view class="container">
        <u-form :model="form" ref="uForm" :rules="rules">
            <u-form-item label="地址:">
                <u-input v-model="form.address" placeholder="请输入地址" @click="getAddress"/>
            </u-form-item>
            <u-form-item label-width="20%" label="事件类型:" prop="type">
                <u-input v-model="form.typeText" type="select" @click="showType = true" placeholder="请选择事件类型"/>
            </u-form-item>
            <u-action-sheet
                v-model="showType"
                :list="typeList"
                title="请选择事件类型"
                @click="typeSelect"
            >
            </u-action-sheet>
            <u-form-item label-width="20%" label="事件状态:" prop="state">
                <u-input v-model="form.stateText" type="select" @click="showState = true" placeholder="请选择事件状态"/>
            </u-form-item>
            <u-action-sheet
                v-model="showState"
                :list="stateList"
                title="请选择事件状态"
                @click="stateSelect"
            >
            </u-action-sheet>
            <u-form-item label-width="20%" label="事件来源:">
                <u-input :disabled="true" v-model="form.sourceText" type="select" @click="showSource = true" placeholder="请选择事件来源"/>
            </u-form-item>
<!--             <u-action-sheet
                v-model="showSource"
                :list="sourceList"
                title="请选择事件状态"
                @click="sourceSelect"
            >
            </u-action-sheet> -->
            <u-form-item label-position="top" label-width="25%" label="图片上传:">
                <u-upload ref="uUpload" :header="header" :action="uploadApi" max-count="5" ></u-upload>
            </u-form-item>
            <u-form-item label-position="top" label="备注:">
                <u-input v-model="form.remark" type="textarea" />
            </u-form-item>
        </u-form>
        <view class="submitBtn">
            <u-button @click="submit">提交</u-button>
        </view>
    </view>
</template>
<script>
import {clientId,clientSecret} from '@/common/setting'
import {add} from "@/api/eventgm/eventgm.js"
import {getDicList} from "@/api/dict/dict.js"
export default {
    data() {
        return {
            form: {
                address:"",
                longitude:"",
                latitude:"",
                type:"",
                typeText:"",
                state:"",
                stateText:"",
                source:"APP",
                sourceText:"APP",
                picUrls:[],
                remark:"",
            },
            rules:{
                type:[{
                    required:true,
                    message:'请选择事件类型',
                    trigger:'blur'
                }],
                state:[{
                    required:true,
                    message:'请选择事件状态',
                    trigger:'blur'
                }],
            },
            //换用其他写法
            uploadApi:"http://localhost/blade-resource/oss/endpoint/put-file-attach",
            header:{},
            showType:false,
            typeList:[],
            showState:false,
            stateList:[],
            showSource:false,
            sourceList:[
                {
                    text: 'WEB',
                    value:'WEB'
                },
                {
                    text: 'APP',
                    value:'APP'
                },
            ],
        };
    },
    onReady() {
        this.$refs.uForm.setRules(this.rules);
    },
    created() {
        this.getType()
        this.getState()
        this.getHeader()
    },
    methods:{
        getHeader(){
            let accessToken = uni.getStorageSync('accessToken');
            if (accessToken) {
                this.header['Blade-Auth'] = 'bearer ' + accessToken;
            }
            // 客户端认证参数
            this.header['Authorization'] = 'Basic ' + Base64.encode(clientId + ':' + clientSecret);
        },
        getAddress(){
            uni.getLocation({
                type: 'wgs84',
                isHighAccuracy:true,
                geocode:true,
                success: res=> {
                    console.log(res)
                    console.log('当前位置的经度:' + res.longitude);
                    console.log('当前位置的纬度:' + res.latitude);
                    this.form.longitude = res.longitude
                    this.form.latitude = res.latitude
                }
            });
        },
        //获取数据字典
        getType(){
            getDicList("EVENT_TYPE").then(res=>{
                if(res.code == 200){
                    res.data.forEach(e=>{
                        this.typeList.push({
                            text:e.dictValue,
                            key:e.dictKey
                        })
                    })
                }
            })
        },
        getState(){
            getDicList("EVENT_STATE").then(res=>{
                if(res.code == 200){
                    res.data.forEach(e=>{
                        this.stateList.push({
                            text:e.dictValue,
                            key:e.dictKey
                        })
                    })
                }
            })
        },
        //选择事件
        typeSelect(index){
            this.form.typeText = this.typeList[index].text
            this.form.type = this.typeList[index].key
        },
        stateSelect(index){
            this.form.stateText = this.stateList[index].text
            this.form.state = this.stateList[index].key
        },
        sourceSelect(index){
            this.form.sourceText = this.sourceList[index].text
            this.form.source = this.sourceList[index].value
        },
        submit(){
            this.$refs.uForm.validate(valid => {
                if (valid) {
                    let lists = this.$refs.uUpload.lists
                    if(lists.length>0){
                        lists.forEach(e=>{
                            this.form.picUrls.push({
                                label:e.response.data.name,
                                value:e.response.data.link
                            })
                        })
                    }else{
                        this.form.picUrls = null
                    }
                    add(this.form).then(res=>{
                        if(res.code ==200){
                            uni.redirectTo({
                                url:"/pages/taskinfo/list"
                            })
                        }
                    })
                }
            });
        }
    }
};
</script>
<style scoped>
    .container{
        padding: 20px;
    }
</style>
pages/taskinfo/list.vue
@@ -29,9 +29,9 @@
                            </view>
                        </view>
                        <view class="onve-right">
                            <u-button class='greens' size="mini" v-if="current == 0">开始任务</u-button>
                            <u-button class='greens' size="mini" v-if="current == 1">完成任务</u-button>
                            <u-button class='o-r-down' plain type="error" size="mini" v-if="current == 1">事件上报
                            <u-button class='greens' size="mini" v-if="current == 0" @click="startTask(item)">开始任务</u-button>
                            <u-button class='greens' size="mini" v-if="current == 1" @click="finishTask(item)">完成任务</u-button>
                            <u-button class='o-r-down' plain type="error" size="mini" v-if="current == 1" @click="goToEventsReported">事件上报
                            </u-button>
                        </view>
                    </view>
@@ -46,7 +46,7 @@
<script>
    import {
        getList
        getList,update
    } from "@/api/taskinfo/list.js";
    export default {
        data() {
@@ -103,6 +103,34 @@
                    this.page.total = data.total;
                    this.taskinfoList = this.taskinfoList.concat(data.records)
                })
            },
            //任务开始事件
            startTask(item){
                item.state = '1'
                item.routeRange =  '\'' + item.routeRange + '\''
                update(item).then(res=>{
                    if(res.code == 200){
                        this.page.currentPage = 1
                        this.getList()
                    }
                })
            },
            //任务结束事件
            finishTask(item){
                item.state = '2'
                item.routeRange =  '\'' + item.routeRange + '\''
                update(item).then(res=>{
                    if(res.code == 200){
                        this.page.currentPage = 1
                        this.getList()
                    }
                })
            },
            //事件上报
            goToEventsReported(){
                uni.navigateTo({
                    url:"../taskinfo/eventsReported"
                })
            }
        }
    }
utils/func.js
@@ -7,7 +7,8 @@
        vm.$u.vuex('accessToken', userInfo.access_token)
        vm.$u.vuex('isLogin', true)
        uni.switchTab({
            url: '/pages/home/home'
            // url: '/pages/home/home'
            url:'/pages/service/service'
        })
    }