已重命名1个文件
已修改43个文件
已添加10个文件
| | |
| | | method: "get", |
| | | }); |
| | | } |
| | | // æ¥çé®å·é»è®¤å¡«æ¥æé |
| | | export function getconfigKey(Id) { |
| | | return request({ |
| | | url: "/system/config/configKey/" + Id, |
| | | method: "get", |
| | | }); |
| | | } |
| | | // æ°å¢æä¿®æ¹é®å·æ¨¡æ¿è¯¦æ
|
| | | export function compileQtemplate(data) { |
| | | return request({ |
| | |
| | | data: data, |
| | | }); |
| | | } |
| | | // ä»»å¡è§åå é¤ |
| | | |
| | | export function deltaskrule(taskid) { |
| | | return request({ |
| | | url: "/smartor/taskrule/remove/" + taskid, |
| | | method: "get", |
| | | }); |
| | | } |
| | | // ä»»å¡è§åæ¥è¯¢ |
| | | export function taskrulelist(data) { |
| | | return request({ |
| | | url: "/smartor/taskrule/list", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | // ä»»å¡è§åæ°å¢ |
| | | export function addtaskrule(data) { |
| | | return request({ |
| | | url: "/smartor/taskrule/add", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } // ä»»å¡è§åä¿®æ¹ |
| | | export function edittaskrule(data) { |
| | | return request({ |
| | | url: "/smartor/taskrule/edit", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // æ¥è¯¢ä»»å¡è¯¦æ
|
| | | export function getTaskInfo(data) { |
| | |
| | | // è·åè¯é³ä»»å¡æ¨¡æ¿è¯¦æ
|
| | | export function selectInfoByCondition(data) { |
| | | return request({ |
| | | url: "/smartor/ivrTaskTemplate/selectInfoByCondition", |
| | | url: "/smartor/ivrTaskTemplate/selectInfoByCondition", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | |
| | | data: data, |
| | | }); |
| | | } |
| | | // ä¸ç
ç»è®¡æ¥è¯¢ |
| | | export function getSpecialSfStatistics(data) { |
| | | return request({ |
| | | url: "/smartor/serviceSubtask/getSpecialSfStatistics", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | // 满æåº¦ç»è®¡ |
| | | export function getSfStatisticsJoy(data) { |
| | | return request({ |
| | |
| | | <div class="call-container"> |
| | | <div class="sip-status" :class="sipStatusClass"> |
| | | SIPç¶æ: {{ sipStatus }} |
| | | <span v-if="reconnectCount > 0" class="reconnect-info"> |
| | | (éè¿: {{ reconnectCount }}次) |
| | | </span> |
| | | </div> |
| | | |
| | | <!-- ç¶ææ¾ç¤º --> |
| | |
| | | { |
| | | calling: isCalling, |
| | | registering: isRegistering, |
| | | reconnecting: isReconnecting, |
| | | }, |
| | | ]" |
| | | @click="startCall" |
| | | :disabled="isButtonDisabled" |
| | | > |
| | | <i v-if="isRegistering" class="el-icon-loading"></i> |
| | | <i v-if="isRegistering || isReconnecting" class="el-icon-loading"></i> |
| | | {{ callButtonText }} |
| | | </button> |
| | | |
| | | <!-- æå¨éè¿æé® --> |
| | | <button |
| | | v-if="showManualReconnect" |
| | | class="reconnect-btn" |
| | | @click="manualReconnect" |
| | | :disabled="isRegistering" |
| | | > |
| | | æå¨éè¿ |
| | | </button> |
| | | |
| | | <!-- æææé® --> |
| | |
| | | }, |
| | | }, |
| | | data() { |
| | | const randomNum = Math.floor(Math.random() * 20) + 1000; // å®ä¹éæºåæºå· |
| | | const randomNum = Math.floor(Math.random() * 20) + 1000; |
| | | return { |
| | | isCalling: false, |
| | | isRegistering: true, // åå§ä¸ºæ³¨åä¸ç¶æ |
| | | isRegistering: true, |
| | | isReconnecting: false, // æ·»å éè¿ä¸ç¶æ |
| | | randomNum: randomNum, |
| | | randomID: null, |
| | | orgname: localStorage.getItem("orgname"), |
| | | callStatus: "idle", // idle, calling, connected, ended |
| | | callStatus: "idle", |
| | | sipStatus: "æªè¿æ¥", |
| | | sipStatusClass: "status-disconnected", |
| | | reconnectCount: 0, // éè¿æ¬¡æ° |
| | | lastActivityTime: null, // æåæ´»å¨æ¶é´ |
| | | heartbeatTimer: null, // å¿è·³å®æ¶å¨ |
| | | reconnectTimer: null, // éè¿å®æ¶å¨ |
| | | maxReconnectAttempts: 5, // æå¤§éè¿å°è¯æ¬¡æ° |
| | | reconnectDelay: 5000, // éè¿å»¶è¿(ms) |
| | | sipConfig: { |
| | | // ç§»é¤ç¡¬ç¼ç çwsUrlådomain |
| | | wsUrl: "", |
| | | sipUri: "", |
| | | password: "Smartor@2023", //丽水 |
| | | // password: "heskj@1234",//å¸ä¸ |
| | | password: "Smartor@2023", |
| | | displayName: "Web å°é¾", |
| | | // realm: "9.208.5.18:8090", |
| | | }, |
| | | }; |
| | | }, |
| | |
| | | }, |
| | | countdownText() { |
| | | if (this.sipStatus !== "已注å") return ""; |
| | | |
| | | const { canCall, reason } = sipService.canMakeCall(); |
| | | if (!canCall && reason.includes("çå¾
")) { |
| | | return reason; |
| | |
| | | }, |
| | | isButtonDisabled() { |
| | | return ( |
| | | this.isCalling || this.sipStatus !== "已注å" || this.isRegistering |
| | | this.isCalling || |
| | | this.sipStatus !== "已注å" || |
| | | this.isRegistering || |
| | | this.isReconnecting |
| | | ); |
| | | }, |
| | | callButtonText() { |
| | | if (this.isRegistering) return "注åä¸..."; |
| | | if (this.isReconnecting) return "éè¿ä¸..."; |
| | | return this.isCalling ? "éè¯ä¸..." : "ä¸é®å¼å«"; |
| | | }, |
| | | callStatusClass() { |
| | | return `status-${this.callStatus}`; |
| | | }, |
| | | showManualReconnect() { |
| | | return ( |
| | | !this.isCalling && |
| | | !this.isRegistering && |
| | | this.sipStatus !== "已注å" && |
| | | this.sipStatus !== "è¿æ¥ä¸" |
| | | ); |
| | | }, |
| | | }, |
| | | created() { |
| | |
| | | } else { |
| | | this.sipConfig.password = "Smartor@2023"; |
| | | } |
| | | |
| | | // CallgetList(); |
| | | }, |
| | | |
| | | async mounted() { |
| | |
| | | return; |
| | | } |
| | | await this.CallgetList(); |
| | | this.isRegistering = true; // å¼å§æ³¨å |
| | | sipService.init(this.sipConfig); |
| | | // è®¾ç½®ç¶æåè° |
| | | sipService.onStatusChange = (status) => { |
| | | this.sipStatus = status.text; |
| | | this.sipStatusClass = `status-${status.type}`; |
| | | // 注åæåæå¤±è´¥æ¶åæ¶å è½½ç¶æ |
| | | if (status.type === "registered" || status.type === "failed") { |
| | | this.isRegistering = false; |
| | | } |
| | | // 注åæå |
| | | if (status.type === "registered") { |
| | | this.startCallsetState(); |
| | | } |
| | | // å¤ç注å失败åæå¼è¿æ¥æ
åµ |
| | | if (status.type === "failed" || status.type === "disconnected") { |
| | | this.overCallsetState(); // éæ¾åæºå· |
| | | this.isRegistering = false; |
| | | } |
| | | }; |
| | | |
| | | // çå¬éè¯ç¶æåå |
| | | sipService.onCallStatusChange = (status) => { |
| | | this.callStatus = status.type; |
| | | this.isCalling = status.type === "calling" || status.type === "connected"; |
| | | |
| | | // éç¥ç¶ç»ä»¶éè¯ç¶æåå |
| | | this.$emit("call-status-change", status); |
| | | }; |
| | | // æ·»å æ³¨åè¶
æ¶å¤ç |
| | | setTimeout(() => { |
| | | if (this.isRegistering && this.sipStatus !== "已注å") { |
| | | this.isRegistering = false; |
| | | this.$message.warning("SIP注åè¶
æ¶ï¼è¯·æ£æ¥ç½ç»è¿æ¥"); |
| | | } |
| | | }, 10000); // 10ç§è¶
æ¶ |
| | | this.isRegistering = true; |
| | | this.initSipService(); |
| | | this.setupHeartbeat(); |
| | | }, |
| | | methods: { |
| | | async initSipService() { |
| | | try { |
| | | // åå§åsipService |
| | | sipService.init(this.sipConfig); |
| | | |
| | | // è®¾ç½®ç¶æåè° |
| | | sipService.onStatusChange = (status) => { |
| | | this.sipStatus = status.text; |
| | | this.sipStatusClass = `status-${status.type}`; |
| | | |
| | | // å¤çåç§ç¶æ |
| | | if (status.type === "registered") { |
| | | this.handleRegistered(); |
| | | } else if (status.type === "failed" || status.type === "disconnected") { |
| | | this.handleDisconnected(); |
| | | } else if (status.type === "connecting") { |
| | | this.handleConnecting(); |
| | | } |
| | | }; |
| | | |
| | | // çå¬éè¯ç¶æåå |
| | | sipService.onCallStatusChange = (status) => { |
| | | this.callStatus = status.type; |
| | | this.isCalling = status.type === "calling" || status.type === "connected"; |
| | | this.updateLastActivityTime(); // éè¯ç¶æååæ¶æ´æ°æ´»å¨æ¶é´ |
| | | |
| | | this.$emit("call-status-change", status); |
| | | }; |
| | | |
| | | // 设置è¶
æ¶å¤ç |
| | | this.setupRegistrationTimeout(); |
| | | |
| | | } catch (error) { |
| | | console.error("SIPæå¡åå§å失败:", error); |
| | | this.handleDisconnected(); |
| | | } |
| | | }, |
| | | |
| | | handleRegistered() { |
| | | console.log("SIP注åæå"); |
| | | this.isRegistering = false; |
| | | this.isReconnecting = false; |
| | | this.reconnectCount = 0; // éç½®éè¿è®¡æ° |
| | | this.updateLastActivityTime(); |
| | | this.startCallsetState(); |
| | | |
| | | // æ¸
é¤éè¿å®æ¶å¨ |
| | | if (this.reconnectTimer) { |
| | | clearTimeout(this.reconnectTimer); |
| | | this.reconnectTimer = null; |
| | | } |
| | | }, |
| | | |
| | | handleDisconnected() { |
| | | console.log("SIPè¿æ¥æå¼"); |
| | | this.isRegistering = false; |
| | | this.overCallsetState(); |
| | | |
| | | // 妿䏿¯éè¯ä¸æå¼ï¼å°è¯éè¿ |
| | | if (!this.isCalling) { |
| | | this.scheduleReconnect(); |
| | | } |
| | | }, |
| | | |
| | | handleConnecting() { |
| | | this.isReconnecting = true; |
| | | }, |
| | | |
| | | setupRegistrationTimeout() { |
| | | setTimeout(() => { |
| | | if (this.isRegistering && this.sipStatus !== "已注å") { |
| | | this.isRegistering = false; |
| | | this.$message.warning("SIP注åè¶
æ¶ï¼æ£å¨å°è¯éè¿..."); |
| | | this.scheduleReconnect(); |
| | | } |
| | | }, 10000); |
| | | }, |
| | | |
| | | // 设置å¿è·³æ£æµ |
| | | setupHeartbeat() { |
| | | this.heartbeatTimer = setInterval(() => { |
| | | this.checkConnection(); |
| | | }, 60000); // æ¯30ç§æ£æ¥ä¸æ¬¡è¿æ¥ |
| | | }, |
| | | |
| | | // æ£æ¥è¿æ¥ç¶æ |
| | | async checkConnection() { |
| | | // 妿æ£å¨æ³¨åãéè¿æéè¯ä¸ï¼ä¸æ£æ¥ |
| | | if (this.isRegistering || this.isReconnecting || this.isCalling) { |
| | | return; |
| | | } |
| | | |
| | | // æ£æ¥SIPè¿æ¥ç¶æ |
| | | if (sipService && sipService.ua) { |
| | | const isConnected = sipService.ua.isConnected(); |
| | | const isRegistered = sipService.ua.isRegistered(); |
| | | |
| | | if (!isConnected || !isRegistered) { |
| | | console.log("å¿è·³æ£æµ: è¿æ¥å¼å¸¸ï¼å°è¯éè¿"); |
| | | await this.reconnectSip(); |
| | | } else { |
| | | console.log("å¿è·³æ£æµ: è¿æ¥æ£å¸¸"); |
| | | this.updateLastActivityTime(); |
| | | } |
| | | } else { |
| | | console.log("å¿è·³æ£æµ: UAä¸åå¨ï¼å°è¯éæ°åå§å"); |
| | | await this.reconnectSip(); |
| | | } |
| | | }, |
| | | |
| | | // 计åéè¿ |
| | | scheduleReconnect() { |
| | | if (this.reconnectTimer || this.isReconnecting) { |
| | | return; |
| | | } |
| | | |
| | | if (this.reconnectCount >= this.maxReconnectAttempts) { |
| | | console.log("è¾¾å°æå¤§éè¿æ¬¡æ°ï¼åæ¢éè¿"); |
| | | this.$message.error("SIPè¿æ¥å¤±è´¥ï¼è¯·å·æ°é¡µé¢éè¯"); |
| | | return; |
| | | } |
| | | |
| | | this.reconnectCount++; |
| | | const delay = Math.min(this.reconnectDelay * Math.pow(1.5, this.reconnectCount - 1), 30000); |
| | | |
| | | console.log(`计åå¨${delay}msåéè¿ï¼ç¬¬${this.reconnectCount}次å°è¯`); |
| | | |
| | | this.reconnectTimer = setTimeout(() => { |
| | | this.reconnectSip(); |
| | | }, delay); |
| | | }, |
| | | |
| | | // éæ°è¿æ¥SIP |
| | | async reconnectSip() { |
| | | if (this.isReconnecting || this.isRegistering) { |
| | | return; |
| | | } |
| | | |
| | | console.log("å¼å§éè¿SIPæå¡..."); |
| | | this.isReconnecting = true; |
| | | |
| | | try { |
| | | // æ¸
çç°æè¿æ¥ |
| | | this.cleanupSipConnection(); |
| | | |
| | | // çå¾
䏿®µæ¶é´ |
| | | await new Promise(resolve => setTimeout(resolve, 1000)); |
| | | |
| | | // éæ°åå§å |
| | | await this.CallgetList(); // éæ°è·ååæºå· |
| | | this.initSipService(); |
| | | |
| | | } catch (error) { |
| | | console.error("éè¿å¤±è´¥:", error); |
| | | this.isReconnecting = false; |
| | | this.scheduleReconnect(); // 失败åç»§ç»éè¯ |
| | | } finally { |
| | | if (this.reconnectTimer) { |
| | | clearTimeout(this.reconnectTimer); |
| | | this.reconnectTimer = null; |
| | | } |
| | | } |
| | | }, |
| | | |
| | | // æ¸
çSIPè¿æ¥ |
| | | cleanupSipConnection() { |
| | | if (sipService && sipService.ua) { |
| | | try { |
| | | sipService.ua.stop(); |
| | | sipService.ua.unregister(); |
| | | } catch (e) { |
| | | console.warn("æ¸
çSIPè¿æ¥æ¶åºé:", e); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | // æå¨éè¿ |
| | | async manualReconnect() { |
| | | this.reconnectCount = 0; // éç½®éè¿è®¡æ° |
| | | await this.reconnectSip(); |
| | | }, |
| | | |
| | | // æ´æ°æåæ´»å¨æ¶é´ |
| | | updateLastActivityTime() { |
| | | this.lastActivityTime = Date.now(); |
| | | }, |
| | | |
| | | async startCall() { |
| | | if (!this.phoneNumber) { |
| | | this.$message.error("请è¾å
¥çµè¯å·ç "); |
| | |
| | | // å
æ£æ¥æ¯å¦å¯ä»¥å¼å« |
| | | const { canCall, reason } = sipService.canMakeCall(); |
| | | if (!canCall) { |
| | | const { canCall, reason } = sipService.canMakeCall(); |
| | | //this.$message.warning(reason); |
| | | //return; |
| | | // å¯é: å¯ä»¥æ¾ç¤ºæç¤º |
| | | } |
| | | |
| | | this.callStatus = "calling"; |
| | | this.isCalling = true; |
| | | console.log("å¼å§å¼å«ï¼", sipService); |
| | | |
| | | await sipService.makeCall(this.phoneNumber); |
| | | } catch (error) { |
| | | let registrationTime = Date.now(); // è®°å½æ³¨éæåæ¶é´ |
| | | console.log(registrationTime, "å¼å«å¤±è´¥æ¶é´"); |
| | | console.error("å¼å«å¤±è´¥1:", error); |
| | | // this.callStatus = "ended"; |
| | | // this.isCalling = false; |
| | | //this.$message.error(`å¼å«å¤±è´¥: ${error.message}`); |
| | | |
| | | try { |
| | | // å
æ£æ¥æ¯å¦å¯ä»¥å¼å« |
| | | // å°è¯å 0忬¡å¼å« |
| | | const { canCall, reason } = sipService.canMakeCall(); |
| | | if (!canCall) { |
| | | const { canCall, reason } = sipService.canMakeCall(); |
| | | // å¯éå¤ç |
| | | } |
| | | this.callStatus = "calling"; |
| | | this.isCalling = true; |
| | | console.log("å¼å§å¼å«ï¼", sipService); |
| | | console.log("å°è¯å 0忬¡å¼å«ï¼", sipService); |
| | | |
| | | await sipService.makeCall("0" + this.phoneNumber); |
| | | } catch (error) { |
| | | this.callStatus = "ended"; |
| | | this.isCalling = false; |
| | | this.$message.error("å¼å«å¤±è´¥ï¼è¯·æ£æ¥ç½ç»æå·ç "); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | // æ¥è¯¢å¯ç¨åæºå· |
| | | async CallgetList() { |
| | | try { |
| | | const res = await CallgetList(); |
| | | this.randomNum = res.data[0].tel; |
| | | this.randomID = res.data[0].id; |
| | | // å¨æè®¾ç½®sipUriï¼ååé¨åä¼å¨sipServiceä¸å¨æå¤ç |
| | | |
| | | const orgName = localStorage.getItem("orgname"); |
| | | if (orgName == "丽水å¸ä¸å»é¢") { |
| | | this.sipConfig.sipUri = `${this.randomNum}@192.168.10.124`; |
| | |
| | | } |
| | | } catch (error) { |
| | | console.error("è·ååæºå·å¤±è´¥:", error); |
| | | // this.updateStatus("failed", "è·ååæºå·å¤±è´¥"); |
| | | throw error; // æåºé误以便ä¸å±å¤ç |
| | | } |
| | | }, |
| | | |
| | | async startCallsetState() { |
| | | try { |
| | | await CallsetState({ id: this.randomID, state: 1 }); |
| | |
| | | console.error("éæ¾åæºå·å¤±è´¥:", error); |
| | | } |
| | | }, |
| | | |
| | | endCall() { |
| | | sipService.endCall(); |
| | | this.callStatus = "ended"; |
| | | this.isCalling = false; |
| | | }, |
| | | |
| | | cleanupResources() { |
| | | // æ¸
餿æå®æ¶å¨ |
| | | if (this.heartbeatTimer) { |
| | | clearInterval(this.heartbeatTimer); |
| | | this.heartbeatTimer = null; |
| | | } |
| | | |
| | | if (this.reconnectTimer) { |
| | | clearTimeout(this.reconnectTimer); |
| | | this.reconnectTimer = null; |
| | | } |
| | | |
| | | // ç»æéè¯ |
| | | if (this.isCalling) { |
| | | sipService.endCall(); |
| | |
| | | this.overCallsetState(); |
| | | |
| | | // æå¼ SIP è¿æ¥ |
| | | if (sipService.ua) { |
| | | sipService.ua.stop(); |
| | | } |
| | | this.cleanupSipConnection(); |
| | | }, |
| | | }, |
| | | beforeUnmount() { |
| | | // ç»ä»¶éæ¯æ¶ç¡®ä¿éæ¾èµæº |
| | | this.cleanupResources(); |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | /* ä¿æåææ ·å¼ä¸åï¼åªæ·»å æ°æ ·å¼ */ |
| | | .call-container { |
| | | display: flex; |
| | | flex-direction: column; |
| | |
| | | border-radius: 8px; |
| | | } |
| | | |
| | | input { |
| | | padding: 8px; |
| | | border: 1px solid #ccc; |
| | | border-radius: 4px; |
| | | .reconnect-info { |
| | | font-size: 12px; |
| | | color: #666; |
| | | margin-left: 5px; |
| | | } |
| | | |
| | | .call-btn { |
| | | .reconnect-btn { |
| | | padding: 8px 12px; |
| | | background-color: #ff9800; |
| | | color: white; |
| | | border: none; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | font-size: 12px; |
| | | } |
| | | |
| | | .reconnect-btn:hover:not(:disabled) { |
| | | background-color: #f57c00; |
| | | } |
| | | |
| | | .reconnect-btn:disabled { |
| | | background-color: #cccccc; |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | .call-btn.reconnecting { |
| | | background-color: #ff9800; |
| | | } |
| | | |
| | | .call-btn:hover:not(:disabled) { |
| | | background-color: #45a049; |
| | | } |
| | | |
| | | .call-btn:disabled { |
| | | background-color: #cccccc; |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | .call-btn.calling { |
| | | background-color: #2196f3; |
| | | } |
| | | |
| | | .call-btn.registering, |
| | | .call-btn.reconnecting { |
| | | position: relative; |
| | | } |
| | | |
| | | .end-call-btn { |
| | | padding: 10px; |
| | | background-color: #4caf50; |
| | | background-color: #f44336; |
| | | color: white; |
| | | border: none; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .end-call-btn:hover { |
| | | background-color: #d32f2f; |
| | | } |
| | | |
| | | /* ç¶ææ ·å¼ä¿æä¸å */ |
| | | .sip-status, |
| | | .call-status { |
| | | padding: 8px; |
| | | margin: 10px 0; |
| | | 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; |
| | | } |
| | | |
| | | .status-idle { |
| | |
| | | } |
| | | |
| | | .status-ended { |
| | | background-color: #ffebee; |
| | | color: #c62828; |
| | | } |
| | | |
| | | /* åææ ·å¼ä¿æä¸å */ |
| | | .call-container { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | max-width: 300px; |
| | | margin: 0 auto; |
| | | padding: 20px; |
| | | border: 1px solid #eee; |
| | | border-radius: 8px; |
| | | } |
| | | |
| | | .call-btn { |
| | | padding: 10px; |
| | | background-color: #4caf50; |
| | | color: white; |
| | | border: none; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .call-btn:hover:not(:disabled) { |
| | | background-color: #45a049; |
| | | } |
| | | |
| | | .call-btn:disabled { |
| | | background-color: #cccccc; |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | .call-btn.calling { |
| | | background-color: #2196f3; |
| | | } |
| | | |
| | | .end-call-btn { |
| | | padding: 10px; |
| | | background-color: #f44336; |
| | | color: white; |
| | | border: none; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .end-call-btn:hover { |
| | | background-color: #d32f2f; |
| | | } |
| | | |
| | | .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; |
| | | } |
| | | .call-btn:hover { |
| | | background-color: #45a049; |
| | | } |
| | | |
| | | .call-btn.calling { |
| | | background-color: #2196f3; |
| | | } |
| | | |
| | | .end-call-btn { |
| | | padding: 10px; |
| | | background-color: #f44336; |
| | | color: white; |
| | | border: none; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .end-call-btn:hover { |
| | | background-color: #d32f2f; |
| | | } |
| | | |
| | | .call-status { |
| | | margin-top: 10px; |
| | | 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; |
| | | } |
| | |
| | | :data="donorchargeList" |
| | | tooltip-effect="dark" |
| | | style="width: 100%" |
| | | @select="handleSelect" |
| | | @select-all="handleSelectAll" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column class="checkall" type="selection" width="55"> |
| | | <el-table-column |
| | | class="checkall" |
| | | type="selection" |
| | | width="55" |
| | | :selectable="checkSelectable" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="icdid" |
| | |
| | | }, |
| | | donorchargeList: [], |
| | | donorchargeanlList: [], //æ¡ä¾å表 |
| | | // æ°å¢ï¼æ¯å¦æ£å¨å¤çå
¨éæä½çæ å¿ |
| | | isSelectAllProcessing: false, |
| | | }; |
| | | }, |
| | | |
| | |
| | | this.Restorecheck(); |
| | | }); |
| | | }, |
| | | // å¤éæ¡é䏿°æ® |
| | | handleSelectionChange(selection) { |
| | | if (this.decision) return; |
| | | // 夿æ¯å¦æå é¤ |
| | | if (this.multipleSelection.length <= selection.length) { |
| | | this.multipleSelection = selection; |
| | | |
| | | // æ°å¢ï¼å¤çåä¸ªéæ© |
| | | handleSelect(selection, row) { |
| | | if (this.isSelectAllProcessing) return; |
| | | |
| | | const isSelected = selection.includes(row); |
| | | this.handleItemSelection(row, isSelected); |
| | | }, |
| | | |
| | | // æ°å¢ï¼å¤çå
¨é/å
¨ä¸é |
| | | handleSelectAll(selection) { |
| | | this.isSelectAllProcessing = true; |
| | | |
| | | if (selection.length === 0) { |
| | | // å
¨ä¸éï¼ç§»é¤å½åé¡µæææ°æ® |
| | | this.donorchargeList.forEach(item => { |
| | | this.removeFromSelections(item); |
| | | }); |
| | | } else { |
| | | this.multipleSelection.forEach((item) => { |
| | | if (selection.includes(item)) { |
| | | } else { |
| | | if (this.multipleSelection.length == 1) { |
| | | this.multipleSelection = []; |
| | | } else { |
| | | this.multipleSelection.splice( |
| | | this.multipleSelection.indexOf(item), |
| | | 1 |
| | | ); |
| | | } |
| | | if (this.overallCase.length == 1) { |
| | | this.overallCase = []; |
| | | } else { |
| | | this.overallCase.splice(this.overallCase.indexOf(item), 1); |
| | | } |
| | | } |
| | | // å
¨éï¼æ·»å å½åé¡µæææ°æ® |
| | | this.donorchargeList.forEach(item => { |
| | | this.addToSelections(item); |
| | | }); |
| | | } |
| | | // èµå¼ç»æ´ä½é䏿°ç» |
| | | this.multipleSelection.forEach((item) => { |
| | | |
| | | if (this.overallCase.every((obj) => obj.icdname != item.icdname)) { |
| | | this.overallCase.push(item); |
| | | } |
| | | this.$nextTick(() => { |
| | | this.isSelectAllProcessing = false; |
| | | }); |
| | | console.log(this.multipleSelection, "触åéæ©åmultipleSelection"); |
| | | }, |
| | | |
| | | // æ°å¢ï¼å¤çå个项ç®çéæ©/åæ¶éæ© |
| | | handleItemSelection(row, isSelected) { |
| | | if (isSelected) { |
| | | this.addToSelections(row); |
| | | } else { |
| | | this.removeFromSelections(row); |
| | | } |
| | | }, |
| | | |
| | | // æ°å¢ï¼æ·»å å°éä¸å表 |
| | | addToSelections(row) { |
| | | // 妿已ç»å¨å¤éæ°ç»ä¸ï¼ä¸åæ·»å |
| | | if (this.multipleSelection.some(item => item.icdid === row.icdid)) { |
| | | return; |
| | | } |
| | | |
| | | this.multipleSelection.push(row); |
| | | |
| | | // æ·»å å°æ»æ°ç» |
| | | if (this.overallCase.every(item => item.icdid !== row.icdid)) { |
| | | this.overallCase.push({...row}); |
| | | } |
| | | }, |
| | | |
| | | // æ°å¢ï¼ä»éä¸åè¡¨ç§»é¤ |
| | | removeFromSelections(row) { |
| | | const index = this.multipleSelection.findIndex(item => item.icdid === row.icdid); |
| | | if (index > -1) { |
| | | this.multipleSelection.splice(index, 1); |
| | | } |
| | | |
| | | // 仿»æ°ç»ä¸ç§»é¤ |
| | | const overallIndex = this.overallCase.findIndex(item => item.icdid === row.icdid); |
| | | if (overallIndex > -1) { |
| | | this.overallCase.splice(overallIndex, 1); |
| | | } |
| | | }, |
| | | |
| | | // ä¿çåæçselection-changeäºä»¶å¤çï¼ä½ç®åé»è¾ |
| | | handleSelectionChange(selection) { |
| | | // 妿æ£å¨å¤çå
¨éæä½ï¼ä¸æ§è¡è¿éçé»è¾ |
| | | if (this.isSelectAllProcessing) return; |
| | | |
| | | // åæç夿é»è¾å¯ä»¥ä¿çï¼ä½ä¸ºäºæ¸
æ°ï¼å»ºè®®ä½¿ç¨ä¸é¢çæ°æ¹æ³ |
| | | console.log('selection changed:', selection.length); |
| | | }, |
| | | |
| | | // 忢页忢å¤éä¸ |
| | | Restorecheck() { |
| | | console.log(this.overallCase, "this.overallCase"); |
| | |
| | | AddDispatchpatients() { |
| | | this.$emit("addoption"); |
| | | }, |
| | | |
| | | // æ°å¢ï¼æ£æ¥æ¯å¦å¯ä»¥éæ©ï¼å¯éï¼ç¨äºæ§å¶æäºè¡ä¸å¯éï¼ |
| | | checkSelectable(row, index) { |
| | | return true; // ææè¡é½å¯é |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | } |
| | | } |
| | | ::v-deep.el-table .el-table__header th:first-child .el-checkbox { |
| | | display: none; |
| | | display: inline-block; /* ä¿®æ¹è¿éï¼æ¾ç¤ºå
¨éå¤éæ¡ */ |
| | | } |
| | | .el-tag + .el-tag { |
| | | margin-left: 10px; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="statistics-cards" style="margin-bottom: 20px"> |
| | | <el-row :gutter="16"> |
| | | <el-col |
| | | v-for="(item, index) in mergedCardList" |
| | | :key="index" |
| | | :xs="12" |
| | | :sm="8" |
| | | :md="colSpan" |
| | | :lg="colSpan" |
| | | > |
| | | <el-tooltip |
| | | :content="getTooltipContent(item.name)" |
| | | placement="top" |
| | | effect="light" |
| | | popper-class="statistics-tooltip" |
| | | > |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? 'cursor: pointer' : 'cursor: default'" |
| | | :class="getCardClass(item.name)" |
| | | > |
| | | <div |
| | | class="card-content" |
| | | @click="handleCardClick(item)" |
| | | > |
| | | <div class="card-label"> |
| | | <span class="label-text">{{ item.name }}</span> |
| | | </div> |
| | | <div class="card-value"> |
| | | {{ item.value !== undefined && item.value !== null ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-tooltip> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "StatisticsCards", |
| | | props: { |
| | | cardlist: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | colSpan: { |
| | | type: Number, |
| | | default: 4 |
| | | }, |
| | | showExtra: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | ycvalue: { |
| | | type: Number, |
| | | default: 0 |
| | | }, |
| | | jgvalue: { |
| | | type: Number, |
| | | default: 0 |
| | | }, |
| | | showWarningCondition: { |
| | | type: Boolean, |
| | | default: false |
| | | } |
| | | }, |
| | | computed: { |
| | | mergedCardList() { |
| | | let list = [...this.cardlist]; |
| | | |
| | | if (this.showExtra) { |
| | | list.push({ |
| | | name: "å¼å¸¸", |
| | | value: this.ycvalue |
| | | }); |
| | | } |
| | | |
| | | if (this.showWarningCondition) { |
| | | list.push({ |
| | | name: "è¦å", |
| | | value: this.jgvalue |
| | | }); |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | }, |
| | | methods: { |
| | | getCardClass(name) { |
| | | const classMap = { |
| | | "æ£è
æå¡æ»é": "total-card", |
| | | "æ éé访": "no-follow-card", |
| | | "éé访": "need-follow-card", |
| | | "å¾
é访": "pending-card", |
| | | "已宿": "completed-card", |
| | | "å¼å¸¸": "error-card", |
| | | "è¦å": "warning-card" |
| | | }; |
| | | return classMap[name] || "default-card"; |
| | | }, |
| | | |
| | | getTooltipContent(name) { |
| | | const tooltips = { |
| | | "æ£è
æå¡æ»é": "æ£è
æå¡æ»é = æ éé访 + éé访", |
| | | "æ éé访": "æ éé访ï¼ä¸éè¦è¿è¡éè®¿çæ£è
æ°é", |
| | | "éé访": "éé访 = å¾
é访 + 已宿", |
| | | "å¾
é访": "å¾
é访ï¼çå¾
è¿è¡éè®¿çæ£è
æ°é", |
| | | "已宿": "已宿ï¼å·²å®æéè®¿çæ£è
æ°é", |
| | | "å¼å¸¸": "å¼å¸¸æ°æ®ç»è®¡", |
| | | "è¦å": "è¦åæ°æ®ç»è®¡" |
| | | }; |
| | | return tooltips[name] || ""; |
| | | }, |
| | | |
| | | handleCardClick(item) { |
| | | if (item.router) { |
| | | this.$router.push(item.router); |
| | | } |
| | | this.$emit("card-click", item); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .statistics-cards { |
| | | padding: 4px; |
| | | } |
| | | |
| | | .card-content { |
| | | padding: 12px 8px; |
| | | transition: all 0.3s ease; |
| | | cursor: default; |
| | | } |
| | | |
| | | .card-label { |
| | | margin-bottom: 10px; |
| | | font-size: 20px; |
| | | font-weight: 600; |
| | | color: #666; |
| | | } |
| | | |
| | | .card-value { |
| | | text-align: center; |
| | | font-size: 28px; |
| | | font-weight: 700; |
| | | letter-spacing: 1px; |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | /* æ¬æµ®ææ - æ´ä½ä¸ç§»+é´å½±å æ·± */ |
| | | .el-card { |
| | | border-radius: 10px; |
| | | transition: all 0.3s ease; |
| | | border: none; |
| | | } |
| | | |
| | | .el-card:hover { |
| | | transform: translateY(-3px); |
| | | box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1) !important; |
| | | } |
| | | |
| | | /* ååºå¼ */ |
| | | @media (max-width: 768px) { |
| | | .card-value { |
| | | font-size: 22px; |
| | | } |
| | | .card-content { |
| | | padding: 12px 8px; |
| | | } |
| | | } |
| | | </style> |
| | | |
| | | <style> |
| | | /* ===== å¡çèæ¯è²ï¼å
¨å±æ ·å¼ï¼ ===== */ |
| | | |
| | | /* æ£è
æå¡æ»é - æµ
ç´«è² */ |
| | | .total-card .el-card__body { |
| | | background: #f0edff; |
| | | border-radius: 10px; |
| | | } |
| | | .total-card .card-value { |
| | | color: #7c5cfc; |
| | | } |
| | | |
| | | /* æ éé访 - æµ
ç²è² */ |
| | | .no-follow-card .el-card__body { |
| | | background: #fde8ef; |
| | | border-radius: 10px; |
| | | } |
| | | .no-follow-card .card-value { |
| | | color: #f06292; |
| | | } |
| | | |
| | | /* éé访 - æµ
èè² */ |
| | | .need-follow-card .el-card__body { |
| | | background: #e3f2fd; |
| | | border-radius: 10px; |
| | | } |
| | | .need-follow-card .card-value { |
| | | color: #42a5f5; |
| | | } |
| | | |
| | | /* å¾
é访 - æµ
æ©è² */ |
| | | .pending-card .el-card__body { |
| | | background: #fff3e0; |
| | | border-radius: 10px; |
| | | } |
| | | .pending-card .card-value { |
| | | color: #ff9800; |
| | | } |
| | | |
| | | /* 已宿 - æµ
ç»¿è² */ |
| | | .completed-card .el-card__body { |
| | | background: #e8f5e9; |
| | | border-radius: 10px; |
| | | } |
| | | .completed-card .card-value { |
| | | color: #66bb6a; |
| | | } |
| | | |
| | | /* å¼å¸¸ - æµ
çº¢è² */ |
| | | .error-card .el-card__body { |
| | | background: #fce4ec; |
| | | border-radius: 10px; |
| | | } |
| | | .error-card .card-value { |
| | | color: #ef5350; |
| | | } |
| | | |
| | | /* è¦å - æµ
é»è² */ |
| | | .warning-card .el-card__body { |
| | | background: #fff8e1; |
| | | border-radius: 10px; |
| | | } |
| | | .warning-card .card-value { |
| | | color: #ffa726; |
| | | } |
| | | |
| | | /* é»è®¤å¡ç */ |
| | | .default-card .el-card__body { |
| | | background: #f5f5f5; |
| | | border-radius: 10px; |
| | | } |
| | | .default-card .card-value { |
| | | color: #757575; |
| | | } |
| | | |
| | | /* ===== æ¸
æ°ç½åºèå Tooltip ===== */ |
| | | .statistics-tooltip { |
| | | background: #ffffff !important; |
| | | color: #1976d2 !important; |
| | | border: 1px solid #bbdefb !important; |
| | | border-radius: 8px !important; |
| | | padding: 10px 14px !important; |
| | | font-size: 13px !important; |
| | | line-height: 1.6 !important; |
| | | box-shadow: 0 4px 12px rgba(25, 118, 210, 0.15) !important; |
| | | } |
| | | |
| | | .statistics-tooltip .popper__arrow { |
| | | border-bottom-color: #bbdefb !important; |
| | | } |
| | | |
| | | .statistics-tooltip .popper__arrow::after { |
| | | border-bottom-color: #ffffff !important; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-dialog |
| | | title="é访ç»è®¡è¶å¿å¾" |
| | | :visible.sync="visible" |
| | | width="80%" |
| | | :close-on-click-modal="false" |
| | | @close="handleClose" |
| | | > |
| | | <div class="chart-container"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <div class="chart-title">éè®¿ç¶æåå¸</div> |
| | | <div id="pieChart" style="width: 100%; height: 400px"></div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="chart-title">é访è¶å¿åæ</div> |
| | | <div id="barLineChart" style="width: 100%; height: 400px"></div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script> |
| | | import * as echarts from 'echarts' |
| | | |
| | | export default { |
| | | name: 'ChartDialog', |
| | | props: { |
| | | visible: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | data: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | activeTab: { |
| | | type: String, |
| | | default: 'first' |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | pieChart: null, |
| | | barLineChart: null |
| | | } |
| | | }, |
| | | watch: { |
| | | visible(newVal) { |
| | | if (newVal) { |
| | | this.$nextTick(() => { |
| | | this.initCharts() |
| | | }) |
| | | } else { |
| | | this.destroyCharts() |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | if (this.visible) { |
| | | this.$nextTick(() => { |
| | | this.initCharts() |
| | | }) |
| | | } |
| | | }, |
| | | beforeDestroy() { |
| | | this.destroyCharts() |
| | | }, |
| | | methods: { |
| | | initCharts() { |
| | | this.initPieChart() |
| | | this.initBarLineChart() |
| | | }, |
| | | |
| | | initPieChart() { |
| | | const pieDom = document.getElementById('pieChart') |
| | | if (!pieDom) return |
| | | |
| | | if (this.pieChart) { |
| | | this.pieChart.dispose() |
| | | } |
| | | |
| | | this.pieChart = echarts.init(pieDom) |
| | | |
| | | // æ ¹æ®å½åtab计ç®é¥¼å¾æ°æ® |
| | | const pieData = this.getPieChartData() |
| | | |
| | | const pieOption = { |
| | | title: { |
| | | text: 'éè®¿ç¶æåå¸', |
| | | left: 'center', |
| | | textStyle: { |
| | | color: '#333', |
| | | fontSize: 16 |
| | | } |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: '{a} <br/>{b}: {c} ({d}%)' |
| | | }, |
| | | legend: { |
| | | orient: 'vertical', |
| | | left: 'left', |
| | | data: pieData.legendData, |
| | | textStyle: { |
| | | color: '#666' |
| | | } |
| | | }, |
| | | color: ['#FF9D4D', '#36B37E', '#FF5C5C'], |
| | | series: [ |
| | | { |
| | | name: 'éè®¿ç¶æ', |
| | | type: 'pie', |
| | | radius: ['40%', '70%'], |
| | | avoidLabelOverlap: true, |
| | | itemStyle: { |
| | | borderRadius: 10, |
| | | borderColor: '#fff', |
| | | borderWidth: 2 |
| | | }, |
| | | label: { |
| | | show: true, |
| | | formatter: '{b}: {c} ({d}%)', |
| | | color: '#333' |
| | | }, |
| | | emphasis: { |
| | | label: { |
| | | show: true, |
| | | fontSize: '18', |
| | | fontWeight: 'bold' |
| | | }, |
| | | itemStyle: { |
| | | shadowBlur: 10, |
| | | shadowOffsetX: 0, |
| | | shadowColor: 'rgba(0, 0, 0, 0.5)' |
| | | } |
| | | }, |
| | | data: pieData.seriesData |
| | | } |
| | | ] |
| | | } |
| | | |
| | | this.pieChart.setOption(pieOption) |
| | | window.addEventListener('resize', this.resizePieChart) |
| | | }, |
| | | |
| | | getPieChartData() { |
| | | let legendData = [] |
| | | let seriesData = [] |
| | | |
| | | if (this.activeTab === 'first') { |
| | | legendData = ['å¾
é访', 'é访æå', 'é访失败'] |
| | | const followUpData = { |
| | | pending: 0, |
| | | success: 0, |
| | | fail: 0 |
| | | } |
| | | |
| | | this.data.forEach((item) => { |
| | | followUpData.pending += item.pendingFollowUp || 0 |
| | | followUpData.success += item.followUpSuccess || 0 |
| | | followUpData.fail += item.followUpFail || 0 |
| | | }) |
| | | |
| | | seriesData = [ |
| | | { value: followUpData.pending, name: 'å¾
é访' }, |
| | | { value: followUpData.success, name: 'é访æå' }, |
| | | { value: followUpData.fail, name: 'é访失败' } |
| | | ] |
| | | } else if (this.activeTab === 'second') { |
| | | legendData = ['å¾
é访(忬¡)', 'é访æå(忬¡)', 'é访失败(忬¡)'] |
| | | const followUpData = { |
| | | pending: 0, |
| | | success: 0, |
| | | fail: 0 |
| | | } |
| | | |
| | | this.data.forEach((item) => { |
| | | followUpData.pending += item.pendingFollowUpAgain || 0 |
| | | followUpData.success += item.followUpSuccessAgain || 0 |
| | | followUpData.fail += item.followUpFailAgain || 0 |
| | | }) |
| | | |
| | | seriesData = [ |
| | | { value: followUpData.pending, name: 'å¾
é访(忬¡)' }, |
| | | { value: followUpData.success, name: 'é访æå(忬¡)' }, |
| | | { value: followUpData.fail, name: 'é访失败(忬¡)' } |
| | | ] |
| | | } else if (this.activeTab === 'continued') { |
| | | legendData = ['æ¤ç宿', 'æ¤çè¿è¡ä¸', 'æ¤çæªå¼å§'] |
| | | const careData = { |
| | | completed: 0, |
| | | inProgress: 0, |
| | | notStarted: 0 |
| | | } |
| | | |
| | | this.data.forEach((item) => { |
| | | careData.completed += item.careCompleted || 0 |
| | | careData.inProgress += item.careInProgress || 0 |
| | | careData.notStarted += item.careNotStarted || 0 |
| | | }) |
| | | |
| | | seriesData = [ |
| | | { value: careData.completed, name: 'æ¤ç宿' }, |
| | | { value: careData.inProgress, name: 'æ¤çè¿è¡ä¸' }, |
| | | { value: careData.notStarted, name: 'æ¤çæªå¼å§' } |
| | | ] |
| | | } |
| | | |
| | | return { legendData, seriesData } |
| | | }, |
| | | |
| | | initBarLineChart() { |
| | | const barDom = document.getElementById('barLineChart') |
| | | if (!barDom) return |
| | | |
| | | if (this.barLineChart) { |
| | | this.barLineChart.dispose() |
| | | } |
| | | |
| | | this.barLineChart = echarts.init(barDom) |
| | | |
| | | // å夿°æ® |
| | | const chartData = this.getBarLineChartData() |
| | | |
| | | const option = { |
| | | title: { |
| | | text: `${chartData.title}è¶å¿`, |
| | | left: 'center', |
| | | textStyle: { |
| | | color: '#333', |
| | | fontSize: 16 |
| | | } |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'cross', |
| | | crossStyle: { |
| | | color: '#999' |
| | | } |
| | | } |
| | | }, |
| | | legend: { |
| | | data: chartData.legendData, |
| | | top: 'bottom', |
| | | textStyle: { |
| | | color: '#666' |
| | | } |
| | | }, |
| | | color: chartData.colors, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: chartData.categories, |
| | | axisLabel: { |
| | | interval: 0, |
| | | rotate: 30, |
| | | color: '#666' |
| | | }, |
| | | axisLine: { |
| | | lineStyle: { |
| | | color: '#ddd' |
| | | } |
| | | } |
| | | }, |
| | | yAxis: [ |
| | | { |
| | | type: 'value', |
| | | name: chartData.yAxisName1, |
| | | min: 0, |
| | | axisLabel: { |
| | | color: '#666' |
| | | }, |
| | | axisLine: { |
| | | lineStyle: { |
| | | color: '#ddd' |
| | | } |
| | | }, |
| | | splitLine: { |
| | | lineStyle: { |
| | | color: '#f0f0f0' |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | type: 'value', |
| | | name: 'ç¾åæ¯(%)', |
| | | min: 0, |
| | | max: 100, |
| | | axisLabel: { |
| | | color: '#666', |
| | | formatter: '{value}%' |
| | | }, |
| | | axisLine: { |
| | | lineStyle: { |
| | | color: '#ddd' |
| | | } |
| | | }, |
| | | splitLine: { |
| | | show: false |
| | | } |
| | | } |
| | | ], |
| | | series: chartData.series, |
| | | grid: { |
| | | top: '15%', |
| | | left: '3%', |
| | | right: '4%', |
| | | bottom: '15%', |
| | | containLabel: true |
| | | } |
| | | } |
| | | |
| | | this.barLineChart.setOption(option) |
| | | window.addEventListener('resize', this.resizeBarLineChart) |
| | | }, |
| | | |
| | | getBarLineChartData() { |
| | | const categories = this.data.map( |
| | | (item) => item.leavehospitaldistrictname || item.deptname |
| | | ) |
| | | |
| | | let title = 'ç§å®¤/ç
åº' |
| | | let yAxisName1 = '人次' |
| | | let legendData = [] |
| | | let colors = [] |
| | | let series = [] |
| | | |
| | | if (this.activeTab === 'first') { |
| | | title = '馿¬¡é访' |
| | | yAxisName1 = '人次' |
| | | legendData = ['åºé¢äººæ¬¡', 'åºé访人次', 'é访ç(%)', 'åæ¶ç(%)'] |
| | | colors = ['#5470C6', '#91CC75', '#EE6666', '#9A60B4'] |
| | | |
| | | const dischargeData = this.data.map((item) => item.dischargeCount || 0) |
| | | const followUpData = this.data.map((item) => item.followUpNeeded || 0) |
| | | const followUpRateData = this.data.map((item) => { |
| | | if (!item.followUpRate) return 0 |
| | | const rateStr = String(item.followUpRate).replace('%', '') |
| | | return parseFloat(rateStr) || 0 |
| | | }) |
| | | const timelyRateData = this.data.map((item) => |
| | | item.rate ? (Number(item.rate) * 100).toFixed(2) : 0 |
| | | ) |
| | | |
| | | series = [ |
| | | { |
| | | name: 'åºé¢äººæ¬¡', |
| | | type: 'bar', |
| | | barWidth: '25%', |
| | | data: dischargeData, |
| | | itemStyle: { |
| | | borderRadius: [4, 4, 0, 0] |
| | | } |
| | | }, |
| | | { |
| | | name: 'åºé访人次', |
| | | type: 'bar', |
| | | barWidth: '25%', |
| | | data: followUpData, |
| | | itemStyle: { |
| | | borderRadius: [4, 4, 0, 0] |
| | | } |
| | | }, |
| | | { |
| | | name: 'é访ç(%)', |
| | | type: 'line', |
| | | yAxisIndex: 1, |
| | | data: followUpRateData, |
| | | symbolSize: 8, |
| | | lineStyle: { |
| | | width: 3 |
| | | }, |
| | | markLine: { |
| | | silent: true, |
| | | data: [ |
| | | { |
| | | yAxis: 80, |
| | | lineStyle: { |
| | | color: '#EE6666', |
| | | type: 'dashed' |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | name: 'åæ¶ç(%)', |
| | | type: 'line', |
| | | yAxisIndex: 1, |
| | | data: timelyRateData, |
| | | symbolSize: 8, |
| | | lineStyle: { |
| | | width: 3, |
| | | type: 'dotted' |
| | | }, |
| | | markLine: { |
| | | silent: true, |
| | | data: [ |
| | | { |
| | | yAxis: 90, |
| | | lineStyle: { |
| | | color: '#9A60B4', |
| | | type: 'dashed' |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ] |
| | | } else if (this.activeTab === 'second') { |
| | | title = '忬¡é访' |
| | | yAxisName1 = '人次' |
| | | legendData = ['åºé¢äººæ¬¡', 'åºé访人次', 'é访ç(%)'] |
| | | colors = ['#5470C6', '#91CC75', '#EE6666'] |
| | | |
| | | const dischargeData = this.data.map((item) => item.dischargeCount || 0) |
| | | const followUpData = this.data.map((item) => item.followUpNeeded || 0) |
| | | const followUpRateAgainData = this.data.map((item) => { |
| | | if (!item.followUpRateAgain) return 0 |
| | | const rateStr = String(item.followUpRateAgain).replace('%', '') |
| | | return parseFloat(rateStr) || 0 |
| | | }) |
| | | |
| | | series = [ |
| | | { |
| | | name: 'åºé¢äººæ¬¡', |
| | | type: 'bar', |
| | | barWidth: '25%', |
| | | data: dischargeData, |
| | | itemStyle: { |
| | | borderRadius: [4, 4, 0, 0] |
| | | } |
| | | }, |
| | | { |
| | | name: 'åºé访人次', |
| | | type: 'bar', |
| | | barWidth: '25%', |
| | | data: followUpData, |
| | | itemStyle: { |
| | | borderRadius: [4, 4, 0, 0] |
| | | } |
| | | }, |
| | | { |
| | | name: 'é访ç(%)', |
| | | type: 'line', |
| | | yAxisIndex: 1, |
| | | data: followUpRateAgainData, |
| | | symbolSize: 8, |
| | | lineStyle: { |
| | | width: 3 |
| | | }, |
| | | markLine: { |
| | | silent: true, |
| | | data: [ |
| | | { |
| | | yAxis: 80, |
| | | lineStyle: { |
| | | color: '#EE6666', |
| | | type: 'dashed' |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ] |
| | | } else if (this.activeTab === 'continued') { |
| | | title = 'å»¶ç»æ¤ç' |
| | | yAxisName1 = '人次' |
| | | legendData = ['å»¶ç»æ¤ç人次', 'æ¤ç宿', '宿ç(%)'] |
| | | colors = ['#5470C6', '#91CC75', '#EE6666'] |
| | | |
| | | const continuedCareData = this.data.map((item) => item.continuedCareCount || 0) |
| | | const careCompletedData = this.data.map((item) => item.careCompleted || 0) |
| | | const completionRateData = this.data.map((item) => { |
| | | if (!item.completionRate) return 0 |
| | | const rateStr = String(item.completionRate).replace('%', '') |
| | | return parseFloat(rateStr) || 0 |
| | | }) |
| | | |
| | | series = [ |
| | | { |
| | | name: 'å»¶ç»æ¤ç人次', |
| | | type: 'bar', |
| | | barWidth: '25%', |
| | | data: continuedCareData, |
| | | itemStyle: { |
| | | borderRadius: [4, 4, 0, 0] |
| | | } |
| | | }, |
| | | { |
| | | name: 'æ¤ç宿', |
| | | type: 'bar', |
| | | barWidth: '25%', |
| | | data: careCompletedData, |
| | | itemStyle: { |
| | | borderRadius: [4, 4, 0, 0] |
| | | } |
| | | }, |
| | | { |
| | | name: '宿ç(%)', |
| | | type: 'line', |
| | | yAxisIndex: 1, |
| | | data: completionRateData, |
| | | symbolSize: 8, |
| | | lineStyle: { |
| | | width: 3 |
| | | }, |
| | | markLine: { |
| | | silent: true, |
| | | data: [ |
| | | { |
| | | yAxis: 85, |
| | | lineStyle: { |
| | | color: '#EE6666', |
| | | type: 'dashed' |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | |
| | | return { |
| | | title, |
| | | yAxisName1, |
| | | categories, |
| | | legendData, |
| | | colors, |
| | | series |
| | | } |
| | | }, |
| | | |
| | | resizePieChart() { |
| | | if (this.pieChart) { |
| | | this.pieChart.resize() |
| | | } |
| | | }, |
| | | |
| | | resizeBarLineChart() { |
| | | if (this.barLineChart) { |
| | | this.barLineChart.resize() |
| | | } |
| | | }, |
| | | |
| | | destroyCharts() { |
| | | if (this.pieChart) { |
| | | this.pieChart.dispose() |
| | | this.pieChart = null |
| | | } |
| | | if (this.barLineChart) { |
| | | this.barLineChart.dispose() |
| | | this.barLineChart = null |
| | | } |
| | | window.removeEventListener('resize', this.resizePieChart) |
| | | window.removeEventListener('resize', this.resizeBarLineChart) |
| | | }, |
| | | |
| | | handleClose() { |
| | | this.destroyCharts() |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .chart-container { |
| | | .chart-title { |
| | | text-align: center; |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | margin-bottom: 20px; |
| | | color: #333; |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="continued-care"> |
| | | <div class="your-table-container"> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="tableData" |
| | | :border="true" |
| | | show-summary |
| | | :summary-method="getSummaries" |
| | | > |
| | | <!-- è¡¨æ ¼åå®ä¹ --> |
| | | <el-table-column |
| | | label="åºå·" |
| | | type="index" |
| | | align="center" |
| | | width="60" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ç
åºåç§°" |
| | | align="center" |
| | | prop="wardName" |
| | | width="200" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="å·²å»¶ç»æ°é" |
| | | align="center" |
| | | prop="continuedCount" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleViewDetails(scope.row, 'continued', '已延ç»å表')" |
| | | > |
| | | <span class="button-zx">{{ scope.row.continuedCount }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="æªå»¶ç»æ°é" |
| | | align="center" |
| | | prop="unContinuedCount" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleViewDetails(scope.row, 'uncontinued', 'æªå»¶ç»å表')" |
| | | > |
| | | <span class="button-zx">{{ scope.row.unContinuedCount }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="å»¶ç»ç" |
| | | align="center" |
| | | prop="continuedRate" |
| | | width="120" |
| | | /> |
| | | |
| | | <!-- <el-table-column |
| | | label="æä½" |
| | | align="center" |
| | | width="150" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="handleRowClick(scope.row)" |
| | | > |
| | | æ¥çæ¤å£«è¯¦æ
|
| | | </el-button> |
| | | </template> |
| | | </el-table-column> --> |
| | | </el-table> |
| | | </div> |
| | | |
| | | <!-- æ¤å£«è¯¦æ
å¼¹çª --> |
| | | <el-dialog |
| | | title="æ¤å£«å»¶ç»æ¤ç详æ
" |
| | | :visible.sync="nurseDialogVisible" |
| | | width="80%" |
| | | :close-on-click-modal="false" |
| | | > |
| | | <div v-if="currentWardData"> |
| | | <el-table |
| | | v-loading="nurseLoading" |
| | | :data="nurseData" |
| | | :border="true" |
| | | > |
| | | <el-table-column |
| | | label="æ¤å£«å§å" |
| | | prop="nurseName" |
| | | align="center" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="ç§å®¤" |
| | | prop="deptName" |
| | | align="center" |
| | | width="150" |
| | | /> |
| | | <el-table-column |
| | | label="å·²å»¶ç»æ°é" |
| | | prop="continuedCount" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | label="æªå»¶ç»æ°é" |
| | | prop="unContinuedCount" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | label="å»¶ç»ç" |
| | | prop="continuedRate" |
| | | align="center" |
| | | width="120" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getContinueNerseCount, getNurseContinuedDetail } from "@/api/system/user"; |
| | | import ExcelJS from "exceljs"; |
| | | import { saveAs } from "file-saver"; |
| | | |
| | | export default { |
| | | name: "ContinuedCare", |
| | | props: { |
| | | queryParams: { |
| | | type: Object, |
| | | required: true, |
| | | }, |
| | | flatArrayhospit: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | flatArraydept: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | options: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | orgname: { |
| | | type: String, |
| | | default: "", |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | tableData: [], |
| | | loading: false, |
| | | nurseDialogVisible: false, |
| | | nurseLoading: false, |
| | | currentWardData: null, |
| | | nurseData: [], |
| | | originalData: {}, |
| | | totalData: { |
| | | continued: 0, |
| | | uncontinued: 0 |
| | | } |
| | | }; |
| | | }, |
| | | methods: { |
| | | loadData() { |
| | | this.loading = true; |
| | | |
| | | const params = { |
| | | leavehospitaldistrictcodes: |
| | | this.queryParams.leavehospitaldistrictcodes.includes("all") |
| | | ? this.getAllWardCodes() |
| | | : this.queryParams.leavehospitaldistrictcodes, |
| | | deptcodes: this.queryParams.deptcodes.includes("all") |
| | | ? this.getAllDeptCodes() |
| | | : this.queryParams.deptcodes, |
| | | |
| | | }; |
| | | |
| | | delete params.leavehospitaldistrictcodes.all; |
| | | delete params.deptcodes.all; |
| | | |
| | | getContinueNerseCount(params) |
| | | .then((response) => { |
| | | this.originalData = response.data; |
| | | this.processData(response.data); |
| | | }) |
| | | .catch((error) => { |
| | | console.error("è·åå»¶ç»æ¤çæ°æ®å¤±è´¥:", error); |
| | | this.$message.error("è·åå»¶ç»æ¤çæ°æ®å¤±è´¥"); |
| | | }) |
| | | .finally(() => { |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | |
| | | processData(data) { |
| | | this.totalData = { |
| | | continued: data.å·²å»¶ç»æ»æ°é || 0, |
| | | uncontinued: data.æªå»¶ç»æ»æ°é || 0 |
| | | }; |
| | | |
| | | const processedData = []; |
| | | |
| | | if (data.详æ
&& Array.isArray(data.详æ
)) { |
| | | data.详æ
.forEach((item) => { |
| | | // æåç
åºåç§°åæ°æ® |
| | | Object.keys(item).forEach(key => { |
| | | if (key.startsWith('已延ç»_')) { |
| | | const wardName = key.replace('已延ç»_', ''); |
| | | const continuedCount = item[key]; |
| | | const unContinuedCount = item[`æªå»¶ç»_${wardName}`] || 0; |
| | | const total = continuedCount + unContinuedCount; |
| | | const continuedRate = total > 0 ? ((continuedCount / total) * 100).toFixed(2) + '%' : '0.00%'; |
| | | |
| | | processedData.push({ |
| | | wardName, |
| | | continuedCount, |
| | | unContinuedCount, |
| | | continuedRate, |
| | | originalData: item |
| | | }); |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | // æåº |
| | | this.tableData = this.customSort(processedData); |
| | | }, |
| | | |
| | | getAllWardCodes() { |
| | | return this.flatArrayhospit |
| | | .filter((item) => item.value !== "all") |
| | | .map((item) => item.value); |
| | | }, |
| | | |
| | | getAllDeptCodes() { |
| | | return this.flatArraydept |
| | | .filter((item) => item.value !== "all") |
| | | .map((item) => item.value); |
| | | }, |
| | | |
| | | customSort(data) { |
| | | const order = [ |
| | | "ä¸", "äº", "ä¸", "å", "äº", "å
", "ä¸", "å
«", "ä¹", "å", |
| | | "åä¸", "åäº", "åä¸", "åå", "åäº", "åå
", "åä¸", "åå
«", "åä¹", "äºå", |
| | | "äºåä¸", "äºåäº", "äºåä¸", "äºåå", "äºåäº", "äºåå
", "äºåä¸", "äºåå
«", "äºåä¹", "ä¸å", |
| | | "ä¸åä¸", "ä¸åäº", "ä¸åä¸", "ä¸åå", "ä¸åäº", "ä¸åå
", "ä¸åä¸", "ä¸åå
«", "ä¸åä¹", "åå", |
| | | "ååä¸", "ååäº", "ååä¸", "ååå", "ååäº" |
| | | ]; |
| | | |
| | | return data.sort((a, b) => { |
| | | const getIndex = (name) => { |
| | | if (!name || typeof name !== "string") return -1; |
| | | const chineseMatch = name.match(/^(\d+)-/); |
| | | if (chineseMatch && chineseMatch[1]) { |
| | | const num = parseInt(chineseMatch[1], 10); |
| | | if (num >= 1 && num <= 45) { |
| | | return num - 1; |
| | | } |
| | | } |
| | | |
| | | // å°è¯å¹é
䏿æ°å |
| | | for (let i = 0; i < order.length; i++) { |
| | | if (name.includes(order[i])) { |
| | | return i; |
| | | } |
| | | } |
| | | return -1; |
| | | }; |
| | | |
| | | const indexA = getIndex(a.wardName); |
| | | const indexB = getIndex(b.wardName); |
| | | |
| | | if (indexA === -1 && indexB === -1) { |
| | | return (a.wardName || "").localeCompare(b.wardName || ""); |
| | | } |
| | | if (indexA === -1) return 1; |
| | | if (indexB === -1) return -1; |
| | | return indexA - indexB; |
| | | }); |
| | | }, |
| | | |
| | | getSummaries(param) { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | | |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = "å计"; |
| | | return; |
| | | } |
| | | |
| | | if (index === 1) { // ç
åºåç§°å |
| | | sums[index] = "/"; |
| | | return; |
| | | } |
| | | |
| | | if (index === 2) { // å·²å»¶ç»æ°éå计 |
| | | const totalContinued = this.tableData.reduce((sum, item) => sum + item.continuedCount, 0); |
| | | sums[index] = this.formatNumber(totalContinued); |
| | | } else if (index === 3) { // æªå»¶ç»æ°éå计 |
| | | const totalUnContinued = this.tableData.reduce((sum, item) => sum + item.unContinuedCount, 0); |
| | | sums[index] = this.formatNumber(totalUnContinued); |
| | | } else if (index === 4) { // å»¶ç»çå¹³åå¼ |
| | | const totalContinued = this.tableData.reduce((sum, item) => sum + item.continuedCount, 0); |
| | | const totalUnContinued = this.tableData.reduce((sum, item) => sum + item.unContinuedCount, 0); |
| | | const total = totalContinued + totalUnContinued; |
| | | const avgRate = total > 0 ? ((totalContinued / total) * 100).toFixed(2) + '%' : '0.00%'; |
| | | sums[index] = avgRate; |
| | | } else { |
| | | sums[index] = ""; |
| | | } |
| | | }); |
| | | |
| | | return sums; |
| | | }, |
| | | |
| | | formatNumber(num) { |
| | | if (isNaN(num)) return "-"; |
| | | return Number.isInteger(num) ? num.toString() : num.toFixed(0); |
| | | }, |
| | | |
| | | handleViewDetails(row, type, titleSuffix) { |
| | | const title = `${row.wardName}${titleSuffix}`; |
| | | // è¿ééè¦æ ¹æ®ä½ çå®é
æ
åµè·å详æ
æ°æ® |
| | | // ä½ å¯ä»¥ä»row.originalDataä¸è·åï¼æè
è°ç¨æ°çAPI |
| | | const detailData = this.getMockDetailData(row, type); |
| | | this.$emit("view-details", detailData, title); |
| | | }, |
| | | |
| | | handleRowClick(row) { |
| | | this.currentWardData = row; |
| | | this.nurseDialogVisible = true; |
| | | this.loadNurseData(row.wardName); |
| | | }, |
| | | |
| | | async loadNurseData(wardName) { |
| | | this.nurseLoading = true; |
| | | try { |
| | | const params = { |
| | | wardName: wardName, |
| | | startTime: this.queryParams.startTime, |
| | | endTime: this.queryParams.endTime |
| | | }; |
| | | |
| | | const response = await getNurseContinuedDetail(params); |
| | | this.nurseData = this.processNurseData(response.data); |
| | | } catch (error) { |
| | | console.error("è·åæ¤å£«è¯¦æ
失败:", error); |
| | | this.$message.error("è·åæ¤å£«è¯¦æ
失败"); |
| | | } finally { |
| | | this.nurseLoading = false; |
| | | } |
| | | }, |
| | | |
| | | processNurseData(data) { |
| | | // æ ¹æ®ä½ çå®é
APIååºç»æå¤çæ°æ® |
| | | // è¿éæ¯ä¸ä¸ªç¤ºä¾ |
| | | return [ |
| | | { |
| | | nurseName: "æ¤å£«A", |
| | | deptName: this.currentWardData.wardName, |
| | | continuedCount: Math.floor(this.currentWardData.continuedCount * 0.3), |
| | | unContinuedCount: Math.floor(this.currentWardData.unContinuedCount * 0.3), |
| | | continuedRate: "75.00%" |
| | | }, |
| | | { |
| | | nurseName: "æ¤å£«B", |
| | | deptName: this.currentWardData.wardName, |
| | | continuedCount: Math.floor(this.currentWardData.continuedCount * 0.4), |
| | | unContinuedCount: Math.floor(this.currentWardData.unContinuedCount * 0.4), |
| | | continuedRate: "80.00%" |
| | | }, |
| | | { |
| | | nurseName: "æ¤å£«C", |
| | | deptName: this.currentWardData.wardName, |
| | | continuedCount: Math.floor(this.currentWardData.continuedCount * 0.3), |
| | | unContinuedCount: Math.floor(this.currentWardData.unContinuedCount * 0.3), |
| | | continuedRate: "70.00%" |
| | | } |
| | | ]; |
| | | }, |
| | | |
| | | getMockDetailData(row, type) { |
| | | // 模æè¯¦æ
æ°æ®ï¼å®é
åºè¯¥è°ç¨API |
| | | const detailData = []; |
| | | const count = type === 'continued' ? row.continuedCount : row.unContinuedCount; |
| | | |
| | | for (let i = 1; i <= Math.min(count, 10); i++) { |
| | | detailData.push({ |
| | | sendname: `æ£è
${i}`, |
| | | taskName: `${row.wardName}å»¶ç»æ¤ç`, |
| | | sendstate: type === 'continued' ? 6 : 2, |
| | | preachform: ["人工é访", "çµè¯é访"], |
| | | visitTime: "2024-01-15 10:00:00", |
| | | finishtime: type === 'continued' ? "2024-01-15 11:00:00" : "", |
| | | endtime: "2024-01-10 09:00:00", |
| | | nurseName: "æ¤å£«A", |
| | | drname: "å»çA", |
| | | excep: 1, |
| | | suggest: 2, |
| | | templatename: "å»¶ç»æ¤çæå¡æ¨¡æ¿", |
| | | remark: type === 'continued' ? "å·²å®æå»¶ç»æ¤ç" : "æªå¼å§å»¶ç»æ¤ç", |
| | | bankcardno: "已宿" |
| | | }); |
| | | } |
| | | |
| | | return detailData; |
| | | }, |
| | | |
| | | async exportTable() { |
| | | try { |
| | | let dateRangeString = ""; |
| | | let sheetNameSuffix = ""; |
| | | |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const startDateStr = this.queryParams.dateRange[0]; |
| | | const endDateStr = this.queryParams.dateRange[1]; |
| | | const formatDateForDisplay = (dateTimeStr) => { |
| | | return dateTimeStr.split(" ")[0]; |
| | | }; |
| | | const startDateFormatted = formatDateForDisplay(startDateStr); |
| | | const endDateFormatted = formatDateForDisplay(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } else { |
| | | const now = new Date(); |
| | | const currentMonth = now.getMonth() + 1; |
| | | dateRangeString = `${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentMonth}æ`; |
| | | } |
| | | |
| | | const excelName = `å»¶ç»æ¤çç»è®¡è¡¨_${dateRangeString}.xlsx`; |
| | | const worksheetName = `å»¶ç»æ¤çç»è®¡_${sheetNameSuffix}`; |
| | | |
| | | if (!this.tableData || this.tableData.length === 0) { |
| | | this.$message.warning("ææ å»¶ç»æ¤çæ°æ®å¯å¯¼åº"); |
| | | return false; |
| | | } |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(worksheetName); |
| | | |
| | | this.buildExportSheet(worksheet, sheetNameSuffix); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | const blob = new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }); |
| | | saveAs(blob, excelName); |
| | | |
| | | this.$message.success("å¯¼åºæå"); |
| | | return true; |
| | | } catch (error) { |
| | | console.error("导åºå¤±è´¥:", error); |
| | | this.$message.error(`导åºå¤±è´¥: ${error.message}`); |
| | | return false; |
| | | } |
| | | }, |
| | | |
| | | buildExportSheet(worksheet, sheetNameSuffix) { |
| | | const titleStyle = { |
| | | font: { |
| | | name: "微软é
é»", |
| | | size: 16, |
| | | bold: true, |
| | | color: { argb: "FF000000" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFE6F3FF" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center", wrapText: true }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const headerStyle = { |
| | | font: { |
| | | name: "微软é
é»", |
| | | size: 11, |
| | | bold: true, |
| | | color: { argb: "FF000000" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center", wrapText: true }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const cellStyle = { |
| | | font: { name: "å®ä½", size: 10, color: { argb: "FF000000" } }, |
| | | alignment: { vertical: "middle", horizontal: "center" }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const summaryStyle = { |
| | | font: { |
| | | name: "å®ä½", |
| | | size: 10, |
| | | bold: true, |
| | | color: { argb: "FF409EFF" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center" }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | // æ·»å æ é¢è¡ |
| | | worksheet.mergeCells(1, 1, 1, 6); |
| | | const titleCell = worksheet.getCell(1, 1); |
| | | titleCell.value = `å»¶ç»æ¤çç»è®¡è¡¨_${sheetNameSuffix}`; |
| | | titleCell.style = titleStyle; |
| | | worksheet.getRow(1).height = 35; |
| | | |
| | | // 表头 |
| | | const headers = ["åºå·", "ç
åºåç§°", "å·²å»¶ç»æ°é", "æªå»¶ç»æ°é", "å»¶ç»ç", "æä½"]; |
| | | |
| | | headers.forEach((header, index) => { |
| | | const cell = worksheet.getCell(2, index + 1); |
| | | cell.value = header; |
| | | cell.style = headerStyle; |
| | | }); |
| | | |
| | | worksheet.getRow(2).height = 25; |
| | | |
| | | // æ°æ®è¡ |
| | | this.tableData.forEach((item, rowIndex) => { |
| | | const dataRow = worksheet.addRow( |
| | | [ |
| | | rowIndex + 1, |
| | | item.wardName, |
| | | item.continuedCount, |
| | | item.unContinuedCount, |
| | | item.continuedRate, |
| | | "æ¥çæ¤å£«è¯¦æ
" |
| | | ], |
| | | rowIndex + 3 |
| | | ); |
| | | |
| | | dataRow.eachCell((cell) => { |
| | | cell.style = cellStyle; |
| | | }); |
| | | dataRow.height = 24; |
| | | }); |
| | | |
| | | // åè®¡è¡ |
| | | const totalContinued = this.tableData.reduce((sum, item) => sum + item.continuedCount, 0); |
| | | const totalUnContinued = this.tableData.reduce((sum, item) => sum + item.unContinuedCount, 0); |
| | | const total = totalContinued + totalUnContinued; |
| | | const totalRate = total > 0 ? ((totalContinued / total) * 100).toFixed(2) + '%' : '0.00%'; |
| | | |
| | | const summaryRow = worksheet.addRow([ |
| | | "å计", |
| | | "/", |
| | | totalContinued, |
| | | totalUnContinued, |
| | | totalRate, |
| | | "/" |
| | | ]); |
| | | |
| | | summaryRow.eachCell((cell, colNumber) => { |
| | | cell.style = summaryStyle; |
| | | }); |
| | | summaryRow.height = 28; |
| | | |
| | | // å宽 |
| | | worksheet.columns = [ |
| | | { width: 8 }, |
| | | { width: 30 }, |
| | | { width: 15 }, |
| | | { width: 15 }, |
| | | { width: 12 }, |
| | | { width: 15 } |
| | | ]; |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .continued-care { |
| | | .your-table-container { |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .button-zx { |
| | | color: rgb(70, 204, 238); |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-dialog |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | v-loading="loading" |
| | | width="70%" |
| | | :close-on-click-modal="false" |
| | | @close="handleClose" |
| | | > |
| | | <div class="detail-dialog"> |
| | | <div style="margin-bottom: 16px; display: flex; align-items: center"> |
| | | <span style="margin-right: 10px; font-weight: bold">æ£è
å§åæ¥è¯¢:</span> |
| | | <el-input |
| | | v-model="searchName" |
| | | placeholder="请è¾å
¥æ£è
å§åè¿è¡çé" |
| | | clearable |
| | | style="width: 300px" |
| | | @input="handleSearch" |
| | | @clear="handleSearch" |
| | | /> |
| | | <span style="margin-left: 10px; color: rgb(35, 81, 233); font-size: 16px"> |
| | | å
± {{ displayList.length }} æ¡è®°å½ |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="examine-jic"> |
| | | <div class="jic-value"> |
| | | <el-row :gutter="20"> |
| | | <div class="data-list" ref="dataList" @scroll="handleScroll" v-loading="loading"> |
| | | <el-table :data="currentDisplayList" height="660" style="width: 100%"> |
| | | <el-table-column prop="sendname" align="center" label="å§å" width="100" /> |
| | | <el-table-column prop="taskName" align="center" width="200" show-overflow-tooltip label="ä»»å¡åç§°" /> |
| | | |
| | | <el-table-column prop="sendstate" align="center" width="200" label="ä»»å¡ç¶æ"> |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | :type="getStateTagType(scope.row.sendstate)" |
| | | :disable-transitions="false" |
| | | > |
| | | {{ getStateText(scope.row.sendstate) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | | key="preachform" |
| | | prop="preachform" |
| | | width="160" |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span v-for="(item, index) in scope.row.preachform" :key="index"> |
| | | {{ item }}{{ index < scope.row.preachform.length - 1 ? 'ã' : '' }} |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | prop="visitTime" |
| | | align="center" |
| | | label="åºé访æ¶é´" |
| | | width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | prop="finishtime" |
| | | align="center" |
| | | label="éè®¿å®ææ¶é´" |
| | | width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column label="åºé¢æ¥æ" width="200" align="center" key="endtime" prop="endtime"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.endtime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="责任æ¤å£«" width="120" align="center" key="nurseName" prop="nurseName" /> |
| | | <el-table-column label="主治å»ç" width="120" align="center" key="drname" prop="drname" /> |
| | | |
| | | <el-table-column label="ç»æç¶æ" align="center" key="excep" prop="excep" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_yujing" :value="scope.row.excep" /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="å¤çæè§" align="center" key="suggest" prop="suggest" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_suggest" :value="scope.row.suggest" /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column prop="templatename" align="center" label="æå¡æ¨¡æ¿" width="200" show-overflow-tooltip /> |
| | | <el-table-column prop="remark" align="center" label="æå¡è®°å½" width="200" show-overflow-tooltip /> |
| | | |
| | | <el-table-column prop="bankcardno" align="center" label="å¼å«ç¶æ" width="210" /> |
| | | |
| | | <el-table-column label="æä½" fixed="right" align="center" width="200" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="medium" type="text" @click="handleDetailsGo(scope.row)"> |
| | | <span class="button-zx"> |
| | | <i class="el-icon-s-order"></i>æ¥ç |
| | | </span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'DetailDialog', |
| | | dicts: ['sys_yujing', 'sys_suggest'], |
| | | props: { |
| | | visible: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | data: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | searchName: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | loading: { |
| | | type: Boolean, |
| | | default: false |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | localSearchName: '', |
| | | displayList: [], |
| | | currentDisplayList: [], |
| | | loadIndex: 0, |
| | | pageSize: 100, |
| | | isLoading: false |
| | | } |
| | | }, |
| | | watch: { |
| | | data: { |
| | | immediate: true, |
| | | handler(newData) { |
| | | this.initializeData(newData) |
| | | } |
| | | }, |
| | | searchName(newVal) { |
| | | this.localSearchName = newVal |
| | | this.handleSearch() |
| | | } |
| | | }, |
| | | mounted() { |
| | | if (this.data && this.data.length > 0) { |
| | | this.initializeData(this.data) |
| | | } |
| | | }, |
| | | methods: { |
| | | initializeData(data) { |
| | | this.displayList = [...data] |
| | | this.formatPreachformData() |
| | | this.loadIndex = 0 |
| | | this.currentDisplayList = [] |
| | | this.$nextTick(() => { |
| | | this.loadMoreData() |
| | | }) |
| | | }, |
| | | |
| | | formatPreachformData() { |
| | | this.displayList.forEach((item) => { |
| | | if (item.preachform) { |
| | | if (item.endtime) { |
| | | item.preachformson = item.preachform |
| | | const idArray = item.preachform.split(',') |
| | | |
| | | item.preachform = idArray.map((value) => { |
| | | const checkboxlist = this.$store.getters.checkboxlist |
| | | const foundItem = checkboxlist.find((item) => item.value == value) |
| | | return foundItem ? foundItem.label : null |
| | | }).filter(label => label !== null) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | handleSearch() { |
| | | if (!this.localSearchName.trim()) { |
| | | this.displayList = [...this.data] |
| | | this.formatPreachformData() |
| | | } else { |
| | | const keyword = this.localSearchName.toLowerCase() |
| | | this.displayList = this.data.filter((item) => { |
| | | return item.sendname && item.sendname.toLowerCase().includes(keyword) |
| | | }) |
| | | this.formatPreachformData() |
| | | } |
| | | |
| | | this.loadIndex = 0 |
| | | this.currentDisplayList = [] |
| | | this.$nextTick(() => { |
| | | this.loadMoreData() |
| | | }) |
| | | |
| | | this.$emit('search', this.localSearchName) |
| | | }, |
| | | |
| | | loadMoreData() { |
| | | if (this.isLoading || this.loadIndex >= this.displayList.length) return |
| | | |
| | | this.isLoading = true |
| | | |
| | | setTimeout(() => { |
| | | const nextChunk = this.displayList.slice( |
| | | this.loadIndex, |
| | | this.loadIndex + this.pageSize |
| | | ) |
| | | this.currentDisplayList = this.currentDisplayList.concat(nextChunk) |
| | | this.loadIndex += this.pageSize |
| | | this.isLoading = false |
| | | }, 200) |
| | | }, |
| | | |
| | | handleScroll(event) { |
| | | const scrollContainer = event.target |
| | | const isAtBottom = |
| | | scrollContainer.scrollTop + scrollContainer.clientHeight >= |
| | | scrollContainer.scrollHeight - 10 |
| | | |
| | | if ( |
| | | isAtBottom && |
| | | !this.isLoading && |
| | | this.loadIndex < this.displayList.length |
| | | ) { |
| | | this.loadMoreData() |
| | | } |
| | | }, |
| | | |
| | | getStateTagType(state) { |
| | | const stateMap = { |
| | | 1: 'primary', // 表åå·²é¢å |
| | | 2: 'primary', // å¾
é访 |
| | | 3: 'success', // 表åå·²åé |
| | | 4: 'info', // 䏿§è¡ |
| | | 5: 'danger', // åé失败 |
| | | 6: 'success' // 已宿 |
| | | } |
| | | return stateMap[state] || 'info' |
| | | }, |
| | | |
| | | getStateText(state) { |
| | | const stateTextMap = { |
| | | 1: '表åå·²é¢å', |
| | | 2: 'å¾
é访', |
| | | 3: '表åå·²åé', |
| | | 4: '䏿§è¡', |
| | | 5: 'åé失败', |
| | | 6: '已宿' |
| | | } |
| | | return stateTextMap[state] || 'æªç¥ç¶æ' |
| | | }, |
| | | |
| | | formatTime(time) { |
| | | if (!time) return '' |
| | | return this.parseTime(time) |
| | | }, |
| | | |
| | | handleDetailsGo(row) { |
| | | this.$emit('details-go', row) |
| | | }, |
| | | |
| | | handleClose() { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .detail-dialog { |
| | | .data-list { |
| | | max-height: 800px; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | .button-zx { |
| | | color: rgb(70, 204, 238); |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="first-follow-up"> |
| | | <div class="your-table-container"> |
| | | <el-table |
| | | ref="exportTable" |
| | | id="exportTableid" |
| | | v-loading="loading" |
| | | :data="tableData" |
| | | :border="true" |
| | | @selection-change="handleSelectionChange" |
| | | @expand-change="handleRowClick" |
| | | :row-key="getRowKey" |
| | | show-summary |
| | | :summary-method="getSummaries" |
| | | :expand-row-keys="expands" |
| | | > |
| | | <!-- è¡¨æ ¼åå®ä¹ --> |
| | | <el-table-column |
| | | v-if="queryParams.statisticaltype == 1" |
| | | label="åºé¢ç
åº" |
| | | align="center" |
| | | sortable |
| | | key="leavehospitaldistrictname" |
| | | prop="leavehospitaldistrictname" |
| | | width="150" |
| | | :show-overflow-tooltip="true" |
| | | :sort-method="sortChineseNumber" |
| | | /> |
| | | <el-table-column |
| | | v-if="queryParams.statisticaltype == 2" |
| | | label="ç§å®¤" |
| | | align="center" |
| | | key="deptname" |
| | | prop="deptname" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | v-if="queryParams.statisticaltype == 3" |
| | | label="ä¸ç
ä»»å¡" |
| | | width="200" |
| | | align="center" |
| | | key="taskName" |
| | | prop="taskName" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="åºé¢äººæ¬¡" |
| | | align="center" |
| | | key="dischargeCount" |
| | | prop="dischargeCount" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'dischargeCountInfo', |
| | | 'åºé¢æ£è
å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.dischargeCount }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æ éé访人次" |
| | | align="center" |
| | | width="100" |
| | | key="nonFollowUp" |
| | | prop="nonFollowUp" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'nonFollowUpInfo', 'æ éé访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.nonFollowUp }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé访人次" |
| | | align="center" |
| | | width="100" |
| | | key="followUpNeeded" |
| | | prop="followUpNeeded" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'followUpNeededInfo', 'åºé访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.followUpNeeded }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column align="center" label="馿¬¡ä¸ç
é访"> |
| | | <el-table-column |
| | | label="éé访" |
| | | align="center" |
| | | key="needFollowUp" |
| | | prop="needFollowUp" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'needFollowUpInfo', 'éé访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.needFollowUp }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="å¾
é访" |
| | | align="center" |
| | | key="pendingFollowUp" |
| | | prop="pendingFollowUp" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'pendingFollowUpInfo', |
| | | 'å¾
é访å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.pendingFollowUp }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="é访æå" |
| | | align="center" |
| | | key="followUpSuccess" |
| | | prop="followUpSuccess" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'followUpSuccessInfo', |
| | | 'é访æåå表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.followUpSuccess }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="é访失败" |
| | | align="center" |
| | | key="followUpFail" |
| | | prop="followUpFail" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'followUpFailInfo', |
| | | 'é访失败å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.followUpFail }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æåç" |
| | | align="center" |
| | | width="120" |
| | | key="successRate" |
| | | prop="successRate" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span class="success-rate">{{ |
| | | calculateSuccessRate( |
| | | scope.row.followUpSuccess, |
| | | scope.row.needFollowUp, |
| | | scope.row.pendingFollowUp |
| | | ) |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | v-if="orgname != '丽水å¸ä¸å»é¢'" |
| | | label="åæ¶ç" |
| | | align="center" |
| | | width="120" |
| | | key="rate" |
| | | prop="rate" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleSeeDetails(scope.row)" |
| | | > |
| | | <span class="button-zx" |
| | | >{{ (Number(scope.row.rate) * 100).toFixed(2) }}%</span |
| | | > |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="人工" |
| | | align="center" |
| | | key="manual" |
| | | prop="manual" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'manualInfo', '人工é访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.manual }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è¯é³" align="center" key="voice" prop="voice"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'voiceInfo', 'è¯é³é访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.voice }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="çä¿¡" align="center" key="sms" prop="sms"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleViewDetails(scope.row, 'smsInfo', 'çä¿¡é访å表')" |
| | | > |
| | | <span class="button-zx">{{ scope.row.sms }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="微信" |
| | | align="center" |
| | | key="weChat" |
| | | prop="weChat" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'weChatInfo', '微信é访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.weChat }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table-column> |
| | | |
| | | <!-- é访æ
åµåï¼ä»
丽水å¸ä¸å»é¢æ¾ç¤ºï¼ --> |
| | | <el-table-column |
| | | v-if=" |
| | | orgname == '丽水å¸ä¸å»é¢' || orgname == 'æ¯å®ç²æèªæ²»å¿äººæ°å»é¢' |
| | | " |
| | | align="center" |
| | | label="é访æ
åµ" |
| | | > |
| | | <el-table-column |
| | | label="æ£å¸¸è¯é³" |
| | | align="center" |
| | | width="100" |
| | | key="taskSituation1" |
| | | prop="taskSituation1" |
| | | /> |
| | | <el-table-column |
| | | label="æ£è
ææ¥ææè®¿" |
| | | align="center" |
| | | width="100" |
| | | key="taskSituation2" |
| | | prop="taskSituation2" |
| | | /> |
| | | <el-table-column |
| | | label="é¢è®¿æè
æ¥è¯" |
| | | align="center" |
| | | width="100" |
| | | key="taskSituation3" |
| | | prop="taskSituation3" |
| | | /> |
| | | <el-table-column |
| | | label="微信é访" |
| | | align="center" |
| | | width="100" |
| | | key="taskSituation4" |
| | | prop="taskSituation4" |
| | | /> |
| | | <el-table-column |
| | | label="é访çµè¯ä¸æ£ç¡®" |
| | | align="center" |
| | | width="100" |
| | | key="taskSituation5" |
| | | prop="taskSituation5" |
| | | /> |
| | | <el-table-column |
| | | label="å
¶ä»æ
åµä¸å®é访" |
| | | align="center" |
| | | width="100" |
| | | key="taskSituation6" |
| | | prop="taskSituation6" |
| | | /> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getSfStatisticsHyperlink } from "@/api/AiCentre/index"; |
| | | import store from "@/store"; |
| | | |
| | | import { getSpecialSfStatistics, selectTimelyRate } from "@/api/system/user"; |
| | | import ExcelJS from "exceljs"; |
| | | import { saveAs } from "file-saver"; |
| | | |
| | | export default { |
| | | name: "FirstFollowUp", |
| | | props: { |
| | | queryParams: { |
| | | type: Object, |
| | | required: true, |
| | | }, |
| | | flatArrayhospit: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | flatArraydept: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | options: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | orgname: { |
| | | type: String, |
| | | default: "", |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | tableData: [], |
| | | loading: false, |
| | | expands: [], |
| | | ids: [], |
| | | patientqueryParams: { pn: 1, ps: 10 }, |
| | | tasktypes: store.getters.tasktypes, |
| | | }; |
| | | }, |
| | | methods: { |
| | | loadData() { |
| | | this.loading = true; |
| | | const params = { |
| | | ...this.queryParams, |
| | | visitCount: 1, |
| | | leavehospitaldistrictcodes: |
| | | this.queryParams.leavehospitaldistrictcodes.includes("all") |
| | | ? this.getAllWardCodes() |
| | | : this.queryParams.leavehospitaldistrictcodes, |
| | | deptcodes: this.queryParams.deptcodes.includes("all") |
| | | ? this.getAllDeptCodes() |
| | | : this.queryParams.deptcodes, |
| | | }; |
| | | |
| | | delete params.leavehospitaldistrictcodes.all; |
| | | delete params.deptcodes.all; |
| | | params.rateDay = 7; |
| | | getSpecialSfStatistics(params) |
| | | .then((response) => { |
| | | this.tableData = this.customSort(response.data); |
| | | }) |
| | | .catch((error) => { |
| | | console.error("è·å馿¬¡éè®¿æ°æ®å¤±è´¥:", error); |
| | | this.$message.error("è·å馿¬¡éè®¿æ°æ®å¤±è´¥"); |
| | | }) |
| | | .finally(() => { |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | |
| | | getAllWardCodes() { |
| | | return this.flatArrayhospit |
| | | .filter((item) => item.value !== "all") |
| | | .map((item) => item.value); |
| | | }, |
| | | |
| | | getAllDeptCodes() { |
| | | return this.flatArraydept |
| | | .filter((item) => item.value !== "all") |
| | | .map((item) => item.value); |
| | | }, |
| | | |
| | | customSort(data) { |
| | | const order = [ |
| | | "ä¸", |
| | | "äº", |
| | | "ä¸", |
| | | "å", |
| | | "äº", |
| | | "å
", |
| | | "ä¸", |
| | | "å
«", |
| | | "ä¹", |
| | | "å", |
| | | "åä¸", |
| | | "åäº", |
| | | "åä¸", |
| | | "åå", |
| | | "åäº", |
| | | "åå
", |
| | | "åä¸", |
| | | "åå
«", |
| | | "åä¹", |
| | | "äºå", |
| | | "äºåä¸", |
| | | "äºåäº", |
| | | "äºåä¸", |
| | | "äºåå", |
| | | "äºåäº", |
| | | "äºåå
", |
| | | "äºåä¸", |
| | | "äºåå
«", |
| | | "äºåä¹", |
| | | "ä¸å", |
| | | "ä¸åä¸", |
| | | "ä¸åäº", |
| | | "ä¸åä¸", |
| | | "ä¸åå", |
| | | "ä¸åäº", |
| | | "ä¸åå
", |
| | | "ä¸åä¸", |
| | | "ä¸åå
«", |
| | | "ä¸åä¹", |
| | | "åå", |
| | | "ååä¸", |
| | | "ååäº", |
| | | "ååä¸", |
| | | "ååå", |
| | | "ååäº", |
| | | ]; |
| | | |
| | | return data.sort((a, b) => { |
| | | const getIndex = (name) => { |
| | | if (!name || typeof name !== "string") return -1; |
| | | const chineseMatch = name.match(/^([ä¸äºä¸åäºå
ä¸å
«ä¹å]+)/); |
| | | if (chineseMatch && chineseMatch[1]) { |
| | | return order.indexOf(chineseMatch[1]); |
| | | } |
| | | const arabicMatch = name.match(/^(\d+)/); |
| | | if (arabicMatch && arabicMatch[1]) { |
| | | const num = parseInt(arabicMatch[1], 10); |
| | | if (num >= 1 && num <= 45) { |
| | | return num - 1; |
| | | } |
| | | } |
| | | return -1; |
| | | }; |
| | | |
| | | const indexA = getIndex(a.leavehospitaldistrictname); |
| | | const indexB = getIndex(b.leavehospitaldistrictname); |
| | | |
| | | if (indexA === -1 && indexB === -1) { |
| | | return (a.leavehospitaldistrictname || "").localeCompare( |
| | | b.leavehospitaldistrictname || "" |
| | | ); |
| | | } |
| | | if (indexA === -1) return 1; |
| | | if (indexB === -1) return -1; |
| | | return indexA - indexB; |
| | | }); |
| | | }, |
| | | |
| | | sortChineseNumber(aRow, bRow) { |
| | | const a = aRow.leavehospitaldistrictname; |
| | | const b = bRow.leavehospitaldistrictname; |
| | | |
| | | const chineseNumMap = { |
| | | ä¸: 1, |
| | | äº: 2, |
| | | ä¸: 3, |
| | | å: 4, |
| | | äº: 5, |
| | | å
: 6, |
| | | ä¸: 7, |
| | | å
«: 8, |
| | | ä¹: 9, |
| | | å: 10, |
| | | åä¸: 11, |
| | | åäº: 12, |
| | | åä¸: 13, |
| | | åå: 14, |
| | | åäº: 15, |
| | | åå
: 16, |
| | | åä¸: 17, |
| | | åå
«: 18, |
| | | åä¹: 19, |
| | | äºå: 20, |
| | | äºåä¸: 21, |
| | | äºåäº: 22, |
| | | äºåä¸: 23, |
| | | äºåå: 24, |
| | | äºåäº: 25, |
| | | äºåå
: 26, |
| | | äºåä¸: 27, |
| | | äºåå
«: 28, |
| | | äºåä¹: 29, |
| | | ä¸å: 30, |
| | | ä¸åä¸: 31, |
| | | ä¸åäº: 32, |
| | | ä¸åä¸: 33, |
| | | ä¸åå: 34, |
| | | ä¸åäº: 35, |
| | | ä¸åå
: 36, |
| | | ä¸åä¸: 37, |
| | | ä¸åå
«: 38, |
| | | ä¸åä¹: 39, |
| | | åå: 40, |
| | | ååä¸: 41, |
| | | ååäº: 42, |
| | | ååä¸: 43, |
| | | ååå: 44, |
| | | ååäº: 45, |
| | | }; |
| | | |
| | | const getNumberFromText = (text) => { |
| | | if (!text || typeof text !== "string") return -1; |
| | | const match = text.match(/^([ä¸äºä¸åäºå
ä¸å
«ä¹å]+)/); |
| | | if (match && match[1]) { |
| | | const chineseNum = match[1]; |
| | | return chineseNumMap[chineseNum] !== undefined |
| | | ? chineseNumMap[chineseNum] |
| | | : -1; |
| | | } |
| | | const arabicMatch = text.match(/^(\d+)/); |
| | | if (arabicMatch && arabicMatch[1]) { |
| | | const num = parseInt(arabicMatch[1], 10); |
| | | return num >= 1 && num <= 45 ? num : -1; |
| | | } |
| | | return -1; |
| | | }; |
| | | |
| | | const numA = getNumberFromText(a); |
| | | const numB = getNumberFromText(b); |
| | | |
| | | if (numA === -1 && numB === -1) { |
| | | return (a || "").localeCompare(b || ""); |
| | | } |
| | | if (numA === -1) return 1; |
| | | if (numB === -1) return -1; |
| | | return numA - numB; |
| | | }, |
| | | |
| | | getRowKey(row) { |
| | | return row.statisticaltype == 1 |
| | | ? row.leavehospitaldistrictcode |
| | | : row.deptcode; |
| | | }, |
| | | |
| | | handleRowClick(row) { |
| | | if (this.expands.includes(this.getRowKey(row))) { |
| | | this.expands = []; |
| | | return; |
| | | } |
| | | |
| | | const params = { |
| | | ...this.queryParams, |
| | | deptcodes: this.queryParams.deptcodes.includes("all") |
| | | ? this.getAllDeptCodes() |
| | | : this.queryParams.deptcodes, |
| | | leavehospitaldistrictcodes: [row.leavehospitaldistrictcode], |
| | | drcode: "1", |
| | | visitCount: 1, |
| | | }; |
| | | |
| | | delete params.leavehospitaldistrictcodes.all; |
| | | delete params.deptcodes.all; |
| | | |
| | | if (!row.doctorStats) { |
| | | this.loading = true; |
| | | params.rateDay = 7; |
| | | |
| | | getSpecialSfStatistics(params).then((res) => { |
| | | this.$set(row, "doctorStats", res.data); |
| | | this.expands = [this.getRowKey(row)]; |
| | | this.loading = false; |
| | | }); |
| | | } else { |
| | | this.expands = [this.getRowKey(row)]; |
| | | } |
| | | }, |
| | | // è®¡ç®æåççæ¹æ³ |
| | | calculateSuccessRate(followUpSuccess, needFollowUp, pendingFollowUp) { |
| | | const success = Number(followUpSuccess) || 0; |
| | | const need = Number(needFollowUp) || 0; |
| | | const pending = Number(pendingFollowUp) || 0; |
| | | |
| | | // 忝 = éé访 - å¾
é访 |
| | | const denominator = need - pending; |
| | | |
| | | if (denominator <= 0) { |
| | | return "0.00%"; |
| | | } |
| | | |
| | | const rate = (success / denominator) * 100; |
| | | return rate.toFixed(2) + "%"; |
| | | }, |
| | | // å¨ç»è®¡æ±æ»æ¹æ³ä¸å¤çæåç |
| | | getSummaries(param) { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | | |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = "å计"; |
| | | return; |
| | | } |
| | | if (index === 1) { |
| | | sums[index] = "/"; |
| | | return; |
| | | } |
| | | |
| | | if (column.property === "successRate") { |
| | | // æåçéè¦éæ°è®¡ç®æ»çæåçï¼è䏿¯å¹³åå¼ |
| | | const totalSuccess = data.reduce((sum, item) => { |
| | | return sum + (Number(item.followUpSuccess) || 0); |
| | | }, 0); |
| | | |
| | | const totalNeed = data.reduce((sum, item) => { |
| | | return sum + (Number(item.needFollowUp) || 0); |
| | | }, 0); |
| | | |
| | | const totalPending = data.reduce((sum, item) => { |
| | | return sum + (Number(item.pendingFollowUp) || 0); |
| | | }, 0); |
| | | |
| | | const denominator = totalNeed - totalPending; |
| | | |
| | | if (denominator > 0) { |
| | | sums[index] = ((totalSuccess / denominator) * 100).toFixed(2) + "%"; |
| | | } else { |
| | | sums[index] = "0.00%"; |
| | | } |
| | | } else if ( |
| | | column.property === "followUpRate" || |
| | | column.property === "rate" |
| | | ) { |
| | | const percentageValues = data |
| | | .map((item) => { |
| | | const value = item[column.property]; |
| | | if (!value || value === "-" || value === "0%") return null; |
| | | if (typeof value === "string" && value.includes("%")) { |
| | | const numValue = parseFloat(value.replace("%", "")) / 100; |
| | | return isNaN(numValue) ? null : numValue; |
| | | } else { |
| | | const numValue = parseFloat(value); |
| | | return isNaN(numValue) ? null : numValue; |
| | | } |
| | | }) |
| | | .filter((value) => value !== null && value !== 0); |
| | | |
| | | if (percentageValues.length > 0) { |
| | | const average = |
| | | percentageValues.reduce((sum, value) => sum + value, 0) / |
| | | percentageValues.length; |
| | | sums[index] = (average * 100).toFixed(2) + "%"; |
| | | } else { |
| | | sums[index] = "0.00%"; |
| | | } |
| | | } else { |
| | | const values = data.map((item) => { |
| | | const value = item[column.property]; |
| | | if (value === "-" || value === "" || value === null) return 0; |
| | | return Number(value) || 0; |
| | | }); |
| | | |
| | | if (!values.every((value) => isNaN(value))) { |
| | | sums[index] = values.reduce((prev, curr) => prev + curr, 0); |
| | | sums[index] = this.formatNumber(sums[index]); |
| | | } else { |
| | | sums[index] = "-"; |
| | | } |
| | | } |
| | | }); |
| | | |
| | | return sums; |
| | | }, |
| | | |
| | | getInnerSummaries(param) { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | | |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = "å°è®¡"; |
| | | return; |
| | | } |
| | | |
| | | if (column.property === "drname" || column.property === "deptname") { |
| | | sums[index] = "-"; |
| | | return; |
| | | } |
| | | |
| | | if (column.property === "successRate") { |
| | | // æåçéè¦éæ°è®¡ç®æ»çæåçï¼è䏿¯å¹³åå¼ |
| | | const totalSuccess = data.reduce((sum, item) => { |
| | | return sum + (Number(item.followUpSuccess) || 0); |
| | | }, 0); |
| | | |
| | | const totalNeed = data.reduce((sum, item) => { |
| | | return sum + (Number(item.needFollowUp) || 0); |
| | | }, 0); |
| | | |
| | | const totalPending = data.reduce((sum, item) => { |
| | | return sum + (Number(item.pendingFollowUp) || 0); |
| | | }, 0); |
| | | |
| | | const denominator = totalNeed - totalPending; |
| | | |
| | | if (denominator > 0) { |
| | | sums[index] = ((totalSuccess / denominator) * 100).toFixed(2) + "%"; |
| | | } else { |
| | | sums[index] = "0.00%"; |
| | | } |
| | | } else if ( |
| | | column.property === "followUpRate" || |
| | | column.property === "rate" |
| | | ) { |
| | | const percentageValues = data |
| | | .map((item) => { |
| | | const value = item[column.property]; |
| | | if (!value || value === "-" || value === "0%") return null; |
| | | if (typeof value === "string" && value.includes("%")) { |
| | | const numValue = parseFloat(value.replace("%", "")) / 100; |
| | | return isNaN(numValue) ? null : numValue; |
| | | } else { |
| | | const numValue = parseFloat(value); |
| | | return isNaN(numValue) ? null : numValue; |
| | | } |
| | | }) |
| | | .filter((value) => value !== null && value !== 0); |
| | | |
| | | if (percentageValues.length > 0) { |
| | | const average = |
| | | percentageValues.reduce((sum, value) => sum + value, 0) / |
| | | percentageValues.length; |
| | | sums[index] = (average * 100).toFixed(2) + "%"; |
| | | } else { |
| | | sums[index] = "0.00%"; |
| | | } |
| | | } else { |
| | | const values = data.map((item) => { |
| | | const value = item[column.property]; |
| | | if (value === "-" || value === "" || value === null) return 0; |
| | | return Number(value) || 0; |
| | | }); |
| | | |
| | | if (!values.every((value) => isNaN(value))) { |
| | | sums[index] = values.reduce((prev, curr) => prev + curr, 0); |
| | | sums[index] = this.formatNumber(sums[index]); |
| | | } else { |
| | | sums[index] = "-"; |
| | | } |
| | | } |
| | | }); |
| | | |
| | | return sums; |
| | | }, |
| | | |
| | | formatNumber(num) { |
| | | if (isNaN(num)) return "-"; |
| | | return Number.isInteger(num) ? num.toString() : num.toFixed(0); |
| | | }, |
| | | |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map((item) => item.tagid); |
| | | }, |
| | | |
| | | handleViewDetails(row, infoKey, titleSuffix, type) { |
| | | const title = `${ |
| | | row.leavehospitaldistrictname || row.deptname |
| | | }${titleSuffix}`; |
| | | this.$emit("view-details", row, infoKey, title, type); |
| | | }, |
| | | |
| | | handleSeeDetails(row) { |
| | | this.$emit("see-details", row); |
| | | }, |
| | | // ä¸»è¡¨å¯¼åº |
| | | async exportTable() { |
| | | try { |
| | | let dateRangeString = ""; |
| | | let sheetNameSuffix = ""; |
| | | |
| | | // 夿æ¯å¦æ¯ä¸½æ°´å¸ä¸å»é¢ |
| | | const isLishuiHospital = this.orgname == "丽水å¸ä¸å»é¢"; |
| | | |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const startDateStr = this.queryParams.dateRange[0]; |
| | | const endDateStr = this.queryParams.dateRange[1]; |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼åªæ¾ç¤ºå¹´æ |
| | | const formatMonthOnly = (dateTimeStr) => { |
| | | const date = new Date(dateTimeStr); |
| | | const year = date.getFullYear(); |
| | | const month = date.getMonth() + 1; |
| | | return `${year}å¹´${month}æ`; |
| | | }; |
| | | const startDateFormatted = formatMonthOnly(startDateStr); |
| | | const endDateFormatted = formatMonthOnly(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºå¹´ææ¥ |
| | | const formatDateForDisplay = (dateTimeStr) => { |
| | | return dateTimeStr.split(" ")[0]; |
| | | }; |
| | | const startDateFormatted = formatDateForDisplay(startDateStr); |
| | | const endDateFormatted = formatDateForDisplay(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } |
| | | } else { |
| | | const now = new Date(); |
| | | const currentMonth = now.getMonth() + 1; |
| | | const currentYear = now.getFullYear(); |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼æ¾ç¤ºå¹´æ |
| | | dateRangeString = `${currentYear}å¹´${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentYear}å¹´${currentMonth}æ`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºæä»½ |
| | | dateRangeString = `${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentMonth}æ`; |
| | | } |
| | | } |
| | | |
| | | // æ ¹æ® serviceType çæé访类ååç§° |
| | | let serviceTypeName = "馿¬¡ä¸ç
é访"; // æä»¶å使ç¨çåç§° |
| | | let sheetTypeName = "馿¬¡é访"; // å·¥ä½è¡¨ä½¿ç¨çåç§°ï¼ç®åçï¼ |
| | | |
| | | if ( |
| | | this.queryParams.serviceType && |
| | | Array.isArray(this.queryParams.serviceType) && |
| | | this.queryParams.serviceType.length > 0 |
| | | ) { |
| | | if (this.tasktypes && Array.isArray(this.tasktypes)) { |
| | | // è¿æ»¤åºå¹é
çé访类å |
| | | const matchedTypes = this.tasktypes.filter((task) => |
| | | this.queryParams.serviceType.includes(task.value) |
| | | ); |
| | | |
| | | if (matchedTypes.length === 1) { |
| | | // å个类å |
| | | const label = matchedTypes[0].label; |
| | | serviceTypeName = `馿¬¡${label}`; |
| | | sheetTypeName = `馿¬¡${label}`; |
| | | } else if (matchedTypes.length > 1) { |
| | | // å¤ä¸ªç±»å |
| | | const typeNames = matchedTypes.map((task) => task.label); |
| | | |
| | | // æä»¶åï¼ç¨ææ åé |
| | | serviceTypeName = `馿¬¡${typeNames.join("/")}`; |
| | | |
| | | // å·¥ä½è¡¨åï¼ä½¿ç¨ç¬¬ä¸ä¸ªç±»åæç®ååç§° |
| | | if (matchedTypes.length <= 2) { |
| | | // å¦æåªæ2个类åï¼é½æ¾ç¤º |
| | | sheetTypeName = `馿¬¡${typeNames[0]}ç`; |
| | | } else { |
| | | // 妿è¶
è¿2个类åï¼åªæ¾ç¤ºç¬¬ä¸ä¸ª |
| | | sheetTypeName = `馿¬¡${typeNames[0]}ç`; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æå¹é
çï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = `馿¬¡${typeStr}`; |
| | | sheetTypeName = "馿¬¡é访"; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æ tasktypesï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = `馿¬¡${typeStr}`; |
| | | sheetTypeName = "馿¬¡é访"; |
| | | } |
| | | } |
| | | |
| | | const excelName = `${serviceTypeName}ç»è®¡è¡¨_${dateRangeString}.xlsx`; |
| | | |
| | | // æ¸
çå·¥ä½è¡¨åç§°ï¼ç§»é¤éæ³å符 |
| | | const cleanSheetName = (name) => { |
| | | // Excelå·¥ä½è¡¨åä¸è½å
å«çå符: * ? : \ / [ ] |
| | | return name.replace(/[*?:\\/[\]]/g, " "); |
| | | }; |
| | | |
| | | const worksheetName = cleanSheetName( |
| | | `${sheetTypeName}ç»è®¡_${sheetNameSuffix}` |
| | | ); |
| | | |
| | | if (!this.tableData || this.tableData.length === 0) { |
| | | this.$message.warning(`ææ ${serviceTypeName}æ°æ®å¯å¯¼åº`); |
| | | return false; |
| | | } |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(worksheetName); |
| | | |
| | | // æå»ºè¡¨æ ¼ |
| | | this.buildExportSheet(worksheet, sheetNameSuffix); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | const blob = new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }); |
| | | saveAs(blob, excelName); |
| | | |
| | | this.$message.success("å¯¼åºæå"); |
| | | return true; |
| | | } catch (error) { |
| | | console.error("导åºå¤±è´¥:", error); |
| | | this.$message.error(`导åºå¤±è´¥: ${error.message}`); |
| | | return false; |
| | | } |
| | | }, |
| | | // åè¡¨å¯¼åº |
| | | /** 导åºå»çå表 */ |
| | | async exportDoctorTable(row) { |
| | | try { |
| | | const areaName = |
| | | row.leavehospitaldistrictname || row.deptname || "æªç¥ç
åº"; |
| | | |
| | | let dateRangeString = ""; |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const start = this.queryParams.dateRange[0].split(" ")[0]; |
| | | const end = this.queryParams.dateRange[1].split(" ")[0]; |
| | | dateRangeString = `${start}è³${end}`; |
| | | } else { |
| | | dateRangeString = `${new Date().getMonth() + 1}æ`; |
| | | } |
| | | |
| | | const fileName = `${areaName}å»çé访å表_${dateRangeString}.xlsx`; |
| | | const sheetName = `${areaName}å»çé访`; |
| | | |
| | | if (!row.doctorStats || row.doctorStats.length === 0) { |
| | | this.$message.warning("å½åç
åºææ å»çéè®¿æ°æ®"); |
| | | return; |
| | | } |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(sheetName); |
| | | console.log(111); |
| | | |
| | | this.buildDoctorExportSheet(worksheet, row.doctorStats, areaName); |
| | | console.log(222); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | saveAs( |
| | | new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }), |
| | | fileName |
| | | ); |
| | | |
| | | this.$message.success("å»çé访åè¡¨å¯¼åºæå"); |
| | | } catch (err) { |
| | | console.error(err); |
| | | this.$message.error("导åºå¤±è´¥"); |
| | | } |
| | | }, |
| | | buildDoctorExportSheet(worksheet, data, areaName) { |
| | | const titleStyle = { |
| | | font: { name: "微软é
é»", size: 16, bold: true }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | }; |
| | | |
| | | const headerStyle = { |
| | | font: { name: "微软é
é»", size: 11, bold: true }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | alignment: { horizontal: "center", vertical: "middle", wrapText: true }, |
| | | border: { |
| | | top: { style: "thin" }, |
| | | left: { style: "thin" }, |
| | | bottom: { style: "thin" }, |
| | | right: { style: "thin" }, |
| | | }, |
| | | }; |
| | | |
| | | const cellStyle = { |
| | | font: { name: "å®ä½", size: 10 }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | border: { |
| | | top: { style: "thin" }, |
| | | left: { style: "thin" }, |
| | | bottom: { style: "thin" }, |
| | | right: { style: "thin" }, |
| | | }, |
| | | }; |
| | | |
| | | // æ é¢ |
| | | worksheet.mergeCells(1, 1, 1, 10); |
| | | worksheet.getCell(1, 1).value = `${areaName}å»çé访å表`; |
| | | worksheet.getCell(1, 1).style = titleStyle; |
| | | worksheet.getRow(1).height = 30; |
| | | |
| | | // 表头 |
| | | const headers = [ |
| | | "å»çå§å", |
| | | "ç§å®¤", |
| | | "åºé¢äººæ¬¡", |
| | | "æ éé访", |
| | | "åºé访", |
| | | "éé访", |
| | | "å¾
é访", |
| | | "é访æå", |
| | | "é访失败", |
| | | "æåç", // æ°å¢ |
| | | // "é访ç", // 忥卿åçä½ç½® |
| | | ]; |
| | | |
| | | const headerRow = worksheet.addRow(headers); |
| | | headerRow.eachCell((cell) => { |
| | | cell.style = headerStyle; |
| | | }); |
| | | worksheet.getRow(2).height = 25; |
| | | |
| | | // æ°æ® |
| | | data.forEach((item) => { |
| | | const row = worksheet.addRow([ |
| | | item.drname, |
| | | item.deptname, |
| | | item.dischargeCount, |
| | | item.nonFollowUp, |
| | | item.followUpNeeded, |
| | | item.needFollowUp, |
| | | item.pendingFollowUp, |
| | | item.followUpSuccess, |
| | | item.followUpFail, |
| | | this.calculateSuccessRate( |
| | | item.followUpSuccess, |
| | | item.needFollowUp, |
| | | item.pendingFollowUp |
| | | ), |
| | | item.followUpRate, |
| | | ]); |
| | | row.eachCell((cell) => { |
| | | cell.style = cellStyle; |
| | | }); |
| | | }); |
| | | |
| | | // å°è®¡è¡ |
| | | const summaryRow = worksheet.addRow(this.getDoctorExportSummary(data)); |
| | | summaryRow.eachCell((cell) => { |
| | | cell.font = { bold: true }; |
| | | cell.fill = { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }; |
| | | }); |
| | | |
| | | // å宽 |
| | | worksheet.columns = [ |
| | | { width: 15 }, |
| | | { width: 15 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, // æåç |
| | | // { width: 12 }, // é访ç |
| | | ]; |
| | | }, |
| | | getDoctorExportSummary(data) { |
| | | const sums = ["å°è®¡"]; |
| | | |
| | | const keys = [ |
| | | "dischargeCount", |
| | | "nonFollowUp", |
| | | "followUpNeeded", |
| | | "needFollowUp", |
| | | "pendingFollowUp", |
| | | "followUpSuccess", |
| | | "followUpFail", |
| | | ]; |
| | | |
| | | keys.forEach((key) => { |
| | | sums.push(data.reduce((t, r) => t + (Number(r[key]) || 0), 0)); |
| | | }); |
| | | |
| | | // æåçï¼å¹³åå¼ï¼ |
| | | const successRates = data |
| | | .map((item) => { |
| | | const success = Number(item.followUpSuccess) || 0; |
| | | const need = Number(item.needFollowUp) || 0; |
| | | const pending = Number(item.pendingFollowUp) || 0; |
| | | const denominator = need - pending; |
| | | if (denominator <= 0) return 0; |
| | | return success / denominator; |
| | | }) |
| | | .filter((rate) => !isNaN(rate)); |
| | | |
| | | sums.push( |
| | | successRates.length |
| | | ? ( |
| | | (successRates.reduce((a, b) => a + b, 0) / successRates.length) * |
| | | 100 |
| | | ).toFixed(2) + "%" |
| | | : "0.00%" |
| | | ); |
| | | |
| | | // // é访çï¼å¹³åå¼ï¼ |
| | | // const followUpRates = data |
| | | // .map((i) => this.extractPercentageValue(i.followUpRate)) |
| | | // .filter(Boolean); |
| | | |
| | | // sums.push( |
| | | // followUpRates.length |
| | | // ? ( |
| | | // (followUpRates.reduce((a, b) => a + b, 0) / |
| | | // followUpRates.length) * |
| | | // 100 |
| | | // ).toFixed(2) + "%" |
| | | // : "0.00%" |
| | | // ); |
| | | |
| | | return sums; |
| | | }, |
| | | buildExportSheet(worksheet, sheetNameSuffix) { |
| | | const titleStyle = { |
| | | font: { |
| | | name: "微软é
é»", |
| | | size: 16, |
| | | bold: true, |
| | | color: { argb: "FF000000" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFE6F3FF" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center", wrapText: true }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const headerStyle = { |
| | | font: { |
| | | name: "微软é
é»", |
| | | size: 11, |
| | | bold: true, |
| | | color: { argb: "FF000000" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center", wrapText: true }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const cellStyle = { |
| | | font: { name: "å®ä½", size: 10, color: { argb: "FF000000" } }, |
| | | alignment: { vertical: "middle", horizontal: "center" }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const summaryStyle = { |
| | | font: { |
| | | name: "å®ä½", |
| | | size: 10, |
| | | bold: true, |
| | | color: { argb: "FF409EFF" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center" }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | // æ·»å æ é¢è¡ |
| | | worksheet.mergeCells(1, 1, 1, 16); |
| | | const titleCell = worksheet.getCell(1, 1); |
| | | titleCell.value = `馿¬¡ä¸ç
é访ç»è®¡è¡¨_${sheetNameSuffix}`; |
| | | titleCell.style = titleStyle; |
| | | worksheet.getRow(1).height = 35; |
| | | |
| | | // 表头 |
| | | const secondRowHeaders = [ |
| | | "", |
| | | "åºé¢ç
åº", |
| | | "ç§å®¤", |
| | | "åºé¢äººæ¬¡", |
| | | "æ éé访人次", |
| | | "åºé访人次", |
| | | "éé访", |
| | | "å¾
é访", |
| | | "é访æå", |
| | | "é访失败", |
| | | "æåç", // æ°å¢ |
| | | // "é访ç", // åä½ç½®åç§» |
| | | "åæ¶ç", // åæ¶çåç§» |
| | | "人工", |
| | | "è¯é³", // ä¿®æ£ï¼åºè¯¥æ¯è¯é³ |
| | | "çä¿¡", // çä¿¡ |
| | | "微信", // 微信 |
| | | ]; |
| | | |
| | | secondRowHeaders.forEach((header, index) => { |
| | | const cell = worksheet.getCell(3, index + 1); |
| | | cell.value = header; |
| | | cell.style = headerStyle; |
| | | }); |
| | | |
| | | // åå¹¶åå
æ ¼ |
| | | for (let i = 1; i <= 6; i++) { |
| | | worksheet.mergeCells(2, i, 3, i); |
| | | const cell = worksheet.getCell(2, i); |
| | | cell.style = headerStyle; |
| | | } |
| | | |
| | | worksheet.getCell(2, 1).value = ""; |
| | | worksheet.getCell(2, 2).value = "åºé¢ç
åº"; |
| | | worksheet.getCell(2, 3).value = "ç§å®¤"; |
| | | worksheet.getCell(2, 4).value = "åºé¢äººæ¬¡"; |
| | | worksheet.getCell(2, 5).value = "æ éé访人次"; |
| | | worksheet.getCell(2, 6).value = "åºé访人次"; |
| | | |
| | | worksheet.mergeCells(2, 7, 2, 16); // ä»7åå¹¶å°16ï¼åæ¥æ¯7-15ï¼ |
| | | worksheet.getCell(2, 7).value = "馿¬¡ä¸ç
é访"; |
| | | worksheet.getCell(2, 7).style = headerStyle; |
| | | |
| | | worksheet.getRow(2).height = 28; |
| | | worksheet.getRow(3).height = 25; |
| | | |
| | | // æ°æ®è¡ |
| | | this.tableData.forEach((item, rowIndex) => { |
| | | const dataRow = worksheet.addRow( |
| | | [ |
| | | "", |
| | | item.leavehospitaldistrictname || "", |
| | | item.deptname || "", |
| | | item.dischargeCount || 0, |
| | | item.nonFollowUp || 0, |
| | | item.followUpNeeded || 0, |
| | | item.needFollowUp || 0, |
| | | item.pendingFollowUp || 0, |
| | | item.followUpSuccess || 0, |
| | | item.followUpFail || 0, |
| | | // æåç - éè¦å¨æè®¡ç® |
| | | this.calculateSuccessRate( |
| | | item.followUpSuccess, |
| | | item.needFollowUp, |
| | | item.pendingFollowUp |
| | | ), |
| | | // item.followUpRate || "0%", // é访ç |
| | | item.rate ? (Number(item.rate) * 100).toFixed(2) + "%" : "0%", // åæ¶ç |
| | | item.manual || 0, |
| | | item.voice || 0, // è¯é³ |
| | | item.sms || 0, // çä¿¡ |
| | | item.weChat || 0, // 微信 |
| | | ], |
| | | rowIndex + 4 |
| | | ); |
| | | dataRow.eachCell((cell) => { |
| | | cell.style = cellStyle; |
| | | }); |
| | | dataRow.height = 24; |
| | | }); |
| | | |
| | | // åè®¡è¡ |
| | | const summaries = this.getExportSummaries(); |
| | | const summaryRow = worksheet.addRow(summaries); |
| | | summaryRow.eachCell((cell, colNumber) => { |
| | | cell.style = summaryStyle; |
| | | if (colNumber === 1) { |
| | | cell.value = "å计"; |
| | | } |
| | | }); |
| | | summaryRow.height = 28; |
| | | |
| | | // å宽 |
| | | worksheet.columns = [ |
| | | { width: 8 }, |
| | | { width: 20 }, |
| | | { width: 15 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 10 }, |
| | | { width: 10 }, |
| | | { width: 10 }, |
| | | { width: 10 }, |
| | | { width: 12 }, // æåç |
| | | // { width: 12 }, // é访ç |
| | | { width: 12 }, // åæ¶ç |
| | | { width: 8 }, // 人工 |
| | | { width: 8 }, // è¯é³ |
| | | { width: 8 }, // çä¿¡ |
| | | { width: 8 }, // 微信 |
| | | ]; |
| | | }, |
| | | |
| | | getExportSummaries() { |
| | | const summaries = [ |
| | | "å计", |
| | | "/", |
| | | "/", |
| | | 0, // 3: dischargeCount |
| | | 0, // 4: nonFollowUp |
| | | 0, // 5: followUpNeeded |
| | | 0, // 6: needFollowUp |
| | | 0, // 7: pendingFollowUp |
| | | 0, // 8: followUpSuccess |
| | | 0, // 9: followUpFail |
| | | "0%", // 10: æåç |
| | | // "0%", // 11: é访ç |
| | | "0%", // 12: åæ¶ç |
| | | 0, // 13: manual |
| | | 0, // 14: voice |
| | | 0, // 15: sms |
| | | 0, // 16: weChat |
| | | ]; |
| | | |
| | | this.tableData.forEach((item) => { |
| | | summaries[3] += Number(item.dischargeCount) || 0; |
| | | summaries[4] += Number(item.nonFollowUp) || 0; |
| | | summaries[5] += Number(item.followUpNeeded) || 0; |
| | | summaries[6] += Number(item.needFollowUp) || 0; |
| | | summaries[7] += Number(item.pendingFollowUp) || 0; |
| | | summaries[8] += Number(item.followUpSuccess) || 0; |
| | | summaries[9] += Number(item.followUpFail) || 0; |
| | | summaries[13] += Number(item.manual) || 0; |
| | | summaries[14] += Number(item.voice) || 0; |
| | | summaries[15] += Number(item.sms) || 0; |
| | | summaries[16] += Number(item.weChat) || 0; |
| | | }); |
| | | |
| | | // æåçè®¡ç® |
| | | const totalSuccess = summaries[8]; // followUpSuccessçæ»å |
| | | const totalNeed = summaries[6]; // needFollowUpçæ»å |
| | | const totalPending = summaries[7]; // pendingFollowUpçæ»å |
| | | const denominator = totalNeed - totalPending; |
| | | |
| | | if (denominator > 0) { |
| | | summaries[10] = ((totalSuccess / denominator) * 100).toFixed(2) + "%"; |
| | | } else { |
| | | summaries[10] = "0.00%"; |
| | | } |
| | | |
| | | // é访çè®¡ç® |
| | | // const followUpRateValues = this.tableData |
| | | // .map((item) => this.extractPercentageValue(item.followUpRate)) |
| | | // .filter((value) => value !== null); |
| | | |
| | | // if (followUpRateValues.length > 0) { |
| | | // const avgFollowUpRate = |
| | | // followUpRateValues.reduce((sum, val) => sum + val, 0) / |
| | | // followUpRateValues.length; |
| | | // summaries[11] = (avgFollowUpRate * 100).toFixed(2) + "%"; |
| | | // } |
| | | |
| | | // åæ¶çè®¡ç® |
| | | const rateValues = this.tableData |
| | | .map((item) => this.extractPercentageValue(item.rate)) |
| | | .filter((value) => value !== null); |
| | | |
| | | if (rateValues.length > 0) { |
| | | const avgRate = |
| | | rateValues.reduce((sum, val) => sum + val, 0) / rateValues.length; |
| | | summaries[12] = (avgRate * 100).toFixed(2) + "%"; |
| | | } |
| | | |
| | | // æ ¼å¼åæ°å |
| | | [3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16].forEach((index) => { |
| | | summaries[index] = this.formatNumber(summaries[index]); |
| | | }); |
| | | |
| | | return summaries; |
| | | }, |
| | | |
| | | extractPercentageValue(value) { |
| | | if (!value) return null; |
| | | if (typeof value === "string" && value.includes("%")) { |
| | | const num = parseFloat(value.replace("%", "")); |
| | | return isNaN(num) ? null : num / 100; |
| | | } |
| | | const num = parseFloat(value); |
| | | return isNaN(num) ? null : num; |
| | | }, |
| | | |
| | | selectTimelyRate(row, queryParams) { |
| | | console.log(row, queryParams, 88); |
| | | |
| | | // const params = { |
| | | // ...this.patientqueryParams, |
| | | // starttime: this.parseTime(dateRange[0]), |
| | | // endtime: this.parseTime(dateRange[1]), |
| | | // deptcode: row.deptcode, |
| | | // }; |
| | | this.patientqueryParams.starttime = this.parseTime( |
| | | queryParams.dateRange[0] |
| | | ); |
| | | this.patientqueryParams.endtime = this.parseTime( |
| | | queryParams.dateRange[1] |
| | | ); |
| | | this.patientqueryParams.deptcode = row.deptcode; |
| | | console.log(1); |
| | | |
| | | this.patientqueryParams.serviceTypes = queryParams.serviceType |
| | | ? queryParams.serviceType.join(",") |
| | | : null; |
| | | |
| | | return selectTimelyRate(this.patientqueryParams); |
| | | }, |
| | | selectTimelyRates(dateRange) { |
| | | this.patientqueryParams.pn = dateRange.pageNum; |
| | | this.patientqueryParams.ps = dateRange.pageSize; |
| | | |
| | | return selectTimelyRate(this.patientqueryParams); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .first-follow-up { |
| | | .your-table-container { |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .button-zx { |
| | | color: rgb(70, 204, 238); |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="second-follow-up"> |
| | | <div class="your-table-container"> |
| | | <el-table |
| | | ref="exportTableSecond" |
| | | id="exportTableidSecond" |
| | | v-loading="loading" |
| | | :data="tableData" |
| | | :border="true" |
| | | @selection-change="handleSelectionChange" |
| | | @expand-change="handleRowClick" |
| | | :row-key="getRowKey" |
| | | show-summary |
| | | :summary-method="getSummaries" |
| | | :expand-row-keys="expands" |
| | | > |
| | | <!-- è¡¨æ ¼åå®ä¹ --> |
| | | <el-table-column |
| | | v-if="queryParams.statisticaltype == 1" |
| | | label="åºé¢ç
åº" |
| | | align="center" |
| | | sortable |
| | | key="leavehospitaldistrictname" |
| | | prop="leavehospitaldistrictname" |
| | | width="150" |
| | | :show-overflow-tooltip="true" |
| | | :sort-method="sortChineseNumber" |
| | | /> |
| | | <el-table-column |
| | | v-if="queryParams.statisticaltype == 2" |
| | | label="ç§å®¤" |
| | | align="center" |
| | | key="deptname" |
| | | prop="deptname" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | v-if="queryParams.statisticaltype == 3" |
| | | label="ä¸ç
ä»»å¡" |
| | | width="200" |
| | | align="center" |
| | | key="taskName" |
| | | prop="taskName" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="åºé¢äººæ¬¡" |
| | | align="center" |
| | | key="dischargeCount" |
| | | prop="dischargeCount" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'dischargeCountInfo', |
| | | 'åºé¢æ£è
å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.dischargeCount }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æ éé访人次" |
| | | align="center" |
| | | width="100" |
| | | key="nonFollowUp" |
| | | prop="nonFollowUp" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'nonFollowUpInfo', 'æ éé访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.nonFollowUp }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé访人次" |
| | | align="center" |
| | | width="100" |
| | | key="followUpNeeded" |
| | | prop="followUpNeeded" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'followUpNeededInfo', 'åºé访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.followUpNeeded }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column align="center" label="忬¡ä¸ç
é访"> |
| | | <el-table-column |
| | | label="éé访" |
| | | align="center" |
| | | key="needFollowUpAgain" |
| | | prop="needFollowUpAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'needFollowUpAgainInfo', |
| | | '忬¡é访éé访å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.needFollowUpAgain }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="å¾
é访" |
| | | align="center" |
| | | key="pendingFollowUpAgain" |
| | | prop="pendingFollowUpAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'pendingFollowUpAgainInfo', |
| | | '忬¡é访å¾
é访å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ |
| | | scope.row.pendingFollowUpAgain |
| | | }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="é访æå" |
| | | align="center" |
| | | key="followUpSuccessAgain" |
| | | prop="followUpSuccessAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'followUpSuccessAgainInfo', |
| | | '忬¡é访é访æåå表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ |
| | | scope.row.followUpSuccessAgain |
| | | }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="é访失败" |
| | | align="center" |
| | | key="followUpFailAgain" |
| | | prop="followUpFailAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'followUpFailAgainInfo', |
| | | '忬¡é访é访失败å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.followUpFailAgain }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æåç" |
| | | align="center" |
| | | width="120" |
| | | key="successRateAgain" |
| | | prop="successRateAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span class="success-rate">{{ |
| | | calculateSuccessRate( |
| | | scope.row.followUpSuccessAgain, |
| | | scope.row.needFollowUpAgain, |
| | | scope.row.pendingFollowUpAgain |
| | | ) |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | | label="é访ç" |
| | | align="center" |
| | | width="120" |
| | | key="followUpRateAgain" |
| | | prop="followUpRateAgain" |
| | | /> --> |
| | | <el-table-column |
| | | label="人工" |
| | | align="center" |
| | | key="manualAgain" |
| | | prop="manualAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'manualAgainInfo', |
| | | '忬¡é访人工é访å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.manualAgain }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è¯é³" |
| | | align="center" |
| | | key="voiceAgain" |
| | | prop="voiceAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails(scope.row, 'voiceAgainInfo', 'è¯é³é访å表') |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.voiceAgain }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="çä¿¡" |
| | | align="center" |
| | | key="smsAgain" |
| | | prop="smsAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'smsAgainInfo', |
| | | '忬¡é访çä¿¡é访å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.smsAgain }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="微信" |
| | | align="center" |
| | | key="weChatAgain" |
| | | prop="weChatAgain" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click=" |
| | | handleViewDetails( |
| | | scope.row, |
| | | 'weChatAgainInfo', |
| | | '忬¡é访微信é访å表' |
| | | ) |
| | | " |
| | | > |
| | | <span class="button-zx">{{ scope.row.weChatAgain }}</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getSfStatistics } from "@/api/system/user"; |
| | | import ExcelJS from "exceljs"; |
| | | import { saveAs } from "file-saver"; |
| | | import store from "@/store"; |
| | | |
| | | export default { |
| | | name: "SecondFollowUp", |
| | | props: { |
| | | queryParams: { |
| | | type: Object, |
| | | required: true, |
| | | }, |
| | | flatArrayhospit: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | flatArraydept: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | options: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | orgname: { |
| | | type: String, |
| | | default: "", |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | tableData: [], |
| | | loading: false, |
| | | expands: [], |
| | | ids: [], |
| | | tasktypes: store.getters.tasktypes, |
| | | }; |
| | | }, |
| | | methods: { |
| | | loadData() { |
| | | this.loading = true; |
| | | const params = { |
| | | ...this.queryParams, |
| | | visitCount: 2, |
| | | leavehospitaldistrictcodes: |
| | | this.queryParams.leavehospitaldistrictcodes.includes("all") |
| | | ? this.getAllWardCodes() |
| | | : this.queryParams.leavehospitaldistrictcodes, |
| | | deptcodes: this.queryParams.deptcodes.includes("all") |
| | | ? this.getAllDeptCodes() |
| | | : this.queryParams.deptcodes, |
| | | }; |
| | | |
| | | delete params.leavehospitaldistrictcodes.all; |
| | | delete params.deptcodes.all; |
| | | params.rateDay = 7; |
| | | |
| | | getSfStatistics(params) |
| | | .then((response) => { |
| | | this.tableData = this.customSort(response.data); |
| | | }) |
| | | .catch((error) => { |
| | | console.error("è·å忬¡éè®¿æ°æ®å¤±è´¥:", error); |
| | | this.$message.error("è·å忬¡éè®¿æ°æ®å¤±è´¥"); |
| | | }) |
| | | .finally(() => { |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | |
| | | getAllWardCodes() { |
| | | return this.flatArrayhospit |
| | | .filter((item) => item.value !== "all") |
| | | .map((item) => item.value); |
| | | }, |
| | | |
| | | getAllDeptCodes() { |
| | | return this.flatArraydept |
| | | .filter((item) => item.value !== "all") |
| | | .map((item) => item.value); |
| | | }, |
| | | |
| | | customSort(data) { |
| | | const order = [ |
| | | "ä¸", |
| | | "äº", |
| | | "ä¸", |
| | | "å", |
| | | "äº", |
| | | "å
", |
| | | "ä¸", |
| | | "å
«", |
| | | "ä¹", |
| | | "å", |
| | | "åä¸", |
| | | "åäº", |
| | | "åä¸", |
| | | "åå", |
| | | "åäº", |
| | | "åå
", |
| | | "åä¸", |
| | | "åå
«", |
| | | "åä¹", |
| | | "äºå", |
| | | "äºåä¸", |
| | | "äºåäº", |
| | | "äºåä¸", |
| | | "äºåå", |
| | | "äºåäº", |
| | | "äºåå
", |
| | | "äºåä¸", |
| | | "äºåå
«", |
| | | "äºåä¹", |
| | | "ä¸å", |
| | | "ä¸åä¸", |
| | | "ä¸åäº", |
| | | "ä¸åä¸", |
| | | "ä¸åå", |
| | | "ä¸åäº", |
| | | "ä¸åå
", |
| | | "ä¸åä¸", |
| | | "ä¸åå
«", |
| | | "ä¸åä¹", |
| | | "åå", |
| | | "ååä¸", |
| | | "ååäº", |
| | | "ååä¸", |
| | | "ååå", |
| | | "ååäº", |
| | | ]; |
| | | |
| | | return data.sort((a, b) => { |
| | | const getIndex = (name) => { |
| | | if (!name || typeof name !== "string") return -1; |
| | | const chineseMatch = name.match(/^([ä¸äºä¸åäºå
ä¸å
«ä¹å]+)/); |
| | | if (chineseMatch && chineseMatch[1]) { |
| | | return order.indexOf(chineseMatch[1]); |
| | | } |
| | | const arabicMatch = name.match(/^(\d+)/); |
| | | if (arabicMatch && arabicMatch[1]) { |
| | | const num = parseInt(arabicMatch[1], 10); |
| | | if (num >= 1 && num <= 45) { |
| | | return num - 1; |
| | | } |
| | | } |
| | | return -1; |
| | | }; |
| | | |
| | | const indexA = getIndex(a.leavehospitaldistrictname); |
| | | const indexB = getIndex(b.leavehospitaldistrictname); |
| | | |
| | | if (indexA === -1 && indexB === -1) { |
| | | return (a.leavehospitaldistrictname || "").localeCompare( |
| | | b.leavehospitaldistrictname || "" |
| | | ); |
| | | } |
| | | if (indexA === -1) return 1; |
| | | if (indexB === -1) return -1; |
| | | return indexA - indexB; |
| | | }); |
| | | }, |
| | | |
| | | sortChineseNumber(aRow, bRow) { |
| | | const a = aRow.leavehospitaldistrictname; |
| | | const b = bRow.leavehospitaldistrictname; |
| | | |
| | | const chineseNumMap = { |
| | | ä¸: 1, |
| | | äº: 2, |
| | | ä¸: 3, |
| | | å: 4, |
| | | äº: 5, |
| | | å
: 6, |
| | | ä¸: 7, |
| | | å
«: 8, |
| | | ä¹: 9, |
| | | å: 10, |
| | | åä¸: 11, |
| | | åäº: 12, |
| | | åä¸: 13, |
| | | åå: 14, |
| | | åäº: 15, |
| | | åå
: 16, |
| | | åä¸: 17, |
| | | åå
«: 18, |
| | | åä¹: 19, |
| | | äºå: 20, |
| | | äºåä¸: 21, |
| | | äºåäº: 22, |
| | | äºåä¸: 23, |
| | | äºåå: 24, |
| | | äºåäº: 25, |
| | | äºåå
: 26, |
| | | äºåä¸: 27, |
| | | äºåå
«: 28, |
| | | äºåä¹: 29, |
| | | ä¸å: 30, |
| | | ä¸åä¸: 31, |
| | | ä¸åäº: 32, |
| | | ä¸åä¸: 33, |
| | | ä¸åå: 34, |
| | | ä¸åäº: 35, |
| | | ä¸åå
: 36, |
| | | ä¸åä¸: 37, |
| | | ä¸åå
«: 38, |
| | | ä¸åä¹: 39, |
| | | åå: 40, |
| | | ååä¸: 41, |
| | | ååäº: 42, |
| | | ååä¸: 43, |
| | | ååå: 44, |
| | | ååäº: 45, |
| | | }; |
| | | |
| | | const getNumberFromText = (text) => { |
| | | if (!text || typeof text !== "string") return -1; |
| | | const match = text.match(/^([ä¸äºä¸åäºå
ä¸å
«ä¹å]+)/); |
| | | if (match && match[1]) { |
| | | const chineseNum = match[1]; |
| | | return chineseNumMap[chineseNum] !== undefined |
| | | ? chineseNumMap[chineseNum] |
| | | : -1; |
| | | } |
| | | const arabicMatch = text.match(/^(\d+)/); |
| | | if (arabicMatch && arabicMatch[1]) { |
| | | const num = parseInt(arabicMatch[1], 10); |
| | | return num >= 1 && num <= 45 ? num : -1; |
| | | } |
| | | return -1; |
| | | }; |
| | | |
| | | const numA = getNumberFromText(a); |
| | | const numB = getNumberFromText(b); |
| | | |
| | | if (numA === -1 && numB === -1) { |
| | | return (a || "").localeCompare(b || ""); |
| | | } |
| | | if (numA === -1) return 1; |
| | | if (numB === -1) return -1; |
| | | return numA - numB; |
| | | }, |
| | | |
| | | getRowKey(row) { |
| | | return row.statisticaltype === 1 |
| | | ? row.leavehospitaldistrictcode |
| | | : row.deptcode; |
| | | }, |
| | | |
| | | handleRowClick(row) { |
| | | if (this.expands.includes(this.getRowKey(row))) { |
| | | this.expands = []; |
| | | return; |
| | | } |
| | | |
| | | const params = { |
| | | ...this.queryParams, |
| | | deptcodes: this.queryParams.deptcodes.includes("all") |
| | | ? this.getAllDeptCodes() |
| | | : this.queryParams.deptcodes, |
| | | leavehospitaldistrictcodes: [row.leavehospitaldistrictcode], |
| | | drcode: "1", |
| | | visitCount: 2, |
| | | }; |
| | | |
| | | delete params.leavehospitaldistrictcodes.all; |
| | | delete params.deptcodes.all; |
| | | |
| | | if (!row.doctorStats) { |
| | | this.loading = true; |
| | | params.rateDay = 7; |
| | | |
| | | getSfStatistics(params).then((res) => { |
| | | this.$set(row, "doctorStats", res.data); |
| | | this.expands = [this.getRowKey(row)]; |
| | | this.loading = false; |
| | | }); |
| | | } else { |
| | | this.expands = [this.getRowKey(row)]; |
| | | } |
| | | }, |
| | | |
| | | // å¨ç»è®¡æ±æ»æ¹æ³ä¸å¤çæåç |
| | | getSummaries(param) { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | | |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = "å计"; |
| | | return; |
| | | } |
| | | if (index === 1) { |
| | | sums[index] = "/"; |
| | | return; |
| | | } |
| | | |
| | | if (column.property === "successRateAgain") { |
| | | // æåçéè¦éæ°è®¡ç®æ»çæåçï¼è䏿¯å¹³åå¼ |
| | | const totalSuccess = data.reduce((sum, item) => { |
| | | return sum + (Number(item.followUpSuccessAgain) || 0); |
| | | }, 0); |
| | | |
| | | const totalNeed = data.reduce((sum, item) => { |
| | | return sum + (Number(item.needFollowUpAgain) || 0); |
| | | }, 0); |
| | | |
| | | const totalPending = data.reduce((sum, item) => { |
| | | return sum + (Number(item.pendingFollowUpAgain) || 0); |
| | | }, 0); |
| | | |
| | | const denominator = totalNeed - totalPending; |
| | | |
| | | if (denominator > 0) { |
| | | sums[index] = ((totalSuccess / denominator) * 100).toFixed(2) + "%"; |
| | | } else { |
| | | sums[index] = "0.00%"; |
| | | } |
| | | } else if (column.property === "followUpRateAgain") { |
| | | const percentageValues = data |
| | | .map((item) => { |
| | | const value = item[column.property]; |
| | | if (!value || value === "-" || value === "0%") return null; |
| | | if (typeof value === "string" && value.includes("%")) { |
| | | const numValue = parseFloat(value.replace("%", "")) / 100; |
| | | return isNaN(numValue) ? null : numValue; |
| | | } else { |
| | | const numValue = parseFloat(value); |
| | | return isNaN(numValue) ? null : numValue; |
| | | } |
| | | }) |
| | | .filter((value) => value !== null && value !== 0); |
| | | |
| | | if (percentageValues.length > 0) { |
| | | const average = |
| | | percentageValues.reduce((sum, value) => sum + value, 0) / |
| | | percentageValues.length; |
| | | sums[index] = (average * 100).toFixed(2) + "%"; |
| | | } else { |
| | | sums[index] = "0.00%"; |
| | | } |
| | | } else { |
| | | const values = data.map((item) => { |
| | | const value = item[column.property]; |
| | | if (value === "-" || value === "" || value === null) return 0; |
| | | return Number(value) || 0; |
| | | }); |
| | | |
| | | if (!values.every((value) => isNaN(value))) { |
| | | sums[index] = values.reduce((prev, curr) => prev + curr, 0); |
| | | sums[index] = this.formatNumber(sums[index]); |
| | | } else { |
| | | sums[index] = "-"; |
| | | } |
| | | } |
| | | }); |
| | | |
| | | return sums; |
| | | }, |
| | | |
| | | getInnerSummaries(param) { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | | |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = "å°è®¡"; |
| | | return; |
| | | } |
| | | |
| | | if (column.property === "drname" || column.property === "deptname") { |
| | | sums[index] = "-"; |
| | | return; |
| | | } |
| | | |
| | | if (column.property === "successRateAgain") { |
| | | // æåçéè¦éæ°è®¡ç®æ»çæåçï¼è䏿¯å¹³åå¼ |
| | | const totalSuccess = data.reduce((sum, item) => { |
| | | return sum + (Number(item.followUpSuccessAgain) || 0); |
| | | }, 0); |
| | | |
| | | const totalNeed = data.reduce((sum, item) => { |
| | | return sum + (Number(item.needFollowUpAgain) || 0); |
| | | }, 0); |
| | | |
| | | const totalPending = data.reduce((sum, item) => { |
| | | return sum + (Number(item.pendingFollowUpAgain) || 0); |
| | | }, 0); |
| | | |
| | | const denominator = totalNeed - totalPending; |
| | | |
| | | if (denominator > 0) { |
| | | sums[index] = ((totalSuccess / denominator) * 100).toFixed(2) + "%"; |
| | | } else { |
| | | sums[index] = "0.00%"; |
| | | } |
| | | } else if (column.property === "followUpRateAgain") { |
| | | const percentageValues = data |
| | | .map((item) => { |
| | | const value = item[column.property]; |
| | | if (!value || value === "-" || value === "0%") return null; |
| | | if (typeof value === "string" && value.includes("%")) { |
| | | const numValue = parseFloat(value.replace("%", "")) / 100; |
| | | return isNaN(numValue) ? null : numValue; |
| | | } else { |
| | | const numValue = parseFloat(value); |
| | | return isNaN(numValue) ? null : numValue; |
| | | } |
| | | }) |
| | | .filter((value) => value !== null && value !== 0); |
| | | |
| | | if (percentageValues.length > 0) { |
| | | const average = |
| | | percentageValues.reduce((sum, value) => sum + value, 0) / |
| | | percentageValues.length; |
| | | sums[index] = (average * 100).toFixed(2) + "%"; |
| | | } else { |
| | | sums[index] = "0.00%"; |
| | | } |
| | | } else { |
| | | const values = data.map((item) => { |
| | | const value = item[column.property]; |
| | | if (value === "-" || value === "" || value === null) return 0; |
| | | return Number(value) || 0; |
| | | }); |
| | | |
| | | if (!values.every((value) => isNaN(value))) { |
| | | sums[index] = values.reduce((prev, curr) => prev + curr, 0); |
| | | sums[index] = this.formatNumber(sums[index]); |
| | | } else { |
| | | sums[index] = "-"; |
| | | } |
| | | } |
| | | }); |
| | | |
| | | return sums; |
| | | }, |
| | | |
| | | formatNumber(num) { |
| | | if (isNaN(num)) return "-"; |
| | | return Number.isInteger(num) ? num.toString() : num.toFixed(0); |
| | | }, |
| | | |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map((item) => item.tagid); |
| | | }, |
| | | |
| | | handleViewDetails(row, infoKey, titleSuffix, type) { |
| | | const title = `${ |
| | | row.leavehospitaldistrictname || row.deptname |
| | | }${titleSuffix}`; |
| | | this.$emit("view-details", row, infoKey, title, type); |
| | | }, |
| | | // è®¡ç®æåççæ¹æ³ |
| | | calculateSuccessRate(followUpSuccess, needFollowUp, pendingFollowUp) { |
| | | const success = Number(followUpSuccess) || 0; |
| | | const need = Number(needFollowUp) || 0; |
| | | const pending = Number(pendingFollowUp) || 0; |
| | | |
| | | // 忝 = éé访 - å¾
é访 |
| | | const denominator = need - pending; |
| | | |
| | | if (denominator <= 0) { |
| | | return "0.00%"; |
| | | } |
| | | |
| | | const rate = (success / denominator) * 100; |
| | | return rate.toFixed(2) + "%"; |
| | | }, |
| | | async exportTable() { |
| | | try { |
| | | let dateRangeString = ""; |
| | | let sheetNameSuffix = ""; |
| | | |
| | | // 夿æ¯å¦æ¯ä¸½æ°´å¸ä¸å»é¢ |
| | | const isLishuiHospital = this.orgname == "丽水å¸ä¸å»é¢"; |
| | | |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const startDateStr = this.queryParams.dateRange[0]; |
| | | const endDateStr = this.queryParams.dateRange[1]; |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼åªæ¾ç¤ºå¹´æ |
| | | const formatMonthOnly = (dateTimeStr) => { |
| | | const date = new Date(dateTimeStr); |
| | | const year = date.getFullYear(); |
| | | const month = date.getMonth() + 1; |
| | | return `${year}å¹´${month}æ`; |
| | | }; |
| | | const startDateFormatted = formatMonthOnly(startDateStr); |
| | | const endDateFormatted = formatMonthOnly(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºå¹´ææ¥ |
| | | const formatDateForDisplay = (dateTimeStr) => { |
| | | return dateTimeStr.split(" ")[0]; |
| | | }; |
| | | const startDateFormatted = formatDateForDisplay(startDateStr); |
| | | const endDateFormatted = formatDateForDisplay(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } |
| | | } else { |
| | | const now = new Date(); |
| | | const currentMonth = now.getMonth() + 1; |
| | | const currentYear = now.getFullYear(); |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼æ¾ç¤ºå¹´æ |
| | | dateRangeString = `${currentYear}å¹´${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentYear}å¹´${currentMonth}æ`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºæä»½ |
| | | dateRangeString = `${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentMonth}æ`; |
| | | } |
| | | } |
| | | |
| | | // æ ¹æ® serviceType çæé访类ååç§° |
| | | let serviceTypeName = "åºé¢é访"; // æä»¶å使ç¨çåç§° |
| | | let sheetTypeName = "忬¡é访"; // å·¥ä½è¡¨ä½¿ç¨çåç§°ï¼ç®åçï¼ |
| | | console.log(this.queryParams.serviceType); |
| | | |
| | | if ( |
| | | this.queryParams.serviceType && |
| | | Array.isArray(this.queryParams.serviceType) && |
| | | this.queryParams.serviceType.length > 0 |
| | | ) { |
| | | if (this.tasktypes && Array.isArray(this.tasktypes)) { |
| | | // è¿æ»¤åºå¹é
çé访类å |
| | | const matchedTypes = this.tasktypes.filter((task) => |
| | | this.queryParams.serviceType.includes(task.value) |
| | | ); |
| | | |
| | | if (matchedTypes.length === 1) { |
| | | // å个类å |
| | | const label = matchedTypes[0].label; |
| | | serviceTypeName = label; |
| | | sheetTypeName = label; |
| | | } else if (matchedTypes.length > 1) { |
| | | // å¤ä¸ªç±»å |
| | | const typeNames = matchedTypes.map((task) => task.label); |
| | | |
| | | // æä»¶åï¼ç¨ææ åé |
| | | serviceTypeName = typeNames.join("/"); |
| | | |
| | | // å·¥ä½è¡¨åï¼ä½¿ç¨ç¬¬ä¸ä¸ªç±»åæç®ååç§° |
| | | if (matchedTypes.length <= 2) { |
| | | // å¦æåªæ2个类åï¼é½æ¾ç¤º |
| | | sheetTypeName = `${typeNames[0]}ç`; |
| | | } else { |
| | | // 妿è¶
è¿2个类åï¼åªæ¾ç¤ºç¬¬ä¸ä¸ª |
| | | sheetTypeName = `${typeNames[0]}ç`; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æå¹é
çï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = typeStr; |
| | | sheetTypeName = "忬¡é访"; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æ tasktypesï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = typeStr; |
| | | sheetTypeName = "忬¡é访"; |
| | | } |
| | | } |
| | | |
| | | const excelName = `忬¡${serviceTypeName}ç»è®¡è¡¨_${dateRangeString}.xlsx`; |
| | | |
| | | // æ¸
çå·¥ä½è¡¨åç§°ï¼ç§»é¤éæ³å符 |
| | | const cleanSheetName = (name) => { |
| | | // Excelå·¥ä½è¡¨åä¸è½å
å«çå符: * ? : \ / [ ] |
| | | return name.replace(/[*?:\\/[\]]/g, " "); |
| | | }; |
| | | |
| | | const worksheetName = cleanSheetName( |
| | | `忬¡${sheetTypeName}ç»è®¡_${sheetNameSuffix}` |
| | | ); |
| | | |
| | | if (!this.tableData || this.tableData.length === 0) { |
| | | this.$message.warning(`ææ åæ¬¡${serviceTypeName}æ°æ®å¯å¯¼åº`); |
| | | return false; |
| | | } |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(worksheetName); |
| | | |
| | | // æå»ºè¡¨æ ¼ |
| | | this.buildExportSheet(worksheet, sheetNameSuffix); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | const blob = new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }); |
| | | saveAs(blob, excelName); |
| | | |
| | | this.$message.success("å¯¼åºæå"); |
| | | return true; |
| | | } catch (error) { |
| | | console.error("导åºå¤±è´¥:", error); |
| | | this.$message.error(`导åºå¤±è´¥: ${error.message}`); |
| | | return false; |
| | | } |
| | | }, |
| | | /** 导åºå»çå表ï¼å次éè®¿ï¼ */ |
| | | async exportDoctorTable(row) { |
| | | try { |
| | | const areaName = |
| | | row.leavehospitaldistrictname || row.deptname || "æªç¥ç
åº"; |
| | | |
| | | let dateRangeString = ""; |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const start = this.queryParams.dateRange[0].split(" ")[0]; |
| | | const end = this.queryParams.dateRange[1].split(" ")[0]; |
| | | dateRangeString = `${start}è³${end}`; |
| | | } else { |
| | | dateRangeString = `${new Date().getMonth() + 1}æ`; |
| | | } |
| | | |
| | | const fileName = `${areaName}å»ç忬¡é访å表_${dateRangeString}.xlsx`; |
| | | const sheetName = `${areaName}å»ç忬¡é访`; |
| | | |
| | | if (!row.doctorStats || row.doctorStats.length === 0) { |
| | | this.$message.warning("å½åç
åºææ å»ç忬¡éè®¿æ°æ®"); |
| | | return; |
| | | } |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(sheetName); |
| | | |
| | | this.buildDoctorExportSheet(worksheet, row.doctorStats, areaName); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | saveAs( |
| | | new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }), |
| | | fileName |
| | | ); |
| | | |
| | | this.$message.success("å»ç忬¡é访åè¡¨å¯¼åºæå"); |
| | | } catch (err) { |
| | | console.error(err); |
| | | this.$message.error("导åºå¤±è´¥"); |
| | | } |
| | | }, |
| | | buildDoctorExportSheet(worksheet, data, areaName) { |
| | | const titleStyle = { |
| | | font: { name: "微软é
é»", size: 16, bold: true }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | }; |
| | | |
| | | const headerStyle = { |
| | | font: { name: "微软é
é»", size: 11, bold: true }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | alignment: { horizontal: "center", vertical: "middle", wrapText: true }, |
| | | border: { |
| | | top: { style: "thin" }, |
| | | left: { style: "thin" }, |
| | | bottom: { style: "thin" }, |
| | | right: { style: "thin" }, |
| | | }, |
| | | }; |
| | | |
| | | const cellStyle = { |
| | | font: { name: "å®ä½", size: 10 }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | border: { |
| | | top: { style: "thin" }, |
| | | left: { style: "thin" }, |
| | | bottom: { style: "thin" }, |
| | | right: { style: "thin" }, |
| | | }, |
| | | }; |
| | | |
| | | // æ é¢ |
| | | worksheet.mergeCells(1, 1, 1, 10); |
| | | worksheet.getCell(1, 1).value = `${areaName}å»ç忬¡é访å表`; |
| | | worksheet.getCell(1, 1).style = titleStyle; |
| | | worksheet.getRow(1).height = 30; |
| | | |
| | | // 表头 |
| | | const headers = [ |
| | | "å»çå§å", |
| | | "ç§å®¤", |
| | | "åºé¢äººæ¬¡", |
| | | "æ éé访", |
| | | "åºé访", |
| | | "éé访", |
| | | "å¾
é访", |
| | | "é访æå", |
| | | "é访失败", |
| | | "æåç", // æ°å¢ |
| | | // "é访ç", // 忥卿åçä½ç½® |
| | | ]; |
| | | |
| | | const headerRow = worksheet.addRow(headers); |
| | | headerRow.eachCell((cell) => { |
| | | cell.style = headerStyle; |
| | | }); |
| | | worksheet.getRow(2).height = 25; |
| | | |
| | | // æ°æ® |
| | | data.forEach((item) => { |
| | | const row = worksheet.addRow([ |
| | | item.drname, |
| | | item.deptname, |
| | | item.dischargeCount, |
| | | item.nonFollowUp, |
| | | item.followUpNeeded, |
| | | item.needFollowUpAgain, |
| | | item.pendingFollowUpAgain, |
| | | item.followUpSuccessAgain, |
| | | item.followUpFailAgain, |
| | | this.calculateSuccessRate( |
| | | item.followUpSuccessAgain, |
| | | item.needFollowUpAgain, |
| | | item.pendingFollowUpAgain |
| | | ), |
| | | item.followUpRateAgain, |
| | | ]); |
| | | row.eachCell((cell) => { |
| | | cell.style = cellStyle; |
| | | }); |
| | | }); |
| | | |
| | | // å°è®¡è¡ |
| | | const summaryRow = worksheet.addRow( |
| | | this.getDoctorAgainExportSummary(data) |
| | | ); |
| | | summaryRow.eachCell((cell) => { |
| | | cell.font = { bold: true }; |
| | | cell.fill = { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }; |
| | | }); |
| | | |
| | | // å宽 |
| | | worksheet.columns = [ |
| | | { width: 15 }, |
| | | { width: 15 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, // æåç |
| | | // { width: 12 }, // é访ç |
| | | ]; |
| | | }, |
| | | /** 忬¡é访 - å»çå表导åºå°è®¡ */ |
| | | getDoctorAgainExportSummary(data) { |
| | | const sums = ["å°è®¡"]; |
| | | |
| | | const keys = [ |
| | | "dischargeCount", |
| | | "nonFollowUp", |
| | | "followUpNeeded", |
| | | "needFollowUpAgain", |
| | | "pendingFollowUpAgain", |
| | | "followUpSuccessAgain", |
| | | "followUpFailAgain", |
| | | ]; |
| | | |
| | | keys.forEach((key) => { |
| | | sums.push(data.reduce((t, r) => t + (Number(r[key]) || 0), 0)); |
| | | }); |
| | | |
| | | // æåçï¼å¹³åå¼ï¼ |
| | | const successRates = data |
| | | .map((item) => { |
| | | const success = Number(item.followUpSuccessAgain) || 0; |
| | | const need = Number(item.needFollowUpAgain) || 0; |
| | | const pending = Number(item.pendingFollowUpAgain) || 0; |
| | | const denominator = need - pending; |
| | | if (denominator <= 0) return 0; |
| | | return success / denominator; |
| | | }) |
| | | .filter((rate) => !isNaN(rate)); |
| | | |
| | | sums.push( |
| | | successRates.length |
| | | ? ( |
| | | (successRates.reduce((a, b) => a + b, 0) / successRates.length) * |
| | | 100 |
| | | ).toFixed(2) + "%" |
| | | : "0.00%" |
| | | ); |
| | | |
| | | // // é访çï¼å¹³åå¼ï¼ |
| | | // const followUpRates = data |
| | | // .map((i) => this.extractPercentageValue(i.followUpRateAgain)) |
| | | // .filter(Boolean); |
| | | |
| | | // sums.push( |
| | | // followUpRates.length |
| | | // ? ( |
| | | // (followUpRates.reduce((a, b) => a + b, 0) / |
| | | // followUpRates.length) * |
| | | // 100 |
| | | // ).toFixed(2) + "%" |
| | | // : "0.00%" |
| | | // ); |
| | | |
| | | return sums; |
| | | }, |
| | | buildExportSheet(worksheet, sheetNameSuffix) { |
| | | const titleStyle = { |
| | | font: { |
| | | name: "微软é
é»", |
| | | size: 16, |
| | | bold: true, |
| | | color: { argb: "FF000000" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFE6F3FF" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center", wrapText: true }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const headerStyle = { |
| | | font: { |
| | | name: "微软é
é»", |
| | | size: 11, |
| | | bold: true, |
| | | color: { argb: "FF000000" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center", wrapText: true }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const cellStyle = { |
| | | font: { name: "å®ä½", size: 10, color: { argb: "FF000000" } }, |
| | | alignment: { vertical: "middle", horizontal: "center" }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | const summaryStyle = { |
| | | font: { |
| | | name: "å®ä½", |
| | | size: 10, |
| | | bold: true, |
| | | color: { argb: "FF409EFF" }, |
| | | }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | alignment: { vertical: "middle", horizontal: "center" }, |
| | | border: { |
| | | top: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | left: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | bottom: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | right: { style: "thin", color: { argb: "FFD0D0D0" } }, |
| | | }, |
| | | }; |
| | | |
| | | // æ·»å æ é¢è¡ |
| | | worksheet.mergeCells(1, 1, 1, 15); |
| | | const titleCell = worksheet.getCell(1, 1); |
| | | titleCell.value = `忬¡ä¸ç
é访ç»è®¡è¡¨_${sheetNameSuffix}`; |
| | | titleCell.style = titleStyle; |
| | | worksheet.getRow(1).height = 35; |
| | | |
| | | // 表头 |
| | | // 表头éè¦å¢å æåçå |
| | | const secondRowHeaders = [ |
| | | "", |
| | | "åºé¢ç
åº", |
| | | "ç§å®¤", |
| | | "åºé¢äººæ¬¡", |
| | | "æ éé访人次", |
| | | "åºé访人次", |
| | | "éé访", |
| | | "å¾
é访", |
| | | "é访æå", |
| | | "é访失败", |
| | | "æåç", // æåçåºè¯¥å¨é访失败åé¢ |
| | | // "é访ç", // é访ç卿åçåé¢ |
| | | "人工", |
| | | "è¯é³", // ä¿®æ£ï¼åºè¯¥æ¯è¯é³ï¼ä¸æ¯çä¿¡ |
| | | "çä¿¡", // çä¿¡ |
| | | "微信", // 微信 |
| | | ]; |
| | | |
| | | secondRowHeaders.forEach((header, index) => { |
| | | const cell = worksheet.getCell(3, index + 1); |
| | | cell.value = header; |
| | | cell.style = headerStyle; |
| | | }); |
| | | |
| | | // æ´æ°åå¹¶åå
æ ¼çèå´ |
| | | for (let i = 1; i <= 6; i++) { |
| | | worksheet.mergeCells(2, i, 3, i); |
| | | const cell = worksheet.getCell(2, i); |
| | | cell.style = headerStyle; |
| | | } |
| | | |
| | | worksheet.getCell(2, 1).value = ""; |
| | | worksheet.getCell(2, 2).value = "åºé¢ç
åº"; |
| | | worksheet.getCell(2, 3).value = "ç§å®¤"; |
| | | worksheet.getCell(2, 4).value = "åºé¢äººæ¬¡"; |
| | | worksheet.getCell(2, 5).value = "æ éé访人次"; |
| | | worksheet.getCell(2, 6).value = "åºé访人次"; |
| | | |
| | | // 注æï¼ç±äºå¢å äºæåçåï¼åå¹¶åæ°è¦å¢å |
| | | worksheet.mergeCells(2, 7, 2, 16); // ä»7åå¹¶å°16ï¼åæ¥æ¯7-14ï¼ |
| | | worksheet.getCell(2, 7).value = "忬¡ä¸ç
é访"; |
| | | worksheet.getCell(2, 7).style = headerStyle; |
| | | |
| | | worksheet.getRow(2).height = 28; |
| | | worksheet.getRow(3).height = 25; |
| | | |
| | | // æ°æ®è¡ |
| | | this.tableData.forEach((item, rowIndex) => { |
| | | const dataRow = worksheet.addRow( |
| | | [ |
| | | "", |
| | | item.leavehospitaldistrictname || "", |
| | | item.deptname || "", |
| | | item.dischargeCount || 0, |
| | | item.nonFollowUp || 0, |
| | | item.followUpNeeded || 0, |
| | | item.needFollowUpAgain || 0, |
| | | item.pendingFollowUpAgain || 0, |
| | | item.followUpSuccessAgain || 0, |
| | | item.followUpFailAgain || 0, |
| | | // æåç - éè¦å¨æè®¡ç® |
| | | this.calculateSuccessRate( |
| | | item.followUpSuccessAgain, |
| | | item.needFollowUpAgain, |
| | | item.pendingFollowUpAgain |
| | | ), |
| | | // item.followUpRateAgain || "0%", // é访ç |
| | | item.manualAgain || 0, |
| | | item.voiceAgain || 0, |
| | | item.smsAgain || 0, |
| | | item.weChatAgain || 0, |
| | | ], |
| | | rowIndex + 4 |
| | | ); |
| | | |
| | | dataRow.eachCell((cell) => { |
| | | cell.style = cellStyle; |
| | | }); |
| | | dataRow.height = 24; |
| | | }); |
| | | |
| | | // åè®¡è¡ |
| | | const summaries = this.getExportSummaries(); |
| | | const summaryRow = worksheet.addRow(summaries); |
| | | summaryRow.eachCell((cell, colNumber) => { |
| | | cell.style = summaryStyle; |
| | | if (colNumber === 1) { |
| | | cell.value = "å计"; |
| | | } |
| | | }); |
| | | summaryRow.height = 28; |
| | | |
| | | // å宽 |
| | | // ä¿®æ£å宽 |
| | | worksheet.columns = [ |
| | | { width: 8 }, |
| | | { width: 20 }, |
| | | { width: 15 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 10 }, |
| | | { width: 10 }, |
| | | { width: 10 }, |
| | | { width: 10 }, |
| | | { width: 12 }, // æåç |
| | | // { width: 12 }, // é访ç |
| | | { width: 8 }, // 人工 |
| | | { width: 8 }, // è¯é³ |
| | | { width: 8 }, // çä¿¡ |
| | | { width: 8 }, // 微信 |
| | | ]; |
| | | }, |
| | | |
| | | getExportSummaries() { |
| | | const summaries = [ |
| | | "å计", |
| | | "/", |
| | | "/", |
| | | 0, // 3: dischargeCount |
| | | 0, // 4: nonFollowUp |
| | | 0, // 5: followUpNeeded |
| | | 0, // 6: needFollowUpAgain |
| | | 0, // 7: pendingFollowUpAgain |
| | | 0, // 8: followUpSuccessAgain |
| | | 0, // 9: followUpFailAgain |
| | | "0%", // 10: æåç |
| | | // "0%", // 11: é访ç |
| | | 0, // 12: manualAgain |
| | | 0, // 13: voiceAgain |
| | | 0, // 14: smsAgain |
| | | 0, // 15: weChatAgain |
| | | ]; |
| | | |
| | | this.tableData.forEach((item) => { |
| | | summaries[3] += Number(item.dischargeCount) || 0; |
| | | summaries[4] += Number(item.nonFollowUp) || 0; |
| | | summaries[5] += Number(item.followUpNeeded) || 0; |
| | | summaries[6] += Number(item.needFollowUpAgain) || 0; |
| | | summaries[7] += Number(item.pendingFollowUpAgain) || 0; |
| | | summaries[8] += Number(item.followUpSuccessAgain) || 0; |
| | | summaries[9] += Number(item.followUpFailAgain) || 0; |
| | | summaries[12] += Number(item.manualAgain) || 0; |
| | | summaries[13] += Number(item.voiceAgain) || 0; |
| | | summaries[14] += Number(item.smsAgain) || 0; |
| | | summaries[15] += Number(item.weChatAgain) || 0; |
| | | }); |
| | | |
| | | // æåçè®¡ç® |
| | | const totalSuccess = summaries[8]; // followUpSuccessAgainçæ»å |
| | | const totalNeed = summaries[6]; // needFollowUpAgainçæ»å |
| | | const totalPending = summaries[7]; // pendingFollowUpAgainçæ»å |
| | | const denominator = totalNeed - totalPending; |
| | | |
| | | if (denominator > 0) { |
| | | summaries[10] = ((totalSuccess / denominator) * 100).toFixed(2) + "%"; |
| | | } else { |
| | | summaries[10] = "0.00%"; |
| | | } |
| | | |
| | | // é访çè®¡ç® |
| | | // const followUpRateAgainValues = this.tableData |
| | | // .map((item) => this.extractPercentageValue(item.followUpRateAgain)) |
| | | // .filter((value) => value !== null); |
| | | |
| | | // if (followUpRateAgainValues.length > 0) { |
| | | // const avgFollowUpRateAgain = |
| | | // followUpRateAgainValues.reduce((sum, val) => sum + val, 0) / |
| | | // followUpRateAgainValues.length; |
| | | // summaries[11] = (avgFollowUpRateAgain * 100).toFixed(2) + "%"; |
| | | // } |
| | | |
| | | // æ ¼å¼åæ°å |
| | | [3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15].forEach((index) => { |
| | | summaries[index] = this.formatNumber(summaries[index]); |
| | | }); |
| | | |
| | | return summaries; |
| | | }, |
| | | |
| | | extractPercentageValue(value) { |
| | | if (!value) return null; |
| | | if (typeof value === "string" && value.includes("%")) { |
| | | const num = parseFloat(value.replace("%", "")); |
| | | return isNaN(num) ? null : num / 100; |
| | | } |
| | | const num = parseFloat(value); |
| | | return isNaN(num) ? null : num; |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .second-follow-up { |
| | | .your-table-container { |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .button-zx { |
| | | color: rgb(70, 204, 238); |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-dialog |
| | | title="æªåæ¶é访æ£è
æå¡" |
| | | :visible.sync="visible" |
| | | v-loading="loading" |
| | | width="70%" |
| | | :close-on-click-modal="false" |
| | | @close="handleClose" |
| | | > |
| | | <div class="timely-rate-dialog"> |
| | | <div class="examine-jic"> |
| | | <div class="jic-value"> |
| | | <el-row :gutter="20"> |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryForm" |
| | | size="small" |
| | | :inline="true" |
| | | label-width="98px" |
| | | class="search-form" |
| | | > |
| | | <el-form-item label="æ£è
ï¼"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="请è¾å
¥æ£è
å§å" |
| | | @keyup.enter.native="handleSearch" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ£è
è¯æï¼"> |
| | | <el-input |
| | | v-model="queryParams.leavediagname" |
| | | placeholder="请è¾å
¥æ£è
è¯æ" |
| | | @keyup.enter.native="handleSearch" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | size="medium" |
| | | @click="handleSearch" |
| | | > |
| | | æç´¢ |
| | | </el-button> |
| | | <el-button |
| | | icon="el-icon-refresh" |
| | | size="medium" |
| | | @click="resetQuery" |
| | | > |
| | | éç½® |
| | | </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <!-- æ£è
å表 --> |
| | | <el-table :data="data" style="width: 100%" v-loading="loading"> |
| | | <el-table-column prop="sendname" align="center" label="å§å" width="100" /> |
| | | <el-table-column prop="taskName" align="center" width="200" show-overflow-tooltip label="ä»»å¡åç§°" /> |
| | | |
| | | <el-table-column prop="sendstate" align="center" width="200" label="ä»»å¡ç¶æ"> |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | :type="getStateTagType(scope.row.sendstate)" |
| | | :disable-transitions="false" |
| | | > |
| | | {{ getStateText(scope.row.sendstate) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column prop="visitTime" align="center" label="åºé访æ¶é´" width="200" show-overflow-tooltip /> |
| | | <el-table-column prop="finishtime" align="center" label="éè®¿å®ææ¶é´" width="200" show-overflow-tooltip /> |
| | | |
| | | <el-table-column label="åºé¢æ¥æ" width="200" align="center" key="endtime" prop="endtime"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.endtime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="责任æ¤å£«" width="120" align="center" key="nurseName" prop="nurseName" /> |
| | | <el-table-column label="主治å»ç" width="120" align="center" key="drname" prop="drname" /> |
| | | |
| | | <el-table-column label="ç»æç¶æ" align="center" key="excep" prop="excep" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_yujing" :value="scope.row.excep" /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="å¤çæè§" align="center" key="suggest" prop="suggest" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_suggest" :value="scope.row.suggest" /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column prop="templatename" align="center" label="æå¡æ¨¡æ¿" width="200" show-overflow-tooltip /> |
| | | <el-table-column prop="remark" align="center" label="æå¡è®°å½" width="200" show-overflow-tooltip /> |
| | | |
| | | <el-table-column prop="bankcardno" align="center" label="å¼å«ç¶æ" width="210" /> |
| | | |
| | | <el-table-column label="æä½" fixed="right" align="center" width="200" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="medium" type="text" @click="handleDetailsGo(scope.row)"> |
| | | <span class="button-zx"> |
| | | <i class="el-icon-s-order"></i>æ¥ç |
| | | </span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-row> |
| | | |
| | | <!-- å页 --> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="handlePagination" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | export default { |
| | | name: 'TimelyRateDialog', |
| | | |
| | | dicts: ['sys_yujing', 'sys_suggest'], |
| | | props: { |
| | | visible: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | loading: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | data: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | total: { |
| | | type: Number, |
| | | default: 0 |
| | | }, |
| | | queryParams: { |
| | | type: Object, |
| | | default: () => ({ |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | }) |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | localQueryParams: { ...this.queryParams } |
| | | } |
| | | }, |
| | | watch: { |
| | | queryParams: { |
| | | deep: true, |
| | | handler(newParams) { |
| | | this.localQueryParams = { ...newParams } |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.localQueryParams = { ...this.queryParams } |
| | | }, |
| | | methods: { |
| | | handleSearch() { |
| | | this.$emit('search', this.localQueryParams) |
| | | }, |
| | | |
| | | resetQuery() { |
| | | this.localQueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | name: '', |
| | | leavediagname: '' |
| | | } |
| | | this.$emit('search', this.localQueryParams) |
| | | }, |
| | | |
| | | handlePagination(pagination) { |
| | | this.localQueryParams.pageNum = pagination.page |
| | | this.localQueryParams.pageSize = pagination.limit |
| | | console.log(pagination,'pagination'); |
| | | console.log(this.localQueryParams,'this.localQueryParams'); |
| | | |
| | | this.$emit('search', this.localQueryParams) |
| | | }, |
| | | |
| | | getStateTagType(state) { |
| | | const stateMap = { |
| | | 1: 'primary', |
| | | 2: 'primary', |
| | | 3: 'success', |
| | | 4: 'info', |
| | | 5: 'danger', |
| | | 6: 'success' |
| | | } |
| | | return stateMap[state] || 'info' |
| | | }, |
| | | |
| | | getStateText(state) { |
| | | const stateTextMap = { |
| | | 1: '表åå·²é¢å', |
| | | 2: 'å¾
é访', |
| | | 3: '表åå·²åé', |
| | | 4: '䏿§è¡', |
| | | 5: 'åé失败', |
| | | 6: '已宿' |
| | | } |
| | | return stateTextMap[state] || 'æªç¥ç¶æ' |
| | | }, |
| | | |
| | | formatTime(time) { |
| | | if (!time) return '' |
| | | return this.parseTime(time) |
| | | }, |
| | | |
| | | handleDetailsGo(row) { |
| | | this.$emit('details-go', row) |
| | | }, |
| | | |
| | | handleClose() { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .timely-rate-dialog { |
| | | .search-form { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .button-zx { |
| | | color: rgb(70, 204, 238); |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // å
¨å±æ ·å¼ |
| | | .follow-up-statistics, |
| | | .first-follow-up, |
| | | .second-follow-up, |
| | | .continued-care { |
| | | .your-table-container { |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .button-zx { |
| | | color: rgb(70, 204, 238); |
| | | } |
| | | |
| | | // ç¾ååè®¡è¡æ ·å¼ |
| | | ::v-deep .el-table__footer { |
| | | .el-table__cell { |
| | | background-color: #f5f7fa; |
| | | font-weight: 600; |
| | | color: #409eff; |
| | | |
| | | .cell { |
| | | font-weight: 600; |
| | | color: #409eff; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // å
é¨è¡¨æ ¼åè®¡è¡æ ·å¼ |
| | | ::v-deep .inner-table .el-table__footer { |
| | | .el-table__cell { |
| | | background-color: #ecf5ff; |
| | | font-weight: 500; |
| | | color: #67c23a; |
| | | |
| | | .cell { |
| | | font-weight: 500; |
| | | color: #67c23a; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // ç¾åæ¯åæ®µç¹æ®æ ·å¼ |
| | | ::v-deep .el-table__footer .el-table__cell[data-field="followUpRate"] .cell, |
| | | ::v-deep .el-table__footer .el-table__cell[data-field="rate"] .cell, |
| | | ::v-deep .el-table__footer .el-table__cell[data-field="followUpRateAgain"] .cell, |
| | | ::v-deep .el-table__footer .el-table__cell[data-field="completionRate"] .cell { |
| | | color: #e6a23c !important; |
| | | font-weight: 700 !important; |
| | | } |
| | | |
| | | // å
å±å»çè¡¨æ ¼æ ·å¼ |
| | | .inner-table { |
| | | ::v-deep .el-table__header-wrapper { |
| | | background-color: #f0f7ff !important; |
| | | |
| | | th { |
| | | background-color: #f0f7ff !important; |
| | | } |
| | | } |
| | | |
| | | ::v-deep .el-table__body-wrapper { |
| | | tr { |
| | | background-color: #f9fbfe !important; |
| | | |
| | | &:hover { |
| | | background-color: #e6f1ff !important; |
| | | } |
| | | } |
| | | } |
| | | |
| | | ::v-deep .el-table--border { |
| | | border-color: #d9e8ff !important; |
| | | |
| | | td, th { |
| | | border-color: #d9e8ff !important; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* ä½¿è¡ææåæé */ |
| | | ::v-deep .el-table__row { |
| | | cursor: pointer; |
| | | } |
| | | |
| | | /* å±å¼è¡æ ·å¼ */ |
| | | ::v-deep .el-table__expanded-cell { |
| | | padding: 10px 0 !important; |
| | | background: #f8f8f8; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="follow-up-statistics"> |
| | | <!-- æç´¢è¡¨ååºå --> |
| | | <div class="search-section"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryForm" |
| | | size="small" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | label-width="98px" |
| | | > |
| | | <el-form-item label="ç»è®¡ç±»å" prop="userName"> |
| | | <el-select |
| | | v-model="queryParams.statisticaltype" |
| | | placeholder="è¯·éæ©ç»è®¡ç±»å" |
| | | > |
| | | <el-option |
| | | v-for="item in Statisticallist" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-select |
| | | style="margin-left: 10px" |
| | | v-if="queryParams.statisticaltype == 1" |
| | | v-model="queryParams.leavehospitaldistrictcodes" |
| | | size="medium" |
| | | multiple |
| | | filterable |
| | | placeholder="è¯·éæ©ç
åº" |
| | | > |
| | | <el-option |
| | | v-for="item in flatArrayhospit" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-select |
| | | v-else-if="queryParams.statisticaltype == 2" |
| | | v-model="queryParams.deptcodes" |
| | | size="medium" |
| | | multiple |
| | | filterable |
| | | placeholder="è¯·éæ©ç§å®¤" |
| | | > |
| | | <el-option |
| | | v-for="item in flatArraydept" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-select |
| | | v-model="queryParams.diagTypes" |
| | | v-else-if="queryParams.statisticaltype == 3" |
| | | filterable |
| | | remote |
| | | allow-create |
| | | default-first-option |
| | | placeholder="è¯·éæ©/æ¥è¯¢" |
| | | multiple |
| | | :remote-method="remoteSearch" |
| | | :loading="loading" |
| | | @visible-change="handleVisibleChange" |
| | | @focus="handleFocus" |
| | | > |
| | | <el-option |
| | | v-for="item in donorchargeList" |
| | | :key="item.icdid" |
| | | :label="item.icdname" |
| | | :value="item.icdid" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸ç
ä»»å¡" prop="userName"> |
| | | <el-select |
| | | v-model="queryParams.taskNames" |
| | | multiple |
| | | placeholder="è¯·éæ©" |
| | | > |
| | | <el-option |
| | | v-for="item in taskList" |
| | | :key="item.taskName" |
| | | :label="item.taskName" |
| | | :value="item.taskName" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label-width="200" label="åºé访æ¶é´èå´" prop="userName"> |
| | | <el-date-picker |
| | | v-model="queryParams.dateRange" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | type="daterange" |
| | | unlink-panels |
| | | range-separator="è³" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | :default-time="['00:00:00', '23:59:59']" |
| | | :picker-options="pickerOptions" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | size="medium" |
| | | @click="handleQuery" |
| | | >æç´¢</el-button |
| | | > |
| | | <el-button icon="el-icon-refresh" size="medium" @click="resetQuery" |
| | | >éç½®</el-button |
| | | > |
| | | </el-form-item> |
| | | |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | size="medium" |
| | | @click="handleExport" |
| | | >导åº</el-button |
| | | > |
| | | <!-- <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-data-line" |
| | | size="medium" |
| | | @click="showChartDialog" |
| | | >ç»è®¡è¶å¿å¾</el-button |
| | | > --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <!-- Tab忢åºå --> |
| | | <div class="tab-section"> |
| | | <el-tabs v-model="activeTab" @tab-click="handleTabClick"> |
| | | <el-tab-pane label="馿¬¡é访" name="first"> |
| | | <FirstFollowUp |
| | | ref="firstFollowUp" |
| | | :query-params="queryParams" |
| | | :flat-array-hospit="flatArrayhospit" |
| | | :flat-array-dept="flatArraydept" |
| | | :options="options" |
| | | :orgname="orgname" |
| | | @view-details="viewDetails" |
| | | @see-details="Seedetails" |
| | | /> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane label="忬¡é访" name="second"> |
| | | <SecondFollowUp |
| | | ref="secondFollowUp" |
| | | :query-params="queryParams" |
| | | :flat-array-hospit="flatArrayhospit" |
| | | :flat-array-dept="flatArraydept" |
| | | :options="options" |
| | | :orgname="orgname" |
| | | @view-details="viewDetails" |
| | | /> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import FirstFollowUp from "./components/FirstFollowUp.vue"; |
| | | import SecondFollowUp from "./components/SecondFollowUp.vue"; |
| | | import ContinuedCare from "./components/ContinuedCare.vue"; |
| | | import ChartDialog from "./components/ChartDialog.vue"; |
| | | import DetailDialog from "./components/DetailDialog.vue"; |
| | | import TimelyRateDialog from "./components/TimelyRateDialog.vue"; |
| | | |
| | | import { |
| | | getSfStatisticsHyperlink, |
| | | getTasklist, |
| | | getillnesslist, |
| | | } from "@/api/AiCentre/index"; |
| | | |
| | | export default { |
| | | name: "FollowUpStatistics", |
| | | components: { |
| | | FirstFollowUp, |
| | | SecondFollowUp, |
| | | ContinuedCare, |
| | | ChartDialog, |
| | | DetailDialog, |
| | | TimelyRateDialog, |
| | | }, |
| | | data() { |
| | | return { |
| | | activeTab: "first", |
| | | orgname: localStorage.getItem("orgname") || "", |
| | | Statisticallist: [ |
| | | { label: "ç
åºç»è®¡", value: 1 }, |
| | | { label: "ç§å®¤ç»è®¡", value: 2 }, |
| | | { label: "ç
ç§ç»è®¡", value: 3 }, |
| | | ], |
| | | options: this.$store.getters.tasktypes, |
| | | queryParams: { |
| | | serviceType: [13], |
| | | statisticaltype: 3, |
| | | dateRange: this.getLastMonthRange(), |
| | | leavehospitaldistrictcodes: ["all"], |
| | | deptcodes: [], |
| | | diagTypes: [], |
| | | }, |
| | | pickerOptions: { |
| | | shortcuts: [ |
| | | { |
| | | text: "æè¿ä¸å¨", |
| | | onClick(picker) { |
| | | const end = new Date(); |
| | | const start = new Date(); |
| | | start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); |
| | | picker.$emit("pick", [start, end]); |
| | | }, |
| | | }, |
| | | { |
| | | text: "æè¿ä¸ä¸ªæ", |
| | | onClick(picker) { |
| | | const end = new Date(); |
| | | const start = new Date(); |
| | | start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); |
| | | picker.$emit("pick", [start, end]); |
| | | }, |
| | | }, |
| | | { |
| | | text: "æè¿ä¸ä¸ªæ", |
| | | onClick(picker) { |
| | | const end = new Date(); |
| | | const start = new Date(); |
| | | start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); |
| | | picker.$emit("pick", [start, end]); |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | flatArrayhospit: [], |
| | | flatArraydept: [], |
| | | allDeptCodes: [], |
| | | allWardCodes: [], |
| | | donorchargeList: [], //ç
ç§éå |
| | | taskList: [], |
| | | showSearch: true, |
| | | loading: false, |
| | | searchTimeout: null, |
| | | hasSearched: false, // æ è®°æ¯å¦å·²è¿è¡è¿æç´¢ |
| | | // å¼¹çªç¸å
³ç¶æ |
| | | chartDialogVisible: false, |
| | | chartData: [], |
| | | infotitleVisible: false, |
| | | SeedetailsVisible: false, |
| | | searchName: "", |
| | | infotitle: "", |
| | | infotitlelist: [], |
| | | patienttotal: 0, |
| | | logsheetlist: [], |
| | | Seedloading: false, |
| | | patientqueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | }, |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getDeptTree(); |
| | | this.loadCurrentTabData(); |
| | | }, |
| | | methods: { |
| | | // åç±»åå表 |
| | | getDeptTree() { |
| | | // ç§å®¤å表 |
| | | this.flatArraydept = this.$store.getters.belongDepts.map((dept) => { |
| | | return { |
| | | label: dept.deptName, |
| | | value: dept.deptCode, |
| | | }; |
| | | }); |
| | | this.allDeptCodes = this.$store.getters.belongDepts.map( |
| | | (dept) => dept.deptCode |
| | | ); |
| | | |
| | | // ç
åºå表 |
| | | this.flatArrayhospit = this.$store.getters.belongWards.map((ward) => { |
| | | return { |
| | | label: ward.districtName, |
| | | value: ward.districtCode, |
| | | }; |
| | | }); |
| | | this.allWardCodes = this.$store.getters.belongWards.map( |
| | | (ward) => ward.districtCode |
| | | ); |
| | | // ç¾ç
|
| | | getillnesslist({ pageNum: 1, pageSize: 100 }).then((res) => { |
| | | this.donorchargeList = res.rows; |
| | | }); |
| | | // ä¸ç
ä»»å¡ |
| | | getTasklist({ pageNum: 1, pageSize: 50, serviceType: 13, type: 2 }).then( |
| | | (response) => { |
| | | this.taskList = response.rows; |
| | | } |
| | | ); |
| | | this.flatArraydept.push({ label: "å
¨é¨", value: "all" }); |
| | | this.flatArrayhospit.push({ label: "å
¨é¨", value: "all" }); |
| | | }, |
| | | // è¿ç¨æç´¢æ¹æ³ |
| | | remoteSearch(query) { |
| | | if (this.searchTimeout) { |
| | | clearTimeout(this.searchTimeout); |
| | | } |
| | | |
| | | this.loading = true; |
| | | |
| | | // 鲿å¤çï¼300msåæ§è¡æç´¢ |
| | | this.searchTimeout = setTimeout(() => { |
| | | this.performSearch(query); |
| | | }, 300); |
| | | }, |
| | | // æ§è¡æç´¢ |
| | | performSearch(query) { |
| | | if (!query) { |
| | | // 妿æç´¢å
å®¹ä¸ºç©ºï¼æ¾ç¤ºæææ°æ® |
| | | this.loadInitialData(); |
| | | this.loading = false; |
| | | this.hasSearched = true; |
| | | return; |
| | | } |
| | | |
| | | const params = { |
| | | pageNum: 1, |
| | | pageSize: 100, |
| | | icdname: query, // å设å¯ä»¥æ ¹æ®icdnameæç´¢ |
| | | }; |
| | | |
| | | getillnesslist(params) |
| | | .then((res) => { |
| | | this.donorchargeList = res.rows || []; |
| | | this.loading = false; |
| | | this.hasSearched = true; |
| | | }) |
| | | .catch(() => { |
| | | this.loading = false; |
| | | this.hasSearched = true; |
| | | }); |
| | | }, |
| | | // ä¸ææ¡æ¾ç¤º/éèæ¶çå¤ç |
| | | handleVisibleChange(visible) { |
| | | if (visible && !this.hasSearched) { |
| | | // 馿¬¡å±å¼æ¶å è½½æ°æ® |
| | | this.loadInitialData(); |
| | | } |
| | | }, |
| | | |
| | | // è·åç¦ç¹æ¶çå¤ç |
| | | handleFocus() { |
| | | if (this.donorchargeList.length === 0 && !this.hasSearched) { |
| | | this.loadInitialData(); |
| | | } |
| | | }, |
| | | |
| | | // æ·»å è·åæè¿ä¸ä¸ªææ¶é´èå´çæ¹æ³ |
| | | getLastMonthRange() { |
| | | const end = new Date(); |
| | | const start = new Date(); |
| | | start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); |
| | | |
| | | // æ ¼å¼å为 yyyy-MM-dd HH:mm:ss |
| | | const formatDate = (date) => { |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, "0"); |
| | | const day = String(date.getDate()).padStart(2, "0"); |
| | | return `${year}-${month}-${day} 00:00:00`; |
| | | }; |
| | | |
| | | const formatEndDate = (date) => { |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, "0"); |
| | | const day = String(date.getDate()).padStart(2, "0"); |
| | | return `${year}-${month}-${day} 23:59:59`; |
| | | }; |
| | | |
| | | return [formatDate(start), formatEndDate(end)]; |
| | | }, |
| | | handleTabClick(tab) { |
| | | this.activeTab = tab.name; |
| | | this.loadCurrentTabData(); |
| | | }, |
| | | |
| | | loadCurrentTabData() { |
| | | switch (this.activeTab) { |
| | | case "first": |
| | | this.$refs.firstFollowUp.loadData(); |
| | | break; |
| | | case "second": |
| | | this.$refs.secondFollowUp.loadData(); |
| | | break; |
| | | case "continued": |
| | | this.$refs.continuedCare.loadData(); |
| | | break; |
| | | } |
| | | }, |
| | | |
| | | handleQuery() { |
| | | this.queryParams.startTime = this.parseTime( |
| | | this.queryParams.dateRange[0] |
| | | ); |
| | | this.queryParams.endTime = this.parseTime(this.queryParams.dateRange[1]); |
| | | |
| | | if (this.queryParams.statisticaltype == 1) { |
| | | this.queryParams.deptcodes = []; |
| | | } else if (this.queryParams.statisticaltype == 2) { |
| | | this.queryParams.leavehospitaldistrictcodes = []; |
| | | } |
| | | |
| | | this.loadCurrentTabData(); |
| | | }, |
| | | |
| | | resetQuery() { |
| | | this.queryParams.dateRange = []; |
| | | this.queryParams.leavehospitaldistrictcodes = []; |
| | | this.handleQuery(); |
| | | }, |
| | | |
| | | async handleExport() { |
| | | switch (this.activeTab) { |
| | | case "first": |
| | | await this.$refs.firstFollowUp.exportTable(); |
| | | break; |
| | | case "second": |
| | | await this.$refs.secondFollowUp.exportTable(); |
| | | break; |
| | | case "continued": |
| | | await this.$refs.continuedCare.exportTable(); |
| | | break; |
| | | } |
| | | }, |
| | | |
| | | showChartDialog() { |
| | | this.chartData = this.getCurrentTabData(); |
| | | this.chartDialogVisible = true; |
| | | }, |
| | | |
| | | getCurrentTabData() { |
| | | switch (this.activeTab) { |
| | | case "first": |
| | | return this.$refs.firstFollowUp.tableData; |
| | | case "second": |
| | | return this.$refs.secondFollowUp.tableData; |
| | | case "continued": |
| | | return this.$refs.continuedCare.tableData; |
| | | default: |
| | | return []; |
| | | } |
| | | }, |
| | | |
| | | viewDetails(row, infoKey, title, type) { |
| | | this.infotitle = title; |
| | | |
| | | let obj = { |
| | | hyperLinkInfoType: infoKey, |
| | | leavehospitaldistrictcodes: this.queryParams.leavehospitaldistrictcodes, |
| | | serviceType: this.queryParams.serviceType, |
| | | }; |
| | | if (type == 1) { |
| | | obj.drcode = row.drcode; |
| | | } |
| | | if (this.queryParams.statisticaltype == 1) { |
| | | obj.leavehospitaldistrictcodes = [row.leavehospitaldistrictcode]; |
| | | obj.deptcodes = []; |
| | | } else { |
| | | obj.deptcodes = [row.deptcode]; |
| | | obj.leavehospitaldistrictcodes = []; |
| | | } |
| | | obj.endTime = this.queryParams.endTime; |
| | | obj.startTime = this.queryParams.startTime; |
| | | obj.statisticaltype = this.queryParams.statisticaltype; |
| | | |
| | | getSfStatisticsHyperlink(obj).then((response) => { |
| | | this.infotitlelist = response.data; |
| | | }); |
| | | |
| | | this.infotitleVisible = true; |
| | | }, |
| | | |
| | | Seedetails(row) { |
| | | this.SeedetailsVisible = true; |
| | | this.Seedloading = true; |
| | | |
| | | this.$refs.firstFollowUp |
| | | .selectTimelyRate(row, this.queryParams) |
| | | .then((response) => { |
| | | this.logsheetlist = response.data.detail; |
| | | this.patienttotal = response.data.total; |
| | | this.Seedloading = false; |
| | | }); |
| | | }, |
| | | |
| | | Seedetailstion() { |
| | | console.log(this.patientqueryParams); |
| | | |
| | | this.$refs.firstFollowUp |
| | | .selectTimelyRates(this.patientqueryParams) |
| | | .then((response) => { |
| | | this.logsheetlist = response.data.detail; |
| | | this.patienttotal = response.data.total; |
| | | }); |
| | | }, |
| | | |
| | | SeedetailsgGo(row) { |
| | | this.SeedetailsVisible = false; |
| | | let type = ""; |
| | | if (row.preachformson && row.preachformson.includes("3")) { |
| | | type = 1; |
| | | } |
| | | setTimeout(() => { |
| | | this.$router.push({ |
| | | path: "/followvisit/record/detailpage/", |
| | | query: { |
| | | taskid: row.taskid, |
| | | patid: row.patid, |
| | | id: row.id, |
| | | Voicetype: type, |
| | | }, |
| | | }); |
| | | }, 300); |
| | | }, |
| | | |
| | | handleSearch() { |
| | | // æç´¢é»è¾ |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .follow-up-statistics { |
| | | padding: 20px; |
| | | background: #ffff; |
| | | border: 1px solid #dcdfe6; |
| | | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | |
| | | .search-section { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .tab-section { |
| | | ::v-deep .el-tabs__header { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | ::v-deep .el-tabs__item { |
| | | font-size: 16px; |
| | | padding: 0 20px; |
| | | height: 40px; |
| | | line-height: 40px; |
| | | } |
| | | |
| | | ::v-deep .el-tabs__active-bar { |
| | | height: 3px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | :row-data="currentRow" |
| | | :topicList="topiclist" |
| | | :query-params="queryParams" |
| | | :topType="2" |
| | | @close="topicVisible = false" |
| | | /> |
| | | </el-dialog> |
| | |
| | | <script> |
| | | import ExcelJS from "exceljs"; |
| | | import { saveAs } from "file-saver"; |
| | | |
| | | export default { |
| | | name: "TopicDialog", |
| | | props: { |
| | |
| | | type: Object, |
| | | default: () => ({}), |
| | | }, |
| | | topType: { |
| | | type: String, |
| | | }, |
| | | topicList: { |
| | | type: [Array, Object], |
| | | default: () => ({}), |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | processedTopicList: [], // å¤çåçæ°æ® |
| | | processedTopicList: [], |
| | | orgname: "", // æ°å¢ï¼å»é¢åç§° |
| | | }; |
| | | }, |
| | | computed: { |
| | | configTitle() { |
| | | // ä»ç¶çº§ queryParams ä¸è¯»å |
| | | const key = this.queryParams?.configKey; |
| | | return key === "returnVisitCount" ? "å¤è¯éç¥" : "满æåº¦"; |
| | | }, |
| | | }, |
| | | created() { |
| | | // è·åå»é¢åç§° |
| | | this.orgname = localStorage.getItem("orgname") || ""; |
| | | }, |
| | | watch: { |
| | | // çå¬ç¶ç»ä»¶ä¼ éçæ°æ®åå |
| | | topicList: { |
| | | immediate: true, |
| | | handler(newVal) { |
| | | console.log("TopicDialogæ¥æ¶å°ç¶ç»ä»¶æ°æ®:", newVal); |
| | | this.processTopicList(newVal); |
| | | }, |
| | | }, |
| | | }, |
| | | mounted() { |
| | | console.log("TopicDialog mounted, props:", this.$props); |
| | | }, |
| | | methods: { |
| | | // å¤çtopicListæ°æ® |
| | | processTopicList(data) { |
| | | console.log("å¼å§å¤çæ°æ®:", data); |
| | | |
| | | if (!data || typeof data !== "object") { |
| | | this.processedTopicList = []; |
| | | return; |
| | | } |
| | | |
| | | // å°å¯¹è±¡è½¬æ¢ä¸ºæ°ç» |
| | | const result = []; |
| | | |
| | | Object.keys(data).forEach((key) => { |
| | | const item = data[key]; |
| | | if (item && item.scriptContent) { |
| | | // æ·±æ·è´itemï¼é¿å
ä¿®æ¹åæ°æ® |
| | | const processedItem = JSON.parse(JSON.stringify(item)); |
| | | |
| | | // è¿æ»¤detailsï¼åªä¿çæéé¡¹ææ¬ç |
| | | if (processedItem.details && Array.isArray(processedItem.details)) { |
| | | processedItem.details = processedItem.details.filter( |
| | | (detail) => detail && detail.optionText |
| | | ); |
| | | } |
| | | |
| | | result.push(processedItem); |
| | | } |
| | | }); |
| | | |
| | | console.log("å¤çåçæ°æ®:", result); |
| | | this.processedTopicList = result; |
| | | }, |
| | | /** 导åºé¢ç®æç» */ |
| | | |
| | | // æ ¼å¼åæ¥æèå´å符串ï¼ä¸ä¸»é¡µé¢ä¸è´ï¼ |
| | | formatDateRangeForExport() { |
| | | let dateRangeString = ""; |
| | | let sheetNameSuffix = ""; |
| | | const isLishuiHospital = this.orgname == "丽水å¸ä¸å»é¢"; |
| | | |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const startDateStr = this.queryParams.dateRange[0]; |
| | | const endDateStr = this.queryParams.dateRange[1]; |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼åªæ¾ç¤ºå¹´æ |
| | | const formatMonthOnly = (dateStr) => { |
| | | const date = new Date(dateStr); |
| | | const year = date.getFullYear(); |
| | | const month = date.getMonth() + 1; |
| | | return `${year}å¹´${month}æ`; |
| | | }; |
| | | const startDateFormatted = formatMonthOnly(startDateStr); |
| | | const endDateFormatted = formatMonthOnly(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºå¹´ææ¥ |
| | | const formatDateForDisplay = (dateStr) => { |
| | | return dateStr.split(" ")[0]; // 妿å
嫿¶é´é¨åï¼åªåæ¥æ |
| | | }; |
| | | const startDateFormatted = formatDateForDisplay(startDateStr); |
| | | const endDateFormatted = formatDateForDisplay(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } |
| | | } else { |
| | | const now = new Date(); |
| | | const currentMonth = now.getMonth() + 1; |
| | | const currentYear = now.getFullYear(); |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼æ¾ç¤ºå¹´æ |
| | | dateRangeString = `${currentYear}å¹´${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentYear}å¹´${currentMonth}æ`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºæä»½ |
| | | dateRangeString = `${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentMonth}æ`; |
| | | } |
| | | } |
| | | |
| | | return { dateRangeString, sheetNameSuffix }; |
| | | }, |
| | | |
| | | // 导åºé¢ç®æç» |
| | | async exportTopicDetail() { |
| | | if (!this.processedTopicList.length) { |
| | | this.$message.warning("ææ æ°æ®å¯å¯¼åº"); |
| | | return; |
| | | } |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const sheetName = `${ |
| | | this.rowData.leavehospitaldistrictname || this.rowData.deptname |
| | | }${this.configTitle}æç»`; |
| | | const worksheet = workbook.addWorksheet(sheetName); |
| | | try { |
| | | // è·åæ ¼å¼ååçæ¥æèå´ |
| | | const { dateRangeString, sheetNameSuffix } = |
| | | this.formatDateRangeForExport(); |
| | | |
| | | /* ---------- æ ·å¼ ---------- */ |
| | | const titleStyle = { |
| | | font: { name: "微软é
é»", size: 14, bold: true }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | }; |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const sheetName = `${ |
| | | this.rowData.leavehospitaldistrictname || this.rowData.deptname |
| | | }${this.configTitle}æç»_${sheetNameSuffix}`; |
| | | const worksheet = workbook.addWorksheet(sheetName); |
| | | |
| | | const subtitleStyle = { |
| | | font: { name: "微软é
é»", size: 12, bold: true }, |
| | | alignment: { horizontal: "left", vertical: "middle" }, |
| | | }; |
| | | // æ ·å¼å®ä¹ï¼ä¿æä¸åï¼ |
| | | const titleStyle = { |
| | | font: { name: "微软é
é»", size: 14, bold: true }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFF5F7FA" }, |
| | | }, |
| | | }; |
| | | |
| | | const headerStyle = { |
| | | font: { name: "微软é
é»", size: 11, bold: true }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFEBEEF5" }, |
| | | }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | border: { |
| | | top: { style: "thin" }, |
| | | left: { style: "thin" }, |
| | | bottom: { style: "thin" }, |
| | | right: { style: "thin" }, |
| | | }, |
| | | }; |
| | | const subtitleStyle = { |
| | | font: { name: "微软é
é»", size: 12, bold: true }, |
| | | alignment: { horizontal: "left", vertical: "middle" }, |
| | | }; |
| | | |
| | | const cellStyle = { |
| | | font: { name: "å®ä½", size: 10 }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | border: { |
| | | top: { style: "thin" }, |
| | | left: { style: "thin" }, |
| | | bottom: { style: "thin" }, |
| | | right: { style: "thin" }, |
| | | }, |
| | | }; |
| | | const headerStyle = { |
| | | font: { name: "微软é
é»", size: 11, bold: true }, |
| | | fill: { |
| | | type: "pattern", |
| | | pattern: "solid", |
| | | fgColor: { argb: "FFEBEEF5" }, |
| | | }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | border: { |
| | | top: { style: "thin" }, |
| | | left: { style: "thin" }, |
| | | bottom: { style: "thin" }, |
| | | right: { style: "thin" }, |
| | | }, |
| | | }; |
| | | |
| | | /* ---------- æ é¢åº ---------- */ |
| | | worksheet.mergeCells(1, 1, 1, 4); |
| | | worksheet.getCell(1, 1).value = `${this.configTitle}é¢ç®æç»`; |
| | | worksheet.getCell(1, 1).style = titleStyle; |
| | | const cellStyle = { |
| | | font: { name: "å®ä½", size: 10 }, |
| | | alignment: { horizontal: "center", vertical: "middle" }, |
| | | border: { |
| | | top: { style: "thin" }, |
| | | left: { style: "thin" }, |
| | | bottom: { style: "thin" }, |
| | | right: { style: "thin" }, |
| | | }, |
| | | }; |
| | | |
| | | worksheet.mergeCells(2, 1, 2, 4); |
| | | worksheet.getCell(2, 1).value = `ç»è®¡å¯¹è±¡ï¼${ |
| | | this.rowData.leavehospitaldistrictname || this.rowData.deptname |
| | | }`; |
| | | worksheet.getCell(2, 1).style = subtitleStyle; |
| | | // æ é¢åº |
| | | worksheet.mergeCells(1, 1, 1, 4); |
| | | worksheet.getCell( |
| | | 1, |
| | | 1 |
| | | ).value = `${this.configTitle}é¢ç®æç»ï¼${dateRangeString}ï¼`; |
| | | worksheet.getCell(1, 1).style = titleStyle; |
| | | |
| | | worksheet.mergeCells(3, 1, 3, 4); |
| | | worksheet.getCell(3, 1).value = `ç»è®¡æ¶é´ï¼${ |
| | | this.queryParams.dateRange?.[0] || "-" |
| | | } è³ ${this.queryParams.dateRange?.[1] || "-"}`; |
| | | worksheet.getCell(3, 1).style = subtitleStyle; |
| | | worksheet.mergeCells(2, 1, 2, 4); |
| | | worksheet.getCell(2, 1).value = `ç»è®¡å¯¹è±¡ï¼${ |
| | | this.rowData.leavehospitaldistrictname || this.rowData.deptname |
| | | }`; |
| | | worksheet.getCell(2, 1).style = subtitleStyle; |
| | | |
| | | let currentRow = 5; |
| | | let currentRow = 4; |
| | | |
| | | /* ---------- éé¢åå
¥ ---------- */ |
| | | this.processedTopicList.forEach((item, index) => { |
| | | worksheet.mergeCells(currentRow, 1, currentRow, 4); |
| | | worksheet.getCell(currentRow, 1).value = `第${index + 1}é¢ï¼${ |
| | | item.scriptContent |
| | | } [${item.scriptType == 1 ? "åéé¢" : "å¤éé¢"}]`; |
| | | worksheet.getCell(currentRow, 1).style = subtitleStyle; |
| | | currentRow++; |
| | | // éé¢åå
¥ |
| | | this.processedTopicList.forEach((item, index) => { |
| | | worksheet.mergeCells(currentRow, 1, currentRow, 4); |
| | | worksheet.getCell(currentRow, 1).value = `第${index + 1}é¢ï¼${ |
| | | item.scriptContent |
| | | } [${item.scriptType == 1 ? "åéé¢" : "å¤éé¢"}]`; |
| | | worksheet.getCell(currentRow, 1).style = subtitleStyle; |
| | | currentRow++; |
| | | |
| | | const headerRow = worksheet.addRow([ |
| | | "é®é¢é项", |
| | | "éæ©äººæ°", |
| | | "å æ¯", |
| | | "", |
| | | ]); |
| | | headerRow.eachCell((cell) => { |
| | | cell.style = headerStyle; |
| | | }); |
| | | currentRow++; |
| | | |
| | | item.details.forEach((detail) => { |
| | | const percent = |
| | | detail.chosenPercentage != null |
| | | ? (Number(detail.chosenPercentage) * 100).toFixed(2) + "%" |
| | | : "-"; |
| | | |
| | | const row = worksheet.addRow([ |
| | | detail.optionText, |
| | | detail.chosenQuantity || 0, |
| | | percent, |
| | | const headerRow = worksheet.addRow([ |
| | | "é®é¢é项", |
| | | "éæ©äººæ°", |
| | | "å æ¯", |
| | | "", |
| | | ]); |
| | | row.eachCell((cell) => { |
| | | cell.style = cellStyle; |
| | | headerRow.eachCell((cell) => { |
| | | cell.style = headerStyle; |
| | | }); |
| | | currentRow++; |
| | | |
| | | item.details.forEach((detail) => { |
| | | const percent = |
| | | detail.chosenPercentage != null |
| | | ? (Number(detail.chosenPercentage) * 100).toFixed(2) + "%" |
| | | : "-"; |
| | | |
| | | const row = worksheet.addRow([ |
| | | detail.optionText, |
| | | detail.chosenQuantity || 0, |
| | | percent, |
| | | "", |
| | | ]); |
| | | row.eachCell((cell) => { |
| | | cell.style = cellStyle; |
| | | }); |
| | | currentRow++; |
| | | }); |
| | | |
| | | currentRow++; |
| | | }); |
| | | |
| | | currentRow++; |
| | | }); |
| | | // 设置å宽 |
| | | worksheet.columns = [ |
| | | { width: 40 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 10 }, |
| | | ]; |
| | | |
| | | /* ---------- å宽 ---------- */ |
| | | worksheet.columns = [ |
| | | { width: 40 }, |
| | | { width: 12 }, |
| | | { width: 12 }, |
| | | { width: 10 }, |
| | | ]; |
| | | // çææä»¶åï¼ä¸ä¸»é¡µé¢ä¿æä¸è´ï¼ |
| | | const fileName = `${ |
| | | this.rowData.leavehospitaldistrictname || this.rowData.deptname |
| | | }${this.configTitle}æç»_${dateRangeString}.xlsx`; |
| | | |
| | | /* ---------- å¯¼åº ---------- */ |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | const fileName = |
| | | `${this.rowData.leavehospitaldistrictname || this.rowData.deptname}` + |
| | | `${this.configTitle}æç»_` + |
| | | `${this.queryParams.dateRange?.[0]}è³${this.queryParams.dateRange?.[1]}.xlsx`; |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | saveAs( |
| | | new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }), |
| | | fileName |
| | | ); |
| | | |
| | | saveAs( |
| | | new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }), |
| | | fileName |
| | | ); |
| | | |
| | | this.$message.success("å¯¼åºæå"); |
| | | this.$message.success("å¯¼åºæå"); |
| | | } catch (error) { |
| | | console.error("导åºå¤±è´¥:", error); |
| | | this.$message.error(`导åºå¤±è´¥: ${error.message}`); |
| | | } |
| | | }, |
| | | // æ ¼å¼åç¾åæ¯ |
| | | |
| | | formatPercent(value) { |
| | | if (value === null || value === undefined) return "-"; |
| | | const num = parseFloat(value); |
| | | if (isNaN(num)) return "-"; |
| | | return `${num.toFixed(2)}%`; // 注æï¼ä½ çæ°æ®ä¸ç¾åæ¯å·²ç»æ¯0-100çå½¢å¼ |
| | | return `${num.toFixed(2)}%`; |
| | | }, |
| | | |
| | | // å
³éå¯¹è¯æ¡ |
| | | handleClose() { |
| | | this.$emit("close"); |
| | | }, |
| | |
| | | overflow: hidden; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .dialog-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | |
| | | color: #303133; |
| | | } |
| | | } |
| | | |
| | | ::v-deep .el-table th { |
| | | background-color: #f1f5f9; |
| | | color: #333; |
| | |
| | | :row-data="currentRow" |
| | | :topicList="topiclist" |
| | | :query-params="queryParams" |
| | | :topType="1" |
| | | @close="topicVisible = false" |
| | | /> |
| | | </el-dialog> |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.jgvalue = response.rows[0].jg; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | this.topqueryParams.startSendDateTime = this.dateRangefs[0]; |
| | | this.topqueryParams.endSendDateTime = this.dateRangefs[1]; |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | |
| | | // font-size: 24px; |
| | | // } |
| | | // } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | </style> |
| | |
| | | placeholder="请è¾å
¥è¯æåç§°" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | cardlist: [ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | value: 0, |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "éé访", |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "åé失败", |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | |
| | | // 表ååæ° |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | |
| | | type="text" |
| | | @click=" |
| | | gettoken360( |
| | | scope.row.sfzh, |
| | | scope.row.drcode, |
| | | scope.row.drname, |
| | | scope.row.patid |
| | | ) |
| | | scope.row.sfzh, |
| | | scope.row.drcode, |
| | | scope.row.drname, |
| | | scope.row.patid |
| | | ) |
| | | " |
| | | ><span class="button-textsc">{{ |
| | | scope.row.sendname |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | buidegetTasklist, |
| | | addserviceSubtask, |
| | | query360PatInfo, |
| | | query360PatInfonh |
| | | query360PatInfonh, |
| | | } from "@/api/AiCentre/index"; |
| | | import { alterpatient, particularpatient } from "@/api/patient/homepage"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | loading: false, |
| | | cardlist: [ |
| | | { |
| | | name: "æå¡è·è¸ªæ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | { required: true, message: "è¯·éæ©é访æ¶é´", trigger: "blur" }, |
| | | ], |
| | | }, |
| | | // 级èéæ©å¨ç»å®å¼ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // æå¡ç¶æé项ï¼ä¸çº§åäºçº§å¼ä¸å²çªï¼ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | // 表ååæ° |
| | | form: { |
| | | phonenumber: "", |
| | |
| | | topqueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 2, //0 æå¡æ¶é´(æ£åº) 1 æå¡æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | serviceType: 3, |
| | | searchscope: 3, |
| | |
| | | propss: { multiple: true }, |
| | | options: [], |
| | | |
| | | topicoptions: [ |
| | | topicoptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | this.topqueryParams.searchscope = 3; |
| | | } |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: 2, //0 æå¡æ¶é´(æ£åº) 1 æå¡æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) |
| | | serviceType: 3, |
| | | searchscope: 3, |
| | |
| | | '"çæ°æ®é¡¹ï¼' |
| | | ) |
| | | .then(() => { |
| | | |
| | | getTaskservelist({ |
| | | getTaskservelist({ |
| | | patid: row.patid, |
| | | taskid: row.taskid, |
| | | }).then((res) => { |
| | |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | // é项å使¾å¤§ |
| | | // ::v-deep.el-checkbox-group { |
| | | // span { |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | cardlist: [ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "åé失败", |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
åé", |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "å·²åéæªé¢å", |
| | | // value: 0, |
| | | // }, |
| | | ], |
| | | |
| | | // 表ååæ° |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "å»¶ç»æ¤çæå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | topqueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 2, //0 å»¶ç»æ¤çæ¶é´(æ£åº) 1 å»¶ç»æ¤çæ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | serviceType: 3, |
| | | searchscope: 3, |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | console.log("2"); |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: 2, //0 å»¶ç»æ¤çæ¶é´(æ£åº) 1 å»¶ç»æ¤çæ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) |
| | | serviceType: 3, |
| | | searchscope: 3, |
| | |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | // é项å使¾å¤§ |
| | | // ::v-deep.el-checkbox-group { |
| | | // span { |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> --> |
| | | |
| | | <el-table-column |
| | | label="éè®¿ç¶æ" |
| | | align="center" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | <span>{{ formatTime(scope.row.visitTime) }}</span> |
| | | </template></el-table-column |
| | | > |
| | | |
| | | <el-table-column |
| | | label="主治å»ç" |
| | | width="120" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | import { alterpatient, particularpatient } from "@/api/patient/homepage"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect, StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | }, |
| | | value: [], |
| | | list: [], |
| | | |
| | | // 级èéæ©å¨ç»å®å¼ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // æå¡ç¶æé项ï¼ä¸çº§åäºçº§å¼ä¸å²çªï¼ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | sourcetype: [ |
| | | { |
| | | value: 1, |
| | |
| | | loading: false, |
| | | cardlist: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | topqueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView:1, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | serviceType: 2, |
| | | searchscope: 3, |
| | |
| | | this.topqueryParams.deptOrDistrict = 1; |
| | | } |
| | | |
| | | |
| | | if (!this.followupAuthority()) { |
| | | this.$message.warning("æªé
ç½®ç§å®¤/ç
åºç¸å
³æéä¸å¯æ¥è¯¢"); |
| | | return Promise.reject(new Error("æ æéæ¥è¯¢")); |
| | |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | this.topqueryParams.searchscope = 3; |
| | | } |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.dateRangefs = []; |
| | | this.serviceStatusValue = 10; |
| | | |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView:1, |
| | | sort: 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) |
| | | serviceType: 2, |
| | | searchscope: 3, |
| | |
| | | '"çæ°æ®é¡¹ï¼' |
| | | ) |
| | | .then(() => { |
| | | |
| | | getTaskservelist({ |
| | | getTaskservelist({ |
| | | patid: row.patid, |
| | | taskid: row.taskid, |
| | | }).then((res) => { |
| | |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | // é项å使¾å¤§ |
| | | // ::v-deep.el-checkbox-group { |
| | | // span { |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | v-if="orgname != '丽水å¸ä¸å»é¢'" |
| | | label="ç»ç®¡å»ç" |
| | | label="èç³»çµè¯" |
| | | width="200" |
| | | align="center" |
| | | key="managementDoctor" |
| | | prop="managementDoctor" |
| | | width="120" |
| | | key="phone" |
| | | prop="phone" |
| | | /> |
| | | <el-table-column |
| | | label="åºé¢å¤©æ°" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="èç³»çµè¯" |
| | | width="200" |
| | | align="center" |
| | | key="phone" |
| | | prop="phone" |
| | | /> |
| | | <el-table-column |
| | | label="身份è¯å·ç " |
| | | width="200" |
| | | align="center" |
| | | key="sfzh" |
| | | prop="sfzh" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="èç³»çµè¯" |
| | | width="200" |
| | | v-if="orgname != '丽水å¸ä¸å»é¢'" |
| | | label="ç»ç®¡å»ç" |
| | | align="center" |
| | | key="phone" |
| | | prop="phone" |
| | | key="managementDoctor" |
| | | prop="managementDoctor" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="责任æ¤å£«" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | cardlist: [ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | // 级èéæ©å¨ç»å®å¼ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // æå¡ç¶æé项ï¼ä¸çº§åäºçº§å¼ä¸å²çªï¼ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "çç«åå¾·ç¿ èé¢åº" ? null : 2, |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | serviceType: 18, |
| | | searchscope: 3, |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + |
| | | Number(response.rows[0].ysf) + |
| | | Number(response.rows[0].fssb); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.jgvalue = response.rows[0].jg; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.total = response.total; |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | this.topqueryParams.searchscope = 3; |
| | | } |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) |
| | | serviceType: 18, |
| | | searchscope: 3, |
| | |
| | | border-color: #d8b4fe; |
| | | opacity: 1; /* ä¿æç¦ç¨ç¶æéæåº¦ */ |
| | | } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | // é项å使¾å¤§ |
| | | // ::v-deep.el-checkbox-group { |
| | | // span { |
| | |
| | | </el-form> |
| | | <el-divider></el-divider> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | | <div class="document"> |
| | |
| | | |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | import { alterpatient, particularpatient } from "@/api/patient/homepage"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | type: [], |
| | | }, |
| | | zcform: {}, |
| | | // 级èéæ©å¨ç»å®å¼ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // æå¡ç¶æé项ï¼ä¸çº§åäºçº§å¼ä¸å²çªï¼ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | dynamicTags: ["é项ä¸", "é项äº", "é项ä¸"], //é项 |
| | | inputVisible: false, |
| | | Labelchange: false, |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | this.topqueryParams.startSendDateTime = this.dateRangefs[0]; |
| | | this.topqueryParams.endSendDateTime = this.dateRangefs[1]; |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | |
| | | // font-size: 24px; |
| | | // } |
| | | // } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5" v-if="orgname == 'çç«åå¾·ç¿ èé¢åº'"> |
| | | <div class="jgleftvlue"> |
| | | <el-card shadow="hover "> |
| | | <div style="padding: 8px"> |
| | | <span>è¦å</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ jgvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | popper-class="statistics-tooltip" |
| | | > |
| | | <div v-if="scope.row.sendstateView == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | v-if="orgname != '丽水å¸ä¸å»é¢'" |
| | | label="ç»ç®¡å»ç" |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="managementDoctor" |
| | | prop="managementDoctor" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | /> |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢å¤©æ°" |
| | | width="120" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="身份è¯å·ç " |
| | | width="200" |
| | | align="center" |
| | | key="sfzh" |
| | | prop="sfzh" |
| | | /> |
| | | <el-table-column |
| | | label="èç³»çµè¯" |
| | | width="200" |
| | | align="center" |
| | |
| | | prop="phone" |
| | | /> |
| | | <el-table-column |
| | | label="身份è¯å·ç " |
| | | width="200" |
| | | align="center" |
| | | key="sfzh" |
| | | prop="sfzh" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="责任æ¤å£«" |
| | | width="120" |
| | | align="center" |
| | | key="nurseName" |
| | | prop="nurseName" |
| | | /> |
| | | |
| | | <el-table-column |
| | | v-if="orgname != '丽水å¸ä¸å»é¢'" |
| | | label="ç»ç®¡å»ç" |
| | | align="center" |
| | | key="managementDoctor" |
| | | prop="managementDoctor" |
| | | width="120" |
| | | /> |
| | | <!-- <el-table-column |
| | | label="ç
åå·" |
| | | align="center" |
| | |
| | | </span> |
| | | </template> |
| | | </el-table-column> --> |
| | | |
| | | <el-table-column |
| | | label="ä»»å¡ç»æè¯´æ" |
| | | width="220" |
| | |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | } from "@/api/AiCentre/index"; |
| | | import { alterpatient, particularpatient } from "@/api/patient/homepage"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect, StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | // 满æåº¦è°æ¥æ°æ® |
| | | scoreDialogVisible: false, |
| | | selectedRows: [], |
| | | |
| | | // 级èéæ©å¨ç»å®å¼ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // æå¡ç¶æé项ï¼ä¸çº§åäºçº§å¼ä¸å²çªï¼ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | value: [], |
| | | list: [], |
| | | |
| | |
| | | loading: false, |
| | | cardlist: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | topqueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "çç«åå¾·ç¿ èé¢åº" ? null : 2, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | sendstateView: 1, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 1, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | serviceType: 2, |
| | | sendstate: null, |
| | | searchscope: 3, |
| | | visitCount: 1, |
| | | scopetype: [], |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + |
| | | Number(response.rows[0].ysf) + |
| | | Number(response.rows[0].fssb); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.jgvalue = response.rows[0].jg; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.total = response.total; |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | this.topqueryParams.searchscope = 3; |
| | | } |
| | | }, |
| | | // æå¡ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.dateRangefs = []; |
| | | this.serviceStatusValue = 10; |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | |
| | | border-color: #d8b4fe; |
| | | opacity: 1; /* ä¿æç¦ç¨ç¶æéæåº¦ */ |
| | | } |
| | | .statistics-tooltip { |
| | | background: #ffffff !important; |
| | | color: #1976d2 !important; |
| | | border: 1px solid #bbdefb !important; |
| | | border-radius: 8px !important; |
| | | padding: 10px 14px !important; |
| | | font-size: 13px !important; |
| | | line-height: 1.6 !important; |
| | | box-shadow: 0 4px 12px rgba(25, 118, 210, 0.15) !important; |
| | | } |
| | | .statistics-tooltip .popper__arrow { |
| | | border-bottom-color: #bbdefb !important; |
| | | } |
| | | |
| | | .statistics-tooltip .popper__arrow::after { |
| | | border-bottom-color: #ffffff !important; |
| | | } |
| | | // é项å使¾å¤§ |
| | | // ::v-deep.el-checkbox-group { |
| | | // span { |
| | | // font-size: 24px; |
| | | // } |
| | | // } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | import { alterpatient, particularpatient } from "@/api/patient/homepage"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "é¨è¯æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | this.topqueryParams.endSendDateTime = this.dateRangefs[1]; |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) |
| | | serviceType: 3, |
| | | searchscope: 3, |
| | |
| | | // font-size: 24px; |
| | | // } |
| | | // } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | width="200" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | loading: false, |
| | | cardlist: [ |
| | | { |
| | | name: "æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | // font-size: 24px; |
| | | // } |
| | | // } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | </style> |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "ææ¯æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "çç«åå¾·ç¿ èé¢åº" ? null : 2, |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 2, //0 ææ¯å®ææ¶é´(æ£åº) 1 ææ¯å®ææ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | serviceType: 19, |
| | | searchscope: 3, |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + |
| | | Number(response.rows[0].ysf) + |
| | | Number(response.rows[0].fssb); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.jgvalue = response.rows[0].jg; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.total = response.total; |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | } |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: 2, //0 ææ¯å®ææ¶é´(æ£åº) 1 ææ¯å®ææ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) |
| | | serviceType: 19, |
| | | searchscope: 3, |
| | |
| | | // font-size: 24px; |
| | | // } |
| | | // } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <!-- <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> --> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "é¨è¯æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | // { |
| | | // name: "åé失败", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å·²é访", |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | ], |
| | | |
| | | // 表ååæ° |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | // this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | | let code = value.slice(-1)[0]; |
| | | this.topqueryParams.leavehospitaldistrictcodes = []; |
| | | this.topqueryParams.leaveldeptcodes = []; |
| | | if (type == 1) { |
| | | this.topqueryParams.leaveldeptcodes.push(code); |
| | | this.topqueryParams.leavehospitaldistrictcodes = []; |
| | | this.topqueryParams.searchscope = 1; |
| | | } else if (type == 2) { |
| | | this.topqueryParams.leavehospitaldistrictcodes.push(code); |
| | | this.topqueryParams.leaveldeptcodes = []; |
| | | this.topqueryParams.searchscope = 2; |
| | | } else { |
| | | this.topqueryParams.searchscope = 3; |
| | | } |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | |
| | | show-overflow-tooltip |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="orgname == 'åå大å¦éå±ç¬¬ä¸å»é¢'" |
| | | label="å
¥é¢æ¥æ" |
| | | width="200" |
| | | align="center" |
| | | key="starttime" |
| | | prop="starttime" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.starttime) }}</span> |
| | | </template></el-table-column |
| | | > |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | |
| | | <span>{{ formatTime(scope.row.endtime) }}</span> |
| | | </template></el-table-column |
| | | > |
| | | |
| | | <el-table-column |
| | | label="责任æ¤å£«" |
| | | width="120" |
| | |
| | | <!-- é访å
容 --> |
| | | <div class="call-action"> |
| | | <div class="call-container"> |
| | | <template-selector |
| | | <div |
| | | style="display: flex" |
| | | v-if="orgname == 'åå大å¦éå±ç¬¬ä¸å»é¢' && !Voicetype" |
| | | v-model="form.templateid" |
| | | :templateName="form.templatename" |
| | | :service-type="form.serviceType" |
| | | :is-editable="form.sendState !== 2" |
| | | @select="handleTemplateSelect" |
| | | @clear="handleTemplateClear" |
| | | /> |
| | | > |
| | | <template-selector |
| | | v-model="form.templateid" |
| | | :templateName="form.templatename" |
| | | :service-type="form.serviceType" |
| | | :is-editable="form.sendState !== 2" |
| | | @select="handleTemplateSelect" |
| | | @clear="handleTemplateClear" |
| | | /> |
| | | <div |
| | | v-if="defaultKey" |
| | | style=" |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | height: 100%; |
| | | padding: 33px 0 0 50px; |
| | | " |
| | | > |
| | | <el-button type="success" round @click="handleConfirmReplace"> |
| | | é»è®¤å¡«å
|
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="headline"> |
| | | <div>é访å
容</div> |
| | | </div> |
| | |
| | | updateTemplate, |
| | | query360PatInfonh, |
| | | sendMsg, |
| | | getconfigKey, |
| | | } from "@/api/AiCentre/index"; |
| | | import { |
| | | messagelistpatient, |
| | |
| | | return { |
| | | visitAgain: 1, |
| | | userid: "", |
| | | defaultKey: false, //æ¯å¦å¯é»è®¤å¡«æ¥ |
| | | currentPhoneNumber: "", |
| | | callType: "", // ç¨äºåºåæ¯åªä¸ªçµè¯ |
| | | isSipRegistering: true, // SIP注åç¶æ |
| | |
| | | // ç¦ç¨ä»å¤©åä¹åçæ¥æ |
| | | return time.getTime() < Date.now() - 24 * 60 * 60 * 1000; |
| | | }, |
| | | // shortcuts: [ |
| | | // { |
| | | // text: "ä¸å¤©å", |
| | | // onClick(picker) { |
| | | // const date = new Date(); |
| | | // date.setTime(date.getTime() + 3600 * 1000 * 24 * 7); |
| | | // picker.$emit("pick", date); |
| | | // }, |
| | | // }, |
| | | // { |
| | | // text: "15天å", |
| | | // onClick(picker) { |
| | | // const date = new Date(); |
| | | // date.setTime(date.getTime() + 3600 * 1000 * 24 * 15); |
| | | // picker.$emit("pick", date); |
| | | // }, |
| | | // }, |
| | | // { |
| | | // text: "ä¸ä¸ªæå", |
| | | // onClick(picker) { |
| | | // const date = new Date(); |
| | | // date.setTime(date.getTime() + 3600 * 1000 * 24 * 30); |
| | | // picker.$emit("pick", date); |
| | | // }, |
| | | // }, |
| | | // { |
| | | // text: "ä¸ä¸ªæå", |
| | | // onClick(picker) { |
| | | // const date = new Date(); |
| | | // date.setTime(date.getTime() + 3600 * 1000 * 24 * 90); |
| | | // picker.$emit("pick", date); |
| | | // }, |
| | | // }, |
| | | // { |
| | | // text: "å
个æå", |
| | | // onClick(picker) { |
| | | // const date = new Date(); |
| | | // date.setTime(date.getTime() + 3600 * 1000 * 24 * 180); |
| | | // picker.$emit("pick", date); |
| | | // }, |
| | | // }, |
| | | // { |
| | | // text: "ä¸å¹´å", |
| | | // onClick(picker) { |
| | | // const date = new Date(); |
| | | // date.setTime(date.getTime() + 3600 * 1000 * 24 * 365); |
| | | // picker.$emit("pick", date); |
| | | // }, |
| | | // }, |
| | | // ], |
| | | }, |
| | | options: [ |
| | | { |
| | |
| | | ]; |
| | | } |
| | | this.getTaskservelist(); |
| | | this.getconfigKey(); |
| | | }, |
| | | mounted() { |
| | | // çå¬åç»ä»¶çsipStatus屿§åå |
| | |
| | | return "scriptTopic-dev"; // æ£å¸¸ - é»è®¤æ ·å¼ |
| | | } |
| | | }, |
| | | getconfigKey() { |
| | | getconfigKey("default.value.icon").then((res) => { |
| | | |
| | | if (res.msg) { |
| | | if ( |
| | | this.getAssignArr(res.msg).includes(this.$store.state.user.name) || |
| | | this.$store.state.user.name == "admin" |
| | | ) { |
| | | this.defaultKey = true; |
| | | } else { |
| | | this.defaultKey = false; |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | getAssignArr(rule) { |
| | | let arr = []; |
| | | let assiginArr = rule.split(","); |
| | | for (let i = 0; i < assiginArr.length; i++) { |
| | | arr[i] = assiginArr[i]; |
| | | } |
| | | arr.sort(this.compare); |
| | | return arr; |
| | | }, |
| | | // è·åéé¡¹æ ·å¼ç±» |
| | | getOptionClass(items) { |
| | | if (items.isabnormal == 1) { |
| | |
| | | handleTemplateClear() { |
| | | console.log("æ¸
é¤äºæ¨¡æ¿éæ©"); |
| | | }, |
| | | handleConfirmReplace() { |
| | | // éåææé¢ç®ï¼tableDatatopï¼ |
| | | this.tableDatatop.forEach((item) => { |
| | | // åªå¤çæªå¡«æ¥çé¢ç®ï¼scriptResult 为空æç©ºæ°ç»ï¼ |
| | | if ( |
| | | !item.scriptResult || |
| | | (Array.isArray(item.scriptResult) && item.scriptResult.length === 0) |
| | | ) { |
| | | // æ¥æ¾éé¡¹ä¸ defaultValue 为 2 çé项 |
| | | const defaultOption = item.svyTaskTemplateTargetoptions?.find( |
| | | (opt) => opt.defaultValue == 2 |
| | | ); |
| | | console.log(item); |
| | | |
| | | if (defaultOption) { |
| | | // æ ¹æ®é¢ç®ç±»åèµå¼ |
| | | if (item.scriptType === "1") { |
| | | // åéé¢ï¼ç´æ¥èµå¼ä¸º optioncontent å符串 |
| | | item.scriptResult = defaultOption.optioncontent; |
| | | } else if (item.scriptType === "2") { |
| | | // å¤éé¢ï¼èµå¼ä¸ºå
å« optioncontent çæ°ç» |
| | | item.scriptResult = [defaultOption.optioncontent]; |
| | | } else if (item.scriptType === "4") { |
| | | // 填空é¢ï¼ä¸è¬æ²¡æé项ï¼ä½å¦ææåèµå¼ |
| | | item.scriptResult = defaultOption.optioncontent; |
| | | } |
| | | |
| | | // 触åè§å¾æ´æ°ï¼å 为 Vue å¯è½æ æ³æ£æµå°æ·±å±åµå¥å¯¹è±¡çååï¼ |
| | | this.$forceUpdate(); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | // 使ç¨ç¤ºä¾ |
| | | isValidPhone(phone) { |
| | | return this.validatePhoneNumber(phone).isValid; |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | </el-form> |
| | | <el-divider></el-divider> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | | <div class="document"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | loading: false, |
| | | cardlist: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "éé访", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "åé失败", |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | |
| | | // 表ååæ° |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "éé访", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "åé失败", |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | postData: { |
| | | XiaoXiTou: { |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æåºæ¹å¼" prop="status"> |
| | | <el-select v-model="topqueryParams.sort" placeholder="è¯·éæ©"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | topqueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | serviceType: 13, |
| | | searchscope: 3, |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | console.log("2"); |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) |
| | | serviceType: 13, |
| | | searchscope: 3, |
| | |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | // é项å使¾å¤§ |
| | | // ::v-deep.el-checkbox-group { |
| | | // span { |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¿æ»¤åå "> |
| | | <el-input |
| | | v-model="form.notrequiredreason" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | loading: false, |
| | | cardlist: [ |
| | | { |
| | | name: "æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åé失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | zcrules: { |
| | | date1: [ |
| | |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "çç«åå¾·ç¿ èé¢åº" ? null : 2, |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: localStorage.getItem("orgname") == "丽水å¸ä¸å»é¢" ? 8 : 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) 7åºéè®¿æ¥æ(ååº) åºéè®¿æ¥æ(æ£åº) |
| | | serviceType: 6, |
| | | searchscope: 3, |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sendstateView: 1, |
| | | sendstateView: |
| | | localStorage.getItem("orgname") == "åå大å¦éå±ç¬¬ä¸å»é¢" ? 1 : 2, |
| | | sort: 2, //0 åºé¢æ¶é´(æ£åº) 1 åºé¢æ¶é´(ååº) 2 åéæ¶é´(æ£åº) 3 åéæ¶é´(ååº) |
| | | serviceType: 6, |
| | | searchscope: 3, |
| | |
| | | border-color: #d8b4fe; |
| | | opacity: 1; /* ä¿æç¦ç¨ç¶æéæåº¦ */ |
| | | } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | // é项å使¾å¤§ |
| | | // ::v-deep.el-checkbox-group { |
| | | // span { |
| | |
| | | : "亲ç±çæ£è
-å®¶å±ï¼æä»¬æ¯å»é¢ç廿¤äººåï¼ä¸ºäºæ´å¥½å°äºè§£æ¨çåº·å¤æ
åµï¼è¯·æ¨æ½ä¸ç¹å®è´µæ¶é´ï¼å®æè¿ä»½é访é®å·ã" |
| | | }} |
| | | </div> |
| | | <div v-if="orgname" class="questionnaire-signature">âââ{{ orgname }}</div> |
| | | </div> |
| | | |
| | | <el-divider class="custom-divider"></el-divider> |
| | |
| | | @click.native.prevent=" |
| | | handleRadioToggle( |
| | | item, |
| | | getGlobalIndex(dimension, group, index), |
| | | getGlobalIndex(item.dimension, group, index), |
| | | item.svyTaskTemplateTargetoptions, |
| | | option.optioncontent |
| | | ) |
| | |
| | | :closable="false" |
| | | class="warning-alert" |
| | | ></el-alert> |
| | | </div> |
| | | <div |
| | | v-if="item.showAppendInput || item.answerps" |
| | | class="append-input-container" |
| | | > |
| | | <el-input |
| | | type="textarea" |
| | | :rows="1" |
| | | placeholder="请è¾å
¥å
·ä½ä¿¡æ¯" |
| | | v-model="item.answerps" |
| | | clearable |
| | | ></el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | class="warning-alert" |
| | | ></el-alert> |
| | | </div> |
| | | <div |
| | | v-if="item.showAppendInput || item.answerps" |
| | | class="append-input-container" |
| | | > |
| | | <el-input |
| | | type="textarea" |
| | | :rows="1" |
| | | placeholder="请è¾å
¥å
·ä½ä¿¡æ¯" |
| | | v-model="item.answerps" |
| | | clearable |
| | | ></el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | excep: 0, |
| | | isabnormal: 0, |
| | | taskname: "", |
| | | orgname: "", |
| | | questionList: [], |
| | | param6: null, |
| | | jsy: null, |
| | |
| | | res.data.param3, |
| | | res.data.param5 |
| | | ); |
| | | this.orgname = res.data.orgname; |
| | | |
| | | this.param6 = res.data.param6; |
| | | } |
| | | }); |
| | |
| | | this.questionList[questionIndex].showAppendInput = |
| | | selectedOptionObj.appendflag == 1; |
| | | console.log(this.questionList); |
| | | console.log(selectedOptionObj.appendflag); |
| | | |
| | | // if (!this.questionList[questionIndex].showAppendInput) { |
| | | // this.questionList[questionIndex].answerps = ""; // æ¸
é¤éå ä¿¡æ¯ |
| | |
| | | hiddenByEnd: index == questionIndex + 1 ? false : item.hiddenByEnd, |
| | | })); |
| | | } |
| | | this.$forceUpdate(); |
| | | |
| | | // å¨å¤çå®é¢ç®æ¾ç¤º/éèåï¼å¼ºå¶æ´æ°è§å¾ä»¥ç¡®ä¿åºå·æ£ç¡® |
| | | this.$nextTick(() => { |
| | |
| | | } |
| | | |
| | | .questionnaire-description { |
| | | font-size: 18px; |
| | | font-size: 16px; |
| | | color: #5a6c84; |
| | | line-height: 1.6; |
| | | max-width: 700px; |
| | | margin: 0 auto; |
| | | line-height: 1.8; |
| | | max-width: 720px; |
| | | margin: 0; |
| | | padding: 0 16px; |
| | | text-align: justify; /* 两端对é½ï¼æ´ç¾è§ */ |
| | | text-indent: 2em; /* é¦è¡ç¼©è¿ */ |
| | | } |
| | | |
| | | .questionnaire-signature { |
| | | font-size: 15px; |
| | | color: #8a9bb5; /* æ¯æ£æé¢è²ç¨æµ
ï¼ä½ç°é屿 */ |
| | | text-align: right; /* å³å¯¹é½ */ |
| | | max-width: 720px; |
| | | margin: 8px 0 0 auto; /* ä¸è¾¹è·8pxï¼å³è¾¹é é½ */ |
| | | padding: 0 16px; |
| | | letter-spacing: 1px; /* åé´è·ç¨å®½ï¼æ´æè½æ¬¾æ */ |
| | | } |
| | | .custom-divider { |
| | | margin: 25px 0; |
| | | background-color: #eaeef2; |
| | |
| | | } |
| | | |
| | | .question-stem { |
| | | display: flex; |
| | | align-items: flex-start; |
| | | display: grid; |
| | | grid-template-columns: auto 1fr auto; /* é¢å·èªéåºï¼ææ¬å 满å©ä½ç©ºé´ï¼é¢åæ ç¾èªéåº */ |
| | | gap: 3px; |
| | | align-items: center; |
| | | margin-bottom: 20px; |
| | | font-size: 18px; |
| | | } |
| | |
| | | .question-number { |
| | | font-weight: 600; |
| | | color: #175997; |
| | | margin-right: 8px; |
| | | min-width: 24px; |
| | | min-width: 16px; |
| | | } |
| | | |
| | | .question-text { |
| | | flex: 1; |
| | | line-height: 1.5; |
| | | color: #2c3e50; |
| | | font-weight: 500; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .question-type-tag { |
| | | color: #3ba2f7; |
| | | font-size: 14px; |
| | | margin-left: 10px; |
| | | font-weight: 500; |
| | | text-align: right; |
| | | } |
| | | |
| | | .question-options { |
| | |
| | | .question-warning { |
| | | margin-top: 15px; |
| | | } |
| | | |
| | | .append-input-container { |
| | | margin-top: 15px; |
| | | padding: 10px; |
| | | background-color: #f5f7fa; |
| | | border-radius: 4px; |
| | | border: 1px solid #dcdfe6; |
| | | } |
| | | .warning-alert { |
| | | :deep(.el-alert__title) { |
| | | font-size: 15px; |
| | |
| | | |
| | | cardlist: [ |
| | | { |
| | | name: "æ£è
æ»æ°", |
| | | value: 123, |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¨é¢æ£è
", |
| | | value: 23, |
| | | router: "/patient/inpatient", |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "åºé¢æ£è
", |
| | | value: 41, |
| | | router: "/patient/hospital", |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "ç¦»ä¸æ£è
", |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | |
| | | type="textarea" |
| | | placeholder="请è¾å
¥è¿æ»¤åå " |
| | | ></el-input> |
| | | <!-- æéæå --> |
| | | <div class="filter-warning"> |
| | | <i class="el-icon-warning-outline"></i> |
| | | 该åè½éç¨äºæ»äº¡ãåå
¥å»é¢é»ååãæç¡®æç»éè®¿çæ£è
çè¿æ»¤æé¤ï¼è¿æ»¤å该æ£è
ææè¿è¡ä¸ä»»å¡å
¨é¨åæ¢ä¸æ æ³å¹é
æ°çé访任å¡ï¼è¯·è°¨æ
æä½ï¼ |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | height: 50px; |
| | | } |
| | | } |
| | | .filter-warning { |
| | | margin-top: 8px; |
| | | padding: 10px 14px; |
| | | background: #fff7e6; |
| | | border: 1px solid #ffe58f; |
| | | border-radius: 6px; |
| | | color: #d46b08; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | gap: 6px; |
| | | } |
| | | |
| | | .filter-warning .el-icon-warning-outline { |
| | | font-size: 16px; |
| | | color: #faad14; |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | .button-textsc { |
| | | color: #3664d9; |
| | | } |
| | |
| | | align="center" |
| | | key="admitdate" |
| | | prop="admitdate" |
| | | width="160" |
| | | width="140" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.admitdate) }}</span> |
| | |
| | | /> --> |
| | | <el-table-column |
| | | label="ç
æ¡å·" |
| | | width="100" |
| | | align="center" |
| | | key="outhospno" |
| | | prop="outhospno" |
| | |
| | | align="center" |
| | | key="diagname" |
| | | prop="diagname" |
| | | width="190" |
| | | /> |
| | | <!-- <el-table-column |
| | | label="主述" |
| | |
| | | align="center" |
| | | key="deptname" |
| | | prop="deptname" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="æ¥è¯å»ç" |
| | | align="center" |
| | | key="drname" |
| | | prop="drname" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="æ¯å¦åå¨ä»»å¡" |
| | |
| | | label="æä½" |
| | | fixed="right" |
| | | align="center" |
| | | width="160" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template slot-scope="scope"> |
| | |
| | | align="center" |
| | | key="admitdate" |
| | | prop="admitdate" |
| | | width="160" |
| | | width="140" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.admitdate) }}</span> |
| | |
| | | label="æä½" |
| | | fixed="right" |
| | | align="center" |
| | | width="160" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template slot-scope="scope"> |
| | |
| | | align="center" |
| | | key="admitdate" |
| | | prop="admitdate" |
| | | width="160" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.admitdate) }}</span> |
| | |
| | | |
| | | <el-table-column |
| | | label="ç
æ¡å·" |
| | | width="100" |
| | | align="center" |
| | | key="outhospno" |
| | | prop="outhospno" |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <!-- <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> --> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "å¿çµæå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | // { |
| | | // name: "åé失败", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å·²é访", |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | ], |
| | | |
| | | // 表ååæ° |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | // this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | | let code = value.slice(-1)[0]; |
| | | this.topqueryParams.leavehospitaldistrictcodes = []; |
| | | this.topqueryParams.leaveldeptcodes = []; |
| | | if (type == 1) { |
| | | this.topqueryParams.leaveldeptcodes.push(code); |
| | | this.topqueryParams.leavehospitaldistrictcodes = []; |
| | | this.topqueryParams.searchscope = 1; |
| | | } else if (type == 2) { |
| | | this.topqueryParams.leavehospitaldistrictcodes.push(code); |
| | | this.topqueryParams.leaveldeptcodes = []; |
| | | this.topqueryParams.searchscope = 2; |
| | | } else { |
| | | this.topqueryParams.searchscope = 3; |
| | | } |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | |
| | | align="center" |
| | | key="admitdate" |
| | | prop="admitdate" |
| | | width="160" |
| | | width="140" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | if (this.submitLoading) { |
| | | return; |
| | | } |
| | | // ç¬¬äºæ¥ï¼å¼å¯å è½½ç¶æï¼ç¦ç¨æé® |
| | | |
| | | // å¼å¯å è½½ç¶æ |
| | | this.submitLoading = true; |
| | | console.log(this.submitLoading); |
| | | |
| | | try { |
| | | if (this.time4 && this.form.sendType == 3) |
| | | // æ¶é´å¤ç |
| | | if (this.time4 && this.form.sendType == 3) { |
| | | this.form.showTimeMorn = this.time4; |
| | | } |
| | | this.form.sendTimeslot = [ |
| | | { |
| | | begantime: this.time4, |
| | |
| | | xh: 1, |
| | | }, |
| | | ]; |
| | | console.log(1); |
| | | |
| | | // æ ¹æ®åºç¨ç±»åæ¸
çåæ®µ |
| | | if (this.form.appltype == 1) { |
| | | this.leavehospitaldistrictcodes = []; |
| | | this.form.oplevelcode = null; |
| | |
| | | this.illnesscodes = []; |
| | | this.leavehospitaldistrictcodes = []; |
| | | } |
| | | |
| | | // æ ¡éªï¼æå¡ç±»å |
| | | if (this.checkList) { |
| | | this.form.preachform = this.checkList.join(","); |
| | | this.form.preachformList = this.selectedOrder; |
| | | } else { |
| | | this.$modal.msgError("è¯·éæ©æå¡ç±»å"); |
| | | this.submitLoading = false; |
| | | |
| | | return; |
| | | } |
| | | console.log(2); |
| | | |
| | | if ( |
| | | // æ ¡éªï¼ç¾ç
å
³èç§å®¤æç
åº |
| | | if (this.form.appltype == 3) { |
| | | const hasDept = this.diseaseDept?.deptCode; |
| | | const hasWard = this.diseaseWard?.districtCode; |
| | | |
| | | if (!hasDept && !hasWard) { |
| | | this.$modal.msgError("å½åç¾ç
éå
³èç§å®¤æç
åº"); |
| | | this.submitLoading = false; |
| | | return; |
| | | } |
| | | } |
| | | |
| | | // æ ¡éªï¼ä»»å¡å
³èæ¡ä»¶ |
| | | const hasCondition = |
| | | this.deptcodesWards[0] || |
| | | this.leavehospitaldistrictcodes[0] || |
| | | this.diagglist[0] || |
| | | this.form.oplevelcode || |
| | | this.form.longTask == 2 || |
| | | this.serviceType == 3 |
| | | ) { |
| | | } else { |
| | | this.serviceType == 3; |
| | | |
| | | if (!hasCondition) { |
| | | this.$modal.msgError("è¯·éæ©ä»»å¡å
³èæ¡ä»¶"); |
| | | this.submitLoading = false; |
| | | return; |
| | | } |
| | | //æå任塿£è
éå¶ |
| | | // if (!this.form.patTaskRelevances[0] && !this.form.longTask) { |
| | | // this.$modal.msgError("è¯·éæ©ç
人"); |
| | | // return; |
| | | // } |
| | | console.log(3); |
| | | |
| | | // æ ¡éªï¼æ¨¡æ¿ |
| | | if (!this.form.templatename && !this.templateor) { |
| | | this.$modal.msgError("æªéæ©æ¨¡æ¿"); |
| | | this.submitLoading = false; |
| | | |
| | | return; |
| | | } |
| | | |
| | | if ( |
| | | // æ ¡éªï¼æ¶é´ä¿¡æ¯ |
| | | const isValidTime = |
| | | (this.form.sendType == 1 && this.time1) || |
| | | this.form.sendType == 2 |
| | | ) { |
| | | } else if ( |
| | | this.form.sendType == 2 || |
| | | (this.form.sendType == 3 && this.time4) || |
| | | this.form.longTask |
| | | ) { |
| | | } else { |
| | | this.form.longTask; |
| | | |
| | | if (!isValidTime) { |
| | | this.submitLoading = false; |
| | | return this.$modal.msgError("æ¶é´ä¿¡æ¯ç¼ºå¤±"); |
| | | this.$modal.msgError("æ¶é´ä¿¡æ¯ç¼ºå¤±"); |
| | | return; |
| | | } |
| | | |
| | | // å¤çææ¬åæ° |
| | | const filteredArray = this.variableList.filter( |
| | | (item) => |
| | | item.name !== "å§å" && item.name !== "çµè¯" && item.name !== "å°å" |
| | | ); |
| | | this.form.textParam = this.convertFormat2ToFormat1(filteredArray); |
| | | |
| | | // 设置æä½ç±»å |
| | | if (this.form.taskid) { |
| | | this.form.isoperation = 2; |
| | | } else { |
| | | this.form.isoperation = 1; |
| | | } |
| | | |
| | | // 设置类å |
| | | if (!this.form.type) { |
| | | this.form.type = this.$route.query.type; |
| | | } |
| | | console.log(4); |
| | | |
| | | // ç»è£
æäº¤æ°æ® |
| | | this.form.serviceType = this.serviceType; |
| | | this.form.deptcode = this.deptcodesWards.join(","); |
| | | this.form.leavehospitaldistrictcode = |
| | | this.leavehospitaldistrictcodes.join(","); |
| | | // this.form.opcode = this.operationcodes.join(","); |
| | | |
| | | // ç¾ç
å
³èçç§å®¤/ç
åº |
| | | if (this.form.appltype == 3) { |
| | | if (this.diseaseDept) { |
| | | this.form.deptcode = this.diseaseDept.deptCode; |
| | |
| | | } |
| | | } |
| | | |
| | | // è¯æä¿¡æ¯ |
| | | this.form.icd10code = this.diagglist |
| | | .map((item) => item.icdcode) |
| | | .join(","); |
| | | this.form.icd10name = this.diagglist |
| | | .map((item) => item.icdname) |
| | | .join(","); |
| | | Editsingletask(this.form).then((res) => { |
| | | if (res.code == 200) { |
| | | if (this.form.taskid) { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | |
| | | // æäº¤æ¥å£ |
| | | Editsingletask(this.form) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | if (this.form.taskid) { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | } else { |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | } |
| | | this.$router.push({ |
| | | path: "/followvisit/tasklist", |
| | | query: { tasktopic: this.form.serviceType }, |
| | | }); |
| | | } else { |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | // â
æ¥å£è¿åéè¯¯ç æ¶çå¤ç |
| | | this.$modal.msgError(res.msg || "æä½å¤±è´¥"); |
| | | } |
| | | this.$router.push({ |
| | | path: "/followvisit/tasklist", |
| | | query: { tasktopic: this.form.serviceType }, |
| | | }); |
| | | }) |
| | | .catch((error) => { |
| | | // â
æè·æ¥å£è¯·æ±å¼å¸¸ |
| | | console.error("æäº¤å¤±è´¥:", error); |
| | | this.$modal.msgError(error.message || "ç½ç»å¼å¸¸ï¼è¯·ç¨åéè¯"); |
| | | }) |
| | | .finally(() => { |
| | | // â
æ 论æåæå¤±è´¥ï¼æç»é½å
³éå è½½ç¶æ |
| | | this.submitLoading = false; |
| | | } |
| | | }); |
| | | }); |
| | | } catch (error) { |
| | | // â
æè·åæ¥ä»£ç å¼å¸¸ |
| | | console.error("表åæäº¤å¼å¸¸:", error); |
| | | this.$modal.msgError(error.message || "表åæäº¤å¼å¸¸"); |
| | | this.submitLoading = false; |
| | | } finally { |
| | | // ç¬¬åæ¥ï¼æ 论æåæå¤±è´¥ï¼æç»é½å
³éå è½½ç¶æ |
| | | } |
| | | }, |
| | | handleDiseaseDeptChange(dept) { |
| | |
| | | this.form.patTaskRelevances = this.form.patTaskRelevances |
| | | ? this.form.patTaskRelevances |
| | | : []; |
| | | this.diseaseDept = { |
| | | deptCode: this.form.deptcode, |
| | | deptName: this.form.deptname, |
| | | }; |
| | | this.diseaseWard = { |
| | | districtCode: this.form.leavehospitaldistrictcode, |
| | | districtName: this.form.leavehospitaldistrictname, |
| | | }; |
| | | this.overallCase = this.form.patTaskRelevances.concat(); |
| | | this.checkList = this.form.preachform.split(","); |
| | | this.selectedOrder = this.form.preachformList; |
| | |
| | | </el-form> |
| | | <el-divider></el-divider> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | </el-col> --> |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | | <div class="document"> |
| | |
| | | |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | }, |
| | | // ä¿å |
| | | submitForm(type) { |
| | | // 鲿¢éå¤æäº¤ |
| | | if (this.submitLoading) { |
| | | return; |
| | | } |
| | | // ç¬¬äºæ¥ï¼å¼å¯å è½½ç¶æï¼ç¦ç¨æé® |
| | | |
| | | // å¼å¯å è½½ç¶æ |
| | | this.submitLoading = true; |
| | | |
| | | try { |
| | | if (this.templateor && type) this.templateor = false; |
| | | if (this.time4 && this.form.sendType == 3) |
| | | // 模æ¿ç¸å
³å¤ç |
| | | if (this.templateor && type) { |
| | | this.templateor = false; |
| | | } |
| | | |
| | | // æ¶é´å¤ç |
| | | if (this.time4 && this.form.sendType == 3) { |
| | | this.form.showTimeMorn = this.time4; |
| | | } |
| | | this.form.sendTimeslot = [ |
| | | { |
| | | begantime: this.time4, |
| | |
| | | xh: 1, |
| | | }, |
| | | ]; |
| | | |
| | | // æ ¹æ®åºç¨ç±»åæ¸
çåæ®µ |
| | | if (this.form.appltype == 1) { |
| | | this.leavehospitaldistrictcodes = []; |
| | | this.operationcodes = []; |
| | |
| | | this.illnesscodes = []; |
| | | this.leavehospitaldistrictcodes = []; |
| | | } |
| | | |
| | | // ===== è¡¨åæ ¡éª ===== |
| | | |
| | | // 1. æå¡ç±»åæ ¡éª |
| | | if (this.checkList) { |
| | | this.form.preachform = this.checkList.join(",") || []; |
| | | this.form.preachformList = this.selectedOrder || []; |
| | | } else { |
| | | this.$modal.msgError("è¯·éæ©æå¡ç±»å"); |
| | | this.submitLoading = false; |
| | | |
| | | return; |
| | | } |
| | | |
| | | if ( |
| | | // 2. ç¾ç
å
³èç§å®¤æç
åºæ ¡éª |
| | | if (this.form.appltype == 3) { |
| | | const hasDept = this.diseaseDept?.deptCode; |
| | | const hasWard = this.diseaseWard?.districtCode; |
| | | |
| | | if (!hasDept && !hasWard) { |
| | | this.$modal.msgError("å½åç¾ç
éå
³èç§å®¤æç
åº"); |
| | | this.submitLoading = false; |
| | | return; |
| | | } |
| | | } |
| | | |
| | | // 3. ä»»å¡å
³èæ¡ä»¶æ ¡éª |
| | | const hasCondition = |
| | | this.deptcodesWards[0] || |
| | | this.leavehospitaldistrictcodes[0] || |
| | | this.diagglist[0] || |
| | | this.operationcodes[0] || |
| | | this.form.longTask == 2 || |
| | | this.serviceType == 3 |
| | | ) { |
| | | } else { |
| | | this.serviceType == 3; |
| | | |
| | | if (!hasCondition) { |
| | | this.$modal.msgError("è¯·éæ©ä»»å¡å
³èæ¡ä»¶"); |
| | | this.submitLoading = false; |
| | | |
| | | return; |
| | | } |
| | | // if (!this.form.patTaskRelevances[0] && !this.form.longTask) { |
| | | // this.$modal.msgError("è¯·éæ©ç
人"); |
| | | // return; |
| | | // } |
| | | |
| | | // 4. æ¨¡æ¿æ ¡éª |
| | | if (!this.form.templatename && !this.templateor) { |
| | | this.$modal.msgError("æªéæ©æ¨¡æ¿"); |
| | | this.submitLoading = false; |
| | | |
| | | return; |
| | | } |
| | | |
| | | if ( |
| | | // 5. æ¶é´ä¿¡æ¯æ ¡éª |
| | | const isValidTime = |
| | | (this.form.sendType == 1 && this.time1) || |
| | | this.form.sendType == 2 |
| | | ) { |
| | | } else if ( |
| | | this.form.sendType == 2 || |
| | | (this.form.sendType == 3 && this.time4) || |
| | | this.form.longTask |
| | | ) { |
| | | } else { |
| | | this.submitLoading = false; |
| | | this.form.longTask; |
| | | |
| | | return this.$modal.msgError("æ¶é´ä¿¡æ¯ç¼ºå¤±"); |
| | | if (!isValidTime) { |
| | | this.submitLoading = false; |
| | | this.$modal.msgError("æ¶é´ä¿¡æ¯ç¼ºå¤±"); |
| | | return; |
| | | } |
| | | |
| | | // ===== æ°æ®å¤ç ===== |
| | | |
| | | // è¿æ»¤ææ¬åæ° |
| | | const filteredArray = this.variableList.filter( |
| | | (item) => |
| | | item.name !== "å§å" && item.name !== "çµè¯" && item.name !== "å°å" |
| | | ); |
| | | this.form.textParam = this.convertFormat2ToFormat1(filteredArray); |
| | | |
| | | // 设置æä½ç±»å |
| | | if (this.form.taskid) { |
| | | this.form.isoperation = 2; |
| | | } else { |
| | | this.form.isoperation = 1; |
| | | } |
| | | |
| | | // 设置类å |
| | | if (!this.form.type) { |
| | | this.form.type = this.$route.query.type; |
| | | } |
| | | |
| | | // ç¾ç
å
³èçç§å®¤/ç
åº |
| | | if (this.form.appltype == 3) { |
| | | if (this.diseaseDept) { |
| | | this.form.deptcode = this.diseaseDept.deptCode; |
| | |
| | | this.form.leavehospitaldistrictname = this.diseaseWard.districtName; |
| | | } |
| | | } |
| | | |
| | | // ç»è£
æäº¤æ°æ® |
| | | this.form.serviceType = this.serviceType; |
| | | this.form.deptcode = this.deptcodesWards.join(","); |
| | | this.form.leavehospitaldistrictcode = |
| | |
| | | this.form.icd10name = this.diagglist |
| | | .map((item) => item.icdname) |
| | | .join(","); |
| | | Editsingletask(this.form).then((res) => { |
| | | if (res.code == 200) { |
| | | if (this.form.taskid) { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | |
| | | // ===== æäº¤æ¥å£ ===== |
| | | Editsingletask(this.form) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | // â
æå |
| | | if (this.form.taskid) { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | } else { |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | } |
| | | this.submitLoading = false; |
| | | this.$router.push({ |
| | | path: "/followvisit/tasklist", |
| | | query: { tasktopic: this.form.serviceType }, |
| | | }); |
| | | } else { |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | // â
æ¥å£è¿åé误ç |
| | | this.$modal.msgError(res.msg || "æä½å¤±è´¥"); |
| | | this.submitLoading = false; |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | // â
æè·æ¥å£è¯·æ±å¼å¸¸ |
| | | console.error("æäº¤å¤±è´¥:", error); |
| | | this.$modal.msgError(error.message || "ç½ç»å¼å¸¸ï¼è¯·ç¨åéè¯"); |
| | | this.submitLoading = false; |
| | | this.$router.push({ |
| | | path: "/followvisit/tasklist", |
| | | query: { tasktopic: this.form.serviceType }, |
| | | }); |
| | | } |
| | | }); |
| | | }); |
| | | } catch (error) { |
| | | // â
æè·åæ¥ä»£ç å¼å¸¸ |
| | | console.error("表åæäº¤å¼å¸¸:", error); |
| | | this.$modal.msgError(error.message || "表åæäº¤å¼å¸¸"); |
| | | this.submitLoading = false; |
| | | } finally { |
| | | // ç¬¬åæ¥ï¼æ 论æåæå¤±è´¥ï¼æç»é½å
³éå è½½ç¶æ |
| | | } |
| | | }, |
| | | handleDiseaseDeptChange(dept) { |
| | |
| | | let filteredArray = ""; |
| | | if (res.code == 200) { |
| | | this.form = res.data; |
| | | this.diseaseDept = { |
| | | deptCode: this.form.deptcode, |
| | | deptName: this.form.deptname, |
| | | }; |
| | | this.diseaseWard = { |
| | | districtCode: this.form.leavehospitaldistrictcode, |
| | | districtName: this.form.leavehospitaldistrictname, |
| | | }; |
| | | console.log(this.diseaseWard, this.diseaseDept); |
| | | |
| | | this.form.serviceType = this.serviceType; |
| | | this.form.patTaskRelevances = this.form.patTaskRelevances |
| | | ? this.form.patTaskRelevances |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "éé访", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "åé失败", |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | |
| | | // 表ååæ° |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | cardlist: [ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | name: "åºé¢æå¡æ»é", |
| | | value: 0, |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "éé访", |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "åé失败", |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "å·²åé", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | ], |
| | | |
| | | // 表ååæ° |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[2].value = response.rows[0].fssb; |
| | | this.cardlist[3].value = response.rows[0].dsf; |
| | | // this.cardlist[4].value = response.rows[0].yfs2; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | | shadow="hover" |
| | | :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" |
| | | > |
| | | <div style="padding: 8px" @click="$router.push(item.router)"> |
| | | <span>{{ item.name }}</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <!-- <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表åå·²åé</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> --> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>å¼å¸¸</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == 'çç«åå¾·ç¿ èé¢åº'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-form |
| | |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æå¡ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstateView" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="è¯·éæ©" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >é访ä¸</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æªå®æ</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 4"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >æ éé访</el-tag |
| | | > |
| | | </div> |
| | |
| | | > |
| | | <el-table-column |
| | | label="åºéè®¿æ¥æ" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表åå·²é¢å</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >å¾
é访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表åå·²åé</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">䏿§è¡</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >åé失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已宿</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">è¶
æ¶</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任塿§è¡æ¹å¼" |
| | | align="center" |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect,StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // æ¬åå±å¼ |
| | | checkStrictly: true, // â
å
³é®ï¼å
许éä¸ä»»æä¸çº§ |
| | | emitPath: false, // â
åªè¿åéä¸çå¼ï¼ä¸è¿åè·¯å¾æ°ç» |
| | | }, |
| | | // éè®¿ç¶æçº§èéæ©å¨ |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "å
¨é¨", |
| | | }, |
| | | { |
| | | value: 10, // ä¸çº§ï¼å¾
é访 |
| | | label: "å¾
é访", |
| | | children: [ |
| | | { value: 1, label: "被é¢å" }, |
| | | { value: 2, label: "å¾
åé" }, |
| | | { value: 3, label: "å·²åé" }, |
| | | { value: 5, label: "åé失败" }, |
| | | { value: 7, label: "è¶
æ¶" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // ä¸çº§ï¼å·²å®æ |
| | | label: "已宿", |
| | | children: [{ value: 6, label: "已宿" }], |
| | | }, |
| | | { |
| | | value: 30, // ä¸çº§ï¼æ éé访 |
| | | label: "æ éé访", |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "使£æå¡æ»é", |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "æ£è
è¿æ»¤", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | { |
| | | name: "æ éé访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "éé访", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "å¼å¸¸", |
| | | // value: 0, |
| | | // }, |
| | | // { |
| | | // name: "åé失败", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "å¾
é访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "å·²é访", |
| | | name: "已宿", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "表åå·²åé", |
| | | // value: 0, |
| | | // }, |
| | | ], |
| | | |
| | | // 表ååæ° |
| | |
| | | this.total = response.total; |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | // this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | | // éè®¿ç¶æåæ´å¤ç |
| | | handleServiceStatusChange(value) { |
| | | // æ¸
ç©ºéæ© |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // ä¸çº§èç¹çå¼ï¼å¤§äºçäº10ï¼ |
| | | if (value >= 10) { |
| | | // éä¸äºä¸çº§ |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // å¾
é访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已宿 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // æ éé访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // éä¸äºäºçº§ï¼å
·ä½ç¶æï¼ |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // æ£è
èå´å¤ç |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | | let code = value.slice(-1)[0]; |
| | | this.topqueryParams.leavehospitaldistrictcodes = []; |
| | | this.topqueryParams.leaveldeptcodes = []; |
| | | |
| | | |
| | | |
| | | if (type == 1) { |
| | | this.topqueryParams.leaveldeptcodes.push(code); |
| | | this.topqueryParams.leavehospitaldistrictcodes = []; |
| | | this.topqueryParams.searchscope = 1; |
| | | } else if (type == 2) { |
| | | this.topqueryParams.leavehospitaldistrictcodes.push(code); |
| | | this.topqueryParams.leaveldeptcodes = []; |
| | | this.topqueryParams.searchscope = 2; |
| | | } else { |
| | | this.topqueryParams.searchscope = 3; |
| | | } |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | |
| | | @input="handleSearch" |
| | | @clear="handleSearch" |
| | | /> |
| | | <span style="margin-left: 10px; color: rgb(35, 81, 233); font-size: 16px"> |
| | | <span |
| | | style="margin-left: 10px; color: rgb(35, 81, 233); font-size: 16px" |
| | | > |
| | | å
± {{ displayList.length }} æ¡è®°å½ |
| | | </span> |
| | | </div> |
| | |
| | | <div class="examine-jic"> |
| | | <div class="jic-value"> |
| | | <el-row :gutter="20"> |
| | | <div class="data-list" ref="dataList" @scroll="handleScroll" v-loading="loading"> |
| | | <el-table :data="currentDisplayList" height="660" style="width: 100%"> |
| | | <el-table-column prop="sendname" align="center" label="å§å" width="100" /> |
| | | <el-table-column prop="taskName" align="center" width="200" show-overflow-tooltip label="ä»»å¡åç§°" /> |
| | | <div |
| | | class="data-list" |
| | | ref="dataList" |
| | | @scroll="handleScroll" |
| | | v-loading="loading" |
| | | > |
| | | <el-table |
| | | :data="currentDisplayList" |
| | | height="660" |
| | | style="width: 100%" |
| | | > |
| | | <el-table-column |
| | | prop="sendname" |
| | | align="center" |
| | | label="å§å" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | prop="telcode" |
| | | align="center" |
| | | label="èç³»çµè¯" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | prop="taskName" |
| | | align="center" |
| | | width="200" |
| | | show-overflow-tooltip |
| | | label="ä»»å¡åç§°" |
| | | /> |
| | | |
| | | <el-table-column prop="sendstate" align="center" width="200" label="ä»»å¡ç¶æ"> |
| | | <el-table-column |
| | | prop="sendstate" |
| | | align="center" |
| | | width="200" |
| | | label="ä»»å¡ç¶æ" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | :type="getStateTagType(scope.row.sendstate)" |
| | |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span v-for="(item, index) in scope.row.preachform" :key="index"> |
| | | {{ item }}{{ index < scope.row.preachform.length - 1 ? 'ã' : '' }} |
| | | <span |
| | | v-for="(item, index) in scope.row.preachform" |
| | | :key="index" |
| | | > |
| | | {{ item |
| | | }}{{ |
| | | index < scope.row.preachform.length - 1 ? "ã" : "" |
| | | }} |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column label="åºé¢æ¥æ" width="200" align="center" key="endtime" prop="endtime"> |
| | | <el-table-column |
| | | label="åºé¢æ¥æ" |
| | | width="200" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.endtime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="责任æ¤å£«" width="120" align="center" key="nurseName" prop="nurseName" /> |
| | | <el-table-column label="主治å»ç" width="120" align="center" key="drname" prop="drname" /> |
| | | <el-table-column |
| | | label="责任æ¤å£«" |
| | | width="120" |
| | | align="center" |
| | | key="nurseName" |
| | | prop="nurseName" |
| | | /> |
| | | <el-table-column |
| | | label="主治å»ç" |
| | | width="120" |
| | | align="center" |
| | | key="drname" |
| | | prop="drname" |
| | | /> |
| | | |
| | | <el-table-column label="ç»æç¶æ" align="center" key="excep" prop="excep" width="120"> |
| | | <el-table-column |
| | | label="ç»æç¶æ" |
| | | align="center" |
| | | key="excep" |
| | | prop="excep" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_yujing" :value="scope.row.excep" /> |
| | | <dict-tag |
| | | :options="dict.type.sys_yujing" |
| | | :value="scope.row.excep" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="å¤çæè§" align="center" key="suggest" prop="suggest" width="120"> |
| | | <el-table-column |
| | | label="å¤çæè§" |
| | | align="center" |
| | | key="suggest" |
| | | prop="suggest" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_suggest" :value="scope.row.suggest" /> |
| | | <dict-tag |
| | | :options="dict.type.sys_suggest" |
| | | :value="scope.row.suggest" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column prop="templatename" align="center" label="æå¡æ¨¡æ¿" width="200" show-overflow-tooltip /> |
| | | <el-table-column prop="remark" align="center" label="æå¡è®°å½" width="200" show-overflow-tooltip /> |
| | | <el-table-column |
| | | prop="templatename" |
| | | align="center" |
| | | label="æå¡æ¨¡æ¿" |
| | | width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | prop="remark" |
| | | align="center" |
| | | label="æå¡è®°å½" |
| | | width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | |
| | | <el-table-column prop="bankcardno" align="center" label="å¼å«ç¶æ" width="210" /> |
| | | <el-table-column |
| | | prop="bankcardno" |
| | | align="center" |
| | | label="å¼å«ç¶æ" |
| | | width="210" |
| | | /> |
| | | |
| | | <el-table-column label="æä½" fixed="right" align="center" width="200" class-name="small-padding fixed-width"> |
| | | <el-table-column |
| | | label="æä½" |
| | | fixed="right" |
| | | align="center" |
| | | width="200" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button size="medium" type="text" @click="handleDetailsGo(scope.row)"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleDetailsGo(scope.row)" |
| | | > |
| | | <span class="button-zx"> |
| | | <i class="el-icon-s-order"></i>æ¥ç |
| | | </span> |
| | |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'DetailDialog', |
| | | dicts: ['sys_yujing', 'sys_suggest'], |
| | | name: "DetailDialog", |
| | | dicts: ["sys_yujing", "sys_suggest"], |
| | | props: { |
| | | visible: { |
| | | type: Boolean, |
| | | default: false |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '' |
| | | default: "", |
| | | }, |
| | | data: { |
| | | type: Array, |
| | | default: () => [] |
| | | default: () => [], |
| | | }, |
| | | searchName: { |
| | | type: String, |
| | | default: '' |
| | | default: "", |
| | | }, |
| | | loading: { |
| | | type: Boolean, |
| | | default: false |
| | | } |
| | | default: false, |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | localSearchName: '', |
| | | localSearchName: "", |
| | | displayList: [], |
| | | currentDisplayList: [], |
| | | loadIndex: 0, |
| | | pageSize: 100, |
| | | isLoading: false |
| | | } |
| | | isLoading: false, |
| | | }; |
| | | }, |
| | | watch: { |
| | | data: { |
| | | immediate: true, |
| | | handler(newData) { |
| | | this.initializeData(newData) |
| | | } |
| | | this.initializeData(newData); |
| | | }, |
| | | }, |
| | | searchName(newVal) { |
| | | this.localSearchName = newVal |
| | | this.handleSearch() |
| | | } |
| | | this.localSearchName = newVal; |
| | | this.handleSearch(); |
| | | }, |
| | | }, |
| | | mounted() { |
| | | if (this.data && this.data.length > 0) { |
| | | this.initializeData(this.data) |
| | | this.initializeData(this.data); |
| | | } |
| | | }, |
| | | methods: { |
| | | initializeData(data) { |
| | | this.displayList = [...data] |
| | | this.formatPreachformData() |
| | | this.loadIndex = 0 |
| | | this.currentDisplayList = [] |
| | | this.displayList = [...data]; |
| | | this.formatPreachformData(); |
| | | this.loadIndex = 0; |
| | | this.currentDisplayList = []; |
| | | this.$nextTick(() => { |
| | | this.loadMoreData() |
| | | }) |
| | | this.loadMoreData(); |
| | | }); |
| | | }, |
| | | |
| | | formatPreachformData() { |
| | | this.displayList.forEach((item) => { |
| | | if (item.preachform) { |
| | | if (item.endtime) { |
| | | item.preachformson = item.preachform |
| | | const idArray = item.preachform.split(',') |
| | | item.preachformson = item.preachform; |
| | | const idArray = item.preachform.split(","); |
| | | |
| | | item.preachform = idArray.map((value) => { |
| | | const checkboxlist = this.$store.getters.checkboxlist |
| | | const foundItem = checkboxlist.find((item) => item.value == value) |
| | | return foundItem ? foundItem.label : null |
| | | }).filter(label => label !== null) |
| | | item.preachform = idArray |
| | | .map((value) => { |
| | | const checkboxlist = this.$store.getters.checkboxlist; |
| | | const foundItem = checkboxlist.find( |
| | | (item) => item.value == value |
| | | ); |
| | | return foundItem ? foundItem.label : null; |
| | | }) |
| | | .filter((label) => label !== null); |
| | | } |
| | | } |
| | | }) |
| | | }); |
| | | }, |
| | | |
| | | handleSearch() { |
| | | if (!this.localSearchName.trim()) { |
| | | this.displayList = [...this.data] |
| | | this.formatPreachformData() |
| | | this.displayList = [...this.data]; |
| | | this.formatPreachformData(); |
| | | } else { |
| | | const keyword = this.localSearchName.toLowerCase() |
| | | const keyword = this.localSearchName.toLowerCase(); |
| | | this.displayList = this.data.filter((item) => { |
| | | return item.sendname && item.sendname.toLowerCase().includes(keyword) |
| | | }) |
| | | this.formatPreachformData() |
| | | return item.sendname && item.sendname.toLowerCase().includes(keyword); |
| | | }); |
| | | this.formatPreachformData(); |
| | | } |
| | | |
| | | this.loadIndex = 0 |
| | | this.currentDisplayList = [] |
| | | this.loadIndex = 0; |
| | | this.currentDisplayList = []; |
| | | this.$nextTick(() => { |
| | | this.loadMoreData() |
| | | }) |
| | | this.loadMoreData(); |
| | | }); |
| | | |
| | | this.$emit('search', this.localSearchName) |
| | | this.$emit("search", this.localSearchName); |
| | | }, |
| | | |
| | | loadMoreData() { |
| | | if (this.isLoading || this.loadIndex >= this.displayList.length) return |
| | | if (this.isLoading || this.loadIndex >= this.displayList.length) return; |
| | | |
| | | this.isLoading = true |
| | | this.isLoading = true; |
| | | |
| | | setTimeout(() => { |
| | | const nextChunk = this.displayList.slice( |
| | | this.loadIndex, |
| | | this.loadIndex + this.pageSize |
| | | ) |
| | | this.currentDisplayList = this.currentDisplayList.concat(nextChunk) |
| | | this.loadIndex += this.pageSize |
| | | this.isLoading = false |
| | | }, 200) |
| | | ); |
| | | this.currentDisplayList = this.currentDisplayList.concat(nextChunk); |
| | | this.loadIndex += this.pageSize; |
| | | this.isLoading = false; |
| | | }, 200); |
| | | }, |
| | | |
| | | handleScroll(event) { |
| | | const scrollContainer = event.target |
| | | const scrollContainer = event.target; |
| | | const isAtBottom = |
| | | scrollContainer.scrollTop + scrollContainer.clientHeight >= |
| | | scrollContainer.scrollHeight - 10 |
| | | scrollContainer.scrollHeight - 10; |
| | | |
| | | if ( |
| | | isAtBottom && |
| | | !this.isLoading && |
| | | this.loadIndex < this.displayList.length |
| | | ) { |
| | | this.loadMoreData() |
| | | this.loadMoreData(); |
| | | } |
| | | }, |
| | | |
| | | getStateTagType(state) { |
| | | const stateMap = { |
| | | 1: 'primary', // 表åå·²é¢å |
| | | 2: 'primary', // å¾
é访 |
| | | 3: 'success', // 表åå·²åé |
| | | 4: 'info', // 䏿§è¡ |
| | | 5: 'danger', // åé失败 |
| | | 6: 'success' // 已宿 |
| | | } |
| | | return stateMap[state] || 'info' |
| | | 1: "primary", // 表åå·²é¢å |
| | | 2: "primary", // å¾
é访 |
| | | 3: "success", // 表åå·²åé |
| | | 4: "info", // 䏿§è¡ |
| | | 5: "danger", // åé失败 |
| | | 6: "success", // 已宿 |
| | | 7: "danger", // è¶
æ¶ |
| | | }; |
| | | return stateMap[state] || "info"; |
| | | }, |
| | | |
| | | getStateText(state) { |
| | | const stateTextMap = { |
| | | 1: '表åå·²é¢å', |
| | | 2: 'å¾
é访', |
| | | 3: '表åå·²åé', |
| | | 4: '䏿§è¡', |
| | | 5: 'åé失败', |
| | | 6: '已宿' |
| | | } |
| | | return stateTextMap[state] || 'æªç¥ç¶æ' |
| | | 1: "表åå·²é¢å", |
| | | 2: "å¾
é访", |
| | | 3: "表åå·²åé", |
| | | 4: "䏿§è¡", |
| | | 5: "åé失败", |
| | | 6: "已宿", |
| | | 7: "è¶
æ¶", |
| | | }; |
| | | return stateTextMap[state] || "æªç¥ç¶æ"; |
| | | }, |
| | | |
| | | formatTime(time) { |
| | | if (!time) return '' |
| | | return this.parseTime(time) |
| | | if (!time) return ""; |
| | | return this.parseTime(time); |
| | | }, |
| | | |
| | | handleDetailsGo(row) { |
| | | this.$emit('details-go', row) |
| | | this.$emit("details-go", row); |
| | | }, |
| | | |
| | | handleClose() { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | } |
| | | this.$emit("close"); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <!-- 头é¨ï¼æ é¢åæä½æé® --> |
| | | <div class="header-container"> |
| | | <div class="header-left"> |
| | | <div class="title">è§åé
置管ç</div> |
| | | <div class="tips">é
ç½®ç§å®¤åç
åºçæ§è¡ä¼å
级è§å</div> |
| | | </div> |
| | | <div class="header-right"> |
| | | <el-button type="primary" icon="el-icon-plus" @click="openAddDialog"> |
| | | æ°å¢è§å |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- æç´¢åºå --> |
| | | <el-card class="filter-container" shadow="never"> |
| | | <div class="filter-title">æ¥è¯¢æ¡ä»¶</div> |
| | | <el-form :model="searchForm" :inline="true" class="filter-form"> |
| | | <el-form-item label="ç§å®¤åç§°"> |
| | | <el-input |
| | | v-model="searchForm.deptname" |
| | | placeholder="请è¾å
¥ç§å®¤åç§°" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleSearch" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ç
åºåç§°"> |
| | | <el-input |
| | | v-model="searchForm.wardname" |
| | | placeholder="请è¾å
¥ç
åºåç§°" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleSearch" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ç§å®¤è§å"> |
| | | <el-select |
| | | v-model="searchForm.deptRule" |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | style="width: 120px" |
| | | > |
| | | <el-option label="é¦å
æ§è¡" value="1" /> |
| | | <el-option label="æ¬¡è¦æ§è¡" value="2" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç
åºè§å"> |
| | | <el-select |
| | | v-model="searchForm.wradRule" |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | style="width: 120px" |
| | | > |
| | | <el-option label="é¦å
æ§è¡" value="1" /> |
| | | <el-option label="æ¬¡è¦æ§è¡" value="2" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" @click="handleSearch" |
| | | >æ¥è¯¢</el-button |
| | | > |
| | | <el-button icon="el-icon-refresh" @click="resetSearch" |
| | | >éç½®</el-button |
| | | > |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | |
| | | <!-- è§ååè¡¨è¡¨æ ¼ --> |
| | | <el-card class="table-container" shadow="never"> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="tableData" |
| | | style="width: 100%" |
| | | stripe |
| | | :header-cell-style="{ background: '#f5f7fa', color: '#606266' }" |
| | | > |
| | | <el-table-column |
| | | prop="deptname" |
| | | label="ç§å®¤" |
| | | min-width="120" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | prop="wardname" |
| | | label="ç
åº" |
| | | min-width="120" |
| | | align="center" |
| | | /> |
| | | <el-table-column label="ç§å®¤ä¼å
级" min-width="100" align="center"> |
| | | <template slot-scope="{ row }"> |
| | | <el-tag |
| | | :type="row.deptRule === '1' ? 'success' : 'warning'" |
| | | size="small" |
| | | > |
| | | {{ row.deptRule === "1" ? "é¦å
æ§è¡" : "æ¬¡è¦æ§è¡" }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç
åºä¼å
级" min-width="100" align="center"> |
| | | <template slot-scope="{ row }"> |
| | | <el-tag |
| | | :type="row.wradRule === '1' ? 'success' : 'warning'" |
| | | size="small" |
| | | > |
| | | {{ row.wradRule === "1" ? "é¦å
æ§è¡" : "æ¬¡è¦æ§è¡" }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç¾ç
ä¼å
级" min-width="100" align="center"> |
| | | <template slot-scope="{ row }"> |
| | | <el-tag |
| | | :type="row.diagRule === '1' ? 'success' : 'warning'" |
| | | size="small" |
| | | > |
| | | {{ row.diagRule === "1" ? "é¦å
æ§è¡" : "æ¬¡è¦æ§è¡" }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="createTime" |
| | | label="å建æ¶é´" |
| | | min-width="150" |
| | | align="center" |
| | | /> |
| | | <el-table-column label="æä½" width="180" fixed="right" align="center"> |
| | | <template slot-scope="{ row }"> |
| | | <el-button |
| | | type="text" |
| | | size="mini" |
| | | icon="el-icon-edit" |
| | | @click="openEditDialog(row)" |
| | | class="action-btn" |
| | | > |
| | | ç¼è¾ |
| | | </el-button> |
| | | <el-button |
| | | type="text" |
| | | size="mini" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(row)" |
| | | style="color: #f56c6c" |
| | | class="action-btn" |
| | | > |
| | | å é¤ |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <!-- å页 --> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | :page.sync="searchForm.pageNum" |
| | | :limit.sync="searchForm.pageSize" |
| | | @pagination="getList" |
| | | style="margin-top: 20px" |
| | | /> |
| | | </el-card> |
| | | |
| | | <!-- æ·»å /ç¼è¾å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | | :title="dialogTitle" |
| | | :visible.sync="dialogVisible" |
| | | width="500px" |
| | | :close-on-click-modal="false" |
| | | @close="resetDialog" |
| | | > |
| | | <el-form |
| | | ref="ruleFormRef" |
| | | :model="ruleForm" |
| | | :rules="rules" |
| | | label-width="100px" |
| | | class="rule-form" |
| | | > |
| | | <el-form-item label="ç§å®¤" prop="deptcode"> |
| | | <el-select |
| | | v-model="ruleForm.deptcode" |
| | | placeholder="è¯·éæ©ç§å®¤" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | @change="handleDeptChange" |
| | | > |
| | | <el-option |
| | | v-for="dept in departmentOptions" |
| | | :key="dept.value" |
| | | :label="dept.label" |
| | | :value="dept.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="ç
åº" prop="wardcode"> |
| | | <el-select |
| | | v-model="ruleForm.wardcode" |
| | | placeholder="è¯·éæ©ç
åº" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | @change="handleDeptChangebq" |
| | | > |
| | | <el-option |
| | | v-for="ward in wardOptions" |
| | | :key="ward.value" |
| | | :label="ward.label" |
| | | :value="ward.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="ç§å®¤ä¼å
级" prop="deptRule"> |
| | | <el-radio-group v-model="ruleForm.deptRule"> |
| | | <el-radio label="1">é¦å
æ§è¡</el-radio> |
| | | <el-radio label="2">æ¬¡è¦æ§è¡</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="ç
åºä¼å
级" prop="wradRule"> |
| | | <el-radio-group v-model="ruleForm.wradRule"> |
| | | <el-radio label="1">é¦å
æ§è¡</el-radio> |
| | | <el-radio label="2">æ¬¡è¦æ§è¡</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="ç¾ç
ä¼å
级" prop="diagRule"> |
| | | <el-radio-group v-model="ruleForm.diagRule"> |
| | | <el-radio label="1">é¦å
æ§è¡</el-radio> |
| | | <el-radio label="2">æ¬¡è¦æ§è¡</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <div class="form-tips"> |
| | | <i class="el-icon-info"></i> |
| | | æç¤ºï¼ç§å®¤åç
åºè³å°éè¦éæ©ä¸ä¸ª |
| | | </div> |
| | | </el-form> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="handleSubmit" :loading="submitting" |
| | | >ç¡® å®</el-button |
| | | > |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | taskrulelist, |
| | | addtaskrule, |
| | | edittaskrule, |
| | | deltaskrule, |
| | | } from "@/api/AiCentre/index"; |
| | | |
| | | export default { |
| | | name: "RuleConfig", |
| | | data() { |
| | | // éªè¯ç§å®¤åç
åºè³å°éä¸ä¸ª |
| | | const validateDeptOrWard = (rule, value, callback) => { |
| | | if (!this.ruleForm.deptcode && !this.ruleForm.wardcode) { |
| | | callback(new Error("ç§å®¤åç
åºè³å°éè¦éæ©ä¸ä¸ª")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | |
| | | return { |
| | | // æç´¢è¡¨å |
| | | searchForm: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | deptname: "", |
| | | wardname: "", |
| | | deptRule: "", |
| | | wradRule: "", |
| | | }, |
| | | |
| | | // è¡¨æ ¼æ°æ® |
| | | tableData: [], |
| | | total: 0, |
| | | loading: false, |
| | | |
| | | // å¯¹è¯æ¡ç¸å
³ |
| | | dialogVisible: false, |
| | | dialogTitle: "", |
| | | submitting: false, |
| | | isEdit: false, |
| | | currentId: null, |
| | | |
| | | // è¡¨åæ°æ® |
| | | ruleForm: { |
| | | deptcode: "", |
| | | deptname: "", |
| | | wardcode: "", |
| | | wardname: "", |
| | | deptRule: "1", |
| | | wradRule: "1", |
| | | diagRule: "1", |
| | | }, |
| | | |
| | | // éªè¯è§å |
| | | rules: { |
| | | deptRule: [ |
| | | { required: true, message: "è¯·éæ©ç§å®¤ä¼å
级", trigger: "change" }, |
| | | ], |
| | | wradRule: [ |
| | | { required: true, message: "è¯·éæ©ç
åºä¼å
级", trigger: "change" }, |
| | | ], |
| | | diagRule: [ |
| | | { required: true, message: "è¯·éæ©ç¾ç
ä¼å
级", trigger: "change" }, |
| | | ], |
| | | deptcode: [{ validator: validateDeptOrWard, trigger: "change" }], |
| | | wardcode: [{ validator: validateDeptOrWard, trigger: "change" }], |
| | | }, |
| | | |
| | | // éé¡¹æ°æ® |
| | | departmentOptions: [], |
| | | wardOptions: [], |
| | | }; |
| | | }, |
| | | computed: { |
| | | // ç§å®¤é项 |
| | | computedDepartmentOptions() { |
| | | if (this.$store.getters.belongDepts) { |
| | | return this.$store.getters.belongDepts.map((dept) => ({ |
| | | label: dept.deptName, |
| | | value: dept.deptCode, |
| | | })); |
| | | } |
| | | return []; |
| | | }, |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | this.departmentOptions = this.computedDepartmentOptions; |
| | | this.fetchWardOptions(); |
| | | }, |
| | | methods: { |
| | | // è·åè§åå表 |
| | | getList() { |
| | | this.loading = true; |
| | | taskrulelist(this.searchForm) |
| | | .then((response) => { |
| | | if (response.code === 200) { |
| | | this.tableData = response.rows; |
| | | this.total = response.total; |
| | | } else { |
| | | this.$message.error(response.msg || "è·åå表失败"); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error("è·åè§åå表失败:", error); |
| | | this.$message.error("è·åè§åå表失败"); |
| | | }) |
| | | .finally(() => { |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | |
| | | // è·åç
åºæ°æ® |
| | | fetchWardOptions() { |
| | | // TODO: è°ç¨è·åç
åºåè¡¨çæ¥å£ |
| | | // getWardList().then(response => { |
| | | // this.wardOptions = response.data.map(ward => ({ |
| | | // label: ward.wardName, |
| | | // value: ward.wardCode |
| | | // })); |
| | | // }).catch(error => { |
| | | // console.error('è·åç
åºå表失败:', error); |
| | | // }); |
| | | |
| | | // ä¸´æ¶æ°æ® |
| | | this.wardOptions = [ |
| | | { label: "å¿è¡ç®¡å
ç§ä¸ç
åº", value: "W001" }, |
| | | { label: "å¿è¡ç®¡å
ç§äºç
åº", value: "W002" }, |
| | | { label: "å¼å¸å
ç§ç
åº", value: "W003" }, |
| | | { label: "ç¥ç»å
ç§ç
åº", value: "W004" }, |
| | | ]; |
| | | }, |
| | | |
| | | // ç§å®¤ååå¤ç |
| | | handleDeptChange(value) { |
| | | const selectedDept = this.departmentOptions.find( |
| | | (dept) => dept.value === value |
| | | ); |
| | | if (selectedDept) { |
| | | this.ruleForm.deptname = selectedDept.label; |
| | | } else { |
| | | this.ruleForm.deptname = ""; |
| | | } |
| | | }, |
| | | handleDeptChangebq(value) { |
| | | const selectedDept = this.wardOptions.find( |
| | | (dept) => dept.value === value |
| | | ); |
| | | if (selectedDept) { |
| | | this.ruleForm.wardname = selectedDept.label; |
| | | } else { |
| | | this.ruleForm.wardname = ""; |
| | | } |
| | | }, |
| | | |
| | | // æç´¢ |
| | | handleSearch() { |
| | | this.searchForm.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | |
| | | // éç½®æç´¢ |
| | | resetSearch() { |
| | | this.searchForm = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | deptname: "", |
| | | wardname: "", |
| | | deptRule: "", |
| | | wradRule: "", |
| | | }; |
| | | this.getList(); |
| | | }, |
| | | |
| | | // æå¼æ°å¢å¯¹è¯æ¡ |
| | | openAddDialog() { |
| | | this.dialogTitle = "æ°å¢è§å"; |
| | | this.isEdit = false; |
| | | this.currentId = null; |
| | | this.dialogVisible = true; |
| | | }, |
| | | |
| | | // æå¼ç¼è¾å¯¹è¯æ¡ |
| | | openEditDialog(row) { |
| | | this.dialogTitle = "ç¼è¾è§å"; |
| | | this.isEdit = true; |
| | | this.currentId = row.id; |
| | | |
| | | // å¡«å
è¡¨åæ°æ® |
| | | this.ruleForm = { |
| | | deptcode: row.deptcode || "", |
| | | deptname: row.deptname || "", |
| | | wardcode: row.wardcode || "", |
| | | wardname: row.wardname || "", |
| | | deptRule: row.deptRule || "1", |
| | | wradRule: row.wradRule || "1", |
| | | diagRule: row.diagRule || "1", |
| | | }; |
| | | |
| | | this.dialogVisible = true; |
| | | }, |
| | | |
| | | // éç½®å¯¹è¯æ¡ |
| | | resetDialog() { |
| | | this.$refs.ruleFormRef && this.$refs.ruleFormRef.resetFields(); |
| | | this.ruleForm = { |
| | | deptcode: "", |
| | | deptname: "", |
| | | wardcode: "", |
| | | wardname: "", |
| | | deptRule: "1", |
| | | wradRule: "1", |
| | | diagRule: "1", |
| | | }; |
| | | this.currentId = null; |
| | | this.submitting = false; |
| | | }, |
| | | |
| | | // æäº¤è¡¨å |
| | | handleSubmit() { |
| | | this.$refs.ruleFormRef.validate((valid) => { |
| | | if (valid) { |
| | | this.submitting = true; |
| | | |
| | | const formData = { ...this.ruleForm }; |
| | | if (this.isEdit) { |
| | | formData.id = this.currentId; |
| | | } |
| | | |
| | | const api = this.isEdit ? edittaskrule : addtaskrule; |
| | | |
| | | api(formData) |
| | | .then((response) => { |
| | | if (response.code === 200) { |
| | | this.$message.success(this.isEdit ? "ç¼è¾æå" : "æ°å¢æå"); |
| | | this.dialogVisible = false; |
| | | this.getList(); |
| | | } else { |
| | | this.$message.error( |
| | | response.msg || (this.isEdit ? "ç¼è¾å¤±è´¥" : "æ°å¢å¤±è´¥") |
| | | ); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error("æäº¤å¤±è´¥:", error); |
| | | this.$message.error("æäº¤å¤±è´¥ï¼è¯·ç¨åéè¯"); |
| | | }) |
| | | .finally(() => { |
| | | this.submitting = false; |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // å é¤è§å |
| | | handleDelete(row) { |
| | | this.$confirm( |
| | | `ç¡®å®è¦å é¤è§å"${row.deptname || row.wardname}"åï¼`, |
| | | "æç¤º", |
| | | { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | } |
| | | ) |
| | | .then(() => { |
| | | return deltaskrule({ id: row.id }); |
| | | }) |
| | | .then((response) => { |
| | | if (response.code === 200) { |
| | | this.$message.success("å 餿å"); |
| | | this.getList(); |
| | | } else { |
| | | this.$message.error(response.msg || "å é¤å¤±è´¥"); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | if (error !== "cancel") { |
| | | console.error("å é¤å¤±è´¥:", error); |
| | | this.$message.error("å é¤å¤±è´¥"); |
| | | } |
| | | }); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .app-container { |
| | | padding: 20px; |
| | | background-color: #f0f2f5; |
| | | min-height: calc(100vh - 84px); |
| | | } |
| | | |
| | | .header-container { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 20px; |
| | | padding: 16px 20px; |
| | | background: white; |
| | | border-radius: 4px; |
| | | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .header-left { |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .header-left .title { |
| | | font-size: 20px; |
| | | font-weight: 500; |
| | | color: #303133; |
| | | margin-bottom: 6px; |
| | | } |
| | | |
| | | .header-left .tips { |
| | | font-size: 13px; |
| | | color: #909399; |
| | | } |
| | | |
| | | .filter-container { |
| | | margin-bottom: 20px; |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | .filter-title { |
| | | font-size: 15px; |
| | | font-weight: 500; |
| | | color: #303133; |
| | | margin-bottom: 16px; |
| | | padding-bottom: 12px; |
| | | border-bottom: 1px solid #ebeef5; |
| | | } |
| | | |
| | | .filter-form { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 20px 0; |
| | | } |
| | | |
| | | .filter-form .el-form-item { |
| | | margin-bottom: 0; |
| | | margin-right: 20px; |
| | | } |
| | | |
| | | .table-container { |
| | | border-radius: 4px; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .action-btn { |
| | | padding: 5px 8px; |
| | | font-size: 12px; |
| | | } |
| | | |
| | | .rule-form { |
| | | padding-right: 20px; |
| | | } |
| | | |
| | | .form-tips { |
| | | background-color: #f0f9ff; |
| | | border: 1px solid #c6e2ff; |
| | | border-radius: 4px; |
| | | padding: 10px 15px; |
| | | margin-left: 100px; |
| | | color: #409eff; |
| | | font-size: 12px; |
| | | line-height: 1.5; |
| | | } |
| | | |
| | | .form-tips i { |
| | | margin-right: 5px; |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: right; |
| | | padding-top: 20px; |
| | | border-top: 1px solid #ebeef5; |
| | | } |
| | | |
| | | /* ååºå¼è°æ´ */ |
| | | @media (max-width: 768px) { |
| | | .header-container { |
| | | flex-direction: column; |
| | | align-items: flex-start; |
| | | } |
| | | |
| | | .header-right { |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .filter-form .el-form-item { |
| | | width: 100%; |
| | | margin-right: 0; |
| | | } |
| | | |
| | | .filter-form .el-form-item .el-input, |
| | | .filter-form .el-form-item .el-select { |
| | | width: 100%; |
| | | } |
| | | } |
| | | </style> |