王恒
2025-08-06 c62f4961f9d86460a5d483d7b31c05f98b113290
'更换域名小程序发布'
13个文件已修改
4015 ■■■■ 已修改文件
common/config.js 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/http.interceptor.js 182 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json 200 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/companyLogin/companyLogin.vue 570 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/index.vue 538 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/dataLook/dataLook.vue 658 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/policyApply/policyApply.vue 886 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/scodePage/scodePage.vue 308 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/translate/translate.vue 482 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/head.png 补丁 | 查看 | 原始文档 | blame | 历史
static/i04.png 补丁 | 查看 | 原始文档 | blame | 历史
yarn.lock 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/config.js
@@ -1,40 +1,39 @@
const test = {
    // authCallBackUrl: 'http://mallbanktest.hnnx.com/mallBank/payOut/getAuthCode.do?authCallBackUrl=',
    hasHead: true,
    authCallBackUrl: 'https://wxbank.hnnx.com/mer/payOut/getAuthCode.do?authCallBackUrl=',
    webURL: 'https://jmy.jinmingyuan.com/ecosphere-user',
    serverTempl:"http://172.16.60.172:8086",
    socketTempl:"wss://yqzx.jinmingyuan.com/wsPerCode",
    h5Temp:"https://yqzx.jinmingyuan.com/ecosphere-h5",
    serverUrl: 'http://172.16.60.172:8086',
    h5Url: 'http://172.16.60.172:8086/service-merchant',
    ftpUrl: 'https://yqzx.jinmingyuan.com/file',
    // ftpUrl: 'https://echftp.jinmingyuan.com',
    baseUrl: 'http://172.16.60.172:8086',
    wx_appid: 'wxad8cc511da676bd4',
    ali_appid: '2021003199690698'
  hasHead: true,
  authCallBackUrl: 'https://wxbank.hnnx.com/mer/payOut/getAuthCode.do?authCallBackUrl=',
  webURL: 'https://jmy.jinmingyuan.com/ecosphere-user',
  serverTempl: "http://172.16.60.20:8086",
  socketTempl: "wss://yqzx.jinmingyuan.com/wsPerCode",
  h5Temp: "https://yqzx.jinmingyuan.com/ecosphere-h5",
  serverUrl: 'http://172.16.60.20:8086',
  h5Url: 'http://172.16.60.172:8086/service-merchant',
  ftpUrl: 'https://yqzx.jinmingyuan.com/file',
  // ftpUrl: 'https://echftp.jinmingyuan.com',
  baseUrl: 'http://172.16.60.20:8086',
  wx_appid: 'wxad8cc511da676bd4',
  ali_appid: '2021003199690698'
}
const prod = {
    authCallBackUrl: 'https://wxbank.hnnx.com/mer/payOut/getAuthCode.do?authCallBackUrl=',
    webURL: 'https://jmy.jinmingyuan.com/ecosphere-user',
    serverTempl:"https://jmy.jinmingyuan.com",
    socketTempl:"wss://yqzx.jinmingyuan.com/wsPerCode",
    h5Temp:"https://jmy.jinmingyuan.com/ecosphere-h5",
    serverUrl: 'https://jmy.jinmingyuan.com/sqys-prod-api',
    h5Url: 'https://jmy.jinmingyuan.com/service-merchant',
    ftpUrl: 'https://jmy.jinmingyuan.com/file',
    // ftpUrl: 'https://echftp.jinmingyuan.com',
    baseUrl: 'https://jmy.jinmingyuan.com/sqys-prod-api',
    wx_appid: 'wxad8cc511da676bd4',
    ali_appid: '2021003199690698'
  authCallBackUrl: 'https://wxbank.hnnx.com/mer/payOut/getAuthCode.do?authCallBackUrl=',
  webURL: 'https://jmy.jinmingyuan.com/ecosphere-user',
  serverTempl: "https://jmy.jinmingyuan.com",
  socketTempl: "wss://yqzx.jinmingyuan.com/wsPerCode",
  h5Temp: "https://jmy.jinmingyuan.com/ecosphere-h5",
  serverUrl: 'https://jmy.jinmingyuan.com/smrq-api',
  h5Url: 'https://jmy.jinmingyuan.com/service-merchant',
  ftpUrl: 'https://jmy.jinmingyuan.com/file',
  // ftpUrl: 'https://echftp.jinmingyuan.com',
  baseUrl: 'https://jmy.jinmingyuan.com/smrq-api',
  wx_appid: 'wxad8cc511da676bd4',
  ali_appid: '2021003199690698'
}
module.exports = {
    kefuTel: '15824668510',
    config: prod,
    ACCESSTOKEN: "Authorization",
    /* 是否打印请求日志 */
    DEBUG: false,
}
  kefuTel: '15824668510',
  config: prod,
  ACCESSTOKEN: "Authorization",
  /* 是否打印请求日志 */
  DEBUG: false,
}
common/http.interceptor.js
@@ -1,96 +1,96 @@
import {
    ACCESSTOKEN,
    config,
    DEBUG
  ACCESSTOKEN,
  config,
  DEBUG
} from '@/common/config.js'
import util from '@/common/util.js'
function getToken() {
    let token = uni.getStorageSync("sessionToken")
    return util.isBlank(token) ? '' : token
  }
module.exports  = (vm) => {
    const url = config.serverUrl
    uni.$u.http.setConfig((config) => {
        config.baseURL = url
        config.header = {
            'Accept': 'application/json, text/plain, */*',
            // 'Content-Type': 'application/x-www-form-urlencoded',
        }
        return config
    });
    // 请求拦截,配置Token等参数
    uni.$u.http.interceptors.request.use((config) => {
        // 引用token
        const TOKEN = getToken() || null;
        if (TOKEN) {
            config.header[ACCESSTOKEN] = TOKEN;
        } else {
            delete config.header[ACCESSTOKEN]
        }
        if (config.custom.loading) {
             uni.showLoading({
                title: '加载中',
                mask: true
             })
        }
        DEBUG && console.log('请求参数', config);
        return config;
    }, config => { // 可使用async await 做异步操作
        return Promise.reject(config)
    })
    // 响应拦截,判断状态码是否通过
    uni.$u.http.interceptors.response.use((res) => {
        uni.hideLoading()
        DEBUG && console.log('返回结果', res);
        if(res.statusCode!=200){
            vm.$u.toast(res.data?.msg || "请求异常!"); //错误提示信息
            return false;
        }
        if (res.data.code == 200 || !res.data.code) {
            return res
        } else if (res.data.code == 10002) {
            return res
        } else if (res.data.code == 401) {
            const TOKEN = uni.getStorageSync("sessionToken")
            if (TOKEN) {
                // vm.$u.vuex('userInfo', null)
                // vm.$u.vuex('token', null)
                // uni.removeStorageSync("sessionToken")
                uni.clearStorageSync() // 清楚所有的缓存
                uni.showToast({
                    title: '授权过期,请重新登录',
                    icon: 'none',
                    mask: true
                })
                setTimeout(() => {
                    uni.reLaunch({
                        url: '/pages/index/index'
                    })
                }, 900)
            } else {
                uni.showToast({
                    title: res.data?.msg || "请求异常!",
                    icon: 'none',
                    mask: true
                })
            }
            return false;
        } else {
            vm.$u.toast(res.data.msg || "请求异常!"); //错误提示信息
            return false;
        }
    }, (response) => {
        // 对响应错误做点什么 (statusCode !== 200)
        uni.hideLoading()
        if(response.config.custom?.loading) {
            uni.hideLoading()
        }
        return Promise.reject(response)
    })
function getToken() {
  let token = uni.getStorageSync("sessionToken")
  return util.isBlank(token) ? '' : token
}
module.exports = (vm) => {
  const url = config.serverUrl
  uni.$u.http.setConfig((config) => {
    config.baseURL = url
    config.header = {
      'Accept': 'application/json, text/plain, */*',
      // 'Content-Type': 'application/x-www-form-urlencoded',
    }
    return config
  });
  // 请求拦截,配置Token等参数
  uni.$u.http.interceptors.request.use((config) => {
    // 引用token
    const TOKEN = getToken() || null;
    if (TOKEN) {
      config.header[ACCESSTOKEN] = TOKEN;
    } else {
      delete config.header[ACCESSTOKEN]
    }
    if (config.custom.loading) {
      uni.showLoading({
        title: '加载中',
        mask: true
      })
    }
    DEBUG && console.log('请求参数', config);
    return config;
  }, config => { // 可使用async await 做异步操作
    return Promise.reject(config)
  })
  // 响应拦截,判断状态码是否通过
  uni.$u.http.interceptors.response.use((res) => {
    uni.hideLoading()
    DEBUG && console.log('返回结果', res);
    if (res.statusCode != 200) {
      vm.$u.toast(res.data?.msg || "请求异常!"); //错误提示信息
      return false;
    }
    if (res.data.code == 200 || !res.data.code) {
      return res
    } else if (res.data.code == 10002) {
      return res
    } else if (res.data.code == 401) {
      const TOKEN = uni.getStorageSync("sessionToken")
      if (TOKEN) {
        // vm.$u.vuex('userInfo', null)
        // vm.$u.vuex('token', null)
        // uni.removeStorageSync("sessionToken")
        uni.clearStorageSync() // 清楚所有的缓存
        uni.showToast({
          title: '授权过期,请重新登录',
          icon: 'none',
          mask: true
        })
        setTimeout(() => {
          uni.reLaunch({
            url: '/pages/index/index'
          })
        }, 900)
      } else {
        uni.showToast({
          title: res.data?.msg || "请求异常!",
          icon: 'none',
          mask: true
        })
      }
      return false;
    } else {
      vm.$u.toast(res.data.msg || "请求异常!"); //错误提示信息
      return false;
    }
  }, (response) => {
    // 对响应错误做点什么 (statusCode !== 200)
    uni.hideLoading()
    if (response.config.custom?.loading) {
      uni.hideLoading()
    }
    return Promise.reject(response)
  })
}
manifest.json
@@ -1,103 +1,103 @@
{
    "name" : "惠企执法",
    "appid" : "__UNI__B034821",
    "description" : "惠企执法",
    "versionName" : "1.0.0",
    "versionCode" : "100",
    "transformPx" : false,
    /* 5+App特有相关 */
    "app-plus" : {
        "usingComponents" : true,
        "nvueStyleCompiler" : "uni-app",
        "compilerVersion" : 3,
        "splashscreen" : {
            "alwaysShowBeforeRender" : true,
            "waiting" : true,
            "autoclose" : true,
            "delay" : 0
        },
        /* 模块配置 */
        "modules" : {},
        /* 应用发布信息 */
        "distribute" : {
            /* android打包配置 */
            "android" : {
                "permissions" : [
                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                    "<uses-feature android:name=\"android.hardware.camera\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
                ]
            },
            /* ios打包配置 */
            "ios" : {},
            /* SDK配置 */
            "sdkConfigs" : {}
        }
  "name": "惠企执法",
  "appid": "__UNI__B034821",
  "description": "惠企执法",
  "versionName": "1.0.0",
  "versionCode": "100",
  "transformPx": false,
  /* 5+App特有相关 */
  "app-plus": {
    "usingComponents": true,
    "nvueStyleCompiler": "uni-app",
    "compilerVersion": 3,
    "splashscreen": {
      "alwaysShowBeforeRender": true,
      "waiting": true,
      "autoclose": true,
      "delay": 0
    },
    /* 快应用特有相关 */
    "quickapp" : {},
    /* 小程序特有相关 */
    "mp-weixin" : {
        "appid" : "wxc2cafc8362d40157",
        "setting" : {
            "urlCheck" : false,
            "minified" : true
        },
        "usingComponents" : true,
        "permission" : {
            "scope.userLocation" : {
                "desc" : "您的位置将用于匹配最近门店或优惠券"
            }
        },
        "requiredPrivateInfos" : [ "getLocation", "chooseAddress" ]
    },
    "mp-alipay" : {
        "usingComponents" : true
    },
    "mp-baidu" : {
        "usingComponents" : true
    },
    "mp-toutiao" : {
        "usingComponents" : true
    },
    "uniStatistics" : {
        "enable" : false
    },
    "vueVersion" : "2",
    "h5" : {
        "sdkConfigs" : {
            "maps" : {
                "qqmap" : {
                    "key" : "2BUBZ-QGL33-2GO3Y-OLJDS-ZSUQZ-QCBTS"
                }
            }
        },
        "title" : "数字化生态圈",
        "router" : {
            "mode" : "history",
            "base" : "/ecosphere-user/"
        },
        "optimization" : {
            "treeShaking" : {
                "enable" : true
            }
        },
        "devServer" : {
            "port" : "",
            "https" : false
        },
        "template" : "index.html"
    /* 模块配置 */
    "modules": {},
    /* 应用发布信息 */
    "distribute": {
      /* android打包配置 */
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
          "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
          "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
          "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
          "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
          "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
          "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
          "<uses-permission android:name=\"android.permission.CAMERA\"/>",
          "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
          "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
          "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
          "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
          "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
          "<uses-feature android:name=\"android.hardware.camera\"/>",
          "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
        ]
      },
      /* ios打包配置 */
      "ios": {},
      /* SDK配置 */
      "sdkConfigs": {}
    }
}
  },
  /* 快应用特有相关 */
  "quickapp": {},
  /* 小程序特有相关 */
  "mp-weixin": {
    "appid": "wxec87cd0359014ce3",
    "setting": {
      "urlCheck": false,
      "minified": true
    },
    "usingComponents": true,
    "permission": {
      "scope.userLocation": {
        "desc": "您的位置将用于匹配最近门店或优惠券"
      }
    },
    "requiredPrivateInfos": ["getLocation", "chooseAddress"]
  },
  "mp-alipay": {
    "usingComponents": true
  },
  "mp-baidu": {
    "usingComponents": true
  },
  "mp-toutiao": {
    "usingComponents": true
  },
  "uniStatistics": {
    "enable": false
  },
  "vueVersion": "2",
  "h5": {
    "sdkConfigs": {
      "maps": {
        "qqmap": {
          "key": "2BUBZ-QGL33-2GO3Y-OLJDS-ZSUQZ-QCBTS"
        }
      }
    },
    "title": "数字化生态圈",
    "router": {
      "mode": "history",
      "base": "/ecosphere-user/"
    },
    "optimization": {
      "treeShaking": {
        "enable": true
      }
    },
    "devServer": {
      "port": "",
      "https": false
    },
    "template": "index.html"
  }
}
package-lock.json
@@ -1,6 +1,73 @@
{
  "name": "sqys_xcx",
  "lockfileVersion": 2,
  "requires": true,
  "lockfileVersion": 1,
  "packages": {
    "": {
      "dependencies": {
        "vconsole": "^3.14.7",
        "weixin-js-sdk": "^1.6.0"
      }
    },
    "node_modules/@babel/runtime": {
      "version": "7.23.6",
      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.6.tgz",
      "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==",
      "dependencies": {
        "regenerator-runtime": "^0.14.0"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/copy-text-to-clipboard": {
      "version": "3.2.0",
      "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz",
      "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==",
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/core-js": {
      "version": "3.34.0",
      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.34.0.tgz",
      "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==",
      "hasInstallScript": true,
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/core-js"
      }
    },
    "node_modules/mutation-observer": {
      "version": "1.0.3",
      "resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
      "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
    },
    "node_modules/regenerator-runtime": {
      "version": "0.14.1",
      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
    },
    "node_modules/vconsole": {
      "version": "3.15.1",
      "resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz",
      "integrity": "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==",
      "dependencies": {
        "@babel/runtime": "^7.17.2",
        "copy-text-to-clipboard": "^3.0.1",
        "core-js": "^3.11.0",
        "mutation-observer": "^1.0.3"
      }
    },
    "node_modules/weixin-js-sdk": {
      "version": "1.6.5",
      "resolved": "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz",
      "integrity": "sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ=="
    }
  },
  "dependencies": {
    "@babel/runtime": {
      "version": "7.23.6",
pages/companyLogin/companyLogin.vue
@@ -1,16 +1,16 @@
<!-- 企业登录 -->
<template>
    <view class="companylogin">
        <u-navbar :autoBack="true" bgColor="transparent">
            <template slot="center">
            </template>
        </u-navbar>
        <view class="image-box">
            <image src="/static/policy/loginHeader.png" mode="widthFix" ></image>
        </view>
        <view class="content-box">
            <!-- <u-form label-width="60" labelAlign="right" >
  <view class="companylogin">
    <u-navbar :autoBack="true" bgColor="transparent">
      <template slot="center">
      </template>
    </u-navbar>
    <view class="image-box">
      <image src="/static/policy/loginHeader.png" mode="widthFix"></image>
    </view>
    <view class="content-box">
      <!-- <u-form label-width="60" labelAlign="right" >
                <u-form-item label="手机号">
                    <u-input style="width: 80%;" v-model="form.phone" placeholder="请输入"></u-input>
                </u-form-item>
@@ -23,274 +23,294 @@
                    </u-input>
                </u-form-item>
            </u-form> -->
            <view class="form">
                <view class="form-item margin-bottom">
                    <view class="form-label">
                        手机号
                    </view>
                    <view class="form-input">
                        <input type="number"  v-model="form.phone"  placeholder="请输入11位手机号"/>
                    </view>
                </view>
                <view class="form-item">
                    <view class="form-label">
                        验证码
                    </view>
                    <view class="form-input set-flex set-flex-content-between">
                        <input type="number" v-model="form.code"  placeholder="请输入验证码"/>
                        <view >
                            <text class="driver"></text>
                            <text class="getcode">{{tips}}</text>
                        </view>
                    </view>
                </view>
            </view>
            <view style="margin-top: 56rpx;">
                <view class="per-button" @click="loging">登录</view>
            </view>
             <view @click="goRegister" class="company-register" v-if="form.userType == '02'">
                 企业注册
             </view>
            <!-- <u--text text="企业注册" type="primary" @click="goRegister"></u--text> -->
        </view>
        <selectVue ref="selectVue" @select="select"></selectVue>
    </view>
      <view class="form">
        <view class="form-item margin-bottom">
          <view class="form-label">
            手机号
          </view>
          <view class="form-input">
            <input type="number" v-model="form.phone" placeholder="请输入11位手机号" />
          </view>
        </view>
        <view class="form-item">
          <view class="form-label">
            验证码
          </view>
          <view class="form-input set-flex set-flex-content-between">
            <input type="number" v-model="form.code" placeholder="请输入验证码" />
            <view>
              <text class="driver"></text>
              <text class="getcode">{{tips}}</text>
            </view>
          </view>
        </view>
      </view>
      <view style="margin-top: 56rpx;">
        <view class="per-button" @click="loging">登录</view>
      </view>
      <view @click="goRegister" class="company-register" v-if="form.userType == '02'">
        企业注册
      </view>
      <!-- <u--text text="企业注册" type="primary" @click="goRegister"></u--text> -->
    </view>
    <selectVue ref="selectVue" @select="select"></selectVue>
  </view>
</template>
<script>
    // 00营商办,01执法,02企业 区分不同的登陆页面
    import { getCode, codeLogin, getInfo, getCompanyList } from '@/api/auth.js'
    import selectVue from '@/components/select.vue'
    export default {
        components: {
            selectVue
        },
        data() {
            return {
                tips: '获取验证码',
                form: {
                    phone: '',
                    code: '666666',
                    userType: '01'
                },
                loginToken: '',
                isSendCode: false,
                countdownTime: 20,
                timer: '',
                sessionToken: "",
                userInfo: {}
            }
        },
        onLoad(options) {
            if(options.code) {
                this.form.userType = options.code
            }
        },
        onUnload() {
            if(this.timer) {
                clearTimeout(this.timer)
                this.timer = null
            }
        },
        methods: {
            getCode() {
                if(!this.form.phone){
                    uni.showToast({
                        title: '请输入手机号',
                        icon: 'none'
                    })
                    return
                }
                if(!this.$u.test.mobile(this.form.phone)){
                    uni.showToast({
                        title: '请输入正确的手机号',
                        icon: 'none'
                    })
                    return
                }
                if (!this.isSendCode) {
                    this.isSendCode = true
                    uni.showLoading({
                        title: '正在获取验证码'
                    })
                    getCode({phone: this.form.phone }).then(val => {
                            if(val.data.code == 200) {
                                this.startCountdown()
                                uni.hideLoading();
                                this.tips = `${this.countdownTime}s后重新获取`
                                uni.$u.toast('验证码已发送');
                            }
                    }).catch(err => {
                        this.isSendCode = false
                    })
                } else {
                    uni.$u.toast('倒计时结束后再发送');
                }
            },
            startCountdown() {
                if(this.timer) {
                    clearTimeout(this.timer)
                    this.timer = null
                }
                if(this.countdownTime <= 0) {
                    this.tips = "重新获取"
                    this.isSendCode = false
                    this.countdownTime = 20
                    return
                }
                this.timer = setTimeout(() => {
                    this.countdownTime--
                    this.tips = `${this.countdownTime}s后重新获取`
                    this.startCountdown()
                }, 1000)
            },
            loging() {
                if(!this.form.phone){
                    uni.showToast({
                        title: '请输入手机号',
                        icon: 'none'
                    })
                    return
                }
                // if(!this.form.code){
                //     uni.showToast({
                //         title: '请输入验证码',
                //         icon: 'none'
                //     })
                //     return
                // }
                codeLogin(this.form).then(val => {
                    if(val.data.token) {
                        this.loginToken = val.data.token
                        uni.setStorageSync('sessionToken', this.loginToken)
                        this.getInfo()
                    }
                })
            },
            getInfo() {
                getInfo().then(val => {
                    // uni.setStorageSync('userInfo',  val.data.data)
                    if(val.data.code === 200) {
                        this.userInfo = val.data.data
                        if(this.form.userType == '02') {
                            // 获取企业
                            this.getCompanyList(val.data.data.phonenumber)
                        } else if(this.form.userType == '01'){
                            uni.setStorageSync('userInfo',  val.data.data)
                            // uni.setStorageSync('sessionToken', this.loginToken)
                            uni.reLaunch({
                                url:`/policy/policyIndex/policyIndex`
                            })
                        } else {
                            uni.setStorageSync('userInfo',  val.data.data)
                            // uni.setStorageSync('sessionToken', this.loginToken)
                            uni.reLaunch({
                                url:`/policy/policyIndex/policyIndex`
                            })
                        }
                    } else {
                        uni.removeStorageSync('sessionToken')
                        uni.showToast({
                            title: val.data.msg,
                            icon: 'none'
                        })
                    }
                }).catch(err => {
                    uni.removeStorageSync('sessionToken')
                })
            },
            goRegister() {
                uni.navigateTo({
                    url: `/pages/registerCompany/registerCompany`
                })
            },
            getCompanyList(companyPhone) {
                getCompanyList({companyPhone, companyStatus: 0, checkStatus: 2}).then(val => {
                    if(val.data.rows.length > 1){
                        this.$refs.selectVue.open(val.data.rows)
                    } else {
                        uni.setStorageSync('userInfo',  this.userInfo)
                        uni.reLaunch({
                            url:`/qiye/qiyeIndex/qiyeIndex?id=${this.userInfo.deptId}`
                        })
                    }
                })
            },
            select(event){
                uni.setStorageSync('userInfo',  this.userInfo)
                uni.reLaunch({
                    url:`/qiye/qiyeIndex/qiyeIndex?id=${event}`
                })
            }
        }
    }
  // 00营商办,01执法,02企业 区分不同的登陆页面
  import {
    getCode,
    codeLogin,
    getInfo,
    getCompanyList
  } from '@/api/auth.js'
  import selectVue from '@/components/select.vue'
  export default {
    components: {
      selectVue
    },
    data() {
      return {
        tips: '获取验证码',
        form: {
          phone: '',
          code: '',
          userType: '01'
        },
        loginToken: '',
        isSendCode: false,
        countdownTime: 20,
        timer: '',
        sessionToken: "",
        userInfo: {}
      }
    },
    onLoad(options) {
      if (options.code) {
        this.form.userType = options.code
      }
    },
    onUnload() {
      if (this.timer) {
        clearTimeout(this.timer)
        this.timer = null
      }
    },
    methods: {
      getCode() {
        if (!this.form.phone) {
          uni.showToast({
            title: '请输入手机号',
            icon: 'none'
          })
          return
        }
        if (!this.$u.test.mobile(this.form.phone)) {
          uni.showToast({
            title: '请输入正确的手机号',
            icon: 'none'
          })
          return
        }
        if (!this.isSendCode) {
          this.isSendCode = true
          uni.showLoading({
            title: '正在获取验证码'
          })
          getCode({
            phone: this.form.phone
          }).then(val => {
            if (val.data.code == 200) {
              this.startCountdown()
              uni.hideLoading();
              this.tips = `${this.countdownTime}s后重新获取`
              uni.$u.toast('验证码已发送');
            }
          }).catch(err => {
            this.isSendCode = false
          })
        } else {
          uni.$u.toast('倒计时结束后再发送');
        }
      },
      startCountdown() {
        if (this.timer) {
          clearTimeout(this.timer)
          this.timer = null
        }
        if (this.countdownTime <= 0) {
          this.tips = "重新获取"
          this.isSendCode = false
          this.countdownTime = 20
          return
        }
        this.timer = setTimeout(() => {
          this.countdownTime--
          this.tips = `${this.countdownTime}s后重新获取`
          this.startCountdown()
        }, 1000)
      },
      loging() {
        if (!this.form.phone) {
          uni.showToast({
            title: '请输入手机号',
            icon: 'none'
          })
          return
        }
        // if(!this.form.code){
        //     uni.showToast({
        //         title: '请输入验证码',
        //         icon: 'none'
        //     })
        //     return
        // }
        codeLogin(this.form).then(val => {
          if (val.data.token) {
            this.loginToken = val.data.token
            uni.setStorageSync('sessionToken', this.loginToken)
            this.getInfo()
          }
        })
      },
      getInfo() {
        getInfo().then(val => {
          // uni.setStorageSync('userInfo',  val.data.data)
          if (val.data.code === 200) {
            this.userInfo = val.data.data
            if (this.form.userType == '02') {
              // 获取企业
              this.getCompanyList(val.data.data.phonenumber)
            } else if (this.form.userType == '01') {
              uni.setStorageSync('userInfo', val.data.data)
              // uni.setStorageSync('sessionToken', this.loginToken)
              uni.reLaunch({
                url: `/policy/policyIndex/policyIndex`
              })
            } else {
              uni.setStorageSync('userInfo', val.data.data)
              // uni.setStorageSync('sessionToken', this.loginToken)
              uni.reLaunch({
                url: `/policy/policyIndex/policyIndex`
              })
            }
          } else {
            uni.removeStorageSync('sessionToken')
            uni.showToast({
              title: val.data.msg,
              icon: 'none'
            })
          }
        }).catch(err => {
          uni.removeStorageSync('sessionToken')
        })
      },
      goRegister() {
        uni.navigateTo({
          url: `/pages/registerCompany/registerCompany`
        })
      },
      getCompanyList(companyPhone) {
        getCompanyList({
          companyPhone,
          companyStatus: 0,
          checkStatus: 2
        }).then(val => {
          if (val.data.rows.length > 1) {
            this.$refs.selectVue.open(val.data.rows)
          } else {
            uni.setStorageSync('userInfo', this.userInfo)
            uni.reLaunch({
              url: `/qiye/qiyeIndex/qiyeIndex?id=${this.userInfo.deptId}`
            })
          }
        })
      },
      select(event) {
        uni.setStorageSync('userInfo', this.userInfo)
        uni.reLaunch({
          url: `/qiye/qiyeIndex/qiyeIndex?id=${event}`
        })
      }
    }
  }
</script>
<style scoped lang="scss">
    .companylogin {
        &>.image-box {
            width: 100%;
            height: 345rpx;
            text-align: center;
            background-color: #111;
            &>image{
                width: 100%;
                height: 345rpx;
            }
        }
        .content-box{
            border-radius: 40rpx 40rpx 0 0;
            padding: 40rpx 32rpx;
            position: relative;
            top: 80rpx;
            background-color: white;
            .form {
                .form-item{
                    .form-label{
                        font-size: 34rpx;
                        margin: 0 0 24rpx 16rpx;
                    }
                    .form-input{
                        background-color: #F7F7F7;
                        padding: 20rpx;
                        border-radius: 20rpx;
                    }
                }
            }
            .margin-bottom{
                margin-bottom: 36rpx;
            }
            .getcode{
                color: #1171E0;
                font-size: 34rpx;
                font-weight: 500;
                width: 20%;
            }
            .driver{
                display: inline-block;
                vertical-align: middle;
                margin-right: 20rpx;
                width: 2rpx;
                height: 48rpx;
                background-color: #C3C6CD;
            }
        }
        .company-register{
            position: fixed;
            bottom: 32rpx;
            left: 50%;
            transform: translateX(-50%);
            padding: 16rpx 46rpx;
            color: #1171E0;
            display: inline-block;
            border-radius: 12rpx;
            border: 2rpx solid #ABD2FF;
            background: #F0F8FF;
        }
    }
    ::v-deep .u-radio {
        margin-bottom: 20rpx;
    }
  .companylogin {
    &>.image-box {
      width: 100%;
      height: 345rpx;
      text-align: center;
      background-color: #111;
      &>image {
        width: 100%;
        height: 345rpx;
      }
    }
    .content-box {
      border-radius: 40rpx 40rpx 0 0;
      padding: 40rpx 32rpx;
      position: relative;
      top: 80rpx;
      background-color: white;
      .form {
        .form-item {
          .form-label {
            font-size: 34rpx;
            margin: 0 0 24rpx 16rpx;
          }
          .form-input {
            background-color: #F7F7F7;
            padding: 20rpx;
            border-radius: 20rpx;
          }
        }
      }
      .margin-bottom {
        margin-bottom: 36rpx;
      }
      .getcode {
        color: #1171E0;
        font-size: 34rpx;
        font-weight: 500;
        width: 20%;
      }
      .driver {
        display: inline-block;
        vertical-align: middle;
        margin-right: 20rpx;
        width: 2rpx;
        height: 48rpx;
        background-color: #C3C6CD;
      }
    }
    .company-register {
      position: fixed;
      bottom: 32rpx;
      left: 50%;
      transform: translateX(-50%);
      padding: 16rpx 46rpx;
      color: #1171E0;
      display: inline-block;
      border-radius: 12rpx;
      border: 2rpx solid #ABD2FF;
      background: #F0F8FF;
    }
  }
  ::v-deep .u-radio {
    margin-bottom: 20rpx;
  }
</style>
pages/index/index.vue
@@ -1,55 +1,57 @@
<template>
    <view>
        <img src="/static/head.png" class="head" alt="" />
        <view class="hqzc" @click="more1()">
            <img src="/static/hqzc.png" class="img" alt="" />
            <view class="line"></view>
            <view class="font">
                <p v-for="(item,index) in list1" :key="index" class="u-line-1">{{item.docTitle}}</p>
                <!-- <p>海关总署贸易持续发展2024年立法...</p>
  <view>
    <image src="/static/head.png" class="head" alt="" />
    <view class="hqzc" @click="more1()">
      <image src="/static/hqzc.png" class="img" alt="" />
      <view class="line"></view>
      <view class="font">
        <p v-for="(item,index) in list1" :key="index" class="u-line-1">{{item.docTitle}}</p>
        <!-- <p>海关总署贸易持续发展2024年立法...</p>
                <p>国家医疗保障局办公室关于发布管理... </p> -->
            </view>
            <img src="/static/i06.png" class="more"  alt="" style="width: 46rpx;height: 46rpx;"/>
        </view>
        <view class="btnbox">
            <image mode="widthFix" src="/static/i01.png" class="more" alt="" style="margin-right: 18rpx;" @click="goMyCompany('01')"/>
            <image mode="widthFix" src="/static/i02.png" class="more" alt="" @click="goMyCompany('02')"/>
            <image mode="widthFix" src="/static/i03.png" class="more" alt="" style="margin-right: 18rpx;" @click="goMyCompany('01')"/>
            <image mode="widthFix" src="/static/i04.png" class="more" alt="" @click="goMyCompany('00')"/>
                <!-- <u-button @click="goMyCompany('01')">我是执法人员</u-button>
      </view>
      <img src="/static/i06.png" class="more" alt="" style="width: 46rpx;height: 46rpx;" />
    </view>
    <view class="btnbox">
      <image mode="widthFix" src="/static/i01.png" class="more" alt="" style="margin-right: 18rpx;"
        @click="goMyCompany('01')" />
      <image mode="widthFix" src="/static/i02.png" class="more" alt="" @click="goMyCompany('02')" />
      <image mode="widthFix" src="/static/i03.png" class="more" alt="" style="margin-right: 18rpx;"
        @click="goMyCompany('01')" />
      <image mode="widthFix" src="/static/i04.png" class="more" alt="" @click="goMyCompany('00')" />
      <!-- <u-button @click="goMyCompany('01')">我是执法人员</u-button>
                <u-button @click="goMyCompany('02')">我是企业</u-button>
                <u-button @click="goMyCompany('00')">运营管理</u-button> -->
        </view>
        <view class="login-news" @click="goLogin">
            <image src="/static/index-1.png" mode="widthFix" @click="goLogin"></image>
        </view>
        <view class="msgbox">
            <view class="tit">
                <view class="t">
                    信息公示
                </view>
                <view class="m" @click="more2()">
                    查更多>
                </view>
            </view>
            <view class="item" v-for="(item,index) in list2">
                <img src="/static/i05.png" class="img" alt="" />
                <view class="right">
                    <view class="name">
                        {{item.companyName}}
                    </view>
                    <view class="box">
                        <view class="l">
                            <p>执法单位:{{item.executeDeptName}}</p>
                            <p>执法时间:{{item.executeTime}}</p>
                        </view>
                        <view class="r" @click="kankna(item.orderId)">
                            去查看
                        </view>
                    </view>
                </view>
            </view>
        <!--     <view class="item">
    </view>
    <view class="login-news" @click="goLogin">
      <image src="/static/index-1.png" mode="widthFix"></image>
    </view>
    <view class="msgbox">
      <view class="tit">
        <view class="t">
          信息公示
        </view>
        <view class="m" @click="more2()">
          查更多>
        </view>
      </view>
      <view class="item" v-for="(item,index) in list2">
        <image src="/static/i05.png" class="img" alt="" />
        <view class="right">
          <view class="name">
            {{item.companyName}}
          </view>
          <view class="box">
            <view class="l">
              <p>执法单位:{{item.executeDeptName}}</p>
              <p>执法时间:{{item.executeTime}}</p>
            </view>
            <view class="r" @click="kankna(item.orderId)">
              去查看
            </view>
          </view>
        </view>
      </view>
      <!--     <view class="item">
                <img src="/static/i05.png" class="img" alt="" />
                <view class="right">
                    <view class="name">
@@ -117,219 +119,247 @@
                    </view>
                </view>
            </view> -->
        </view>
        <view style="height: 30rpx;"></view>
    </view>
    </view>
    <view style="height: 30rpx;"></view>
  </view>
</template>
<script>
    import {  docList,showList } from '@/api/index.js'
    // 00营商办,01执法,02企业 区分不同的登陆页面
    export default {
        onLoad() {
        },
        onShow() {
            this.getInfo()
            const value = uni.getStorageSync("userInfo")
            const sessionToken = uni.getStorageSync('sessionToken')
            if(sessionToken && value && value.userType) {
                const qiyeData = uni.getStorageSync('qiyedata')
                if(value.userType == '02') {
                    uni.reLaunch({
                        url:`/qiye/qiyeIndex/qiyeIndex?id=${qiyeData.deptId}`
                    })
                } else if(value.userType == '01'){
                    uni.reLaunch({
                        url:`/policy/policyIndex/policyIndex`
                    })
                } else {
                    uni.reLaunch({
                        url:`/policy/policyIndex/policyIndex`
                    })
                }
            }
        },
        data() {
            return {
                list1:[],
                list2:[],
            }
        },
        methods: {
            kankna(id){
                uni.navigateTo({
                    url: `/pages/message/details?id=${id}`
                })
            },
            more1(){
                uni.navigateTo({
                    url: `/pages/hqzc/list`
                })
            },
            more2(){
                uni.navigateTo({
                    url: `/pages/message/list`
                })
            },
            getInfo() {
                docList({pageNum:1,pageSize:2}).then(val =>{
                    let data = val.data.rows
                    for(let i = 0;i<data.length;i++){
                        if(data[i].docTitle.length>17){
                            data[i].docTitle = data[i].docTitle.slice(0, 17) + '...'
                        }
                    }
                    this.list1 = data
                })
                showList({pageNum:1,pageSize:10}).then(val =>{
                    //console.log(val.data.rows)
                    this.list2 = val.data.rows
                })
            },
            goMyCompany(item) {
                uni.navigateTo({
                    url: `/pages/companyLogin/companyLogin?code=${item}`
                })
            },
            goLogin() {
                uni.scanCode({
                    success: (val) =>{
                        uni.navigateTo({
                            url: `/pages/visitiorRegis/visitiorRegis?value=${val.result}`
                        })
                    }
                })
            }
        }
    };
  import {
    docList,
    showList
  } from '@/api/index.js'
  // 00营商办,01执法,02企业 区分不同的登陆页面
  export default {
    onLoad() {
    },
    onShow() {
      this.getInfo()
      const value = uni.getStorageSync("userInfo")
      const sessionToken = uni.getStorageSync('sessionToken')
      if (sessionToken && value && value.userType) {
        const qiyeData = uni.getStorageSync('qiyedata')
        if (value.userType == '02') {
          uni.reLaunch({
            url: `/qiye/qiyeIndex/qiyeIndex?id=${qiyeData.deptId}`
          })
        } else if (value.userType == '01') {
          uni.reLaunch({
            url: `/policy/policyIndex/policyIndex`
          })
        } else {
          uni.reLaunch({
            url: `/policy/policyIndex/policyIndex`
          })
        }
      }
    },
    data() {
      return {
        list1: [],
        list2: [],
      }
    },
    methods: {
      kankna(id) {
        uni.navigateTo({
          url: `/pages/message/details?id=${id}`
        })
      },
      more1() {
        uni.navigateTo({
          url: `/pages/hqzc/list`
        })
      },
      more2() {
        uni.navigateTo({
          url: `/pages/message/list`
        })
      },
      getInfo() {
        docList({
          pageNum: 1,
          pageSize: 2
        }).then(val => {
          let data = val.data.rows
          for (let i = 0; i < data.length; i++) {
            if (data[i].docTitle.length > 17) {
              data[i].docTitle = data[i].docTitle.slice(0, 17) + '...'
            }
          }
          this.list1 = data
        })
        showList({
          pageNum: 1,
          pageSize: 10
        }).then(val => {
          //console.log(val.data.rows)
          this.list2 = val.data.rows
        })
      },
      goMyCompany(item) {
        uni.navigateTo({
          url: `/pages/companyLogin/companyLogin?code=${item}`
        })
      },
      goLogin() {
        uni.scanCode({
          success: (val) => {
            uni.navigateTo({
              url: `/pages/visitiorRegis/visitiorRegis?value=${val.result}`
            })
          }
        })
      }
    }
  };
</script>
<style>
    page{
        background: #F7F7F7;
    }
  page {
    background: #F7F7F7;
  }
</style>
<style lang="scss" scoped>
  .hqzc {
    position: absolute;
    border-radius: 5px;
    background: #fff;
    display: flex;
    width: calc(100vw - 64rpx);
    align-items: center;
    left: 32rpx;
    top: 500rpx;
    padding: 24rpx;
    box-sizing: border-box;
    .hqzc{
        position: absolute;
        border-radius: 5px;
        background: #fff;
        display: flex;
        width: calc(100vw - 64rpx);
        align-items: center;
        left: 32rpx;
        top: 500rpx;
        padding: 24rpx;
        box-sizing: border-box;
        .line{
            width: 2rpx;
            height: 50rpx;
            background: #f1f1f1;
            margin-right: 18rpx;
        }
        .img{
            width: 76rpx;
            height: 76rpx;
            margin-right: 18rpx;
        }
        .more{
            width: 28rpx;
            height: 28rpx;
        }
        .font{
            font-size: 26rpx;
            color: #4A4E60;
            margin-right: 50rpx;
            width: 450rpx;
            // text-align: center;
            text-align: left;
        }
    }
    .btnbox{
        margin-top: 110rpx;
        margin-left: 32rpx;
        margin-right: 32rpx;
        image{
            width: 334rpx;
            height: 208rpx;
        }
    }
    .msgbox{
        background: #fff;
        border-radius: 5px;
        padding: 24rpx;
        box-sizing: border-box;
        margin: 20rpx 32rpx;
        .tit{
            display: flex;
            justify-content: space-between;
            .t{
                color: #202d44;
                font-size: 36rpx;
                font-weight: bolder;
            }
            .m{
                color: #7e8596;
                font-size: 24rpx;
            }
        }
        .item{
            display: flex;
            margin-top: 26rpx;
            border-bottom: 1px solid #F1F1F1;
            padding-bottom: 26rpx;
            .img{
                width: 56rpx;
                height: 56rpx;
            }
            .right{
                width: 90%;
                .name{
                    color: #202d44;
                    font-size: 32rpx;
                    line-height: 44rpx;
                    margin-bottom: 24rpx;
                }
                .box{
                    display: flex;
                    justify-content: space-between;
                    .l{
                        font-size: 26rpx;
                         color: #7e8593;
                         max-width: 80%;
                    }
                    .r{
                        width: 132rpx;
                        height: 64rpx;
                        line-height: 64rpx;
                        border-radius: 5px;
                        border: 1px solid #ABD2FF;
                        background: #F0F8FF;
                        color: #1171e0;
                        text-align: center;
                        font-size: 30rpx;
                    }
                }
            }
        }
        .item:last-child{
            border: none;
            padding-bottom: 0;
        }
    .line {
      width: 2rpx;
      height: 50rpx;
      background: #f1f1f1;
      margin-right: 18rpx;
    }
    }
    .head{
        width: 100%;
        height: 518rpx;
    }
    .login-news{
        margin: 20rpx 32rpx;
        image{
            width: 100%;
        }
    }
    .img {
      width: 76rpx;
      height: 76rpx;
      margin-right: 18rpx;
    }
    .more {
      width: 28rpx;
      height: 28rpx;
    }
    .font {
      font-size: 26rpx;
      color: #4A4E60;
      margin-right: 50rpx;
      width: 450rpx;
      // text-align: center;
      text-align: left;
    }
  }
  .btnbox {
    margin-top: 110rpx;
    margin-left: 32rpx;
    margin-right: 32rpx;
    image {
      width: 334rpx;
      height: 208rpx;
    }
  }
  .msgbox {
    background: #fff;
    border-radius: 5px;
    padding: 24rpx;
    box-sizing: border-box;
    margin: 20rpx 32rpx;
    .tit {
      display: flex;
      justify-content: space-between;
      .t {
        color: #202d44;
        font-size: 36rpx;
        font-weight: bolder;
      }
      .m {
        color: #7e8596;
        font-size: 24rpx;
      }
    }
    .item {
      display: flex;
      margin-top: 26rpx;
      border-bottom: 1px solid #F1F1F1;
      padding-bottom: 26rpx;
      .img {
        width: 56rpx;
        height: 56rpx;
      }
      .right {
        width: 90%;
        .name {
          color: #202d44;
          font-size: 32rpx;
          line-height: 44rpx;
          margin-bottom: 24rpx;
        }
        .box {
          display: flex;
          justify-content: space-between;
          .l {
            font-size: 26rpx;
            color: #7e8593;
            max-width: 80%;
          }
          .r {
            width: 132rpx;
            height: 64rpx;
            line-height: 64rpx;
            border-radius: 5px;
            border: 1px solid #ABD2FF;
            background: #F0F8FF;
            color: #1171e0;
            text-align: center;
            font-size: 30rpx;
          }
        }
      }
    }
    .item:last-child {
      border: none;
      padding-bottom: 0;
    }
  }
  .head {
    width: 100%;
    height: 518rpx;
  }
  .login-news {
    margin: 20rpx 32rpx;
    image {
      width: 100%;
    }
  }
</style>
policy/dataLook/dataLook.vue
@@ -1,344 +1,344 @@
<template>
    <view>
        <!-- <u-navbar placeholder bgColor="#1171E0FF" leftIconColor="white" :autoBack="true" >
  <view>
    <!-- <u-navbar placeholder bgColor="#1171E0FF" leftIconColor="white" :autoBack="true" >
            <template slot="center">
                <view style="color: white;">数据看板</view>
            </template>
        </u-navbar> -->
        <view class="donw-box"></view>
        <view class="page-main">
            <view class="box">
                <view class="title">
                    <text>基础信息</text>
                </view>
                <view class="grid-box">
                    <view class="grid-item">
                        <view class="label">企业总数</view>
                        <view>{{infoData.companyNum || 0}}</view>
                    </view>
                    <view class="grid-item">
                        <view class="label">执法单位</view>
                        <view>{{infoData.enforceDeptNum || 0}}</view>
                    </view>
                    <view class="grid-item">
                        <view class="label">执法人员</view>
                        <view>{{infoData.enforceUserNum || 0}}</view>
                    </view>
                    <view class="grid-item">
                        <view class="label">执法申请</view>
                        <view>{{infoData.enforceOrderNum || 0}}</view>
                    </view>
                    <view class="grid-item">
                        <view class="label">已审批</view>
                        <view>{{infoData.enforceOrderCheckedNum || 0}}</view>
                    </view>
                    <view class="grid-item">
                        <view class="label">已结束</view>
                        <view>{{infoData.enforceOrderCompleteNum || 0}}</view>
                    </view>
                </view>
            </view>
            <view class="box">
                <view class="title set-flex-content-between set-flex">
                    <text>执法单位执法次数</text>
                    <u-icon name="calendar" size="24" @click="openDate(1)"></u-icon>
                </view>
                <view class="number set-height">
                    <view class="date">{{pageQuerm.beginTimeStr1}} <text class="margin-text">至</text> {{pageQuerm.endTimeStr1}}</view>
                    <view class="progress-box"  style="margin-top: 20rpx;">
                        <!-- <qiun-data-charts v-if="!show" key="11" type="bar"
    <view class="donw-box"></view>
    <view class="page-main">
      <view class="box">
        <view class="title">
          <text>基础信息</text>
        </view>
        <view class="grid-box">
          <view class="grid-item">
            <view class="label">企业总数</view>
            <view>{{infoData.companyNum || 0}}</view>
          </view>
          <view class="grid-item">
            <view class="label">执法单位</view>
            <view>{{infoData.enforceDeptNum || 0}}</view>
          </view>
          <view class="grid-item">
            <view class="label">执法人员</view>
            <view>{{infoData.enforceUserNum || 0}}</view>
          </view>
          <view class="grid-item">
            <view class="label">执法申请</view>
            <view>{{infoData.enforceOrderNum || 0}}</view>
          </view>
          <view class="grid-item">
            <view class="label">已审批</view>
            <view>{{infoData.enforceOrderCheckedNum || 0}}</view>
          </view>
          <view class="grid-item">
            <view class="label">已结束</view>
            <view>{{infoData.enforceOrderCompleteNum || 0}}</view>
          </view>
        </view>
      </view>
      <view class="box">
        <view class="title set-flex-content-between set-flex">
          <text>执法单位执法次数</text>
          <u-icon name="calendar" size="24" @click="openDate(1)"></u-icon>
        </view>
        <view class="number set-height">
          <view class="date">{{pageQuerm.beginTimeStr1}} <text class="margin-text">至</text> {{pageQuerm.endTimeStr1}}
          </view>
          <view class="progress-box" style="margin-top: 20rpx;">
            <!-- <qiun-data-charts v-if="!show" key="11" type="bar"
                            :opts="opts" :chartData="chartData" /> -->
                            <view v-for="(item,index) in likeData" style="margin-bottom: 20rpx;" class="set-flex-progress">
                                <view class="name">{{item.k}}</view>
                                <view class="progress">
                                    <u-line-progress activeColor="#1890FF"  :percentage="item.progress" height="20">
                                        <template slot="default">
                                            {{item.v}}
                                        </template>
                                    </u-line-progress>
                                </view>
                            </view>
                            <!-- <echarts ref="echarts" :option="option" canvasId="echarts"></echarts> -->
                    </view>
                </view>
            </view>
            <view class="box">
                <view class="title set-flex-content-between set-flex">
                    <text>企业被执法次数排行</text>
                    <u-icon name="calendar" size="24" @click="openDate(2)"></u-icon>
                </view>
                <view class="number">
                    <view class="date" style="margin-bottom: 36rpx;">{{pageQuerm.beginTimeStr2}} <text class="margin-text">至</text>
                        {{pageQuerm.endTimeStr2}}</view>
                    <view class="list-box">
                        <view class="list-item" v-for="(item,index) in listData" :key="index">
                            <view class="width-set">
                                <image src="/static/policy/rank1.png" mode="widthFix" v-if="index == 0"></image>
                                <image src="/static/policy/rank2.png" mode="widthFix" v-if="index == 1"></image>
                                <image src="/static/policy/rank3.png" mode="widthFix" v-if="index == 2"></image>
                                <text class="set-index" style="margin-right: 36rpx;color: #7E8596;" v-if="index > 2">{{index+1}}</text>
                                <text class="company u-line-1" style="color: #202D44;">{{item.k}}</text>
                            </view>
                            <text class="value" :class="{origin: index <= 2}">{{item.v}}</text>
                        </view>
                        <view class="look-more" @click="lookMore" v-if="showMore">
                            <text>查看更多</text>
                            <u-icon name="arrow-right" color="#7E8596"></u-icon>
                        </view>
                    </view>
                </view>
            </view>
            <view class="box">
                <view class="title set-flex-content-between set-flex">
                    <text>执法类型占比</text>
                    <u-icon name="calendar" size="24" @click="openDate(3)"></u-icon>
                </view>
                <view class="number">
                    <view class="date" style="margin-bottom: 20rpx;">{{pageQuerm.beginTimeStr3}} <text class="margin-text">至</text> {{pageQuerm.endTimeStr3}}</view>
                    <view class="progress-box">
                        <qiun-data-charts type="pie"   v-if="!show"  tooltipFormat="tooltipDemo1"
 key="22" :opts="opts1" :chartData="chartData1" />
                    </view>
                </view>
            </view>
        </view>
            <u-datetime-picker
                        :show="show"
                        @cancel="show = false"
                        :maxDate="new Date().getTime()"
                        v-model="currentValue"
                        mode="year-month"
                        @confirm="confirmDate"
                ></u-datetime-picker>
    </view>
            <view v-for="(item,index) in likeData" style="margin-bottom: 20rpx;" class="set-flex-progress">
              <view class="name">{{item.k}}</view>
              <view class="progress">
                <u-line-progress activeColor="#1890FF" :percentage="item.progress" height="20">
                  <template slot="default">
                    {{item.v}}
                  </template>
                </u-line-progress>
              </view>
            </view>
            <!-- <echarts ref="echarts" :option="option" canvasId="echarts"></echarts> -->
          </view>
        </view>
      </view>
      <view class="box">
        <view class="title set-flex-content-between set-flex">
          <text>企业被执法次数排行</text>
          <u-icon name="calendar" size="24" @click="openDate(2)"></u-icon>
        </view>
        <view class="number">
          <view class="date" style="margin-bottom: 36rpx;">{{pageQuerm.beginTimeStr2}} <text
              class="margin-text">至</text>
            {{pageQuerm.endTimeStr2}}
          </view>
          <view class="list-box">
            <view class="list-item" v-for="(item,index) in listData" :key="index">
              <view class="width-set">
                <image src="/static/policy/rank1.png" mode="widthFix" v-if="index == 0"></image>
                <image src="/static/policy/rank2.png" mode="widthFix" v-if="index == 1"></image>
                <image src="/static/policy/rank3.png" mode="widthFix" v-if="index == 2"></image>
                <text class="set-index" style="margin-right: 36rpx;color: #7E8596;" v-if="index > 2">{{index+1}}</text>
                <text class="company u-line-1" style="color: #202D44;">{{item.k}}</text>
              </view>
              <text class="value" :class="{origin: index <= 2}">{{item.v}}</text>
            </view>
            <view class="look-more" @click="lookMore" v-if="showMore">
              <text>查看更多</text>
              <u-icon name="arrow-right" color="#7E8596"></u-icon>
            </view>
          </view>
        </view>
      </view>
      <view class="box">
        <view class="title set-flex-content-between set-flex">
          <text>执法类型占比</text>
          <u-icon name="calendar" size="24" @click="openDate(3)"></u-icon>
        </view>
        <view class="number">
          <view class="date" style="margin-bottom: 20rpx;">{{pageQuerm.beginTimeStr3}} <text
              class="margin-text">至</text> {{pageQuerm.endTimeStr3}}</view>
          <view class="progress-box">
            <qiun-data-charts type="pie" v-if="!show" tooltipFormat="tooltipDemo1" key="22" :opts="opts1"
              :chartData="chartData1" />
          </view>
        </view>
      </view>
    </view>
    <u-datetime-picker :show="show" @cancel="show = false" :maxDate="new Date().getTime()" v-model="currentValue"
      mode="year-month" @confirm="confirmDate"></u-datetime-picker>
  </view>
</template>
<script>
    import {
        getTotalInfo,
        getDeptCount,
        getCompanyCount,
        getEnforceTypeCount
    } from '@/api/data.js'
    export default {
        data() {
            return {
                likeData: {},
                option: {},
                typeItem: '',
                currentValue: '',
                show: false,
                infoData: [],
                listData: [
                ],
                chartData: {},
                pageQuerm: {
                    pageNum: 1,
                    pageSize: 10,
                    total: 1,
                    beginTimeStr: '',
                    endTimeStr: '',
                },
                originData: [],
                showMore: true,
                //您可以通过修改 config-ucharts.js 文件中下标为 ['bar'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
                opts: {
                    color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
                        "#ea7ccc"
                    ],
                    padding: [15, 30, 0, 5],
                    enableScroll: false,
                    legend: {
                        show: false,
                    },
                    xAxis: {
                        boundaryGap: "justify",
                        disableGrid: false,
                        min: 0,
                        axisLine: false,
                        gridColor: "#ededed",
                    },
                    yAxis: {
                        gridColor: "#ededed",
                    },
                    extra: {
                        bar: {
                            type: "group",
                            width: 15,
                            meterBorde: 1,
                            meterFillColor: "#FFFFFF",
                            activeBgColor: "#000000",
                            activeBgOpacity: 0.08,
                            linearType: "custom",
                            barBorderCircle: true,
                            seriesGap: 20,
                            categoryGap: 20
                        }
                    }
                },
                chartData1: {},
                tooltipCustom: {},
                opts1: {
                    color: ["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"],
                            padding: [5,5,5,5],
                            enableScroll: false,
                            legend: {
                                position: "bottom",
                                lineHeight: 25,
                                width: '100%', // 设置图例宽度
                                // itemWidth: 25, // 设置图例标记宽度
                                itemGap: 10, // 设置图例项之间的间隔
                                float: 'left'
                            },
                            extra: {
                              pie: {
                                activeOpacity: 0.5,
                                activeRadius: 10,
                                offsetAngle: 0,
                                labelWidth: 10,
                                border: false,
                                borderWidth: 3,
                                borderColor: "#FFFFFF"
                              }
                            }
                }
            }
        },
        onReady() {
            // console.log(new Date().getMonth() + 1, new Date().getDate())
            let date = new Date()
             date.setMonth(date.getMonth() - 1); // 减去1个月
              date.setDate(1); // 设置日为月份的第一天
            this.pageQuerm.beginTime = this.$u.timeFormat(date, "yyyy-mm-dd") + " " + "00:00:00"
            this.pageQuerm.endTime = this.$u.timeFormat(new Date(), "yyyy-mm-dd") + " " +"23:59:59"
            this.pageQuerm.beginTimeStr1 = this.pageQuerm.beginTimeStr2 = this.pageQuerm.beginTimeStr3 = this.$u.timeFormat(date, "yyyy-mm-dd")
            this.pageQuerm.endTimeStr1 = this.pageQuerm.endTimeStr2 = this.pageQuerm.endTimeStr3 = this.$u.timeFormat(new Date(), "yyyy-mm-dd")
            this.getTotalInfo()
            this.getCompanyCount()
            this.getServerData();
            this.getServerData1()
        },
        methods: {
            confirmDate(e) {
                if(new Date().getMonth() == new Date(e.value).getMonth()){
                    this.pageQuerm[`beginTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd')
                    this.pageQuerm[`endTimeStr${this.typeItem}`] = this.$u.timeFormat(e.value, 'yyyy-mm-dd')
                    this.pageQuerm.beginTime = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd') + " " + "00:00:00"
                    this.pageQuerm.endTime = this.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
                } else {
                    this.pageQuerm[`beginTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd')
                    this.pageQuerm.beginTime = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd') + " " + "00:00:00"
                    const date = new Date(e.value);
                    const year = date.getFullYear();
                    const month = date.getMonth() + 1; // 月份从0开始计算,需要加1
                    const lastDay = new Date(year, month, 0)
                     this.pageQuerm.endTime = this.$u.timeFormat(new Date(lastDay), 'yyyy-mm-dd') + " " + "23:59:59"
                    this.pageQuerm[`endTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(lastDay), 'yyyy-mm-dd')
                }
                if(this.typeItem  == 1) {
                    this.getServerData()
                }
                if(this.typeItem  == 2) {
                    this.getCompanyCount()
                }
                if(this.typeItem  == 3) {
                    this.getServerData1()
                }
                this.show = false
            },
            openDate(item) {
                this.typeItem = item
                this.currentValue = new Date().getTime()
                this.show = true
            },
            lookMore() {
                this.pageQuerm.pageNum++
                const value = this.pageQuerm.pageNum * this.pageQuerm.pageSize
                const data = this.originData.slice((this.pageQuerm.pageNum - 1) * this.pageQuerm.pageSize, value)
                this.listData.push(...data)
                if(value >= this.pageQuerm.total) {
                    this.showMore = false
                }
            },
            // 获取执法信息
            getTotalInfo() {
                getTotalInfo().then(val => {
                    // console.log(val)
                    this.infoData = val.data.data
                })
            },
            // 执法次数部门
            getServerData() {
                getDeptCount(this.pageQuerm).then(val => {
                    const value = val.data.data
                    const label = value.map(item => {
                        return item.k
                    })
                    const max = Math.max(value)
                    this.likeData = val.data.data.map(item => {
                        const progress = (item / max).toFixed(2)
                        return {
                            ...item,
                            progress
                        }
                    })
                    const data = value.map(item => item.v)
                    let res = {
                        categories: label,
                        series: [{
                            name: "执法次数",
                            data: data,
                        }]
                    };
                    this.chartData = JSON.parse(JSON.stringify(res));
                })
  import {
    getTotalInfo,
    getDeptCount,
    getCompanyCount,
    getEnforceTypeCount
  } from '@/api/data.js'
            },
            // 企业被执法次数排行
            getCompanyCount() {
                getCompanyCount(this.pageQuerm).then(val => {
                    this.listData = val.data.data.slice(0, this.pageQuerm.pageSize)
                    this.originData  = val.data.data
                    this.pageQuerm.total = val.data.data.length
                    if(this.pageQuerm.total <= this.pageQuerm.pageSize) {
                        this.showMore = false
                    }
                })
            },
            getServerData1() {
                getEnforceTypeCount(this.pageQuerm).then(val => {
                    const data = val.data.data.map(item => {
                        return {
                            name: item.k,
                            value: item.v,
                        }
                    })
                    let res = {
                        series: [{
                            data:  data,
                            }]
                    };
                    this.chartData1 = JSON.parse(JSON.stringify(res));
                })
            },
        }
    }
  export default {
    data() {
      return {
        likeData: {},
        option: {},
        typeItem: '',
        currentValue: '',
        show: false,
        infoData: [],
        listData: [],
        chartData: {},
        pageQuerm: {
          pageNum: 1,
          pageSize: 10,
          total: 1,
          beginTimeStr: '',
          endTimeStr: '',
        },
        originData: [],
        showMore: true,
        //您可以通过修改 config-ucharts.js 文件中下标为 ['bar'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
        opts: {
          color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
            "#ea7ccc"
          ],
          padding: [15, 30, 0, 5],
          enableScroll: false,
          legend: {
            show: false,
          },
          xAxis: {
            boundaryGap: "justify",
            disableGrid: false,
            min: 0,
            axisLine: false,
            gridColor: "#ededed",
          },
          yAxis: {
            gridColor: "#ededed",
          },
          extra: {
            bar: {
              type: "group",
              width: 15,
              meterBorde: 1,
              meterFillColor: "#FFFFFF",
              activeBgColor: "#000000",
              activeBgOpacity: 0.08,
              linearType: "custom",
              barBorderCircle: true,
              seriesGap: 20,
              categoryGap: 20
            }
          }
        },
        chartData1: {},
        tooltipCustom: {},
        opts1: {
          color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4", "#ea7ccc"],
          padding: [5, 5, 5, 5],
          enableScroll: false,
          legend: {
            position: "bottom",
            lineHeight: 25,
            width: '100%', // 设置图例宽度
            // itemWidth: 25, // 设置图例标记宽度
            itemGap: 10, // 设置图例项之间的间隔
            float: 'left'
          },
          extra: {
            pie: {
              activeOpacity: 0.5,
              activeRadius: 10,
              offsetAngle: 0,
              labelWidth: 10,
              border: false,
              borderWidth: 3,
              borderColor: "#FFFFFF"
            }
          }
        }
      }
    },
    onReady() {
      // console.log(new Date().getMonth() + 1, new Date().getDate())
      let date = new Date()
      date.setMonth(date.getMonth() - 1); // 减去1个月
      date.setDate(1); // 设置日为月份的第一天
      this.pageQuerm.beginTime = this.$u.timeFormat(date, "yyyy-mm-dd") + " " + "00:00:00"
      this.pageQuerm.endTime = this.$u.timeFormat(new Date(), "yyyy-mm-dd") + " " + "23:59:59"
      this.pageQuerm.beginTimeStr1 = this.pageQuerm.beginTimeStr2 = this.pageQuerm.beginTimeStr3 = this.$u.timeFormat(
        date, "yyyy-mm-dd")
      this.pageQuerm.endTimeStr1 = this.pageQuerm.endTimeStr2 = this.pageQuerm.endTimeStr3 = this.$u.timeFormat(
        new Date(), "yyyy-mm-dd")
      this.getTotalInfo()
      this.getCompanyCount()
      this.getServerData();
      this.getServerData1()
    },
    methods: {
      confirmDate(e) {
        if (new Date().getMonth() == new Date(e.value).getMonth()) {
          this.pageQuerm[`beginTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(e.value).setDate(1),
            'yyyy-mm-dd')
          this.pageQuerm[`endTimeStr${this.typeItem}`] = this.$u.timeFormat(e.value, 'yyyy-mm-dd')
          this.pageQuerm.beginTime = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd') + " " + "00:00:00"
          this.pageQuerm.endTime = this.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
        } else {
          this.pageQuerm[`beginTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(e.value).setDate(1),
            'yyyy-mm-dd')
          this.pageQuerm.beginTime = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd') + " " + "00:00:00"
          const date = new Date(e.value);
          const year = date.getFullYear();
          const month = date.getMonth() + 1; // 月份从0开始计算,需要加1
          const lastDay = new Date(year, month, 0)
          this.pageQuerm.endTime = this.$u.timeFormat(new Date(lastDay), 'yyyy-mm-dd') + " " + "23:59:59"
          this.pageQuerm[`endTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(lastDay), 'yyyy-mm-dd')
        }
        if (this.typeItem == 1) {
          this.getServerData()
        }
        if (this.typeItem == 2) {
          this.getCompanyCount()
        }
        if (this.typeItem == 3) {
          this.getServerData1()
        }
        this.show = false
      },
      openDate(item) {
        this.typeItem = item
        this.currentValue = new Date().getTime()
        this.show = true
      },
      lookMore() {
        this.pageQuerm.pageNum++
        const value = this.pageQuerm.pageNum * this.pageQuerm.pageSize
        const data = this.originData.slice((this.pageQuerm.pageNum - 1) * this.pageQuerm.pageSize, value)
        this.listData.push(...data)
        if (value >= this.pageQuerm.total) {
          this.showMore = false
        }
      },
      // 获取执法信息
      getTotalInfo() {
        getTotalInfo().then(val => {
          // console.log(val)
          this.infoData = val.data.data
        })
      },
      // 执法次数部门
      getServerData() {
        getDeptCount(this.pageQuerm).then(val => {
          const value = val.data.data
          const label = value.map(item => {
            return item.k
          })
          const max = Math.max(value)
          this.likeData = val.data.data.map(item => {
            const progress = (item / max).toFixed(2)
            return {
              ...item,
              progress
            }
          })
          const data = value.map(item => item.v)
          let res = {
            categories: label,
            series: [{
              name: "执法次数",
              data: data,
            }]
          };
          this.chartData = JSON.parse(JSON.stringify(res));
        })
      },
      // 企业被执法次数排行
      getCompanyCount() {
        getCompanyCount(this.pageQuerm).then(val => {
          this.listData = val.data.data.slice(0, this.pageQuerm.pageSize)
          this.originData = val.data.data
          this.pageQuerm.total = val.data.data.length
          if (this.pageQuerm.total <= this.pageQuerm.pageSize) {
            this.showMore = false
          }
        })
      },
      getServerData1() {
        getEnforceTypeCount(this.pageQuerm).then(val => {
          const data = val.data.data.map(item => {
            return {
              name: item.k,
              value: item.v,
            }
          })
          let res = {
            series: [{
              data: data,
            }]
          };
          this.chartData1 = JSON.parse(JSON.stringify(res));
        })
      },
    }
  }
</script>
<style>
    page {
        background-color: #F4F4F4FF;
    }
  page {
    background-color: #F4F4F4FF;
  }
</style>
<style lang="scss" scoped>
    @import "./dataLook.scss";
  @import "./dataLook.scss";
</style>
policy/policyApply/policyApply.vue
@@ -1,94 +1,95 @@
<template>
    <view class="page-box">
        <view class="content-box">
            <view class="form">
                <view class="form-item">
                    <view class="form-label require">
                        执法主题
                    </view>
                    <input type="text" placeholder="请输入" v-model.trim="form.enforceReason"/>
                </view>
                <view class="form-item">
                    <view class="form-label require">
                        执法对象
                    </view>
                    <view class="input" @click="search">
                        <input type="text" style="width: 80%;" disabled  placeholder="请选择" :value="form.companyName"/>
                        <u-icon name="arrow-right"></u-icon>
                        <!-- <u-text text='搜索' type="primary" style="width: 20%;" @click="search"></u-text> -->
                    </view>
                </view>
                <view class="form-item">
                    <view class="form-label require">
                        执法时间
                    </view>
                    <view class="input" @click="showTimeFun">
                        <input type="text" placeholder="请选择" disabled v-model.trim="form.planTimeStr"/>
                        <u-icon name="arrow-right"></u-icon>
                    </view>
                </view>
                <view class="form-item" @click="showType = true">
                    <view class="form-label require">
                        执法类型
                    </view>
                    <view class="input">
                        <input type="text" placeholder="请选择" v-model.trim="form.enforceTypeName" disabled/>
                        <u-icon name="arrow-right"></u-icon>
                    </view>
                </view>
                <view class="form-item last">
                    <view class="form-label require">
                        执法内容
                    </view>
                    <view class="back">
                        <u--textarea :height="120" v-model.trim="form.enforceContent" placeholder="请输入" count maxlength="500"></u--textarea>
                    </view>
                </view>
            </view>
        </view>
        <view class="content-box">
            <view class="form ">
                <view class="form-item">
                    <view class="form-label">
                        执法人员
                    </view>
                    <input type="text" placeholder="请输入" v-model.trim="form.applyUser" disabled/>
                </view>
                <view class="form-item">
                    <view class="form-label">
                        执法部门
                    </view>
                    <!-- <input type="text" placeholder="请输入" v-model.trim="form.applyDeptName" disabled/> -->
                    <view style="width: 60%;">{{form.applyDeptName}}</view>
                </view>
                <view class="form-item sui" style="align-items: flex-start;" @click="openPer">
                    <view class="form-label  ">
                        随行人员
                    </view>
                    <view>
                        <view style="color: #a2a2a2;" class="placeholder" v-if="!form.peers.length">请选择</view>
                        <view v-else>
                            <view style="margin-bottom: 20rpx;" v-for="(item,index) in form.peers"  :key="index">
                                {{item.peerUser}}({{item.peerDeptName}})
                            </view>
                        </view>
                    </view>
                    <!-- <u-textarea  border="none" disabled style="padding: 0;" placeholder="请选择" ></u-textarea> -->
                </view>
                <view class="form-item down-2">
                    <view class="form-label">
                        是否通知企业
                    </view>
                    <u-switch v-model="form.isNoticeCompany" :activeValue="1" :inactiveValue="0"></u-switch>
                </view>
            </view>
        </view>
        <view class="down-options">
            <view class="button record" @click="applyRecord">申请记录</view>
            <view class="button submit" @click="submitApply">提交申请</view>
        </view>
        <!-- <u-form label-position="top" label-width="120px">
  <view class="page-box">
    <view class="content-box">
      <view class="form">
        <view class="form-item">
          <view class="form-label require">
            执法主题
          </view>
          <input type="text" placeholder="请输入" v-model.trim="form.enforceReason" />
        </view>
        <view class="form-item">
          <view class="form-label require">
            执法对象
          </view>
          <view class="input" @click="search">
            <input type="text" style="width: 80%;" disabled placeholder="请选择" :value="form.companyName" />
            <u-icon name="arrow-right"></u-icon>
            <!-- <u-text text='搜索' type="primary" style="width: 20%;" @click="search"></u-text> -->
          </view>
        </view>
        <view class="form-item">
          <view class="form-label require">
            执法时间
          </view>
          <view class="input" @click="showTimeFun">
            <input type="text" placeholder="请选择" disabled v-model.trim="form.planTimeStr" />
            <u-icon name="arrow-right"></u-icon>
          </view>
        </view>
        <view class="form-item" @click="showType = true">
          <view class="form-label require">
            执法类型
          </view>
          <view class="input">
            <input type="text" placeholder="请选择" v-model.trim="form.enforceTypeName" disabled />
            <u-icon name="arrow-right"></u-icon>
          </view>
        </view>
        <view class="form-item last">
          <view class="form-label require">
            执法内容
          </view>
          <view class="back">
            <u--textarea :height="120" v-model.trim="form.enforceContent" placeholder="请输入" count
              maxlength="500"></u--textarea>
          </view>
        </view>
      </view>
    </view>
    <view class="content-box">
      <view class="form ">
        <view class="form-item">
          <view class="form-label">
            执法人员
          </view>
          <input type="text" placeholder="请输入" v-model.trim="form.applyUser" disabled />
        </view>
        <view class="form-item">
          <view class="form-label">
            执法部门
          </view>
          <!-- <input type="text" placeholder="请输入" v-model.trim="form.applyDeptName" disabled/> -->
          <view style="width: 60%;">{{form.applyDeptName}}</view>
        </view>
        <view class="form-item sui" style="align-items: flex-start;" @click="openPer">
          <view class="form-label  ">
            随行人员
          </view>
          <view>
            <view style="color: #a2a2a2;" class="placeholder" v-if="!form.peers.length">请选择</view>
            <view v-else>
              <view style="margin-bottom: 20rpx;" v-for="(item,index) in form.peers" :key="index">
                {{item.peerUser}}({{item.peerDeptName}})
              </view>
            </view>
          </view>
          <!-- <u-textarea  border="none" disabled style="padding: 0;" placeholder="请选择" ></u-textarea> -->
        </view>
        <view class="form-item down-2">
          <view class="form-label">
            是否通知企业
          </view>
          <u-switch v-model="form.isNoticeCompany" :activeValue="1" :inactiveValue="0"></u-switch>
        </view>
      </view>
    </view>
    <view class="down-options">
      <view class="button record" @click="applyRecord">申请记录</view>
      <view class="button submit" @click="submitApply">提交申请</view>
    </view>
    <!-- <u-form label-position="top" label-width="120px">
            <u-form-item label="执法主题">
                <u-input placeholder="请输入" v-model="form.enforceReason"></u-input>
            </u-form-item>
@@ -121,359 +122,378 @@
                <u-switch v-model="form.isNoticeCompany" :activeValue="1" :inactiveValue="0"></u-switch>
            </u-form-item>
        </u-form> -->
<!--         <u-button @click="submitApply">提交申请</u-button>
    <!--         <u-button @click="submitApply">提交申请</u-button>
        <u-button @click="applyRecord">申请记录</u-button> -->
        <!-- <u-picker :show="show"   @close="show = false" :immediateChange="true" @confirm="confirmSearch" @cancel="show = false" :columns="columns" keyName="companyName">
    <!-- <u-picker :show="show"   @close="show = false" :immediateChange="true" @confirm="confirmSearch" @cancel="show = false" :columns="columns" keyName="companyName">
        
            
        </u-picker> -->
        <perPicker ref="perPicker" @setCompany="setCompany" :immediateChange="true" @confirm="confirmSearch" @cancel="show = false" :columns="columns" keyName="companyName"></perPicker>
             <yt-dateTimePicker
                  ref="myPicker"
                  @submit="confirmTime"
                  :time-init="timeInit"
                  :start-year="year"
                  :startMonth="month"
                  :time-hide="[true, true, true, true, false, false]"
                />
            <u-picker :show="showType" @close="showType = false" @confirm="confirmType" @cancel="showType = false" :columns="columnsType" keyName="dictLabel"></u-picker>
            <perPage :list="list" ref="perpage" @selectValue="selectValue"></perPage>
    </view>
    <perPicker ref="perPicker" @setCompany="setCompany" :immediateChange="true" @confirm="confirmSearch"
      @cancel="show = false" :columns="columns" keyName="companyName"></perPicker>
    <yt-dateTimePicker ref="myPicker" @submit="confirmTime" :time-init="timeInit" :start-year="year" :startMonth="month"
      :time-hide="[true, true, true, true, false, false]" />
    <u-picker :show="showType" @close="showType = false" @confirm="confirmType" @cancel="showType = false"
      :columns="columnsType" keyName="dictLabel"></u-picker>
    <perPage :list="list" ref="perpage" @selectValue="selectValue"></perPage>
  </view>
</template>
<script>
    import { orderAdd, companyList, enforceList } from '@/api/policy.js'
    import { getInfo } from '@/api/auth.js'
    import { getDicts } from '@/api/data'
    import perPage from './perPage'
    import perPicker from './perPicker'
    import YtDateTimePicker from "uni_modules/yt-dateTimePicker/components/yt-dateTimePicker/yt-dateTimePicker.vue"
    export default {
        components: {
            YtDateTimePicker,
            perPage,
            perPicker
        },
        data() {
            return {
                currentTime: "",
                form: {
                    applyUser: '',
                    applyDeptName: '',
                    enforceType: 1,
                    isNoticeCompany: 0,
                    // regionReason: 0,
                    planTimeStr: '',
                    peers: [],
                    orderStatus: 1,
                    enforceContent: "",
                    companyName: ""
                },
                show: false,
                columns: [],
                showTime: false,
                columnsType: [],
                showType: false,
                minDate: '',
                year: '',
                endYear: '',
                timeInit: '',
                list: [],
                startTime: "",
                month: ''
            }
        },
        onLoad() {
            this.year = new Date().getFullYear()
            this.month = new Date().getMonth() + 1
            this.endYear = this.year + 5
            this.minDate = new Date().valueOf()
            this.timeInit = this.$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM')
            this.startTime =this.$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM')
            this.getInfo()
            this.getDicts()
            this.enforceList()
        },
        onShow() {
        },
        methods: {
            enforceList() {
                enforceList().then(val => {
                    this.list = val.data.data
                })
            },
            getDicts() {
                getDicts('enforce_type').then(val =>{
                    this.columnsType = [val.data.data]
                })
            },
            getInfo() {
                getInfo().then(val => {
                    const value = val.data.data
                    // this.form.applyName = value.nickName
                    this.form.applyUser = value.nickName
                    this.form.applyId = value.userId
                    this.form.applyDeptName = value.dept.deptName
                    this.form.applyDeptId = value.dept.deptId
                    this.form.applyPhone = value.phonenumber
                })
            },
            timeFilter(mode, options) {
                let d = new Date()
                // console.log(d.getFullYear());
                if(mode === 'year'){
                    return options.filter((option)=>option>= d.getFullYear())
                }
                if(mode === 'month'){
                    return options.filter((option)=>option>= d.getMonth()+1)
                }
                if (mode === 'minute') {
                    return options.filter((option) => option === '00' || option === '30');
                }
                return options;
            },
            authFile() {
                if(!this.form.enforceReason || !this.form.enforceReason.replace(/\s+/g, "")){
                    return '请填写主题'
                }
                if(!this.form.companyName || !this.form.companyName.replace(/\s+/g, "")){
                    return '请选择执法对象'
                }
                // if(!this.form.companyId) {
                //     return '请点击搜索确认执法对象'
                // }
                if(!this.form.planTimeStr) {
                    return '请填写执法时间'
                }
                if(!this.form.enforceTypeName){
                    return '请选择执法类型'
                }
                console.log(!this.form.enforceContent.replace(/\s+/g, ""))
                if(!this.form.enforceContent || !this.form.enforceContent.replace(/\s+/g, "")) {
                    return '请填写执法内容'
                }
                // if(!this.form.peers.length){
                //     return '请选择随行人员'
                // }
                return ''
            },
            submitApply(){
                const res =    this.authFile()
                if(res){
                    uni.showToast({
                        title: res,
                        icon: 'none'
                    })
                    return
                }
                orderAdd(this.form).then(val => {
                    if(val.data.code == 200) {
                        uni.showToast({
                            title: '提交成功',
                            icon: 'none'
                        })
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 500)
                    }
                })
            },
            applyRecord() {
                uni.navigateTo({
                    url:`/policy/applyRecord/applyRecord`
                })
            },
            search() {
                // companyList({companyName: this.form.companyName}).then(val => {
                //     if(val.data.code == 200){
                //         if(!val.data.rows.length || !val.data.rows){
                //             uni.showToast({
                //                 title: '没有符合的数据,请检查输入的执法对象',
                //                 icon: 'none',
                //                 duration: 3000
                //             })
                //         } else {
                //         }
                //     }
                // })
                this.$refs.perPicker.open()
            },
            confirmSearch(e){
                let value = e
                // const value =    this.columns[0].find(item => item.companyName == e.value[0].companyName)
                this.form.companyName = e.companyName
                this.form.companyCode = value.companyCode
                this.form.companyId     = value.companyId
                this.form.companyPhone = value.companyPhone
                this.form.companyUser = value.companyUser
                this.form.companyAddress = value.companyAddress
                // console.log(this.form.companyName)
            },
            setCompany(e) {
                this.form.companyName = e
                this.form.companyCode = ''
                this.form.companyId     = ''
                this.form.companyPhone = ''
                this.form.companyUser = ''
                this.form.companyAddress = ''
            },
            confirmTime(e) {
                this.form.planTime = e.year + '-' + e.month+ '-' + + e.day + ' ' + e.hour + ":" + "00:00"
                this.form.planTimeStr = e.year + '-' + e.month+ '-' + + e.day + ' ' + e.hour + ":" + "00"
                this.timeInit = this.$u.timeFormat(new Date(this.form.planTimeStr), 'yyyy-mm-dd hh:MM')
            },
            showTimeFun() {
                // this.showTime = true
                          this.$refs.myPicker.show();
  import {
    orderAdd,
    companyList,
    enforceList
  } from '@/api/policy.js'
  import {
    getInfo
  } from '@/api/auth.js'
  import {
    getDicts
  } from '@/api/data'
  import perPage from './perPage'
  import perPicker from './perPicker'
  import YtDateTimePicker from "uni_modules/yt-dateTimePicker/components/yt-dateTimePicker/yt-dateTimePicker.vue"
  export default {
    components: {
      YtDateTimePicker,
      perPage,
      perPicker
    },
    data() {
      return {
        currentTime: "",
        form: {
          applyUser: '',
          applyDeptName: '',
          enforceType: 1,
          isNoticeCompany: 0,
          // regionReason: 0,
          planTimeStr: '',
          peers: [],
          orderStatus: 1,
          enforceContent: "",
          companyName: ""
        },
        show: false,
        columns: [],
        showTime: false,
        columnsType: [],
        showType: false,
        minDate: '',
        year: '',
        endYear: '',
        timeInit: '',
        list: [],
        startTime: "",
        month: ''
      }
    },
    onLoad() {
      this.year = new Date().getFullYear()
      this.month = new Date().getMonth() + 1
      this.endYear = this.year + 5
      this.minDate = new Date().valueOf()
      this.timeInit = this.$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM')
      this.startTime = this.$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM')
      this.getInfo()
      this.getDicts()
      this.enforceList()
    },
    onShow() {
            },
            sheet(){
            },
            confirmType(e){
                this.form.enforceType = e.value[0].dictCode
                this.form.enforceTypeName = e.value[0].dictLabel
                this.showType = false
            },
            changeValue(e, e1) {
                this.currentTime = e.value
            },
            openPer() {
                this.$refs.perpage.open(this.list)
            },
            selectValue(value) {
                value.forEach(val => {
                    this.form.peers.push(val)
                });
                this.form.peers = this.uniqueArrJson(this.form.peers,'peerId')
            },
            uniqueArrJson(arr,key) {
              var newobj = {},newArr = [];
              for(var i=0;i<arr.length;i++){
                  var item = arr[i];
                if(!newobj[item[key]]){
                      newobj[item[key]] = newArr.push(item);
                }
              }
              return newArr;
            }
        }
    }
    },
    methods: {
      enforceList() {
        enforceList().then(val => {
          this.list = val.data.data
        })
      },
      getDicts() {
        getDicts('enforce_type').then(val => {
          this.columnsType = [val.data.data]
        })
      },
      getInfo() {
        getInfo().then(val => {
          const value = val.data.data
          // this.form.applyName = value.nickName
          this.form.applyUser = value.nickName
          this.form.applyId = value.userId
          this.form.applyDeptName = value.dept.deptName
          this.form.applyDeptId = value.dept.deptId
          this.form.applyPhone = value.phonenumber
        })
      },
      timeFilter(mode, options) {
        let d = new Date()
        // console.log(d.getFullYear());
        if (mode === 'year') {
          return options.filter((option) => option >= d.getFullYear())
        }
        if (mode === 'month') {
          return options.filter((option) => option >= d.getMonth() + 1)
        }
        if (mode === 'minute') {
          return options.filter((option) => option === '00' || option === '30');
        }
        return options;
      },
      authFile() {
        if (!this.form.enforceReason || !this.form.enforceReason.replace(/\s+/g, "")) {
          return '请填写主题'
        }
        if (!this.form.companyName || !this.form.companyName.replace(/\s+/g, "")) {
          return '请选择执法对象'
        }
        // if(!this.form.companyId) {
        //     return '请点击搜索确认执法对象'
        // }
        if (!this.form.planTimeStr) {
          return '请填写执法时间'
        }
        if (!this.form.enforceTypeName) {
          return '请选择执法类型'
        }
        console.log(!this.form.enforceContent.replace(/\s+/g, ""))
        if (!this.form.enforceContent || !this.form.enforceContent.replace(/\s+/g, "")) {
          return '请填写执法内容'
        }
        // if(!this.form.peers.length){
        //     return '请选择随行人员'
        // }
        return ''
      },
      submitApply() {
        const res = this.authFile()
        if (res) {
          uni.showToast({
            title: res,
            icon: 'none'
          })
          return
        }
        orderAdd(this.form).then(val => {
          if (val.data.code == 200) {
            uni.showToast({
              title: '提交成功',
              icon: 'none'
            })
            setTimeout(() => {
              uni.navigateBack()
            }, 500)
          }
        })
      },
      applyRecord() {
        uni.navigateTo({
          url: `/policy/applyRecord/applyRecord`
        })
      },
      search() {
        // companyList({companyName: this.form.companyName}).then(val => {
        //     if(val.data.code == 200){
        //         if(!val.data.rows.length || !val.data.rows){
        //             uni.showToast({
        //                 title: '没有符合的数据,请检查输入的执法对象',
        //                 icon: 'none',
        //                 duration: 3000
        //             })
        //         } else {
        //         }
        //     }
        // })
        this.$refs.perPicker.open()
      },
      confirmSearch(e) {
        let value = e
        // const value =    this.columns[0].find(item => item.companyName == e.value[0].companyName)
        this.form.companyName = e.companyName
        this.form.companyCode = value.companyCode
        this.form.companyId = value.companyId
        this.form.companyPhone = value.companyPhone
        this.form.companyUser = value.companyUser
        this.form.companyAddress = value.companyAddress
        // console.log(this.form.companyName)
      },
      setCompany(e) {
        this.form.companyName = e
        this.form.companyCode = ''
        this.form.companyId = ''
        this.form.companyPhone = ''
        this.form.companyUser = ''
        this.form.companyAddress = ''
      },
      confirmTime(e) {
        this.form.planTime = e.year + '-' + e.month + '-' + +e.day + ' ' + e.hour + ":" + "00:00"
        this.form.planTimeStr = e.year + '-' + e.month + '-' + +e.day + ' ' + e.hour + ":" + "00"
        this.timeInit = this.$u.timeFormat(new Date(this.form.planTimeStr), 'yyyy-mm-dd hh:MM')
      },
      showTimeFun() {
        // this.showTime = true
        this.$refs.myPicker.show();
      },
      sheet() {
      },
      confirmType(e) {
        this.form.enforceType = e.value[0].dictCode
        this.form.enforceTypeName = e.value[0].dictLabel
        this.showType = false
      },
      changeValue(e, e1) {
        this.currentTime = e.value
      },
      openPer() {
        this.$refs.perpage.open(this.list)
      },
      selectValue(value) {
        value.forEach(val => {
          this.form.peers.push(val)
        });
        this.form.peers = this.uniqueArrJson(this.form.peers, 'peerId')
      },
      uniqueArrJson(arr, key) {
        var newobj = {},
          newArr = [];
        for (var i = 0; i < arr.length; i++) {
          var item = arr[i];
          if (!newobj[item[key]]) {
            newobj[item[key]] = newArr.push(item);
          }
        }
        return newArr;
      }
    }
  }
</script>
<style>
    page{
        background-color: #F4F4F4;
    }
    .sui  .u-textarea{
        padding: 0 !important;
    }
  page {
    background-color: #F4F4F4;
  }
  .sui .u-textarea {
    padding: 0 !important;
  }
</style>
<style scoped lang="scss">
.page-box{
    padding-bottom: 140rpx;
    .content-box{
        margin:20rpx 32rpx;
        background-color: white;
        padding: 24rpx;
        border-radius: 10rpx;
    }
    .form{
        .form-item{
            display: flex;
            justify-content: flex-start;
            align-items: center;
            border-bottom: 2rpx solid #F1F1F1;
            padding-bottom: 26rpx;
            margin-bottom: 24rpx;
            .form-label{
                font-size: 30rpx;
                color: #4A4E60;
                width: 40%;
            }
            .input{
                width: 60%;
                display: flex;
                justify-content: space-between;
                align-items: center;
            }
            .require{
                &::after{
                    content: '*';
                    color: #FF7500;
                }
            }
        }
        .down-2{
            margin-bottom: 0;
            padding-bottom: 0;
            border: none;
        }
        .last{
            margin-bottom: 0;
            padding-bottom: 0;
            border-bottom: none;
            display: block;
            .form-label{
                margin-bottom: 16rpx;
            }
            .back{
                ::v-deep .u-textarea{
                    background-color: #F4F4F4;
                    border: none;
                    .u-textarea__count{
                        background: none !important;
                    }
                }
            }
        }
    }
}
.down-options{
    background-color: white;
    position: fixed;
    bottom: 0;
    padding-bottom: 40rpx;
    width: 100%;
    padding: 22rpx 30rpx 40rpx;
    z-index: 800;
    display: flex;
    justify-content: space-between;
    align-items: center;
    box-sizing: border-box;
    .record{
        box-sizing: border-box;
        border-radius: 20rpx;
        border: 2rpx solid #ABD2FF;
        background: #F0F8FF;
        color: #1171E0;
        font-size: 32rpx;
        padding: 20rpx 30rpx;
        width: 30%;
        text-align: center;
    }
    .submit{
        border-radius: 20rpx;
        border: 2rpx solid #1171E0;
        background-color: #1171E0;
        color: white;
        width: 65%;
        box-sizing: border-box;
        padding: 20rpx 30rpx;
        text-align: center;
    }
}
.sui{
  .page-box {
    padding-bottom: 140rpx;
}
::v-deep  .u-checkbox-label--right >  text{
        line-height: 54rpx !important;
        margin-right: 15rpx;
}
</style>
    .content-box {
      margin: 20rpx 32rpx;
      background-color: white;
      padding: 24rpx;
      border-radius: 10rpx;
    }
    .form {
      .form-item {
        display: flex;
        justify-content: flex-start;
        align-items: center;
        border-bottom: 2rpx solid #F1F1F1;
        padding-bottom: 26rpx;
        margin-bottom: 24rpx;
        .form-label {
          font-size: 30rpx;
          color: #4A4E60;
          width: 40%;
        }
        .input {
          width: 60%;
          display: flex;
          justify-content: space-between;
          align-items: center;
        }
        .require {
          &::after {
            content: '*';
            color: #FF7500;
          }
        }
      }
      .down-2 {
        margin-bottom: 0;
        padding-bottom: 0;
        border: none;
      }
      .last {
        margin-bottom: 0;
        padding-bottom: 0;
        border-bottom: none;
        display: block;
        .form-label {
          margin-bottom: 16rpx;
        }
        .back {
          ::v-deep .u-textarea {
            background-color: #F4F4F4;
            border: none;
            .u-textarea__count {
              background: none !important;
            }
          }
        }
      }
    }
  }
  .down-options {
    background-color: white;
    position: fixed;
    bottom: 0;
    padding-bottom: 40rpx;
    width: 100%;
    padding: 22rpx 30rpx 40rpx;
    z-index: 800;
    display: flex;
    justify-content: space-between;
    align-items: center;
    box-sizing: border-box;
    .record {
      box-sizing: border-box;
      border-radius: 20rpx;
      border: 2rpx solid #ABD2FF;
      background: #F0F8FF;
      color: #1171E0;
      font-size: 32rpx;
      padding: 20rpx 30rpx;
      width: 30%;
      text-align: center;
    }
    .submit {
      border-radius: 20rpx;
      border: 2rpx solid #1171E0;
      background-color: #1171E0;
      color: white;
      width: 65%;
      box-sizing: border-box;
      padding: 20rpx 30rpx;
      text-align: center;
    }
  }
  .sui {}
  ::v-deep .u-checkbox-label--right>text {
    line-height: 54rpx !important;
    margin-right: 15rpx;
  }
</style>
policy/scodePage/scodePage.vue
@@ -1,162 +1,166 @@
<template>
    <view>
          <u-navbar
                @rightClick="rightClick"
                :autoBack="true"
                :placeholder="false"
                bgColor="transparent"
                leftIconColor="white"
            >
            </u-navbar>
        <image src="/static/policy/back.png" mode="widthFix" class="back-image"></image>
        <view class="page-box">
            <view class="code-hint">
                <template v-if="color == 'green'">
                    <view>
                        <image src="/static/policy/success.png" mode="widthFix"></image>
                        <text>成功-绿码</text>
                    </view>
                    <view class="hint">
                        可对此企业进行核查
                    </view>
                </template>
                <template  v-if="color == 'red'">
                    <view >
                        <image src="/static/policy/error.png" mode="widthFix"></image>
                        <text>失败-红码</text>
                    </view>
                    <view class="hint">
                        请核查企业信息
                    </view>
                </template>
            </view>
            <!-- 二维码 -->
            <view class="qrcode">
                <image src="/static/policy/qrcode-border.png" class="border" mode="widthFix"></image>
                <image :src="uqrcodeImage" mode="widthFix" class="qrcode-1"></image>
                <view class="code-time">
                    <text>扫码时间:</text>{{$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM:ss')}}
                </view>
            </view>
            <view class="code">
                <view class="item">
                    <text class="label">执法人员</text>
                    <text class="value">{{userInfo.nickName}}</text>
                </view>
                <view class="write-border"></view>
                <view class="item">
                    <text class="label">执法部门</text>
                    <text class="value">{{userInfo.dept.deptName}}</text>
                </view>
            </view>
            <view class="hint-text">
                当前企业存在<text>{{list.length}}</text>条未完成的执法任务
            </view>
            <!-- <view class="hint-text">
  <view>
    <u-navbar @rightClick="rightClick" :autoBack="true" :placeholder="false" bgColor="transparent"
      leftIconColor="white">
    </u-navbar>
    <image src="/static/policy/back.png" mode="widthFix" class="back-image"></image>
    <view class="page-box">
      <view class="code-hint">
        <template v-if="color == 'green'">
          <view>
            <image src="/static/policy/success.png" mode="widthFix"></image>
            <text>成功-绿码</text>
          </view>
          <view class="hint">
            可对此企业进行核查
          </view>
        </template>
        <template v-if="color == 'red'">
          <view>
            <image src="/static/policy/error.png" mode="widthFix"></image>
            <text>失败-红码</text>
          </view>
          <view class="hint">
            请核查企业信息
          </view>
        </template>
      </view>
      <!-- 二维码 -->
      <view class="qrcode">
        <image src="/static/policy/qrcode-border.png" class="border" mode="widthFix"></image>
        <image :src="uqrcodeImage" mode="widthFix" class="qrcode-1"></image>
        <view class="code-time">
          <text>扫码时间:</text>{{$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM:ss')}}
        </view>
      </view>
      <view class="code">
        <view class="item">
          <text class="label">执法人员</text>
          <text class="value">{{userInfo.nickName}}</text>
        </view>
        <view class="write-border"></view>
        <view class="item">
          <text class="label">执法部门</text>
          <text class="value">{{userInfo.dept.deptName}}</text>
        </view>
      </view>
      <view class="hint-text">
        当前企业存在<text>{{list.length}}</text>条未完成的执法任务
      </view>
      <!-- <view class="hint-text">
                当前企业未完成的执法任务
            </view> -->
            <view class="down-block">
                <swiper style="height: 500rpx;" :indicator-dots="false"  :interval="3000" :duration="1000">
                    <swiper-item v-for="(item,index) in list" :key="index">
                        <view class="box">
                            <view class="title">{{item.enforceReason}}</view>
                            <view class="user-news">
                                <text>{{item.applyUser}}</text>
                                <view class="driver"></view>
                                <text>{{item.applyDeptName}}</text>
                            </view>
                            <view class="font-13">
                                <text>执法对象:</text>{{item.companyName}}
                            </view>
                            <view class="border"></view>
                            <view class="font-12 margin-bottom">
                                <text>执法时间:</text>{{item.planTime}}
                            </view>
                            <view class="font-12">
                                <text>申请时间:</text>{{item.applyTime}}
                            </view>
                            <view class="button-entery">
                                <view class="button" v-if="item.isSelect" @click="doScanOrder(item.orderId, index)">确认执法</view>
                            </view>
                        </view>
                    </swiper-item>
                </swiper>
            </view>
        </view>
        <uqrcode class="hide-canvas" :size="470" sizeUnit="rpx" v-if="companyCode" ref="uqrcode" canvas-id="qrcode" :value="companyCode" :options="{ backgroundColor: color,useDynamicSize: true,  areaColor: '#ffffff', foregroundColor: '#ffffff' }"></uqrcode>
    </view>
      <view class="down-block">
        <swiper style="height: 500rpx;" :indicator-dots="false" :interval="3000" :duration="1000">
          <swiper-item v-for="(item,index) in list" :key="index">
            <view class="box">
              <view class="title">{{item.enforceReason}}</view>
              <view class="user-news">
                <text>{{item.applyUser}}</text>
                <view class="driver"></view>
                <text>{{item.applyDeptName}}</text>
              </view>
              <view class="font-13">
                <text>执法对象:</text>{{item.companyName}}
              </view>
              <view class="border"></view>
              <view class="font-12 margin-bottom">
                <text>执法时间:</text>{{item.planTime}}
              </view>
              <view class="font-12">
                <text>申请时间:</text>{{item.applyTime}}
              </view>
              <view class="button-entery">
                <view class="button" v-if="item.isSelect" @click="doScanOrder(item.orderId, index)">确认执法</view>
              </view>
            </view>
          </swiper-item>
        </swiper>
      </view>
    </view>
    <uqrcode class="hide-canvas" :size="470" sizeUnit="rpx" v-if="companyCode" ref="uqrcode" canvas-id="qrcode"
      :value="companyCode"
      :options="{ backgroundColor: color,useDynamicSize: true,  areaColor: '#ffffff', foregroundColor: '#ffffff' }">
    </uqrcode>
  </view>
</template>
<script>
    import { getScanList, doScanOrder } from '@/api/policy.js'
    import { getInfo } from '@/api/auth.js'
    export default {
        data() {
            return {
                companyCode: '',
                uqrcodeImage: '',
                list: [],
                userInfo: {},
                color: '',
            }
        },
        onReady() {
        },
        onLoad(options) {
            this.getScanList(options.code)
            this.getInfo()
        },
        methods: {
            getScanList(companyCode){
                getScanList({companyCode}).then(val => {
                    this.list = val.data.data.map(item => {
                        item['isSelect'] = true
                        return item
                    })
                    if(this.list.length) {
                        this.color = 'green'
                    } else {
                        this.color = 'red'
                    }
                    this.companyCode = companyCode
                    setTimeout(() => {
                        this.$refs.uqrcode.toTempFilePath({
                          success: res => {
                            this.uqrcodeImage = res.tempFilePath
                          }
                        });
                    }, 500)
                })
            },
            getInfo() {
                getInfo().then(val => {
                    console.log(val.data.data)
                    this.userInfo = val.data.data
                })
            },
            doScanOrder(item, index) {
                doScanOrder(item).then(val => {
                    if(val.data.code == 200) {
                        uni.showToast({
                            title: '确认执法成功',
                            icon: 'none'
                        })
                        this.list[index].isSelect = false
                    }
                })
            }
        }
    }
  import {
    getScanList,
    doScanOrder
  } from '@/api/policy.js'
  import {
    getInfo
  } from '@/api/auth.js'
  export default {
    data() {
      return {
        companyCode: '',
        uqrcodeImage: '',
        list: [],
        userInfo: {},
        color: '',
      }
    },
    onReady() {
    },
    onLoad(options) {
      this.getScanList(options.code)
      this.getInfo()
    },
    methods: {
      getScanList(companyCode) {
        getScanList({
          companyCode
        }).then(val => {
          this.list = val.data.data.map(item => {
            item['isSelect'] = true
            return item
          })
          if (this.list.length) {
            this.color = 'green'
          } else {
            this.color = 'red'
          }
          this.companyCode = companyCode
          setTimeout(() => {
            this.$refs.uqrcode.toTempFilePath({
              success: res => {
                this.uqrcodeImage = res.tempFilePath
              }
            });
          }, 500)
        })
      },
      getInfo() {
        getInfo().then(val => {
          this.userInfo = val.data.data
        })
      },
      doScanOrder(item, index) {
        doScanOrder(item).then(val => {
          if (val.data.code == 200) {
            uni.showToast({
              title: '确认执法成功',
              icon: 'none'
            })
            this.list[index].isSelect = false
          }
        })
      }
    }
  }
</script>
<style>
    page{
        padding-bottom: 20rpx;
    }
  page {
    padding-bottom: 20rpx;
  }
</style>
<style lang="scss" scoped>
@import "./scodePage.scss";
</style>
  @import "./scodePage.scss";
</style>
policy/translate/translate.vue
@@ -1,248 +1,262 @@
<template>
    <view class="page-box">
        <view class="list">
            <view class="select-box" @click="setIsSelect(index)" v-for="(item,index) in list" :key="index" :class="{start: isJudege}">
                <view class="select-image" v-if="isJudege" >
                    <image src="/static/policy/checkbox.png" mode="widthFix" v-show="item.isSelect"></image>
                    <image src="/static/policy/none-checkbox.png" mode="widthFix" v-show="!item.isSelect"></image>
                </view>
                <view class="list-item">
                    <view class="top-title">
                        <text>{{item.enforceReason}}</text>
                        <text class="status">待审批</text>
                    </view>
                    <view class="user-info">
                        <text>{{item.applyUser}}</text>
                    <!--     <view class="driver"></view>
  <view class="page-box">
    <view class="list">
      <view class="select-box" @click="setIsSelect(index)" v-for="(item,index) in list" :key="index"
        :class="{start: isJudege}">
        <view class="select-image" v-if="isJudege">
          <image src="/static/policy/checkbox.png" mode="widthFix" v-show="item.isSelect"></image>
          <image src="/static/policy/none-checkbox.png" mode="widthFix" v-show="!item.isSelect"></image>
        </view>
        <view class="list-item">
          <view class="top-title">
            <text>{{item.enforceReason}}</text>
            <text class="status">待审批</text>
          </view>
          <view class="user-info">
            <text>{{item.applyUser}}</text>
            <!--     <view class="driver"></view>
                        <text>{{item.checkDeptName}}</text> -->
                    </view>
                    <view class="user-info">
                        <!-- <text>{{item.applyUser}}</text>
          </view>
          <view class="user-info">
            <!-- <text>{{item.applyUser}}</text>
                        <view class="driver"></view> -->
                        <text>{{item.checkDeptName}}</text>
                    </view>
                    <view class="set-line">
                        <text>执法对象:</text>{{item.companyName}}
                    </view>
                    <view class="line"></view>
                    <view class="set-flex set-start set-flex-content-between">
                        <view style="width: 75%;">
                            <view class="set-line1">
                                <text>执法时间:</text>{{item.planTime}}
                            </view>
                            <view class="set-line1">
                                <text>申请时间:</text>{{item.applyTime}}
                            </view>
                            <view class="look" v-if="item.show">
                                <view class="set-line">
                                    <text>执法主题:</text>{{item.enforceReason}}
                                </view>
                                <view class="set-line">
                                    <text>执法类型:</text>{{handlerType(item.enforceType)}}
                                </view>
                                <view class="set-line set-line-flex">
                                    <text>执法内容:</text> <view>{{item.enforceContent}}</view>
                                </view>
                            </view>
                        </view>
                        <view class="button" v-if="!isJudege" @click.self="goStartJudeg([item.orderId])">
                            审批
                        </view>
                    </view>
                    <view @click="showItem(item)" class="icon" style="text-align: center;display: flex;justify-content: center;align-items: center;">
                        <u-icon name="arrow-down" color="#bfbfbf" size="20" v-if="!item.show"></u-icon>
                        <u-icon name="arrow-up" color="#bfbfbf" size="20" v-else></u-icon>
                    </view>
                </view>
            </view>
            <u-empty v-if="!list.length" style="margin-top: 200rpx;"></u-empty>
        </view>
        <view class="down" v-if="!isJudege">
            <view class="button" @click="goRecord">审批记录</view>
            <view class="button more-options" @click="moreJudeg">批量审批</view>
        </view>
        <view class="down judge" v-else>
            <view class="select-image"  @click="allSelect()">
                <image src="/static/policy/checkbox.png" mode="widthFix" v-show="isAllSelect"></image>
                <image src="/static/policy/none-checkbox.png" mode="widthFix" v-show="!isAllSelect"></image>
                <view class="show-check">全选</view>
            </view>
            <view class="button more-options start-option" @click="moreStart">立即审批</view>
        </view>
        <popupCom ref="popup" @entery="entery" @cancel="cancelSelect"></popupCom>
    </view>
            <text>{{item.checkDeptName}}</text>
          </view>
          <view class="set-line">
            <text>执法对象:</text>{{item.companyName}}
          </view>
          <view class="line"></view>
          <view class="set-flex set-start set-flex-content-between">
            <view style="width: 75%;">
              <view class="set-line1">
                <text>执法时间:</text>{{item.planTime}}
              </view>
              <view class="set-line1">
                <text>申请时间:</text>{{item.applyTime}}
              </view>
              <view class="look" v-if="item.show">
                <view class="set-line">
                  <text>执法主题:</text>{{item.enforceReason}}
                </view>
                <view class="set-line">
                  <text>执法类型:</text>{{handlerType(item.enforceType)}}
                </view>
                <view class="set-line set-line-flex">
                  <text>执法内容:</text>
                  <view>{{item.enforceContent}}</view>
                </view>
              </view>
            </view>
            <view class="button" v-if="!isJudege" @click.self="goStartJudeg([item.orderId])">
              审批
            </view>
          </view>
          <view @click="showItem(item)" class="icon"
            style="text-align: center;display: flex;justify-content: center;align-items: center;">
            <u-icon name="arrow-down" color="#bfbfbf" size="20" v-if="!item.show"></u-icon>
            <u-icon name="arrow-up" color="#bfbfbf" size="20" v-else></u-icon>
          </view>
        </view>
      </view>
      <u-empty v-if="!list.length" style="margin-top: 200rpx;"></u-empty>
    </view>
    <view class="down" v-if="!isJudege">
      <view class="button" @click="goRecord">审批记录</view>
      <view class="button more-options" @click="moreJudeg">批量审批</view>
    </view>
    <view class="down judge" v-else>
      <view class="select-image" @click="allSelect()">
        <image src="/static/policy/checkbox.png" mode="widthFix" v-show="isAllSelect"></image>
        <image src="/static/policy/none-checkbox.png" mode="widthFix" v-show="!isAllSelect"></image>
        <view class="show-check">全选</view>
      </view>
      <view class="button more-options start-option" @click="moreStart">立即审批</view>
    </view>
    <popupCom ref="popup" @entery="entery" @cancel="cancelSelect"></popupCom>
  </view>
</template>
<script>
    import popupCom from '@/policy/components/popup.vue'
    import { checkLogList, checkUpd } from '@/api/policy.js'
    import { getDicts } from '@/api/data.js'
    export default {
        components: {
            popupCom
        },
        data() {
            return {
                isJudege: false,
                list: [
                ],
                total: 1,
                queryms: {
                    pageNum: 1,
                    pageSize: 10,
                    orderStatus: 1,
                    isAsc: "desc",
                    orderByColumn: "apply_time"
                },
                recordList: [],
                typeList: []
            }
        },
        computed: {
            isAllSelect(){
                if(this.list.length) {
                    const value = this.list.every(item => item.isSelect)
                    return value
                } else {
                    return false
                }
            }
        },
        onLoad() {
            this.getDicts()
        },
        onReachBottom() {
            if(this.total == this.list.length) {
                return
            }
            this.queryms.pageNum++
            this.checkLogList()
        },
        methods: {
            showItem(item) {
                item.show = !item.show
            },
            handlerType(type) {
                const value = this.typeList.find(item => item.dictCode == type)
                if(value) {
                    return value.dictLabel
                } else {
                    return ''
                }
            },
            getDicts(type) {
                getDicts('enforce_type').then(val => {
                    this.typeList = val.data.data
                    this.checkLogList()
                })
            },
            goRecord() {
                uni.navigateTo({
                    url: `/policy/translateRecord/translateRecord`
                })
            },
            click() {
  import popupCom from '@/policy/components/popup.vue'
  import {
    checkLogList,
    checkUpd
  } from '@/api/policy.js'
  import {
    getDicts
  } from '@/api/data.js'
  export default {
    components: {
      popupCom
    },
    data() {
      return {
        isJudege: false,
        list: [
            },
            goStartJudeg(id) {
                this.recordList = id
                this.$refs.popup.open()
            },
            // 批量审批
            moreJudeg() {
                if(!this.list.length){
                    return
                }
                this.isJudege = true
            },
            setIsSelect(index){
                if(!this.isJudege) {
                    return
                }
                this.list[index].isSelect = !this.list[index].isSelect
            },
            allSelect() {
                const value = this.isAllSelect
                this.list.map(item => item.isSelect = !value)
            },
            moreStart() {
                const value = this.list.some(item => item.isSelect)
                if(value) {
                    const valueData = this.list.filter(item => item.isSelect).map(item => item.orderId)
                    // console.log(valueData)
                    this.goStartJudeg(valueData)
                } else {
                    uni.showToast({
                        title: '请选择审批',
                        icon: 'none'
                    })
                }
            },
            entery(form) {
                // 1企业审批,2执法单审批
                checkUpd({...form, ids: this.recordList, checkType: 2}).then(val => {
                    if(val.data.code == 200) {
                        uni.showToast({
                            title: '审批成功',
                            icon: 'none'
                        })
                    }
                    this.list = []
                    this.queryms.pageNum = 1
                    this.checkLogList()
                    this.$refs.popup.close()
                    this.isJudege = false
                })
            },
            cancelSelect() {
                this.isJudege = false
                this.list.map(item => item.isSelect = false)
            },
            checkLogList() {
                checkLogList(this.queryms).then(val => {
                    val.data.rows.map(item => {
                        item.isSelect = false
                        item.show = false
                    })
                    this.list = [...this.list,...val.data.rows ]
                    this.total = val.data.total
                })
            }
        }
    }
        ],
        total: 1,
        queryms: {
          pageNum: 1,
          pageSize: 10,
          orderStatus: 1,
          isAsc: "desc",
          orderByColumn: "apply_time"
        },
        recordList: [],
        typeList: []
      }
    },
    computed: {
      isAllSelect() {
        if (this.list.length) {
          const value = this.list.every(item => item.isSelect)
          return value
        } else {
          return false
        }
      }
    },
    onLoad() {
      this.getDicts()
    },
    onReachBottom() {
      if (this.total == this.list.length) {
        return
      }
      this.queryms.pageNum++
      this.checkLogList()
    },
    methods: {
      showItem(item) {
        item.show = !item.show
      },
      handlerType(type) {
        const value = this.typeList.find(item => item.dictCode == type)
        if (value) {
          return value.dictLabel
        } else {
          return ''
        }
      },
      getDicts(type) {
        getDicts('enforce_type').then(val => {
          this.typeList = val.data.data
          this.checkLogList()
        })
      },
      goRecord() {
        uni.navigateTo({
          url: `/policy/translateRecord/translateRecord`
        })
      },
      click() {
      },
      goStartJudeg(id) {
        this.recordList = id
        this.$refs.popup.open()
      },
      // 批量审批
      moreJudeg() {
        if (!this.list.length) {
          return
        }
        this.isJudege = true
      },
      setIsSelect(index) {
        if (!this.isJudege) {
          return
        }
        this.list[index].isSelect = !this.list[index].isSelect
      },
      allSelect() {
        const value = this.isAllSelect
        this.list.map(item => item.isSelect = !value)
      },
      moreStart() {
        const value = this.list.some(item => item.isSelect)
        if (value) {
          const valueData = this.list.filter(item => item.isSelect).map(item => item.orderId)
          // console.log(valueData)
          this.goStartJudeg(valueData)
        } else {
          uni.showToast({
            title: '请选择审批',
            icon: 'none'
          })
        }
      },
      entery(form) {
        // 1企业审批,2执法单审批
        checkUpd({
          ...form,
          ids: this.recordList,
          checkType: 2
        }).then(val => {
          if (val.data.code == 200) {
            uni.showToast({
              title: '审批成功',
              icon: 'none'
            })
          }
          this.list = []
          this.queryms.pageNum = 1
          this.checkLogList()
          this.$refs.popup.close()
          this.isJudege = false
        })
      },
      cancelSelect() {
        this.isJudege = false
        this.list.map(item => item.isSelect = false)
      },
      checkLogList() {
        checkLogList(this.queryms).then(val => {
          val.data.rows.map(item => {
            item.isSelect = false
            item.show = false
          })
          this.list = [...this.list, ...val.data.rows]
          this.total = val.data.total
        })
      }
    }
  }
</script>
<style>
    page {
        background-color: #F4F4F4;
    }
  page {
    background-color: #F4F4F4;
  }
</style>
<style lang="scss" scoped>
    @import "./translate.scss";
  @import "./translate.scss";
    ::v-deep .u-radio {
        margin-right: 84rpx !important;
    }
  ::v-deep .u-radio {
    margin-right: 84rpx !important;
  }
    ::v-deep .u-textarea {
        background-color: #F4F4F4 !important;
        border: none;
    }
    .set-line-flex{
        display: flex;
        justify-content: flex-start;
        align-items: flex-start;
        text{
            width: 28%;
            display: inline-block;
        }
        & > view{
            width: 70%;
        }
    }
  ::v-deep .u-textarea {
    background-color: #F4F4F4 !important;
    border: none;
  }
  .set-line-flex {
    display: flex;
    justify-content: flex-start;
    align-items: flex-start;
    text {
      width: 28%;
      display: inline-block;
    }
    &>view {
      width: 70%;
    }
  }
</style>
static/head.png

static/i04.png

yarn.lock
@@ -3,36 +3,43 @@
"@babel/runtime@^7.17.2":
  version "7.27.1"
  resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541"
  integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==
  "integrity" "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ=="
  "resolved" "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.6.tgz"
  "version" "7.23.6"
  dependencies:
    "regenerator-runtime" "^0.14.0"
copy-text-to-clipboard@^3.0.1:
  version "3.2.0"
  resolved "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b"
  integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==
"copy-text-to-clipboard@^3.0.1":
  "integrity" "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q=="
  "resolved" "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz"
  "version" "3.2.0"
core-js@^3.11.0:
  version "3.42.0"
  resolved "https://registry.npmmirror.com/core-js/-/core-js-3.42.0.tgz#edbe91f78ac8cfb6df8d997e74d368a68082fe37"
  integrity sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==
"core-js@^3.11.0":
  "integrity" "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag=="
  "resolved" "https://registry.npmmirror.com/core-js/-/core-js-3.34.0.tgz"
  "version" "3.34.0"
mutation-observer@^1.0.3:
  version "1.0.3"
  resolved "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz#42e9222b101bca82e5ba9d5a7acf4a14c0f263d0"
  integrity sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==
"mutation-observer@^1.0.3":
  "integrity" "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
  "resolved" "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz"
  "version" "1.0.3"
vconsole@^3.14.7:
  version "3.15.1"
  resolved "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz#569a8ab15f353259527bbcf004f02946b4482cff"
  integrity sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==
"regenerator-runtime@^0.14.0":
  "integrity" "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
  "resolved" "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
  "version" "0.14.1"
"vconsole@^3.14.7":
  "integrity" "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g=="
  "resolved" "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz"
  "version" "3.15.1"
  dependencies:
    "@babel/runtime" "^7.17.2"
    copy-text-to-clipboard "^3.0.1"
    core-js "^3.11.0"
    mutation-observer "^1.0.3"
    "copy-text-to-clipboard" "^3.0.1"
    "core-js" "^3.11.0"
    "mutation-observer" "^1.0.3"
weixin-js-sdk@^1.6.0:
  version "1.6.5"
  resolved "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz#01fe5220b91dbfe089fc0730d061be0e68271e6a"
  integrity sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ==
"weixin-js-sdk@^1.6.0":
  "integrity" "sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ=="
  "resolved" "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz"
  "version" "1.6.5"