From 3ae495d3c3e95019b9e0066aae3c3b35802c51fe Mon Sep 17 00:00:00 2001 From: WXL <1785969728@qq.com> Date: 星期一, 07 七月 2025 16:24:12 +0800 Subject: [PATCH] 测试完成 --- dist.zip | 0 src/store/modules/user.js | 5 + src/views/followvisit/again/index.vue | 13 ++ src/views/followvisit/record/detailpage/index.vue | 4 src/views/sfstatistics/percentage/index.vue | 27 +++-- src/utils/sipService.js | 78 ++++++++++---- src/views/patient/patient/index.vue | 2 src/components/CallButton/index.vue | 124 ++++++++++++++++-------- src/store/getters.js | 1 src/views/followvisit/discharge/index.vue | 2 10 files changed, 173 insertions(+), 83 deletions(-) diff --git a/dist.zip b/dist.zip new file mode 100644 index 0000000..f3c1fd2 --- /dev/null +++ b/dist.zip Binary files differ diff --git a/src/components/CallButton/index.vue b/src/components/CallButton/index.vue index 57690ea..6ff7055 100644 --- a/src/components/CallButton/index.vue +++ b/src/components/CallButton/index.vue @@ -1,29 +1,23 @@ <template> <div class="call-container"> + <div class="sip-status" :class="sipStatusClass"> + SIP鐘舵��: {{ sipStatus }} + </div> <!-- 鍙风爜杈撳叆 --> <input v-model="phoneNumber" type="text" placeholder="杈撳叆鐢佃瘽鍙风爜" @keyup.enter="startCall" - > + /> <!-- 鍛煎彨鎸夐挳 --> - <button - :class="['call-btn', { 'calling': isCalling }]" - @click="startCall" - > - {{ isCalling ? '閫氳瘽涓�...' : '涓�閿懠鍙�' }} + <button :class="['call-btn', { calling: isCalling }]" @click="startCall"> + {{ isCalling ? "閫氳瘽涓�..." : "涓�閿懠鍙�" }} </button> <!-- 鎸傛柇鎸夐挳 --> - <button - v-if="isCalling" - class="end-call-btn" - @click="endCall" - > - 鎸傛柇 - </button> + <button v-if="isCalling" class="end-call-btn" @click="endCall">鎸傛柇</button> <!-- 闊抽鍏冪礌锛堥殣钘忥級 --> <audio id="remoteAudio" autoplay></audio> @@ -36,60 +30,80 @@ </template> <script> -import sipService from '@/utils/sipService' +import sipService from "@/utils/sipService"; export default { data() { return { - phoneNumber: '', + phoneNumber: "", isCalling: false, - callStatus: '鍑嗗灏辩华', + callStatus: "鍑嗗灏辩华", + sipStatus: "鏈繛鎺�", + sipStatusClass: "status-disconnected", sipConfig: { - wsUrl: 'wss://192.168.100.6:7443', - sipUri: '1000@192.168.100.6', - password: 'Smartor@2023', - displayName: 'Web 灏忛緳', - realm: '192.168.100.6:8090' - } - } + wsUrl: "wss://192.168.100.6:7443", + sipUri: "1000@192.168.100.6", + password: "Smartor@2023", + displayName: "Web 灏忛緳", + realm: "192.168.100.6:8090", + }, + }; }, mounted() { + // 娴嬭瘯 + const ws = new WebSocket("wss://192.168.100.6:7443"); + ws.onopen = () => console.log("WebSocket 杩炴帴鎴愬姛"); + ws.onerror = (e) => console.error("WebSocket 閿欒:", e); + + // 鍒濆鍖朣IP杩炴帴 - sipService.init(this.sipConfig) + + sipService.init(this.sipConfig); + sipService.onStatusChange = (status) => { + this.sipStatus = status.text; + this.sipStatusClass = `status-${status.type}`; + + // 鏍规嵁鐘舵�佹洿鏂癠I鎴栨墽琛屽叾浠栨搷浣� + if (status.type === "registered") { + console.log("SIP娉ㄥ唽鎴愬姛锛屽彲浠ュ紑濮嬪懠鍙�"); + } else if (status.type === "failed") { + console.error("SIP娉ㄥ唽澶辫触"); + } + }; }, beforeDestroy() { // 缁勪欢閿�姣佹椂缁撴潫閫氳瘽 - this.endCall() + this.endCall(); }, methods: { // 寮�濮嬪懠鍙� async startCall() { if (!this.phoneNumber) { - this.callStatus = '璇疯緭鍏ョ數璇濆彿鐮�' - return + this.callStatus = "璇疯緭鍏ョ數璇濆彿鐮�"; + return; } try { - this.isCalling = true - this.callStatus = '鍛煎彨涓�...' + this.isCalling = true; + this.callStatus = "鍛煎彨涓�..."; // 璋冪敤SIP鏈嶅姟 - sipService.makeCall(this.phoneNumber) + sipService.makeCall(this.phoneNumber); - this.callStatus = '閫氳瘽宸插缓绔�' + this.callStatus = "閫氳瘽宸插缓绔�"; } catch (error) { - console.error('鍛煎彨澶辫触:', error) - this.callStatus = `鍛煎彨澶辫触: ${error.message}` - this.isCalling = false + console.error("鍛煎彨澶辫触:", error); + this.callStatus = `鍛煎彨澶辫触: ${error.message}`; + this.isCalling = false; } }, // 缁撴潫閫氳瘽 endCall() { - sipService.endCall() - this.isCalling = false - this.callStatus = '閫氳瘽宸茬粨鏉�' - } - } -} + sipService.endCall(); + this.isCalling = false; + this.callStatus = "閫氳瘽宸茬粨鏉�"; + }, + }, +}; </script> <style scoped> @@ -112,7 +126,7 @@ .call-btn { padding: 10px; - background-color: #4CAF50; + background-color: #4caf50; color: white; border: none; border-radius: 4px; @@ -124,7 +138,7 @@ } .call-btn.calling { - background-color: #2196F3; + background-color: #2196f3; } .end-call-btn { @@ -145,4 +159,30 @@ font-size: 14px; color: #666; } +.sip-status { + padding: 8px; + margin-bottom: 10px; + border-radius: 4px; + text-align: center; +} + +.status-disconnected { + background-color: #ffebee; + color: #c62828; +} + +.status-connecting { + background-color: #fff8e1; + color: #ff8f00; +} + +.status-registered { + background-color: #e8f5e9; + color: #2e7d32; +} + +.status-failed { + background-color: #ffebee; + color: #c62828; +} </style> diff --git a/src/store/getters.js b/src/store/getters.js index c59295e..8e3a768 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -8,6 +8,7 @@ token: (state) => state.user.token, avatar: (state) => state.user.avatar, name: (state) => state.user.name, + nickName: (state) => state.user.nickName, Id: (state) => state.user.Id, introduction: (state) => state.user.introduction, roles: (state) => state.user.roles, diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 524f4de..a64959d 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -5,6 +5,7 @@ state: { token: getToken(), name: '', + nickName:'', Id: '', avatar: '', hisUserId:'', @@ -87,6 +88,9 @@ SET_NAME: (state, name) => { state.name = name }, + SET_nickNAME: (state, name) => { + state.nickName = name + }, SET_Id: (state, Id) => { state.Id = Id console.log(state.Id,'user2'); @@ -168,6 +172,7 @@ commit('SET_ROLES', ['ROLE_DEFAULT']) } commit('SET_NAME', user.userName) + commit('SET_nickNAME', user.nickName) commit('SET_Id', user.userId) commit('SET_hisUserId', user.hisUserId) commit('SET_leavehospitaldistrictcodes', user.belongWards) diff --git a/src/utils/sipService.js b/src/utils/sipService.js index 95ac836..9c095dd 100644 --- a/src/utils/sipService.js +++ b/src/utils/sipService.js @@ -4,42 +4,72 @@ constructor() { this.ua = null this.currentSession = null + this.onStatusChange = null // 鐘舵�佸彉鍖栧洖璋� } // 鍒濆鍖朣IP瀹㈡埛绔� init(config) { - this.ua = new JsSIP.UA({ - sockets: [new JsSIP.WebSocketInterface(config.wsUrl)], - uri: config.sipUri, - password: config.password, - display_name: config.displayName, - realm: config.realm, - ha1: config.ha1, - register: true - }) + try { + this.updateStatus('connecting', '杩炴帴涓�...') - this.ua.start() + this.ua = new JsSIP.UA({ + sockets: [new JsSIP.WebSocketInterface(config.wsUrl)], + uri: config.sipUri, + password: config.password, + display_name: config.displayName, + realm: config.realm, + register: true, + register_expires: 300, // 娉ㄥ唽鏈夋晥鏈�(绉�) + connection_recovery_min_interval: 2, // 鏈�灏忛噸杩為棿闅� + connection_recovery_max_interval: 30 // 鏈�澶ч噸杩為棿闅� + }) - // 娉ㄥ唽浜嬩欢鐩戝惉 - this.ua.on('registered', () => { - console.log('SIP娉ㄥ唽鎴愬姛') - }) + this.ua.start() - this.ua.on('registrationFailed', (e) => { - console.error('SIP娉ㄥ唽澶辫触:', e) - }) + // 娉ㄥ唽浜嬩欢鐩戝惉 + this.ua.on('registered', () => { + this.updateStatus('registered', '宸叉敞鍐�') + }) - // 鐩戝惉鏉ョ數 - this.ua.on('newRTCSession', (data) => { - this.handleIncomingCall(data.session) - }) + this.ua.on('registrationFailed', (e) => { + this.updateStatus('failed', `娉ㄥ唽澶辫触: ${e.cause}`) + }) + + this.ua.on('disconnected', () => { + this.updateStatus('disconnected', '杩炴帴鏂紑') + }) + + this.ua.on('connected', () => { + this.updateStatus('connecting', '閲嶆柊杩炴帴涓�...') + }) + + // 鐩戝惉鏉ョ數 + this.ua.on('newRTCSession', (data) => { + this.handleIncomingCall(data.session) + }) + + } catch (error) { + this.updateStatus('failed', `鍒濆鍖栧け璐�: ${error.message}`) + console.error('SIP鍒濆鍖栧け璐�:', error) + } } - // 涓�閿嫧鍙� + // 鏇存柊鐘舵�佸苟閫氱煡UI + updateStatus(type, text) { + console.log(`SIP鐘舵�佹洿鏂�: ${type} - ${text}`) + if (this.onStatusChange) { + this.onStatusChange({ type, text }) + } + } + + // 涓�閿嫧鍙� - 澧炲姞娉ㄥ唽鐘舵�佹鏌� makeCall(targetNumber) { if (!this.ua) { - console.error('SIP瀹㈡埛绔湭鍒濆鍖�') - return + throw new Error('SIP瀹㈡埛绔湭鍒濆鍖�') + } + + if (!this.ua.isRegistered()) { + throw new Error('SIP鏈敞鍐岋紝鏃犳硶鍛煎彨') } const options = { diff --git a/src/views/followvisit/again/index.vue b/src/views/followvisit/again/index.vue index 082669a..bccd382 100644 --- a/src/views/followvisit/again/index.vue +++ b/src/views/followvisit/again/index.vue @@ -644,7 +644,17 @@ </el-form-item> </el-col> </el-row> - +<el-row > + <el-col :span="8"> + <el-form-item label="杩囨护鍖荤敓" width="100" prop="filterDrname"> + <el-input + v-model="form.filterDrname" + placeholder="璇疯緭鍏ュ尰鐢熷鍚�" + maxlength="30" + /> + </el-form-item> + </el-col> + </el-row> <el-row> <el-col :span="24"> <el-form-item label="杩囨护鍘熷洜"> @@ -1590,6 +1600,7 @@ handleUpdate(row) { particularpatient(row.patid).then((response) => { this.form = response.data; + this.form.filterDrname = store.getters.nickName; }); this.amendtag = true; this.Labelchange = true; diff --git a/src/views/followvisit/discharge/index.vue b/src/views/followvisit/discharge/index.vue index dfe82c7..55b8e24 100644 --- a/src/views/followvisit/discharge/index.vue +++ b/src/views/followvisit/discharge/index.vue @@ -1828,7 +1828,7 @@ handleUpdate(row) { particularpatient(row.patid).then((response) => { this.form = response.data; - this.form.filterDrname = store.getters.name; + this.form.filterDrname = store.getters.nickName; }); this.amendtag = true; this.Labelchange = true; diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue index 0cffc18..05807cb 100644 --- a/src/views/followvisit/record/detailpage/index.vue +++ b/src/views/followvisit/record/detailpage/index.vue @@ -353,10 +353,10 @@ </el-collapse> </div> </div> - <div> + <!-- <div> <h2>涓�閿懠鍙姛鑳�</h2> <CallButton/> - </div> + </div> --> <div> <el-tabs v-model="activeName" type="border-card"> <el-tab-pane name="wj"> diff --git a/src/views/patient/patient/index.vue b/src/views/patient/patient/index.vue index 631acb8..7236eb1 100644 --- a/src/views/patient/patient/index.vue +++ b/src/views/patient/patient/index.vue @@ -1297,7 +1297,7 @@ const userIds = row.id || this.ids; particularpatient(userIds).then((response) => { this.form = response.data; - this.form.filterDrname = store.getters.name; + this.form.filterDrname = store.getters.nickName; }); this.amendtag = true; this.Labelchange = true; diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue index 8b1537d..123346b 100644 --- a/src/views/sfstatistics/percentage/index.vue +++ b/src/views/sfstatistics/percentage/index.vue @@ -125,6 +125,7 @@ > <el-date-picker v-model="queryParams.dateRange" + value-format="yyyy-MM-dd" type="daterange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" @@ -608,18 +609,18 @@ // 鑾峰彇绉戝鏍� getDeptTree() { // 绉戝鍒楄〃 - this.flatArraydept = store.getters.belongDepts.map((dept) => { - return { - label: dept.deptName, - value: dept.deptCode, - }; - }); - this.flatArrayhospit = store.getters.belongWards.map((dept) => { - return { - label: dept.districtName, - value: dept.districtCode, - }; - }); + this.flatArraydept = store.getters.belongDepts.map((dept) => { + return { + label: dept.deptName, + value: dept.deptCode, + }; + }); + this.flatArrayhospit = store.getters.belongWards.map((dept) => { + return { + label: dept.districtName, + value: dept.districtCode, + }; + }); // deptTreeSelect().then((response) => { // this.deptOptions = response.data; // console.log(this.deptOptions, " this.deptOptions"); @@ -731,6 +732,8 @@ } else if (this.queryParams.statisticaltype == 2) { this.queryParams.leavehospitaldistrictcodes = []; } + console.log(this.queryParams.dateRange); + this.queryParams.startTime = this.parseTime( this.queryParams.dateRange[0] ); -- Gitblit v1.9.3