zengh
2022-02-10 e9954e49e3e54cf7eaadc97b43d2993f229fc82e
1、工作台优化调整
2、我要查优化调整
15 files modified
8 files added
1648 ■■■■■ changed files
manifest.json 2 ●●● patch | view | raw | blame | history
pages.json 46 ●●●●● patch | view | raw | blame | history
pages/alarm_list/demo.config.js 8 ●●●● patch | view | raw | blame | history
pages/alarm_list/industry/industry.vue 79 ●●●●● patch | view | raw | blame | history
pages/alarm_list/industry/industry_detail.vue 119 ●●●●● patch | view | raw | blame | history
pages/alarm_list/integral/integral.vue 258 ●●●●● patch | view | raw | blame | history
pages/alarm_list/organ/organ.vue 97 ●●●●● patch | view | raw | blame | history
pages/article/article.vue 6 ●●●● patch | view | raw | blame | history
pages/business/business.vue 234 ●●●● patch | view | raw | blame | history
pages/business/businesscopy.vue 93 ●●●●● patch | view | raw | blame | history
pages/grabOrders/grabOrders.vue 2 ●●● patch | view | raw | blame | history
pages/loging/loging.vue 2 ●●● patch | view | raw | blame | history
pages/loging/logingc.vue 2 ●●● patch | view | raw | blame | history
pages/myself/childen/collect.vue 2 ●●●●● patch | view | raw | blame | history
pages/shengzs/indexcopy.vue 691 ●●●●● patch | view | raw | blame | history
static/workbench/task1.png patch | view | raw | blame | history
static/workbench/task2.png patch | view | raw | blame | history
static/workbench/task3.png patch | view | raw | blame | history
static/workbench/task4.png patch | view | raw | blame | history
static/workbench/task5.png patch | view | raw | blame | history
static/workbench/task6.png patch | view | raw | blame | history
store/actions.js 1 ●●●● patch | view | raw | blame | history
store/state.js 6 ●●●● patch | view | raw | blame | history
manifest.json
@@ -1,5 +1,5 @@
{
    "name" : "南昌义警",
    "name" : "洪城义警",
    "appid" : "__UNI__1A57486",
    "description" : "",
    "versionName" : "1.0.0",
pages.json
@@ -107,8 +107,8 @@
            "path": "pages/business/business",
            "style": {
                "navigationBarTitleText": "工作台",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
                "enablePullDownRefresh": false,
                "navigationStyle": "custom"
            }
        },
        {
@@ -451,7 +451,47 @@
                "navigationBarTitleText": "500"
            }
        }
    ],
        ,{
            "path" : "pages/alarm_list/integral/integral",
            "style" :
            {
                "navigationBarTitleText": "查积分",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }
        ,{
            "path" : "pages/alarm_list/organ/organ",
            "style" :
            {
               "navigationBarTitleText": "组织申请",
               "navigationBarBackgroundColor": "#103289",
               "navigationBarTextStyle": "white"
            }
        }
        ,{
            "path" : "pages/alarm_list/industry/industry",
            "style" :
            {
                "navigationBarTitleText": "行业政策",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }
        ,{
            "path" : "pages/alarm_list/industry/industry_detail",
            "style" :
            {
                "navigationBarTitleText": "行业政策",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }
    ],
    "globalStyle": { //将组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue目录结构。可以不用引用、注册,直接在页面中使用。
        "autoscan": true
    },
pages/alarm_list/demo.config.js
@@ -1,11 +1,11 @@
export default [{
        groupName: '基础功能',
        list: [{
            path: '/pages/demo/storage',
            path: '/pages/alarm_list/integral/integral',
            icon: 'cell',
            title: '查积分',
        }, {
            path: '/pages/demo/vuex',
            path: '/pages/grabOrders/grabOrders',
            icon: 'sticky',
            title: '查任务',
        }]
@@ -13,11 +13,11 @@
    {
        groupName: '业务功能',
        list: [{
            path: '/pages/demo/mock',
            path: 'pages/alarm_list/organ/organ',
            icon: 'layout',
            title: '组织申请',
        }, {
            path: '/pages/demo/request',
            path: 'pages/alarm_list/industry/industry',
            icon: 'tabbar',
            title: '行业政策',
        }]
pages/alarm_list/industry/industry.vue
New file
@@ -0,0 +1,79 @@
<template>
    <scroll-view id="articleBox" :style="{ height: swiperHeight + 'px' }" class="article-content" scroll-y
        style="width: 100%; margin-top: 15rpx;">
        <view v-for="(i, index) in data" class="advisory-model">
            <u-cell-group :title="i.company">
                <u-cell-item icon="order" @click="goDetail(index)" :title="i.policy" :label="i.time.substring(0,11)"></u-cell-item>
            </u-cell-group>
        </view>
    </scroll-view>
</template>
<script>
    export default {
        data() {
            return {
                data: [],
                swiperHeight: 0,
            }
        },
        onLoad() {
            //行业数据
            this.getData();
        },
        methods: {
            goDetail(index) {
                uni.navigateTo({
                    url:'./industry_detail?data='+ this.data[index].id
                })
            },
            onReady() {
                let that = this;
                uni.getSystemInfo({
                    success(e) {
                        console.log(e);
                        let {
                            windowWidth,
                            windowHeight,
                            safeArea
                        } = e;
                        const query = uni.createSelectorQuery().in(that);
                        query
                            .select('#articleBox')
                            .boundingClientRect(data => {
                                that.swiperHeight = (safeArea.bottom - data.top - 50);
                            })
                            .exec();
                    }
                });
            },
            getData() {
                var that = this;
                uni.request({
                    url: that.$store.state.piAPI + '/policy/page',
                    method: 'GET',
                    success: (res) => {
                        that.data = res.data.data.records;
                    }
                });
            },
        }
    }
</script>
<style lang="scss" scoped>
    .u-cell_title {
        width: 250rpx;
        float: left;
        letter-spacing: 1px;
         white-space: nowrap;
        overflow: hidden;
         text-overflow:ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 1;
        -webkit-box-orient: vertical;
        // background-color:#0078A8;
    }
</style>
pages/alarm_list/industry/industry_detail.vue
New file
@@ -0,0 +1,119 @@
<template>
    <view>
        <view class="banner-title">{{article.policy}}</view>
        <view class="article-meta">
            <view class="article-author">{{article.company}}</view>
            <text class="article-text">发布于</text>
            <text class="article-time">{{article.time}}</text>
        </view>
        <view class="article-content">
            <!-- <video id="myVideo" class="video" v-if="video" :src="article.videoUrl" muted="false" @error="videoErrorCallback"></video> -->
            <u-parse :content="content" @navigate="navigate"></u-parse>
        </view>
    </view>
</template>
<script>
    import uParse from "@/components/feng-parse/parse.vue"
    export default {
        components: {
            uParse
        },
        data() {
            return {
                article: {},
                content: "",
            }
        },
        onLoad(event) {
            //行业数据
            var that = this;
            //获取资讯详信息
            uni.request({
                url: that.$store.state.piAPI + '/policy/detail?id=' + event.data,
                method: 'GET',
                success: (res) => {
                    that.article = res.data.data;
                    that.content = res.data.data.policycount;
                }
            });
        },
        methods: {
        }
    }
</script>
<style lang="scss" scoped>
    // @import url("/components/feng-parse/parse.css");
    .banner {
        height: 360upx;
        overflow: hidden;
        position: relative;
        background-color: #ccc;
    }
    .banner-img {
        width: 100%;
    }
    .banner-title {
        position: relative;
        left: 20rpx;
        overflow: hidden;
        width: 90%;
        z-index: 11;
        font-size: 40rpx;
        font-family: PingFang SC;
        font-weight: bold;
        color: #000000;
        line-height: 47rpx;
    }
    .article-meta {
        // background-color: #007AFF;
        width: 100%;
        height: 80rpx;
        font-size: 24rpx;
        color: #808080;
        display: flex;
        flex-direction: row;
        align-items: center;
        position: relative;
        left: 20rpx;
        // justify-content: center;
        // font-weight: 550;
        .article-author {
            letter-spacing: 1px;
            float: left;
        }
        .article-text {
            position: relative;
            left: 15px;
        }
        .article-time {
            position: relative;
            left: 30px;
        }
    }
    .article-content {
        position: relative;
        left: 3%;
        bottom: 2%;
        width: 94%;
        margin-bottom: 20px;
        // border-bottom: 1px solid rgba(128,128,128,0.1);
        // .video{
        //     width: 100%;
        // }
    }
</style>
pages/alarm_list/integral/integral.vue
New file
@@ -0,0 +1,258 @@
<template>
    <view class="advisory-big">
        <view class="m-top">
        </view>
        <view class="bomBut">
            <view style="width: 400rpx;padding-left: 30rpx;">
                <u-tabs :list="list" :is-scroll="false"></u-tabs>
            </view>
            <u-row gutter="16">
                <u-col span="7">
                    <view class="bom-text">当前积分</view>
                    <view class="bom-int">483</view>
                </u-col>
                <u-col span="5">
                    <view class="bom-text">累计积分</view>
                    <view class="bom-int">856</view>
                </u-col>
            </u-row>
        </view>
        <view class="bomList">
            <view class="">
                <u-dropdown border-bottom="true">
                    <u-dropdown-item v-model="value1" title="收支类型" :options="options1"></u-dropdown-item>
                </u-dropdown>
            </view>
            <scroll-view id="articleBox" :style="{ height: swiperHeight + 'px' }" class="article-content" scroll-y
                style="width: 100%; margin-top: 15rpx;">
                <view v-for="i in data" class="advisory-model" @click="goDetail(i)">
                    <view class="advisory-left">
                        <view class="advisory-title-top">
                            <view class="advisory-title">{{i.title}}</view>
                        </view>
                        <view class="advisory-title-down">
                            <view class="advisory-title-time">{{i.createTime}}</view>
                        </view>
                    </view>
                    <view class="advisory-right">
                        <view v-if="i.type =='2'" class="advisory-title-integral">- {{i.integral}}</view>
                        <view v-if="i.type =='1'" class="advisory-title-integraladd">+{{i.integral}}</view>
                    </view>
                    <u-line class="advisory-line" color="#ebebeb" />
                </view>
            </scroll-view>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                list: [{
                    name: '积分明细'
                }, {
                    name: ''
                }, {
                    name: '',
                }],
                options1: [{
                        label: '全部',
                        value: 1,
                    },
                    {
                        label: '积分获取',
                        value: 2,
                    },
                    {
                        label: '积分支出',
                        value: 3,
                    }
                ],
                value1: 1,
                data: [{
                    title: "义务巡逻",
                    integral: "2",
                    type:"1",
                    createTime: "2021-02-03"
                }, {
                    title: "商品兑换",
                    integral: "3",
                    type:"2",
                    createTime: "2021-02-03"
                }, {
                    title: "视频浏览",
                    integral: "4",
                    type:"1",
                    createTime: "2021-02-03"
                }, ],
                swiperHeight: 0
            }
        },
        methods: {
            goDetail() {
            },
            onReady() {
                let that = this;
                uni.getSystemInfo({
                    success(e) {
                        console.log(e);
                        let {
                            windowWidth,
                            windowHeight,
                            safeArea
                        } = e;
                        const query = uni.createSelectorQuery().in(that);
                        query
                            .select('#articleBox')
                            .boundingClientRect(data => {
                                that.swiperHeight = (safeArea.bottom - data.top - 50);
                            })
                            .exec();
                    }
                });
            },
        }
    }
</script>
<style>
    .advisory-big {
        width: 100%;
        height: 100vh;
        background-color: #f7f7f7;
    }
    .bomBut {
        width: 93%;
        margin: 0 auto;
        height: 7.5rem;
        z-index: 999;
        border-radius: 10px;
        margin-top: -2.5rem;
        background-color: #fff;
    }
    .bomList {
        width: 93%;
        margin: 0 auto;
        height: 30rem;
        z-index: 999;
        border-radius: 10px;
        margin-top: 1rem;
        background-color: #fff;
    }
    .bom-text {
        font-size: 30rpx;
        font-family: PingFang SC;
        color: #585b61;
        padding-left: 30rpx;
    }
    .bom-int {
        font-size: 40rpx;
        font-family: PingFang SC;
        color: #ff910a;
        font-weight: bold;
        padding-left: 30rpx;
        padding-top: 10rpx;
    }
    .m-top {
        width: 100%;
        height: 3rem;
        border-radius: 0px 0px 20px 20px;
        background-image: linear-gradient(to bottom, #103289, #174cd1);
        color: #fff;
        flex-direction: column;
    }
    .u-row {
        margin: 10rpx 0;
    }
    .demo-layout {
        height: 80rpx;
        border-radius: 8rpx;
    }
    .bg-purple {
        background: #d3dce6;
    }
    .bg-purple-light {
        background: #e5e9f2;
    }
    .bg-purple-dark {
        background: #99a9bf;
    }
    .advisory-model {
        width: 93%;
        margin: 0 auto;
        margin-top: 0.5rem;
        height: 3rem;
        background-color: #FFF;
    }
    .advisory-title {
        font-size: 15px;
        font-weight: 550;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .advisory-title-down {
        /* background-color: #0078A8; */
        width: 100%;
        height: 25%;
        font-size: 12px;
        font-weight: 350;
        color: #808080;
        padding-top: 10rpx;
    }
    .advisory-title-time {
        position: relative;
    }
    .advisory-right {
        // background-color: #222222;
        left: 25%;
        top: 30%;
        position: relative;
    }
    .advisory-left {
        width: 64%;
        height: 80%;
        float: left;
        position: relative;
        // background-color: #00FFFF;
        left: 3%;
        top: 10%;
    }
    .advisory-line {
        top: 70%;
        position: relative;
    }
    .advisory-title-integraladd{
        color: #00aaff;
    }
    .advisory-title-integral{
        color: #ff0000;
    }
</style>
pages/alarm_list/organ/organ.vue
New file
@@ -0,0 +1,97 @@
<template>
    <scroll-view id="articleBox" :style="{ height: swiperHeight + 'px' }" class="article-content" scroll-y
        style="width: 100%; margin-top: 15rpx;">
        <view v-for="(i, index) in data" class="advisory-model">
            <u-cell-group>
                <u-cell-item :arrow='false' icon="man-add" @click="goDetail(index)" :title="i.organization"
                    :label="i.time.substring(0,11)" :value="i.type=='0'?'审核中':i.type=='1'?'通过':i.type=='2'?'未通过':'未通过'">
                    <u-icon v-if="i.type == '0'" class="sh" slot="right-icon" size="32" name="clock"></u-icon>
                    <u-icon v-if="i.type == '1'" class="tg" slot="right-icon" size="32" name="checkmark-circle"></u-icon>
                    <u-icon v-if="i.type == '2'" class="bh" slot="right-icon" size="32" name="close-circle"></u-icon>
                </u-cell-item>
            </u-cell-group>
        </view>
    </scroll-view>
</template>
<script>
    export default {
        data() {
            return {
                data: [],
                swiperHeight: 0,
            }
        },
        onLoad() {
            //行业数据
            this.getData();
        },
        methods: {
            goDetail(index) {
            },
            onReady() {
                let that = this;
                uni.getSystemInfo({
                    success(e) {
                        console.log(e);
                        let {
                            windowWidth,
                            windowHeight,
                            safeArea
                        } = e;
                        const query = uni.createSelectorQuery().in(that);
                        query
                            .select('#articleBox')
                            .boundingClientRect(data => {
                                that.swiperHeight = (safeArea.bottom - data.top - 50);
                            })
                            .exec();
                    }
                });
            },
            getData() {
                var that = this;
                var userid = that.$store.state.UserData.user_id;
                uni.request({
                    url: that.$store.state.piAPI + '/organ/page?uid=' + userid,
                    method: 'GET',
                    success: (res) => {
                        that.data = res.data.data.records;
                    }
                });
            },
        }
    }
</script>
<style lang="scss" scoped>
    .u-cell_title {
        width: 250rpx;
        float: left;
        letter-spacing: 1px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 1;
        -webkit-box-orient: vertical;
        // background-color:#0078A8;
    }
    .sh {
        color: #55aaff;
        padding-left: 10px;
    }
    .bh {
        color: #e60303;
        padding-left: 10px;
    }
    .tg {
        color: #00f300;
        padding-left: 10px;
    }
</style>
pages/article/article.vue
@@ -294,11 +294,7 @@
</script>
<style>
    page {
        width: 100%;
        height: 100%;
        background-color: #f7f7f7;
    }
</style>
<style lang="scss" scoped>
pages/business/business.vue
@@ -1,93 +1,189 @@
<!-- 业务办理 -->
<template>
    <view>
        <!-- <uni-nav-bar class="uni-nav-bar-info" :fixed="true"  :status-bar="true" >
        </uni-nav-bar> -->
        <view class="view-business">
            <!-- <squareBut :data="squareBut"></squareBut> -->
            <view class="view-business-nav">
                <navigator class="patrolBtn" url="/pages/alarm_list/alarm_list">
                    <image src="../../static/workbench/task1.png"></image>
                    <span>群防任务</span>
                </navigator>
    <view class="container">
        <view class="head">
            <u-navbar :is-fixed="false" :border-bottom="false" :is-back="true" back-icon-name="arrow-leftward"
                back-icon-color="#fff" back-icon-size="35" :background="{ background: '#103289' }" title="工作台"
                title-color="#fff"></u-navbar>
            <view class="head-bg"></view>
            <!-- 我的订阅 start -->
            <view class="card sub">
                <view class="title">常用工具</view>
                <view class="list">
                    <u-grid :col="4" :border="false">
                        <u-grid-item bg-color="transparent">
                            <navigator url="/pages/alarm_list/alarm_list" hover-class="none" class="nav-item">
                                <image src="../../static/workbench/task1.png" mode="widthFix" class="nav-item-img"></image>
                                <view class="nav-item-name">群防任务</view>
                            </navigator>
                        </u-grid-item>
                        <u-grid-item bg-color="transparent">
                            <navigator url="/pages/patrol/patrol" hover-class="none" class="nav-item">
                                <image src="../../static/workbench/task2.png" mode="widthFix" class="nav-item-img"></image>
                                <view class="nav-item-name">巡逻任务</view>
                            </navigator>
                        </u-grid-item>
                        <u-grid-item bg-color="transparent">
                            <navigator url="/pages/reported/reported" hover-class="none" class="nav-item">
                                <image src="../../static/workbench/task3.png" mode="widthFix" class="nav-item-img"></image>
                                <view class="nav-item-name">事件上报</view>
                            </navigator>
                        </u-grid-item>
                        <u-grid-item bg-color="transparent">
                            <navigator url="/pages/groupChat/groupChat?txlType=2" hover-class="none" class="nav-item">
                                <image src="../../static/workbench/task4.png" mode="widthFix" class="nav-item-img"></image>
                                <view class="nav-item-name">通讯录</view>
                            </navigator>
                        </u-grid-item>
                        <u-grid-item bg-color="transparent">
                            <navigator url="" hover-class="none" class="nav-item">
                                <image src="../../static/workbench/task5.png" mode="widthFix" class="nav-item-img"></image>
                                <view class="nav-item-name">我的投票</view>
                            </navigator>
                        </u-grid-item>
                        <u-grid-item bg-color="transparent">
                            <navigator url="" hover-class="none" class="nav-item">
                                <image src="../../static/workbench/task6.png" mode="widthFix" class="nav-item-img"></image>
                                <view class="nav-item-name">投票发起</view>
                            </navigator>
                        </u-grid-item>
                    </u-grid>
                </view>
            </view>
            <view class="view-business-nav">
                <navigator class="patrolBtn" url="/pages/patrol/patrol">
                    <image src="../../static/workbench/task2.png"></image>
                    <span>巡逻任务</span>
                </navigator>
            </view>
            <view class="view-business-nav">
                <navigator class="patrolBtn" url="/pages/reported/reported">
                    <image src="../../static/workbench/task3.png"></image>
                    <span>事件上报</span>
                </navigator>
            </view>
            <view class="view-business-nav">
                <navigator class="patrolBtn" url="/pages/groupChat/groupChat?txlType=2">
                    <image src="../../static/workbench/task4.png"></image>
                    <span>通讯录</span>
                </navigator>
            </view>
            <!-- 我的订阅 end -->
        </view>
        <!-- 底部导航条 -->
        <u-tabbar :list="tabbar" :mid-button="true"></u-tabbar>
    </view>
</template>
<script>
    import squareBut from '../../components/squareBut/squareBut.vue'
    export default {
        components: {
            squareBut
        },
        data() {
            return {
                squareBut: [{
                    title: '设备提交',
                    imgSrc: '../../static/img/cancel.png',
                    goHref: '../equipment/equipment'
                }],
                tabbar:this.$store.state.tabbar
            }
            };
        },
        onLoad() {
        }
    }
    };
</script>
<style lang="scss" scoped>
    .view-business{
        width: 100%;
        margin-top: 1rem;
<style lang="scss">
    .container {
        background-color: #f7f7f7;
        min-height: 100vh;
        overflow: hidden;
    }
    .view-business-nav{
        float: left;
        display: flex;
        width: 33%;
        align-items: center;
        justify-content: center;
        .patrolBtn {
            // border: 1rpx solid #999999;
            border-radius: 25rpx;
            width: 8rem;
            height: 7.5rem;
    .head {
        position: relative;
        top: 0;
        left: 0;
        z-index: 1;
    }
    .head-bg {
        position: absolute;
        left: 0px;
        top: 0px;
        z-index: -1;
        width: 750rpx;
        height: 270rpx;
        background: #103289;
    }
    .card {
        margin: 30rpx;
        background: #ffffff;
        border-radius: 20rpx;
        margin-top: 36rpx;
    }
    .sub {
        .title {
            padding-top: 36rpx;
            display: flex;
            align-items: center;
            justify-content: center;
            flex-direction: column;
            image{
                width: 4rem;
                height: 4rem;
            align-items: center;
            font-size: 30rpx;
            font-family: Source Han Sans CN;
            font-weight: 500;
            color: #000000;
            &::before {
                content: '';
                display: block;
                width: 135rpx;
                height: 1rpx;
                background: #e4e7ed;
                margin: 0 17rpx;
            }
            span {
                margin-top: 0.4rem;
                font-size: 0.9rem;
            &::after {
                content: '';
                display: block;
                width: 135rpx;
                height: 1rpx;
                background: #e4e7ed;
                margin: 0 17rpx;
            }
        }
    }
    .list {
        display: flex;
        flex-wrap: wrap;
        padding: 0 0 30rpx;
        .nav-item {
            width: 100%;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            align-items: center;
            font-size: 30rpx;
            font-family: Source Han Sans CN;
            font-weight: 400;
            color: #131313;
            line-height: 48rpx;
            &-img {
                width: 64rpx;
                height: 64rpx;
                margin-bottom: 20rpx;
            }
            &-name {
                font-size: 26rpx;
                font-family: PingFang SC;
                font-weight: 400;
                color: #585b61;
                opacity: 0.77;
            }
        }
    }
    .wrap {
        .title {
            padding: 36rpx 16rpx;
            display: flex;
            align-items: center;
            font-size: 32rpx;
            font-family: Source Han Sans CN;
            font-weight: 500;
            color: #000000;
            &::before {
                content
                : "";
                display: block;
                width: 5rpx;
                height: 36rpx;
                margin-right: 10rpx;
                background: #3ac4d1;
            }
        }
    }
</style>
pages/business/businesscopy.vue
New file
@@ -0,0 +1,93 @@
<!-- 业务办理 -->
<template>
    <view>
        <!-- <uni-nav-bar class="uni-nav-bar-info" :fixed="true"  :status-bar="true" >
        </uni-nav-bar> -->
        <view class="view-business">
            <!-- <squareBut :data="squareBut"></squareBut> -->
            <view class="view-business-nav">
                <navigator class="patrolBtn" url="/pages/alarm_list/alarm_list">
                    <image src="../../static/workbench/task1.png"></image>
                    <span>群防任务</span>
                </navigator>
            </view>
            <view class="view-business-nav">
                <navigator class="patrolBtn" url="/pages/patrol/patrol">
                    <image src="../../static/workbench/task2.png"></image>
                    <span>巡逻任务</span>
                </navigator>
            </view>
            <view class="view-business-nav">
                <navigator class="patrolBtn" url="/pages/reported/reported">
                    <image src="../../static/workbench/task3.png"></image>
                    <span>事件上报</span>
                </navigator>
            </view>
            <view class="view-business-nav">
                <navigator class="patrolBtn" url="/pages/groupChat/groupChat?txlType=2">
                    <image src="../../static/workbench/task4.png"></image>
                    <span>通讯录</span>
                </navigator>
            </view>
        </view>
        <!-- 底部导航条 -->
        <u-tabbar :list="tabbar" :mid-button="true"></u-tabbar>
    </view>
</template>
<script>
    import squareBut from '../../components/squareBut/squareBut.vue'
    export default {
        components: {
            squareBut
        },
        data() {
            return {
                squareBut: [{
                    title: '设备提交',
                    imgSrc: '../../static/img/cancel.png',
                    goHref: '../equipment/equipment'
                }],
                tabbar:this.$store.state.tabbar
            }
        }
    }
</script>
<style lang="scss" scoped>
    .view-business{
        width: 100%;
        margin-top: 1rem;
    }
    .view-business-nav{
        float: left;
        display: flex;
        width: 33%;
        align-items: center;
        justify-content: center;
        .patrolBtn {
            // border: 1rpx solid #999999;
            border-radius: 25rpx;
            width: 8rem;
            height: 7.5rem;
            display: flex;
            align-items: center;
            justify-content: center;
            flex-direction: column;
            image{
                width: 4rem;
                height: 4rem;
            }
            span {
                margin-top: 0.4rem;
                font-size: 0.9rem;
            }
        }
    }
</style>
pages/grabOrders/grabOrders.vue
@@ -113,7 +113,7 @@
                    d = {
                        serid: uni.getStorageSync("ids"),
                        type: val + "",
                    };
                    };
                    
                uni.request({
                    url: this.$store.state.piAPI + "taskqd/selectLi",
pages/loging/loging.vue
@@ -10,7 +10,7 @@
        <view class="content">
            <view class="top">
                <view class="titie">
                    <span>南昌义警APP</span>
                    <span>洪城义警APP</span>
                </view>
                <view class="cell">
                    <view class="name">账号</view>
pages/loging/logingc.vue
@@ -6,7 +6,7 @@
                <image class="Timg" src="../../static/users.png" mode=""></image>
            </view>
            <view class="titie">
                <span>南昌义警APP</span>
                <span>洪城义警APP</span>
            </view>
            <view class="name">
                <span>账号:</span>
pages/myself/childen/collect.vue
@@ -54,8 +54,6 @@
            
        </view> -->
        <!-- 底部导航条 -->
        <u-tabbar :list="tabbar" :mid-button="false"></u-tabbar>
    </view>
</template>
pages/shengzs/indexcopy.vue
New file
@@ -0,0 +1,691 @@
<template>
    <view class="page">
        <view class="canvas">
            <!-- 云朵位移 -->
            <view class="cloud">
                <view class="fly-1"></view>
                <view class="fly-2"></view>
                <view class="fly-3"></view>
            </view>
            <!-- 树、水滴值 -->
            <view class="tree">
                <view v-for="(o, i) in rainArr" :key="i" :class="['rain rain-'+ stages]" @click="rainFun(i, o)">{{o}}<text>g</text></view>
                <image :src="'../../static/shenzs/img/tree-'+ stages +'.png'" :class="['tree-'+ stages, treemove ? 'move-'+ stages : '']" hover-class="none" @click="tree"></image>
            </view>
            <!-- 水壶、浇水动画 -->
            <view class="kettle">
                <view class="kettls" @click="water" hover-class="none"></view>
                <view class="flasks" v-show="watercss" :class="{'water': watercss}"></view>
                <view class="flasms" v-show="!watercss" @click="water" hover-class="none"></view>
                <view class="waters" v-show="waterdom"></view>
            </view>
            <!-- 用户信息、水滴值 -->
            <view class="sumup">
                <view class="user">
                    <view class="cover">
                        <image :src="info.avatar" @click="zoom(info.avatar)" hover-class="none"></image>
                    </view>
                    <view class="info">
                        <view class="name">
                            <text class="name" v-text="info.name"></text>
                            <view :class="'sex-'+ info.sex"></view>
                        </view>
                        <view class="drop" hover-class="none">
                            <text v-text="info.votes + ' 水滴'"></text>
                            <view class="icon">
                                <text class="plus" :class="{'pluss': pluss}">+{{plussNum}}</text>
                            </view>
                        </view>
                    </view>
                </view>
                <!-- 树成长进度 -->
                <view class="speed">
                    <view class="progress">
                        <image class="speed-1" :src="'../../static/shenzs/img/speed-1'+ [1 == stages ? '-h' : ''] +'.png'"></image>
                        <image class="speed-2" :src="'../../static/shenzs/img/speed-2'+ [2 == stages ? '-h' : ''] +'.png'"></image>
                        <image class="speed-3" :src="'../../static/shenzs/img/speed-3'+ [3 == stages ? '-h' : ''] +'.png'"></image>
                    </view>
                </view>
            </view>
        </view>
        <view class="explain">
            <!-- <view>功能概述:</view>
            <view class="text">该插件样式主要是模仿蚂蚁森林,其中的数据都是可配的(完全可以自义定 或 从后端API获取),根据不同的数据(如用户信息、水滴值等)显示对应的动效。</view> -->
            <view>操作说明:</view>
            <view class="text">1、用水壶每浇水1次,水滴值向上+1。</view>
            <view class="text">2、点击树上面的雨滴,水滴值 + 收取到的雨滴值。</view>
            <view>成长说明:</view>
            <view class="text">1、树的成长过程分为小树、中树、大树3个阶段。</view>
            <view class="text">2、现默认值: 小树(水滴值在100以下), 中树(水滴值在100 到 1000), 大树(水滴值在1000以上)。</view>
            <view class="text">3、树苗会在水滴值变化时会展示对应的动效 和 树的动效、大小等。</view>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                info: {
                    name: '沐枫',     // 用户姓名
                    sex: 2,         // 用户姓别 1男, 2女
                    votes: 8,         // 水滴值 默认为8
                    avatar: '../../static/shenzs/img/detail-bg.jpg'     //用户头像
                },
                rainArr: [28, 63, 5, 902],     // 雨滴值 点击收取
                stages: 1,             // 成长阶段 1(小树[默认]),中2(中树) ,大3(大树)
                during: 100,         // 阶段阈值 1、小树[100以下](during > votes ) ,2、中树[100及以上 并且小于1000](during <= votes && oldest > votes)
                oldest: 1000,         // 阶段阈值 3、大树[1000及以上](oldest <= votes )
                plussNum: 1,         // 加值数量(默认1)
                pluss: false,         // 水滴值+1动画开关
                movetree: true,     // 树动画开关
                treemove: false,     // 树大小动画类型开关
                wateroff: true,     // 浇水动画开关
                watercss: false,     // 水壶动画开关
                waterdom: false     // 水滴动画开关
            };
        },
        methods: {
            // 设置树的大小,恢复动画
            setTree(time = 4000) {
                setTimeout(() => {
                    this.plussNum = 1;
                    this.pluss = false;
                    this.wateroff = true;
                    this.watercss = false;
                    this.treemove = false;
                    // 小树阶段
                    if (this.during > this.info.vote) {
                        this.stages = 1;
                    };
                    // 中树阶段
                    if (this.during <= this.info.votes && this.oldest > this.info.votes) {
                        this.stages = 2;
                    };
                    // 大树阶段
                    if (this.oldest <= this.info.votes) {
                        this.stages = 3;
                    };
                }, time);
            },
            // 点击用户头像放大
            zoom(o) {
                uni.previewImage({
                    'urls': [o]
                });
            },
            // 收取雨滴的动画
            rainFun(i, o) {
                this.plussNum = o;
                this.info.votes = Number(this.info.votes) + (o - 0);
                this.pluss = true;
                this.treemove = true;
                setTimeout(() => {
                    this.rainArr.splice(i, 1);
                }, 1000);
                this.setTree(2000);
            },
            // 点击树的动画
            tree() {
                if (this.movetree) {
                    this.treemove = true;
                    this.movetree = false;
                    setTimeout(() => {
                        this.movetree = true;
                        this.treemove = false;
                    }, 1000);
                };
            },
            // 水壶浇水动画
            water() {
                if (this.wateroff) {
                    this.watercss = true;
                    this.wateroff = false;
                    setTimeout(() => {
                        this.waterdom = true;
                    }, 1500);
                    setTimeout(() => {
                        this.info.votes++;
                        this.pluss = true;
                        this.treemove = true;
                        this.movetree = false;
                    }, 2000);
                    setTimeout(() => {
                        this.waterdom = false;
                        this.movetree = true;
                    }, 3500);
                    this.setTree();
                };
            }
        }
    };
</script>
<style>
    .canvas {
        position: relative;
        display: flex;
        flex-direction: column;
        width: 100%;
        height: 702upx;
        background: url(../../static/shenzs/img/detail-bg.jpg) no-repeat;
        background-size: cover;
        overflow: hidden;
    }
    .canvas .cloud {
        margin-top: 128upx;
    }
    .canvas .cloud view {
        margin: 40upx 0;
    }
    .canvas .cloud .fly-1 {
        width: 102upx;
        height: 68upx;
        animation: cloud-1 80s ease-in-out 0s infinite alternate;
        background: url(../../static/shenzs/img/fly-1.png) no-repeat;
        background-size: contain;
    }
    .canvas .cloud .fly-2 {
        width: 72upx;
        height: 52upx;
        animation: cloud-2 60s linear 0s infinite alternate;
        background: url(../../static/shenzs/img/fly-2.png) no-repeat;
        background-size: contain;
    }
    .canvas .cloud .fly-3 {
        width: 78upx;
        height: 56upx;
        animation: cloud-3 70s ease 0s infinite alternate;
        background: url(../../static/shenzs/img/fly-3.png) no-repeat;
        background-size: contain;
    }
    .canvas .tree {
        position: relative;
        display: flex;
        flex-direction: row;
        height: 160upx;
        justify-content: center;
    }
    .canvas .tree .rain {
        position: relative;
        top: -100upx;
        margin: 10upx;
        width: 60upx;
        height: 60upx;
        line-height: 60upx;
        text-align: center;
        font-size: 16upx;
        color: green;
        background: repeating-radial-gradient(#0fff00, #53c72d);
        box-shadow: 0 0 16upx 6upx #b8ffc4;
        border-radius: 50%;
        animation: rain 4s infinite;
        z-index: 1;
    }
    .canvas .tree .rain text {
        font-size: 12upx;
    }
    .canvas .tree .rain-1 {
        top: -100upx;
    }
    .canvas .tree .rain-2 {
        top: -200upx;
    }
    .canvas .tree .rain-3 {
        top: -300upx;
    }
    .canvas .tree .rain:nth-child(1) {
        animation-delay: .8s;
        margin-top: 10px;
    }
    .canvas .tree .rain:nth-child(2) {
        animation-delay: .5s;
        margin-top: -10px;
    }
    .canvas .tree .rain:nth-child(4) {
        animation-delay: .1s;
        margin-top: -5px;
    }
    .canvas .tree image {
        position: absolute;
        bottom: 0;
        width: 280upx;
        height: 380upx;
        z-index: 0;
    }
    .canvas .tree .tree-1 {
        width: 124upx;
        height: 264upx;
    }
    .canvas .tree .tree-3 {
        width: 420upx;
        height: 460upx;
    }
    .canvas .kettle {
        display: flex;
        position: relative;
        flex-direction: row;
        justify-content: flex-end;
        width: 100%;
        height: 80upx;
    }
    .canvas .kettle view {
        position: absolute;
        z-index: 2;
    }
    .canvas .kettle .kettls {
        top: -172upx;
        right: 20upx;
        width: 116upx;
        height: 112upx;
        background: url(../../static/shenzs/img/kettls.png) no-repeat;
        background-size: contain;
        transition: all 2s;
    }
    .canvas .kettle .flasks {
        top: -176upx;
        right: 28upx;
        width: 113upx;
        height: 70upx;
        background: url(../../static/shenzs/img/flasks.png) no-repeat;
        background-size: contain;
        transition: all 2s;
    }
    .canvas .kettle .flasms {
        top: -176upx;
        right: 26upx;
        width: 117upx;
        height: 75upx;
        background: url(../../static/shenzs/img/flasms.png) no-repeat;
        background-size: contain;
        transition: all 2s;
    }
    .canvas .kettle .waters {
        top: -240upx;
        right: 316upx;
        width: 85upx;
        height: 150upx;
        background: url(../../static/shenzs/img/waters.gif) no-repeat;
        background-size: contain;
        transition: all 2s;
    }
    .canvas .sumup {
        position: absolute;
        bottom: 26upx;
        display: flex;
        flex-direction: row;
        justify-content: space-between;
        width: 100%;
    }
    .canvas .sumup .user {
        display: flex;
        flex-direction: row;
    }
    .canvas .sumup .user .cover {
        padding: 0 20upx;
    }
    .canvas .sumup .user .cover image {
        width: 110upx;
        height: 110upx;
        border-radius: 50%;
        border: 1upx solid white;
    }
    .canvas .sumup .user .info {
        display: flex;
        flex-direction: column;
        color: white;
        justify-content: flex-start;
        padding-top: 16upx;
        font-weight: bold;
        text-shadow: 4upx 4upx 2upx #085828;
    }
    .canvas .sumup .user .info .name {
        font-size: 30upx;
        color: white;
    }
    .canvas .sumup .user .info .name .sex-1 {
        width: 25upx;
        height: 31upx;
        background: url(../../static/shenzs/img/male.png) no-repeat;
        background-size: contain;
    }
    .canvas .sumup .user .info .name .sex-2 {
        width: 21upx;
        height: 34upx;
        background: url(../../static/shenzs/img/women.png) no-repeat;
        background-size: contain;
    }
    .canvas .sumup .user .info .name view {
        margin-left: 12upx;
        display: inline-block;
        vertical-align: middle;
    }
    .canvas .sumup .user .info .drop {
        margin-top: 10upx;
        line-height: 32upx;
        font-size: 26upx;
    }
    .canvas .sumup .user .info .drop .icon {
        position: relative;
        display: inline-block;
        margin-left: 10upx;
        width: 20upx;
        height: 30upx;
        vertical-align: bottom;
        background: url(../../static/shenzs/img/water.png) no-repeat bottom right;
        background-size: contain;
    }
    .canvas .sumup .user .info .drop .plus {
        position: absolute;
        top: 0upx;
        right: -12upx;
        font-size: 32upx;
        opacity: 0;
        color: #ffbe2d;
    }
    .canvas .sumup .speed {
        display: flex;
        flex-direction: row;
        padding: 16upx 32upx;
        height: 100upx;
        align-items: flex-end;
    }
    .canvas .sumup .speed .progress {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
        align-items: flex-end;
        width: 208upx;
        height: 30upx;
        border-radius: 14upx;
        background: linear-gradient(#9587ce, #7182d8);
    }
    .canvas .sumup .speed .speed-1 {
        width: 44upx;
        height: 50upx;
        margin-left: -8upx;
    }
    .canvas .sumup .speed .speed-2 {
        width: 44upx;
        height: 60upx;
    }
    .canvas .sumup .speed .speed-3 {
        width: 58upx;
        height: 68upx;
        margin-right: -12upx;
    }
    .explain {
        padding: 50upx 16upx;
        font-size: 28upx;
        color: #ff00a5;
        font-weight: bold;
    }
    .explain .text {
        padding: 16upx;
        line-height: 60upx;
        text-indent: 40upx;
        color: #09b900;
        font-weight: normal;
    }
    @keyframes rain {
        0% {
            transform: translateY(-6px);
        }
        50% {
            transform: translateY(6px);
        }
        100% {
            transform: translateY(-6px);
        }
    }
    @keyframes cloud-1 {
        0% {
            opacity: .8;
            transform: translate3d(200%, 0, 0);
        }
        50% {
            opacity: .6;
            transform: translate3d(800%, 0, 0) scale(1.3);
        }
        100% {
            opacity: .8;
            transform: translate3d(-120%, 0, 0);
        }
    }
    @keyframes cloud-2 {
        0% {
            opacity: .8;
            transform: translate3d(820%, 0, 0);
        }
        50% {
            opacity: .6;
            transform: translate3d(-120%, 0, 0);
        }
        100% {
            opacity: .8;
            transform: translate3d(1080%, 0, 0) scale(1.3);
        }
    }
    @keyframes cloud-3 {
        0% {
            opacity: .6;
            transform: translate3d(-120%, 0, 0) scale(1.3);
        }
        100% {
            opacity: .8;
            transform: translate3d(1000%, 0, 0);
        }
    }
    @keyframes move-1 {
        0% {
            height: 268upx;
        }
        10% {
            height: 280upx;
        }
        20% {
            height: 295upx;
        }
        40% {
            height: 275upx;
        }
        70% {
            height: 285upx;
        }
        100% {
            height: 264upx;
        }
    }
    .move-1 {
        animation: move-1 1s;
    }
    @keyframes move-2 {
        0% {
            height: 385upx;
        }
        10% {
            height: 390upx;
        }
        20% {
            height: 400upx;
        }
        40% {
            height: 380upx;
        }
        70% {
            height: 395upx;
        }
        100% {
            height: 380upx;
        }
    }
    .move-2 {
        animation: move-2 1s;
    }
    @keyframes move-3 {
        0% {
            height: 475upx;
        }
        10% {
            height: 490upx;
        }
        20% {
            height: 500upx;
        }
        40% {
            height: 470upx;
        }
        70% {
            height: 490upx;
        }
        100% {
            height: 460upx;
        }
    }
    .move-3 {
        animation: move-3 1s;
    }
    @keyframes water {
        0% {
            opacity: .5;
            transform: translate3d(0, 0, 0);
        }
        20% {
            opacity: 1;
            transform: translate3d(-150upx, -90upx, 0) scale(1.5);
        }
        30% {
            opacity: 1;
            transform: translate3d(-150upx, -90upx, 0) scale(1.5) rotate(-35deg);
        }
        80% {
            opacity: 1;
            transform: translate3d(-150upx, -90upx, 0) scale(1.5) rotate(-35deg);
        }
        100% {
            opacity: 0;
            transform: translate3d(-150upx, -90upx, 0) scale(1.5) rotate(0deg);
        }
    }
    .water {
        animation: water 4s ease-in-out forwards;
    }
    @keyframes pluss {
        0% {
            opacity: 0.8;
            top: -10upx;
        }
        80% {
            opacity: 1;
            top: -80upx;
        }
        100% {
            opacity: 0;
            top: -120upx;
        }
    }
    .pluss {
        animation: pluss 2s;
    }
</style>
static/workbench/task1.png

static/workbench/task2.png

static/workbench/task3.png

static/workbench/task4.png

static/workbench/task5.png
static/workbench/task6.png
store/actions.js
@@ -45,6 +45,7 @@
            success: (res) => {
                if (res.statusCode == 200) {
                    if(res.data.error_code == "400"){
                        uni.hideNavigationBarLoading();
                        uni.showToast({
                            title: '密码错误,请重试',
                            icon:'none',
store/state.js
@@ -5,11 +5,7 @@
    },
    logPath: '',
    piAPI: 'http://223.82.109.183:2082/api/',
    // piAPI: 'http://192.168.0.107:85', //唐
    // piAPI: '/api', //本地转发
    //piAPI: 'http://s16s652780.51mypc.cn/api/',
    //piAPI: 'http://192.168.0.113:83/',
    //piAPI: 'http://192.168.0.111:83/',
    //piAPI: 'http://192.168.0.110:83/',
    puserName: '',
    puserID: '',
    puserIphone: '',