This commit is contained in:
parent
d6b0574b5d
commit
c29230a3c4
30
App.vue
30
App.vue
|
|
@ -1,18 +1,32 @@
|
||||||
<script>
|
<script>
|
||||||
|
import { connectWs, closeWs } from '@/common/websocketManager.js';
|
||||||
|
let globalWs = null;
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
onLaunch: function() {
|
onLaunch() {
|
||||||
console.log('App Launch')
|
console.log('App Launch');
|
||||||
|
|
||||||
},
|
},
|
||||||
onShow: function() {
|
|
||||||
console.log('App Show')
|
onShow() {
|
||||||
|
console.log('App Show');
|
||||||
|
if (uni.getStorageSync('userInfo')) {
|
||||||
|
// 重置重连计数,确保立即重连
|
||||||
|
connectWs()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
onHide: function() {
|
|
||||||
console.log('App Hide')
|
onHide() {
|
||||||
|
console.log('App Hide');
|
||||||
|
if (uni.getStorageSync('userInfo')) {
|
||||||
|
// 可选择关闭 socket,或只是停止心跳
|
||||||
|
closeWs()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import "./uni_modules/vk-uview-ui/index.scss";
|
@import "./uni_modules/vk-uview-ui/index.scss";
|
||||||
/*每个页面公共css */
|
/* 每个页面公共css */
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -0,0 +1,319 @@
|
||||||
|
// common/websocket.js
|
||||||
|
// 带中文日志与消息体打印选项的 WsRequest(替换你当前文件即可)
|
||||||
|
|
||||||
|
class WsRequest {
|
||||||
|
constructor(url = '', options = {}) {
|
||||||
|
this.url = url || '';
|
||||||
|
this.options = Object.assign({
|
||||||
|
header: {},
|
||||||
|
protocols: [],
|
||||||
|
debug: true,
|
||||||
|
lang: 'zh', // 'zh' 或 'en',控制日志语言(默认中文)
|
||||||
|
showMessageBody: true, // 是否在日志中显示收到消息的完整 JSON(默认 true)
|
||||||
|
filterPing: true, // 是否过滤掉 ping/pong 日志(默认 true)
|
||||||
|
heartbeatInterval: 30000,
|
||||||
|
heartbeatTimeout: 15000,
|
||||||
|
pingMessage: { type: 'ping' },
|
||||||
|
parseJSON: true,
|
||||||
|
maxReconnectAttempts: 10,
|
||||||
|
reconnectDelayBase: 1000,
|
||||||
|
autoConnect: false,
|
||||||
|
bindGlobal: true
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
this.socketTask = null;
|
||||||
|
this.connected = false;
|
||||||
|
this._msgQueue = [];
|
||||||
|
this.reconnectAttempts = 0;
|
||||||
|
this._lastPongAt = Date.now();
|
||||||
|
this._hbTimer = null;
|
||||||
|
this._hbTimeoutTimer = null;
|
||||||
|
this._subscriptions = new Map();
|
||||||
|
|
||||||
|
if (this.options.bindGlobal) this._bindGlobalSocketEvents();
|
||||||
|
if (this.options.autoConnect) setTimeout(() => this.open(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内部多语言 Label
|
||||||
|
_label(key) {
|
||||||
|
const zh = {
|
||||||
|
open: '打开连接 ->',
|
||||||
|
alreadyConnected: '已连接,忽略 open',
|
||||||
|
connectNoTask: 'connectSocket 未返回 task,使用全局回调',
|
||||||
|
onOpen: '连接已打开',
|
||||||
|
onMessage: '收到消息',
|
||||||
|
onClose: '连接已关闭',
|
||||||
|
onError: '连接错误',
|
||||||
|
globalOnOpen: '全局 onSocketOpen',
|
||||||
|
globalOnMessage: '全局 onSocketMessage',
|
||||||
|
hbTimeout: '心跳超时',
|
||||||
|
reconnectScheduled: '计划重连',
|
||||||
|
sendFailed: '发送失败',
|
||||||
|
closeError: '关闭错误'
|
||||||
|
};
|
||||||
|
const en = {
|
||||||
|
open: 'open ->',
|
||||||
|
alreadyConnected: 'already connected, ignore open',
|
||||||
|
connectNoTask: 'connectSocket returned no task (using global callbacks if available)',
|
||||||
|
onOpen: 'onOpen',
|
||||||
|
onMessage: 'onMessage',
|
||||||
|
onClose: 'onClose',
|
||||||
|
onError: 'onError',
|
||||||
|
globalOnOpen: 'global onSocketOpen',
|
||||||
|
globalOnMessage: 'global onSocketMessage',
|
||||||
|
hbTimeout: 'hb timeout',
|
||||||
|
reconnectScheduled: 'reconnect scheduled',
|
||||||
|
sendFailed: 'send failed',
|
||||||
|
closeError: 'close error'
|
||||||
|
};
|
||||||
|
return this.options.lang === 'zh' ? zh[key] || key : en[key] || key;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 简单统一日志
|
||||||
|
log(...args) {
|
||||||
|
if (!this.options.debug) return;
|
||||||
|
// 如果是对象,格式化输出以便控制台可读
|
||||||
|
const out = args.map(a => {
|
||||||
|
if (typeof a === 'object') {
|
||||||
|
try { return JSON.stringify(a, null, 2); } catch (e) { return String(a); }
|
||||||
|
}
|
||||||
|
return String(a);
|
||||||
|
}).join(' ');
|
||||||
|
console.log('[WsRequest]', out);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- 对外控制 ----------
|
||||||
|
open() {
|
||||||
|
if (!this.url) { this.log(this._label('open'), this._label('noUrl') || 'no url'); return; }
|
||||||
|
if (this.connected) { this.log(this._label('alreadyConnected')); return; }
|
||||||
|
this.log(this._label('open'), this.url);
|
||||||
|
try {
|
||||||
|
const task = uni.connectSocket({ url: this.url, header: this.options.header, protocols: this.options.protocols });
|
||||||
|
if (task && typeof task.onOpen === 'function') {
|
||||||
|
this._bindSocketTask(task);
|
||||||
|
} else {
|
||||||
|
this.log(this._label('connectNoTask'));
|
||||||
|
// 依赖全局回调,_bindGlobalSocketEvents 已经绑定则会处理 onOpen/onMessage
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close(code = 1000, reason = 'client close') {
|
||||||
|
this._stopHeartbeat();
|
||||||
|
try {
|
||||||
|
if (this.socketTask && typeof this.socketTask.close === 'function') {
|
||||||
|
this.socketTask.close({ code, reason });
|
||||||
|
} else if (typeof uni.closeSocket === 'function') {
|
||||||
|
uni.closeSocket();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.log(this._label('closeError'), e);
|
||||||
|
}
|
||||||
|
this.connected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
send(payload) {
|
||||||
|
const data = typeof payload === 'string' ? payload : JSON.stringify(payload);
|
||||||
|
if (this.socketTask && typeof this.socketTask.send === 'function' && this.connected) {
|
||||||
|
try { this.socketTask.send({ data }); return; } catch (e) { this.log(this._label('sendFailed'), e); this._msgQueue.push(data); }
|
||||||
|
} else {
|
||||||
|
try { uni.sendSocketMessage({ data }); return; } catch (e) { this._msgQueue.push(data); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_flushQueue() {
|
||||||
|
if (!this.connected) return;
|
||||||
|
while (this._msgQueue.length) {
|
||||||
|
const d = this._msgQueue.shift();
|
||||||
|
try {
|
||||||
|
if (this.socketTask && typeof this.socketTask.send === 'function') {
|
||||||
|
this.socketTask.send({ data: d });
|
||||||
|
} else {
|
||||||
|
uni.sendSocketMessage({ data: d });
|
||||||
|
}
|
||||||
|
} catch (e) { this._msgQueue.unshift(d); break; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_bindSocketTask(task) {
|
||||||
|
this.socketTask = task;
|
||||||
|
if (task.__ws_bound__) return;
|
||||||
|
task.__ws_bound__ = true;
|
||||||
|
|
||||||
|
task.onOpen(res => {
|
||||||
|
this.log(this._label('onOpen'), res);
|
||||||
|
this.connected = true;
|
||||||
|
this.reconnectAttempts = 0;
|
||||||
|
this._lastPongAt = Date.now();
|
||||||
|
this._startHeartbeat();
|
||||||
|
this._flushQueue();
|
||||||
|
this.options.onOpen && this.options.onOpen(res);
|
||||||
|
});
|
||||||
|
|
||||||
|
task.onMessage(msg => {
|
||||||
|
this._handleIncoming(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
task.onClose(res => {
|
||||||
|
this.log(this._label('onClose'), res);
|
||||||
|
this.connected = false;
|
||||||
|
this._stopHeartbeat();
|
||||||
|
this.options.onClose && this.options.onClose(res);
|
||||||
|
this._tryReconnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
task.onError(err => {
|
||||||
|
this.log(this._label('onError'), err);
|
||||||
|
this.connected = false;
|
||||||
|
this._stopHeartbeat();
|
||||||
|
this.options.onError && this.options.onError(err);
|
||||||
|
this._tryReconnect();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理收到的消息(task 或 全局都使用)
|
||||||
|
_handleIncoming(msg) {
|
||||||
|
this._lastPongAt = Date.now();
|
||||||
|
let data = msg && msg.data;
|
||||||
|
if (this.options.parseJSON) {
|
||||||
|
try { data = JSON.parse(msg.data); } catch (e) { /* keep raw */ }
|
||||||
|
}
|
||||||
|
const type = (data && data.type) || '__default__';
|
||||||
|
|
||||||
|
// 过滤 ping/pong (若你想看 ping/pong,把 filterPing 设为 false)
|
||||||
|
const isPing = data && (data.type === 'ping' || data.type === 'pong' || (typeof data === 'string' && (data === 'ping' || data === 'pong')));
|
||||||
|
if (isPing && this.options.filterPing) {
|
||||||
|
// 仍更新 lastPong,但不打印消息体,除非 showMessageBody 强制 true
|
||||||
|
if (this.options.debug && this.options.showMessageBody === false) {
|
||||||
|
this.log(this._label('onMessage'), type);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 打印消息类型与(可选)格式化消息体
|
||||||
|
if (this.options.debug) {
|
||||||
|
if (this.options.showMessageBody) {
|
||||||
|
let bodyStr;
|
||||||
|
try { bodyStr = JSON.stringify(data, null, 2); } catch (e) { bodyStr = String(data); }
|
||||||
|
this.log(this.options.lang === 'zh' ? `${this._label('onMessage')} (${type}):` : `${this._label('onMessage')} (${type}):`, '\n' + bodyStr);
|
||||||
|
} else {
|
||||||
|
this.log(this._label('onMessage'), type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 外部回调与订阅异步派发
|
||||||
|
if (this.options.onMessage) setTimeout(() => this.options.onMessage(data, msg), 0);
|
||||||
|
setTimeout(() => this._dispatch(type, data, msg), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
_bindGlobalSocketEvents() {
|
||||||
|
// 解绑默认全局再绑定,避免重复
|
||||||
|
try { uni.offSocketOpen && uni.offSocketOpen(); } catch (e) {}
|
||||||
|
try { uni.offSocketMessage && uni.offSocketMessage(); } catch (e) {}
|
||||||
|
try { uni.offSocketClose && uni.offSocketClose(); } catch (e) {}
|
||||||
|
try { uni.offSocketError && uni.offSocketError(); } catch (e) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
uni.onSocketOpen(res => {
|
||||||
|
this.log(this._label('globalOnOpen'), res);
|
||||||
|
this.connected = true;
|
||||||
|
this.reconnectAttempts = 0;
|
||||||
|
this._lastPongAt = Date.now();
|
||||||
|
this._startHeartbeat();
|
||||||
|
this._flushQueue();
|
||||||
|
this.options.onOpen && this.options.onOpen(res);
|
||||||
|
});
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
uni.onSocketMessage(msg => {
|
||||||
|
// 全局收到消息也走统一处理
|
||||||
|
if (this.options.debug) this.log(this._label('globalOnMessage'));
|
||||||
|
this._handleIncoming(msg);
|
||||||
|
});
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
uni.onSocketClose(res => {
|
||||||
|
this.log(this._label('globalOnClose'), res);
|
||||||
|
this.connected = false;
|
||||||
|
this._stopHeartbeat();
|
||||||
|
this.options.onClose && this.options.onClose(res);
|
||||||
|
this._tryReconnect();
|
||||||
|
});
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
uni.onSocketError(err => {
|
||||||
|
this.log(this._label('globalOnError'), err);
|
||||||
|
this.connected = false;
|
||||||
|
this._stopHeartbeat();
|
||||||
|
this.options.onError && this.options.onError(err);
|
||||||
|
this._tryReconnect();
|
||||||
|
});
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
_startHeartbeat() {
|
||||||
|
this._stopHeartbeat();
|
||||||
|
if (!this.options.heartbeatInterval) return;
|
||||||
|
const pingData = typeof this.options.pingMessage === 'string' ? this.options.pingMessage : JSON.stringify(this.options.pingMessage);
|
||||||
|
this._hbTimer = setInterval(() => {
|
||||||
|
if (!this.connected) return;
|
||||||
|
try { this.send(pingData); } catch (e) { this.log('hb send err', e); }
|
||||||
|
clearTimeout(this._hbTimeoutTimer);
|
||||||
|
this._hbTimeoutTimer = setTimeout(() => {
|
||||||
|
const since = Date.now() - this._lastPongAt;
|
||||||
|
if (since > this.options.heartbeatTimeout) {
|
||||||
|
this.log(this._label('hbTimeout'), since);
|
||||||
|
try { this.close(); } catch (e) { this.log('hb close fail', e); }
|
||||||
|
}
|
||||||
|
}, this.options.heartbeatTimeout);
|
||||||
|
}, this.options.heartbeatInterval);
|
||||||
|
}
|
||||||
|
|
||||||
|
_stopHeartbeat() {
|
||||||
|
if (this._hbTimer) { clearInterval(this._hbTimer); this._hbTimer = null; }
|
||||||
|
if (this._hbTimeoutTimer) { clearTimeout(this._hbTimeoutTimer); this._hbTimeoutTimer = null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
_tryReconnect() {
|
||||||
|
if (this.reconnectAttempts >= this.options.maxReconnectAttempts) { this.log(this._label('reconnectScheduled'), 'exhausted'); return; }
|
||||||
|
this.reconnectAttempts++;
|
||||||
|
const delay = Math.min(this.options.reconnectDelayBase * Math.pow(1.5, this.reconnectAttempts - 1), 30000);
|
||||||
|
this.log(this._label('reconnectScheduled'), delay + 'ms', 'attempt', this.reconnectAttempts);
|
||||||
|
setTimeout(() => {
|
||||||
|
this.socketTask = null;
|
||||||
|
this.connectIfForeground();
|
||||||
|
}, delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
connectIfForeground() {
|
||||||
|
// 如果你在项目中有前台检测,这里可改为判断前台才 open()
|
||||||
|
this.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
subscribe(type, handler) {
|
||||||
|
if (!this._subscriptions) this._subscriptions = new Map();
|
||||||
|
if (!this._subscriptions.has(type)) this._subscriptions.set(type, new Set());
|
||||||
|
this._subscriptions.get(type).add(handler);
|
||||||
|
return () => this.unsubscribe(type, handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsubscribe(type, handler) {
|
||||||
|
if (!this._subscriptions) return;
|
||||||
|
const s = this._subscriptions.get(type); if (!s) return; s.delete(handler);
|
||||||
|
if (s.size === 0) this._subscriptions.delete(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
_dispatch(type, data, raw) {
|
||||||
|
if (!this._subscriptions) return;
|
||||||
|
const handlers = this._subscriptions.get(type);
|
||||||
|
if (handlers) for (const h of Array.from(handlers)) try { h(data, raw); } catch (e) { this.log('handler err', e); }
|
||||||
|
const def = this._subscriptions.get('__default__');
|
||||||
|
if (def) for (const h of Array.from(def)) try { h(data, raw); } catch (e) { this.log('default handler err', e); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default WsRequest;
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// websocketManager.js
|
||||||
|
import WsRequest from '@/common/websocket.js';
|
||||||
|
|
||||||
|
let globalWs = null;
|
||||||
|
|
||||||
|
const initWs = (url, options) => {
|
||||||
|
// 如果已经有 WebSocket 实例,直接返回
|
||||||
|
if (globalWs) return globalWs;
|
||||||
|
|
||||||
|
globalWs = new WsRequest(url, options);
|
||||||
|
return globalWs;
|
||||||
|
};
|
||||||
|
|
||||||
|
const connectWs = () => {
|
||||||
|
if (globalWs) {
|
||||||
|
globalWs.reconnectAttempts = 0; // 重置重连计数
|
||||||
|
globalWs.open(); // 打开 WebSocket 连接
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const closeWs = () => {
|
||||||
|
if (globalWs) {
|
||||||
|
globalWs.close(); // 关闭 WebSocket 连接
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export { initWs, connectWs, closeWs };
|
||||||
|
|
@ -53,6 +53,7 @@
|
||||||
}
|
}
|
||||||
const go = () => {
|
const go = () => {
|
||||||
uni.setStorageSync('token', 1);
|
uni.setStorageSync('token', 1);
|
||||||
|
uni.setStorageSync('userInfo', null);
|
||||||
|
|
||||||
uni.redirectTo({
|
uni.redirectTo({
|
||||||
url: '/pages/login/login'
|
url: '/pages/login/login'
|
||||||
|
|
|
||||||
62
main.js
62
main.js
|
|
@ -1,40 +1,32 @@
|
||||||
import App from './App'
|
|
||||||
// 引入 uView UI
|
|
||||||
import uView from './uni_modules/vk-uview-ui';
|
|
||||||
|
|
||||||
|
|
||||||
// #ifndef VUE3
|
|
||||||
import Vue from 'vue'
|
|
||||||
import './uni.promisify.adaptor'
|
|
||||||
Vue.config.productionTip = false
|
|
||||||
App.mpType = 'app'
|
|
||||||
const app = new Vue({
|
|
||||||
...App
|
|
||||||
})
|
|
||||||
app.$mount()
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// #ifdef VUE3
|
// #ifdef VUE3
|
||||||
import {
|
import { createSSRApp } from 'vue'
|
||||||
createSSRApp
|
import App from './App'
|
||||||
} from 'vue'
|
import uView from './uni_modules/vk-uview-ui'
|
||||||
import donghua from '@/component/public/donghua.vue'
|
import donghua from '@/component/public/donghua.vue'
|
||||||
import errorshow from '@/component/public/errorshow.vue'
|
import errorshow from '@/component/public/errorshow.vue'
|
||||||
import tanchuang from '@/pages/procurement/components/tanchuang.vue';
|
import tanchuang from '@/pages/procurement/components/tanchuang.vue'
|
||||||
// import arrowkeys from '@/component/public/newgame/arrowkeys.vue'
|
// import WsRequest from '@/common/websocket.js' // default 导入,文件必须有 export default
|
||||||
export function createApp() {
|
|
||||||
const app = createSSRApp(App)
|
|
||||||
|
|
||||||
// 使用 uView UI
|
export function createApp() {
|
||||||
app.use(uView)
|
const app = createSSRApp(App)
|
||||||
app.component('donghua', donghua)
|
|
||||||
app.component('tanchuang', tanchuang)
|
// // 延后创建实例(构造不会阻塞主线程)
|
||||||
app.component('errorshow', errorshow)
|
// const websocket = new WsRequest(
|
||||||
|
// 'wss://www.focusnu.com/ws101/sdWebsocket/1942419556028956674',
|
||||||
|
// {
|
||||||
// app.component('arrowkeys', arrowkeys)
|
// debug: true,
|
||||||
return {
|
// heartbeatInterval: 25000
|
||||||
app
|
// }
|
||||||
}
|
// )
|
||||||
|
|
||||||
|
// app.config.globalProperties.$socket = websocket
|
||||||
|
// app.provide('socket', websocket)
|
||||||
|
|
||||||
|
app.use(uView)
|
||||||
|
app.component('donghua', donghua)
|
||||||
|
app.component('tanchuang', tanchuang)
|
||||||
|
app.component('errorshow', errorshow)
|
||||||
|
|
||||||
|
return { app }
|
||||||
}
|
}
|
||||||
// #endif
|
// #endif
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,13 @@ export const electricityMeterlist = () => {
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 获得护理单元主页大图
|
||||||
|
export const queryWorkCareList = (data) => {
|
||||||
|
return request({
|
||||||
|
url: `${uni.getStorageSync('serverUrl')}/api/pad/care/queryWorkCareList?workType=${data.workType}&employeeId=${data.employeeId}&nuId=${data.nuId}`,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
// 智能电表设备信息清零
|
// 智能电表设备信息清零
|
||||||
export const electricityMetereleReset = (cid,address) => {
|
export const electricityMetereleReset = (cid,address) => {
|
||||||
return request({
|
return request({
|
||||||
|
|
|
||||||
|
|
@ -1453,10 +1453,10 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 重新刷新动画
|
// 重新刷新动画
|
||||||
let donghua = typeNowtarget.value;
|
// let donghua = typeNowtarget.value;
|
||||||
typeNowtarget.value = -1;
|
typeNowtarget.value = -1;
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
typeNowtarget.value = donghua
|
typeNowtarget.value = 0
|
||||||
},500)
|
},500)
|
||||||
|
|
||||||
// rightmessage.value = res.result.cameraInfoEntityList[0]
|
// rightmessage.value = res.result.cameraInfoEntityList[0]
|
||||||
|
|
|
||||||
|
|
@ -100,8 +100,17 @@
|
||||||
:interval="120" />
|
:interval="120" />
|
||||||
</view>
|
</view>
|
||||||
<view class="weight-time">
|
<view class="weight-time">
|
||||||
10:00 - 10:10
|
<view class="" v-if="indexmessage?.startTime">
|
||||||
<view class="pao-father">
|
{{ indexmessage?.startTime.slice(11, 16) }}
|
||||||
|
-
|
||||||
|
{{ indexmessage?.endTime.slice(11, 16) }}
|
||||||
|
</view>
|
||||||
|
<view class="" v-show="!indexmessage?.startTime">
|
||||||
|
暂无数据
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
<view class="pao-father" v-show="indexmessage?.startTime">
|
||||||
<image class="pao-img" :src="`/static/index/newindex/states/pao.png`" />
|
<image class="pao-img" :src="`/static/index/newindex/states/pao.png`" />
|
||||||
<view style="z-index: 1;">
|
<view style="z-index: 1;">
|
||||||
待执行
|
待执行
|
||||||
|
|
@ -109,27 +118,27 @@
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<image class="big-img" :src="`/static/index/newindex/wendu/2.png`" />
|
<image class="big-img" :src="indexmessage?.previewFile? 'https://www.focusnu.com/media/upFiles/' + indexmessage?.previewFile: `/static/index/newindex/wendu/2.png`" />
|
||||||
<view style="display: flex;align-items: center;">
|
<view style="display: flex;align-items: center;">
|
||||||
<view class="server-name">
|
<view class="server-name" v-if="indexmessage?.startTime">
|
||||||
一级压疮防护
|
{{ indexmessage?.directiveName }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view style="display: flex;margin-top: 40rpx;">
|
<view style="display: flex;margin-top: 40rpx;">
|
||||||
<view style="width: 240rpx;height: 90rpx;margin-right: 40rpx;">
|
<view style="width: 240rpx;height: 90rpx;margin-right: 40rpx;">
|
||||||
<view class="start-button">
|
<view class="start-button" v-show="indexmessage?.startTime">
|
||||||
开始服务
|
开始服务
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view style="width: 240rpx;height: 90rpx;">
|
<view style="width: 240rpx;height: 90rpx;">
|
||||||
<view class="end-button">
|
<view class="end-button" v-show="indexmessage?.startTime">
|
||||||
结束服务
|
结束服务
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="left-menu">
|
<view class="left-menu" v-show="indexmessage?.startTime">
|
||||||
<view v-for="(item,index) in leftArray" :key="index" style="margin: 30rpx 0;">
|
<view v-for="(item,index) in leftArray" :key="index" style="margin: 30rpx 0;">
|
||||||
<view class="left-ball">
|
<view class="left-ball">
|
||||||
<image class="left-menu-img" :src="item" />
|
<image class="left-menu-img" :src="item" />
|
||||||
|
|
@ -137,7 +146,7 @@
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="right-menu">
|
<view class="right-menu" v-show="indexmessage?.startTime">
|
||||||
<view class="zhezhao-top" @click="scrollTop -= 115"></view>
|
<view class="zhezhao-top" @click="scrollTop -= 115"></view>
|
||||||
<view class="zhezhao-bottom" @click="scrollTop += 115"></view>
|
<view class="zhezhao-bottom" @click="scrollTop += 115"></view>
|
||||||
<image class="top-img" :src="`/static/index/newindex/rightmenu/top.png`"
|
<image class="top-img" :src="`/static/index/newindex/rightmenu/top.png`"
|
||||||
|
|
@ -198,7 +207,8 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
<image class="big-older" :src="`/static/index/newindex/leftmenu/${uni.getStorageSync('NUall').elderInfo?.name?`older`:`nopeople`}.png`" />
|
<image class="big-older"
|
||||||
|
:src="`/static/index/newindex/leftmenu/${uni.getStorageSync('NUall').elderInfo?.name?`older`:`nopeople`}.png`" />
|
||||||
<view class="name-weight">
|
<view class="name-weight">
|
||||||
{{ uni.getStorageSync('NUall').elderInfo?.name ? uni.getStorageSync('NUall').elderInfo?.name:`暂无长者` }}
|
{{ uni.getStorageSync('NUall').elderInfo?.name ? uni.getStorageSync('NUall').elderInfo?.name:`暂无长者` }}
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -260,6 +270,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, onBeforeUnmount, computed, nextTick, watch } from 'vue';
|
import { ref, onMounted, onBeforeUnmount, computed, nextTick, watch } from 'vue';
|
||||||
import { queryPadPageList } from '@/pages/watch/api/lunpan.js'
|
import { queryPadPageList } from '@/pages/watch/api/lunpan.js'
|
||||||
|
import { queryWorkCareList } from './api.js'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
isShow: {
|
isShow: {
|
||||||
|
|
@ -280,6 +291,7 @@
|
||||||
uni.setStorageSync('nuName', data.nuName);
|
uni.setStorageSync('nuName', data.nuName);
|
||||||
uni.setStorageSync('elderId', data.elderInfo ? data.elderInfo?.id : null);
|
uni.setStorageSync('elderId', data.elderInfo ? data.elderInfo?.id : null);
|
||||||
uni.setStorageSync('NUall', data);
|
uni.setStorageSync('NUall', data);
|
||||||
|
getgif()
|
||||||
}
|
}
|
||||||
const tagarray = ["市医保", "半失能", "正常计费"]
|
const tagarray = ["市医保", "半失能", "正常计费"]
|
||||||
|
|
||||||
|
|
@ -418,7 +430,8 @@
|
||||||
// 每秒更新一次时间
|
// 每秒更新一次时间
|
||||||
setInterval(updateTime, 1000);
|
setInterval(updateTime, 1000);
|
||||||
photoplay.value = true;
|
photoplay.value = true;
|
||||||
getmenu()
|
getmenu();
|
||||||
|
getgif();
|
||||||
})
|
})
|
||||||
const filteredMenu = (index : number) => {
|
const filteredMenu = (index : number) => {
|
||||||
return leftMenuArray.value.filter(item => Number(item.areaFlag) - 1 == index);
|
return leftMenuArray.value.filter(item => Number(item.areaFlag) - 1 == index);
|
||||||
|
|
@ -433,6 +446,19 @@
|
||||||
})
|
})
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
const indexmessage = ref({});
|
||||||
|
const getgif = () => {
|
||||||
|
let data = {
|
||||||
|
nuId: uni.getStorageSync('NUall').nuId,
|
||||||
|
employeeId: uni.getStorageSync('userInfo').employessId,
|
||||||
|
workType: 5
|
||||||
|
}
|
||||||
|
queryWorkCareList(data).then((res : any) => {
|
||||||
|
// console.log("看看图",res.result.records[0])
|
||||||
|
indexmessage.value = res.result.records[0]
|
||||||
|
// console.log("看看图",'https://www.focusnu.com/media/upFiles/'+indexmessage.value.previewFile)
|
||||||
|
})
|
||||||
|
}
|
||||||
const lanjie = ref(false);
|
const lanjie = ref(false);
|
||||||
const gotolook = () => {
|
const gotolook = () => {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
|
|
@ -542,7 +568,7 @@
|
||||||
margin-top: 0.5vw;
|
margin-top: 0.5vw;
|
||||||
width: 9vw;
|
width: 9vw;
|
||||||
height: 9vw;
|
height: 9vw;
|
||||||
|
|
||||||
border: 1rpx solid #DCDCDC;
|
border: 1rpx solid #DCDCDC;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1909,12 +1909,13 @@
|
||||||
border-top: 17.32rpx solid #999;
|
border-top: 17.32rpx solid #999;
|
||||||
/* 0.866 * s */
|
/* 0.866 * s */
|
||||||
margin: 0rpx 0rpx 0 15rpx;
|
margin: 0rpx 0rpx 0 15rpx;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mark-bgc {
|
.mark-bgc {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50rpx;
|
top: 20rpx;
|
||||||
left: 0;
|
right: 0;
|
||||||
width: 450rpx;
|
width: 450rpx;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,23 @@
|
||||||
:class="!topindex&&!bodystatus&&!facestatus?'firsttarget':''">
|
:class="!topindex&&!bodystatus&&!facestatus?'firsttarget':''">
|
||||||
<view class="mark">
|
<view class="mark">
|
||||||
<view style="margin-right: 15rpx;">
|
<view style="margin-right: 15rpx;">
|
||||||
体型标签:
|
老人标签:
|
||||||
</view>
|
</view>
|
||||||
<view class="overlay" v-show="openbody" @click="openbody=false"></view>
|
<view class="overlay" v-show="openbody" @click="openbody=false"></view>
|
||||||
|
</view>
|
||||||
|
<view class="marknone" @click="openbody=!openbody;openface=false">
|
||||||
|
<view v-if="!bodyTagListLook.length&&!emotionTagListLook.length" style="margin-top: -3rpx;">
|
||||||
|
未选择
|
||||||
|
</view>
|
||||||
|
<view v-for="(item,index) in bodyTagListLook" :key="index">
|
||||||
|
<image class="tags-img" style="width: 40rpx;height: 40rpx;margin: 0 10rpx;" :src="item" />
|
||||||
|
</view>
|
||||||
|
<view v-for="(item,index) in emotionTagListLook" :key="index">
|
||||||
|
<image class="tags-img" style="width: 40rpx;height: 40rpx;margin: 0 10rpx;" :src="item" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="tri-down" @click="openbody=!openbody;openface=false">
|
||||||
|
|
||||||
<view class="mark-bgc" v-show="openbody" :style="{opacity:bodydonghua?1:0}" @click.stop>
|
<view class="mark-bgc" v-show="openbody" :style="{opacity:bodydonghua?1:0}" @click.stop>
|
||||||
<view style="margin-top: 40rpx;margin-bottom: 30rpx;;margin-left: 50rpx;font-size: 32rpx;">
|
<view style="margin-top: 40rpx;margin-bottom: 30rpx;;margin-left: 50rpx;font-size: 32rpx;">
|
||||||
<view>
|
<view>
|
||||||
|
|
@ -35,19 +49,27 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
<view style="margin-top: 40rpx;margin-bottom: 30rpx;;margin-left: 50rpx;font-size: 32rpx;">
|
||||||
|
<view>
|
||||||
|
情绪标签
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view style="display: flex;flex-wrap: wrap;">
|
||||||
|
<view v-for="(item,index) in emotionTagList" :key="index" @click="addface(index)">
|
||||||
|
<view class="tags-father" :class="facestatustarget===index?'secondtarget':''">
|
||||||
|
<image class="tags-img"
|
||||||
|
:src="item.izSelected==`Y`?item.netPicFocus: item.netPic" />
|
||||||
|
<view class="tags-font"
|
||||||
|
:style="item.izSelected==`Y`?{color:`rgb(54, 159, 239)`}:{}">
|
||||||
|
{{item.tagName}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="marknone" @click="openbody=!openbody;openface=false">
|
|
||||||
<view v-if="!bodyTagListLook.length" style="margin-top: -3rpx;">
|
|
||||||
未选择
|
|
||||||
</view>
|
|
||||||
<view v-for="(item,index) in bodyTagListLook" :key="index">
|
|
||||||
<image class="tags-img" style="width: 40rpx;height: 40rpx;margin: 0 10rpx;" :src="item" />
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="tri-down" @click="openbody=!openbody;openface=false"></view>
|
|
||||||
</view>
|
</view>
|
||||||
<view style="display: flex;align-items: center;margin-right: 15rpx;padding: 0 15rpx;"
|
<!-- <view style="display: flex;align-items: center;margin-right: 15rpx;padding: 0 15rpx;"
|
||||||
:class="topindex===1&&!bodystatus&&!facestatus?'firsttarget':''">
|
:class="topindex===1&&!bodystatus&&!facestatus?'firsttarget':''">
|
||||||
<view class="mark">
|
<view class="mark">
|
||||||
情绪标签:
|
情绪标签:
|
||||||
|
|
@ -82,18 +104,18 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="tri-down" @click="openface=!openface;openbody=false"></view>
|
<view class="tri-down" @click="openface=!openface;openbody=false"></view>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="white-button" :class="topindex===2?'firsttarget':''" @click="routerPush">
|
<view class="white-button" @click="routerPush">
|
||||||
<image class="white-img" :src="`/static/index/newruler/yulan.png`" />
|
<image class="white-img" :src="`/static/index/newruler/yulan.png`" />
|
||||||
预览
|
预览
|
||||||
</view>
|
</view>
|
||||||
<view class="white-button" :class="topindex===3?'firsttarget':''" @click="shareToWeixin">
|
<view class="white-button" @click="shareToWeixin">
|
||||||
<image class="white-img" :src="`/static/index/newruler/fenxiang.png`" />
|
<image class="white-img" :src="`/static/index/newruler/fenxiang.png`" />
|
||||||
分享
|
分享
|
||||||
</view>
|
</view>
|
||||||
<view class="white-button" :class="topindex===3?'firsttarget':''" @click="zhilingbao">
|
<view class="white-button" @click="changLeft(5)">
|
||||||
<image class="white-img" :src="`/static/index/newruler/fenxiang.png`" />
|
<image class="white-img" style="width: 45rpx;height: 45rpx;" :src="`/static/index/newruler/watch.png`" />
|
||||||
指令包
|
监控
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -633,7 +655,7 @@
|
||||||
|
|
||||||
if (targetNumber > 1) {
|
if (targetNumber > 1) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "标签最多只能添加两个",
|
title: "每种标签最多只能添加两个",
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
duration: 3000
|
duration: 3000
|
||||||
})
|
})
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,18 +1,23 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="backgroundContainer">
|
<view class="backgroundContainer">
|
||||||
|
<!-- 左侧菜单 -->
|
||||||
<leftcontent :list="tabbrarr" @navurl="navurl"></leftcontent>
|
<leftcontent :list="tabbrarr" @navurl="navurl"></leftcontent>
|
||||||
|
|
||||||
<!-- 主页 -->
|
<!-- 主页 -->
|
||||||
<index :isShow="menuIndexshow" v-if="!menuIndex" />
|
<index :isShow="menuIndexshow" v-if="!menuIndex" />
|
||||||
<!-- 设备页 -->
|
<!-- 设备页 -->
|
||||||
<equipment :isShow="menuIndexshowfifth" v-if="menuIndex==4" />
|
<equipment :isShow="menuIndexshowfifth" v-if="menuIndex==4" />
|
||||||
|
<!-- 医嘱页 -->
|
||||||
<requestform :isShow="menuIndexshowfourth" v-if="menuIndex==3" />
|
<requestform :isShow="menuIndexshowfourth" v-if="menuIndex==3" />
|
||||||
<!-- 户嘱页 -->
|
<!-- 户嘱页 -->
|
||||||
<nurse :isshow="menuIndexshowsecond"
|
<nurse :isshow="menuIndexshowsecond"
|
||||||
v-if="menuIndex==1&&uni.getStorageSync('elderId')&&uni.getStorageSync('nuId')" />
|
v-if="menuIndex==1&&uni.getStorageSync('elderId')&&uni.getStorageSync('nuId')" />
|
||||||
<!-- 医嘱 -->
|
<!-- 医嘱 -->
|
||||||
<doctorask v-if="menuIndex==2"/>
|
<doctorask v-if="menuIndex==2&&uni.getStorageSync('elderId')&&uni.getStorageSync('nuId')" />
|
||||||
|
<!-- 没有数据 -->
|
||||||
|
<view class="nomessageclass" :style="messageopit?{opacity: `1`}:{opacity: `0`}"
|
||||||
|
v-if="(menuIndex == 1 || menuIndex == 2) && (!uni.getStorageSync('elderId') ||!uni.getStorageSync('nuId'))">
|
||||||
|
<defaultr cont="暂无老人入住"></defaultr>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -26,6 +31,8 @@
|
||||||
import { onShow } from '@dcloudio/uni-app';
|
import { onShow } from '@dcloudio/uni-app';
|
||||||
import { getServiceTree, getNcPackagelist } from './component/nurse/api.js'
|
import { getServiceTree, getNcPackagelist } from './component/nurse/api.js'
|
||||||
import leftcontent from "./component/leftcontent/leftcontent.vue"
|
import leftcontent from "./component/leftcontent/leftcontent.vue"
|
||||||
|
import defaultr from '@/pages/procurement/components/default.vue';
|
||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
menuIndex.value = -1;
|
menuIndex.value = -1;
|
||||||
|
|
@ -41,7 +48,6 @@
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
// 通用的生成函数
|
// 通用的生成函数
|
||||||
function genPaths(base, prefix, count, ext = 'png', startIndex = 0, pad = false) {
|
function genPaths(base, prefix, count, ext = 'png', startIndex = 0, pad = false) {
|
||||||
return Array.from({ length: count }, (_, i) => {
|
return Array.from({ length: count }, (_, i) => {
|
||||||
|
|
@ -52,27 +58,30 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const tabbrarr = ref([
|
const tabbrarr = ref([
|
||||||
{name:'首页',url:'/static/shouye/sy/h0.png',urls:'/static/shouye/sy/h1.png'},
|
{ name: '首页', url: '/static/shouye/sy/h0.png', urls: '/static/shouye/sy/h1.png' },
|
||||||
{name:'护嘱',url:'/static/shouye/sy/n0.png',urls:'/static/shouye/sy/n1.png'},
|
{ name: '护嘱', url: '/static/shouye/sy/n0.png', urls: '/static/shouye/sy/n1.png' },
|
||||||
{name:'医嘱',url:'/static/shouye/sy/y0.png',urls:'/static/shouye/sy/y1.png'},
|
{ name: '医嘱', url: '/static/shouye/sy/y0.png', urls: '/static/shouye/sy/y1.png' },
|
||||||
{name:'后勤',url:'/static/shouye/sy/l0.png',urls:'/static/shouye/sy/l1.png'},
|
{ name: '后勤', url: '/static/shouye/sy/l0.png', urls: '/static/shouye/sy/l1.png' },
|
||||||
{name:'物联',url:'/static/shouye/sy/g0.png',urls:'/static/shouye/sy/g1.png'},
|
{ name: '物联', url: '/static/shouye/sy/g0.png', urls: '/static/shouye/sy/g1.png' },
|
||||||
{name:'返回',url:'/static/shouye/sy/f0.png',urls:'/static/shouye/sy/f1.png'},
|
{ name: '返回', url: '/static/shouye/sy/f0.png', urls: '/static/shouye/sy/f1.png' },
|
||||||
])
|
])
|
||||||
const navurl =(e)=>{
|
const navurl = (e) => {
|
||||||
changeMenu(e)
|
changeMenu(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 当前选中的菜单索引
|
// 当前选中的菜单索引
|
||||||
const menuIndex = ref<number>(-1);
|
const menuIndex = ref<number>(-1);
|
||||||
const menuIndexshow = ref<boolean>(false);
|
const menuIndexshow = ref<boolean>(false);
|
||||||
const menuIndexshowsecond = ref<boolean>(false);
|
const menuIndexshowsecond = ref<boolean>(false);
|
||||||
const menuIndexshowfourth = ref<boolean>(false);
|
const menuIndexshowfourth = ref<boolean>(false);
|
||||||
const menuIndexshowfifth = ref<boolean>(false);
|
const menuIndexshowfifth = ref<boolean>(false);
|
||||||
|
const messageopit = ref<boolean>(false);
|
||||||
|
|
||||||
// 变更菜单
|
// 变更菜单
|
||||||
const changeMenu = (index : number) => {
|
const changeMenu = (index : number) => {
|
||||||
|
if (index === menuIndex.value) {
|
||||||
|
return
|
||||||
|
}
|
||||||
menuIndex.value = index;
|
menuIndex.value = index;
|
||||||
menuIndexshow.value = false
|
menuIndexshow.value = false
|
||||||
menuIndexshowsecond.value = false
|
menuIndexshowsecond.value = false
|
||||||
|
|
@ -89,7 +98,11 @@
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
menuIndexshowsecond.value = true
|
menuIndexshowsecond.value = true
|
||||||
|
nomesssageshow()
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
nomesssageshow()
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
menuIndexshowfourth.value = true
|
menuIndexshowfourth.value = true
|
||||||
|
|
@ -121,12 +134,15 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const nomesssageshow = () => {
|
||||||
|
messageopit.value = false;
|
||||||
|
setTimeout(() => {
|
||||||
|
messageopit.value = true;
|
||||||
|
}, 200)
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
|
||||||
.backgroundContainer {
|
.backgroundContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
@ -137,5 +153,8 @@
|
||||||
z-index: 12;
|
z-index: 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nomessageclass {
|
||||||
|
width: 100vw;
|
||||||
|
transition: opacity 1s ease;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="photo-father">
|
<view class="photo-father">
|
||||||
<view class="juzhong" style="margin-left: -30rpx;">
|
<view class="juzhong" style="margin-left: -30rpx;z-index: 1;">
|
||||||
<donghua :width="`1300rpx`" :height="`900rpx`" :links="blueArray" :playing="photoplay" :loop="true"
|
<donghua :width="`1300rpx`" :height="`900rpx`" :links="blueArray" :playing="photoplay" :loop="true"
|
||||||
:interval="120" />
|
:interval="120" />
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -568,6 +568,7 @@
|
||||||
.big-img {
|
.big-img {
|
||||||
width: 550rpx;
|
width: 550rpx;
|
||||||
height: 550rpx;
|
height: 550rpx;
|
||||||
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.server-name {
|
.server-name {
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,7 @@
|
||||||
import twoseven from '@/pages/login/twoseven.vue'
|
import twoseven from '@/pages/login/twoseven.vue'
|
||||||
import { isRel, getLoginCode, loginApp } from './api.js'
|
import { isRel, getLoginCode, loginApp } from './api.js'
|
||||||
import huakuai from '@/component/public/huakuai.vue'
|
import huakuai from '@/component/public/huakuai.vue'
|
||||||
|
import { initWs, connectWs } from '@/common/websocketManager.js';
|
||||||
|
|
||||||
const zyupgrade = ref(null);
|
const zyupgrade = ref(null);
|
||||||
const isTarget = ref(false);
|
const isTarget = ref(false);
|
||||||
|
|
@ -202,18 +203,18 @@
|
||||||
const getImg = () => {
|
const getImg = () => {
|
||||||
if (/^\d{11}$/.test(form.username)) {
|
if (/^\d{11}$/.test(form.username)) {
|
||||||
isRel(form.username).then((res : any) => {
|
isRel(form.username).then((res : any) => {
|
||||||
console.log("啥啊",res)
|
console.log("啥啊", res)
|
||||||
if (res.result.code == `0`) {
|
if (res.result.code == `0`) {
|
||||||
uni.setStorageSync('serverUrl', res.result.orgList[0].serverUrl);
|
uni.setStorageSync('serverUrl', res.result.orgList[0].serverUrl);
|
||||||
uni.setStorageSync('orgList', res.result.orgList);
|
uni.setStorageSync('orgList', res.result.orgList);
|
||||||
uni.setStorageSync('orgListName', res.result.orgList[0].departName);
|
uni.setStorageSync('orgListName', res.result.orgList[0].departName);
|
||||||
uni.setStorageSync('orgListCode', res.result.orgList[0].orgCode);
|
uni.setStorageSync('orgListCode', res.result.orgList[0].orgCode);
|
||||||
|
|
||||||
allserve.value = res.result.orgList
|
allserve.value = res.result.orgList
|
||||||
time.value = Date.now();
|
time.value = Date.now();
|
||||||
|
|
||||||
getLoginCode(time.value).then((res : any) => {
|
getLoginCode(time.value).then((res : any) => {
|
||||||
console.log("啥啊",res)
|
console.log("啥啊", res)
|
||||||
form.captcha = res.message
|
form.captcha = res.message
|
||||||
canclick.value = true
|
canclick.value = true
|
||||||
})
|
})
|
||||||
|
|
@ -367,6 +368,14 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const gotoindex = () => {
|
const gotoindex = () => {
|
||||||
|
if (uni.getStorageSync('userInfo')) {
|
||||||
|
initWs(`wss://www.focusnu.com/ws101/sdWebsocket/${uni.getStorageSync('userInfo').employessId}`, {
|
||||||
|
debug: true,
|
||||||
|
heartbeatInterval: 25000,
|
||||||
|
autoConnect: false, // 不自动连接
|
||||||
|
});
|
||||||
|
connectWs(); // 主动连接 WebSocket
|
||||||
|
}
|
||||||
jumpTo(`/pages/login/animationpage`)
|
jumpTo(`/pages/login/animationpage`)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// 全局请求封装
|
// 全局请求封装
|
||||||
// const base_url = 'https://www.focusnu.com/opeapi'
|
const base_url = 'https://www.focusnu.com/opeapi'
|
||||||
const base_url = 'http://192.168.2.37:8081/opeapi'
|
// const base_url = 'http://192.168.2.37:8081/opeapi'
|
||||||
|
// const base_url = 'http://192.168.2.27:8091/opeapi'
|
||||||
// const base_url = 'http://localhost:8091/opeapi'
|
// const base_url = 'http://localhost:8091/opeapi'
|
||||||
// 请求超出时间
|
// 请求超出时间
|
||||||
const timeout = 5000
|
const timeout = 5000
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
Loading…
Reference in New Issue