马宇豪
2023-07-21 a94d46abe031d827c0e3bc49999cc02782ec09b8
Merge remote-tracking branch 'origin/master'
已修改13个文件
已添加5个文件
1028 ■■■■ 文件已修改
.hbuilderx/launch.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
App.vue 129 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/information.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/constant.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/index.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabBar/examine/examine.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabBar/information/information.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabBar/notice/detail.vue 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabBar/notice/notice.vue 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabBar/response/response.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabBar/utils/tabBar.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/send.png 补丁 | 查看 | 原始文档 | blame | 历史
static/send_selected.png 补丁 | 查看 | 原始文档 | blame | 历史
static/shu.jpg 补丁 | 查看 | 原始文档 | blame | 历史
store/index.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
unpackage/cache/certdata 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.hbuilderx/launch.json
@@ -2,7 +2,7 @@
    "version" : "1.0",
    "configurations" : [
        {
            "playground" : "standard",
            "playground" : "custom",
            "type" : "uni-app:app-android"
        },
        {
App.vue
@@ -1,23 +1,118 @@
<script>
var jpushModule = uni.requireNativePlugin("JG-JPush")
    export default {
        onLaunch: function() {
            console.warn('当前组件仅支持 uni_modules 目录结构 ,请升级 HBuilderX 到 3.1.0 版本以上!')
            console.log('App Launch')
            // uni.hideTabBar({});
            // uni.clearStorageSync();
            // uni.clearStorage();
        },
        onShow: function() {
            console.log('App Show')
            // uni.hideTabBar();
            // uni.clearStorageSync();
            // uni.clearStorage();
        },
        onHide: function() {
            // uni.clearStorageSync();
            console.log('App Hide')
            onLaunch: function() {
                console.log('App Launch',jpushModule)
                jpushModule.initJPushService();
                jpushModule.setLoggerEnable(true);
                jpushModule.addConnectEventListener(result=>{
                    let connectEnable = result.connectEnable
                    uni.$emit('connectStatusChange',connectEnable)
                });
                //消息回调——点击通知栏消息 跳转指定页面
                jpushModule.addNotificationListener(result=>{
                    if (result.notificationEventType == "notificationOpened") {
                        //判断是否登录
                        if (uni.getStorageSync('tk')) {
                            //工作通知——工作人员工作通知页
                            if (result.title.includes('工作通知')){
                                uni.switchTab({
                                    url: '/pages/tabBar/notice/notice',
                                })
                            //信息审核——领导审核页
                            }else if(result.title == '您有新的信息需要审批'){
                                uni.switchTab({
                                    url: '/pages/tabBar/examine/examine',
                                })
                            //审核结果——首页(后续加pc端信息发布页)
                            }else if(result.title.includes('信息审核')){
                                uni.switchTab({
                                    url: '/pages/tabBar/information/information',
                                })
                            }
                        }else {
                            console.log("未登录")
                            //未登录跳转首页
                            uni.navigateTo({
                                url: '/pages/index/index',
                                complete(res) {
                                    console.log(res);
                                }
                            })
                            uni.showToast({
                                icon: 'none',
                                title: '请先登录',
                                duration: 3000
                            })
                        }
                    }
                });
                jpushModule.addCustomMessageListener(result=>{
                    let type = result.type
                    let messageType = result.messageType
                    let content = result.content
                    uni.showToast({
                        icon: 'none',
                        title: JSON.stringify(result),
                        duration: 3000
                    })
                });
                jpushModule.addLocalNotificationListener(result=>{
                    let messageID = result.messageID
                    let title = result.title
                    let content = result.content
                    let extras = result.extras
                    uni.showToast({
                        icon: 'none',
                        title: JSON.stringify(result),
                        duration: 3000
                    })
                })
                // jpushModule.addGeofenceListener(result => {
                //     let code = result.code
                //     let type = result.type
                //     let geofenceId = result.geofenceId
                //     let userInfo = result.userInfo
                //     uni.showToast({
                //         icon: 'none',
                //         title: '触发地理围栏',
                //         duration: 3000
                //     })
                // })
        //         jpushModule.setIsAllowedInMessagePop(true)
        //         jpushModule.pullInMessage(result => {
        //             let code = result.code
        //             console.log(code)
        //         })
        //         jpushModule.addInMessageListener(result => {
        //             let eventType = result.eventType
        //             let messageType = result.messageType
        //             let content = result.content
        //             console.log('inMessageListener', eventType, messageType, content)
        //             uni.showToast({
        //                 icon: 'none',
        //                 title: JSON.stringify(result),
        //                 duration: 3000
        //             })
        //         })
            },
            onShow: function() {
                console.log('App Show')
            },
            onHide: function() {
                // jpushModule.initJPushService();
                console.log('App Hide')
            }
        }
    }
</script>
<style lang="scss">
api/information.js
对比新文件
@@ -0,0 +1,17 @@
import {service} from '../common/request.js';
export function getInfo(data) {
  return service({
        url: '/app/warninfo/waitForPublish/Page',
        method: 'POST',
        data
    })
}
export function publishInfo(data) {
  return service({
        url: '/app/warninfo/publishById',
        method: 'GET',
        data
    })
}
common/constant.js
@@ -1,8 +1,8 @@
    let VUE_APP_BASE_URL= null;
    if (process.env.NODE_ENV == 'development') {
        VUE_APP_BASE_URL = 'http://192.168.0.38:8086'
        // VUE_APP_BASE_URL = 'http://121.239.169.30:13001'
        // VUE_APP_BASE_URL = 'http://192.168.0.38:8086'
        VUE_APP_BASE_URL = 'http://121.239.169.30:13001'
    }else {
        VUE_APP_BASE_URL = 'http://121.239.169.30:13001'
    }
manifest.json
@@ -16,7 +16,9 @@
            "autoclose" : true,
            "delay" : 0
        },
        "modules" : {},
        "modules" : {
            "Push" : {}
        },
        /* 模块配置 */
        "distribute" : {
            /* 应用发布信息 */
@@ -45,7 +47,8 @@
            },
            /* ios打包配置 */
            "sdkConfigs" : {
                "ad" : {}
                "ad" : {},
                "push" : {}
            },
            "icons" : {
                "android" : {
@@ -79,6 +82,176 @@
                    }
                }
            }
        },
        "nativePlugins" : {
            "JG-JCore" : {
                "JPUSH_APPKEY_ANDROID" : "d6ee424771aad696af857325",
                "JPUSH_APPKEY_IOS" : "",
                "JPUSH_CHANNEL_ANDROID" : "developer-default",
                "JPUSH_CHANNEL_IOS" : "",
                "__plugin_info__" : {
                    "name" : "极光JCore官方SDK",
                    "description" : "极光JCore官方SDK HBuilder插件版本",
                    "platforms" : "Android,iOS",
                    "url" : "https://ext.dcloud.net.cn/plugin?id=4028",
                    "android_package_name" : "com.natural.calamities",
                    "ios_bundle_id" : "",
                    "isCloud" : true,
                    "bought" : 1,
                    "pid" : "4028",
                    "parameters" : {
                        "JPUSH_APPKEY_ANDROID" : {
                            "des" : "[Android]极光portal配置应用信息时分配的AppKey",
                            "key" : "d6ee424771aad696af857325",
                            "value" : ""
                        },
                        "JPUSH_APPKEY_IOS" : {
                            "des" : "[iOS]极光portal配置应用信息时分配的AppKey",
                            "key" : "JCore:APP_KEY",
                            "value" : ""
                        },
                        "JPUSH_CHANNEL_ANDROID" : {
                            "des" : "[Android]用于统计分发渠道,不需要可填默认值developer-default",
                            "key" : "JPUSH_CHANNEL",
                            "value" : ""
                        },
                        "JPUSH_CHANNEL_IOS" : {
                            "des" : "[iOS]用于统计分发渠道,不需要可填默认值developer-default",
                            "key" : "JCore:CHANNEL",
                            "value" : ""
                        }
                    }
                }
            },
            "JG-JPush" : {
                "JPUSH_ADVERTISINGID_IOS" : "",
                "JPUSH_DEFAULTINITJPUSH_IOS" : "",
                "JPUSH_GOOGLE_API_KEY" : "",
                "JPUSH_GOOGLE_APP_ID" : "",
                "JPUSH_GOOGLE_PROJECT_ID" : "",
                "JPUSH_GOOGLE_PROJECT_NUMBER" : "",
                "JPUSH_GOOGLE_STORAGE_BUCKET" : "",
                "JPUSH_HONOR_APPID" : "",
                "JPUSH_HUAWEI_APPID" : "",
                "JPUSH_ISPRODUCTION_IOS" : "",
                "JPUSH_MEIZU_APPID" : "",
                "JPUSH_MEIZU_APPKEY" : "",
                "JPUSH_OPPO_APPID" : "",
                "JPUSH_OPPO_APPKEY" : "",
                "JPUSH_OPPO_APPSECRET" : "",
                "JPUSH_VIVO_APPID" : "",
                "JPUSH_VIVO_APPKEY" : "",
                "JPUSH_XIAOMI_APPID" : "",
                "JPUSH_XIAOMI_APPKEY" : "",
                "__plugin_info__" : {
                    "name" : "极光JPush官方SDK",
                    "description" : "极光JPush官方SDK HBuilder插件版本",
                    "platforms" : "Android,iOS",
                    "url" : "https://ext.dcloud.net.cn/plugin?id=4035",
                    "android_package_name" : "com.natural.calamities",
                    "ios_bundle_id" : "",
                    "isCloud" : true,
                    "bought" : 1,
                    "pid" : "4035",
                    "parameters" : {
                        "JPUSH_ADVERTISINGID_IOS" : {
                            "des" : "[iOS]广告标识符(IDFA)如果不需要使用IDFA,可不填",
                            "key" : "JPush:ADVERTISINGID",
                            "value" : ""
                        },
                        "JPUSH_DEFAULTINITJPUSH_IOS" : {
                            "des" : "[iOS]是否默认初始化,是填true,不是填false或者不填",
                            "key" : "JPush:DEFAULTINITJPUSH",
                            "value" : ""
                        },
                        "JPUSH_GOOGLE_API_KEY" : {
                            "des" : "厂商google api_key,示例:asxa1232",
                            "key" : "google_api_key",
                            "value" : ""
                        },
                        "JPUSH_GOOGLE_APP_ID" : {
                            "des" : "厂商google mobilesdk_app_id,示例:12346578",
                            "key" : "google_app_id",
                            "value" : ""
                        },
                        "JPUSH_GOOGLE_PROJECT_ID" : {
                            "des" : "厂商google project_id ,示例:12346578",
                            "key" : "project_id",
                            "value" : ""
                        },
                        "JPUSH_GOOGLE_PROJECT_NUMBER" : {
                            "des" : "厂商google project_number,示例:12346578",
                            "key" : "gcm_defaultSenderId",
                            "value" : ""
                        },
                        "JPUSH_GOOGLE_STORAGE_BUCKET" : {
                            "des" : "厂商google storage_bucket,示例:12346578",
                            "key" : "google_storage_bucket",
                            "value" : ""
                        },
                        "JPUSH_HONOR_APPID" : {
                            "des" : "厂商HONOR-appId,示例:12346578",
                            "key" : "com.hihonor.push.app_id",
                            "value" : ""
                        },
                        "JPUSH_HUAWEI_APPID" : {
                            "des" : "厂商HUAWEI-appId,示例:appid=12346578",
                            "key" : "com.huawei.hms.client.appid",
                            "value" : ""
                        },
                        "JPUSH_ISPRODUCTION_IOS" : {
                            "des" : "[iOS]是否是生产环境,是填true,不是填false或者不填",
                            "key" : "JPush:ISPRODUCTION",
                            "value" : ""
                        },
                        "JPUSH_MEIZU_APPID" : {
                            "des" : "厂商MEIZU-appId,示例:MZ-12345678",
                            "key" : "MEIZU_APPID",
                            "value" : ""
                        },
                        "JPUSH_MEIZU_APPKEY" : {
                            "des" : "厂商MEIZU-appKey,示例:MZ-12345678",
                            "key" : "MEIZU_APPKEY",
                            "value" : ""
                        },
                        "JPUSH_OPPO_APPID" : {
                            "des" : "厂商OPPO-appId,示例:OP-12345678",
                            "key" : "OPPO_APPID",
                            "value" : ""
                        },
                        "JPUSH_OPPO_APPKEY" : {
                            "des" : "厂商OPPO-appkey,示例:OP-12345678",
                            "key" : "OPPO_APPKEY",
                            "value" : ""
                        },
                        "JPUSH_OPPO_APPSECRET" : {
                            "des" : "厂商OPPO-appSecret,示例:OP-12345678",
                            "key" : "OPPO_APPSECRET",
                            "value" : ""
                        },
                        "JPUSH_VIVO_APPID" : {
                            "des" : "厂商VIVO-appId,示例:12345678",
                            "key" : "com.vivo.push.app_id",
                            "value" : ""
                        },
                        "JPUSH_VIVO_APPKEY" : {
                            "des" : "厂商VIVO-appkey,示例:12345678",
                            "key" : "com.vivo.push.api_key",
                            "value" : ""
                        },
                        "JPUSH_XIAOMI_APPID" : {
                            "des" : "厂商XIAOMI-appId,示例:MI-12345678",
                            "key" : "XIAOMI_APPID",
                            "value" : ""
                        },
                        "JPUSH_XIAOMI_APPKEY" : {
                            "des" : "厂商XIAOMI-appKey,示例:MI-12345678",
                            "key" : "XIAOMI_APPKEY",
                            "value" : ""
                        }
                    }
                }
            }
        }
    },
    /* SDK配置 */
pages.json
@@ -59,6 +59,23 @@
            }
        },
        {
            "path" : "pages/tabBar/information/information",
            "style" :
            {
                "navigationStyle": "custom",
                "navigationBarTitleText": "",
                "enablePullDownRefresh": true,
                "app-plus": {
                    "scrollIndicator": "none",
                    "pullToRefresh": {
                        "support": true,
                        "color": "#000000",
                        "style": "circle"
                    }
                }
            }
        },
        {
            "path" : "pages/tabBar/examine/examine",
            "style" :                                                                                    
            {
@@ -110,27 +127,18 @@
        "list": [
            {
                "pagePath": "pages/tabBar/notice/notice"
                // "iconPath": "static/notice1.png",
                // "selectedIconPath": "static/notice1-selected.png",
                // "text": "工作通知"
            },
            {
                "pagePath": "pages/tabBar/response/response"
                // "iconPath": "static/mine1.png",
                // "selectedIconPath": "static/mine1-selected.png",
                // "text": "我的叫应"
            },
            {
                "pagePath": "pages/tabBar/information/information"
            },
            {
                "pagePath": "pages/tabBar/examine/examine"
                // "iconPath": "static/notice1.png",
                // "selectedIconPath": "static/notice1-selected.png",
                // "text": "通知审核"
            },
            {
                "pagePath": "pages/tabBar/count/count"
                // "iconPath": "static/mine1.png",
                // "selectedIconPath": "static/mine1-selected.png",
                // "text": "信息统计"
            }
        ]
pages/index/index.vue
@@ -6,16 +6,18 @@
        </view>
        <view>    
            <u-form :model="form" ref="uForm" class="form" >
                <u-form-item ><u-input color="#fff" v-model="form.name" placeholder="请输入用户名"  /></u-form-item>
                <u-form-item ><u-input color="#fff" v-model="form.pwd" type="password" placeholder="请输入密码"  /></u-form-item>
                <u-form-item style="width: 75%;"><u-input color="#fff" v-model="form.name" placeholder="请输入用户名"  /></u-form-item>
                <u-form-item style="margin-top: 10px;width: 75%;" ><u-input color="#fff" v-model="form.pwd" type="password" placeholder="请输入密码"  /></u-form-item>
                <!-- <view class="loginPsw">
                       <u-checkbox-group >
                            <u-checkbox disabled="true"></u-checkbox><text style="color: #fff;">自动登录</text>
                       </u-checkbox-group>
                        <text style="color: lightblue;">忘记密码</text>
                </view> -->
                <u-form-item ><u-button  type="primary" style="width: 100%;" @click="Login">登录</u-button></u-form-item>
                <view style="color: white;margin-left:25%;margin-top: 70%;">技术支持:中国科学院</view>
                <u-form-item style="margin-top: 10px;width: 75%;">
                    <u-button :loading="isLogining" type="primary" style="width: 100%;" @click="Login">登录</u-button>
                    </u-form-item>
                <view style="color: white;margin-top: 150px;">技术支持:中国科学院</view>
            </u-form>
        </view>
    </view>
@@ -24,29 +26,47 @@
<script>
    import {login} from '../../api/index.js';
    import store from '@/store/index.js'
    const jpushModule = uni.requireNativePlugin('JG-JPush')
    export default {
        data() {
            return {
                form: {
                    name: '',
                    pwd: ''
                    pwd: '',
                    registrationId: ''
                },
                type: ''
                type: '',
                //极光推送
                connectStatus: '未连接',
                registrationID: '未获得',
                isLogining: false
            }
        },
        onShow() {
            uni.clearStorageSync();
            uni.clearStorage();
        },
        onLoad() {
            this.connect()
        },
        methods: {
            Login(){
                this.isLogining = true;
                login(this.form).then(res => {
                    console.log("res",res)
                    if (res.code === 100) {
                        this.isLogining = false;
                         //登录成功后
                         //设置别名
                        jpushModule.setAlias({
                            'alias': this.phone,
                            'sequence': 1
                        })
                        uni.setStorageSync("tk", res.data.tk);
                        uni.setStorageSync("uid",res.data.uid);
                        uni.setStorageSync('user', res.data);
                        uni.setStorageSync('roleName', res.data.role.roleName);
                        console.log("登录--------",res.data.tk)
                        if(res.data.role.roleName == '工作人员'){
                            this.$store.commit('setRoleId', 'user_other');
                            uni.switchTab({
@@ -66,8 +86,36 @@
                        }
                    }
                }).catch(err=>{
                    this.form.name = '';
                    this.form.pwd = '';
                    this.isLogining = false;
                })
            },
            connect() {
                uni.$on('connectStatusChange', (connectStatus) => {
                    console.log('进入连接')
                    var connectStr = ''
                    if (connectStatus == true) {
                        connectStr = '已连接'
                        this.getRegistrationID()
                    } else {
                        connectStr = '未连接'
                    }
                    console.log('监听到了连接状态变化 --- ', connectStr)
                    this.connectStatus = connectStr
                })
            },
            //获取推送ID
            getRegistrationID() {
                jpushModule.getRegistrationID(result => {
                    let registerID = result.registerID
                    console.log('registerID',registerID)
                    this.registrationID = registerID
                    this.form.registrationId = registerID;
                    uni.setStorageSync('registrationID', registerID);
                    console.log("iddd",uni.getStorageSync('registrationID'))
                })
            }
        }
    }
</script>
@@ -76,7 +124,7 @@
.box{
    width: 100%;
    height: 100vh;
    background: url('../../static/bg.jpeg') no-repeat;
    background: url('../../static/shu.jpg') no-repeat;
    background-size: 100% 100%;
    background-attachment: fixed;/* 不设置的话页面滑动时,背景会不铺满*/
    display: flex;
@@ -102,9 +150,11 @@
    text-shadow:0 0 1px #000;
}
.form{
    width: 80%;
    margin: 100px auto 0px;
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-top: 25%;
}
.loginPsw{
    margin-bottom: 20px;
pages/tabBar/examine/examine.vue
@@ -13,8 +13,14 @@
        <view class="contentList">
            <view class="buttonGroup">
                <view style="display: flex;">
                    <view  class="buttonAll all"
                        :class="{ 'active': selectedSaleAnalysis === 'all'}"
                        @click="handleButtonClick({label: 'all',name: '全部'})">
                        全部
                    </view>
                    <view v-for="(button, index) in buttons" :key="index" class="buttonItem"
                        :class="{ 'active': selectedSaleAnalysis === button.label,
                         'all': button.label === 'all',
                         'red': button.label === 'red',
                         'orange':button.label === 'orange',
                         'yellow':button.label === 'yellow',
@@ -24,7 +30,7 @@
                    </view>
                </view>
                <view class="switchBtn">
                    <text style="margin-right: 7px;">是否紧临</text>
                    <text style="margin-right: 7px;">仅紧临</text>
                    <u-switch v-model="checked"  size="20" @change="clickSwitch"></u-switch>
                </view>
            </view>
@@ -39,7 +45,7 @@
                        <view class="content" @click="toDetail(item)">
                            <text>[{{item.colorContent}}]</text>
                            <text>{{item.title}},{{item.content}}</text>
                            <view  style="float: right; width: 80px;margin-top: 3px;">
                            <view  style="float: right; width: 80px;margin-top: -5px;">
                                <u-button v-if="item.buttonContent == '已审核通过'" size="mini" class="buttonCo" style="background-color:rgb(17, 204, 33);color: white">
                                    {{item.buttonContent}}
                                </u-button>
@@ -78,35 +84,36 @@
            return {
                data: {
                    pageIndex: 1,
                    pageSize: 1000,
                    pageSize: 10,
                    searchParams: {
                        emergType: 1,//1-紧急;2-常规
                        warningLevel: 1,//1-红色预警;2-橙色预警;3-黄色预警;4-蓝色预警
                        reviewStatus: 0//1:未审核,2:已审核,3:审核已驳回
                        emergType: null,//1-紧急;2-常规
                        warningLevel: null,//1-红色预警;2-橙色预警;3-黄色预警;4-蓝色预警
                        reviewStatus: null//1:未审核,2:已审核,3:审核已驳回
                    }
                },
                page: 'pages/tabBar/examine/examine',
                checked: true,
                checked: false,
                isReadOnly: false,
                statusBarHeight: 0,
                buttons: [{
                    label: 'red',
                    name: '红'
                },
                {
                    label: 'orange',
                    name: '橙'
                },
                {
                    label: 'yellow',
                    name: '黄'
                },
                {
                    label: 'blue',
                    name: '蓝'
                },
                buttons: [
                    {
                        label: 'red',
                        name: '红'
                    },
                    {
                        label: 'orange',
                        name: '橙'
                    },
                    {
                        label: 'yellow',
                        name: '黄'
                    },
                    {
                        label: 'blue',
                        name: '蓝'
                    },
                ],
                selectedSaleAnalysis: 'red',
                selectedSaleAnalysis: 'all',
                examineList: [],
            }
        },
@@ -121,8 +128,8 @@
        methods: {
            getExanineList() {
                this.data.searchParams.reviewStatus = this.isReadOnly ? 1 : null;
                this.data.searchParams.emergType = this.checked ? 1 : 2;
                this.data.searchParams.warningLevel = this.selectedSaleAnalysis =='red' ? 1 : this.selectedSaleAnalysis =='orange' ? 2: this.selectedSaleAnalysis =='yellow'? 3 : 4;
                this.data.searchParams.emergType = this.checked ? 1 : null;
                this.data.searchParams.warningLevel = this.selectedSaleAnalysis == 'all' ? null : this.selectedSaleAnalysis =='red' ? 1 : this.selectedSaleAnalysis =='orange' ? 2: this.selectedSaleAnalysis =='yellow'? 3 : 4;
                getExamine(this.data).then(res => {
                    if(res.code == 100) {
                        this.examineList = res.data ? res.data : [];
@@ -131,10 +138,10 @@
                        if(this.examineList.length > 0) {
                            
                            this.examineList.forEach((item, index) => {
                                this.examineList[index].colorContent = this.data.searchParams.warningLevel == 1 ? '红色预警': this.data.searchParams.warningLevel == 2 ? '橙色预警': this.data.searchParams.warningLevel == 3 ? '黄色预警':'蓝色预警';
                                this.examineList[index].colorContent = item.warningLevel == 1 ? '红色预警': item.warningLevel == 2 ? '橙色预警': item.warningLevel == 3 ? '黄色预警':'蓝色预警';
                                this.examineList[index].buttonContent = item.reviewStatus == 1 ? '待审核': item.reviewStatus == 2 ? '已审核通过' : '已驳回';
                                this.examineList[index].role = 'leader';
                                this.examineList[index].warningLevel = this.data.searchParams.warningLevel;
                                this.examineList[index].warningLevel = item.warningLevel;
                            });
                        }
                    }
@@ -147,11 +154,6 @@
            chooseRead(e) {
                this.isReadOnly = e;
                this.getExanineList();
                // if(e) {
                //     this.examineList = this.examineList.filter(item => item.reviewStatus == 1);
                // }else {
                //     this.getExanineList();
                // }
            },
            toDetail(item) {
                console.log("item",item)
@@ -218,6 +220,19 @@
    align-items: center;
    justify-content: space-between;
}
.buttonAll{
    margin-left:5px;
    color: white;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    width: 35px;
    height: 30px;
    border-radius: 5px;
    font-size: 12px;
    font-weight: 700;
}
.buttonItem{
    margin-left:5px;
    color: white;
@@ -230,7 +245,10 @@
    border-radius: 5px;
}
.active {
    border: 1px solid gray;
    border: 1.5px solid #8d8d8d;
}
.all {
    background-color: rgb(17,204,33);
}
.red {
    background-color: red;
pages/tabBar/information/information.vue
对比新文件
@@ -0,0 +1,257 @@
<template>
    <view class="box">
        <!-- 自定义导航栏 -->
        <view class="navBarBox fix">
            <!-- 状态栏占位 -->
            <view class="statusBar" :style="{ paddingTop: statusBarHeight + 'px' }"></view>
            <!-- 真正的导航栏内容 -->
            <view class="navBar" >
                <view class="barText">信息发布</view>
            </view>
        </view>
        <!-- 页面内容 -->
        <view class="contentList">
            <view class="examineList">
                <view class="listHead">
                    <u-checkbox-group >
                        <u-checkbox v-model="isReadOnly" :checked="isReadOnly" @change="chooseRead"></u-checkbox>只显示审核通过
                    </u-checkbox-group>
                </view>
                <view class="listContent" v-if="informationList.length > 0">
                    <view v-for="(item, index) in informationList" :key="index" class="itemContent">
                        <view class="content" @click="toDetail(item)">
                            <text>[{{item.colorContent}}]</text>
                            <text>{{item.title}},{{item.content}}</text>
                            <view class="buttonContent">
                                <u-button v-if="item.buttonContent == '审核通过'" size="mini" class="buttonCo" style="background-color:rgb(17, 204, 33);color: white">
                                    {{item.buttonContent}}
                                </u-button>
                                <u-button v-else-if="item.buttonContent == '已驳回'" size="mini" class="buttonCo" style="background-color:rgb(153, 148, 143);color: white">
                                    {{item.buttonContent}}
                                </u-button>
                                <u-button v-else type="error" size="mini" class="buttonCo">
                                    {{item.buttonContent}}
                                </u-button>
                            </view>
                        </view>
                    </view>
                </view>
                <view v-else>
                    <u-empty
                        mode="data"
                        icon="http://cdn.uviewui.com/uview/empty/data.png"
                        margin-top="50%">
                    </u-empty>
                </view>
            </view>
        </view>
        <tabBar :currentPagePath="page"></tabBar>
    </view>
</template>
<script>
    import tabBar from '../tabBarIndex.vue'
    import { getInfo } from '../../../api/information.js'
    export default {
        components:{
            tabBar
        },
        data() {
            return {
                data: {
                    pageIndex: 1,
                    pageSize: 10000000,
                    searchParams: {
                        reviewStatus: null//2:已审核,null:全部
                    }
                },
                checked: false,
                isReadOnly: false,
                statusBarHeight: 0,
                informationList: [],
                page:'pages/tabBar/information/information'
            }
        },
        onLoad() {
            //获取手机状态栏高度
            this.statusBarHeight = uni.getSystemInfoSync()['statusBarHeight'];
            uni.hideTabBar();
        },
        onShow() {
            this.getInformationList();
        },
        methods: {
            getInformationList() {
                this.data.searchParams.reviewStatus = this.isReadOnly ? 2 : null;
                getInfo(this.data).then(res => {
                    if (res.code == 100){
                        this.informationList = res.data ? res.data : [];
                        if(this.informationList.length > 0) {
                            this.informationList.forEach((item, index) => {
                                this.informationList[index].colorContent = item.warningLevel == 1 ? '红色预警': item.warningLevel == 2 ? '橙色预警': item.warningLevel == 3 ? '黄色预警':'蓝色预警';
                                this.informationList[index].buttonContent = item.reviewStatus == 1 ? '待审核': item.reviewStatus == 2 ? '审核通过' : '已驳回';
                                this.informationList[index].role = 'infoPeople';
                                this.informationList[index].warningLevel = item.warningLevel;
                            })
                        }
                    }
                })
            },
            chooseRead(e) {
                this.isReadOnly = e;
                this.getInformationList();
            },
            toDetail(item) {
                console.log("item",item)
                uni.navigateTo({
                  url: `/pages/tabBar/notice/detail?data=` + encodeURIComponent(JSON.stringify(item))
                })
            },
            //下拉刷新
            onPullDownRefresh() {
                console.log('refresh');
                setTimeout(() => {
                    uni.stopPullDownRefresh();
                    this.getInformationList();
                }, 1000);
            },
            clickSwitch(e) {
                this.getInformationList();
            }
        }
    }
</script>
<style>
.box {
    display: flex;
    flex-direction: column;
    width: 100%;
    height: 100%;
}
.fix{
    position: sticky;
    top: 0;
    left: 0;
    right: 0;
    width: 100%;
    z-index: 1;
}
.navBarBox .navBar {
        background-color:lightgrey;
        height: 40px;
        display: flex;
        flex-direction: row;
        justify-content: center;
        align-items: center;
}
.barText{
    text-align: center;
    width: 85%;
    font-size: 16px;
    /* text-align: center; */
    font-weight: 600;
}
.statusBar{
    background-color:lightgrey;
}
.contentList{
    display: flex;
    flex-direction: column;
}
.buttonGroup{
    margin: 18px 12px;
    display: flex;
    align-items: center;
    justify-content: space-between;
}
.buttonItem{
    margin-left:5px;
    color: white;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    width: 47px;
    height: 30px;
    border-radius: 5px;
}
.buttonAll{
    margin-left:5px;
    color: white;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    width: 35px;
    height: 30px;
    border-radius: 5px;
    font-size: 12px;
    font-weight: 700;
}
.all {
    background-color: rgb(17,204,33);
}
.active {
    border: 1.5px solid #8d8d8d;
}
.red {
    background-color: red;
}
.orange {
    background-color: rgb(251, 158, 13);
}
.yellow {
    background-color: rgb(255, 223, 37);
}
.blue {
    background-color: rgb(2, 167, 240);
}
.switchBtn{
    display: flex;
    align-items: center;
}
.listHead{
    display: flex;
    align-items: center;
    /* background-color:lightgrey; */
    height: 25px;
    padding: 10px 10px;
}
.listContent{
    display: flex;
    flex-direction: column;
    padding: 0 10px;
}
.itemContent{
    font-size: 16px;
    color: gray;
    margin-top: 10px;
    border-bottom: 1px solid lightgrey;
}
.content{
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
}
.buttonCo{
    margin-top: 5px;
    margin-bottom: 10px;
}
.buttonContent{
    float: right;
    width: 80px;
    margin-top: -5px;
}
/* .divider{
    height: 1px;
    background-color: gray;
    margin-left: 10px;
    margin-right: 10px;
} */
</style>
pages/tabBar/notice/detail.vue
@@ -31,23 +31,43 @@
            <text class="textTop"><b>短信内容:</b><i style="background-color: rgb(240, 248, 255);">{{detailData.content}}发布单位:{{detailData.publishingUnit}}</i></text>
            <view style="display: flex;">
                <text class="textTop" style="width: 76px;" ><b>附件内容:</b></text>
                <view class="attache">
                <view class="attache" v-if="isAllImg == 'no'">
                    <view v-for="(item, index) in detailData.attachments" :key="index" >
                            <view style="display: flex;margin-top: 10px;" @click="openFile(item)">
                            <view  style="display: flex;margin-top: 10px;" v-if="item.suffix == 'jpg'|| item.suffix =='jpeg' || item.suffix =='png'">
                                <image  @click="previewSqs(item)" :src="item.attachment" style="width: 100rpx; height: 100rpx;margin-left: 5rpx;border: 3px solid #ccc;margin-right: 3px;"></image>
                            </view>
                            <view style="display: flex;margin-top: 10px;" @click="openFile(item)" v-else>
                                <u-icon name="attach" color="#2979ff" size="20"></u-icon> {{item.attachementName}}
                            </view>
                    </view>
                </view>
                <view class="attache_img" v-else>
                    <view v-for="(item, index) in detailData.attachments" :key="index" >
                            <view  style="display: flex;margin-top: 10px;" v-if="item.suffix == 'jpg'|| item.suffix =='jpeg' || item.suffix =='png'">
                                <image  @click="previewSqs(item,index)" :src="item.attachment" style="width: 100rpx; height: 100rpx;margin-left: 5rpx;border: 3px solid #ccc;margin-right: 3px;"></image>
                            </view>
                            <view style="display: flex;margin-top: 10px;" @click="openFile(item)" v-else>
                                <u-icon name="attach" color="#2979ff" size="20"></u-icon> {{item.attachementName}}
                            </view>
                    </view>
                </view>
            </view>
            <text class="textTop" v-if="detailData.role == 'leader'"><b>信息提交人:</b>{{detailData.infoSubmitter}}</text>
            <text class="textTop" v-if="detailData.role == 'leader'"><b>信息提交人:</b>{{detailData.infoSubmitterRealName}}</text>
            <view class="textTop" v-if="detailData.role == 'leader'">
                <text ><b>审核状态:</b></text>
                <text v-if="detailData.reviewStatus == 1" class="responseStatus"
                    style='color: red;'>待审核</text>
                <text v-else-if="detailData.reviewStatus == 2" class="responseStatus"
                    style='color: rgb(17, 204, 33);'>已审核通过</text>
                    style='color: rgb(17, 204, 33);'>审核通过</text>
                <text v-else class="responseStatus"
                    style='color: rgb(153, 148, 143);'>已驳回</text>
            </view>
            <view class="textTop" v-else-if="detailData.role == 'infoPeople'">
                <text ><b>审核状态:</b></text>
                <text v-if="detailData.reviewStatus == 1" class="responseStatus"
                    style='color: red;'>待审核</text>
                <text v-else-if="detailData.reviewStatus == 2" class="responseStatus"
                    style='color: rgb(17, 204, 33);'>审核通过</text>
                <text v-else class="responseStatus"
                    style='color: rgb(153, 148, 143);'>已驳回</text>
            </view>
@@ -70,6 +90,12 @@
                    @click="reject"
                >审核驳回</u-button>
            </view>
            <view v-if="detailData.role == 'infoPeople' && detailData.reviewStatus == 2" class="btn">
                <u-button
                    style="background-color:rgb(6, 202, 23);color: white;width: 180px;"
                    @click="infoSend"
                >确认发布</u-button>
            </view>
        </view>
    </view>
</template>
@@ -77,12 +103,14 @@
<script>
    import VUE_APP_BASE_URL from '../../../common/constant.js'
    import { submit } from '../../../api/examine.js'
    import { publishInfo } from '../../../api/information.js'
    export default {
        data() {
            return {
                // 状态栏高度
                statusBarHeight: 0,
                key: 1,
                isAllImg: '',
                detailData: {
                    id: null,
                    warnInfoId: null,
@@ -105,17 +133,32 @@
            this.statusBarHeight = uni.getSystemInfoSync()['statusBarHeight'];
            let test = options.data && JSON.parse(decodeURIComponent(options.data));
            this.detailData = test;
            console.log("wwwwwwww",this.detailData)
            if(this.detailData.role == 'leader') {
            if(this.detailData.role == 'leader' || this.detailData.role == 'infoPeople' ) {
                this.detailData.attachments = this.detailData.attachment;
                if (this.detailData.attachments){
                    this.detailData.attachments.forEach((item,index) => {
                        item.attachementName = this.detailData.attachment[index].attachmentName;
                    })
                }
            }
            if (this.detailData.attachments){
                this.detailData.attachments.forEach((item,index) => {
                    item.suffix = item.attachementName.substring(item.attachementName.lastIndexOf(".") + 1);
                    if(item.suffix == 'jpg'|| item.suffix =='jpeg' || item.suffix =='png' ){
                        if(this.detailData.role == 'leader' || this.detailData.role == 'infoPeople' ){
                          item.attachment = VUE_APP_BASE_URL + item.attachment;
                        }else {
                          item.attachment = VUE_APP_BASE_URL + item.attachement;
                        }
                    }else {
                        this.isAllImg = 'no';
                    }
                })
            }
            console.log("this.isAllImg",this.isAllImg)
            console.log("detailData",this.detailData)
            this.detailData.disaster = test.disasterType == 1 ? '地震': test.disasterType == 2 ? '洪涝' : test.disasterType == 3 ? '气象' : test.disasterType == 4 ? '泥石流': test.disasterType == 5 ? '水旱': '森林草原火灾';
        },
        methods: {
@@ -145,49 +188,70 @@
                    }
                })
            },
      openFile(item) {
        let fileUrl = '';
        console.log("iiii",item)
        if(this.detailData.role == 'leader'){
          fileUrl = VUE_APP_BASE_URL + item.attachment;
        }else {
          fileUrl = VUE_APP_BASE_URL + item.attachement;
        }
        console.log("urlllllllllllll",fileUrl)
        uni.downloadFile({
          url: fileUrl,
          header: {
            // 'tk':uni.getStorageSync('tk'),
            // 'uid': uni.getStorageSync('uid'),
          },
          success:function(res){
            console.log("下载res",res);
            var filePath = res.tempFilePath;
            const sidx = filePath.lastIndexOf('(');
            const eidx = filePath.lastIndexOf(')');
            //  用于处理文档打开问题(ps:第一次打开 第二次无法打开问题)
            if (sidx > -1 && eidx > -1) {
              const restr = filePath.substr(sidx, eidx - sidx + 1);
              filePath = filePath.replace(restr, '');
            }
            // plus.runtime.openFile(filePath)
            uni.openDocument({
              filePath: filePath,
              success:function(){
                console.log('成功')
              },
              fail:function(){
                uni.showToast({
                  icon: 'none',
                  title: '暂不支持此类型',
                  duration: 2000
                })
              }
            })
          }
        })
      }
            //信息发布
            infoSend() {
                publishInfo({id: this.detailData.id}).then(res => {
                    if(res.code==100) {
                        this.goBack();
                    }
                })
                console.log("信息发布")
            },
            //预览图片
            previewSqs(item,index) {
                let imgs = [];
                for (let i = 0; i < this.detailData.attachments.length; i++) {
                    imgs.push(this.detailData.attachments[i].attachment)
                }
                console.log("预览",imgs)
                uni.previewImage({
                    urls: imgs,
                    current: index,
                    indicator: 'number',
                    loop: true
                })
            },
            //预览文件
            openFile(item) {
                let fileUrl = '';
                console.log("iiii",item)
                if(this.detailData.role == 'leader' || this.detailData.role == 'infoPeople' ){
                  fileUrl = VUE_APP_BASE_URL + item.attachment;
                }else {
                  fileUrl = VUE_APP_BASE_URL + item.attachement;
                }
                console.log("urlllllllll",fileUrl)
                uni.downloadFile({
                    url: fileUrl,
                    header: {},
                    success:function(res){
                        console.log("下载res",res);
                        var filePath = res.tempFilePath;
                        const sidx = filePath.lastIndexOf('(');
                        const eidx = filePath.lastIndexOf(')');
                        //  用于处理文档打开问题(ps:第一次打开 第二次无法打开问题)
                        if (sidx > -1 && eidx > -1) {
                            const restr = filePath.substr(sidx, eidx - sidx + 1);
                            filePath = filePath.replace(restr, '');
                        }
                        // plus.runtime.openFile(filePath)
                        uni.openDocument({
                          filePath: filePath,
                          success:function(){
                            console.log('成功')
                        },
                      fail:function(){
                        uni.showToast({
                              icon: 'none',
                              title: '暂不支持此类型',
                              duration: 2000
                            })
                        }
                    })
                }
            })
          }
        }
    }
</script>
@@ -228,6 +292,11 @@
    display: flex;
    flex-direction: column;
}
.attache_img {
    flex: 1;
    display: flex;
    flex-wrap: wrap;
}
.responseStatus{
    padding:5px;
    color:#2a2a2a;
@@ -246,4 +315,5 @@
    justify-content: space-around;
    width: 100%;
}
</style>
pages/tabBar/notice/notice.vue
@@ -7,6 +7,7 @@
            <!-- 真正的导航栏内容 -->
            <view class="navBar" >
                <view class="barText">{{user.name}}收到的工作通知</view>
                <!-- <view class="barText">{{registerID}}</view> -->
                <!-- <view style="flex: 1;" @click="loginOut">退出</view> -->
            </view>
        </view>
@@ -14,6 +15,11 @@
        <view style="display: flex;flex-direction: column;">
            <view class="buttonGroup">
                <view style="display: flex;">
                    <view  class="buttonAll all"
                        :class="{ 'active': selectedSaleAnalysis === 'all'}"
                        @click="handleButtonClick({label: 'all',name: '全部'})">
                        全部
                    </view>
                    <view v-for="(button, index) in buttons" :key="index" class="buttonItem"
                        :class="{ 'active': selectedSaleAnalysis === button.label,
                         'red': button.label === 'red',
@@ -25,7 +31,7 @@
                    </view>
                </view>
                <view class="switchBtn">
                    <text style="margin-right: 7px;">是否紧临</text>
                    <text style="margin-right: 7px;">仅紧临</text>
                    <u-switch v-model="checked" size="20" @change="clickSwitch"></u-switch>
                </view>
            </view>
@@ -45,7 +51,7 @@
                                    <u-button @click="toDetail(item)"v-if="item.buttonContent == '已叫应'" size="mini" style="margin-bottom: 10px;background-color:rgb(17, 204, 33);color: white;">
                                        {{item.buttonContent}}
                                    </u-button>
                                    <u-button v-else-if="item.buttonContent == '未叫应'" type="error" size="mini" style="margin-bottom: 10px;" @click="openDialog(item)">
                                    <u-button v-else-if="item.buttonContent == '待叫应'" type="error" size="mini" style="margin-bottom: 10px;" @click="openDialog(item)">
                                        {{item.buttonContent}}
                                    </u-button>
                                    <u-button @click="toDetail(item)" v-else type="error" size="mini" style="margin-bottom: 10px;">
@@ -100,15 +106,15 @@
                tabBarLists: [],
                // 状态栏高度
                statusBarHeight: 0,
                checked: true,
                checked: false,
                isReadOnly: false,
                showDialog: false,
                data: {
                    pageIndex: 1,
                    pageSize: 1000,
                    pageSize: 10000000,
                    searchParams: {
                        emergType: 1,//1-紧急;2-常规
                        warningLevel: 1,//1-红色预警;2-橙色预警;3-黄色预警;4-蓝色预警
                        emergType: null,//1-紧急;2-常规
                        warningLevel: null,//1-红色预警;2-橙色预警;3-黄色预警;4-蓝色预警
                        readStatus: null//0-未读,1-已读
                    }
                },
@@ -129,21 +135,22 @@
                    name: '蓝'
                },
                ],
                selectedSaleAnalysis: 'red',
                selectedSaleAnalysis: 'all',
                noticeListCopy: [],
                noticeListCopyRead:[],
                noticeList: [],
                user: {
                    name: ''
                },
                page: 'pages/tabBar/notice/notice'
                page: 'pages/tabBar/notice/notice',
                registerID: ''
            }
        },
        onShow () {
            this.tabBarLists = uni.getStorageSync('tabBarList');
            this.user.name = uni.getStorageSync('user').realName + uni.getStorageSync('user').name;
            // this.selectedSaleAnalysis = 'red',
            this.user.name = uni.getStorageSync('user').realName;
            this.getNoticeList();
            // this.registerID = uni.getStorageSync('registrationID');
            // this.page = this.$route.meta.pagePath;
        },
        onLoad() {
@@ -154,11 +161,11 @@
        },
        methods: {
            getNoticeList() {
                this.data.searchParams.readStatus = this.isReadOnly ? 0 : null;
                this.data.searchParams.emergType = this.checked ? 1 : 2;
                this.data.searchParams.warningLevel = this.selectedSaleAnalysis =='red' ? 1 : this.selectedSaleAnalysis =='orange' ? 2: this.selectedSaleAnalysis =='yellow'? 3 : 4;
                this.data.searchParams.readStatus = this.isReadOnly ? 0 : null;
                this.data.searchParams.emergType = this.checked ? 1 : null ;
                this.data.searchParams.warningLevel =  this.selectedSaleAnalysis =='all' ? null : this.selectedSaleAnalysis =='red' ? 1 : this.selectedSaleAnalysis =='orange' ? 2: this.selectedSaleAnalysis =='yellow'? 3 : 4;
                getNotice(this.data).then(res => {
                    console.log("res",res);
                    console.log("dddddr",res);
                    if (res.code == 100) {
                        this.noticeList = res.data ? res.data : [];
                        this.noticeListCopy = this.noticeList;
@@ -285,8 +292,24 @@
    height: 30px;
    border-radius: 5px;
}
.buttonAll{
    margin-left:5px;
    color: white;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    width: 35px;
    height: 30px;
    border-radius: 5px;
    font-size: 12px;
    font-weight: 700;
}
.all {
    background-color: rgb(17,204,33);
}
.active {
    border: 1px solid gray;
    border: 1.5px solid #8d8d8d;
}
.red {
    background-color: red;
pages/tabBar/response/response.vue
@@ -81,6 +81,7 @@
            toDetail(item) {
                console.log("de",item)
                getDetail({id: item.id}).then(res => {
          console.log("response",res)
                    if(res.code == 100) {
                        uni.navigateTo({
                          url: `/pages/tabBar/notice/detail?data=` + encodeURIComponent(JSON.stringify(res.data))
pages/tabBar/utils/tabBar.js
@@ -25,6 +25,12 @@
        "iconPath": "/static/mine1.png",
        "selectedIconPath": "/static/mine1-selected.png",
        "text": "我的叫应"
    },
    {
        "pagePath": "pages/tabBar/information/information",
        "iconPath": "/static/send.png",
        "selectedIconPath": "/static/send_selected.png",
        "text": "信息发布"
    }
]
static/send.png
static/send_selected.png
static/shu.jpg
store/index.js
@@ -1,18 +1,4 @@
// import Vue from 'vue'
// import Vuex from 'vuex'
// import tabBar from './modules/tabBar.js'
// import getters from './getters.js'
// Vue.use(Vuex)
// const store = new Vuex.Store({
//     modules: {
//         tabBar
//     },
//     getters
// })
// export default store
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
unpackage/cache/certdata
@@ -1,3 +1,3 @@
andrCertfile=D:/HBuilderX.3.8.4.20230531/HBuilderX/plugins/app-safe-pack/Test.keystore
andrCertAlias=android
andrCertfile=C:/Users/Administrator/Desktop/sznmyjs.keystore
andrCertAlias=sznmyjs
andrCertPass=ep/Tdjka4Y7WYqDB6/S7dw==