Compare commits

..

10 Commits

Author SHA1 Message Date
guanj
82f8c366c9 微调 2025-08-22 15:54:57 +08:00
guanj
1231a39e87 修改报错 2025-08-19 10:21:12 +08:00
guanj
67ea86015a 添加时间 2025-08-19 09:50:23 +08:00
guanj
127adcd524 提交 2025-08-13 20:45:10 +08:00
guanj
c387cc9589 去除高德定位 2025-08-13 10:42:31 +08:00
guanj
032eed6768 app添加状态 2025-07-18 13:29:43 +08:00
guanj
998d017f5b 状态更具用户判断显示 2025-07-15 16:31:43 +08:00
guanj
4a0aa6472f App端添加治理模块主动询问状态功能; 2025-07-08 08:45:03 +08:00
GGJ
b32cb0b11f 修改app测试问题 2024-11-06 11:19:28 +08:00
GGJ
26066db3fd 修改 测试问题 2024-11-06 09:17:49 +08:00
27 changed files with 2805 additions and 3058 deletions

10
common/api/harmonic.js Normal file
View File

@@ -0,0 +1,10 @@
import request from '../js/request'
// apf-》获取模块状态
export function getModuleState(params) {
return request({
url: '/cs-harmonic-boot/data/getModuleState',
method: 'post',
data: params,
})
}

View File

@@ -1,23 +1,23 @@
const debug = false // true 是连地服务端本地false 是连接线上 const debug = false // true 是连地服务端本地false 是连接线上
const development = { const development = {
domain: 'http://192.168.1.22:10215', domain: 'http://192.168.1.62:10215',
} }
const production = { const production = {
domain: 'https://pqmcn.com:8092/api', domain: 'https://pqmcn.com:8092/api',
} }
const config = debug ? development : production const config = debug ? development : production
// #ifdef H5 // #ifdef H5
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
config.domain = '/api' config.domain = '/api'
} else { } else {
config.domain = window.location.origin config.domain = window.location.origin
} }
// #endif // #endif
config.static = config.domain + '/system-boot/file/download?filePath=' config.static = config.domain + '/system-boot/file/download?filePath='
export default config export default config

View File

@@ -1,14 +1,14 @@
// export const MQTT_IP = '192.168.1.24:10215/mqtt'//mqtt地址端口, 使用emqx时一定要加mqtt export const MQTT_IP = 'pqmcn.com:8085/mqtt'//mqtt地址端口, 使用emqx时一定要加mqtt
export const MQTT_IP = 'pqmcn.com:8085/mqtt'//mqtt地址端口, 使用emqx时一定要加mqtt // export const MQTT_IP = '192.168.1.24:8085/mqtt'//mqtt地址端口, 使用emqx时一定要加mqtt
const MQTT_USERNAME = 't_user'//mqtt用户名 const MQTT_USERNAME = 't_user'//mqtt用户名
const MQTT_PASSWORD = 'njcnpqs'//密码 const MQTT_PASSWORD = 'njcnpqs'//密码
export const MQTT_OPTIONS = { export const MQTT_OPTIONS = {
connectTimeout: 5000, connectTimeout: 5000,
clientId: '', clientId: '',
username: MQTT_USERNAME, username: MQTT_USERNAME,
password: MQTT_PASSWORD, password: MQTT_PASSWORD,
clean: false, clean: false,
Qos: 1, Qos: 1,
} }

View File

@@ -1,299 +1,321 @@
import request from './request' import request from './request'
import cache from './cacheKey.js' import cache from './cacheKey.js'
import { getImageUrl } from '@/common/api/basic' import { getImageUrl } from '@/common/api/basic'
import { apiUpdatePush } from '@/common/api/user' import { apiUpdatePush } from '@/common/api/user'
import { queryDictDataCache } from '../api/dictionary.js' import { queryDictDataCache } from '../api/dictionary.js'
import cacheKey from './cacheKey.js' import cacheKey from './cacheKey.js'
import config from '@/common/js/config' import config from '@/common/js/config'
import jsrsasign from 'jsrsasign' import jsrsasign from 'jsrsasign'
const toast = (title, duration = 1500, call, mask = false, icon = 'none') => { const toast = (title, duration = 1500, call, mask = false, icon = 'none') => {
if (Boolean(title) === false) { if (Boolean(title) === false) {
return return
} }
uni.showToast({ uni.showToast({
title, title,
duration, duration,
mask, mask,
icon, icon,
}) })
setTimeout(() => { setTimeout(() => {
call && call() call && call()
}, duration) }, duration)
} }
/** /**
* @description 格式化时间 * @description 格式化时间
* @param time * @param time
* @param cFormat * @param cFormat
* @returns {string|null} * @returns {string|null}
*/ */
function parseTime(time, cFormat) { function parseTime(time, cFormat) {
if (arguments.length === 0) { if (arguments.length === 0) {
return null return null
} }
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date let date
if (typeof time === 'object') { if (typeof time === 'object') {
date = time date = time
} else { } else {
if (typeof time === 'string' && /^[0-9]+$/.test(time)) { if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
time = parseInt(time) time = parseInt(time)
} }
if (typeof time === 'number' && time.toString().length === 10) { if (typeof time === 'number' && time.toString().length === 10) {
time = time * 1000 time = time * 1000
} }
date = new Date(time) date = new Date(time)
} }
const formatObj = { const formatObj = {
y: date.getFullYear(), y: date.getFullYear(),
m: date.getMonth() + 1, m: date.getMonth() + 1,
d: date.getDate(), d: date.getDate(),
h: date.getHours(), h: date.getHours(),
i: date.getMinutes(), i: date.getMinutes(),
s: date.getSeconds(), s: date.getSeconds(),
a: date.getDay(), a: date.getDay(),
} }
return format.replace(/{([ymdhisa])+}/g, (result, key) => { return format.replace(/{([ymdhisa])+}/g, (result, key) => {
let value = formatObj[key] let value = formatObj[key]
if (key === 'a') { if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value] return ['日', '一', '二', '三', '四', '五', '六'][value]
} }
if (result.length > 0 && value < 10) { if (result.length > 0 && value < 10) {
value = '0' + value value = '0' + value
} }
return value || 0 return value || 0
}) })
} }
/** /**
* @description 格式化时间 * @description 格式化时间
* @param time * @param time
* @param option * @param option
* @returns {string} * @returns {string}
*/ */
function formatTime(time, option) { function formatTime(time, option) {
if (('' + time).length === 10) { if (('' + time).length === 10) {
time = parseInt(time) * 1000 time = parseInt(time) * 1000
} else { } else {
time = +time time = +time
} }
if (option) { if (option) {
return parseTime(time, option) return parseTime(time, option)
} else { } else {
const d = new Date(time) const d = new Date(time)
const now = Date.now() const now = Date.now()
const diff = (now - d) / 1000 const diff = (now - d) / 1000
if (diff < 30) { if (diff < 30) {
return '刚刚' return '刚刚'
} else if (diff < 3600) { } else if (diff < 3600) {
// less 1 hour // less 1 hour
return Math.ceil(diff / 60) + '分钟前' return Math.ceil(diff / 60) + '分钟前'
} else if (diff < 3600 * 24) { } else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + '小时前' return Math.ceil(diff / 3600) + '小时前'
} else if (diff < 3600 * 24 * 2) { } else if (diff < 3600 * 24 * 2) {
return '1天前' return '1天前'
} }
return ( return (
d.getMonth() + 1 + '月' + d.getDate() + '日' d.getMonth() + 1 + '月' + d.getDate() + '日'
// + // +
// d.getHours() + // d.getHours() +
// '时' // '时'
// + // +
// d.getMinutes() + // d.getMinutes() +
// '分' // '分'
) )
} }
} }
// 获取当天日期(年月日)
const h5Helper = { function getToday() {
isAndroid: function () { const today = new Date();
return window.navigator.appVersion.toLowerCase().indexOf('android') != -1 const year = today.getFullYear();
}, const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从0开始需+1
isIOS: function () { const day = String(today.getDate()).padStart(2, '0');
return window.navigator.appVersion.toLowerCase().indexOf('iphone') != -1 return `${year}-${month}-${day}`;
}, }
isWeiXinWeb: function () {
var ua = window.navigator.userAgent.toLowerCase() // 获取3个月前的日期
return ua.match(/MicroMessenger/i) == 'micromessenger' function getThreeMonthsAgo() {
}, const threeMonthsAgo = new Date();
} threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3); // 月份减3
const year = threeMonthsAgo.getFullYear();
// 验证手机号格式 const month = String(threeMonthsAgo.getMonth() + 1).padStart(2, '0');
const validatePhoneNumber = (phone) => { const day = String(threeMonthsAgo.getDate()).padStart(2, '0');
if (!phone) return false return `${year}-${month}-${day}`;
var testReg = /^1[23456789]\d{9}$/ }
return testReg.test(phone)
}
const getUserLocation = (call) => { const h5Helper = {
uni.getLocation({ isAndroid: function () {
type: 'wgs84', return window.navigator.appVersion.toLowerCase().indexOf('android') != -1
success: function (address) { },
call(address) isIOS: function () {
}, return window.navigator.appVersion.toLowerCase().indexOf('iphone') != -1
fail: (err) => { },
uni.showModal({ isWeiXinWeb: function () {
title: '提示', var ua = window.navigator.userAgent.toLowerCase()
content: '定位失败,请打开定位权限', return ua.match(/MicroMessenger/i) == 'micromessenger'
success: function (res) { },
if (res.confirm) { }
uni.openSetting({
success: (resSett) => { // 验证手机号格式
if (resSett.authSetting['scope.userLocation']) { const validatePhoneNumber = (phone) => {
uni.getLocation({ if (!phone) return false
success: (address) => { var testReg = /^1[23456789]\d{9}$/
call && call(address) return testReg.test(phone)
}, }
})
} const getUserLocation = (call) => {
}, uni.getLocation({
}) type: 'wgs84',
} success: function (address) {
}, call(address)
}) },
}, fail: (err) => {
}) uni.showModal({
} title: '提示',
content: '定位失败,请打开定位权限',
// 加载用户配置 success: function (res) {
var globalConfigIsLoading = false, if (res.confirm) {
global_config = null, uni.openSetting({
globalConfigCallbacks = [] success: (resSett) => {
/** if (resSett.authSetting['scope.userLocation']) {
* 加载用户配置 uni.getLocation({
* @param call 加载成功后的回调 success: (address) => {
* @param need_fresh 是否及时刷新用户配置 call && call(address)
*/ },
const loadConfig = (call, need_fresh = false) => { })
if (call && global_config && !need_fresh) { }
call(global_config) },
return })
} }
if (globalConfigIsLoading) { },
globalConfigCallbacks.push(call) })
return },
} })
globalConfigIsLoading = true }
request({
url: '/org/userResource/userMsg', // 加载用户配置
}) var globalConfigIsLoading = false,
.then((rs) => { global_config = null,
globalConfigIsLoading = false globalConfigCallbacks = []
global_config = rs.data /**
uni.setStorage({ * 加载用户配置
key: 'userInfo', * @param call 加载成功后的回调
data: global_config, * @param need_fresh 是否及时刷新用户配置
}) */
if (call) { const loadConfig = (call, need_fresh = false) => {
call(global_config) if (call && global_config && !need_fresh) {
} call(global_config)
for (var i = 0; i < globalConfigCallbacks.length; i++) { return
globalConfigCallbacks[i](global_config) }
} if (globalConfigIsLoading) {
globalConfigCallbacks = [] globalConfigCallbacks.push(call)
}) return
.catch((err) => { }
globalConfigIsLoading = false globalConfigIsLoading = true
console.warn(err) request({
// uni.reLaunch({ url: '/pages/user/login' }) url: '/org/userResource/userMsg',
}) })
} .then((rs) => {
globalConfigIsLoading = false
const prePage = () => { global_config = rs.data
let pages = getCurrentPages() uni.setStorage({
let prePage = pages[pages.length - 2] key: 'userInfo',
return prePage data: global_config,
} })
if (call) {
const loginSuccess = (data, jump = true) => { call(global_config)
return new Promise((resolve, reject) => { }
console.log(data) for (var i = 0; i < globalConfigCallbacks.length; i++) {
uni.setStorageSync('access_token', data.token_type + ' ' + data.access_token) globalConfigCallbacks[i](global_config)
uni.setStorageSync('refresh_token', data.refresh_token) }
let userInfo = decodeToken(data.access_token) globalConfigCallbacks = []
console.log(userInfo) })
// let strings = data.access_token.split('.') //截取token获取载体 .catch((err) => {
// console.log(escape, atob) globalConfigIsLoading = false
// var userInfo = JSON.parse(decodeURIComponent(escape(atob(strings[1].replace(/-/g, '+').replace(/_/g, '/'))))) console.warn(err)
userInfo.authorities = userInfo.authorities[0] // uni.reLaunch({ url: '/pages/user/login' })
if (userInfo.headSculpture) { })
userInfo.avatar = config.static + userInfo.headSculpture }
}
console.log(userInfo) const prePage = () => {
uni.setStorageSync(cache.userInfo, userInfo) let pages = getCurrentPages()
apiUpdatePush() let prePage = pages[pages.length - 2]
resolve(userInfo) return prePage
if (jump) { }
queryDictDataCache().then((res) => {
uni.setStorageSync(cacheKey.dictData, res.data) const loginSuccess = (data, jump = true) => {
}) return new Promise((resolve, reject) => {
console.log('reLaunch') console.log(data)
uni.reLaunch({ uni.setStorageSync('access_token', data.token_type + ' ' + data.access_token)
url: '/pages/index/index', uni.setStorageSync('refresh_token', data.refresh_token)
fail: (err) => { let userInfo = decodeToken(data.access_token)
console.log(err) console.log(userInfo)
}, // let strings = data.access_token.split('.') //截取token获取载体
}) // console.log(escape, atob)
} // var userInfo = JSON.parse(decodeURIComponent(escape(atob(strings[1].replace(/-/g, '+').replace(/_/g, '/')))))
}) userInfo.authorities = userInfo.authorities[0]
} if (userInfo.headSculpture) {
/** userInfo.avatar = config.static + userInfo.headSculpture
* 只针对列表页的刷新 }
* @param {*} number console.log(userInfo)
* @param {*} time uni.setStorageSync(cache.userInfo, userInfo)
*/ apiUpdatePush()
const refreshPrePage = (number = 1, time = 1500) => { resolve(userInfo)
let pages = getCurrentPages() if (jump) {
let prePage = pages[pages.length - number - 1] queryDictDataCache().then((res) => {
if (prePage && time) { uni.setStorageSync(cacheKey.dictData, res.data)
prePage.$vm.store?.reload() })
setTimeout(() => { console.log('reLaunch')
uni.navigateBack({ uni.reLaunch({
delta: number, url: '/pages/index/index',
}) fail: (err) => {
}, time) console.log(err)
} },
} })
}
const decodeToken = (token) => { })
let obj = null }
if (token !== '') { /**
const payload = jsrsasign.KJUR.jws.JWS.parse(token) * 只针对列表页的刷新
if (payload.hasOwnProperty('payloadObj')) { * @param {*} number
obj = payload.payloadObj * @param {*} time
} */
} const refreshPrePage = (number = 1, time = 1500) => {
return obj let pages = getCurrentPages()
} let prePage = pages[pages.length - number - 1]
if (prePage && time) {
const getDictData = (key) => { prePage.$vm.store?.reload()
return new Promise((resolve, reject) => { setTimeout(() => {
let dictData = uni.getStorageSync(cacheKey.dictData) uni.navigateBack({
if (dictData) { delta: number,
resolve(dictData.filter((item) => item.code === key)[0]?.children || []) })
} else { }, time)
// 查询字典 }
queryDictDataCache().then((res) => { }
uni.setStorageSync(cacheKey.dictData, res.data)
resolve(res.data.filter((item) => item.code === key)[0]?.children || []) const decodeToken = (token) => {
}).catch(err=>{ let obj = null
reject(err) if (token !== '') {
}) const payload = jsrsasign.KJUR.jws.JWS.parse(token)
} if (payload.hasOwnProperty('payloadObj')) {
}) obj = payload.payloadObj
} }
}
export default { return obj
validatePhoneNumber, }
toast,
formatTime, const getDictData = (key) => {
parseTime, return new Promise((resolve, reject) => {
h5Helper, let dictData = uni.getStorageSync(cacheKey.dictData)
getUserLocation, if (dictData) {
loadConfig, resolve(dictData.filter((item) => item.code === key)[0]?.children || [])
prePage, } else {
loginSuccess, // 查询字典
refreshPrePage, queryDictDataCache().then((res) => {
getDictData, uni.setStorageSync(cacheKey.dictData, res.data)
} resolve(res.data.filter((item) => item.code === key)[0]?.children || [])
}).catch(err=>{
reject(err)
})
}
})
}
export default {
validatePhoneNumber,
toast,
formatTime,
parseTime,
h5Helper,
getUserLocation,
loadConfig,
prePage,
loginSuccess,
refreshPrePage,
getDictData,
getToday,
getThreeMonthsAgo
}

View File

@@ -2,9 +2,10 @@
"name" : "灿能物联", "name" : "灿能物联",
"appid" : "__UNI__88BC25B", "appid" : "__UNI__88BC25B",
"description" : "", "description" : "",
"versionName" : "1.6.1", "versionName" : "1.6.81",
"versionCode" : 161, "versionCode" : 169,
"transformPx" : false, "transformPx" : false,
"sassImplementationName" : "node-sass",
/* 5+App */ /* 5+App */
"app-plus" : { "app-plus" : {
"safearea" : { "safearea" : {
@@ -24,7 +25,6 @@
}, },
/* */ /* */
"modules" : { "modules" : {
"Maps" : {},
"Barcode" : {}, "Barcode" : {},
"Camera" : {}, "Camera" : {},
"Push" : {} "Push" : {}
@@ -70,12 +70,7 @@
/* SDK */ /* SDK */
"sdkConfigs" : { "sdkConfigs" : {
"ad" : {}, "ad" : {},
"maps" : { "maps" : {},
"amap" : {
"appkey_ios" : "73262624599d79ee4ad8bba2ab4a0958",
"appkey_android" : "c93dd87e087f3686a9d4463ce5ebcbe1"
}
},
"push" : { "push" : {
"unipush" : { "unipush" : {
"version" : "2", "version" : "2",
@@ -144,7 +139,7 @@
"/api" : { "/api" : {
"https" : true, "https" : true,
"target" : "https://pqmcn.com:8092/api", "target" : "https://pqmcn.com:8092/api",
// "target" : "http://192.168.1.22:10215", // "target" : "http://192.168.1.62:10215",
"changOrigin" : true, "changOrigin" : true,
"pathRewrite" : { "pathRewrite" : {
"/api" : "" "/api" : ""
@@ -155,6 +150,9 @@
}, },
"router" : { "router" : {
"base" : "" "base" : ""
},
"unipush" : {
"enable" : false
} }
}, },
"mp-toutiao" : { "mp-toutiao" : {

1689
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -16,5 +16,15 @@
"前端组件", "前端组件",
"通用组件" "通用组件"
] ]
},
"dependencies": {
"crypto-js": "^4.2.0",
"echarts": "^5.6.0",
"html2canvas": "^1.4.1",
"image-tool": "^1.0.2",
"image-tools": "^1.4.0",
"jsrsasign": "^11.1.0",
"mqtt": "^3.0.0",
"pinyin-pro": "^3.26.0"
} }
} }

View File

@@ -4,26 +4,47 @@
<view class="grid-card-title">温度</view> <view class="grid-card-title">温度</view>
<view class="grid-card-content-4"> <view class="grid-card-content-4">
<template v-for="item in renderData"> <template v-for="item in renderData">
<view class="item item-title" <view class="item item-title">{{ item[0].clDid }}
>{{ item[0].clDid }}
<template v-if="item[0].clDid"> (°C)</template> <template v-if="item[0].clDid"> (°C)</template>
</view> </view>
<view class="item item-title" <view class="item item-title">{{ item[1].clDid }}
>{{ item[1].clDid }}
<template v-if="item[1].clDid"> (°C)</template> <template v-if="item[1].clDid"> (°C)</template>
</view> </view>
<view class="item item-title" <view class="item item-title">{{ item[2].clDid }}
>{{ item[2].clDid }}
<template v-if="item[2].clDid"> (°C)</template> <template v-if="item[2].clDid"> (°C)</template>
</view> </view>
<view class="item item-title" <view class="item item-title">{{ item[3].clDid }}
>{{ item[3].clDid }}
<template v-if="item[3].clDid"> (°C)</template> <template v-if="item[3].clDid"> (°C)</template>
</view> </view>
<view class="item">{{ item[0].clDid ? Math.round(item[0].value) || '-' : '' }}</view> <view class="item">{{ item[0].clDid ? Math.round(item[0].value) || '-' : '' }}</view>
<view class="item">{{ item[1].clDid ? Math.round(item[1].value) || '-' : '' }}</view> <view class="item">{{ item[1].clDid ? Math.round(item[1].value) || '-' : '' }}</view>
<view class="item">{{ item[2].clDid ? Math.round(item[2].value) || '-' : '' }}</view> <view class="item">{{ item[2].clDid ? Math.round(item[2].value) || '-' : '' }}</view>
<view class="item">{{ item[3].clDid ? Math.round(item[3].value) || '-' : '' }}</view> <view class="item">{{ item[3].clDid ? Math.round(item[3].value) || '-' : '' }}</view>
</template>
</view>
</view>
<!-- 运维管理员工程用户 可看 -->
<view class="grid-card" v-if="userInfo.authorities=='operation_manager'||userInfo.authorities=='engineering_user'">
<view class="grid-card-title">状态</view>
<view class="grid-card-content-4">
<template v-for="(item, index) in moduleData">
<view class="item item-title">{{ item[0].moduleName }}
<template v-if="item[0].moduleName"></template>
</view>
<view class="item item-title">{{ item[1].moduleName }}
<template v-if="item[1].moduleName"></template>
</view>
<view class="item item-title">{{ item[2].moduleName }}
<template v-if="item[2].moduleName"></template>
</view>
<view class="item item-title">{{ item[3].moduleName }}
<template v-if="item[3].moduleName"></template>
</view>
<!-- <uni-tag :text="item[0].moduleState" :type=" item[0].moduleState=='离线'?'error' : 'success'" /> -->
<view class="item">{{ item[0].moduleState }}</view>
<view class="item">{{ item[1].moduleState }}</view>
<view class="item">{{ item[2].moduleState }}</view>
<view class="item">{{ item[3].moduleState }}</view>
</template> </template>
</view> </view>
</view> </view>
@@ -43,50 +64,88 @@
</view> </view>
</template> </template>
<script> <script>
export default { import {
data() { getModuleState
return {} } from '@/common/api/harmonic.js'
}, export default {
props: {
IOData: { props: {
type: Array, IOData: {
default: () => { type: Array,
return [] default: () => {
return []
},
},
ndid: {
type: String,
}, },
}, },
}, data() {
computed: { return {
renderData() { list: [],
let arr = [] userInfo: {},
// 把IOData转换成每4个一组的二维数组 flag: false
for (let i = 0; i < this.IOData.length; i += 4) { }
this.IOData.slice(i, i + 4).forEach((item) => { },
computed: {
if (Number.isInteger(item.value) || item.value =='') { renderData() {
let arr = []
}else { // 把IOData转换成每4个一组的二维数组
item.value = (item.value-0).toFixed(2) for (let i = 0; i < this.IOData.length; i += 4) {
this.IOData.slice(i, i + 4).forEach((item) => {
if (Number.isInteger(item.value) || item.value == '') {} else {
item.value = (item.value - 0).toFixed(2)
}
})
arr.push(this.IOData.slice(i, i + 4))
}
// 把每组的长度补齐到4
arr.forEach((item) => {
if (item.length < 4) {
let length = 4 - item.length
for (let i = 0; i < length; i++) {
item.push({})
}
} }
}) })
arr.push(this.IOData.slice(i, i + 4)) console.warn(arr)
} return arr
// 把每组的长度补齐到4 },
arr.forEach((item) => { moduleData() {
if (item.length < 4) { let arr = []
let length = 4 - item.length // 把IOData转换成每4个一组的二维数组
for (let i = 0; i < length; i++) { for (let i = 0; i < this.list.length; i += 4) {
item.push({}) arr.push(this.list.slice(i, i + 4))
}
} }
}) // 把每组的长度补齐到4
console.warn(arr) arr.forEach((item) => {
return arr if (item.length < 4) {
let length = 4 - item.length
for (let i = 0; i < length; i++) {
item.push({})
}
}
})
console.warn(arr)
return arr
},
}, },
}, methods: {
methods: {}, info() {
} getModuleState({
id: this.ndid
}).then((res) => {
this.list = res.data
})
},
},
mounted() {
this.userInfo = uni.getStorageSync(this.$cacheKey.userInfo)
this.info()
},
}
</script> </script>
<style lang="scss"> <style lang="scss">
.basic { .basic {}
} </style>
</style>

View File

@@ -10,10 +10,10 @@
<view class="item">{{ item.phase }}</view> <view class="item">{{ item.phase }}</view>
<view class="item">{{ <view class="item">{{
item['Apf_RmsI_Sys(A)'] > 0 ? item['Apf_RmsI_Sys(A)'].toFixed(2) : item['Apf_RmsI_Sys(A)'] item['Apf_RmsI_Sys(A)'] > 0 ? item['Apf_RmsI_Sys(A)'].toFixed(2) : item['Apf_RmsI_Sys(A)']
}}</view> }}</view>
<view class="item">{{ <view class="item">{{
item['Apf_ThdA_Sys(%)'] > 0 ? item['Apf_ThdA_Sys(%)'].toFixed(2) : item['Apf_ThdA_Sys(%)'] item['Apf_ThdA_Sys(%)'] > 0 ? item['Apf_ThdA_Sys(%)'].toFixed(2) : item['Apf_ThdA_Sys(%)']
}}</view> }}</view>
</template> </template>
</view> </view>
</view> </view>
@@ -28,13 +28,13 @@
<view class="item">{{ item.phase }}</view> <view class="item">{{ item.phase }}</view>
<view class="item">{{ <view class="item">{{
item['Apf_PhV_Sys(V)'] > 0 ? item['Apf_PhV_Sys(V)'].toFixed(2) : item['Apf_PhV_Sys(V)'] item['Apf_PhV_Sys(V)'] > 0 ? item['Apf_PhV_Sys(V)'].toFixed(2) : item['Apf_PhV_Sys(V)']
}}</view> }}</view>
<view class="item">{{ <view class="item">{{
item['Apf_Freq(Hz)'] > 0 ? item['Apf_Freq(Hz)'].toFixed(2) : item['Apf_Freq(Hz)'] item['Apf_Freq(Hz)'] > 0 ? item['Apf_Freq(Hz)'].toFixed(2) : item['Apf_Freq(Hz)']
}}</view> }}</view>
<view class="item">{{ <view class="item">{{
item['Apf_ThdU_Sys(%)'] > 0 ? item['Apf_ThdU_Sys(%)'].toFixed(2) : item['Apf_ThdU_Sys(%)'] item['Apf_ThdU_Sys(%)'] > 0 ? item['Apf_ThdU_Sys(%)'].toFixed(2) : item['Apf_ThdU_Sys(%)']
}}</view> }}</view>
</template> </template>
</view> </view>
</view> </view>
@@ -48,10 +48,10 @@
<view class="item">{{ item.phase }}</view> <view class="item">{{ item.phase }}</view>
<view class="item">{{ <view class="item">{{
item['Apf_RmsI_Load(A)'] > 0 ? item['Apf_RmsI_Load(A)'].toFixed(2) : item['Apf_RmsI_Load(A)'] item['Apf_RmsI_Load(A)'] > 0 ? item['Apf_RmsI_Load(A)'].toFixed(2) : item['Apf_RmsI_Load(A)']
}}</view> }}</view>
<view class="item">{{ <view class="item">{{
item['Apf_ThdA_Load(%)'] > 0 ? item['Apf_ThdA_Load(%)'].toFixed(2) : item['Apf_ThdA_Load(%)'] item['Apf_ThdA_Load(%)'] > 0 ? item['Apf_ThdA_Load(%)'].toFixed(2) : item['Apf_ThdA_Load(%)']
}}</view> }}</view>
</template> </template>
</view> </view>
</view> </view>
@@ -64,13 +64,15 @@
<template v-for="(item, index) in renderData.补偿电流"> <template v-for="(item, index) in renderData.补偿电流">
<view class="item">{{ item.phase }}</view> <view class="item">{{ item.phase }}</view>
<view class="item">{{ <view class="item">{{
item['Apf_RmsI_TolOut(A)'] > 0 item['Apf_RmsI_TolOut(A)'] == 3.1415926 ? '-' :
? item['Apf_RmsI_TolOut(A)'].toFixed(2) item['Apf_RmsI_TolOut(A)'] > 0
: item['Apf_RmsI_TolOut(A)'] ? item['Apf_RmsI_TolOut(A)'].toFixed(2)
: item['Apf_RmsI_TolOut(A)']
}}</view> }}</view>
<view class="item">{{ <view class="item">{{
item['load_Rate'] > 0 ? item['load_Rate'].toFixed(2) : item['load_Rate'] item['load_Rate'] == 3.1415926 ? '-' : item['load_Rate'] > 0 ? item['load_Rate'].toFixed(2) :
}}</view> item['load_Rate']
}}</view>
</template> </template>
</view> </view>
</view> </view>
@@ -166,6 +168,5 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.basic { .basic {}
}
</style> </style>

View File

@@ -4,15 +4,18 @@
<view class="grid-card-title">电网侧</view> <view class="grid-card-title">电网侧</view>
<view class="grid-card-content-5"> <view class="grid-card-content-5">
<view class="item item-title">名称</view> <view class="item item-title">名称</view>
<view class="item item-title">有功功率(kw)</view> <view class="item item-title">有功功率(kW)</view>
<view class="item item-title">无功功率(kVar)</view> <view class="item item-title">无功功率(kVar)</view>
<view class="item item-title">视在功率(kVA)</view> <view class="item item-title">视在功率(kVA)</view>
<view class="item item-title">功率因数</view> <view class="item item-title">功率因数</view>
<template v-for="(item, index) in renderData.电网侧"> <template v-for="(item, index) in renderData.电网侧">
<view class="item">{{ item.phase }}</view> <view class="item">{{ item.phase }}</view>
<view class="item">{{ item['Apf_P_Sys(W)']=='-'? '-':(item['Apf_P_Sys(W)'] / 1000).toFixed(2) }}</view> <view class="item">{{ item['Apf_P_Sys(W)'] == '-' ? '-' : (item['Apf_P_Sys(W)'] / 1000).toFixed(2) }}
<view class="item">{{item['Apf_Q_Sys(Var)']=='-'? '-':(item['Apf_Q_Sys(Var)'] / 1000).toFixed(2) }}</view> </view>
<view class="item">{{ item['Apf_S_Sys(VA)']=='-'?'-' :(item['Apf_S_Sys(VA)'] / 1000).toFixed(2) }}</view> <view class="item">{{ item['Apf_Q_Sys(Var)'] == '-' ? '-' : (item['Apf_Q_Sys(Var)'] / 1000).toFixed(2) }}
</view>
<view class="item">{{ item['Apf_S_Sys(VA)'] == '-' ? '-' : (item['Apf_S_Sys(VA)'] / 1000).toFixed(2) }}
</view>
<view class="item">{{ item['Apf_PF_Sys(null)'] || '-' }}</view> <view class="item">{{ item['Apf_PF_Sys(null)'] || '-' }}</view>
</template> </template>
</view> </view>
@@ -21,15 +24,18 @@
<view class="grid-card-title">负载侧</view> <view class="grid-card-title">负载侧</view>
<view class="grid-card-content-5"> <view class="grid-card-content-5">
<view class="item item-title">名称</view> <view class="item item-title">名称</view>
<view class="item item-title">有功功率(kw)</view> <view class="item item-title">有功功率(kW)</view>
<view class="item item-title">无功功率(kVar)</view> <view class="item item-title">无功功率(kVar)</view>
<view class="item item-title">视在功率(kVA)</view> <view class="item item-title">视在功率(kVA)</view>
<view class="item item-title">功率因数</view> <view class="item item-title">功率因数</view>
<template v-for="(item, index) in renderData.负载侧"> <template v-for="(item, index) in renderData.负载侧">
<view class="item">{{ item.phase }}</view> <view class="item">{{ item.phase }}</view>
<view class="item">{{ item['Apf_P_Load(W)']=='-'?'-': (item['Apf_P_Load(W)'] / 1000).toFixed(2) }}</view> <view class="item">{{ item['Apf_P_Load(W)'] == '-' ? '-' : (item['Apf_P_Load(W)'] / 1000).toFixed(2) }}
<view class="item">{{ item['Apf_Q_Load(Var)']=='-'? '-':(item['Apf_Q_Load(Var)'] / 1000).toFixed(2) }}</view> </view>
<view class="item">{{ item['Apf_S_Load(VA)']=='-'? '-':(item['Apf_S_Load(VA)'] / 1000).toFixed(2) }}</view> <view class="item">{{ item['Apf_Q_Load(Var)'] == '-' ? '-' : (item['Apf_Q_Load(Var)'] / 1000).toFixed(2)
}}</view>
<view class="item">{{ item['Apf_S_Load(VA)'] == '-' ? '-' : (item['Apf_S_Load(VA)'] / 1000).toFixed(2) }}
</view>
<view class="item">{{ item['Apf_PF_Load(null)'] || '-' }}</view> <view class="item">{{ item['Apf_PF_Load(null)'] || '-' }}</view>
</template> </template>
</view> </view>
@@ -115,6 +121,5 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.basic { .basic {}
}
</style> </style>

View File

@@ -263,11 +263,11 @@ barCateGoryGap:20,
let dataOptions = [] let dataOptions = []
let type = [ let type = [
{ {
name: '谐波电流幅值序列', name: '谐波电流幅值',
key: 'Apf_HarmI', key: 'Apf_HarmI',
}, },
{ {
name: '谐波电压含有率序列', name: '谐波电压含有率',
key: 'Apf_HarmUR', key: 'Apf_HarmUR',
}, },
] ]
@@ -298,6 +298,7 @@ barCateGoryGap:20,
}, },
initEcharts() { initEcharts() {
setTimeout(() => { setTimeout(() => {
if(this.renderData['电网侧']['Apf_HarmI'][Object.keys(this.renderData['电网侧']['Apf_HarmI'])[0]] == undefined) return
let obj = JSON.parse( let obj = JSON.parse(
JSON.stringify( JSON.stringify(
this.renderData['电网侧']['Apf_HarmI'][Object.keys(this.renderData['电网侧']['Apf_HarmI'])[0]], this.renderData['电网侧']['Apf_HarmI'][Object.keys(this.renderData['电网侧']['Apf_HarmI'])[0]],

File diff suppressed because it is too large Load Diff

View File

@@ -1,230 +1,240 @@
<template> <template>
<Cn-page :loading="loading"> <Cn-page :loading="loading">
<view class="content" slot="body"> <view class="content" slot="body">
<view class="content-item" v-for="(item, index) in store.data" :key="index" @click="jump(item)"> <view class="content-item" v-for="(item, index) in store.data" :key="index" @click="jump(item)">
<view class="content-item-header"> <view class="content-item-header">
<uni-badge class="uni-badge-left-margin" :is-dot="true" :text="item.status == '1' ? 0 : 1" <uni-badge
absolute="rightTop" size="small" style="margin-top: 30rpx;"> class="uni-badge-left-margin"
<view class="content-item-header-icon"> :is-dot="true"
<image mode="aspectFill" :src="staticIcon" style="height: 60rpx; width: 60rpx"></image> :text="item.status == '1' ? 0 : 1"
</view> absolute="rightTop"
</uni-badge> size="small"
<view class="content-item-header-right"> style="margin-top: 30rpx"
<view class="content-item-header-right-title">{{ item.equipmentName }}</view> >
<!-- <view class="content-item-header-right-des">{{ item.engineeringName }} {{ item.projectName }}</view> --> <view class="content-item-header-icon">
<view class="content-item-header-right-des">工程名称{{ item.engineeringName }}</view> <image mode="aspectFill" :src="staticIcon" style="height: 60rpx; width: 60rpx"></image>
<view class="content-item-header-right-des">项目名称{{ item.projectName }}</view> </view>
<view class="content-item-header-right-des">监测点名称{{ item.lineName }}</view> </uni-badge>
<view class="content-item-header-right-des">暂态事件类型{{ item.showName.slice(0, -4) }}</view> <view class="content-item-header-right">
<!-- <view class="content-item-header-right-des">{{ item.subTitle }}</view> --> <view class="content-item-header-right-title">{{ item.equipmentName }}</view>
</view> <!-- <view class="content-item-header-right-des">{{ item.engineeringName }} {{ item.projectName }}</view> -->
<view class="ml10" v-if="type === '0' || item.status != '1'">🔍</view> <view class="content-item-header-right-des">工程名称{{ item.engineeringName }}</view>
</view> <view class="content-item-header-right-des">项目名称{{ item.projectName }}</view>
<view class="content-item-footer">{{ item.subTitle }}</view> <!-- <view class="content-item-header-right-des">监测点名称{{ item.lineName }}</view> -->
</view> <!-- <view class="content-item-header-right-des">暂态类型{{ item.showName }}</view> -->
<!-- <uni-card <!-- <view class="content-item-header-right-des">{{ item.subTitle }}</view> -->
:title="item.equipmentName" </view>
:extra="item.status == '1' ? '' : '未读'" <view class="ml10" v-if="type === '0' || item.status != '1'">🔍</view>
:sub-title="item.subTitle" </view>
thumbnail="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png" <view class="content-item-footer">{{ item.subTitle }}</view>
@click="jump(item)" </view>
v-for="(item, index) in store.data" <!-- <uni-card
:key="index" :title="item.equipmentName"
> :extra="item.status == '1' ? '' : '未读'"
<view class="term-list-bottom"> :sub-title="item.subTitle"
<view class="term-list-bottom-item" v-for="(item2, textIndex) in item.dataSet" :key="textIndex"> thumbnail="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png"
{{ item2.showName + ':' + (item2.value == 3.1415926 ? '-' : item2.value) + (item2.unit || '') }} @click="jump(item)"
</view> v-for="(item, index) in store.data"
</view> :key="index"
</uni-card> --> >
<Cn-empty v-if="store.empty" style="padding-top: 400rpx"></Cn-empty> <view class="term-list-bottom">
<uni-load-more v-if="store.status == 'loading' || (store.data && store.data.length > 0)" <view class="term-list-bottom-item" v-for="(item2, textIndex) in item.dataSet" :key="textIndex">
:status="store.status"></uni-load-more> {{ item2.showName + ':' + (item2.value == 3.1415926 ? '-' : item2.value) + (item2.unit || '') }}
</view> </view>
</Cn-page> </view>
</template> </uni-card> -->
<Cn-empty v-if="store.empty" style="padding-top: 400rpx"></Cn-empty>
<script> <uni-load-more
import list from '@/common/js/list' v-if="store.status == 'loading' || (store.data && store.data.length > 0)"
import { updateStatus } from '@/common/api/message' :status="store.status"
></uni-load-more>
export default { </view>
mixins: [list], </Cn-page>
data() { </template>
return {
loading: true, <script>
type: '', import list from '@/common/js/list'
staticIcon: '', import { updateStatus } from '@/common/api/message'
}
}, export default {
onLoad(o) { mixins: [list],
this.type = '3' data() {
this.devId = o.id return {
switch (this.type) { loading: true,
case '0': type: '',
uni.setNavigationBarTitle({ title: '暂态事件' }) staticIcon: '',
this.staticIcon = '/static/zantai2.png' }
break },
case '1': onLoad(o) {
uni.setNavigationBarTitle({ title: '稳态事件' }) this.type = '3'
this.staticIcon = '/static/steady2.png' this.devId = o.id
break switch (this.type) {
case '2': case '0':
uni.setNavigationBarTitle({ title: '运行事件' }) uni.setNavigationBarTitle({ title: '暂态事件' })
this.staticIcon = '/static/run2.png' this.staticIcon = '/static/zantai2.png'
break break
case '3': case '1':
uni.setNavigationBarTitle({ title: '设备告警' }) uni.setNavigationBarTitle({ title: '稳态事件' })
this.staticIcon = '/static/device_bad2.png' this.staticIcon = '/static/steady2.png'
break break
} case '2':
this.init() uni.setNavigationBarTitle({ title: '运行事件' })
}, this.staticIcon = '/static/run2.png'
onNavigationBarButtonTap(e) { break
uni.showModal({ case '3':
title: '提示', uni.setNavigationBarTitle({ title: '设备告警' })
content: '确定要全部标记为已读吗?', this.staticIcon = '/static/device_bad2.png'
success: (res) => { break
if (res.confirm) { }
updateStatus({ this.init()
type: this.type, },
eventIds: [], onNavigationBarButtonTap(e) {
}).then(() => { uni.showModal({
this.loading = true title: '提示',
this.store.reload() content: '确定要全部标记为已读吗?',
}) success: (res) => {
} if (res.confirm) {
}, updateStatus({
}) type: this.type,
}, eventIds: [],
methods: { }).then(() => {
async init() { this.loading = true
let dictData = await this.$util.getDictData('app_event') this.store.reload()
console.log(dictData) })
this.store = this.DataSource('/cs-harmonic-boot/eventUser/queryEventpage') }
this.store.params.type = this.type },
this.store.params.deviceId = this.deviceId })
this.store.loadedCallback = () => { },
this.store.data.forEach((item) => { methods: {
if (this.type === '3') { async init() {
item.showName = '告警,告警码:' + item.code let dictData = await this.$util.getDictData('app_event')
} console.log(dictData)
if (this.type !== '0') { this.store = this.DataSource('/cs-harmonic-boot/eventUser/queryEventpage')
item.subTitle = `${item.startTime}` this.store.params.type = this.type
} else { this.store.params.deviceId = this.deviceId
item.subTitle = this.store.params.startTime = this.$util.getThreeMonthsAgo()
`${item.startTime}` + this.store.params.endTime = this.$util.getToday()
item.dataSet this.store.loadedCallback = () => {
.map((item2) => { this.store.data.forEach((item) => {
return ( if (this.type === '3') {
item2.showName + item.showName = '告警,告警码:' + (item.code || '-')
'' + }
(item2.value == 3.1415926 ? '-' : item2.value) + if (this.type !== '0') {
(item2.unit || '') item.subTitle = `${item.startTime}发生${item.showName}`
) } else {
}) item.subTitle =
.join('') `发生时间:${item.startTime}` +
} item.dataSet
}) .map((item2) => {
this.loading = false return (
} item2.showName +
this.store.reload() '' +
}, (item2.value == 3.1415926 ? '-' : item2.value) +
jump(item) { (item2.unit || '')
if (this.type === '0') { )
let str = JSON.stringify(item).replace(/%/g, '百分比') })
uni.navigateTo({ url: '/pages/message/messageDetail?detail=' + encodeURIComponent(str) }) .join('')
} else { }
if (item.status != '1') { })
item.status = '1' this.loading = false
updateStatus({ }
eventIds: [item.id], this.store.reload()
}) },
} jump(item) {
} if (this.type === '0') {
}, let str = JSON.stringify(item).replace(/%/g, '百分比')
}, uni.navigateTo({ url: '/pages/message/messageDetail?detail=' + encodeURIComponent(str) })
} } else {
</script> if (item.status != '1') {
item.status = '1'
<style lang="scss"> updateStatus({
.content { eventIds: [item.id],
.content-item { })
margin: 20rpx; }
padding: 20rpx 20rpx; }
box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 6rpx 2rpx; },
border-radius: 8rpx; },
border: 1px solid #ebeef5; }
background: #fff; </script>
.content-item-header { <style lang="scss">
display: flex; .content {
padding: 20rpx 0; .content-item {
border-bottom: 1px solid #ebeef5; margin: 20rpx;
padding: 20rpx 20rpx;
.content-item-header-icon { box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 6rpx 2rpx;
display: flex; border-radius: 8rpx;
align-items: center; border: 1px solid #ebeef5;
justify-content: center; background: #fff;
width: 100rpx;
height: 100rpx; .content-item-header {
border-radius: 8rpx; display: flex;
background: $uni-theme-color; padding: 20rpx 0;
} border-bottom: 1px solid #ebeef5;
.content-item-header-right { .content-item-header-icon {
flex: 1; display: flex;
display: flex; align-items: center;
flex-direction: column; justify-content: center;
justify-content: space-between; width: 100rpx;
// height: 140rpx; height: 100rpx;
margin-left: 20rpx; border-radius: 8rpx;
background: $uni-theme-color;
.content-item-header-right-title { }
font-size: 28rpx;
font-weight: bold; .content-item-header-right {
color: #111; flex: 1;
} display: flex;
flex-direction: column;
.content-item-header-right-des { justify-content: space-between;
font-size: 24rpx; // height: 140rpx;
color: #999; margin-left: 20rpx;
}
} .content-item-header-right-title {
} font-size: 28rpx;
font-weight: bold;
.content-item-footer { color: #111;
margin-top: 20rpx; }
font-size: 24rpx;
color: #999; .content-item-header-right-des {
} font-size: 24rpx;
} color: #999;
}
// padding-top: 20rpx; }
} }
.term-list-bottom { .content-item-footer {
.term-list-bottom-item { margin-top: 20rpx;
font-size: 28rpx; font-size: 24rpx;
margin-bottom: 10rpx; color: #999;
display: flex; }
justify-content: space-between; }
// view:first-of-type{
// color: #111; // padding-top: 20rpx;
// } }
}
.term-list-bottom {
.term-list-bottom-item:last-of-type { .term-list-bottom-item {
margin-bottom: 0; font-size: 28rpx;
} margin-bottom: 10rpx;
} display: flex;
justify-content: space-between;
/deep/ .uni-list-item { // view:first-of-type{
background-color: $uni-theme-white !important; // color: #111;
} // }
}
/deep/ .uni-card__header-extra-text {
color: #dd524d !important; .term-list-bottom-item:last-of-type {
font-size: 20rpx; margin-bottom: 0;
} }
</style> }
/deep/ .uni-list-item {
background-color: $uni-theme-white !important;
}
/deep/ .uni-card__header-extra-text {
color: #dd524d !important;
font-size: 20rpx;
}
</style>

View File

@@ -59,7 +59,7 @@
</template> </template>
<script> <script>
export default { export default {
data () { data() {
return { return {
} }
}, },

View File

@@ -60,7 +60,7 @@
</template> </template>
<script> <script>
export default { export default {
data () { data() {
return { return {
} }
}, },

View File

@@ -83,7 +83,7 @@
</template> </template>
<script> <script>
export default { export default {
data () { data() {
return { return {
} }
}, },

View File

@@ -284,17 +284,17 @@ export default {
}) })
}) })
}, },
chooseLocation() { // chooseLocation() {
uni.chooseLocation({ // uni.chooseLocation({
success: function (res) { // success: function (res) {
this.address = res.name // this.address = res.name
console.log('位置名称:' + res.name) // console.log('位置名称:' + res.name)
console.log('详细地址:' + res.address) // console.log('详细地址:' + res.address)
console.log('纬度:' + res.latitude) // console.log('纬度:' + res.latitude)
console.log('经度:' + res.longitude) // console.log('经度:' + res.longitude)
}, // },
}) // })
}, // },
chooseGplot() { chooseGplot() {
this.$refs.gplot.open() this.$refs.gplot.open()
}, },

View File

@@ -23,7 +23,7 @@
</button> </button>
</view> </view>
</template> </template>
<template v-else> <template v-else >
<view class="content"> <view class="content">
<uni-forms> <uni-forms>
<uni-forms-item label="项目"> <uni-forms-item label="项目">
@@ -97,9 +97,12 @@
</uni-forms> </uni-forms>
</view> </view>
<image class="gplot-image" ref="gplot-image" :src="formData.topologyDiagramUrl" mode="widthFix" /> <image class="gplot-image" ref="gplot-image" :src="formData.topologyDiagramUrl" mode="widthFix" />
<view class="btn-wrap"> <view class="btn-wrap" >
<!-- <view class="btn-wrap-item" @click="add"> 添加监测点 </view> --> <!-- <view class="btn-wrap-item" @click="add"> 添加监测点 </view> -->
<view class="btn-wrap-item" @click="submit"> 提交</view> <!-- <view class="btn-wrap-item" @click="submit" > 提交</view> -->
<button class="btn-wrap-item" :loading="isLoading1" :disabled="isLoading1" @click="submit">
{{ isLoading1 ? '提交中...' : '提交' }}
</button>
</view> </view>
<uni-drawer ref="gplot" mode="right" :mask-click="false"> <uni-drawer ref="gplot" mode="right" :mask-click="false">
<scroll-view style="height: 100%" scroll-y="true"> <scroll-view style="height: 100%" scroll-y="true">
@@ -189,6 +192,7 @@ export default {
projectRange: [], projectRange: [],
point: {}, point: {},
isLoading: false, isLoading: false,
isLoading1: false,
pointList: [], pointList: [],
activeGplot: 0, activeGplot: 0,
positionList: [], positionList: [],
@@ -360,17 +364,17 @@ export default {
this.isLoading = false this.isLoading = false
}) })
}, },
chooseLocation() { // chooseLocation() {
uni.chooseLocation({ // uni.chooseLocation({
success: function (res) { // success: function (res) {
this.address = res.name // this.address = res.name
console.log('位置名称:' + res.name) // console.log('位置名称:' + res.name)
console.log('详细地址:' + res.address) // console.log('详细地址:' + res.address)
console.log('纬度:' + res.latitude) // console.log('纬度:' + res.latitude)
console.log('经度:' + res.longitude) // console.log('经度:' + res.longitude)
}, // },
}) // })
}, // },
chooseGplot() { chooseGplot() {
this.$refs.gplot.open() this.$refs.gplot.open()
this.dialogOpen = true this.dialogOpen = true
@@ -451,6 +455,7 @@ export default {
this.$util.toast('监测点不能重复') this.$util.toast('监测点不能重复')
return return
} }
this.isLoading1 = true
addDevice({ addDevice({
...this.formData, ...this.formData,
list: this.pointList, list: this.pointList,
@@ -459,10 +464,13 @@ export default {
}).then((res) => { }).then((res) => {
console.log(res) console.log(res)
this.$util.toast('提交成功') this.$util.toast('提交成功')
this.isLoading1 = false
setTimeout(() => { setTimeout(() => {
this.type = 3 this.type = 3
uni.navigateBack({ delta: 1 }) uni.navigateBack({ delta: 1 })
}, 1500) }, 1500)
}).catch(()=>{
this.isLoading1 = false
}) })
}, },
}, },

View File

@@ -93,17 +93,17 @@ export default {
select(e) { select(e) {
console.log(e) console.log(e)
}, },
chooseLocation() { // chooseLocation() {
uni.chooseLocation({ // uni.chooseLocation({
success: function (res) { // success: function (res) {
this.address = res.name // this.address = res.name
console.log('位置名称:' + res.name) // console.log('位置名称:' + res.name)
console.log('详细地址:' + res.address) // console.log('详细地址:' + res.address)
console.log('纬度:' + res.latitude) // console.log('纬度:' + res.latitude)
console.log('经度:' + res.longitude) // console.log('经度:' + res.longitude)
}, // },
}) // })
}, // },
async submit() { async submit() {
console.log(this.formData) console.log(this.formData)
if (!this.formData.name) { if (!this.formData.name) {

View File

@@ -26,8 +26,8 @@
<view style="display:flex;"> <view style="display:flex;">
<uni-easyinput :clearable="false" type="textarea" autoHeight v-model="formData.address" <uni-easyinput :clearable="false" type="textarea" autoHeight v-model="formData.address"
placeholder="请输入位置信息" /> placeholder="请输入位置信息" />
<uni-icons type="location" color="#007aff" size="26" class="ml20" <!-- <uni-icons type="location" color="#007aff" size="26" class="ml20"
@click="chooseLocation"></uni-icons> @click="chooseLocation"></uni-icons> -->
</view> </view>
</uni-forms-item> </uni-forms-item>
<uni-forms-item label="拓扑图"> <uni-forms-item label="拓扑图">
@@ -97,17 +97,17 @@ export default {
register () { register () {
this.type = 2 this.type = 2
}, },
chooseLocation () { // chooseLocation () {
uni.chooseLocation({ // uni.chooseLocation({
success: function (res) { // success: function (res) {
this.address = res.name // this.address = res.name
console.log('位置名称:' + res.name); // console.log('位置名称:' + res.name);
console.log('详细地址:' + res.address); // console.log('详细地址:' + res.address);
console.log('纬度:' + res.latitude); // console.log('纬度:' + res.latitude);
console.log('经度:' + res.longitude); // console.log('经度:' + res.longitude);
} // }
}); // });
}, // },
submit () { submit () {
this.$util.toast('提交成功') this.$util.toast('提交成功')
setTimeout(() => { setTimeout(() => {

View File

@@ -1,237 +1,248 @@
<template> <template>
<Cn-page :loading="loading"> <Cn-page :loading="loading">
<view class="content" slot="body"> <view class="content" slot="body">
<view class="content-item" v-for="(item, index) in store.data" :key="index" @click="jump(item)"> <view class="content-item" v-for="(item, index) in store.data" :key="index" @click="jump(item)">
<view class="content-item-header"> <view class="content-item-header">
<uni-badge class="uni-badge-left-margin" :is-dot="true" :text="item.status == '1' ? 0 : 1" <uni-badge
absolute="rightTop" size="small" :style="type == '0' ? `margin-top: 30rpx;` : ''"> class="uni-badge-left-margin"
<view class="content-item-header-icon"> :is-dot="true"
<image mode="aspectFill" :src="staticIcon" style="height: 60rpx; width: 60rpx"></image> :text="item.status == '1' ? 0 : 1"
</view> absolute="rightTop"
</uni-badge> size="small"
<view class="content-item-header-right"> :style="type == '0' ? `margin-top: 30rpx;` : ''"
<view class="content-item-header-right-title">{{ item.equipmentName }}</view> >
<!-- <view class="content-item-header-right-des">{{ item.engineeringName }} {{ item.projectName }}</view> --> <view class="content-item-header-icon">
<view class="content-item-header-right-des">工程名称{{ item.engineeringName }}</view> <image mode="aspectFill" :src="staticIcon" style="height: 60rpx; width: 60rpx"></image>
<view class="content-item-header-right-des">项目名称{{ item.projectName }}</view> </view>
<view class="content-item-header-right-des" v-if="type == '0' || type == '1'">监测点名称{{ </uni-badge>
item.lineName }}</view> <view class="content-item-header-right">
<view class="content-item-header-right-des" v-if="type == '0'">暂态事件类型{{ item.showName.slice(0, <view class="content-item-header-right-title">{{ item.equipmentName }}</view>
-4) }}</view> <!-- <view class="content-item-header-right-des">{{ item.engineeringName }} {{ item.projectName }}</view> -->
<!-- <view class="content-item-header-right-des">{{ item.subTitle }}</view> --> <view class="content-item-header-right-des">工程名称{{ item.engineeringName }}</view>
</view> <view class="content-item-header-right-des">项目名称{{ item.projectName }}</view>
<view class="ml10" v-if="type === '0' || item.status != '1'">🔍</view> <view class="content-item-header-right-des" v-if="type == '0' || type == '1'"
</view> >监测点名称{{ item.lineName }}</view
<view class="content-item-footer">{{ item.subTitle }}</view> >
</view> <view class="content-item-header-right-des" v-if="type == '0'"
<!-- <uni-card >暂态类型{{ item.showName }}</view
:title="item.equipmentName" >
:extra="item.status == '1' ? '' : '未读'" <!-- <view class="content-item-header-right-des">{{ item.subTitle }}</view> -->
:sub-title="item.subTitle" </view>
thumbnail="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png" <view class="ml10" v-if="type === '0' || item.status != '1'">🔍</view>
@click="jump(item)" </view>
v-for="(item, index) in store.data" <view class="content-item-footer">{{ item.subTitle }}</view>
:key="index" </view>
> <!-- <uni-card
<view class="term-list-bottom"> :title="item.equipmentName"
<view class="term-list-bottom-item" v-for="(item2, textIndex) in item.dataSet" :key="textIndex"> :extra="item.status == '1' ? '' : '未读'"
{{ item2.showName + ':' + (item2.value == 3.1415926 ? '-' : item2.value) + (item2.unit || '') }} :sub-title="item.subTitle"
</view> thumbnail="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png"
</view> @click="jump(item)"
</uni-card> --> v-for="(item, index) in store.data"
<Cn-empty v-if="store.empty" style="padding-top: 400rpx"></Cn-empty> :key="index"
<uni-load-more v-if="store.status == 'loading' || (store.data && store.data.length > 0)" >
:status="store.status"></uni-load-more> <view class="term-list-bottom">
</view> <view class="term-list-bottom-item" v-for="(item2, textIndex) in item.dataSet" :key="textIndex">
</Cn-page> {{ item2.showName + ':' + (item2.value == 3.1415926 ? '-' : item2.value) + (item2.unit || '') }}
</template> </view>
</view>
<script> </uni-card> -->
import list from '@/common/js/list' <Cn-empty v-if="store.empty" style="padding-top: 400rpx"></Cn-empty>
import { updateStatus } from '@/common/api/message' <uni-load-more
v-if="store.status == 'loading' || (store.data && store.data.length > 0)"
export default { :status="store.status"
mixins: [list], ></uni-load-more>
data() { </view>
return { </Cn-page>
loading: true, </template>
type: '',
staticIcon: '', <script>
} import list from '@/common/js/list'
}, import { updateStatus } from '@/common/api/message'
onLoad(o) {
this.type = o.type export default {
switch (o.type) { mixins: [list],
case '0': data() {
uni.setNavigationBarTitle({ title: '暂态事件' }) return {
this.staticIcon = '/static/zantai2.png' loading: true,
break type: '',
case '1': staticIcon: '',
uni.setNavigationBarTitle({ title: '稳态事件' }) }
this.staticIcon = '/static/steady2.png' },
break onLoad(o) {
case '2': this.type = o.type
uni.setNavigationBarTitle({ title: '运行事件' }) switch (o.type) {
this.staticIcon = '/static/run2.png' case '0':
break uni.setNavigationBarTitle({ title: '暂态事件' })
case '3': this.staticIcon = '/static/zantai2.png'
uni.setNavigationBarTitle({ title: '设备告警' }) break
this.staticIcon = '/static/device_bad2.png' case '1':
break uni.setNavigationBarTitle({ title: '稳态事件' })
} this.staticIcon = '/static/steady2.png'
this.init() break
}, case '2':
// onShow() { this.init()}, uni.setNavigationBarTitle({ title: '运行事件' })
onNavigationBarButtonTap(e) { this.staticIcon = '/static/run2.png'
uni.showModal({ break
title: '提示', case '3':
content: '确定要全部标记为已读吗?', uni.setNavigationBarTitle({ title: '设备告警' })
success: (res) => { this.staticIcon = '/static/device_bad2.png'
if (res.confirm) { break
updateStatus({ }
type: this.type, this.init()
eventIds: [], },
}).then(() => { // onShow() { this.init()},
this.loading = true onNavigationBarButtonTap(e) {
this.store.reload() uni.showModal({
}) title: '提示',
} content: '确定要全部标记为已读吗?',
}, success: (res) => {
}) if (res.confirm) {
}, updateStatus({
methods: { type: this.type,
async init() { eventIds: [],
let dictData = await this.$util.getDictData('app_event') }).then(() => {
console.log(dictData) this.loading = true
this.store = this.DataSource('/cs-harmonic-boot/eventUser/queryEventpage') this.store.reload()
this.store.params.type = this.type })
this.store.loadedCallback = () => { }
console.log(111, this.store.data) },
})
this.store.data.forEach((item) => { },
if (this.type === '3') { methods: {
item.showName = '告警,告警码:' + item.code async init() {
} let dictData = await this.$util.getDictData('app_event')
if (this.type !== '0') { console.log(dictData)
item.subTitle = `${item.startTime}发生${item.showName}` this.store = this.DataSource('/cs-harmonic-boot/eventUser/queryEventpage')
} else { this.store.params.type = this.type
item.subTitle = this.store.params.startTime = this.$util.getThreeMonthsAgo()
`${item.startTime}` + this.store.params.endTime = this.$util.getToday()
item.dataSet this.store.loadedCallback = () => {
.map((item2) => { console.log(111, this.store.data)
return (
item2.showName + this.store.data.forEach((item) => {
'' + if (this.type === '3') {
(item2.value == 3.1415926 ? '-' : item2.value) + item.showName = '告警,告警码:' + (item.code || '-')
(item2.unit || '') }
) if (this.type !== '0') {
}) item.subTitle = `${item.startTime}发生${item.showName}`
.join('') } else {
} item.subTitle =
}) `发生时间:${item.startTime}` +
item.dataSet
this.loading = false .map((item2) => {
} return (
this.store.reload() item2.showName +
}, '' +
jump(item) { (item2.value == 3.1415926 ? '-' : item2.value) +
if (this.type === '0') { (item2.unit || '')
)
let str = JSON.stringify(item).replace(/%/g, '百分比') })
item.status = '1' .join('')
}
uni.navigateTo({ url: '/pages/message/messageDetail?detail=' + encodeURIComponent(str) }) })
} else {
if (item.status != '1') { this.loading = false
item.status = '1' }
updateStatus({ this.store.reload()
eventIds: [item.id], },
}) jump(item) {
} if (this.type === '0') {
} let str = JSON.stringify(item).replace(/%/g, '百分比')
}, item.status = '1'
},
} uni.navigateTo({ url: '/pages/message/messageDetail?detail=' + encodeURIComponent(str) })
</script> } else {
if (item.status != '1') {
<style lang="scss"> item.status = '1'
.content { updateStatus({
.content-item { eventIds: [item.id],
margin: 20rpx; })
padding: 20rpx 20rpx; }
box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 6rpx 2rpx; }
border-radius: 8rpx; },
border: 1px solid #ebeef5; },
background: #fff; }
</script>
.content-item-header {
display: flex; <style lang="scss">
padding: 20rpx 0; .content {
border-bottom: 1px solid #ebeef5; .content-item {
margin: 20rpx;
.content-item-header-icon { padding: 20rpx 20rpx;
display: flex; box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 6rpx 2rpx;
align-items: center; border-radius: 8rpx;
justify-content: center; border: 1px solid #ebeef5;
width: 100rpx; background: #fff;
height: 100rpx;
border-radius: 8rpx; .content-item-header {
background: $uni-theme-color; display: flex;
} padding: 20rpx 0;
border-bottom: 1px solid #ebeef5;
.content-item-header-right {
flex: 1; .content-item-header-icon {
display: flex; display: flex;
flex-direction: column; align-items: center;
justify-content: space-between; justify-content: center;
// height: 140rpx; width: 100rpx;
margin-left: 20rpx; height: 100rpx;
border-radius: 8rpx;
.content-item-header-right-title { background: $uni-theme-color;
font-size: 28rpx; }
font-weight: bold;
color: #111; .content-item-header-right {
} flex: 1;
display: flex;
.content-item-header-right-des { flex-direction: column;
font-size: 24rpx; justify-content: space-between;
color: #999; // height: 140rpx;
} margin-left: 20rpx;
}
} .content-item-header-right-title {
font-size: 28rpx;
.content-item-footer { font-weight: bold;
margin-top: 20rpx; color: #111;
font-size: 24rpx; }
color: #999;
} .content-item-header-right-des {
} font-size: 24rpx;
color: #999;
// padding-top: 20rpx; }
} }
}
.term-list-bottom {
.term-list-bottom-item { .content-item-footer {
font-size: 28rpx; margin-top: 20rpx;
margin-bottom: 10rpx; font-size: 24rpx;
display: flex; color: #999;
justify-content: space-between; }
// view:first-of-type{ }
// color: #111;
// } // padding-top: 20rpx;
} }
.term-list-bottom-item:last-of-type { .term-list-bottom {
margin-bottom: 0; .term-list-bottom-item {
} font-size: 28rpx;
} margin-bottom: 10rpx;
display: flex;
/deep/ .uni-list-item { justify-content: space-between;
background-color: $uni-theme-white !important; // view:first-of-type{
} // color: #111;
// }
/deep/ .uni-card__header-extra-text { }
color: #dd524d !important;
font-size: 20rpx; .term-list-bottom-item:last-of-type {
} margin-bottom: 0;
</style> }
}
/deep/ .uni-list-item {
background-color: $uni-theme-white !important;
}
/deep/ .uni-card__header-extra-text {
color: #dd524d !important;
font-size: 20rpx;
}
</style>

View File

@@ -12,7 +12,7 @@
<view class="mb5"> 工程名称{{ detail.engineeringName }} </view> <view class="mb5"> 工程名称{{ detail.engineeringName }} </view>
<view class="mb5"> 事件名称{{ detail.showName }}</view> <view class="mb5"> 事件名称{{ detail.showName }}</view>
<view class="mb5" v-for="(item, textIndex) in detail.dataSet" :key="textIndex"> <view class="mb5" v-for="(item, textIndex) in detail.dataSet" :key="textIndex">
{{ item.showName + ':' + (item.value == 3.1415926 ? '-' : item.value) + (item.unit || '') }} {{ item.showName + '' + (item.value == 3.1415926 ? '-' : item.value) + (item.unit || '') }}
</view> </view>
</view> </view>
<view class="detail-content"> <view class="detail-content">

View File

@@ -1,50 +1,50 @@
<template> <template>
<Cn-page :loading="loading"> <Cn-page :loading="loading">
<view slot="body"> <view slot="body">
<view class="about"> <view class="about">
<image src="/static/logo.png" class="logo"></image> <image src="/static/logo.png" class="logo"></image>
<view class="name">灿能物联</view> <view class="name">灿能物联</view>
<view class="version">Version 1.6.1</view> <view class="version">Version 1.6.7</view>
</view> </view>
</view> </view>
</Cn-page> </Cn-page>
</template> </template>
<script> <script>
export default { export default {
data() { data() {
return { return {
loading: false, loading: false,
} }
}, },
methods: {}, methods: {},
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.about { .about {
box-sizing: border-box; box-sizing: border-box;
padding: 34rpx; padding: 34rpx;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
overflow: hidden; overflow: hidden;
.logo { .logo {
margin-top: 200rpx; margin-top: 200rpx;
height: 120rpx; height: 120rpx;
width: 120rpx; width: 120rpx;
} }
.name { .name {
margin-top: 80rpx; margin-top: 80rpx;
font-size: 40rpx; font-size: 40rpx;
font-weight: 700; font-weight: 700;
color: #333; color: #333;
} }
.version { .version {
margin-top: 20rpx; margin-top: 20rpx;
font-size: 38rpx; font-size: 38rpx;
color: #333; color: #333;
} }
} }
</style> </style>

View File

@@ -1,174 +1,174 @@
<template> <template>
<view :loading="loading"> <view :loading="loading">
<view class="mine"> <view class="mine">
<view class="mine-nav" @click="jump('changePhone')" style="box-shadow: 0 4rpx 8rpx #e7e7e74c"> <view class="mine-nav" @click="jump('changePhone')" style="box-shadow: 0 4rpx 8rpx #e7e7e74c">
<view class="mine-nav-label">更换手机号</view> <view class="mine-nav-label">更换手机号</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view class="mine-nav" @click="jump('changePwd')"> <view class="mine-nav" @click="jump('changePwd')">
<view class="mine-nav-label">修改密码</view> <view class="mine-nav-label">修改密码</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view class="mine-nav" @click="jump('deleteUser')" style="border-bottom: none"> <view class="mine-nav" @click="jump('deleteUser')" style="border-bottom: none">
<view class="mine-nav-label">账号注销</view> <view class="mine-nav-label">账号注销</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<!-- <view class="mine-nav" @click="jump('setupMessage')" style="margin-top:20rpx;border-bottom: none; "> <!-- <view class="mine-nav" @click="jump('setupMessage')" style="margin-top:20rpx;border-bottom: none; ">
<view class="mine-nav-label">消息配置</view> <view class="mine-nav-label">消息配置</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> --> </view> -->
<view class="mine-nav" @click="jump('agreement')" style="margin-top: 20rpx"> <view class="mine-nav" @click="jump('agreement')" style="margin-top: 20rpx">
<view class="mine-nav-label">用户协议</view> <view class="mine-nav-label">用户协议</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view class="mine-nav" @click="jump('policy')"> <view class="mine-nav" @click="jump('policy')">
<view class="mine-nav-label">隐私政策</view> <view class="mine-nav-label">隐私政策</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view class="mine-nav" @click="jump('system')"> <view class="mine-nav" @click="jump('system')">
<view class="mine-nav-label">系统介绍</view> <view class="mine-nav-label">系统介绍</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view class="mine-nav" @click="jump('book')"> <view class="mine-nav" @click="jump('book')">
<view class="mine-nav-label">使用手册</view> <view class="mine-nav-label">使用手册</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<!-- <view class="mine-nav" @click="jump('database')"> <!-- <view class="mine-nav" @click="jump('database')">
<view class="mine-nav-label">资料库</view> <view class="mine-nav-label">资料库</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> --> </view> -->
<view class="mine-nav" @click="jump('company')"> <view class="mine-nav" @click="jump('company')">
<view class="mine-nav-label">公司介绍</view> <view class="mine-nav-label">公司介绍</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<!-- <view class="mine-nav" @click="jump('feedback')"> <!-- <view class="mine-nav" @click="jump('feedback')">
<view class="mine-nav-label">意见反馈</view> <view class="mine-nav-label">意见反馈</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> --> </view> -->
<!-- @click="jump('about')" --> <!-- @click="jump('about')" -->
<view class="mine-nav" style="border-bottom: none"> <view class="mine-nav" style="border-bottom: none">
<view class="mine-nav-label">版本信息</view> <view class="mine-nav-label">版本信息</view>
<view style="color: #828282;font-size: 14rpx;">当前版本V1.6.2</view> <view style="color: #828282; font-size: 14rpx">当前版本V<1.6.7</view>
<!-- <uni-icons type="forward" color="#aaa" size="20"></uni-icons> --> <!-- <uni-icons type="forward" color="#aaa" size="20"></uni-icons> -->
</view> </view>
<view class="mine-nav" @click="jump('layout')" style="margin-top: 20rpx; border-bottom: none"> <view class="mine-nav" @click="jump('layout')" style="margin-top: 20rpx; border-bottom: none">
<view class="mine-nav-label" style="text-align: center">退出登录</view> <view class="mine-nav-label" style="text-align: center">退出登录</view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { queryPersonSet } from '@/common/api/mine.js' import { queryPersonSet } from '@/common/api/mine.js'
export default { export default {
data() { data() {
return { return {
loading: false, loading: false,
} }
}, },
methods: { methods: {
async init() {}, async init() {},
jump(type) { jump(type) {
switch (type) { switch (type) {
case 'changePwd': case 'changePwd':
uni.navigateTo({ uni.navigateTo({
url: `/pages/user/changePwd`, url: `/pages/user/changePwd`,
}) })
break break
case 'changePhone': case 'changePhone':
uni.navigateTo({ uni.navigateTo({
url: `/pages/user/changePhone`, url: `/pages/user/changePhone`,
}) })
break break
case 'book': case 'book':
uni.openDocument({ uni.openDocument({
filePath: '/static/user_manual.docx', filePath: '/static/user_manual.docx',
success: function (res) { success: function (res) {
console.log('打开文档成功') console.log('打开文档成功')
}, },
}) })
break break
case 'layout': case 'layout':
uni.showModal({ uni.showModal({
title: '提示', title: '提示',
content: '是否确认退出登录?', content: '是否确认退出登录?',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
uni.removeStorageSync(this.$cacheKey.messageCount) uni.removeStorageSync(this.$cacheKey.messageCount)
// #ifdef APP-PLUS // #ifdef APP-PLUS
plus.runtime.setBadgeNumber(0) plus.runtime.setBadgeNumber(0)
// #endif // #endif
uni.reLaunch({ uni.reLaunch({
url: `/pages/user/login`, url: `/pages/user/login`,
}) })
} }
}, },
}) })
break break
default: default:
uni.navigateTo({ uni.navigateTo({
url: `/pages/mine/${type}`, url: `/pages/mine/${type}`,
}) })
break break
} }
}, },
}, },
onLoad() { onLoad() {
this.init() this.init()
}, },
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.mine { .mine {
padding-top: 20rpx; padding-top: 20rpx;
.mine-header { .mine-header {
padding: 200rpx 34rpx 34rpx; padding: 200rpx 34rpx 34rpx;
display: flex; display: flex;
align-items: center; align-items: center;
background: $uni-theme-white; background: $uni-theme-white;
margin-bottom: 20rpx; margin-bottom: 20rpx;
box-shadow: 0 4rpx 8rpx #e7e7e74c; box-shadow: 0 4rpx 8rpx #e7e7e74c;
.mine-header-head { .mine-header-head {
margin-right: 30rpx; margin-right: 30rpx;
height: 128rpx; height: 128rpx;
width: 128rpx; width: 128rpx;
border-radius: $uni-theme-radius; border-radius: $uni-theme-radius;
overflow: hidden; overflow: hidden;
} }
.mine-header-name { .mine-header-name {
margin-right: 30rpx; margin-right: 30rpx;
flex: 1; flex: 1;
font-size: 36rpx; font-size: 36rpx;
color: #111; color: #111;
font-weight: 700; font-weight: 700;
} }
} }
.mine-nav { .mine-nav {
padding: 34rpx; padding: 34rpx;
display: flex; display: flex;
align-items: center; align-items: center;
background: $uni-theme-white; background: $uni-theme-white;
border-bottom: 1rpx solid #e8e8e8; border-bottom: 1rpx solid #e8e8e8;
&-icon { &-icon {
margin-right: 30rpx; margin-right: 30rpx;
height: 44rpx; height: 44rpx;
width: 44rpx; width: 44rpx;
border-radius: $uni-theme-radius; border-radius: $uni-theme-radius;
overflow: hidden; overflow: hidden;
} }
&-label { &-label {
margin-right: 30rpx; margin-right: 30rpx;
flex: 1; flex: 1;
font-size: 28rpx; font-size: 28rpx;
color: #111; color: #111;
} }
} }
} }
</style> </style>

View File

@@ -24,13 +24,13 @@
v-model="formData.area" v-model="formData.area"
placeholder="请输入区域信息" placeholder="请输入区域信息"
/> />
<uni-icons <!-- <uni-icons
type="location" type="location"
color="#007aff" color="#007aff"
size="26" size="26"
class="ml20" class="ml20"
@click="chooseLocation" @click="chooseLocation"
></uni-icons> ></uni-icons> -->
</view> </view>
</uni-forms-item> </uni-forms-item>
<uni-forms-item label="描述"> <uni-forms-item label="描述">
@@ -241,19 +241,19 @@ export default {
this.formData.files.push(...e.tempFiles) this.formData.files.push(...e.tempFiles)
console.log(this.formData.files) console.log(this.formData.files)
}, },
chooseLocation() { // chooseLocation() {
uni.chooseLocation({ // uni.chooseLocation({
success: (res) => { // success: (res) => {
this.formData.area = res.name // this.formData.area = res.name
this.formData.lat = res.latitudeame // this.formData.lat = res.latitudeame
this.formData.lng = res.longitude // this.formData.lng = res.longitude
console.log('位置名称:' + res.name) // console.log('位置名称:' + res.name)
console.log('详细地址:' + res.address) // console.log('详细地址:' + res.address)
console.log('纬度:' + res.latitude) // console.log('纬度:' + res.latitude)
console.log('经度:' + res.longitude) // console.log('经度:' + res.longitude)
}, // },
}) // })
}, // },
async submit() { async submit() {
console.log(this.formData) console.log(this.formData)
if (!this.formData.name) { if (!this.formData.name) {

380
pnpm-lock.yaml generated
View File

@@ -6,92 +6,32 @@ settings:
dependencies: dependencies:
crypto-js: crypto-js:
specifier: ^4.1.1 specifier: ^4.2.0
version: 4.1.1 version: 4.2.0
echarts:
specifier: ^5.6.0
version: 5.6.0
html2canvas: html2canvas:
specifier: ^1.4.1 specifier: ^1.4.1
version: 1.4.1 version: 1.4.1
image-tool:
specifier: ^1.0.2
version: 1.0.2
image-tools: image-tools:
specifier: ^1.4.0 specifier: ^1.4.0
version: 1.4.0 version: 1.4.0
jsrsasign: jsrsasign:
specifier: ^10.8.6 specifier: ^11.1.0
version: 10.8.6 version: 11.1.0
mqtt: mqtt:
specifier: 3.0.0 specifier: ^3.0.0
version: 3.0.0 version: 3.0.0
pinyin-pro: pinyin-pro:
specifier: ^3.13.2 specifier: ^3.26.0
version: 3.13.2 version: 3.26.0
qs:
specifier: ^6.11.2
version: 6.11.2
vconsole:
specifier: ^3.15.1
version: 3.15.1
devDependencies:
'@types/html5plus':
specifier: ^1.0.2
version: 1.0.2
'@types/uni-app':
specifier: ^1.4.4
version: 1.4.4
packages: packages:
/@babel/helper-string-parser@7.22.5:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-validator-identifier@7.22.5:
resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
engines: {node: '>=6.9.0'}
dev: true
/@babel/parser@7.22.5:
resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.22.5
dev: true
/@babel/runtime@7.22.6:
resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.13.11
dev: false
/@babel/types@7.22.5:
resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.22.5
'@babel/helper-validator-identifier': 7.22.5
to-fast-properties: 2.0.0
dev: true
/@types/html5plus@1.0.2:
resolution: {integrity: sha512-OklP5lrmLq8/6TUOLgWc0LndUVvAiTWX5dnyoCFhIUtFW9opWsnCtG/UxPgeuC28Rv2XNbFfft/hEEI39P/4Ag==}
dev: true
/@types/uni-app@1.4.4:
resolution: {integrity: sha512-ZTXnrCTblZyoLIoKbTv1Whz1nxrTcM7vg0qGXzDpXP8m9MqdjKt48N3FffQT1IsJWNkxbvJ1Eg5UHDaq+k+oBQ==}
dependencies:
vue: 2.7.14
dev: true
/@vue/compiler-sfc@2.7.14:
resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==}
dependencies:
'@babel/parser': 7.22.5
postcss: 8.4.24
source-map: 0.6.1
dev: true
/async-limiter@1.0.1: /async-limiter@1.0.1:
resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
dev: false dev: false
@@ -114,11 +54,11 @@ packages:
dependencies: dependencies:
buffer: 5.7.1 buffer: 5.7.1
inherits: 2.0.4 inherits: 2.0.4
readable-stream: 3.6.1 readable-stream: 3.6.2
dev: false dev: false
/brace-expansion@1.1.11: /brace-expansion@1.1.12:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
dependencies: dependencies:
balanced-match: 1.0.2 balanced-match: 1.0.2
concat-map: 0.0.1 concat-map: 0.0.1
@@ -135,13 +75,6 @@ packages:
ieee754: 1.2.1 ieee754: 1.2.1
dev: false dev: false
/call-bind@1.0.2:
resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
dependencies:
function-bind: 1.1.1
get-intrinsic: 1.2.1
dev: false
/callback-stream@1.1.0: /callback-stream@1.1.0:
resolution: {integrity: sha512-sAZ9kODla+mGACBZ1IpTCAisKoGnv6PykW7fPk1LrM+mMepE18Yz0515yoVcrZy7dQsTUp3uZLQ/9Sx1RnLoHw==} resolution: {integrity: sha512-sAZ9kODla+mGACBZ1IpTCAisKoGnv6PykW7fPk1LrM+mMepE18Yz0515yoVcrZy7dQsTUp3uZLQ/9Sx1RnLoHw==}
dependencies: dependencies:
@@ -170,22 +103,12 @@ packages:
typedarray: 0.0.6 typedarray: 0.0.6
dev: false dev: false
/copy-text-to-clipboard@3.2.0:
resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==}
engines: {node: '>=12'}
dev: false
/core-js@3.31.1:
resolution: {integrity: sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==}
requiresBuild: true
dev: false
/core-util-is@1.0.3: /core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: false dev: false
/crypto-js@4.1.1: /crypto-js@4.2.0:
resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
dev: false dev: false
/css-line-break@2.1.0: /css-line-break@2.1.0:
@@ -194,19 +117,16 @@ packages:
utrie: 1.0.2 utrie: 1.0.2
dev: false dev: false
/csstype@3.1.2: /d@1.0.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==}
dev: true engines: {node: '>=0.12'}
/d@1.0.1:
resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
dependencies: dependencies:
es5-ext: 0.10.62 es5-ext: 0.10.64
type: 1.2.0 type: 2.7.3
dev: false dev: false
/debug@4.3.4: /debug@4.4.1:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
engines: {node: '>=6.0'} engines: {node: '>=6.0'}
peerDependencies: peerDependencies:
supports-color: '*' supports-color: '*'
@@ -214,59 +134,67 @@ packages:
supports-color: supports-color:
optional: true optional: true
dependencies: dependencies:
ms: 2.1.2 ms: 2.1.3
dev: false dev: false
/duplexify@3.7.1: /duplexify@3.7.1:
resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
dependencies: dependencies:
end-of-stream: 1.4.4 end-of-stream: 1.4.5
inherits: 2.0.4 inherits: 2.0.4
readable-stream: 2.3.8 readable-stream: 2.3.8
stream-shift: 1.0.1 stream-shift: 1.0.3
dev: false dev: false
/duplexify@4.1.2: /duplexify@4.1.3:
resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==}
dependencies: dependencies:
end-of-stream: 1.4.4 end-of-stream: 1.4.5
inherits: 2.0.4 inherits: 2.0.4
readable-stream: 3.6.1 readable-stream: 3.6.2
stream-shift: 1.0.1 stream-shift: 1.0.3
dev: false dev: false
/end-of-stream@1.4.4: /echarts@5.6.0:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==}
dependencies:
tslib: 2.3.0
zrender: 5.6.1
dev: false
/end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
dependencies: dependencies:
once: 1.4.0 once: 1.4.0
dev: false dev: false
/es5-ext@0.10.62: /es5-ext@0.10.64:
resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==}
engines: {node: '>=0.10'} engines: {node: '>=0.10'}
requiresBuild: true requiresBuild: true
dependencies: dependencies:
es6-iterator: 2.0.3 es6-iterator: 2.0.3
es6-symbol: 3.1.3 es6-symbol: 3.1.4
esniff: 2.0.1
next-tick: 1.1.0 next-tick: 1.1.0
dev: false dev: false
/es6-iterator@2.0.3: /es6-iterator@2.0.3:
resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
dependencies: dependencies:
d: 1.0.1 d: 1.0.2
es5-ext: 0.10.62 es5-ext: 0.10.64
es6-symbol: 3.1.3 es6-symbol: 3.1.4
dev: false dev: false
/es6-map@0.1.5: /es6-map@0.1.5:
resolution: {integrity: sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==} resolution: {integrity: sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==}
dependencies: dependencies:
d: 1.0.1 d: 1.0.2
es5-ext: 0.10.62 es5-ext: 0.10.64
es6-iterator: 2.0.3 es6-iterator: 2.0.3
es6-set: 0.1.6 es6-set: 0.1.6
es6-symbol: 3.1.3 es6-symbol: 3.1.4
event-emitter: 0.3.5 event-emitter: 0.3.5
dev: false dev: false
@@ -274,32 +202,47 @@ packages:
resolution: {integrity: sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==} resolution: {integrity: sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==}
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
dependencies: dependencies:
d: 1.0.1 d: 1.0.2
es5-ext: 0.10.62 es5-ext: 0.10.64
es6-iterator: 2.0.3 es6-iterator: 2.0.3
es6-symbol: 3.1.3 es6-symbol: 3.1.4
event-emitter: 0.3.5 event-emitter: 0.3.5
type: 2.7.2 type: 2.7.3
dev: false dev: false
/es6-symbol@3.1.3: /es6-symbol@3.1.4:
resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==}
engines: {node: '>=0.12'}
dependencies: dependencies:
d: 1.0.1 d: 1.0.2
ext: 1.7.0 ext: 1.7.0
dev: false dev: false
/esniff@2.0.1:
resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
engines: {node: '>=0.10'}
dependencies:
d: 1.0.2
es5-ext: 0.10.64
event-emitter: 0.3.5
type: 2.7.3
dev: false
/event-emitter@0.3.5: /event-emitter@0.3.5:
resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
dependencies: dependencies:
d: 1.0.1 d: 1.0.2
es5-ext: 0.10.62 es5-ext: 0.10.64
dev: false
/exif-js@2.3.0:
resolution: {integrity: sha512-1Og9pAzG2FZRVlaavH8bB8BTeHcjMdJhKmeQITkX+uLRCD0xPtKAdZ2clZmQdJ56p9adXtJ8+jwrGp/4505lYg==}
dev: false dev: false
/ext@1.7.0: /ext@1.7.0:
resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
dependencies: dependencies:
type: 2.7.2 type: 2.7.3
dev: false dev: false
/extend@3.0.2: /extend@3.0.2:
@@ -310,19 +253,6 @@ packages:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: false dev: false
/function-bind@1.1.1:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: false
/get-intrinsic@1.2.1:
resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
dependencies:
function-bind: 1.1.1
has: 1.0.3
has-proto: 1.0.1
has-symbols: 1.0.3
dev: false
/glob-parent@3.1.0: /glob-parent@3.1.0:
resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==}
dependencies: dependencies:
@@ -348,6 +278,7 @@ packages:
/glob@7.2.3: /glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
dependencies: dependencies:
fs.realpath: 1.0.0 fs.realpath: 1.0.0
inflight: 1.0.6 inflight: 1.0.6
@@ -357,23 +288,6 @@ packages:
path-is-absolute: 1.0.1 path-is-absolute: 1.0.1
dev: false dev: false
/has-proto@1.0.1:
resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
engines: {node: '>= 0.4'}
dev: false
/has-symbols@1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
dev: false
/has@1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
engines: {node: '>= 0.4.0'}
dependencies:
function-bind: 1.1.1
dev: false
/help-me@1.1.0: /help-me@1.1.0:
resolution: {integrity: sha512-P/IZ8yOMne3SCTHbVY429NZ67B/2bVQlcYGZh2iPPbdLrEQ/qY5aGChn0YTDmt7Sb4IKRI51fypItav+lNl76w==} resolution: {integrity: sha512-P/IZ8yOMne3SCTHbVY429NZ67B/2bVQlcYGZh2iPPbdLrEQ/qY5aGChn0YTDmt7Sb4IKRI51fypItav+lNl76w==}
dependencies: dependencies:
@@ -395,12 +309,19 @@ packages:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
dev: false dev: false
/image-tool@1.0.2:
resolution: {integrity: sha512-D7fATR4b2rBPKaCsY7yajL9pVIha+vBTb5BqzqFXMRGIOVxxUOf4CEVrBt8LmGgcwp4Wa/JNLoaXNMDViOo8tg==}
dependencies:
exif-js: 2.3.0
dev: false
/image-tools@1.4.0: /image-tools@1.4.0:
resolution: {integrity: sha512-TKtvJ6iUwM0mfaD4keMnk1ENHFC470QEjBfA3IlvKdEOufzvWbjbaoNcoyYq6HlViF8+d5tOS1ooE6j7CHf1lQ==} resolution: {integrity: sha512-TKtvJ6iUwM0mfaD4keMnk1ENHFC470QEjBfA3IlvKdEOufzvWbjbaoNcoyYq6HlViF8+d5tOS1ooE6j7CHf1lQ==}
dev: false dev: false
/inflight@1.0.6: /inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
dependencies: dependencies:
once: 1.4.0 once: 1.4.0
wrappy: 1.0.2 wrappy: 1.0.2
@@ -462,8 +383,8 @@ packages:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
dev: false dev: false
/jsrsasign@10.8.6: /jsrsasign@11.1.0:
resolution: {integrity: sha512-bQmbVtsfbgaKBTWCKiDCPlUPbdlRIK/FzSwT3BzIgZl/cU6TqXu6pZJsCI/dJVrZ9Gir5GC4woqw9shH/v7MBw==} resolution: {integrity: sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==}
dev: false dev: false
/leven@2.1.0: /leven@2.1.0:
@@ -474,7 +395,7 @@ packages:
/minimatch@3.1.2: /minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies: dependencies:
brace-expansion: 1.1.11 brace-expansion: 1.1.12
dev: false dev: false
/minimist@1.2.8: /minimist@1.2.8:
@@ -485,7 +406,7 @@ packages:
resolution: {integrity: sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==} resolution: {integrity: sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==}
dependencies: dependencies:
bl: 4.1.0 bl: 4.1.0
debug: 4.3.4 debug: 4.4.1
process-nextick-args: 2.0.1 process-nextick-args: 2.0.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -499,14 +420,14 @@ packages:
base64-js: 1.5.1 base64-js: 1.5.1
commist: 1.1.0 commist: 1.1.0
concat-stream: 1.6.2 concat-stream: 1.6.2
duplexify: 4.1.2 duplexify: 4.1.3
end-of-stream: 1.4.4 end-of-stream: 1.4.5
es6-map: 0.1.5 es6-map: 0.1.5
help-me: 1.1.0 help-me: 1.1.0
inherits: 2.0.4 inherits: 2.0.4
minimist: 1.2.8 minimist: 1.2.8
mqtt-packet: 6.10.0 mqtt-packet: 6.10.0
pump: 3.0.0 pump: 3.0.3
readable-stream: 2.3.8 readable-stream: 2.3.8
reinterval: 1.1.0 reinterval: 1.1.0
split2: 3.2.2 split2: 3.2.2
@@ -518,28 +439,14 @@ packages:
- utf-8-validate - utf-8-validate
dev: false dev: false
/ms@2.1.2: /ms@2.1.3:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: false dev: false
/mutation-observer@1.0.3:
resolution: {integrity: sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==}
dev: false
/nanoid@3.3.6:
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: true
/next-tick@1.1.0: /next-tick@1.1.0:
resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
dev: false dev: false
/object-inspect@1.12.3:
resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
dev: false
/once@1.4.0: /once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies: dependencies:
@@ -561,23 +468,10 @@ packages:
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: false dev: false
/picocolors@1.0.0: /pinyin-pro@3.26.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} resolution: {integrity: sha512-HcBZZb0pvm0/JkPhZHWA5Hqp2cWHXrrW/WrV+OtaYYM+kf35ffvZppIUuGmyuQ7gDr1JDJKMkbEE+GN0wfMoGg==}
dev: true
/pinyin-pro@3.13.2:
resolution: {integrity: sha512-DKz04M0PkrongGyJW7GU+iNB2jInwLcP1p5+w0gu0hz2PtF8q+GTC1GDW731wyhm+q7PGoyMuY3sLONLTqi6mg==}
dev: false dev: false
/postcss@8.4.24:
resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.6
picocolors: 1.0.0
source-map-js: 1.0.2
dev: true
/process-nextick-args@2.0.1: /process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: false dev: false
@@ -585,14 +479,14 @@ packages:
/pump@2.0.1: /pump@2.0.1:
resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
dependencies: dependencies:
end-of-stream: 1.4.4 end-of-stream: 1.4.5
once: 1.4.0 once: 1.4.0
dev: false dev: false
/pump@3.0.0: /pump@3.0.3:
resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
dependencies: dependencies:
end-of-stream: 1.4.4 end-of-stream: 1.4.5
once: 1.4.0 once: 1.4.0
dev: false dev: false
@@ -604,13 +498,6 @@ packages:
pump: 2.0.1 pump: 2.0.1
dev: false dev: false
/qs@6.11.2:
resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
engines: {node: '>=0.6'}
dependencies:
side-channel: 1.0.4
dev: false
/readable-stream@2.3.8: /readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
dependencies: dependencies:
@@ -623,8 +510,8 @@ packages:
util-deprecate: 1.0.2 util-deprecate: 1.0.2
dev: false dev: false
/readable-stream@3.6.1: /readable-stream@3.6.2:
resolution: {integrity: sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==} resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
dependencies: dependencies:
inherits: 2.0.4 inherits: 2.0.4
@@ -632,10 +519,6 @@ packages:
util-deprecate: 1.0.2 util-deprecate: 1.0.2
dev: false dev: false
/regenerator-runtime@0.13.11:
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
dev: false
/reinterval@1.1.0: /reinterval@1.1.0:
resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==} resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==}
dev: false dev: false
@@ -652,32 +535,14 @@ packages:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
dev: false dev: false
/side-channel@1.0.4:
resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.2.1
object-inspect: 1.12.3
dev: false
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
dev: true
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
dev: true
/split2@3.2.2: /split2@3.2.2:
resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
dependencies: dependencies:
readable-stream: 3.6.1 readable-stream: 3.6.2
dev: false dev: false
/stream-shift@1.0.1: /stream-shift@1.0.3:
resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
dev: false dev: false
/string_decoder@1.1.1: /string_decoder@1.1.1:
@@ -720,17 +585,12 @@ packages:
is-negated-glob: 1.0.0 is-negated-glob: 1.0.0
dev: false dev: false
/to-fast-properties@2.0.0: /tslib@2.3.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
engines: {node: '>=4'}
dev: true
/type@1.2.0:
resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
dev: false dev: false
/type@2.7.2: /type@2.7.3:
resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
dev: false dev: false
/typedarray@0.0.6: /typedarray@0.0.6:
@@ -763,22 +623,6 @@ packages:
base64-arraybuffer: 1.0.2 base64-arraybuffer: 1.0.2
dev: false dev: false
/vconsole@3.15.1:
resolution: {integrity: sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==}
dependencies:
'@babel/runtime': 7.22.6
copy-text-to-clipboard: 3.2.0
core-js: 3.31.1
mutation-observer: 1.0.3
dev: false
/vue@2.7.14:
resolution: {integrity: sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==}
dependencies:
'@vue/compiler-sfc': 2.7.14
csstype: 3.1.2
dev: true
/websocket-stream@5.5.2: /websocket-stream@5.5.2:
resolution: {integrity: sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ==} resolution: {integrity: sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ==}
dependencies: dependencies:
@@ -817,3 +661,9 @@ packages:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'} engines: {node: '>=0.4'}
dev: false dev: false
/zrender@5.6.1:
resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==}
dependencies:
tslib: 2.3.0
dev: false

2
readme
View File

@@ -9,7 +9,7 @@
njcnyw njcnyw
1.工程用户 1899999999 1.工程用户 18000001234 12345678
2.营销用户 1888888888 2.营销用户 1888888888
3.正式用户 187777777777 3.正式用户 187777777777
4.运维管理元 18666666666 4.运维管理元 18666666666