app更新对l2数据显示

This commit is contained in:
2026-01-15 20:18:37 +08:00
parent eed35addb5
commit 8e3a26448a
14 changed files with 1072 additions and 363 deletions

View File

@@ -1,20 +1,18 @@
import request from '@/utils/request' import zinc1Request from '@/utils/zinc1Request'
// 获取当前生产中的计划信息 // 获取当前生产中的计划信息
export function getCurrentPlan() { export function getCurrentPlan() {
return request({ return zinc1Request({
url: '/api/business/dashboard/currentPlan', url: '/api/business/dashboard/currentPlan',
method: 'get', method: 'get'
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }
// 获取当前生产卷的关键工艺参数 // 获取当前生产卷的关键工艺参数
export function getCurrentProcess() { export function getCurrentProcess() {
return request({ return zinc1Request({
url: '/api/business/dashboard/currentProcess', url: '/api/business/dashboard/currentProcess',
method: 'get', method: 'get'
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }

View File

@@ -1,22 +1,20 @@
import request from '@/utils/request' import zinc1Request from '@/utils/zinc1Request'
// 生产实绩汇总 // 生产实绩汇总
export function getReportSummary(params) { export function getReportSummary(params) {
return request({ return zinc1Request({
url: '/api/report/summary', url: '/api/report/summary',
method: 'get', method: 'get',
params, params
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }
// 生产实绩明细 // 生产实绩明细
export function getReportDetails(params) { export function getReportDetails(params) {
return request({ return zinc1Request({
url: '/api/report/details', url: '/api/report/details',
method: 'get', method: 'get',
params, params
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }

View File

@@ -1,12 +1,11 @@
import request from '@/utils/request' import zinc1Request from '@/utils/zinc1Request'
// 停机记录列表 // 停机记录列表
export function listStoppage(data) { export function listStoppage(data) {
return request({ return zinc1Request({
url: '/api/stoppage/list', url: '/api/stoppage/list',
method: 'post', method: 'post',
data, data
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }

View File

@@ -1,4 +1,6 @@
import request from '@/utils/request' import request from '@/utils/request'
import errorCode from '@/utils/errorCode'
import { toast, tansParams } from '@/utils/common'
// 登录方法 // 登录方法
export function login(username, password, code, uuid) { export function login(username, password, code, uuid) {
@@ -18,6 +20,50 @@ export function login(username, password, code, uuid) {
}) })
} }
// Zinc1系统登录方法直接使用uni.request因为登录接口不需要token完全静默处理
export function loginZinc1(username, password, code, uuid) {
const data = {
username,
password,
code,
uuid
}
const baseUrl = 'http://140.143.206.120:10082/prod-api'
const timeout = 10000
return new Promise((resolve, reject) => {
uni.request({
method: 'post',
timeout: timeout,
url: baseUrl + '/login',
data: data,
header: {
'Content-Type': 'application/json'
},
dataType: 'json'
}).then(response => {
let [error, res] = response
if (error) {
// 静默失败,不显示任何提示
reject('Zinc1系统连接异常')
return
}
const code = res.data.code || 200
if (code === 200 && res.data && res.data.token) {
// 只有成功时才resolve
resolve(res.data)
} else {
// 其他情况静默失败
reject('Zinc1登录失败')
}
}).catch(error => {
// 静默失败,不显示任何提示
reject(error)
})
})
}
// 注册方法 // 注册方法
export function register(data) { export function register(data) {
return request({ return request({

View File

@@ -1,10 +1,9 @@
import request from '@/utils/request' import zinc1Request from '@/utils/zinc1Request'
export function listDeviceEnumAll() { export function listDeviceEnumAll() {
return request({ return zinc1Request({
url: '/api/deviceEnum/all', url: '/api/deviceEnum/all',
method: 'get', method: 'get'
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }

View File

@@ -1,10 +1,9 @@
import request from '@/utils/request' import zinc1Request from '@/utils/zinc1Request'
export function getDeviceFieldMetaAll() { export function getDeviceFieldMetaAll() {
return request({ return zinc1Request({
url: '/api/deviceFieldMeta/all', url: '/api/deviceFieldMeta/all',
method: 'get', method: 'get'
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }

View File

@@ -1,22 +1,20 @@
import request from '@/utils/request' import zinc1Request from '@/utils/zinc1Request'
// 获取最新N条设备快照 // 获取最新N条设备快照
export function listDeviceSnapshotLatest(params) { export function listDeviceSnapshotLatest(params) {
return request({ return zinc1Request({
url: '/api/deviceSnapshot/latest', url: '/api/deviceSnapshot/latest',
method: 'get', method: 'get',
params, params
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }
// 按时间范围查询设备快照 // 按时间范围查询设备快照
export function listDeviceSnapshotRange(params) { export function listDeviceSnapshotRange(params) {
return request({ return zinc1Request({
url: '/api/deviceSnapshot/range', url: '/api/deviceSnapshot/range',
method: 'get', method: 'get',
params, params
baseUrl: 'http://140.143.206.120:10082/prod-api'
}) })
} }

View File

@@ -404,7 +404,7 @@ export default {
gridColor: "#e4e7ed", gridColor: "#e4e7ed",
showTitle: true, showTitle: true,
fontSize: 10, fontSize: 10,
data: [{ min: 0, title: "温度(°C)" }] data: [{ min: 0, title: "m/min" }]
}, },
extra: { extra: {
line: { line: {

File diff suppressed because it is too large Load Diff

View File

@@ -7,13 +7,17 @@ import {
} from "@/utils/validate" } from "@/utils/validate"
import { import {
login, login,
loginZinc1,
logout, logout,
getInfo getInfo
} from '@/api/login' } from '@/api/login'
import { import {
getToken, getToken,
setToken, setToken,
removeToken removeToken,
getZinc1Token,
setZinc1Token,
removeZinc1Token
} from '@/utils/auth' } from '@/utils/auth'
import defAva from '@/static/images/avatar.png' import defAva from '@/static/images/avatar.png'
@@ -56,25 +60,41 @@ const user = {
}, },
actions: { actions: {
// 登录 // 登录主系统登录成功即算登录成功Zinc1系统静默登录
Login({ Login({
commit commit
}, userInfo) { }, userInfo) {
const username = userInfo.username.trim() const username = userInfo.username.trim()
const password = userInfo.password const password = userInfo.password
const code = userInfo.code const code = userInfo.code
const uuid = userInfo.uuid const uuid = userInfo.uuid
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => { // 先执行主系统登录
console.log('token', res) login(username, password, code, uuid).then(mainRes => {
setToken(res.data.token) // 主系统登录成功立即保存token并resolve
commit('SET_TOKEN', res.data.token) if (mainRes && mainRes.data && mainRes.data.token) {
resolve() setToken(mainRes.data.token)
}).catch(error => { commit('SET_TOKEN', mainRes.data.token)
reject(error) }
// 主系统登录成功后静默执行Zinc1登录不等待结果不显示任何错误
loginZinc1(username, password, code, uuid).then(zinc1Res => {
// Zinc1登录成功静默保存token
if (zinc1Res && zinc1Res.data && zinc1Res.data.token) {
setZinc1Token(zinc1Res.data.token)
}
}).catch(() => {
// Zinc1登录失败完全静默处理不做任何提示
}) })
// 主系统登录成功即返回
resolve()
}).catch(error => {
// 只有主系统登录失败才reject
reject(error)
}) })
}, })
},
// 获取用户信息 // 获取用户信息
GetInfo({ GetInfo({
@@ -106,24 +126,25 @@ const user = {
}) })
}, },
// 退出系统 // 退出系统
LogOut({ LogOut({
commit, commit,
state state
}) { }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logout(state.token).then(() => { logout(state.token).then(() => {
commit('SET_TOKEN', '') commit('SET_TOKEN', '')
commit('SET_ROLES', []) commit('SET_ROLES', [])
commit('SET_PERMISSIONS', []) commit('SET_PERMISSIONS', [])
removeToken() removeToken()
storage.clean() removeZinc1Token() // 同时清除Zinc1 token
resolve() storage.clean()
}).catch(error => { resolve()
reject(error) }).catch(error => {
}) reject(error)
}) })
} })
}
} }
} }

View File

@@ -1,4 +1,5 @@
const TokenKey = 'App-Token' const TokenKey = 'App-Token'
const Zinc1TokenKey = 'App-Zinc1-Token'
export function getToken() { export function getToken() {
return uni.getStorageSync(TokenKey) return uni.getStorageSync(TokenKey)
@@ -11,3 +12,16 @@ export function setToken(token) {
export function removeToken() { export function removeToken() {
return uni.removeStorageSync(TokenKey) return uni.removeStorageSync(TokenKey)
} }
// Zinc1系统的token管理
export function getZinc1Token() {
return uni.getStorageSync(Zinc1TokenKey)
}
export function setZinc1Token(token) {
return uni.setStorageSync(Zinc1TokenKey, token)
}
export function removeZinc1Token() {
return uni.removeStorageSync(Zinc1TokenKey)
}

View File

@@ -20,9 +20,7 @@ const request = config => {
url = url.slice(0, -1) url = url.slice(0, -1)
config.url = url config.url = url
} }
console.log('请求参数[' + config.method + config.url + ']', config)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
uni.request({ uni.request({
method: config.method || 'get', method: config.method || 'get',

View File

@@ -13,6 +13,13 @@ export function createMeasureSocket({
} = {}) { } = {}) {
let socket = null let socket = null
let manualClose = false let manualClose = false
// 保存回调函数的引用,允许清空
let callbacks = {
onOpen,
onClose,
onError,
onMessage
}
const wsBase = (config.wsUrl || config.baseUrl || '').replace(/^http/, 'ws') const wsBase = (config.wsUrl || config.baseUrl || '').replace(/^http/, 'ws')
const url = `${wsBase}/websocket?type=${type}` const url = `${wsBase}/websocket?type=${type}`
@@ -30,12 +37,12 @@ export function createMeasureSocket({
}, },
fail(err) { fail(err) {
console.error('connectSocket 调用失败:', err) console.error('connectSocket 调用失败:', err)
onError && onError(err) callbacks.onError && callbacks.onError(err)
} }
}) })
} catch (err) { } catch (err) {
console.error('connectSocket 执行异常(可能环境不支持 WebSocket:', err) console.error('connectSocket 执行异常(可能环境不支持 WebSocket:', err)
onError && onError(err) callbacks.onError && callbacks.onError(err)
return return
} }
@@ -47,24 +54,52 @@ export function createMeasureSocket({
// 正确的事件注册方式socketTask.onOpen / onMessage / onError / onClose // 正确的事件注册方式socketTask.onOpen / onMessage / onError / onClose
socket.onOpen((res) => { socket.onOpen((res) => {
console.log('WebSocket 已打开', res) console.log('WebSocket 已打开', res)
onOpen && onOpen(res) // 检查回调是否已被清空
if (callbacks && callbacks.onOpen) {
try {
callbacks.onOpen(res)
} catch (e) {
// 忽略回调错误
}
}
}) })
socket.onMessage((evt) => { socket.onMessage((evt) => {
// H5 为 evt.data小程序为 evt.data统一兼容 // H5 为 evt.data小程序为 evt.data统一兼容
const data = evt && (evt.data || evt) const data = evt && (evt.data || evt)
onMessage && onMessage(data) // 检查回调是否已被清空
if (callbacks && callbacks.onMessage) {
try {
callbacks.onMessage(data)
} catch (e) {
// 忽略回调错误,可能是组件已销毁
}
}
}) })
socket.onError((err) => { socket.onError((err) => {
console.error('WebSocket 发生错误:', err) console.error('WebSocket 发生错误:', err)
onError && onError(err) // 检查回调是否已被清空
if (callbacks && callbacks.onError) {
try {
callbacks.onError(err)
} catch (e) {
// 忽略回调错误
}
}
}) })
socket.onClose((evt) => { socket.onClose((evt) => {
console.log('WebSocket 已关闭', evt) console.log('WebSocket 已关闭', evt)
onClose && onClose(evt) // 检查回调是否已被清空
if (!manualClose) { if (callbacks && callbacks.onClose) {
try {
callbacks.onClose(evt)
} catch (e) {
// 忽略回调错误
}
}
if (!manualClose && callbacks) {
setTimeout(connect, 3000) setTimeout(connect, 3000)
} }
}) })
@@ -72,8 +107,19 @@ export function createMeasureSocket({
function close() { function close() {
manualClose = true manualClose = true
// 清空所有回调,防止在关闭过程中或关闭后触发回调
callbacks = {
onOpen: null,
onClose: null,
onError: null,
onMessage: null
}
if (socket) { if (socket) {
socket.close(1000, 'client close') try {
socket.close(1000, 'client close')
} catch (e) {
// ignore
}
socket = null socket = null
} }
} }
@@ -93,6 +139,16 @@ export function createMeasureSocket({
}) })
} }
return { connect, close, send } // 清空回调函数的方法
function clearCallbacks() {
callbacks = {
onOpen: null,
onClose: null,
onError: null,
onMessage: null
}
}
return { connect, close, send, clearCallbacks }
} }

View File

@@ -0,0 +1,70 @@
import store from '@/store'
import config from '@/config'
import { getZinc1Token } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { toast, showConfirm, tansParams } from '@/utils/common'
let timeout = 10000
// 固定使用 zinc1 的 baseUrl
const baseUrl = 'http://140.143.206.120:10082/prod-api'
const zinc1Request = config => {
// 是否需要设置 token
const isToken = (config.header || {}).isToken === false
config.header = config.header || {}
// 使用Zinc1系统的token
if (getZinc1Token() && !isToken) {
config.header['Authorization'] = 'Bearer ' + getZinc1Token()
}
// get请求映射params参数
if (config.params) {
let url = config.url + '?' + tansParams(config.params)
url = url.slice(0, -1)
config.url = url
}
return new Promise((resolve, reject) => {
uni.request({
method: config.method || 'get',
timeout: config.timeout || timeout,
url: baseUrl + config.url,
data: config.data,
header: config.header,
dataType: 'json'
}).then(response => {
let [error, res] = response
if (error) {
toast('后端接口连接异常')
reject('后端接口连接异常')
return
}
const code = res.data.code || 200
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 401) {
// Zinc1系统是可选的如果返回401静默处理不显示任何提示
reject('Zinc1系统登录状态已过期')
} else if (code === 500) {
toast(msg)
reject('500')
} else if (code !== 200) {
toast(msg)
reject(code)
}
resolve(res.data)
})
.catch(error => {
let { message } = error
if (message === 'Network Error') {
message = '后端接口连接异常'
} else if (message.includes('timeout')) {
message = '系统接口请求超时'
} else if (message.includes('Request failed with status code')) {
message = '系统接口' + message.substr(message.length - 3) + '异常'
}
toast(message)
reject(error)
})
})
}
export default zinc1Request