| | |
| | | </div> |
| | | |
| | | <el-descriptions v-if="basicData" :column="column" border> |
| | | <!-- 1. æ¡ä¾ç¼å· --> |
| | | <el-descriptions-item label="æ¡ä¾ç¼å·"> |
| | | {{ basicData.caseNo || "--" }} |
| | | <!-- 1. ä½é¢å· --> |
| | | <el-descriptions-item label="ä½é¢å·"> |
| | | {{ basicData.inpatientno || "--" }} |
| | | </el-descriptions-item> |
| | | |
| | | <!-- 2. æ½å¨æç®è
å§å --> |
| | |
| | | |
| | | <!-- 7. æå¨å»çæºæ --> |
| | | <el-descriptions-item label="æå¨å»çæºæ"> |
| | | {{ basicData.treatmenthospitalname || basicData.hospitalName || "--" }} |
| | | {{ basicData.currentMedicalInstitution || "--" }} |
| | | </el-descriptions-item> |
| | | |
| | | <!-- 8. åè°å --> |
| | |
| | | sex: apiData.sex, |
| | | age: apiData.age, |
| | | ageunit: apiData.ageunit, |
| | | inpatientno: apiData.inpatientno, |
| | | currentMedicalInstitution: apiData.currentMedicalInstitution, |
| | | workflow: apiData.workflow, |
| | | bloodType: apiData.bloodType || apiData.bloodtype, |
| | | idcardno: apiData.idcardno || apiData.idCardNo, |
| | |
| | | <template> |
| | | <div class="organ-assessment-form"> |
| | | <el-form :model="formData" label-width="120px"> |
| | | <!-- æ·»å è¯ä¼°æ¶é´å段 --> |
| | | <el-form-item label="è¯ä¼°æ¶é´"> |
| | | <el-date-picker |
| | | v-model="formData.assessmentTime" |
| | | type="datetime" |
| | | placeholder="éæ©è¯ä¼°æ¶é´" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | :default-value="new Date()" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <!-- åªè¯»æ¨¡å¼ä¸æ¾ç¤ºè¯ä¼°æ¶é´ --> |
| | | <el-form-item label="åè½ç¶æ"> |
| | | <el-select v-model="formData.functionStatus"> |
| | | <el-option label="æ£å¸¸" value="1" /> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="ä¸ä¼ æ¶é´" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatDateTime(scope.row.uploadTime) }}</span> |
| | | <span>{{ scope.row.uploadTime }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä»¶å¤§å°" width="100"> |
| | |
| | | formData: { |
| | | functionStatus: "", |
| | | assessmentOpinion: "", |
| | | assessmentTime: "", // æ°å¢è¯ä¼°æ¶é´å段 |
| | | attachments: [] |
| | | }, |
| | | // é¢è§ç¸å
³ |
| | |
| | | }, |
| | | created() { |
| | | this.initData(); |
| | | // 妿è¯ä¼°æ¶é´ä¸ºç©ºï¼è®¾ç½®é»è®¤å¼ |
| | | if (!this.formData.assessmentTime) { |
| | | this.$set( |
| | | this.formData, |
| | | "assessmentTime", |
| | | this.getDefaultAssessmentTime() |
| | | ); |
| | | } |
| | | }, |
| | | methods: { |
| | | // åå§åæ°æ® |
| | |
| | | this.formData = { |
| | | functionStatus: "", |
| | | assessmentOpinion: "", |
| | | assessmentTime: this.getDefaultAssessmentTime(), |
| | | attachments: [] |
| | | }; |
| | | this.attachmentFileList = []; |
| | |
| | | ) { |
| | | this.currentAssessment = assessData[this.assessmentIndex]; |
| | | |
| | | // æ·±æ·è´æ°æ®ï¼é¿å
ä¿®æ¹åå§æ°æ® |
| | | // æ·±æ·è´æ°æ® |
| | | const assessmentCopy = JSON.parse( |
| | | JSON.stringify(this.currentAssessment) |
| | | ); |
| | | |
| | | // å¤çè¯ä¼°æ¶é´ |
| | | let assessmentTime = assessmentCopy.assessmentTime; |
| | | |
| | | // 妿æ¶é´ä¸æ¯ææçæ¥æå符串ï¼ä½¿ç¨é»è®¤å¼ |
| | | if (!this.isValidDate(assessmentTime)) { |
| | | assessmentTime = this.getDefaultAssessmentTime(); |
| | | } else { |
| | | // ç¡®ä¿æ¶é´æ ¼å¼æ£ç¡® |
| | | assessmentTime = this.formatDateForPicker(assessmentTime); |
| | | } |
| | | |
| | | this.formData = { |
| | | functionStatus: assessmentCopy.functionStatus || "", |
| | | assessmentOpinion: assessmentCopy.assessmentOpinion || "", |
| | | assessmentTime: assessmentTime, // å¤çåçæ¶é´ |
| | | attachments: Array.isArray(assessmentCopy.attachments) |
| | | ? [...assessmentCopy.attachments] |
| | | : [] |
| | |
| | | this.resetForm(); |
| | | } |
| | | }, |
| | | // éªè¯æ¥ææ¯å¦ææ |
| | | isValidDate(dateString) { |
| | | if (!dateString) return false; |
| | | |
| | | try { |
| | | const date = new Date(dateString); |
| | | return !isNaN(date.getTime()) && dateString.trim() !== ""; |
| | | } catch (error) { |
| | | return false; |
| | | } |
| | | }, |
| | | |
| | | // ä¸ºæ¥æéæ©å¨æ ¼å¼åæ¥æ |
| | | formatDateForPicker(dateString) { |
| | | if (!dateString) return ""; |
| | | |
| | | try { |
| | | const date = new Date(dateString); |
| | | if (isNaN(date.getTime())) { |
| | | return this.getDefaultAssessmentTime(); |
| | | } |
| | | |
| | | // æ ¼å¼å为 yyyy-MM-dd HH:mm:ss |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, "0"); |
| | | const day = String(date.getDate()).padStart(2, "0"); |
| | | const hours = String(date.getHours()).padStart(2, "0"); |
| | | const minutes = String(date.getMinutes()).padStart(2, "0"); |
| | | const seconds = String(date.getSeconds()).padStart(2, "0"); |
| | | |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } catch (error) { |
| | | console.error("æ¥ææ ¼å¼åé误:", error); |
| | | return this.getDefaultAssessmentTime(); |
| | | } |
| | | }, |
| | | // é置表å |
| | | resetForm() { |
| | | this.formData = { |
| | | functionStatus: "", |
| | | assessmentOpinion: "", |
| | | assessmentTime: this.getDefaultAssessmentTime(), // 设置é»è®¤æ¶é´ |
| | | attachments: [] |
| | | }; |
| | | this.attachmentFileList = []; |
| | | }, |
| | | // è·åé»è®¤è¯ä¼°æ¶é´ |
| | | getDefaultAssessmentTime() { |
| | | const now = new Date(); |
| | | const year = now.getFullYear(); |
| | | const month = String(now.getMonth() + 1).padStart(2, "0"); |
| | | const day = String(now.getDate()).padStart(2, "0"); |
| | | const hours = String(now.getHours()).padStart(2, "0"); |
| | | const minutes = String(now.getMinutes()).padStart(2, "0"); |
| | | const seconds = String(now.getSeconds()).padStart(2, "0"); |
| | | |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | }, |
| | | // ä¿åè¯ä¼° |
| | | handleSave() { |
| | | // éªè¯å¿
è¦å段 |
| | |
| | | return; |
| | | } |
| | | |
| | | if (!this.formData.assessmentTime) { |
| | | this.$message.warning("è¯·éæ©è¯ä¼°æ¶é´"); |
| | | return; |
| | | } |
| | | |
| | | // éªè¯æ¶é´æ ¼å¼ |
| | | if (!this.isValidDate(this.formData.assessmentTime)) { |
| | | this.$message.warning("è¯ä¼°æ¶é´æ ¼å¼ä¸æ£ç¡®ï¼è¯·éæ°éæ©"); |
| | | return; |
| | | } |
| | | |
| | | // åå¤ä¿åçæ°æ® |
| | | const saveData = { |
| | | functionStatus: this.formData.functionStatus, |
| | | assessmentOpinion: this.formData.assessmentOpinion, |
| | | assessmentTime: this.formData.assessmentTime, |
| | | attachments: Array.isArray(this.formData.attachments) |
| | | ? [...this.formData.attachments] |
| | | : [] |
| | | }; |
| | | |
| | | // æ·»å è¯ä¼°è
åè¯ä¼°æ¶é´ |
| | | // æ·»å è¯ä¼°è
|
| | | const assessmentData = { |
| | | ...saveData, |
| | | assessor: this.currentUser.name, |
| | | assessmentTime: new Date().toISOString() |
| | | assessor: this.currentUser.name |
| | | }; |
| | | |
| | | console.log("åéä¿å请æ±:", assessmentData); |
| | |
| | | assessmentIndex: this.assessmentIndex |
| | | }); |
| | | }, |
| | | |
| | | handleCancel() { |
| | | this.$emit("cancel"); |
| | | }, |
| | |
| | | |
| | | /** ä¸ä¼ æåå¤ç */ |
| | | handleUploadSuccess({ file, fileList, response }) { |
| | | console.log(response,'response'); |
| | | console.log(response, "response"); |
| | | |
| | | if (response.code === 200) { |
| | | console.log(response, "ä¸ä¼ æ°æ®"); |
| | |
| | | const sizes = ["B", "KB", "MB", "GB"]; |
| | | const i = Math.floor(Math.log(bytes) / Math.log(k)); |
| | | return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]; |
| | | }, |
| | | |
| | | /** æ¥ææ¶é´æ ¼å¼å */ |
| | | formatDateTime(dateTime) { |
| | | if (!dateTime) return ""; |
| | | |
| | | try { |
| | | const date = new Date(dateTime); |
| | | if (isNaN(date.getTime())) return dateTime; |
| | | |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, "0"); |
| | | const day = String(date.getDate()).padStart(2, "0"); |
| | | const hours = String(date.getHours()).padStart(2, "0"); |
| | | const minutes = String(date.getMinutes()).padStart(2, "0"); |
| | | |
| | | return `${year}-${month}-${day} ${hours}:${minutes}`; |
| | | } catch (error) { |
| | | return dateTime; |
| | | } |
| | | } |
| | | } |
| | | }; |
| | |
| | | font-size: 13px; |
| | | margin-left: 8px; |
| | | } |
| | | |
| | | .readonly-time { |
| | | font-size: 14px; |
| | | color: #606266; |
| | | font-weight: 500; |
| | | padding: 8px 15px; |
| | | background: #f5f7fa; |
| | | border-radius: 4px; |
| | | display: inline-block; |
| | | min-width: 200px; |
| | | } |
| | | ::v-deep .el-upload__tip { |
| | | font-size: 12px; |
| | | color: #909399; |
| | |
| | | <template> |
| | | <div class="organ-utilization-detail"> |
| | | <case-basic-info :case-id="caseId" :show-attachment="true" /> |
| | | |
| | | <!-- åºæ¬ä¿¡æ¯ --> |
| | | <el-card class="detail-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">å¨å®å©ç¨åºæ¬ä¿¡æ¯</span> |
| | | <div style="float: right;"> |
| | | <el-button type="primary" @click="handleSave" :loading="saveLoading"> |
| | | ä¿å |
| | | </el-button> |
| | | <el-button |
| | | type="success" |
| | | @click="handleComplete" |
| | | :loading="confirmLoading" |
| | | > |
| | | 宿å©ç¨ |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="6"> |
| | | <el-form-item align="left" label="é使ç®" prop="isbodydonation"> |
| | | <el-radio-group v-model="form.isbodydonation"> |
| | | <el-radio |
| | | v-for="dict in dict.type.sys_0_1 || []" |
| | | :key="dict.value" |
| | | :label="dict.value" |
| | | >{{ dict.label }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="18"> |
| | | <el-form-item |
| | | align="left" |
| | | label="æ¥æ¶åä½" |
| | | prop="receivingunitname" |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="120px"> |
| | | <!-- åºæ¬ä¿¡æ¯ --> |
| | | <el-card class="detail-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">å¨å®å©ç¨åºæ¬ä¿¡æ¯</span> |
| | | <div style="float: right;"> |
| | | <el-button |
| | | type="primary" |
| | | @click="handleSave" |
| | | :loading="saveLoading" |
| | | > |
| | | <el-input |
| | | v-model="form.receivingunitname" |
| | | placeholder="请è¾å
¥æ¥æ¶åä½" |
| | | :disabled="form.isbodydonation !== '1'" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | ä¿å |
| | | </el-button> |
| | | <el-button |
| | | type="success" |
| | | @click="handleComplete" |
| | | :loading="confirmLoading" |
| | | > |
| | | 宿å©ç¨ |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="6"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-card> |
| | | </el-card> |
| | | <el-card class="detail-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">é使ç®ä¿¡æ¯</span> |
| | | |
| | | </div> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="6"> |
| | | <el-form-item align="left" label="é使ç®" prop="isbodydonation"> |
| | | <el-radio-group v-model="form.isbodydonation"> |
| | | <el-radio |
| | | v-for="dict in dict.type.sys_0_1 || []" |
| | | :key="dict.value" |
| | | :label="dict.value" |
| | | >{{ dict.label }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="18" v-if="form.isbodydonation==1"> |
| | | <el-form-item |
| | | align="left" |
| | | label="æ¥æ¶åä½" |
| | | prop="receivingunitname" |
| | | > |
| | | <el-input |
| | | v-model="form.receivingunitname" |
| | | placeholder="请è¾å
¥æ¥æ¶åä½" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8" v-else> |
| | | <el-form-item |
| | | align="left" |
| | | label="æ¥æ¶å®¶å±" |
| | | prop="relationname" |
| | | > |
| | | <el-input |
| | | v-model="form.relationname" |
| | | placeholder="请è¾å
¥æ¥æ¶å®¶å±" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | </el-form> |
| | | <!-- å¨å®å©ç¨è®°å½é¨å - æ´ååè
详æ
--> |
| | | <el-card class="utilization-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">å¨å®å©ç¨è®°å½</span> |
| | | <div style="float: right;"> |
| | | <dict-tag |
| | | <dict-tag |
| | | :options="dict.type.utilize_statue" |
| | | :value="form.completeState" |
| | | /> |
| | |
| | | <el-input v-model="scope.row.name" placeholder="åè
å§å" /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="æä½" |
| | | align="center" |
| | | class-name="small-padding fixed-width" |
| | | v-if="form.completeState !== '3'" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleEditUtilization(scope.row)" |
| | | > |
| | | ç¼è¾ |
| | | </el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | style="color: #F56C6C;" |
| | | @click="handleRemoveOrgan(scope.$index)" |
| | | v-if="!scope.row.id" |
| | | > |
| | | å é¤ |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | </div> |
| | | </el-card> |
| | | |
| | | <!-- ç¼è¾å©ç¨è®°å½å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | | title="ç¼è¾å¨å®å©ç¨è®°å½" |
| | | :visible.sync="editDialogVisible" |
| | | width="600px" |
| | | > |
| | | <el-form :model="currentRecord" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¨å®åç§°"> |
| | | <el-input v-model="currentRecord.organname" readonly /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç§»æ¤ç¶æ"> |
| | | <el-select |
| | | v-model="currentRecord.transplantstate" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="dict in transplantStatusList" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-form-item |
| | | label="æªç§»æ¤åå " |
| | | v-if="currentRecord.transplantstate === '0'" |
| | | > |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | v-model="currentRecord.abandonreason" |
| | | placeholder="请è¾å
¥æªç§»æ¤åå " |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="ç§»æ¤å»é¢" |
| | | v-if="currentRecord.transplantstate === '1'" |
| | | > |
| | | <el-select |
| | | v-model="currentRecord.hospitalno" |
| | | placeholder="è¯·éæ©ç§»æ¤å»é¢" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="hospital in hospitalList" |
| | | :key="hospital.hospitalNo" |
| | | :label="hospital.hospitalName" |
| | | :value="hospital.hospitalNo" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="åè
å§å" |
| | | v-if="currentRecord.transplantstate === '1'" |
| | | > |
| | | <el-input v-model="currentRecord.name" placeholder="请è¾å
¥åè
å§å" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer"> |
| | | <el-button @click="editDialogVisible = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="handleEditConfirm">确认</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- æä»¶é¢è§å¯¹è¯æ¡ --> |
| | | <FilePreviewDialog |
| | | :visible="filePreviewVisible" |
| | |
| | | FilePreviewDialog, |
| | | CaseBasicInfo |
| | | }, |
| | | dicts: ["sys_BloodType", "sys_Organ", "sys_0_1",'utilize_statue'], |
| | | dicts: ["sys_BloodType", "sys_Organ", "sys_0_1", "utilize_statue"], |
| | | data() { |
| | | return { |
| | | caseId: null, |
| | |
| | | // è¡å±å¼äºä»¶ |
| | | handleExpandChange(row, expandedRows) { |
| | | this.expandedRows = expandedRows.map(item => item.organno); |
| | | }, |
| | | |
| | | // ç¼è¾å©ç¨è®°å½ |
| | | handleEditUtilization(row) { |
| | | const index = this.utilizationData.serviceDonatecomporganList.findIndex( |
| | | item => item.organno === row.organno |
| | | ); |
| | | if (index !== -1) { |
| | | this.currentRecord = { ...row }; |
| | | this.currentEditIndex = index; |
| | | this.editDialogVisible = true; |
| | | } |
| | | }, |
| | | |
| | | // 确认ç¼è¾ |
| | | handleEditConfirm() { |
| | | if (this.currentEditIndex !== -1) { |
| | | this.utilizationData.serviceDonatecomporganList[ |
| | | this.currentEditIndex |
| | | ] = { |
| | | ...this.currentRecord |
| | | }; |
| | | this.$message.success("å©ç¨è®°å½æ´æ°æå"); |
| | | this.editDialogVisible = false; |
| | | } |
| | | }, |
| | | |
| | | // å é¤å¨å®è®°å½ |
| | |
| | | .recipient-form { |
| | | padding: 15px; |
| | | } |
| | | |
| | | .attachment-header { |
| | | flex-wrap: wrap; |
| | | } |
| | |
| | | margin-top: 8px; |
| | | margin-left: 0; |
| | | } |
| | | |
| | | .form-section { |
| | | margin-bottom: 20px; |
| | | padding-bottom: 15px; |
| | |
| | | :inline="true" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="æç®è
å§å" prop="donorName"> |
| | | <el-form-item label="å§å" prop="donorName"> |
| | | <el-input |
| | | v-model="queryParams.donorName" |
| | | placeholder="请è¾å
¥æç®è
å§å" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æå¨å»çæºæ" prop="hospitalName"> |
| | | <el-form-item label="䏿¥å»é¢" prop="hospitalName"> |
| | | <el-input |
| | | v-model="queryParams.hospitalName" |
| | | placeholder="请è¾å
¥å»çæºæ" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸å¡äººå" prop="assignee"> |
| | | <el-input |
| | | v-model="queryParams.assignee" |
| | | placeholder="请è¾å
¥ä¸å¡äººå" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | |
| | | end-placeholder="ç»ææ¥æ" |
| | | value-format="yyyy-MM-dd" |
| | | style="width: 240px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="åè°å" prop="assignee"> |
| | | <el-input |
| | | v-model="queryParams.assignee" |
| | | placeholder="请è¾å
¥åè°å" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column |
| | | label="ä½é¢å·" |
| | | label="æ¡ä¾ç¼å·" |
| | | align="center" |
| | | prop="inpatientno" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="æ½å¨æç®è
å§å" |
| | | label="å§å" |
| | | align="center" |
| | | prop="name" |
| | | width="120" |
| | |
| | | min-width="180" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="æå¨å»çæºæ" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | <!-- <el-table-column |
| | | label="ç¡®è®¤ç¶æ" |
| | | align="center" |
| | |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> --> |
| | | |
| | | <el-table-column |
| | | label="家屿è§" |
| | | align="center" |
| | | prop="relativeRemark" |
| | | width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="确认æ¶é´" |
| | | align="center" |
| | |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="ä¸å¡äººå" |
| | | label="家屿è§" |
| | | align="center" |
| | | prop="responsibleusername" |
| | | width="100" |
| | | prop="relativeRemark" |
| | | width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="åè°å1" |
| | |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="䏿¥å»é¢" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="䏿¥äººå" |
| | | align="center" |
| | | prop="responsibleusername" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="æä½" |
| | | align="center" |
| | | width="120" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æç®è
å§å" prop="name"> |
| | | <el-form-item label="å§å" prop="name"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="请è¾å
¥æç®è
å§å" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æ¡ä¾ç¼å·" prop="caseNo"> |
| | | <el-input |
| | | v-model="queryParams.caseNo" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="åé
ç¶æ" prop="allocationStatus"> |
| | | <el-select |
| | | v-model="queryParams.allocationStatus" |
| | |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <<<<<<< HEAD |
| | | <!-- |
| | | <el-table-column |
| | | ======= |
| | | <!-- <el-table-column |
| | | >>>>>>> 059398ad3ad81ea49dfb75ac09f268bc0b0f6145 |
| | | label="æ¡ä¾ç¼å·" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="120" |
| | | /> --> |
| | | |
| | | <el-table-column label="å§å" align="center" prop="name" width="100" /> |
| | | <el-table-column |
| | | label="ä½é¢å·" |
| | | align="center" |
| | | prop="inpatientno" |
| | | width="120" |
| | | <<<<<<< HEAD |
| | | /> |
| | | <el-table-column label="æ§å«" align="center" prop="sex" width="80"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_user_sex" |
| | | :value="scope.row.sex" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¹´é¾" align="center" prop="age" width="80" /> |
| | | <el-table-column |
| | | label="è¡å" |
| | | label="æç®è
ç¼å·" |
| | | align="center" |
| | | prop="bloodtype" |
| | | width="80" |
| | | prop="donorno" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="è¯ä»¶å·ç " |
| | |
| | | width="180" |
| | | /> |
| | | <el-table-column |
| | | label="ç¾ç
è¯æ" |
| | | label="è¡å" |
| | | align="center" |
| | | prop="diagnosisname" |
| | | min-width="180" |
| | | show-overflow-tooltip |
| | | prop="bloodtype" |
| | | width="80" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="å»çæºæ" |
| | | align="center" |
| | |
| | | min-width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | --> |
| | | ======= |
| | | /> --> |
| | | |
| | | <el-table-column label="å§å" align="center" prop="name" width="100" /> |
| | | >>>>>>> 059398ad3ad81ea49dfb75ac09f268bc0b0f6145 |
| | | <el-table-column |
| | | label="ä½é¢å·" |
| | | align="center" |
| | | prop="inpatientno" |
| | | width="120" |
| | | /> |
| | | <el-table-column label="å§å" align="center" prop="name" width="100" /> |
| | | <el-table-column label="æ§å«" align="center" prop="sex" width="80"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_user_sex" |
| | | :value="scope.row.sex" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¹´é¾" align="center" prop="age" width="80" /> |
| | | <el-table-column |
| | | label="ç¾ç
è¯æ" |
| | | align="center" |
| | | prop="diagnosisname" |
| | | min-width="180" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="åé
ç¶æ" |
| | | align="center" |
| | |
| | | <!-- <el-descriptions-item label="é¨é¨ç¼å·">{{ |
| | | caseData.deptNo || "-" |
| | | }}</el-descriptions-item> --> |
| | | |
| | | </el-descriptions> |
| | | </el-card> |
| | | |
| | |
| | | <span class="section-title">䏿¥ä¿¡æ¯</span> |
| | | </div> |
| | | <el-descriptions :column="2" border> |
| | | <el-descriptions-item label="䏿¥å»é¢">{{ |
| | | <el-descriptions-item label="䏿¥å»é¢">{{ |
| | | caseData.toHospital || "-" |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ¥åè
å§å">{{ |
| | |
| | | {{ caseData.reportStatus === "3" ? "å·²åæ" : "已驳å" }} |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item |
| | | label="驳ååå " |
| | | v-if="caseData.reportStatus == 4" |
| | | > |
| | | <dict-tag |
| | | :options="dict.type.reject_type" |
| | | :value="caseData.rejectType" |
| | | /> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="审æ¹äºº">{{ |
| | | caseData.updateBy || "-" |
| | | }}</el-descriptions-item> |
| | |
| | | formatDateTime(caseData.updateTime) |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="å®¡æ¹æè§">{{ |
| | | caseData.remark || "æ " |
| | | caseData.confirmResult || "æ " |
| | | }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | </el-card> |
| | |
| | | default: true |
| | | } |
| | | }, |
| | | dicts: ["sys_user_sex", "sys_BloodType",'sys_Infectious'], |
| | | dicts: ["sys_user_sex", "sys_BloodType", "sys_Infectious", "reject_type"], |
| | | data() { |
| | | return { |
| | | // é¢è§ç¸å
³ |
| | |
| | | currentPreviewFile: null, |
| | | |
| | | // å¾çé¢è§ç¸å
³ |
| | | imagePreviewUrls: [] |
| | | imagePreviewUrls: [], |
| | | rejectOptions: [ |
| | | { label: "好转", value: "1" }, |
| | | { label: "æ»äº¡", value: "2" }, |
| | | { label: "ä¸ç¬¦åæç®æ å", value: "3" }, |
| | | { label: "家屿¾å¼æç®", value: "4" }, |
| | | { label: "å
¶ä»", value: "5" } |
| | | ] |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | /** å建转è¿å */ |
| | | handleCreateTransport() { |
| | | this.$router.push({ |
| | | path: "/business/transport/create", |
| | | path: "/report/transfer", |
| | | query: { |
| | | autoCreate: "true", |
| | | caseId: this.caseData.id, |
| | | caseNo: this.caseData.caseNo, |
| | | patName: this.caseData.name, |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <!-- æç´¢çéåºå --> |
| | | <el-card class="filter-card"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryForm" |
| | | :inline="true" |
| | | class="demo-form-inline" |
| | | > |
| | | <el-form-item label="å§å" prop="name"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="请è¾å
¥æ£è
å§å" |
| | | clearable |
| | | style="width: 200px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="䏿¥å»é¢" prop="caseNo"> |
| | | <el-input |
| | | v-model="queryParams.caseNo" |
| | | placeholder="请è¾å
¥ä¸æ¥æ¡ä¾ç¼å·" |
| | | clearable |
| | | style="width: 200px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="䏿¥ç¶æ" prop="reportStatus"> |
| | | <el-select |
| | | v-model="queryParams.reportStatus" |
| | | placeholder="è¯·éæ©ç¶æ" |
| | | clearable |
| | | style="width: 200px" |
| | | > |
| | | <el-option label="å
¨é¨" value="" /> |
| | | <el-option label="å·²é
读" value="2" /> |
| | | <el-option label="å·²åæ" value="3" /> |
| | | <el-option label="已驳å" value="4" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" @click="handleQuery" |
| | | >æç´¢</el-button |
| | | > |
| | | <el-button icon="el-icon-refresh" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | |
| | | <!-- æä½æé®åºå --> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button type="primary" plain icon="el-icon-plus" @click="handleAdd" |
| | | >æ°å¢æ¡ä¾</el-button |
| | | > |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | >å é¤</el-button |
| | | > |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="caseList" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | |
| | | <el-table-column |
| | | label="ç¼å·" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="150" |
| | | fixed |
| | | /> |
| | | <el-table-column |
| | | label="å§å" |
| | | align="center" |
| | | prop="name" |
| | | width="100" |
| | | fixed |
| | | /> |
| | | <el-table-column |
| | | label="䏿¥ç¶æ" |
| | | align="center" |
| | | prop="reportStatus" |
| | | width="100" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.reportStatus | statusFilter"> |
| | | {{ scope.row.reportStatus | statusTextFilter }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="转è¿" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-tag :type="getTransportStatusTag(scope.row)"> |
| | | {{ getTransportStatusText(scope.row) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ§å«" align="center" prop="sex" width="80"> |
| | | <template #default="scope"> |
| | | <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.sex" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¹´é¾" align="center" prop="age" width="80" /> |
| | | <el-table-column label="è¡å" align="center" prop="bloodType" width="80"> |
| | | <template #default="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_BloodType" |
| | | :value="scope.row.bloodType" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="ç¾ç
è¯æ" |
| | | align="center" |
| | | prop="diagnosisname" |
| | | min-width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="GCSè¯å" |
| | | align="center" |
| | | prop="gcsScore" |
| | | width="80" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="䏿¥å»é¢" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="150" |
| | | /> |
| | | <el-table-column |
| | | label="䏿¥æ¶é´" |
| | | align="center" |
| | | prop="reporttime" |
| | | width="160" |
| | | /> |
| | | <el-table-column label="æä½" align="center" fixed="right" width="300"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="handleDetail(scope.row)" |
| | | >详æ
</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleEdit(scope.row)" |
| | | v-if=" |
| | | scope.row.reportStatus !== '3' && |
| | | scope.row.reportStatus !== '4' && |
| | | scope.row.delFlag === 0 |
| | | " |
| | | >ç¼è¾</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-check" |
| | | @click="handleApprove(scope.row)" |
| | | v-if="scope.row.reportStatus === '2' && scope.row.delFlag === 0" |
| | | >确认</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-truck" |
| | | :type="getTransportStatustype(scope.row)" |
| | | @click="handleTransport(scope.row)" |
| | | v-if="shouldShowTransportButton(scope.row)" |
| | | :disabled="!canGoToTransport(scope.row)" |
| | | > |
| | | {{ getTransportButtonText(scope.row) }} |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <!-- å页 --> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | |
| | | <!-- æ¡ä¾è¯¦æ
å¼¹æ¡ --> |
| | | <el-dialog |
| | | :title="detailTitle" |
| | | :visible.sync="detailOpen" |
| | | width="900px" |
| | | append-to-body |
| | | :close-on-click-modal="false" |
| | | > |
| | | <case-detail :caseData="currentCase" @close="detailOpen = false" /> |
| | | </el-dialog> |
| | | |
| | | <!-- ç¡®è®¤å¼¹æ¡ --> |
| | | <el-dialog |
| | | title="æ¡ä¾ç¡®è®¤" |
| | | :visible.sync="approveOpen" |
| | | width="80vw" |
| | | append-to-body |
| | | class="approve-dialog" |
| | | > |
| | | <el-container style="height: 800px;"> |
| | | <!-- å·¦ä¾§ï¼æ¡ä¾è¯¦æ
--> |
| | | <el-aside |
| | | width="50vw" |
| | | style="background: #f8f9fa; padding: 20px; overflow-y: auto;" |
| | | > |
| | | <div class="approve-detail-preview"> |
| | | <h3 style="margin-bottom: 15px; color: #303133;">æ¡ä¾è¯¦æ
é¢è§</h3> |
| | | <case-detail :caseData="currentCase" :showtitle="false" /> |
| | | </div> |
| | | </el-aside> |
| | | |
| | | <!-- å³ä¾§ï¼ç¡®è®¤è¡¨å --> |
| | | <el-main style="padding: 20px;"> |
| | | <el-form |
| | | ref="approveForm" |
| | | :model="approveForm" |
| | | :rules="approveRules" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="ç¡®è®¤ç»æ" prop="approveResult"> |
| | | <el-radio-group v-model="approveForm.approveResult"> |
| | | <el-radio label="3">åæ</el-radio> |
| | | <el-radio label="4">驳å</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="确认æè§" prop="approveOpinion"> |
| | | <el-input |
| | | type="textarea" |
| | | v-model="approveForm.approveOpinion" |
| | | placeholder="请è¾å
¥è¯¦ç»ç确认æè§ï¼å
æ¬éè¿æé©³åççç±" |
| | | :rows="6" |
| | | maxlength="500" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-main> |
| | | </el-container> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="approveOpen = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="submitApprove">ç¡®å®</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- æ°å¢/ç¼è¾æ¡ä¾å¼¹æ¡ --> |
| | | <el-dialog |
| | | :title="`${isEditing ? 'ç¼è¾' : 'æ°å¢'}æ¡ä¾`" |
| | | :visible.sync="editOpen" |
| | | width="68%" |
| | | append-to-body |
| | | :close-on-click-modal="false" |
| | | @close="handleEditClose" |
| | | > |
| | | <el-form |
| | | ref="editForm" |
| | | :model="editForm" |
| | | :rules="editRules" |
| | | label-width="120px" |
| | | > |
| | | <!-- åºæ¬ä¿¡æ¯ --> |
| | | <el-card class="form-section" shadow="never"> |
| | | <div slot="header" class="section-header"> |
| | | <i |
| | | class="el-icon-user" |
| | | style="color: #409EFF; margin-right: 8px;" |
| | | ></i> |
| | | <span>åºæ¬ä¿¡æ¯</span> |
| | | </div> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¡ä¾ç¼å·" prop="caseNo"> |
| | | <el-input |
| | | v-model="editForm.caseNo" |
| | | placeholder="请è¾å
¥æ¡ä¾ç¼å·" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ£è
å§å" prop="name"> |
| | | <el-input |
| | | v-model="editForm.name" |
| | | placeholder="请è¾å
¥æ£è
å§å" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ§å«" prop="sex"> |
| | | <el-select |
| | | v-model="editForm.sex" |
| | | placeholder="è¯·éæ©æ§å«" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="ç·" value="0" /> |
| | | <el-option label="女" value="1" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¹´é¾" prop="age"> |
| | | <el-input-number |
| | | v-model="editForm.age" |
| | | :min="0" |
| | | :max="120" |
| | | placeholder="请è¾å
¥å¹´é¾" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¹´é¾åä½" prop="ageunit"> |
| | | <el-select |
| | | v-model="editForm.ageunit" |
| | | placeholder="è¯·éæ©å¹´é¾åä½" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="å²" value="year" /> |
| | | <el-option label="æ" value="month" /> |
| | | <el-option label="天" value="day" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¡å" prop="bloodType"> |
| | | <el-select |
| | | v-model="editForm.bloodType" |
| | | placeholder="è¯·éæ©è¡å" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="Aå" :value="1" /> |
| | | <el-option label="Bå" :value="2" /> |
| | | <el-option label="Oå" :value="3" /> |
| | | <el-option label="ABå" :value="4" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="Rhé´æ§" prop="rhYin"> |
| | | <el-radio-group v-model="editForm.rhYin"> |
| | | <el-radio label="0">å¦</el-radio> |
| | | <el-radio label="1">æ¯</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åºçæ¥æ" prop="birthday"> |
| | | <el-date-picker |
| | | v-model="editForm.birthday" |
| | | type="date" |
| | | placeholder="éæ©åºçæ¥æ" |
| | | value-format="yyyy-MM-dd" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯ä»¶ç±»å" prop="idcardtype"> |
| | | <el-select |
| | | v-model="editForm.idcardtype" |
| | | placeholder="è¯·éæ©è¯ä»¶ç±»å" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in dict.type.sys_IDType" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯ä»¶å·ç " prop="idcardno"> |
| | | <el-input |
| | | v-model="editForm.idcardno" |
| | | placeholder="请è¾å
¥è¯ä»¶å·ç " |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ°æ" prop="nation"> |
| | | <el-input v-model="editForm.nation" placeholder="请è¾å
¥æ°æ" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å½ç±" prop="nationality"> |
| | | <el-input |
| | | v-model="editForm.nationality" |
| | | placeholder="请è¾å
¥å½ç±" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç±è´¯" prop="nativeplace"> |
| | | <el-input |
| | | v-model="editForm.nativeplace" |
| | | placeholder="请è¾å
¥ç±è´¯" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¦å" prop="education"> |
| | | <el-input |
| | | v-model="editForm.education" |
| | | placeholder="请è¾å
¥å¦å" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="èä¸" prop="occupation"> |
| | | <el-input |
| | | v-model="editForm.occupation" |
| | | placeholder="请è¾å
¥èä¸" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="èç³»çµè¯" prop="phone"> |
| | | <el-input |
| | | v-model="editForm.phone" |
| | | placeholder="请è¾å
¥èç³»çµè¯" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | |
| | | <!-- å°åä¿¡æ¯ --> |
| | | <el-card class="form-section" shadow="never"> |
| | | <div slot="header" class="section-header"> |
| | | <i |
| | | class="el-icon-location-information" |
| | | style="color: #67C23A; margin-right: 8px;" |
| | | ></i> |
| | | <span>å°åä¿¡æ¯</span> |
| | | </div> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ·ç±å°åç"> |
| | | <el-input |
| | | v-model="editForm.registerprovincename" |
| | | placeholder="请è¾å
¥æ·ç±å°åç" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ·ç±å°åå¸"> |
| | | <el-input |
| | | v-model="editForm.registercityname" |
| | | placeholder="请è¾å
¥æ·ç±å°åå¸" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ·ç±è¡é"> |
| | | <el-input |
| | | v-model="editForm.registertownname" |
| | | placeholder="请è¾å
¥æ·ç±è¡é" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ·ç±ç¤¾åº"> |
| | | <el-input |
| | | v-model="editForm.registercommunityname" |
| | | placeholder="请è¾å
¥æ·ç±ç¤¾åº" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-form-item label="æ·ç±è¯¦ç»å°å" prop="registeraddress"> |
| | | <el-input |
| | | v-model="editForm.registeraddress" |
| | | type="textarea" |
| | | :rows="2" |
| | | placeholder="请è¾å
¥è¯¦ç»çæ·ç±å°å" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-divider>ç°ä½å°å</el-divider> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç°ä½å°åç"> |
| | | <el-input |
| | | v-model="editForm.residenceprovincename" |
| | | placeholder="请è¾å
¥ç°ä½å°åç" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç°ä½å°åå¸/åº"> |
| | | <el-input |
| | | v-model="editForm.residencecountyname" |
| | | placeholder="请è¾å
¥ç°ä½å°åå¸/åº" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç°ä½å°åè¡é"> |
| | | <el-input |
| | | v-model="editForm.residencetownname" |
| | | placeholder="请è¾å
¥ç°ä½å°åè¡é" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç°ä½å°å社åº"> |
| | | <el-input |
| | | v-model="editForm.residencecommunityname" |
| | | placeholder="请è¾å
¥ç°ä½å°å社åº" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-form-item label="ç°ä½è¯¦ç»å°å" prop="residenceaddress"> |
| | | <el-input |
| | | v-model="editForm.residenceaddress" |
| | | type="textarea" |
| | | :rows="2" |
| | | placeholder="请è¾å
¥è¯¦ç»çç°ä½å°å" |
| | | /> |
| | | </el-form-item> |
| | | </el-card> |
| | | |
| | | <!-- å»çä¿¡æ¯ --> |
| | | <el-card class="form-section" shadow="never"> |
| | | <div slot="header" class="section-header"> |
| | | <i |
| | | class="el-icon-first-aid-kit" |
| | | style="color: #E6A23C; margin-right: 8px;" |
| | | ></i> |
| | | <span>å»çä¿¡æ¯</span> |
| | | </div> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç¾ç
è¯æ" prop="diagnosisname"> |
| | | <el-input |
| | | v-model="editForm.diagnosisname" |
| | | placeholder="请è¾å
¥ç¾ç
è¯æåç§°" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="GCSè¯å" prop="gcsScore"> |
| | | <el-input |
| | | v-model="editForm.gcsScore" |
| | | placeholder="请è¾å
¥GCSè¯å" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-form-item label="ç
æ
æ¦åµ" prop="illnessoverview"> |
| | | <el-input |
| | | v-model="editForm.illnessoverview" |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥ç
æ
æ¦åµ" |
| | | maxlength="500" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="ç
人ç¶åµ" prop="patientstate"> |
| | | <el-input |
| | | v-model="editForm.patientstate" |
| | | type="textarea" |
| | | :rows="2" |
| | | placeholder="请è¾å
¥ç
人ç¶åµ" |
| | | maxlength="200" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¼ æç
æ
åµ" prop="infectious"> |
| | | <el-checkbox-group v-model="editForm.infectious"> |
| | | <el-checkbox |
| | | v-for="item in dict.type.sys_Infectious" |
| | | :label="item.value" |
| | | :value="item.value" |
| | | >{{ item.label }}</el-checkbox |
| | | > |
| | | </el-checkbox-group> |
| | | <!-- <el-input |
| | | v-model="editForm.infectious" |
| | | placeholder="请è¾å
¥ä¼ æç
æ
åµ" |
| | | /> --> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¼ æç
å
¶ä»è¯´æ"> |
| | | <el-input |
| | | v-model="editForm.infectiousOther" |
| | | placeholder="请è¾å
¥ä¼ æç
å
¶ä»è¯´æ" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-form-item label="æ¯å¦éè¦è½¬è¿" prop="isTransport"> |
| | | <el-radio-group v-model="editForm.isTransport"> |
| | | <el-radio label="1">ä¸éè¦</el-radio> |
| | | <el-radio label="2">éè¦</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-card> |
| | | |
| | | <!-- å»é¢ä¿¡æ¯ --> |
| | | <el-card class="form-section" shadow="never"> |
| | | <div slot="header" class="section-header"> |
| | | <i |
| | | class="el-icon-office-building" |
| | | style="color: #909399; margin-right: 8px;" |
| | | ></i> |
| | | <span>å»é¢ä¿¡æ¯</span> |
| | | </div> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ²»çå»é¢" prop="treatmenthospitalname"> |
| | | <el-input |
| | | v-model="editForm.treatmenthospitalname" |
| | | placeholder="请è¾å
¥æ²»çå»é¢åç§°" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ²»çç§å®¤" prop="treatmentdeptname"> |
| | | <el-input |
| | | v-model="editForm.treatmentdeptname" |
| | | placeholder="请è¾å
¥æ²»çç§å®¤åç§°" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä½é¢å·" prop="inpatientno"> |
| | | <el-input |
| | | v-model="editForm.inpatientno" |
| | | placeholder="请è¾å
¥ä½é¢å·" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é¨é¨åç§°" prop="deptName"> |
| | | <el-input |
| | | v-model="editForm.deptName" |
| | | placeholder="请è¾å
¥é¨é¨åç§°" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é¨é¨ç¼å·" prop="deptNo"> |
| | | <el-input |
| | | v-model="editForm.deptNo" |
| | | placeholder="请è¾å
¥é¨é¨ç¼å·" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="䏿¥å»é¢" prop="toHospital"> |
| | | <el-input |
| | | v-model="editForm.toHospital" |
| | | placeholder="请è¾å
¥ä¸æ¥çå»é¢" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | |
| | | <!-- 䏿¥ä¿¡æ¯ --> |
| | | <el-card class="form-section" shadow="never"> |
| | | <div slot="header" class="section-header"> |
| | | <i |
| | | class="el-icon-s-data" |
| | | style="color: #F56C6C; margin-right: 8px;" |
| | | ></i> |
| | | <span>䏿¥ä¿¡æ¯</span> |
| | | </div> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥åè
å§å" prop="infoName"> |
| | | <el-input |
| | | v-model="editForm.infoName" |
| | | placeholder="请è¾å
¥æ¥åè
å§å" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥åè
çµè¯" prop="reporterphone"> |
| | | <el-input |
| | | v-model="editForm.phone" |
| | | placeholder="请è¾å
¥æ¥åè
èç³»çµè¯" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åè°åå§å" prop="coordinatorName"> |
| | | <el-input |
| | | v-model="editForm.coordinatorName" |
| | | placeholder="请è¾å
¥åè°åå§å" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åè°åç¼å·" prop="coordinatorNo"> |
| | | <el-input |
| | | v-model="editForm.coordinatorNo" |
| | | placeholder="请è¾å
¥åè°åç¼å·" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-form-item label="䏿¥ç¶æ" prop="reportStatus"> |
| | | <el-select |
| | | v-model="editForm.reportStatus" |
| | | placeholder="è¯·éæ©ä¸æ¥ç¶æ" |
| | | style="width: 100%" |
| | | :disabled="isEditing" |
| | | > |
| | | <el-option label="已䏿¥" value="1" /> |
| | | <el-option label="å·²é
读" value="2" /> |
| | | <el-option label="å·²åæ" value="3" /> |
| | | <el-option label="已驳å" value="4" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-card> |
| | | |
| | | <!-- éä»¶ä¿¡æ¯ --> |
| | | <el-card class="form-section" shadow="never"> |
| | | <div slot="header" class="section-header"> |
| | | <i |
| | | class="el-icon-folder" |
| | | style="color: #409EFF; margin-right: 8px;" |
| | | ></i> |
| | | <span>éä»¶ä¿¡æ¯</span> |
| | | </div> |
| | | |
| | | <div class="attachment-section"> |
| | | <div class="attachment-header"> |
| | | <i class="el-icon-paperclip"></i> |
| | | <span class="attachment-title">éä»¶ä¸ä¼ </span> |
| | | <span class="attachment-tip" |
| | | >æ¯æä¸ä¼ ç
åãæ£éªæ¥åçæä»¶ (æå¤{{ |
| | | attachmentLimit |
| | | }}个)</span |
| | | > |
| | | </div> |
| | | |
| | | <!-- ä½¿ç¨ UploadAttachment ç»ä»¶ --> |
| | | <UploadAttachment |
| | | ref="uploadAttachment" |
| | | :file-list="attachmentFileList" |
| | | :limit="attachmentLimit" |
| | | :accept="attachmentAccept" |
| | | @change="handleAttachmentChange" |
| | | @upload-success="handleUploadSuccess" |
| | | @upload-error="handleUploadError" |
| | | @remove="handleAttachmentRemove" |
| | | /> |
| | | </div> |
| | | |
| | | <!-- éä»¶å表 --> |
| | | <div |
| | | class="attachment-list" |
| | | v-if="editForm.annexfilesList && editForm.annexfilesList.length > 0" |
| | | > |
| | | <div class="list-title"> |
| | | å·²ä¸ä¼ éä»¶ ({{ editForm.annexfilesList.length }}) |
| | | </div> |
| | | <el-table |
| | | :data="editForm.annexfilesList" |
| | | style="width: 100%" |
| | | size="small" |
| | | border |
| | | > |
| | | <el-table-column label="æä»¶å" min-width="200"> |
| | | <template #default="scope"> |
| | | <i |
| | | class="el-icon-document" |
| | | style="margin-right: 8px; color: #409EFF;" |
| | | ></i> |
| | | <span class="file-name">{{ scope.row.fileName }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä»¶ç±»å" width="100"> |
| | | <template #default="scope"> |
| | | <el-tag size="small">{{ |
| | | getFileType(scope.row.fileName) |
| | | }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å建æ¶é´" width="160"> |
| | | <template #default="scope"> |
| | | <span>{{ formatDateTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="夿³¨" |
| | | min-width="150" |
| | | show-overflow-tooltip |
| | | > |
| | | <template #default="scope"> |
| | | <span>{{ scope.row.remart || "æ " }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" width="200" fixed="right"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | @click="handlePreview(scope.row)" |
| | | > |
| | | é¢è§ |
| | | </el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="danger" |
| | | @click="handleRemoveAttachment(scope.$index)" |
| | | > |
| | | å é¤ |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | |
| | | <!-- 夿³¨ä¿¡æ¯ --> |
| | | <el-card class="form-section" shadow="never"> |
| | | <div slot="header" class="section-header"> |
| | | <i |
| | | class="el-icon-edit" |
| | | style="color: #67C23A; margin-right: 8px;" |
| | | ></i> |
| | | <span>夿³¨ä¿¡æ¯</span> |
| | | </div> |
| | | <el-form-item prop="remark"> |
| | | <el-input |
| | | v-model="editForm.remark" |
| | | type="textarea" |
| | | :rows="4" |
| | | placeholder="请è¾å
¥å¤æ³¨ä¿¡æ¯" |
| | | maxlength="500" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | </el-card> |
| | | </el-form> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="handleEditClose">åæ¶</el-button> |
| | | <el-button type="primary" :loading="saveLoading" @click="handleSave" |
| | | >ä¿å</el-button |
| | | > |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- æä»¶é¢è§å¼¹çª --> |
| | | <FilePreviewDialog |
| | | :visible="previewVisible" |
| | | :file="currentPreviewFile" |
| | | @close="previewVisible = false" |
| | | @download="handleDownload" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import CaseDetail from "./caseDetail"; |
| | | import UploadAttachment from "@/components/UploadAttachment"; |
| | | import FilePreviewDialog from "@/components/FilePreviewDialog"; |
| | | import { |
| | | donateList, |
| | | donateInfo, |
| | | donateDel, |
| | | donateEdit, |
| | | donateAdd |
| | | } from "@/api/businessApi/index"; |
| | | import dayjs from "dayjs"; |
| | | |
| | | export default { |
| | | name: "CaseList", |
| | | components: { |
| | | CaseDetail, |
| | | UploadAttachment, |
| | | FilePreviewDialog |
| | | }, |
| | | dicts: ["sys_user_sex", "sys_BloodType", "sys_Infectious", "sys_IDType"], |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | | loading: false, |
| | | saveLoading: false, |
| | | // é䏿°ç» |
| | | ids: [], |
| | | // éå个ç¦ç¨ |
| | | single: true, |
| | | // éå¤ä¸ªç¦ç¨ |
| | | multiple: true, |
| | | // æ»æ¡æ° |
| | | total: 0, |
| | | // æ¡ä¾è¡¨æ ¼æ°æ® |
| | | caseList: [], |
| | | // 详æ
å¼¹æ¡æ¯å¦æ¾ç¤º |
| | | detailOpen: false, |
| | | // ç¡®è®¤å¼¹æ¡æ¯å¦æ¾ç¤º |
| | | approveOpen: false, |
| | | // ç¼è¾å¼¹æ¡æ¯å¦æ¾ç¤º |
| | | editOpen: false, |
| | | // ç¼è¾ç¶æ |
| | | isEditing: false, |
| | | // 详æ
å¼¹æ¡æ é¢ |
| | | detailTitle: "", |
| | | // å½åæä½çæ¡ä¾ |
| | | currentCase: {}, |
| | | // æ¥è¯¢åæ° |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | caseNo: undefined, |
| | | name: undefined, |
| | | reportStatus: undefined |
| | | }, |
| | | // 确认表å |
| | | approveForm: { |
| | | id: null, |
| | | approveResult: "3", |
| | | approveOpinion: "" |
| | | }, |
| | | // 确认表åéªè¯ |
| | | approveRules: { |
| | | approveResult: [ |
| | | { required: true, message: "è¯·éæ©ç¡®è®¤ç»æ", trigger: "change" } |
| | | ], |
| | | approveOpinion: [ |
| | | { required: true, message: "请è¾å
¥ç¡®è®¤æè§", trigger: "blur" } |
| | | ] |
| | | }, |
| | | // ç¼è¾è¡¨å |
| | | editForm: this.getDefaultFormData(), |
| | | // 表åéªè¯è§å |
| | | editRules: { |
| | | caseNo: [ |
| | | { required: true, message: "请è¾å
¥æ¡ä¾ç¼å·", trigger: "blur" } |
| | | ], |
| | | name: [{ required: true, message: "请è¾å
¥æ£è
å§å", trigger: "blur" }], |
| | | sex: [{ required: true, message: "è¯·éæ©æ§å«", trigger: "change" }], |
| | | age: [{ required: true, message: "请è¾å
¥å¹´é¾", trigger: "blur" }], |
| | | diagnosisname: [ |
| | | { required: true, message: "请è¾å
¥ç¾ç
è¯æ", trigger: "blur" } |
| | | ], |
| | | treatmenthospitalname: [ |
| | | { required: true, message: "请è¾å
¥æ²»çå»é¢", trigger: "blur" } |
| | | ], |
| | | reportStatus: [ |
| | | { required: true, message: "è¯·éæ©ä¸æ¥ç¶æ", trigger: "change" } |
| | | ] |
| | | }, |
| | | // éä»¶ç¸å
³é
ç½® |
| | | attachmentLimit: 10, |
| | | attachmentAccept: ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx", |
| | | attachmentFileList: [], |
| | | // é¢è§ç¸å
³ |
| | | previewVisible: false, |
| | | currentPreviewFile: null |
| | | }; |
| | | }, |
| | | filters: { |
| | | statusFilter(reportStatus) { |
| | | const statusMap = { |
| | | "1": "info", // 已䏿¥ |
| | | "2": "warning", // å·²é
读ï¼å¾
ç¡®è®¤ï¼ |
| | | "3": "success", // å·²åæ |
| | | "4": "danger" // 已驳å |
| | | }; |
| | | return statusMap[reportStatus] || "info"; |
| | | }, |
| | | statusTextFilter(reportStatus) { |
| | | const statusMap = { |
| | | "1": "已䏿¥", |
| | | "2": "å·²é
读", |
| | | "3": "å·²åæ", |
| | | "4": "已驳å" |
| | | }; |
| | | return statusMap[reportStatus] || "æªç¥ç¶æ"; |
| | | } |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | }, |
| | | methods: { |
| | | /** æ¥è¯¢æ¡ä¾å表 */ |
| | | async getList() { |
| | | this.loading = true; |
| | | try { |
| | | const response = await donateList(this.queryParams); |
| | | this.caseList = response.rows || response.data || []; |
| | | this.total = response.total || this.caseList.length; |
| | | } catch (error) { |
| | | console.error("è·åæ¡ä¾å表失败:", error); |
| | | this.$modal.msgError("è·åæ¡ä¾å表失败"); |
| | | this.caseList = []; |
| | | this.total = 0; |
| | | } finally { |
| | | this.loading = false; |
| | | } |
| | | }, |
| | | // 转è¿------------------ |
| | | /** 夿æ¯å¦éè¦æ¾ç¤ºè½¬è¿æé® */ |
| | | shouldShowTransportButton(row) { |
| | | // åªæå·²åæçæ¡ä¾æè½è¿è¡è½¬è¿æä½ |
| | | // return row.reportStatus == "3" && row.delFlag == 0; |
| | | return row.reportStatus != "4"; |
| | | }, |
| | | |
| | | /** 夿æ¯å¦å¯ä»¥è·³è½¬å°è½¬è¿å */ |
| | | canGoToTransport(row) { |
| | | // éè¦è½¬è¿ï¼isTransport === "2"ï¼ä¸æ²¡æè½¬è¿ä¿¡æ¯ï¼serviceTransportä¸åå¨æä¸ºç©ºæ°ç»ï¼ |
| | | return row.isTransport == "2" && row.serviceTransport; |
| | | }, |
| | | |
| | | /** è·åè½¬è¿æé®ææ¬ */ |
| | | getTransportButtonText(row) { |
| | | if (row.isTransport == "2") { |
| | | if ( |
| | | row.serviceTransport && |
| | | Array.isArray(row.serviceTransport) && |
| | | row.serviceTransport.length > 0 |
| | | ) { |
| | | return "æ¥ç转è¿å"; |
| | | } else { |
| | | return "å建转è¿å"; |
| | | } |
| | | } |
| | | return "æ é转è¿"; |
| | | }, |
| | | getTransportStatustype(row) { |
| | | if (row.isTransport == "1") { |
| | | return "info"; // ä¸éè¦è½¬è¿ |
| | | } |
| | | if ( |
| | | row.serviceTransport && |
| | | Array.isArray(row.serviceTransport) && |
| | | row.serviceTransport.length > 0 |
| | | ) { |
| | | // æ ¹æ®è½¬è¿åç¶ææ¾ç¤ºä¸åé¢è² |
| | | const transport = row.serviceTransport[0]; |
| | | if (transport.transitStatus) { |
| | | return "primary"; // æè½¬è¿ä¿¡æ¯ä½æ ç¶æ |
| | | } |
| | | return "primary"; // æè½¬è¿ä¿¡æ¯ä½æ ç¶æ |
| | | } |
| | | return "success"; // éè¦è½¬è¿ä½æ 转è¿ä¿¡æ¯ |
| | | }, |
| | | /** è·å转è¿ç¶ææ ç¾æ ·å¼ */ |
| | | getTransportStatusTag(row) { |
| | | if (row.isTransport === "1") { |
| | | return "info"; // ä¸éè¦è½¬è¿ |
| | | } |
| | | if ( |
| | | row.serviceTransport && |
| | | Array.isArray(row.serviceTransport) && |
| | | row.serviceTransport.length > 0 |
| | | ) { |
| | | // æ ¹æ®è½¬è¿åç¶ææ¾ç¤ºä¸åé¢è² |
| | | const transport = row.serviceTransport[0]; |
| | | if (transport.transitStatus) { |
| | | switch (transport.transitStatus.toString()) { |
| | | case "1": |
| | | return "warning"; // å¾
è½¬è¿ |
| | | case "2": |
| | | return "primary"; // 转è¿ä¸ |
| | | case "3": |
| | | return "success"; // 转è¿å®æ |
| | | case "4": |
| | | return "danger"; // 转è¿åæ¶ |
| | | case "5": |
| | | return "info"; // æå |
| | | default: |
| | | return "info"; |
| | | } |
| | | } |
| | | return "primary"; // æè½¬è¿ä¿¡æ¯ä½æ ç¶æ |
| | | } |
| | | return "success"; // éè¦è½¬è¿ä½æ 转è¿ä¿¡æ¯ |
| | | }, |
| | | |
| | | /** è·å转è¿ç¶æææ¬ */ |
| | | getTransportStatusText(row) { |
| | | if (row.isTransport === "1") { |
| | | return "æ é转è¿"; |
| | | } |
| | | if ( |
| | | row.serviceTransport && |
| | | Array.isArray(row.serviceTransport) && |
| | | row.serviceTransport.length > 0 |
| | | ) { |
| | | const transport = row.serviceTransport[0]; |
| | | if (transport.transitStatus) { |
| | | switch (transport.transitStatus.toString()) { |
| | | case "1": |
| | | return "å¾
转è¿"; |
| | | case "2": |
| | | return "转è¿ä¸"; |
| | | case "3": |
| | | return "转è¿å®æ"; |
| | | case "4": |
| | | return "转è¿åæ¶"; |
| | | case "5": |
| | | return "æå"; |
| | | default: |
| | | return "æè½¬è¿å"; |
| | | } |
| | | } |
| | | return "æè½¬è¿å"; |
| | | } |
| | | return "é转è¿"; |
| | | }, |
| | | |
| | | /** å¤çè½¬è¿æä½ */ |
| | | async handleTransport(row) { |
| | | try { |
| | | // å
è·åææ°çæ¡ä¾ä¿¡æ¯ |
| | | const caseData = row; |
| | | |
| | | if (caseData.isTransport == "2") { |
| | | if ( |
| | | caseData.serviceTransport && |
| | | Array.isArray(caseData.serviceTransport) && |
| | | caseData.serviceTransport.length > 0 |
| | | ) { |
| | | // å·²æè½¬è¿åï¼è·³è½¬å°è½¬è¿å详æ
页 |
| | | const transport = caseData.serviceTransport[0]; |
| | | this.goToTransportDetail(transport.id, row.name); |
| | | } else { |
| | | // 没æè½¬è¿åï¼è·³è½¬å°å建转è¿åé¡µé¢ |
| | | this.goToCreateTransport(row); |
| | | } |
| | | } else { |
| | | this.$message.warning("该æ¡ä¾ä¸éè¦è½¬è¿"); |
| | | } |
| | | } catch (error) { |
| | | console.error("è·åæ¡ä¾ä¿¡æ¯å¤±è´¥:", error); |
| | | this.$message.error("è·åæ¡ä¾ä¿¡æ¯å¤±è´¥"); |
| | | } |
| | | }, |
| | | |
| | | /** 跳转å°å建转è¿åé¡µé¢ */ |
| | | goToCreateTransport(caseData) { |
| | | // æ¹å¼1ï¼å¨æ°é¡µé¢æå¼ |
| | | this.$router.push({ |
| | | path: "/report/transfer", |
| | | query: { |
| | | autoCreate: "true", //è·³è½¬è½¬è¿æ è¯ |
| | | caseId: caseData.id, |
| | | caseNo: caseData.caseNo, |
| | | patName: caseData.name, |
| | | age: caseData.age, |
| | | sex: caseData.sex, |
| | | diagnosisname: caseData.diagnosisname, |
| | | treatmentHospitalName: caseData.treatmenthospitalname |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | /** æå¼è½¬è¿åå¼¹æ¡ */ |
| | | openTransportDialog(caseData) { |
| | | this.$modal.confirm({ |
| | | title: "å建转è¿å", |
| | | message: `æ¨å°å建æ¡ä¾ã${caseData.caseNo} - ${caseData.name}ãç转è¿åï¼æ¯å¦ç»§ç»ï¼`, |
| | | confirmButtonText: "åå¾å建", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | beforeClose: (action, instance, done) => { |
| | | if (action === "confirm") { |
| | | // 跳转å°è½¬è¿ååå»ºé¡µé¢ |
| | | this.$router.push({ |
| | | path: "/report/transfer", |
| | | query: { |
| | | caseId: caseData.id, |
| | | caseNo: caseData.caseNo, |
| | | patName: caseData.name, |
| | | age: caseData.age, |
| | | sex: caseData.sex, |
| | | diagnosisname: caseData.diagnosisname, |
| | | treatmentHospitalName: caseData.treatmenthospitalname |
| | | } |
| | | }); |
| | | done(); |
| | | } else { |
| | | done(); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | /** 跳转å°è½¬è¿å详æ
页 */ |
| | | goToTransportDetail(transportId, name) { |
| | | this.$router.push({ |
| | | path: "/report/transfer", |
| | | query: { |
| | | autoCreate: "true", |
| | | patName: name |
| | | } |
| | | }); |
| | | }, |
| | | // ---------------------------------end |
| | | // å¤éæ¡é䏿°æ® |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | |
| | | /** æç´¢æé®æä½ */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | caseNo: undefined, |
| | | name: undefined, |
| | | reportStatus: undefined |
| | | }; |
| | | this.getList(); |
| | | }, |
| | | |
| | | /** 详æ
æé®æä½ */ |
| | | async handleDetail(row) { |
| | | try { |
| | | this.currentCase = row; |
| | | |
| | | // å¦æç¶ææ¯"已䏿¥"(1)ï¼åæ´æ°ä¸º"å·²é
读"(2) |
| | | if (this.currentCase.reportStatus === "1") { |
| | | try { |
| | | const updateData = { |
| | | ...this.currentCase, |
| | | reportStatus: "2", |
| | | updateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | updateBy: this.$store.state.user?.name || "å½åç¨æ·" |
| | | }; |
| | | |
| | | await donateEdit(updateData); |
| | | this.currentCase.reportStatus = "2"; |
| | | this.currentCase.updateTime = updateData.updateTime; |
| | | row.reportStatus = "2"; |
| | | this.$modal.msgSuccess("ç¶æå·²æ´æ°ä¸ºå·²é
读"); |
| | | } catch (updateError) { |
| | | console.error("ç¶ææ´æ°å¤±è´¥:", updateError); |
| | | } |
| | | } |
| | | |
| | | this.detailTitle = `æ¡ä¾è¯¦æ
- ${this.currentCase.caseNo || |
| | | row.caseNo}`; |
| | | this.detailOpen = true; |
| | | console.log(this.currentCase, "this.currentCase"); |
| | | } catch (error) { |
| | | console.error("è·åæ¡ä¾è¯¦æ
失败:", error); |
| | | this.currentCase = row; |
| | | this.detailTitle = `æ¡ä¾è¯¦æ
- ${row.caseNo}`; |
| | | this.detailOpen = true; |
| | | } |
| | | }, |
| | | |
| | | /** ç¼è¾æé®æä½ */ |
| | | async handleEdit(row) { |
| | | try { |
| | | const response = await donateInfo(row.id); |
| | | if (response.code === 200 || response.data) { |
| | | this.isEditing = true; |
| | | const data = response.data || response; |
| | | |
| | | // å¤çéä»¶ |
| | | if (data.annexfilesList) { |
| | | this.attachmentFileList = this.parseAttachmentToFileList( |
| | | data.annexfilesList |
| | | ); |
| | | } else { |
| | | this.attachmentFileList = []; |
| | | } |
| | | |
| | | this.currentCase = data; |
| | | this.editForm = { ...data }; |
| | | this.editForm.idcardtype = this.editForm.idcardtype.toString(); |
| | | console.log(this.editForm.idcardtype); |
| | | this.editForm.infectious = this.editForm.infectious |
| | | .split(",") |
| | | .filter(item => item.trim() !== ""); |
| | | |
| | | this.editOpen = true; |
| | | this.$nextTick(() => { |
| | | this.$refs.editForm && this.$refs.editForm.clearValidate(); |
| | | }); |
| | | } else { |
| | | this.$message.error(response.msg || "è·åè®°å½å¤±è´¥"); |
| | | } |
| | | } catch (error) { |
| | | console.error("è·åè®°å½å¤±è´¥:", error); |
| | | this.$modal.msgError("è·åè®°å½å¤±è´¥"); |
| | | } |
| | | }, |
| | | |
| | | /** æ°å¢æé®æä½ */ |
| | | handleAdd() { |
| | | this.isEditing = false; |
| | | this.editForm = this.getDefaultFormData(); |
| | | this.attachmentFileList = []; |
| | | this.editOpen = true; |
| | | this.$nextTick(() => { |
| | | this.$refs.editForm && this.$refs.editForm.clearValidate(); |
| | | }); |
| | | }, |
| | | |
| | | /** 确认æé®æä½ */ |
| | | async handleApprove(row) { |
| | | try { |
| | | const response = await donateInfo(row.id); |
| | | this.currentCase = response.data || response || row; |
| | | |
| | | this.approveForm.id = row.id; |
| | | this.approveForm.approveResult = "3"; |
| | | this.approveForm.approveOpinion = ""; |
| | | |
| | | this.$nextTick(() => { |
| | | if (this.$refs.approveForm) { |
| | | this.$refs.approveForm.clearValidate(); |
| | | } |
| | | }); |
| | | |
| | | this.approveOpen = true; |
| | | } catch (error) { |
| | | console.error("è·åæ¡ä¾è¯¦æ
失败:", error); |
| | | this.currentCase = row; |
| | | this.approveForm.id = row.id; |
| | | this.approveForm.approveResult = "3"; |
| | | this.approveForm.approveOpinion = ""; |
| | | this.approveOpen = true; |
| | | this.$modal.msgError("è·å详æ
失败ï¼ä½å·²æå¼ç¡®è®¤çªå£"); |
| | | } |
| | | }, |
| | | |
| | | /** æäº¤ç¡®è®¤ */ |
| | | async submitApprove() { |
| | | try { |
| | | const valid = await this.$refs.approveForm.validate(); |
| | | if (valid) { |
| | | const approveData = { |
| | | ...this.currentCase, |
| | | reportStatus: this.approveForm.approveResult, |
| | | remark: this.approveForm.approveOpinion, |
| | | approvername: this.$store.state.user?.name || "å½åç¨æ·", |
| | | approvetime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | updateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | updateBy: this.$store.state.user?.name || "å½åç¨æ·" |
| | | }; |
| | | |
| | | await donateEdit(approveData); |
| | | this.$modal.msgSuccess("确认æå"); |
| | | this.approveOpen = false; |
| | | this.getList(); |
| | | } |
| | | } catch (error) { |
| | | console.error("确认失败:", error); |
| | | if (error !== "cancel") { |
| | | this.$modal.msgError("确认失败"); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | /** å é¤æé®æä½ */ |
| | | async handleDelete(row) { |
| | | const ids = row.id || this.ids; |
| | | try { |
| | | await this.$modal.confirm( |
| | | 'æ¯å¦ç¡®è®¤å 餿¡ä¾ç¼å·ä¸º"' + ids + '"çæ°æ®é¡¹ï¼' |
| | | ); |
| | | await donateDel(ids); |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | this.getList(); |
| | | } catch (error) { |
| | | if (error !== "cancel") { |
| | | console.error("å é¤å¤±è´¥:", error); |
| | | this.$modal.msgError("å é¤å¤±è´¥"); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | /** è·åé»è®¤è¡¨åæ°æ® */ |
| | | getDefaultFormData() { |
| | | return { |
| | | id: undefined, |
| | | caseNo: undefined, |
| | | name: undefined, |
| | | sex: undefined, |
| | | age: undefined, |
| | | ageunit: "year", |
| | | bloodType: undefined, |
| | | rhYin: "0", |
| | | birthday: undefined, |
| | | idcardtype: "1", |
| | | idcardno: undefined, |
| | | nation: undefined, |
| | | nationality: undefined, |
| | | nativeplace: undefined, |
| | | education: undefined, |
| | | occupation: undefined, |
| | | phone: undefined, |
| | | // æ·ç±å°å |
| | | registerprovincename: undefined, |
| | | registercityname: undefined, |
| | | registertownname: undefined, |
| | | registercommunityname: undefined, |
| | | registeraddress: undefined, |
| | | // ç°ä½å°å |
| | | residenceprovincename: undefined, |
| | | residencecountyname: undefined, |
| | | residencetownname: undefined, |
| | | residencecommunityname: undefined, |
| | | residenceaddress: undefined, |
| | | // å»çä¿¡æ¯ |
| | | diagnosisname: undefined, |
| | | illnessoverview: undefined, |
| | | patientstate: undefined, |
| | | gcsScore: undefined, |
| | | infectious: undefined, |
| | | infectiousOther: undefined, |
| | | isTransport: "1", |
| | | // å»é¢ä¿¡æ¯ |
| | | treatmenthospitalname: undefined, |
| | | treatmentdeptname: undefined, |
| | | inpatientno: undefined, |
| | | deptName: undefined, |
| | | deptNo: undefined, |
| | | toHospital: undefined, |
| | | // 䏿¥ä¿¡æ¯ |
| | | infoName: undefined, |
| | | infoNo: undefined, |
| | | reporterphone: undefined, |
| | | coordinatorName: undefined, |
| | | coordinatorNo: undefined, |
| | | terminationCase: "0", |
| | | reportStatus: "1", // é»è®¤å·²ä¸æ¥ |
| | | // éä»¶ |
| | | annexfilesList: [], |
| | | // å
¶ä» |
| | | remark: undefined, |
| | | createBy: undefined, |
| | | createTime: undefined, |
| | | updateBy: undefined, |
| | | updateTime: undefined, |
| | | delFlag: 0 |
| | | }; |
| | | }, |
| | | |
| | | /** éä»¶è½¬æ¢ */ |
| | | parseAttachmentToFileList(attachments) { |
| | | if (!attachments || !Array.isArray(attachments)) return []; |
| | | return attachments.map((item, index) => ({ |
| | | uid: item.id || `attachment-${index}-${Date.now()}`, |
| | | name: item.fileName, |
| | | url: item.path || item.fileUrl, |
| | | status: "success", |
| | | raw: item |
| | | })); |
| | | }, |
| | | |
| | | /** éä»¶ååå¤ç */ |
| | | handleAttachmentChange(fileList) { |
| | | this.attachmentFileList = fileList; |
| | | }, |
| | | |
| | | /** éä»¶ä¸ä¼ æåå¤ç */ |
| | | handleUploadSuccess({ file, fileList, response }) { |
| | | if (response && response.code === 200) { |
| | | if (!this.editForm.annexfilesList) { |
| | | this.editForm.annexfilesList = []; |
| | | } |
| | | const attachmentObj = { |
| | | fileName: file.name, |
| | | path: response.data || file.url, |
| | | fileUrl: response.data || file.url, |
| | | type: this.getFileExtension(file.name), |
| | | createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | remart: file.raw?.remart || "", |
| | | caseNo: this.editForm.caseNo |
| | | }; |
| | | |
| | | this.editForm.annexfilesList.push(attachmentObj); |
| | | this.$message.success("æä»¶ä¸ä¼ æå"); |
| | | } |
| | | }, |
| | | |
| | | /** éä»¶ä¸ä¼ é误å¤ç */ |
| | | handleUploadError({ file, fileList, error }) { |
| | | console.error("éä»¶ä¸ä¼ 失败:", error); |
| | | this.$message.error("æä»¶ä¸ä¼ 失败ï¼è¯·éè¯"); |
| | | }, |
| | | |
| | | /** éä»¶ç§»é¤å¤ç */ |
| | | handleAttachmentRemove(file) { |
| | | if (file.url && this.editForm.annexfilesList) { |
| | | const index = this.editForm.annexfilesList.findIndex( |
| | | item => item.path === file.url || item.fileUrl === file.url |
| | | ); |
| | | if (index > -1) { |
| | | this.editForm.annexfilesList.splice(index, 1); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | /** æå¨å é¤éä»¶ */ |
| | | handleRemoveAttachment(index) { |
| | | this.editForm.annexfilesList.splice(index, 1); |
| | | this.attachmentFileList.splice(index, 1); |
| | | this.$message.success("éä»¶å 餿å"); |
| | | }, |
| | | |
| | | /** æä»¶é¢è§ */ |
| | | handlePreview(file) { |
| | | this.currentPreviewFile = { |
| | | fileName: file.fileName, |
| | | fileUrl: file.path || file.fileUrl, |
| | | fileType: this.getFileType(file.fileName) |
| | | }; |
| | | this.previewVisible = true; |
| | | }, |
| | | |
| | | /** æä»¶ä¸è½½ */ |
| | | handleDownload(file) { |
| | | const fileUrl = file.path || file.fileUrl; |
| | | const fileName = file.fileName; |
| | | |
| | | if (fileUrl) { |
| | | const link = document.createElement("a"); |
| | | link.href = fileUrl; |
| | | link.download = fileName; |
| | | link.style.display = "none"; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | this.$message.success("å¼å§ä¸è½½æä»¶"); |
| | | } else { |
| | | this.$message.warning("æä»¶è·¯å¾ä¸åå¨ï¼æ æ³ä¸è½½"); |
| | | } |
| | | }, |
| | | |
| | | /** è·åæä»¶ç±»å */ |
| | | getFileType(fileName) { |
| | | if (!fileName) return "other"; |
| | | const extension = fileName |
| | | .split(".") |
| | | .pop() |
| | | .toLowerCase(); |
| | | const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"]; |
| | | const pdfTypes = ["pdf"]; |
| | | const officeTypes = ["doc", "docx", "xls", "xlsx"]; |
| | | |
| | | if (imageTypes.includes(extension)) return "image"; |
| | | if (pdfTypes.includes(extension)) return "pdf"; |
| | | if (officeTypes.includes(extension)) return "office"; |
| | | return "other"; |
| | | }, |
| | | |
| | | /** è·åæä»¶æ©å±å */ |
| | | getFileExtension(filename) { |
| | | if (!filename) return ""; |
| | | return filename |
| | | .split(".") |
| | | .pop() |
| | | .toLowerCase(); |
| | | }, |
| | | |
| | | /** æ¥ææ¶é´æ ¼å¼å */ |
| | | formatDateTime(dateTime) { |
| | | if (!dateTime) return ""; |
| | | return dayjs(dateTime).format("YYYY-MM-DD HH:mm:ss"); |
| | | }, |
| | | |
| | | /** å
³éç¼è¾å¯¹è¯æ¡ */ |
| | | handleEditClose() { |
| | | this.editOpen = false; |
| | | this.currentCase = {}; |
| | | this.editForm = this.getDefaultFormData(); |
| | | this.attachmentFileList = []; |
| | | this.$nextTick(() => { |
| | | this.$refs.editForm && this.$refs.editForm.clearValidate(); |
| | | }); |
| | | }, |
| | | |
| | | /** ä¿å表å */ |
| | | async handleSave() { |
| | | try { |
| | | const valid = await this.$refs.editForm.validate(); |
| | | if (!valid) return; |
| | | |
| | | const pendingFiles = this.attachmentFileList.filter( |
| | | item => item.status !== "success" |
| | | ); |
| | | if (pendingFiles.length > 0) { |
| | | this.$message.warning( |
| | | "è¿ææä»¶æªä¸ä¼ 宿ï¼è¯·å
ä¸ä¼ æææä»¶æç§»é¤æªä¸ä¼ çæä»¶" |
| | | ); |
| | | return; |
| | | } |
| | | |
| | | this.saveLoading = true; |
| | | |
| | | const requestData = { ...this.editForm }; |
| | | requestData.infectious = requestData.infectious.join(","); |
| | | let response; |
| | | |
| | | if (this.isEditing) { |
| | | response = await donateEdit(requestData); |
| | | } else { |
| | | // æ°å¢æ¶è®¾ç½®åå»ºä¿¡æ¯ |
| | | requestData.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss"); |
| | | requestData.createBy = this.$store.state.user?.name || "å½åç¨æ·"; |
| | | response = await donateAdd(requestData); |
| | | } |
| | | |
| | | if (response.code === 200) { |
| | | this.$message.success(this.isEditing ? "ä¿®æ¹æå" : "æ°å¢æå"); |
| | | this.handleEditClose(); |
| | | this.getList(); |
| | | } else { |
| | | this.$message.error(response.msg || "æä½å¤±è´¥"); |
| | | } |
| | | } catch (error) { |
| | | console.error("ä¿å失败:", error); |
| | | this.$message.error("æä½å¤±è´¥ï¼è¯·ç¨åéè¯"); |
| | | } finally { |
| | | this.saveLoading = false; |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .app-container { |
| | | padding: 20px; |
| | | } |
| | | |
| | | .filter-card { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .mb8 { |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | /* 表ååºåæ ·å¼ */ |
| | | .form-section { |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .section-header { |
| | | display: flex; |
| | | align-items: center; |
| | | font-weight: bold; |
| | | color: #303133; |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: right; |
| | | padding: 20px 0 0; |
| | | } |
| | | |
| | | /* éä»¶æ ·å¼ */ |
| | | .attachment-section { |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .attachment-header { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 16px; |
| | | padding: 8px 0; |
| | | border-bottom: 1px solid #ebeef5; |
| | | } |
| | | |
| | | .attachment-title { |
| | | font-weight: bold; |
| | | margin: 0 8px; |
| | | } |
| | | |
| | | .attachment-tip { |
| | | font-size: 12px; |
| | | color: #909399; |
| | | } |
| | | |
| | | .attachment-list { |
| | | margin-top: 16px; |
| | | } |
| | | |
| | | .list-title { |
| | | font-weight: bold; |
| | | margin-bottom: 12px; |
| | | color: #303133; |
| | | } |
| | | |
| | | .file-name { |
| | | font-size: 13px; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | /* ç¡®è®¤å¼¹æ¡æ ·å¼ */ |
| | | .approve-dialog >>> .el-dialog__body { |
| | | padding: 0; |
| | | } |
| | | |
| | | .approve-detail-preview { |
| | | height: 100%; |
| | | } |
| | | |
| | | /* ååºå¼è®¾è®¡ */ |
| | | @media (max-width: 1200px) { |
| | | .approve-dialog { |
| | | width: 95% !important; |
| | | } |
| | | |
| | | .el-aside { |
| | | width: 50% !important; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | :inline="true" |
| | | class="demo-form-inline" |
| | | > |
| | | <el-form-item label="æ¡ä¾ç¼å·" prop="caseNo"> |
| | | <el-input |
| | | v-model="queryParams.caseNo" |
| | | placeholder="请è¾å
¥æ¡ä¾ç¼å·" |
| | | clearable |
| | | style="width: 200px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ£è
å§å" prop="name"> |
| | | <el-form-item label="å§å" prop="name"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="请è¾å
¥æ£è
å§å" |
| | |
| | | style="width: 200px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¡ä¾ç¶æ" prop="reportStatus"> |
| | | <el-form-item label="䏿¥å»é¢" prop="caseNo"> |
| | | <el-input |
| | | v-model="queryParams.caseNo" |
| | | placeholder="请è¾å
¥ä¸æ¥æ¡ä¾ç¼å·" |
| | | clearable |
| | | style="width: 200px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="䏿¥ç¶æ" prop="reportStatus"> |
| | | <el-select |
| | | v-model="queryParams.reportStatus" |
| | | placeholder="è¯·éæ©ç¶æ" |
| | |
| | | |
| | | <!-- æä½æé®åºå --> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <!-- <el-col :span="1.5"> |
| | | <el-button type="primary" plain icon="el-icon-plus" @click="handleAdd" |
| | | >æ°å¢æ¡ä¾</el-button |
| | | > |
| | | </el-col> --> |
| | | |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | |
| | | </el-row> |
| | | |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="caseList" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | |
| | | <el-table-column |
| | | label="æ¡ä¾ç¼å·" |
| | | label="ç¼å·" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="150" |
| | | fixed |
| | | /> |
| | | <el-table-column |
| | | label="䏿¥æ¶é´" |
| | | label="å§å" |
| | | align="center" |
| | | prop="reporttime" |
| | | width="160" |
| | | prop="name" |
| | | width="100" |
| | | fixed |
| | | /> |
| | | <el-table-column |
| | | label="ç¶æ" |
| | | label="䏿¥ç¶æ" |
| | | align="center" |
| | | prop="reportStatus" |
| | | width="100" |
| | |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="转è¿ç¶æ" align="center" width="100"> |
| | | <el-table-column label="转è¿" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-tag :type="getTransportStatusTag(scope.row)"> |
| | | {{ getTransportStatusText(scope.row) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æ£è
å§å" |
| | | align="center" |
| | | prop="name" |
| | | width="100" |
| | | /> |
| | | <el-table-column label="æ§å«" align="center" prop="sex" width="80"> |
| | | <template #default="scope"> |
| | | <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.sex" /> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="GCSè¯å" |
| | | align="center" |
| | | prop="gcsScore" |
| | | width="80" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="ç¾ç
è¯æ" |
| | | align="center" |
| | | prop="diagnosisname" |
| | |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="æ²»çå»é¢" |
| | | label="GCSè¯å" |
| | | align="center" |
| | | prop="gcsScore" |
| | | width="80" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="䏿¥å»é¢" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="150" |
| | | /> |
| | | |
| | | <el-table-column label="æä½" align="center" fixed="right" width="350"> |
| | | <el-table-column |
| | | label="䏿¥æ¶é´" |
| | | align="center" |
| | | prop="reporttime" |
| | | width="160" |
| | | /> |
| | | <el-table-column label="æä½" align="center" fixed="right" width="300"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | size="mini" |
| | |
| | | v-if=" |
| | | scope.row.reportStatus !== '3' && |
| | | scope.row.reportStatus !== '4' && |
| | | scope.row.delFlag === 0 |
| | | scope.row.delFlag == 0 |
| | | " |
| | | >ç¼è¾</el-button |
| | | > |
| | |
| | | type="text" |
| | | icon="el-icon-check" |
| | | @click="handleApprove(scope.row)" |
| | | v-if="scope.row.reportStatus === '2' && scope.row.delFlag === 0" |
| | | v-if="scope.row.reportStatus == '2' && scope.row.delFlag == 0" |
| | | >确认</el-button |
| | | > |
| | | <!-- ç§»é¤è½¬è¿æé® --> |
| | | <el-button |
| | | v-if="scope.row.serviceTransport.length" |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-truck" |
| | | :type="getTransportStatustype(scope.row)" |
| | | @click="handleTransport(scope.row)" |
| | | v-if="shouldShowTransportButton(scope.row)" |
| | | :disabled="!canGoToTransport(scope.row)" |
| | | type="primary" |
| | | @click="goToTransportDetail(scope.row.name)" |
| | | >æ¥ç转è¿å</el-button |
| | | > |
| | | {{ getTransportButtonText(scope.row) }} |
| | | </el-button> |
| | | <el-button |
| | | v-if=" |
| | | scope.row.reportStatus == 3 && |
| | | !scope.row.serviceTransport.length && |
| | | scope.row.isTransport == 2 |
| | | " |
| | | size="mini" |
| | | type="success" |
| | | @click="Createatransferorder(scope.row)" |
| | | >å建转è¿å</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | append-to-body |
| | | class="approve-dialog" |
| | | > |
| | | <el-container style="height: 800px;"> |
| | | <!-- ä½¿ç¨ div å¸å±æ¿ä»£ el-container --> |
| | | <div class="approve-dialog-content"> |
| | | <!-- å·¦ä¾§ï¼æ¡ä¾è¯¦æ
--> |
| | | <el-aside |
| | | width="50vw" |
| | | style="background: #f8f9fa; padding: 20px; overflow-y: auto;" |
| | | > |
| | | <div class="approve-detail-left"> |
| | | <div class="approve-detail-preview"> |
| | | <h3 style="margin-bottom: 15px; color: #303133;">æ¡ä¾è¯¦æ
é¢è§</h3> |
| | | <case-detail :caseData="currentCase" :showtitle="false" /> |
| | | </div> |
| | | </el-aside> |
| | | </div> |
| | | |
| | | <!-- å³ä¾§ï¼ç¡®è®¤è¡¨å --> |
| | | <el-main style="padding: 20px;"> |
| | | <div class="approve-form-right"> |
| | | <el-form |
| | | ref="approveForm" |
| | | :model="approveForm" |
| | |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="ç¡®è®¤ç»æ" prop="approveResult"> |
| | | <el-radio-group v-model="approveForm.approveResult"> |
| | | <el-radio-group |
| | | v-model="approveForm.approveResult" |
| | | @change="handleApproveResultChange" |
| | | > |
| | | <el-radio label="3">åæ</el-radio> |
| | | <el-radio label="4">驳å</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="确认æè§" prop="approveOpinion"> |
| | | |
| | | <!-- å½éæ©"åæ"æ¶æ¾ç¤ºè½¬è¿é项 --> |
| | | <el-form-item |
| | | v-if="approveForm.approveResult == '3'" |
| | | label="æ¯å¦éè¦è½¬è¿" |
| | | prop="isTransport" |
| | | > |
| | | <el-radio-group v-model="approveForm.isTransport"> |
| | | <el-radio label="1">ä¸éè¦</el-radio> |
| | | <el-radio label="2">éè¦</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <!-- å½éæ©"驳å"æ¶æ¾ç¤ºé©³ååå --> |
| | | <div v-if="approveForm.approveResult == '4'"> |
| | | <el-form-item label="驳ååå " prop="rejectType"> |
| | | <el-radio-group v-model="approveForm.rejectType"> |
| | | <el-radio label="1">好转</el-radio> |
| | | <el-radio label="2">æ»äº¡</el-radio> |
| | | <el-radio label="3">ä¸ç¬¦åæç®æ å</el-radio> |
| | | <el-radio label="4">家屿¾å¼æç®</el-radio> |
| | | <el-radio label="5">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="驳åæè§" prop="confirmResult"> |
| | | <el-input |
| | | type="textarea" |
| | | v-model="approveForm.confirmResult" |
| | | placeholder="请è¾å
¥è¯¦ç»ç驳åæè§" |
| | | :rows="6" |
| | | maxlength="500" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | </div> |
| | | |
| | | <!-- å½éæ©"åæ"æ¶æ¾ç¤ºç¡®è®¤æè§ --> |
| | | <el-form-item |
| | | v-if="approveForm.approveResult == '3'" |
| | | label="确认æè§" |
| | | prop="confirmResult" |
| | | > |
| | | <el-input |
| | | type="textarea" |
| | | v-model="approveForm.approveOpinion" |
| | | placeholder="请è¾å
¥è¯¦ç»ç确认æè§ï¼å
æ¬éè¿æé©³åççç±" |
| | | v-model="approveForm.confirmResult" |
| | | placeholder="请è¾å
¥ç¡®è®¤æè§" |
| | | :rows="6" |
| | | maxlength="500" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-main> |
| | | </el-container> |
| | | </div> |
| | | </div> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="approveOpen = false">åæ¶</el-button> |
| | |
| | | approveForm: { |
| | | id: null, |
| | | approveResult: "3", |
| | | approveOpinion: "" |
| | | confirmResult: "", |
| | | rejectType: "", // 驳ååå |
| | | isTransport: "1", // æ¯å¦éè¦è½¬è¿ |
| | | createTransport: false, // æ¯å¦éè¦å建转è¿å |
| | | isDonate: "0" // æ¯å¦æç®ï¼0-æªæç®ï¼1-å·²æç® |
| | | }, |
| | | // 确认表åéªè¯ |
| | | approveRules: { |
| | | approveResult: [ |
| | | { required: true, message: "è¯·éæ©ç¡®è®¤ç»æ", trigger: "change" } |
| | | ], |
| | | approveOpinion: [ |
| | | confirmResult: [ |
| | | { required: true, message: "请è¾å
¥ç¡®è®¤æè§", trigger: "blur" } |
| | | ], |
| | | rejectType: { |
| | | required: false, |
| | | validator: (rule, value, callback) => { |
| | | if (this.approveForm.approveResult == "4" && !value) { |
| | | callback(new Error("è¯·éæ©é©³ååå ")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }, |
| | | trigger: "change" |
| | | }, |
| | | isTransport: [ |
| | | { required: true, message: "è¯·éæ©æ¯å¦éè¦è½¬è¿", trigger: "change" } |
| | | ] |
| | | }, |
| | | // ç¼è¾è¡¨å |
| | |
| | | this.loading = false; |
| | | } |
| | | }, |
| | | // 转è¿------------------ |
| | | /** 夿æ¯å¦éè¦æ¾ç¤ºè½¬è¿æé® */ |
| | | shouldShowTransportButton(row) { |
| | | // åªæå·²åæçæ¡ä¾æè½è¿è¡è½¬è¿æä½ |
| | | // return row.reportStatus == "3" && row.delFlag == 0; |
| | | return row.reportStatus != "4"; |
| | | |
| | | /** ç¡®è®¤ç»æååå¤ç */ |
| | | handleApproveResultChange(value) { |
| | | if (value == "3") { |
| | | // 鿩忿¶ï¼é置驳ååå |
| | | this.approveForm.rejectType = ""; |
| | | this.approveForm.isDonate = "0"; // éç½®ä¸ºæªæç® |
| | | } else if (value == "4") { |
| | | // 鿩驳忶ï¼é置转è¿é项 |
| | | this.approveForm.isTransport = "1"; |
| | | this.approveForm.createTransport = false; |
| | | } |
| | | |
| | | // æ¸
é¤éªè¯ |
| | | this.$nextTick(() => { |
| | | if (this.$refs.approveForm) { |
| | | this.$refs.approveForm.clearValidate(); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | /** 夿æ¯å¦å¯ä»¥è·³è½¬å°è½¬è¿å */ |
| | | canGoToTransport(row) { |
| | | // éè¦è½¬è¿ï¼isTransport === "2"ï¼ä¸æ²¡æè½¬è¿ä¿¡æ¯ï¼serviceTransportä¸åå¨æä¸ºç©ºæ°ç»ï¼ |
| | | return row.isTransport == "2" && row.serviceTransport; |
| | | }, |
| | | |
| | | /** è·åè½¬è¿æé®ææ¬ */ |
| | | getTransportButtonText(row) { |
| | | if (row.isTransport == "2") { |
| | | if ( |
| | | row.serviceTransport && |
| | | Array.isArray(row.serviceTransport) && |
| | | row.serviceTransport.length > 0 |
| | | ) { |
| | | return "æ¥ç转è¿å"; |
| | | } else { |
| | | return "å建转è¿å"; |
| | | } |
| | | } |
| | | return "æ é转è¿"; |
| | | }, |
| | | getTransportStatustype(row) { |
| | | if (row.isTransport == "1") { |
| | | return "info"; // ä¸éè¦è½¬è¿ |
| | | } |
| | | if ( |
| | | row.serviceTransport && |
| | | Array.isArray(row.serviceTransport) && |
| | | row.serviceTransport.length > 0 |
| | | ) { |
| | | // æ ¹æ®è½¬è¿åç¶ææ¾ç¤ºä¸åé¢è² |
| | | const transport = row.serviceTransport[0]; |
| | | if (transport.transitStatus) { |
| | | return "primary"; // æè½¬è¿ä¿¡æ¯ä½æ ç¶æ |
| | | } |
| | | return "primary"; // æè½¬è¿ä¿¡æ¯ä½æ ç¶æ |
| | | } |
| | | return "success"; // éè¦è½¬è¿ä½æ 转è¿ä¿¡æ¯ |
| | | }, |
| | | // 转è¿ç¸å
³æ¹æ³ |
| | | /** è·å转è¿ç¶ææ ç¾æ ·å¼ */ |
| | | getTransportStatusTag(row) { |
| | | if (row.isTransport === "1") { |
| | | if (row.isTransport == "1") { |
| | | return "info"; // ä¸éè¦è½¬è¿ |
| | | } |
| | | if ( |
| | |
| | | |
| | | /** è·å转è¿ç¶æææ¬ */ |
| | | getTransportStatusText(row) { |
| | | if (row.isTransport === "1") { |
| | | if (row.isTransport == "1") { |
| | | return "æ é转è¿"; |
| | | } |
| | | if ( |
| | |
| | | return "é转è¿"; |
| | | }, |
| | | |
| | | /** å¤çè½¬è¿æä½ */ |
| | | async handleTransport(row) { |
| | | try { |
| | | // å
è·åææ°çæ¡ä¾ä¿¡æ¯ |
| | | const caseData = row; |
| | | |
| | | if (caseData.isTransport == "2") { |
| | | if ( |
| | | caseData.serviceTransport && |
| | | Array.isArray(caseData.serviceTransport) && |
| | | caseData.serviceTransport.length > 0 |
| | | ) { |
| | | // å·²æè½¬è¿åï¼è·³è½¬å°è½¬è¿å详æ
页 |
| | | const transport = caseData.serviceTransport[0]; |
| | | this.goToTransportDetail(transport.id, row.name); |
| | | } else { |
| | | // 没æè½¬è¿åï¼è·³è½¬å°å建转è¿åé¡µé¢ |
| | | this.goToCreateTransport(row); |
| | | } |
| | | } else { |
| | | this.$message.warning("该æ¡ä¾ä¸éè¦è½¬è¿"); |
| | | } |
| | | } catch (error) { |
| | | console.error("è·åæ¡ä¾ä¿¡æ¯å¤±è´¥:", error); |
| | | this.$message.error("è·åæ¡ä¾ä¿¡æ¯å¤±è´¥"); |
| | | } |
| | | }, |
| | | |
| | | /** 跳转å°å建转è¿åé¡µé¢ */ |
| | | goToCreateTransport(caseData) { |
| | | // æ¹å¼1ï¼å¨æ°é¡µé¢æå¼ |
| | | this.$router.push({ |
| | | path: "/report/transfer", |
| | | query: { |
| | | autoCreate: "true", //è·³è½¬è½¬è¿æ è¯ |
| | | caseId: caseData.id, |
| | | caseNo: caseData.caseNo, |
| | | patName: caseData.name, |
| | | age: caseData.age, |
| | | sex: caseData.sex, |
| | | diagnosisname: caseData.diagnosisname, |
| | | treatmentHospitalName: caseData.treatmenthospitalname |
| | | } |
| | | }); |
| | | }, |
| | | Createatransferorder(res) { |
| | | console.log(res); |
| | | |
| | | /** æå¼è½¬è¿åå¼¹æ¡ */ |
| | | openTransportDialog(caseData) { |
| | | this.$modal.confirm({ |
| | | title: "å建转è¿å", |
| | | message: `æ¨å°å建æ¡ä¾ã${caseData.caseNo} - ${caseData.name}ãç转è¿åï¼æ¯å¦ç»§ç»ï¼`, |
| | | confirmButtonText: "åå¾å建", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | beforeClose: (action, instance, done) => { |
| | | if (action === "confirm") { |
| | | // 跳转å°è½¬è¿ååå»ºé¡µé¢ |
| | | this.$router.push({ |
| | | path: "/report/transfer", |
| | | query: { |
| | | caseId: caseData.id, |
| | | caseNo: caseData.caseNo, |
| | | patName: caseData.name, |
| | | age: caseData.age, |
| | | sex: caseData.sex, |
| | | diagnosisname: caseData.diagnosisname, |
| | | treatmentHospitalName: caseData.treatmenthospitalname |
| | | } |
| | | }); |
| | | done(); |
| | | } else { |
| | | done(); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | /** 跳转å°è½¬è¿å详æ
页 */ |
| | | goToTransportDetail(transportId, name) { |
| | | this.$router.push({ |
| | | path: "/report/transfer", |
| | | query: { |
| | | autoCreate: "true", |
| | | patName: name |
| | | caseId: res.id, |
| | | caseNo: res.caseNo, |
| | | patName: res.name, |
| | | age: res.age, |
| | | sex: res.sex, |
| | | diagnosisname: res.diagnosisname, |
| | | treatmentHospitalName: res.treatmenthospitalname |
| | | } |
| | | }); |
| | | }, |
| | | // ---------------------------------end |
| | | // å¤éæ¡é䏿°æ® |
| | | |
| | | /** å¤éæ¡é䏿°æ® */ |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | |
| | | this.currentCase = row; |
| | | |
| | | // å¦æç¶ææ¯"已䏿¥"(1)ï¼åæ´æ°ä¸º"å·²é
读"(2) |
| | | if (this.currentCase.reportStatus === "1") { |
| | | if (this.currentCase.reportStatus == "1") { |
| | | try { |
| | | const updateData = { |
| | | ...this.currentCase, |
| | |
| | | async handleEdit(row) { |
| | | try { |
| | | const response = await donateInfo(row.id); |
| | | if (response.code === 200 || response.data) { |
| | | if (response.code == 200 || response.data) { |
| | | this.isEditing = true; |
| | | const data = response.data || response; |
| | | |
| | |
| | | |
| | | this.approveForm.id = row.id; |
| | | this.approveForm.approveResult = "3"; |
| | | this.approveForm.approveOpinion = ""; |
| | | this.approveForm.confirmResult = ""; |
| | | this.approveForm.rejectType = ""; |
| | | this.approveForm.isTransport = row.isTransport || "1"; |
| | | this.approveForm.isDonate = "0"; |
| | | |
| | | this.$nextTick(() => { |
| | | if (this.$refs.approveForm) { |
| | |
| | | this.currentCase = row; |
| | | this.approveForm.id = row.id; |
| | | this.approveForm.approveResult = "3"; |
| | | this.approveForm.approveOpinion = ""; |
| | | this.approveForm.confirmResult = ""; |
| | | this.approveOpen = true; |
| | | this.$modal.msgError("è·å详æ
失败ï¼ä½å·²æå¼ç¡®è®¤çªå£"); |
| | | } |
| | |
| | | async submitApprove() { |
| | | try { |
| | | const valid = await this.$refs.approveForm.validate(); |
| | | if (valid) { |
| | | const approveData = { |
| | | ...this.currentCase, |
| | | reportStatus: this.approveForm.approveResult, |
| | | remark: this.approveForm.approveOpinion, |
| | | approvername: this.$store.state.user?.name || "å½åç¨æ·", |
| | | approvetime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | updateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | updateBy: this.$store.state.user?.name || "å½åç¨æ·" |
| | | }; |
| | | if (!valid) return; |
| | | |
| | | await donateEdit(approveData); |
| | | this.$modal.msgSuccess("确认æå"); |
| | | this.approveOpen = false; |
| | | this.getList(); |
| | | // åå¤ç¡®è®¤æ°æ® |
| | | const approveData = { |
| | | ...this.currentCase, |
| | | reportStatus: this.approveForm.approveResult, |
| | | confirmResult: this.approveForm.confirmResult, |
| | | approvername: this.$store.state.user?.name || "å½åç¨æ·", |
| | | approvetime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | updateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | updateBy: this.$store.state.user?.name || "å½åç¨æ·" |
| | | }; |
| | | |
| | | // å¤çç¡®è®¤ç»æ |
| | | if (this.approveForm.approveResult == "3") { |
| | | // åæ |
| | | approveData.isTransport = this.approveForm.isTransport; |
| | | |
| | | // 妿ä¸éè¦è½¬è¿ï¼è®¾ç½®isDonate为1 |
| | | if (this.approveForm.isTransport == "1") { |
| | | approveData.isDonate = "1"; |
| | | } else { |
| | | approveData.isDonate = "0"; |
| | | } |
| | | } else if (this.approveForm.approveResult == "4") { |
| | | // 驳å |
| | | approveData.rejectType = this.approveForm.rejectType; |
| | | approveData.isTransport = "1"; // 驳åçæ¡ä¾ä¸éè¦è½¬è¿ |
| | | approveData.isDonate = "1"; // 驳åçæ¡ä¾æ 记为已æç® |
| | | } |
| | | |
| | | // ä¿åæ¡ä¾ç¡®è®¤ä¿¡æ¯ |
| | | await donateEdit(approveData); |
| | | |
| | | this.$modal.msgSuccess("确认æå"); |
| | | |
| | | // å
³éç¡®è®¤å¯¹è¯æ¡ |
| | | this.approveOpen = false; |
| | | |
| | | // å·æ°å表 |
| | | this.getList(); |
| | | |
| | | // 妿åæä¸éè¦è½¬è¿ï¼è·³è½¬å°è½¬è¿ååå»ºé¡µé¢ |
| | | if ( |
| | | this.approveForm.approveResult == "3" && |
| | | this.approveForm.isTransport == "2" |
| | | ) { |
| | | this.$router.push({ |
| | | path: "/report/transfer", |
| | | query: { |
| | | autoCreate: "true", |
| | | caseId: this.currentCase.id, |
| | | caseNo: this.currentCase.caseNo, |
| | | patName: this.currentCase.name, |
| | | age: this.currentCase.age, |
| | | sex: this.currentCase.sex, |
| | | diagnosisname: this.currentCase.diagnosisname, |
| | | treatmentHospitalName: this.currentCase.treatmenthospitalname |
| | | } |
| | | }); |
| | | } |
| | | } catch (error) { |
| | | console.error("确认失败:", error); |
| | |
| | | infectious: undefined, |
| | | infectiousOther: undefined, |
| | | isTransport: "1", |
| | | isDonate: "0", // æ°å¢ï¼æ¯å¦æç® |
| | | rejectType: undefined, // æ°å¢ï¼é©³ååå |
| | | // å»é¢ä¿¡æ¯ |
| | | treatmenthospitalname: undefined, |
| | | treatmentdeptname: undefined, |
| | |
| | | |
| | | /** éä»¶ä¸ä¼ æåå¤ç */ |
| | | handleUploadSuccess({ file, fileList, response }) { |
| | | if (response && response.code === 200) { |
| | | if (response && response.code == 200) { |
| | | if (!this.editForm.annexfilesList) { |
| | | this.editForm.annexfilesList = []; |
| | | } |
| | |
| | | handleAttachmentRemove(file) { |
| | | if (file.url && this.editForm.annexfilesList) { |
| | | const index = this.editForm.annexfilesList.findIndex( |
| | | item => item.path === file.url || item.fileUrl === file.url |
| | | item => item.path == file.url || item.fileUrl == file.url |
| | | ); |
| | | if (index > -1) { |
| | | this.editForm.annexfilesList.splice(index, 1); |
| | |
| | | this.$refs.editForm && this.$refs.editForm.clearValidate(); |
| | | }); |
| | | }, |
| | | |
| | | goToTransportDetail(name) { |
| | | this.$router.push({ |
| | | path: "/report/transfer", |
| | | query: { |
| | | autoCreate: "true", |
| | | patName: name |
| | | } |
| | | }); |
| | | }, |
| | | /** ä¿å表å */ |
| | | async handleSave() { |
| | | try { |
| | |
| | | response = await donateAdd(requestData); |
| | | } |
| | | |
| | | if (response.code === 200) { |
| | | if (response.code == 200) { |
| | | this.$message.success(this.isEditing ? "ä¿®æ¹æå" : "æ°å¢æå"); |
| | | this.handleEditClose(); |
| | | this.getList(); |
| | |
| | | .approve-detail-preview { |
| | | height: 100%; |
| | | } |
| | | .approve-dialog-content { |
| | | display: flex; |
| | | height: 600px; /* å¯ä»¥è°æ´é«åº¦ */ |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .approve-detail-left { |
| | | width: 50%; |
| | | background: #f8f9fa; |
| | | padding: 20px; |
| | | overflow-y: auto; |
| | | border-right: 1px solid #e4e7ed; |
| | | } |
| | | |
| | | .approve-form-right { |
| | | width: 50%; |
| | | padding: 20px; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | .approve-detail-preview { |
| | | height: 100%; |
| | | } |
| | | |
| | | /* ååºå¼è°æ´ */ |
| | | @media (max-width: 1200px) { |
| | | .approve-dialog-content { |
| | | flex-direction: column; |
| | | height: auto; |
| | | max-height: 80vh; |
| | | } |
| | | |
| | | .approve-detail-left, |
| | | .approve-form-right { |
| | | width: 100%; |
| | | height: auto; |
| | | } |
| | | |
| | | .approve-detail-left { |
| | | border-right: none; |
| | | border-bottom: 1px solid #e4e7ed; |
| | | } |
| | | } |
| | | /* ååºå¼è®¾è®¡ */ |
| | | @media (max-width: 1200px) { |
| | | .approve-dialog { |
| | |
| | | <template> |
| | | <div class="assessment-detail"> |
| | | <!-- åºç¡æ¡ä¾ä¿¡æ¯ --> |
| | | <case-basic-info |
| | | :case-id="caseId" |
| | | :show-attachment="true" |
| | | /> |
| | | <!-- <el-card class="basic-info-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>æ¡ä¾åºæ¬ä¿¡æ¯</span> |
| | | <el-button |
| | | style="float: right; padding: 3px 0" |
| | | type="text" |
| | | @click="handleAttachmentPreview" |
| | | > |
| | | <i class="el-icon-folder-opened"></i> æ¥çéä»¶ |
| | | </el-button> |
| | | </div> |
| | | |
| | | <el-descriptions :column="2" border> |
| | | <el-descriptions-item label="ä½é¢å·">{{ |
| | | assessmentData.caseNo |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ½å¨æç®è
å§å">{{ |
| | | assessmentData.name || assessmentData.donorName |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ§å«"> |
| | | <dict-tag |
| | | :options="dict.type.sys_user_sex" |
| | | :value="assessmentData.sex" |
| | | /> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="å¹´é¾" |
| | | >{{ assessmentData.age }}å²</el-descriptions-item |
| | | > |
| | | <el-descriptions-item label="è¡å"> |
| | | {{ assessmentData.bloodtype }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="è¯ä»¶å·ç ">{{ |
| | | assessmentData.idcardno |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="ç¾ç
è¯æ">{{ |
| | | assessmentData.diagnosisname |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="æå¨å»çæºæ">{{ |
| | | assessmentData.treatmenthospitalname |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="åè°å">{{ |
| | | assessmentData.coordinatorName |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="è¯ä¼°æ¶é´">{{ |
| | | assessmentData.assessTime |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="è¯ä¼°ç¶æ"> |
| | | <el-tag :type="statusFilter(assessmentData.assessState)"> |
| | | {{ statusTextFilter(assessmentData.assessState) }} |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </el-card> --> |
| | | <case-basic-info :case-id="caseId" :show-attachment="true" /> |
| | | |
| | | <el-card class="organ-assessment-card"> |
| | | <div slot="header" class="clearfix"> |
| | |
| | | v-for="(assessment, index) in getOrganAssessments(scope.row)" |
| | | :key="`${scope.row.organno}_${index}`" |
| | | :label="`第${index + 1}次è¯ä¼°`" |
| | | :name="index" |
| | | :name="String(index)" |
| | | > |
| | | <organ-assessment-form |
| | | :organ-data="scope.row" |
| | |
| | | class="assessment-detail-card" |
| | | > |
| | | <div |
| | | v-if="getOrganAssessments(scope.row).length === 0" |
| | | v-if="getOrganAssessments(scope.row).length == 0" |
| | | class="no-assessment" |
| | | > |
| | | <el-empty description="ææ è¯ä¼°è®°å½"></el-empty> |
| | |
| | | border |
| | | class="detail-descriptions" |
| | | > |
| | | <!-- è¯ä¼°æ¶é´ --> |
| | | <el-descriptions-item label="è¯ä¼°æ¶é´" :span="2"> |
| | | <span class="time-text">{{ |
| | | assessment.assessmentTime || "-" |
| | | }}</span> |
| | | <span class="time-text"> |
| | | {{ |
| | | parseTime(assessment.assessmentTime) || |
| | | "æªè®¾ç½®" |
| | | }} |
| | | </span> |
| | | </el-descriptions-item> |
| | | |
| | | <!-- åæçè¯ä¼°äººä¿¡æ¯ --> |
| | | <el-descriptions-item label="è¯ä¼°äºº"> |
| | | <el-tag type="info" size="small"> |
| | | {{ assessment.assessor || "æªå¡«å" }} |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | |
| | | <!-- åè½ç¶æ --> |
| | | <el-descriptions-item label="åè½ç¶æ"> |
| | | <el-tag |
| | | :type=" |
| | |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | |
| | | <!-- è¯ä¼°æè§ --> |
| | | <el-descriptions-item label="è¯ä¼°æè§" :span="2"> |
| | | <div class="opinion-content"> |
| | | {{ |
| | |
| | | </div> |
| | | </el-descriptions-item> |
| | | |
| | | <!-- éä»¶æ°é --> |
| | | <el-descriptions-item |
| | | label="éä»¶æ°é" |
| | | :span="2" |
| | |
| | | <el-descriptions-item label="è·ååæ´»æ£"> |
| | | <el-tag |
| | | :type=" |
| | | scope.row.isbiopsybefore === '1' |
| | | scope.row.isbiopsybefore == '1' |
| | | ? 'success' |
| | | : 'info' |
| | | " |
| | | size="small" |
| | | > |
| | | {{ scope.row.isbiopsybefore === "1" ? "æ¯" : "å¦" }} |
| | | {{ scope.row.isbiopsybefore == "1" ? "æ¯" : "å¦" }} |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="è·ååæ´»æ£"> |
| | | <el-tag |
| | | :type=" |
| | | scope.row.isbiopsyafter === '1' |
| | | scope.row.isbiopsyafter == '1' |
| | | ? 'success' |
| | | : 'info' |
| | | " |
| | | size="small" |
| | | > |
| | | {{ scope.row.isbiopsyafter === "1" ? "æ¯" : "å¦" }} |
| | | {{ scope.row.isbiopsyafter == "1" ? "æ¯" : "å¦" }} |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="è¾¹ç¼å¨å®"> |
| | | <el-tag |
| | | :type=" |
| | | scope.row.ismarginalorgan === '1' |
| | | scope.row.ismarginalorgan == '1' |
| | | ? 'warning' |
| | | : 'info' |
| | | " |
| | | size="small" |
| | | > |
| | | {{ |
| | | scope.row.ismarginalorgan === "1" ? "æ¯" : "å¦" |
| | | }} |
| | | {{ scope.row.ismarginalorgan == "1" ? "æ¯" : "å¦" }} |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç
åè鳿§"> |
| | | <el-tag |
| | | :type=" |
| | | scope.row.ispathogenpositive === '1' |
| | | scope.row.ispathogenpositive == '1' |
| | | ? 'danger' |
| | | : 'info' |
| | | " |
| | | size="small" |
| | | > |
| | | {{ |
| | | scope.row.ispathogenpositive === "1" ? "æ¯" : "å¦" |
| | | scope.row.ispathogenpositive == "1" ? "æ¯" : "å¦" |
| | | }} |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="å¨å®ç¼å·" align="center" prop="organnumber" /> |
| | | <el-table-column label="å¨å®ç¼å·" align="center" prop="organnumber"> |
| | | <template slot-scope="scope"> |
| | | {{ getOrganvalue(scope.row.organno) }} |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="è·åæºæ" |
| | |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | :type=" |
| | | getOrganOverallStatus(scope.row) === 'completed' |
| | | getOrganOverallStatus(scope.row) == 'completed' |
| | | ? 'success' |
| | | : getOrganOverallStatus(scope.row) === 'assessing' |
| | | : getOrganOverallStatus(scope.row) == 'assessing' |
| | | ? 'primary' |
| | | : 'warning' |
| | | " |
| | |
| | | }, |
| | | computed: { |
| | | isCoordinator() { |
| | | return this.currentUser.role === "coordinator"; |
| | | return this.currentUser.role == "coordinator"; |
| | | }, |
| | | currentDepartment() { |
| | | return this.currentUser.department; |
| | | }, |
| | | // æ ¹æ®æç®å³å®è¿æ»¤åçå¨å®å表 |
| | | filteredOrganAssessmentList() { |
| | | if (!this.organdecisionValues || this.organdecisionValues.length === 0) { |
| | | if (!this.organdecisionValues || this.organdecisionValues.length == 0) { |
| | | return []; |
| | | } |
| | | |
| | |
| | | return ( |
| | | assessments && |
| | | assessments.length > 0 && |
| | | assessments.every(assessment => assessment.status === "assessed") |
| | | assessments.every(assessment => assessment.status == "assessed") |
| | | ); |
| | | }); |
| | | }, |
| | |
| | | this.infoid = this.$route.query.infoid; |
| | | this.caseId = this.infoid; |
| | | this.assessmentId = this.$route.query.id; |
| | | this.isEdit = this.$route.query.assess === "true"; |
| | | this.isEdit = this.$route.query.assess == "true"; |
| | | this.getAssessmentDetail(); |
| | | }, |
| | | methods: { |
| | | // æ ¹æ®åå
¸valueè·ålabel |
| | | getOrganLabel(organValue) { |
| | | const dictItem = this.organDict.find(item => item.value === organValue); |
| | | const dictItem = this.organDict.find(item => item.value == organValue); |
| | | return dictItem ? dictItem.label : organValue; |
| | | }, |
| | | getOrganvalue(organValue) { |
| | | const dictItem = this.organDict.find(item => item.value == organValue); |
| | | |
| | | return dictItem ? dictItem.value : organValue; |
| | | }, |
| | | |
| | | // Tabç¹å»äºä»¶ |
| | | handleTabClick(organ, tab) { |
| | | if (tab.name !== "add") { |
| | | this.activeTabMap.set(organ.organno, tab.name); |
| | | this.activeTabMap.set(organ.organno, String(tab.name)); |
| | | } |
| | | }, |
| | | // è·ååè½ç¶ææ ç¾ç±»å |
| | |
| | | |
| | | // æ¾ç¤ºéä»¶å表 |
| | | showAttachmentList(attachments, assessmentNumber) { |
| | | if (!attachments || attachments.length === 0) { |
| | | if (!attachments || attachments.length == 0) { |
| | | this.$message.info(`第${assessmentNumber}次è¯ä¼°ææ éä»¶`); |
| | | return; |
| | | } |
| | |
| | | if (!organ.assesscontent) return []; |
| | | try { |
| | | const assessData = |
| | | typeof organ.assesscontent === "string" |
| | | typeof organ.assesscontent == "string" |
| | | ? JSON.parse(organ.assesscontent) |
| | | : organ.assesscontent; |
| | | |
| | |
| | | const saveMethod = this.assessmentData.id ? assessedit : assessAdd; |
| | | const response = await saveMethod(saveData); |
| | | |
| | | if (response.code === 200) { |
| | | if (response.code == 200) { |
| | | this.$message.success("è¯ä¼°è¡¨ä¿åæåï¼"); |
| | | if (!this.assessmentData.id && response.data) { |
| | | this.assessmentData.id = response.data; |
| | |
| | | async handleOrganDecisionChange(newDecision) { |
| | | const oldDecision = [...this.prevOrgandecisionValues]; |
| | | this.autoHandleDecisionChange(newDecision); |
| | | console.log(newDecision); |
| | | |
| | | const removedDecisions = oldDecision.filter( |
| | | item => !newDecision.includes(item) |
| | |
| | | this.prevOrgandecisionValues = [...newDecision]; |
| | | this.$forceUpdate(); |
| | | |
| | | if (newDecision.length === 0) { |
| | | if (newDecision.length == 0) { |
| | | this.expandedRowKeys = []; |
| | | } |
| | | }, |
| | |
| | | |
| | | for (const organValue of relatedOrgans) { |
| | | const organIndex = this.organAssessmentList.findIndex( |
| | | organ => organ.organno === organValue && organ.delFlag !== "1" |
| | | organ => organ.organno == organValue && organ.delFlag !== "1" |
| | | ); |
| | | |
| | | if (organIndex !== -1) { |
| | |
| | | // ç¡®ä¿å¨å®åå¨ |
| | | ensureOrganExists(organValue) { |
| | | const exists = this.organAssessmentList.some( |
| | | organ => organ.organno === organValue && organ.delFlag !== "1" |
| | | organ => organ.organno == organValue && organ.delFlag !== "1" |
| | | ); |
| | | |
| | | if (!exists) { |
| | |
| | | try { |
| | | const response = await evaluateBaseInfolist({ infoid: this.infoid }); |
| | | |
| | | if (response.code === 200) { |
| | | if (response.code == 200) { |
| | | this.handleResponseData(response); |
| | | } else { |
| | | this.$message.error("è·å详æ
失败ï¼" + (response.msg || "æªç¥é误")); |
| | |
| | | const organno = organ.organno; |
| | | |
| | | // 妿 assesscontent æ¯å符串ï¼ç¡®ä¿å®æ¯ææç JSON |
| | | if (organ.assesscontent && typeof organ.assesscontent === "string") { |
| | | if (organ.assesscontent && typeof organ.assesscontent == "string") { |
| | | try { |
| | | JSON.parse(organ.assesscontent); |
| | | } catch (error) { |
| | |
| | | |
| | | const assessments = this.getOrganAssessments(organ); |
| | | const activeTab = this.activeTabMap.has(organno) |
| | | ? this.activeTabMap.get(organno) |
| | | ? String(this.activeTabMap.get(organno)) |
| | | : assessments.length > 0 |
| | | ? 0 |
| | | ? "0" |
| | | : "summary"; |
| | | |
| | | return { |
| | |
| | | return { |
| | | index: index, |
| | | status: "pending", |
| | | assessmentTime: "", |
| | | assessmentTime: new Date().toLocaleString("zh-CN"), // æ·»å é»è®¤è¯ä¼°æ¶é´ |
| | | assessor: "", |
| | | functionStatus: "", |
| | | assessmentOpinion: "", |
| | |
| | | // è·åå¨å®æ´ä½ç¶æ |
| | | getOrganOverallStatus(organ) { |
| | | const assessments = this.getOrganAssessments(organ); |
| | | if (assessments.length === 0) { |
| | | if (assessments.length == 0) { |
| | | return "pending"; |
| | | } |
| | | |
| | | const validAssessments = assessments.filter(a => a.delFlag !== "1"); |
| | | if (validAssessments.length === 0) { |
| | | if (validAssessments.length == 0) { |
| | | return "pending"; |
| | | } |
| | | |
| | | const allAssessed = validAssessments.every( |
| | | assessment => assessment.status === "assessed" |
| | | assessment => assessment.status == "assessed" |
| | | ); |
| | | const someAssessed = validAssessments.some( |
| | | assessment => assessment.status === "assessed" |
| | | assessment => assessment.status == "assessed" |
| | | ); |
| | | |
| | | if (allAssessed) return "completed"; |
| | |
| | | } else { |
| | | this.expandedRowKeys = [key]; |
| | | this.organAssessmentList.forEach(item => { |
| | | item.expanded = item.organno === key; |
| | | item.expanded = item.organno == key; |
| | | }); |
| | | } |
| | | }, |
| | |
| | | const assessments = this.getOrganAssessments(organ); |
| | | const newAssessment = { |
| | | ...this.getDefaultAssessment(assessments.length), |
| | | assessor: this.currentUser.name |
| | | assessor: this.currentUser.name, |
| | | assessmentTime: new Date().toLocaleString("zh-CN") // 设置å
·ä½çè¯ä¼°æ¶é´ |
| | | }; |
| | | |
| | | const newAssessments = [...assessments, newAssessment]; |
| | | this.$set(organ, "assesscontent", JSON.stringify(newAssessments)); |
| | | |
| | | organ.activeTab = assessments.length; |
| | | this.activeTabMap.set(organ.organno, assessments.length); |
| | | organ.activeTab = String(assessments.length); |
| | | this.activeTabMap.set(organ.organno, String(assessments.length)); |
| | | |
| | | this.$message.success("å·²æ·»å æ°çè¯ä¼°"); |
| | | }, |
| | |
| | | this.deleteOrganAssessment(organData, assessmentIndex); |
| | | }, |
| | | // å¤çè¯ä¼°ä¿å |
| | | // å¨ AssessmentDetail.vue ç handleSaveAssessment æ¹æ³ä¸ |
| | | handleSaveAssessment(data) { |
| | | const { organData, assessmentData, assessmentIndex } = data; |
| | | const assessments = this.getOrganAssessments(organData); |
| | | |
| | | console.log("ä¿åè¯ä¼°æ°æ®:", data); |
| | | |
| | | if (assessments[assessmentIndex]) { |
| | | // å建æ°çè¯ä¼°æ°ç» |
| | | const newAssessments = [...assessments]; |
| | | newAssessments[assessmentIndex] = { |
| | | ...assessments[assessmentIndex], |
| | | ...assessmentData, |
| | | status: "assessed", // æ 记为已è¯ä¼° |
| | | assessmentTime: new Date().toISOString(), // 设置è¯ä¼°æ¶é´ |
| | | delFlag: "0" // ç¡®ä¿å 餿 å¿ |
| | | status: "assessed", |
| | | assessmentTime: |
| | | assessmentData.assessmentTime || new Date().toLocaleString("zh-CN"), |
| | | delFlag: "0" |
| | | }; |
| | | |
| | | // æ´æ° assesscontent |
| | | this.$set(organData, "assesscontent", JSON.stringify(newAssessments)); |
| | | |
| | | // 强å¶éæ°æ¸²æ |
| | | this.$forceUpdate(); |
| | | |
| | | this.$message.success("è¯ä¼°ä¿åæå"); |
| | | |
| | | // æ£æ¥æ¯å¦éè¦èªå¨åæ¢å°ä¸ä¸ä¸ªè¯ä¼° |
| | | this.checkAndSwitchTab(organData, assessmentIndex); |
| | | } |
| | | }, |
| | |
| | | const assessments = this.getOrganAssessments(organData); |
| | | if (currentIndex < assessments.length - 1) { |
| | | // å¦æè¿æä¸ä¸ä¸ªè¯ä¼°ï¼èªå¨åæ¢å°ä¸ä¸ä¸ª |
| | | organData.activeTab = currentIndex + 1; |
| | | this.activeTabMap.set(organData.organno, currentIndex + 1); |
| | | organData.activeTab = String(currentIndex + 1); |
| | | this.activeTabMap.set(organData.organno, String(currentIndex + 1)); |
| | | } else { |
| | | // å¦ææ²¡æä¸ä¸ä¸ªè¯ä¼°ï¼åæ¢å°æ±æ»é¡µ |
| | | organData.activeTab = "summary"; |
| | |
| | | this.$set(organ, "assesscontent", JSON.stringify(newAssessments)); |
| | | |
| | | // å¤çtab忢 |
| | | if (newAssessments.length === 0) { |
| | | if (newAssessments.length == 0) { |
| | | organ.activeTab = "summary"; |
| | | this.activeTabMap.set(organ.organno, "summary"); |
| | | } else if (organ.activeTab === assessmentIndex) { |
| | | } else if (organ.activeTab == String(assessmentIndex)) { |
| | | const newIndex = Math.max(0, assessmentIndex - 1); |
| | | organ.activeTab = newIndex; |
| | | this.activeTabMap.set(organ.organno, newIndex); |
| | | } else if (organ.activeTab === "summary") { |
| | | organ.activeTab = String(newIndex); |
| | | this.activeTabMap.set(organ.organno, String(newIndex)); |
| | | } else if (organ.activeTab == "summary") { |
| | | this.activeTabMap.set(organ.organno, "summary"); |
| | | } |
| | | |
| | |
| | | // è·åææ°è¯ä¼°æ¶é´ |
| | | getLatestAssessmentTime(organ) { |
| | | const assessments = this.getOrganAssessments(organ); |
| | | if (assessments.length === 0) return null; |
| | | if (assessments.length == 0) return null; |
| | | |
| | | const assessed = assessments.filter( |
| | | a => a.assessmentTime && a.delFlag !== "1" |
| | | ); |
| | | if (assessed.length === 0) return null; |
| | | if (assessed.length == 0) return null; |
| | | |
| | | return assessed.sort( |
| | | (a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime) |
| | | )[0].assessmentTime; |
| | | return this.parseTime( |
| | | assessed.sort( |
| | | (a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime) |
| | | )[0].assessmentTime |
| | | ); |
| | | }, |
| | | |
| | | // è·åè¯ä¼°ç¶ææ ç¾ç±»å |
| | |
| | | if (this.assessmentData.assessannex) { |
| | | try { |
| | | const annexData = |
| | | typeof this.assessmentData.assessannex === "string" |
| | | typeof this.assessmentData.assessannex == "string" |
| | | ? JSON.parse(this.assessmentData.assessannex) |
| | | : this.assessmentData.assessannex; |
| | | |
| | |
| | | |
| | | const response = await assessedit(updateData); |
| | | |
| | | if (response.code === 200) { |
| | | if (response.code == 200) { |
| | | this.$message.success("è¯ä¼°å®æç¡®è®¤æå"); |
| | | this.assessmentData.assessState = "3"; |
| | | this.isEdit = false; |
| | |
| | | .fixed-width .el-button { |
| | | margin: 0 2px; |
| | | } |
| | | |
| | | /* æ±æ»é¡µé¢æ ·å¼ */ |
| | | .assessment-summary { |
| | | padding: 10px; |
| | |
| | | :inline="true" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="æç®è
å§å" prop="name"> |
| | | <el-form-item label="å§å" prop="name"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="请è¾å
¥æç®è
å§å" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸å¡äººå" prop="coordinatorName"> |
| | | <el-form-item label="åè°å" prop="coordinatorName"> |
| | | <el-input |
| | | v-model="queryParams.coordinatorName" |
| | | placeholder="请è¾å
¥ä¸å¡äººå" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="è¯ä¼°ç¶æ" prop="assessState"> |
| | | <el-form-item label="è¯ä¼°ç»æ" prop="assessState"> |
| | | <el-select |
| | | v-model="queryParams.assessState" |
| | | placeholder="è¯·éæ©è¯ä¼°ç¶æ" |
| | | placeholder="è¯·éæ©è¯ä¼°ç»æ" |
| | | clearable |
| | | style="width: 200px" |
| | | > |
| | |
| | | <el-option label="å·²å
³é" value="4" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç³è¯·æ¶é´" prop="applyTimeRange"> |
| | | <el-form-item label="馿¬¡è¯ä¼°æ¶é´" prop="applyTimeRange"> |
| | | <el-date-picker |
| | | v-model="queryParams.applyTimeRange" |
| | | type="daterange" |
| | |
| | | style="width: 240px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="è¯ä¼°æ¶é´" prop="assessTimeRange"> |
| | | <el-form-item label="ææ°è¯ä¼°æ¶é´" prop="assessTimeRange"> |
| | | <el-date-picker |
| | | v-model="queryParams.assessTimeRange" |
| | | type="daterange" |
| | |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="æç®è
å§å" |
| | | label="å§å" |
| | | align="center" |
| | | prop="name" |
| | | width="120" |
| | |
| | | min-width="180" |
| | | show-overflow-tooltip |
| | | /> |
| | | <!-- |
| | | <el-table-column |
| | | label="æå¨å»çæºæ" |
| | | align="center" |
| | |
| | | <span>{{ parseTime(scope.row.applyTime, "{y}-{m}-{d}") }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | --> |
| | | |
| | | <el-table-column |
| | | label="è¯ä¼°ç¶æ" |
| | | align="center" |
| | | prop="assessState" |
| | | width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="statusFilter(scope.row.assessState)"> |
| | | {{ statusTextFilter(scope.row.assessState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è¯ä¼°æ¶é´" |
| | | align="center" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è¯ä¼°ç¶æ" |
| | | align="center" |
| | | prop="assessState" |
| | | width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="statusFilter(scope.row.assessState)"> |
| | | {{ statusTextFilter(scope.row.assessState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="ä¸å¡äººå" |
| | | label="åè°å" |
| | | align="center" |
| | | prop="coordinatorName" |
| | | width="100" |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="death-judgment-detail"> |
| | | <case-basic-info :case-id="caseId" :show-attachment="true" /> |
| | | <el-card class="detail-card"> |
| | | <!-- åºç¡ä¿¡æ¯ --> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">æ»äº¡å¤å®åºæ¬ä¿¡æ¯</span> |
| | | <el-button |
| | | v-if="isEdit" |
| | | type="success" |
| | | style="float: right" |
| | | @click="handleSave" |
| | | :loading="saveLoading" |
| | | > |
| | | ä¿åä¿¡æ¯ |
| | | </el-button> |
| | | <el-button |
| | | v-else |
| | | type="primary" |
| | | style="float: right" |
| | | @click="handleEdit" |
| | | > |
| | | ç¼è¾ä¿¡æ¯ |
| | | </el-button> |
| | | </div> |
| | | |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ»äº¡åå " prop="deathreason"> |
| | | <el-input v-model="form.deathreason" :readonly="!isEdit" /> |
| | | <!-- <el-select |
| | | v-model="form.deathreason" |
| | | :disabled="!isEdit" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="èæ»äº¡" value="brain_death" /> |
| | | <el-option label="å¿æ»äº¡" value="heart_death" /> |
| | | <el-option label="å
¶ä»" value="other" /> |
| | | </el-select> --> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="è´è´£äºº" prop="responsibleusername"> |
| | | <el-input |
| | | v-model="form.responsibleusername" |
| | | :readonly="!isEdit" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <!-- <el-col :span="8"> |
| | | <el-form-item label="è®°å½ç¶æ" prop="recordstate"> |
| | | <el-tag :type="getStatusTag(form.recordstate)"> |
| | | {{ getStatusText(form.recordstate) }} |
| | | </el-tag> |
| | | </el-form-item> |
| | | </el-col> --> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ»äº¡æ¶é´" prop="deathtime"> |
| | | <el-date-picker |
| | | v-model="form.deathtime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%" |
| | | :disabled="!isEdit" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¤å®å»çä¸" prop="deathjudgedocto"> |
| | | <el-input v-model="form.deathjudgedocto" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¤å®å»çäº" prop="deathjudgedoctt"> |
| | | <el-input v-model="form.deathjudgedoctt" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¨å®è·åæºæ" prop="gainhospitalname"> |
| | | <el-input v-model="form.gainhospitalname" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ¯å¦é»åç¼
æ" prop="isspendremember"> |
| | | <el-select |
| | | v-model="form.isspendremember" |
| | | :disabled="!isEdit" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="æ¯" :value="1" /> |
| | | <el-option label="å¦" :value="0" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ¢å¤éä½ä»ªå®¹" prop="isrestoreremains"> |
| | | <el-select |
| | | v-model="form.isrestoreremains" |
| | | :disabled="!isEdit" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="æ¯" :value="1" /> |
| | | <el-option label="å¦" :value="0" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-form-item label="æ»äº¡å¤å®è¯´æ" prop="remark"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | v-model="form.remark" |
| | | :readonly="!isEdit" |
| | | placeholder="详ç»è®°å½æ»äº¡å¤å®è¿ç¨å便®" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | |
| | | <!-- è¯ä¼°è¡¨éä»¶ --> |
| | | <el-card class="attachment-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">æ»äº¡å¤å®è¯ä¼°è¡¨éä»¶</span> |
| | | <!-- <el-button |
| | | v-if="isEdit" |
| | | type="primary" |
| | | size="mini" |
| | | @click="openUploadDialog" |
| | | :loading="uploadLoading" |
| | | > |
| | | ä¸ä¼ éä»¶ |
| | | </el-button> --> |
| | | </div> |
| | | |
| | | <!-- éä»¶ç±»åéé¡¹å¡ --> |
| | | <el-tabs v-model="activeAttachmentType" type="card"> |
| | | <el-tab-pane |
| | | v-for="type in attachmentTypes" |
| | | :key="type.value" |
| | | :label="type.label" |
| | | :name="type.value" |
| | | > |
| | | <div class="attachment-upload-section"> |
| | | <div class="upload-header"> |
| | | <span class="upload-title">{{ type.label }}</span> |
| | | <el-tooltip content="ç¹å»ä¸ä¼ 该类åè¯ä¼°è¡¨" placement="top"> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | | @click="openUploadDialog(type.value)" |
| | | :disabled="!isEdit" |
| | | > |
| | | æ·»å è¯ä¼°è¡¨ |
| | | </el-button> |
| | | </el-tooltip> |
| | | </div> |
| | | |
| | | <!-- éä»¶å表 --> |
| | | <el-table |
| | | :data="getAttachmentsByType(type.value)" |
| | | v-loading="attachmentLoading" |
| | | style="width: 100%; margin-top: 15px;" |
| | | > |
| | | <el-table-column label="æä»¶åç§°" min-width="200"> |
| | | <template slot-scope="scope"> |
| | | <div class="file-info"> |
| | | <i |
| | | class="el-icon-document" |
| | | style="margin-right: 8px; color: #409EFF;" |
| | | ></i> |
| | | <span>{{ scope.row.fileName }}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä»¶ç±»å" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-tag size="small">{{ |
| | | getFileType(scope.row.fileName) |
| | | }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä»¶å¤§å°" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatFileSize(scope.row.fileSize) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä¸ä¼ æ¶é´" width="160" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.uploadTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä¸ä¼ 人" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.uploader }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä½" width="180" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="handlePreview(scope.row)" |
| | | >é¢è§</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-download" |
| | | @click="handleDownload(scope.row)" |
| | | >ä¸è½½</el-button |
| | | > |
| | | <el-button |
| | | v-if="isEdit" |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | style="color: #F56C6C;" |
| | | @click="handleRemoveAttachment(scope.row)" |
| | | >å é¤</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div |
| | | v-if="getAttachmentsByType(type.value).length === 0" |
| | | class="empty-attachment" |
| | | > |
| | | <el-empty |
| | | description="ææ è¯ä¼°è¡¨éä»¶" |
| | | :image-size="80" |
| | | ></el-empty> |
| | | </div> |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </el-card> |
| | | |
| | | <!-- ä¸ä¼ å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | | :title="`ä¸ä¼ ${getCurrentTypeLabel}è¯ä¼°è¡¨`" |
| | | :visible.sync="uploadDialogVisible" |
| | | width="500px" |
| | | :close-on-click-modal="false" |
| | | > |
| | | <el-upload |
| | | ref="uploadRef" |
| | | class="upload-demo" |
| | | drag |
| | | :action="uploadAction" |
| | | :headers="headers" |
| | | multiple |
| | | :file-list="tempFileList" |
| | | :before-upload="beforeUpload" |
| | | :on-change="handleFileChange" |
| | | :on-remove="handleTempRemove" |
| | | :on-success="handleUploadSuccess" |
| | | :auto-upload="false" |
| | | > |
| | | <i class="el-icon-upload"></i> |
| | | <div class="el-upload__text"> |
| | | å°è¯ä¼°è¡¨æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em> |
| | | </div> |
| | | <div class="el-upload__tip" slot="tip"> |
| | | æ¯æä¸ä¼ pdfãjpgãpngãdocãdocxãxlsãxlsxæ ¼å¼æä»¶ï¼å个æä»¶ä¸è¶
è¿10MB |
| | | </div> |
| | | </el-upload> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="uploadDialogVisible = false">åæ¶</el-button> |
| | | <el-button |
| | | type="primary" |
| | | @click="submitUpload" |
| | | :loading="uploadLoading" |
| | | :disabled="tempFileList.length === 0" |
| | | > |
| | | 确认ä¸ä¼ |
| | | </el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | deathinfoedit, |
| | | deathinfoadd, |
| | | queryDathInfoBaseInfo |
| | | } from "@/api/businessApi"; |
| | | import { getToken } from "@/utils/auth"; |
| | | import CaseBasicInfo from "@/components/CaseBasicInfo"; |
| | | |
| | | export default { |
| | | name: "DeathJudgmentDetail", |
| | | components: { CaseBasicInfo }, |
| | | |
| | | data() { |
| | | return { |
| | | caseId: null, |
| | | // æ¯å¦ç¼è¾æ¨¡å¼ |
| | | isEdit: false, |
| | | // ä¿åå è½½ç¶æ |
| | | saveLoading: false, |
| | | infoid: undefined, |
| | | |
| | | // è¡¨åæ°æ® |
| | | form: { |
| | | id: undefined, |
| | | infoid: undefined, |
| | | donorno: "", |
| | | name: "", |
| | | sex: "", |
| | | age: "", |
| | | diagnosisname: "", |
| | | deathreason: "", |
| | | deathtime: "", |
| | | deathjudgedocto: "", |
| | | deathjudgedoctt: "", |
| | | gainhospitalno: "", |
| | | gainhospitalname: "", |
| | | isspendremember: 0, |
| | | isrestoreremains: 0, |
| | | rememberAnnex: "", |
| | | responsibleuserid: "", |
| | | responsibleusername: "", |
| | | recordstate: "0", |
| | | judgmentDescription: "" |
| | | }, |
| | | // 表åéªè¯è§å |
| | | rules: { |
| | | name: [ |
| | | { required: true, message: "æç®è
å§åä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | deathreason: [ |
| | | { required: true, message: "æ»äº¡åå ä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | deathtime: [ |
| | | { required: true, message: "æ»äº¡æ¶é´ä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | deathjudgedocto: [ |
| | | { required: true, message: "å¤å®å»çä¸ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ] |
| | | }, |
| | | // éä»¶ç¸å
³æ°æ® |
| | | activeAttachmentType: "1", |
| | | attachmentLoading: false, |
| | | uploadDialogVisible: false, |
| | | uploadLoading: false, |
| | | tempFileList: [], |
| | | currentUploadType: "", |
| | | uploadAction: process.env.VUE_APP_BASE_API + "/common/upload", |
| | | headers: { |
| | | Authorization: "Bearer " + getToken() |
| | | }, |
| | | // è¯ä¼°è¡¨ç±»åå®ä¹ |
| | | attachmentTypes: [ |
| | | { value: "1", label: "èæ»äº¡å¤å®è¡¨" }, |
| | | { value: "2", label: "èçµå¾è¯ä¼°è¡¨" }, |
| | | { value: "3", label: "çæ½ä¼æä½æè¯±åçµä½è¯ä¼°è¡¨" }, |
| | | { value: "4", label: "ç»é¢
夿®åè¶
声è¯ä¼°è®°å½" }, |
| | | { value: "5", label: "å«å¥å§èæä¼¤è´¨æ§ä¸å¿ - 临åºç»¼åè¯ä¼°è¡¨" }, |
| | | { value: "6", label: "UWè¯å表" }, |
| | | { value: "7", label: "å¿æ»äº¡å¤å®è¡¨" } |
| | | ], |
| | | |
| | | // éä»¶åè¡¨æ°æ® |
| | | attachmentList: [] |
| | | }; |
| | | }, |
| | | computed: { |
| | | getCurrentTypeLabel() { |
| | | const type = this.attachmentTypes.find( |
| | | t => t.value === this.currentUploadType |
| | | ); |
| | | return type ? type.label : ""; |
| | | } |
| | | }, |
| | | created() { |
| | | this.infoid = this.$route.query.infoid; |
| | | this.caseId = this.infoid; |
| | | const id = this.$route.query.id; |
| | | this.isEdit = this.$route.query.isEdit; |
| | | this.getDetail(this.infoid); |
| | | |
| | | // if (id && !this.$route.path.includes("/add")) { |
| | | // this.getDetail(id); |
| | | // } else if (this.$route.path.includes("/add")) { |
| | | // this.generateDonorNo(); |
| | | // } |
| | | this.getAttachmentList(); |
| | | }, |
| | | methods: { |
| | | // çææç®è
ç¼å· |
| | | generateDonorNo() { |
| | | const timestamp = Date.now().toString(); |
| | | this.form.donorno = "DONOR" + timestamp.slice(-8); |
| | | }, |
| | | // è·å详æ
|
| | | async getDetail(infoid) { |
| | | try { |
| | | const response = await queryDathInfoBaseInfo({ infoid }); |
| | | let realData = {}; |
| | | |
| | | if (response && response.data) { |
| | | realData = response.data[0]; |
| | | } else if (response) { |
| | | realData = response; |
| | | } |
| | | |
| | | // æ å°å段å°è¡¨å |
| | | this.form = { |
| | | ...this.form, |
| | | ...realData, |
| | | // ç¡®ä¿æ°å¼ç±»ååæ®µæ£ç¡®è½¬æ¢ |
| | | isspendremember: realData.isspendremember |
| | | ? parseInt(realData.isspendremember) |
| | | : 0, |
| | | isrestoreremains: realData.isrestoreremains |
| | | ? parseInt(realData.isrestoreremains) |
| | | : 0 |
| | | }; |
| | | |
| | | // è§£æéä»¶ä¿¡æ¯ |
| | | if (realData.rememberAnnex) { |
| | | this.parseAttachmentData(realData.rememberAnnex); |
| | | } |
| | | } catch (error) { |
| | | console.error("è·åæ»äº¡å¤å®è¯¦æ
失败:", error); |
| | | this.$message.error("æ°æ®å 载失败"); |
| | | } |
| | | }, |
| | | // è§£æéä»¶æ°æ® |
| | | parseAttachmentData(attachmentJson) { |
| | | try { |
| | | if (attachmentJson) { |
| | | const attachments = JSON.parse(attachmentJson); |
| | | if (Array.isArray(attachments)) { |
| | | this.attachmentList = attachments; |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error("è§£æéä»¶æ°æ®å¤±è´¥:", error); |
| | | } |
| | | }, |
| | | // æå»ºéä»¶JSONæ°æ® |
| | | buildAttachmentJson() { |
| | | return JSON.stringify(this.attachmentList); |
| | | }, |
| | | // è·åç¶ææ ç¾æ ·å¼ |
| | | getStatusTag(status) { |
| | | const statusMap = { |
| | | "0": "warning", // ç»´æ¤ä¸ |
| | | "1": "success", // 已宿 |
| | | "99": "danger" // å·²ç»æ¢ |
| | | }; |
| | | return statusMap[status] || "info"; |
| | | }, |
| | | // è·åç¶æææ¬ |
| | | getStatusText(status) { |
| | | const textMap = { |
| | | "0": "ç»´æ¤ä¸", |
| | | "1": "已宿", |
| | | "99": "å·²ç»æ¢" |
| | | }; |
| | | return textMap[status] || "æªç¥ç¶æ"; |
| | | }, |
| | | // è·åéä»¶å表 |
| | | getAttachmentList() { |
| | | this.attachmentLoading = true; |
| | | // å®é
项ç®ä¸ä»æ¥å£è·åéä»¶æ°æ® |
| | | setTimeout(() => { |
| | | this.attachmentLoading = false; |
| | | }, 500); |
| | | }, |
| | | // æ ¹æ®ç±»åè·åéä»¶ |
| | | getAttachmentsByType(type) { |
| | | return this.attachmentList.filter(item => item.type === type); |
| | | }, |
| | | // è·åæä»¶ç±»å |
| | | getFileType(fileName) { |
| | | const ext = fileName |
| | | .split(".") |
| | | .pop() |
| | | .toLowerCase(); |
| | | const typeMap = { |
| | | pdf: "PDF", |
| | | doc: "DOC", |
| | | docx: "DOCX", |
| | | xls: "XLS", |
| | | xlsx: "XLSX", |
| | | jpg: "JPG", |
| | | jpeg: "JPEG", |
| | | png: "PNG" |
| | | }; |
| | | return typeMap[ext] || ext.toUpperCase(); |
| | | }, |
| | | // æå¼ä¸ä¼ å¯¹è¯æ¡ |
| | | openUploadDialog(type = null) { |
| | | this.currentUploadType = type || this.activeAttachmentType; |
| | | this.tempFileList = []; |
| | | this.uploadDialogVisible = true; |
| | | this.$nextTick(() => { |
| | | if (this.$refs.uploadRef) { |
| | | this.$refs.uploadRef.clearFiles(); |
| | | } |
| | | }); |
| | | }, |
| | | // ä¸ä¼ åæ ¡éª |
| | | beforeUpload(file) { |
| | | const allowedTypes = [ |
| | | "application/pdf", |
| | | "image/jpeg", |
| | | "image/png", |
| | | "application/msword", |
| | | "application/vnd.openxmlformats-officedocument.wordprocessingml.document", |
| | | "application/vnd.ms-excel", |
| | | "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" |
| | | ]; |
| | | |
| | | const maxSize = 10 * 1024 * 1024; // 10MB |
| | | |
| | | const isTypeOk = |
| | | allowedTypes.includes(file.type) || |
| | | file.name.endsWith(".pdf") || |
| | | file.name.endsWith(".jpg") || |
| | | file.name.endsWith(".jpeg") || |
| | | file.name.endsWith(".png") || |
| | | file.name.endsWith(".doc") || |
| | | file.name.endsWith(".docx") || |
| | | file.name.endsWith(".xls") || |
| | | file.name.endsWith(".xlsx"); |
| | | |
| | | if (!isTypeOk) { |
| | | this.$message.error( |
| | | "æä»¶æ ¼å¼ä¸æ¯æï¼è¯·ä¸ä¼ pdfãjpgãpngãdocãdocxãxlsæxlsxæ ¼å¼æä»¶" |
| | | ); |
| | | return false; |
| | | } |
| | | |
| | | if (file.size > maxSize) { |
| | | this.$message.error("æä»¶å¤§å°ä¸è½è¶
è¿10MB"); |
| | | return false; |
| | | } |
| | | |
| | | return true; |
| | | }, |
| | | // æä»¶éæ©åå |
| | | handleFileChange(file, fileList) { |
| | | this.tempFileList = fileList; |
| | | }, |
| | | // ç§»é¤ä¸´æ¶æä»¶ |
| | | handleTempRemove(file, fileList) { |
| | | this.tempFileList = fileList; |
| | | }, |
| | | /** ä¸ä¼ æåå¤ç */ |
| | | handleUploadSuccess(response, file, fileList) { |
| | | if (response.code === 200) { |
| | | file.url = response.data || response.url; |
| | | this.$message.success("æä»¶ä¸ä¼ æå"); |
| | | for (const file of this.tempFileList) { |
| | | const newAttachment = { |
| | | id: Date.now() + Math.random(), |
| | | type: this.currentUploadType, |
| | | typeName: this.getCurrentTypeLabel, |
| | | fileName: file.name, |
| | | fileSize: file.size, |
| | | uploadTime: new Date().toISOString(), |
| | | uploader: "å½åç¨æ·", |
| | | fileUrl: file.url |
| | | }; |
| | | |
| | | this.attachmentList.push(newAttachment); |
| | | } |
| | | |
| | | // æ´æ°éä»¶JSONæ°æ®å°è¡¨å |
| | | this.form.rememberAnnex = this.buildAttachmentJson(); |
| | | |
| | | this.$message.success("æä»¶ä¸ä¼ æå"); |
| | | this.uploadDialogVisible = false; |
| | | this.uploadLoading = false; |
| | | this.tempFileList = []; |
| | | } else { |
| | | this.$message.error(response.msg || "æä»¶ä¸ä¼ 失败"); |
| | | } |
| | | }, |
| | | // æäº¤ä¸ä¼ |
| | | async submitUpload() { |
| | | if (this.tempFileList.length === 0) { |
| | | this.$message.warning("请å
éæ©è¦ä¸ä¼ çæä»¶"); |
| | | return; |
| | | } |
| | | this.$refs.uploadRef.submit(); |
| | | this.uploadLoading = true; |
| | | |
| | | // try { |
| | | // for (const file of this.tempFileList) { |
| | | // const newAttachment = { |
| | | // id: Date.now() + Math.random(), |
| | | // type: this.currentUploadType, |
| | | // typeName: this.getCurrentTypeLabel, |
| | | // fileName: file.name, |
| | | // fileSize: file.size, |
| | | // uploadTime: new Date().toISOString(), |
| | | // uploader: "å½åç¨æ·", |
| | | // fileUrl: URL.createObjectURL(file.raw) |
| | | // }; |
| | | |
| | | // this.attachmentList.push(newAttachment); |
| | | // } |
| | | |
| | | // // æ´æ°éä»¶JSONæ°æ®å°è¡¨å |
| | | // this.form.rememberAnnex = this.buildAttachmentJson(); |
| | | |
| | | // this.$message.success("æä»¶ä¸ä¼ æå"); |
| | | // this.uploadDialogVisible = false; |
| | | // this.tempFileList = []; |
| | | // } catch (error) { |
| | | // this.$message.error("æä»¶ä¸ä¼ 失败"); |
| | | // console.error("ä¸ä¼ 失败:", error); |
| | | // } finally { |
| | | // this.uploadLoading = false; |
| | | // } |
| | | }, |
| | | // å é¤éä»¶ |
| | | handleRemoveAttachment(attachment) { |
| | | this.$confirm("ç¡®å®è¦å é¤è¿ä¸ªè¯ä¼°è¡¨éä»¶åï¼", "æç¤º", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | const index = this.attachmentList.findIndex( |
| | | item => item.id === attachment.id |
| | | ); |
| | | if (index !== -1) { |
| | | this.attachmentList.splice(index, 1); |
| | | // æ´æ°éä»¶JSONæ°æ®å°è¡¨å |
| | | this.form.rememberAnnex = this.buildAttachmentJson(); |
| | | this.$message.success("è¯ä¼°è¡¨å 餿å"); |
| | | } |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | // é¢è§éä»¶ |
| | | handlePreview(attachment) { |
| | | if (attachment.fileName.endsWith(".pdf")) { |
| | | window.open(attachment.fileUrl, "_blank"); |
| | | } else if (attachment.fileName.match(/\.(jpg|jpeg|png)$/i)) { |
| | | this.$alert( |
| | | `<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`, |
| | | "å¾çé¢è§", |
| | | { |
| | | dangerouslyUseHTMLString: true, |
| | | customClass: "image-preview-dialog" |
| | | } |
| | | ); |
| | | } else { |
| | | this.$message.info("该æä»¶ç±»åæä¸æ¯æå¨çº¿é¢è§ï¼è¯·ä¸è½½åæ¥ç"); |
| | | } |
| | | }, |
| | | // ä¸è½½éä»¶ |
| | | handleDownload(attachment) { |
| | | const link = document.createElement("a"); |
| | | link.href = attachment.fileUrl; |
| | | link.download = attachment.fileName; |
| | | link.click(); |
| | | this.$message.success(`å¼å§ä¸è½½: ${attachment.fileName}`); |
| | | }, |
| | | // ç¼è¾ä¿¡æ¯ |
| | | handleEdit() { |
| | | this.isEdit = true; |
| | | }, |
| | | // ä¿åä¿¡æ¯ |
| | | async handleSave() { |
| | | this.$refs.form.validate(async valid => { |
| | | if (valid) { |
| | | this.saveLoading = true; |
| | | |
| | | try { |
| | | // æå»ºæäº¤æ°æ® |
| | | const submitData = { |
| | | ...this.form, |
| | | infoid: this.infoid, |
| | | // ç¡®ä¿éä»¶æ°æ®ææ° |
| | | rememberannex: this.buildAttachmentJson() |
| | | }; |
| | | let response = null; |
| | | |
| | | if (submitData.id) { |
| | | response = await deathinfoedit(submitData); |
| | | } else { |
| | | response = await deathinfoadd(submitData); |
| | | } |
| | | // const response = await deathinfoedit(submitData); |
| | | |
| | | if (response.code === 200) { |
| | | this.$message.success("ä¿åæå"); |
| | | this.isEdit = false; |
| | | if (!this.form.id) { |
| | | this.form.id = response.data; |
| | | } |
| | | if (this.$route.path.includes("/add")) { |
| | | this.$router.push("/case/deathJudgment"); |
| | | } |
| | | } else { |
| | | this.$message.error(response.message || "ä¿å失败"); |
| | | } |
| | | } catch (error) { |
| | | console.error("ä¿å失败:", error); |
| | | this.$message.error("ä¿å失败"); |
| | | } finally { |
| | | this.saveLoading = false; |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | // æä»¶å¤§å°æ ¼å¼å |
| | | formatFileSize(size) { |
| | | if (size === 0) return "0 B"; |
| | | const k = 1024; |
| | | const sizes = ["B", "KB", "MB", "GB"]; |
| | | const i = Math.floor(Math.log(size) / Math.log(k)); |
| | | return parseFloat((size / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]; |
| | | }, |
| | | // æ¶é´æ ¼å¼å |
| | | parseTime(time) { |
| | | if (!time) return ""; |
| | | const date = new Date(time); |
| | | return `${date.getFullYear()}-${(date.getMonth() + 1) |
| | | .toString() |
| | | .padStart(2, "0")}-${date |
| | | .getDate() |
| | | .toString() |
| | | .padStart(2, "0")} ${date |
| | | .getHours() |
| | | .toString() |
| | | .padStart(2, "0")}:${date |
| | | .getMinutes() |
| | | .toString() |
| | | .padStart(2, "0")}`; |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .death-judgment-detail { |
| | | padding: 20px; |
| | | } |
| | | |
| | | .detail-card { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .attachment-card { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .detail-title { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .attachment-upload-section { |
| | | padding: 10px; |
| | | } |
| | | |
| | | .upload-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 15px; |
| | | } |
| | | |
| | | .upload-title { |
| | | font-size: 14px; |
| | | font-weight: 600; |
| | | color: #303133; |
| | | } |
| | | |
| | | .file-info { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .empty-attachment { |
| | | text-align: center; |
| | | padding: 40px 0; |
| | | color: #909399; |
| | | } |
| | | |
| | | /* å¾çé¢è§å¯¹è¯æ¡æ ·å¼ */ |
| | | :deep(.image-preview-dialog) { |
| | | width: auto; |
| | | max-width: 90vw; |
| | | } |
| | | |
| | | :deep(.image-preview-dialog .el-message-box__content) { |
| | | text-align: center; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="death-judgment-detail"> |
| | | <case-basic-info :case-id="caseId" :show-attachment="true" /> |
| | | <el-card class="detail-card"> |
| | | <!-- åºç¡ä¿¡æ¯ --> |
| | | <!-- å
Œ
±ä¿¡æ¯æ¨¡åï¼ç¬ç«æ¾ç¤ºï¼ --> |
| | | |
| | | <!-- å¤å®ç±»åæ ç¾é¡µ --> |
| | | <el-card class="type-card"> |
| | | <el-tabs |
| | | v-model="activeJudgmentType" |
| | | type="card" |
| | | @tab-click="handleTabChange" |
| | | > |
| | | <el-tab-pane label="èæ»äº¡å¤å®" name="brain"> |
| | | <span slot="label"> |
| | | <i class="el-icon-s-promotion" style="margin-right: 5px;"></i> |
| | | èæ»äº¡å¤å® |
| | | </span> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="å¿æ»äº¡å¤å®" name="heart"> |
| | | <span slot="label"> |
| | | <i class="el-icon-help" style="margin-right: 5px;"></i> |
| | | å¿æ»äº¡å¤å® |
| | | </span> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </el-card> |
| | | <el-card class="detail-card common-info-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">æ»äº¡å¤å®åºæ¬ä¿¡æ¯</span> |
| | | <el-button |
| | | v-if="isEdit" |
| | | type="success" |
| | | style="float: right" |
| | | @click="handleSave" |
| | | :loading="saveLoading" |
| | | > |
| | | ä¿åä¿¡æ¯ |
| | | </el-button> |
| | | <el-button |
| | | v-else |
| | | type="primary" |
| | | style="float: right" |
| | | @click="handleEdit" |
| | | > |
| | | ç¼è¾ä¿¡æ¯ |
| | | </el-button> |
| | | <span class="detail-title">å
Œ
±ä¿¡æ¯</span> |
| | | </div> |
| | | |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ»äº¡åå " prop="deathreason"> |
| | | <el-input v-model="form.deathreason" :readonly="!isEdit" /> |
| | | <!-- <el-select |
| | | v-model="form.deathreason" |
| | | :disabled="!isEdit" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="èæ»äº¡" value="brain_death" /> |
| | | <el-option label="å¿æ»äº¡" value="heart_death" /> |
| | | <el-option label="å
¶ä»" value="other" /> |
| | | </el-select> --> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-form :model="form" label-width="120px"> |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <el-form-item label="è´è´£äºº" prop="responsibleusername"> |
| | | <el-input |
| | |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <!-- <el-col :span="8"> |
| | | <el-form-item label="è®°å½ç¶æ" prop="recordstate"> |
| | | <el-tag :type="getStatusTag(form.recordstate)"> |
| | | {{ getStatusText(form.recordstate) }} |
| | | </el-tag> |
| | | </el-form-item> |
| | | </el-col> --> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ»äº¡æ¶é´" prop="deathtime"> |
| | | <el-date-picker |
| | | v-model="form.deathtime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%" |
| | | :disabled="!isEdit" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¤å®å»çä¸" prop="deathjudgedocto"> |
| | | <el-input v-model="form.deathjudgedocto" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¤å®å»çäº" prop="deathjudgedoctt"> |
| | | <el-input v-model="form.deathjudgedoctt" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¨å®è·åæºæ" prop="gainhospitalname"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-form-item label="æ»äº¡å¤å®è¯´æ" prop="remark"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | v-model="form.remark" |
| | | :readonly="!isEdit" |
| | | placeholder="详ç»è®°å½æ»äº¡å¤å®è¿ç¨å便®" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | |
| | | <!-- è¯ä¼°è¡¨éä»¶ --> |
| | | <el-card class="attachment-card"> |
| | | <!-- èæ»äº¡å¤å®æ¨¡å --> |
| | | <el-card v-if="activeJudgmentType === 'brain'" class="detail-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">æ»äº¡å¤å®è¯ä¼°è¡¨éä»¶</span> |
| | | <!-- <el-button |
| | | <span class="detail-title">èæ»äº¡å¤å®ä¿¡æ¯</span> |
| | | <el-button |
| | | v-if="isEdit" |
| | | type="primary" |
| | | size="mini" |
| | | @click="openUploadDialog" |
| | | :loading="uploadLoading" |
| | | style="float: right; margin-left: 10px;" |
| | | type="success" |
| | | @click="handleSave" |
| | | :loading="saveLoading" |
| | | > |
| | | ä¸ä¼ éä»¶ |
| | | </el-button> --> |
| | | ä¿åä¿¡æ¯ |
| | | </el-button> |
| | | <el-button |
| | | v-else |
| | | style="float: right; margin-left: 10px;" |
| | | type="primary" |
| | | @click="handleEdit" |
| | | > |
| | | ç¼è¾ä¿¡æ¯ |
| | | </el-button> |
| | | </div> |
| | | |
| | | <!-- éä»¶ç±»åéé¡¹å¡ --> |
| | | <el-tabs v-model="activeAttachmentType" type="card"> |
| | | <el-tab-pane |
| | | v-for="type in attachmentTypes" |
| | | :key="type.value" |
| | | :label="type.label" |
| | | :name="type.value" |
| | | > |
| | | <div class="attachment-upload-section"> |
| | | <div class="upload-header"> |
| | | <span class="upload-title">{{ type.label }}</span> |
| | | <el-tooltip content="ç¹å»ä¸ä¼ 该类åè¯ä¼°è¡¨" placement="top"> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | | @click="openUploadDialog(type.value)" |
| | | :disabled="!isEdit" |
| | | > |
| | | æ·»å è¯ä¼°è¡¨ |
| | | </el-button> |
| | | </el-tooltip> |
| | | <el-form :model="form" ref="brainForm" :rules="rules" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ»äº¡åå " prop="deathreason"> |
| | | <el-input v-model="form.deathreason" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ»äº¡æ¶é´" prop="deathtime"> |
| | | <el-date-picker |
| | | v-model="form.deathtime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%" |
| | | :disabled="!isEdit" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¤å®å»çä¸" prop="deathjudgedocto"> |
| | | <el-input v-model="form.deathjudgedocto" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¤å®å»çäº" prop="deathjudgedoctt"> |
| | | <el-input v-model="form.deathjudgedoctt" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | |
| | | <!-- èæ»äº¡è¯ä¼°è¡¨éä»¶ --> |
| | | <div class="attachment-section"> |
| | | <div class="attachment-header"> |
| | | <h3>èæ»äº¡å¤å®è¯ä¼°è¡¨éä»¶</h3> |
| | | </div> |
| | | |
| | | <!-- éä»¶ç±»åéé¡¹å¡ --> |
| | | <el-tabs v-model="activeAttachmentType" type="card"> |
| | | <el-tab-pane |
| | | v-for="type in brainDeathAttachmentTypes" |
| | | :key="type.value" |
| | | :label="type.label" |
| | | :name="type.value" |
| | | > |
| | | <div class="attachment-upload-section"> |
| | | <div class="upload-header"> |
| | | <span class="upload-title">{{ type.label }}</span> |
| | | <el-tooltip content="ç¹å»ä¸ä¼ 该类åè¯ä¼°è¡¨" placement="top"> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | | @click="openUploadDialog(type.value)" |
| | | :disabled="!isEdit" |
| | | > |
| | | æ·»å è¯ä¼°è¡¨ |
| | | </el-button> |
| | | </el-tooltip> |
| | | </div> |
| | | |
| | | <!-- éä»¶å表 --> |
| | | <el-table |
| | | :data="getAttachmentsByType(type.value)" |
| | | v-loading="attachmentLoading" |
| | | style="width: 100%; margin-top: 15px;" |
| | | > |
| | | <el-table-column label="æä»¶åç§°" min-width="200"> |
| | | <template slot-scope="scope"> |
| | | <div class="file-info"> |
| | | <i |
| | | class="el-icon-document" |
| | | style="margin-right: 8px; color: #409EFF;" |
| | | ></i> |
| | | <span>{{ scope.row.fileName }}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä»¶ç±»å" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-tag size="small">{{ |
| | | getFileType(scope.row.fileName) |
| | | }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä»¶å¤§å°" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatFileSize(scope.row.fileSize) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä¸ä¼ æ¶é´" width="160" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.uploadTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä¸ä¼ 人" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.uploader }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä½" width="180" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="handlePreview(scope.row)" |
| | | >é¢è§</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-download" |
| | | @click="handleDownload(scope.row)" |
| | | >ä¸è½½</el-button |
| | | > |
| | | <el-button |
| | | v-if="isEdit" |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | style="color: #F56C6C;" |
| | | @click="handleRemoveAttachment(scope.row)" |
| | | >å é¤</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div |
| | | v-if="getAttachmentsByType(type.value).length === 0" |
| | | class="empty-attachment" |
| | | > |
| | | <el-empty |
| | | description="ææ è¯ä¼°è¡¨éä»¶" |
| | | :image-size="80" |
| | | ></el-empty> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- éä»¶å表 --> |
| | | <el-table |
| | | :data="getAttachmentsByType(type.value)" |
| | | v-loading="attachmentLoading" |
| | | style="width: 100%; margin-top: 15px;" |
| | | > |
| | | <el-table-column label="æä»¶åç§°" min-width="200"> |
| | | <template slot-scope="scope"> |
| | | <div class="file-info"> |
| | | <i |
| | | class="el-icon-document" |
| | | style="margin-right: 8px; color: #409EFF;" |
| | | ></i> |
| | | <span>{{ scope.row.fileName }}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä»¶ç±»å" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-tag size="small">{{ |
| | | getFileType(scope.row.fileName) |
| | | }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä»¶å¤§å°" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatFileSize(scope.row.fileSize) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä¸ä¼ æ¶é´" width="160" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.uploadTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä¸ä¼ 人" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.uploader }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä½" width="180" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="handlePreview(scope.row)" |
| | | >é¢è§</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-download" |
| | | @click="handleDownload(scope.row)" |
| | | >ä¸è½½</el-button |
| | | > |
| | | <el-button |
| | | v-if="isEdit" |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | style="color: #F56C6C;" |
| | | @click="handleRemoveAttachment(scope.row)" |
| | | >å é¤</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div |
| | | v-if="getAttachmentsByType(type.value).length === 0" |
| | | class="empty-attachment" |
| | | > |
| | | <el-empty |
| | | description="ææ è¯ä¼°è¡¨éä»¶" |
| | | :image-size="80" |
| | | ></el-empty> |
| | | </div> |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </el-card> |
| | | |
| | | <!-- ä¸ä¼ å¯¹è¯æ¡ --> |
| | | <!-- å¿æ»äº¡å¤å®æ¨¡å --> |
| | | <el-card v-else class="detail-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">å¿æ»äº¡å¤å®ä¿¡æ¯</span> |
| | | <el-button |
| | | v-if="isEdit" |
| | | style="float: right; margin-left: 10px;" |
| | | type="success" |
| | | @click="handleSave" |
| | | :loading="saveLoading" |
| | | > |
| | | ä¿åä¿¡æ¯ |
| | | </el-button> |
| | | <el-button |
| | | v-else |
| | | style="float: right; margin-left: 10px;" |
| | | type="primary" |
| | | @click="handleEdit" |
| | | > |
| | | ç¼è¾ä¿¡æ¯ |
| | | </el-button> |
| | | </div> |
| | | |
| | | <el-form :model="form" ref="heartForm" :rules="rules" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¿æ»äº¡åå " prop="heartdeathreason"> |
| | | <el-input v-model="form.heartdeathreason" :readonly="!isEdit" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¿æ»äº¡æ¶é´" prop="heartdeathtime"> |
| | | <el-date-picker |
| | | v-model="form.heartdeathtime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%" |
| | | :disabled="!isEdit" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¤å®å»çä¸" prop="heartdeathjudgedocto"> |
| | | <el-input |
| | | v-model="form.heartdeathjudgedocto" |
| | | :readonly="!isEdit" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å¤å®å»çäº" prop="heartdeathjudgedoctt"> |
| | | <el-input |
| | | v-model="form.heartdeathjudgedoctt" |
| | | :readonly="!isEdit" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | |
| | | <!-- å¿æ»äº¡è¯ä¼°è¡¨éä»¶ --> |
| | | <div class="attachment-section"> |
| | | <div class="attachment-header"> |
| | | <h3>å¿æ»äº¡å¤å®è¯ä¼°è¡¨éä»¶</h3> |
| | | </div> |
| | | |
| | | <!-- å¿æ»äº¡éä»¶ç±»åéé¡¹å¡ --> |
| | | <el-tabs v-model="activeHeartDeathAttachmentType" type="card"> |
| | | <el-tab-pane |
| | | v-for="type in heartDeathAttachmentTypes" |
| | | :key="type.value" |
| | | :label="type.label" |
| | | :name="type.value" |
| | | > |
| | | <div class="attachment-upload-section"> |
| | | <div class="upload-header"> |
| | | <span class="upload-title">{{ type.label }}</span> |
| | | <el-tooltip content="ç¹å»ä¸ä¼ 该类åè¯ä¼°è¡¨" placement="top"> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | | @click="openHeartDeathUploadDialog(type.value)" |
| | | :disabled="!isEdit" |
| | | > |
| | | æ·»å è¯ä¼°è¡¨ |
| | | </el-button> |
| | | </el-tooltip> |
| | | </div> |
| | | |
| | | <!-- å¿æ»äº¡éä»¶å表 --> |
| | | <el-table |
| | | :data="getHeartDeathAttachmentsByType(type.value)" |
| | | v-loading="attachmentLoading" |
| | | style="width: 100%; margin-top: 15px;" |
| | | > |
| | | <el-table-column label="æä»¶åç§°" min-width="200"> |
| | | <template slot-scope="scope"> |
| | | <div class="file-info"> |
| | | <i |
| | | class="el-icon-document" |
| | | style="margin-right: 8px; color: #409EFF;" |
| | | ></i> |
| | | <span>{{ scope.row.fileName }}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä»¶ç±»å" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-tag size="small">{{ |
| | | getFileType(scope.row.fileName) |
| | | }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä»¶å¤§å°" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatFileSize(scope.row.fileSize) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä¸ä¼ æ¶é´" width="160" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.uploadTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä¸ä¼ 人" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.uploader }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="æä½" width="180" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="handlePreview(scope.row)" |
| | | >é¢è§</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-download" |
| | | @click="handleDownload(scope.row)" |
| | | >ä¸è½½</el-button |
| | | > |
| | | <el-button |
| | | v-if="isEdit" |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | style="color: #F56C6C;" |
| | | @click="handleRemoveHeartDeathAttachment(scope.row)" |
| | | >å é¤</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div |
| | | v-if="getHeartDeathAttachmentsByType(type.value).length === 0" |
| | | class="empty-attachment" |
| | | > |
| | | <el-empty |
| | | description="ææ è¯ä¼°è¡¨éä»¶" |
| | | :image-size="80" |
| | | ></el-empty> |
| | | </div> |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </el-card> |
| | | |
| | | |
| | | |
| | | <!-- ä¸ä¼ å¯¹è¯æ¡ï¼èæ»äº¡ï¼ --> |
| | | <el-dialog |
| | | :title="`ä¸ä¼ ${getCurrentTypeLabel}è¯ä¼°è¡¨`" |
| | | :title="`ä¸ä¼ ${getCurrentBrainDeathTypeLabel}è¯ä¼°è¡¨`" |
| | | :visible.sync="uploadDialogVisible" |
| | | width="500px" |
| | | :close-on-click-modal="false" |
| | |
| | | </el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- ä¸ä¼ å¯¹è¯æ¡ï¼å¿æ»äº¡ï¼ --> |
| | | <el-dialog |
| | | :title="`ä¸ä¼ ${getCurrentHeartDeathTypeLabel}è¯ä¼°è¡¨`" |
| | | :visible.sync="heartDeathUploadDialogVisible" |
| | | width="500px" |
| | | :close-on-click-modal="false" |
| | | > |
| | | <el-upload |
| | | ref="heartDeathUploadRef" |
| | | class="upload-demo" |
| | | drag |
| | | :action="uploadAction" |
| | | :headers="headers" |
| | | multiple |
| | | :file-list="tempHeartDeathFileList" |
| | | :before-upload="beforeUpload" |
| | | :on-change="handleHeartDeathFileChange" |
| | | :on-remove="handleHeartDeathTempRemove" |
| | | :on-success="handleHeartDeathUploadSuccess" |
| | | :auto-upload="false" |
| | | > |
| | | <i class="el-icon-upload"></i> |
| | | <div class="el-upload__text"> |
| | | å°è¯ä¼°è¡¨æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em> |
| | | </div> |
| | | <div class="el-upload__tip" slot="tip"> |
| | | æ¯æä¸ä¼ pdfãjpgãpngãdocãdocxãxlsãxlsxæ ¼å¼æä»¶ï¼å个æä»¶ä¸è¶
è¿10MB |
| | | </div> |
| | | </el-upload> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="heartDeathUploadDialogVisible = false" |
| | | >åæ¶</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | @click="submitHeartDeathUpload" |
| | | :loading="heartDeathUploadLoading" |
| | | :disabled="tempHeartDeathFileList.length === 0" |
| | | > |
| | | 确认ä¸ä¼ |
| | | </el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | data() { |
| | | return { |
| | | caseId: null, |
| | | // æ¯å¦ç¼è¾æ¨¡å¼ |
| | | isEdit: false, |
| | | // ä¿åå è½½ç¶æ |
| | | saveLoading: false, |
| | | infoid: undefined, |
| | | |
| | | // å¤å®ç±»åæ ç¾ |
| | | activeJudgmentType: "brain", // é»è®¤æ¾ç¤ºèæ»äº¡ |
| | | |
| | | // è¡¨åæ°æ® |
| | | form: { |
| | |
| | | sex: "", |
| | | age: "", |
| | | diagnosisname: "", |
| | | // èæ»äº¡ç¸å
³å段 |
| | | deathreason: "", |
| | | deathtime: "", |
| | | deathjudgedocto: "", |
| | | deathjudgedoctt: "", |
| | | // å¿æ»äº¡ç¸å
³å段 |
| | | heartdeathtime: "", |
| | | heartdeathreason: "", |
| | | heartdeathjudgedocto: "", |
| | | heartdeathjudgedoctt: "", |
| | | heartDeathRemark: "", |
| | | // å
Œ
±å段 |
| | | gainhospitalno: "", |
| | | gainhospitalname: "", |
| | | isspendremember: 0, |
| | | isrestoreremains: 0, |
| | | rememberAnnex: "", |
| | | heartdeathjudgeannex: "", // æ°å¢å¿æ»äº¡éä»¶åæ®µ |
| | | responsibleuserid: "", |
| | | responsibleusername: "", |
| | | recordstate: "0", |
| | | judgmentDescription: "" |
| | | remark: "" |
| | | }, |
| | | // 表åéªè¯è§å |
| | | rules: { |
| | |
| | | ], |
| | | deathjudgedocto: [ |
| | | { required: true, message: "å¤å®å»çä¸ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | heartdeathreason: [ |
| | | { required: false, message: "å¿æ»äº¡åå ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | heartdeathtime: [ |
| | | { required: false, message: "å¿æ»äº¡æ¶é´ä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | heartdeathjudgedocto: [ |
| | | { |
| | | required: false, |
| | | message: "å¿æ»äº¡å¤å®å»çä¸ä¸è½ä¸ºç©º", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | }, |
| | | // éä»¶ç¸å
³æ°æ® |
| | | activeAttachmentType: "1", |
| | | activeHeartDeathAttachmentType: "heart_1", // å¿æ»äº¡éä»¶ç±»å |
| | | attachmentLoading: false, |
| | | uploadDialogVisible: false, |
| | | heartDeathUploadDialogVisible: false, // å¿æ»äº¡ä¸ä¼ å¯¹è¯æ¡ |
| | | uploadLoading: false, |
| | | heartDeathUploadLoading: false, // å¿æ»äº¡ä¸ä¼ å è½½ç¶æ |
| | | tempFileList: [], |
| | | tempHeartDeathFileList: [], // å¿æ»äº¡ä¸´æ¶æä»¶å表 |
| | | currentUploadType: "", |
| | | currentHeartDeathUploadType: "", // å½åå¿æ»äº¡ä¸ä¼ ç±»å |
| | | uploadAction: process.env.VUE_APP_BASE_API + "/common/upload", |
| | | headers: { |
| | | Authorization: "Bearer " + getToken() |
| | | }, |
| | | // è¯ä¼°è¡¨ç±»åå®ä¹ |
| | | attachmentTypes: [ |
| | | // èæ»äº¡è¯ä¼°è¡¨ç±»åå®ä¹ |
| | | brainDeathAttachmentTypes: [ |
| | | { value: "1", label: "èæ»äº¡å¤å®è¡¨" }, |
| | | { value: "2", label: "èçµå¾è¯ä¼°è¡¨" }, |
| | | { value: "3", label: "çæ½ä¼æä½æè¯±åçµä½è¯ä¼°è¡¨" }, |
| | | { value: "4", label: "ç»é¢
夿®åè¶
声è¯ä¼°è®°å½" }, |
| | | { value: "5", label: "å«å¥å§èæä¼¤è´¨æ§ä¸å¿ - 临åºç»¼åè¯ä¼°è¡¨" }, |
| | | { value: "6", label: "UWè¯å表" }, |
| | | { value: "7", label: "å¿æ»äº¡å¤å®è¡¨" } |
| | | { value: "6", label: "UWè¯å表" } |
| | | ], |
| | | // å¿æ»äº¡è¯ä¼°è¡¨ç±»åå®ä¹ |
| | | heartDeathAttachmentTypes: [ |
| | | { value: "heart_1", label: "å¿æ»äº¡å¤å®è¡¨" }, |
| | | { value: "heart_2", label: "å¿çµå¾è¯ä¼°è¡¨" } |
| | | ], |
| | | |
| | | // éä»¶åè¡¨æ°æ® |
| | | attachmentList: [] |
| | | attachmentList: [], // èæ»äº¡éä»¶ |
| | | heartDeathAttachmentList: [] // å¿æ»äº¡éä»¶ |
| | | }; |
| | | }, |
| | | computed: { |
| | | getCurrentTypeLabel() { |
| | | const type = this.attachmentTypes.find( |
| | | getCurrentBrainDeathTypeLabel() { |
| | | const type = this.brainDeathAttachmentTypes.find( |
| | | t => t.value === this.currentUploadType |
| | | ); |
| | | return type ? type.label : ""; |
| | | }, |
| | | getCurrentHeartDeathTypeLabel() { |
| | | const type = this.heartDeathAttachmentTypes.find( |
| | | t => t.value === this.currentHeartDeathUploadType |
| | | ); |
| | | return type ? type.label : ""; |
| | | } |
| | |
| | | created() { |
| | | this.infoid = this.$route.query.infoid; |
| | | this.caseId = this.infoid; |
| | | const id = this.$route.query.id; |
| | | this.isEdit = this.$route.query.isEdit; |
| | | this.getDetail(this.infoid); |
| | | this.isEdit = this.$route.query.isEdit === "true"; |
| | | |
| | | // if (id && !this.$route.path.includes("/add")) { |
| | | // this.getDetail(id); |
| | | // } else if (this.$route.path.includes("/add")) { |
| | | // this.generateDonorNo(); |
| | | // } |
| | | // ä»è·¯ç±åæ°è·åé»è®¤æ¾ç¤ºç±»å |
| | | if (this.$route.query.judgmentType) { |
| | | this.activeJudgmentType = this.$route.query.judgmentType; |
| | | } |
| | | |
| | | this.getDetail(this.infoid); |
| | | this.getAttachmentList(); |
| | | }, |
| | | methods: { |
| | | // æ ç¾é¡µåæ¢ |
| | | handleTabChange(tab) { |
| | | this.activeJudgmentType = tab.name; |
| | | // å¯ä»¥å¨è¿éæ·»å å
¶ä»åæ¢é»è¾ |
| | | }, |
| | | |
| | | // çææç®è
ç¼å· |
| | | generateDonorNo() { |
| | | const timestamp = Date.now().toString(); |
| | | this.form.donorno = "DONOR" + timestamp.slice(-8); |
| | | }, |
| | | |
| | | // è·å详æ
|
| | | async getDetail(infoid) { |
| | | try { |
| | |
| | | |
| | | // è§£æéä»¶ä¿¡æ¯ |
| | | if (realData.rememberAnnex) { |
| | | this.parseAttachmentData(realData.rememberAnnex); |
| | | this.parseAttachmentData(realData.rememberAnnex, "brain"); |
| | | } |
| | | |
| | | // è§£æå¿æ»äº¡éä»¶ä¿¡æ¯ |
| | | if (realData.heartdeathjudgeannex) { |
| | | this.parseAttachmentData(realData.heartdeathjudgeannex, "heart"); |
| | | } |
| | | } catch (error) { |
| | | console.error("è·åæ»äº¡å¤å®è¯¦æ
失败:", error); |
| | | this.$message.error("æ°æ®å 载失败"); |
| | | } |
| | | }, |
| | | |
| | | // è§£æéä»¶æ°æ® |
| | | parseAttachmentData(attachmentJson) { |
| | | parseAttachmentData(attachmentJson, type = "brain") { |
| | | try { |
| | | if (attachmentJson) { |
| | | const attachments = JSON.parse(attachmentJson); |
| | | if (Array.isArray(attachments)) { |
| | | this.attachmentList = attachments; |
| | | if (type === "brain") { |
| | | this.attachmentList = attachments; |
| | | } else if (type === "heart") { |
| | | this.heartDeathAttachmentList = attachments; |
| | | } |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error("è§£æéä»¶æ°æ®å¤±è´¥:", error); |
| | | } |
| | | }, |
| | | // æå»ºéä»¶JSONæ°æ® |
| | | buildAttachmentJson() { |
| | | |
| | | // æå»ºèæ»äº¡éä»¶JSONæ°æ® |
| | | buildBrainDeathAttachmentJson() { |
| | | return JSON.stringify(this.attachmentList); |
| | | }, |
| | | |
| | | // æå»ºå¿æ»äº¡éä»¶JSONæ°æ® |
| | | buildHeartDeathAttachmentJson() { |
| | | return JSON.stringify(this.heartDeathAttachmentList); |
| | | }, |
| | | |
| | | // è·åç¶ææ ç¾æ ·å¼ |
| | | getStatusTag(status) { |
| | | const statusMap = { |
| | |
| | | }; |
| | | return statusMap[status] || "info"; |
| | | }, |
| | | |
| | | // è·åç¶æææ¬ |
| | | getStatusText(status) { |
| | | const textMap = { |
| | |
| | | }; |
| | | return textMap[status] || "æªç¥ç¶æ"; |
| | | }, |
| | | |
| | | // è·åéä»¶å表 |
| | | getAttachmentList() { |
| | | this.attachmentLoading = true; |
| | | // å®é
项ç®ä¸ä»æ¥å£è·åéä»¶æ°æ® |
| | | setTimeout(() => { |
| | | this.attachmentLoading = false; |
| | | }, 500); |
| | | }, |
| | | // æ ¹æ®ç±»åè·åéä»¶ |
| | | |
| | | // æ ¹æ®ç±»åè·åèæ»äº¡éä»¶ |
| | | getAttachmentsByType(type) { |
| | | return this.attachmentList.filter(item => item.type === type); |
| | | }, |
| | | |
| | | // æ ¹æ®ç±»åè·åå¿æ»äº¡éä»¶ |
| | | getHeartDeathAttachmentsByType(type) { |
| | | return this.heartDeathAttachmentList.filter(item => item.type === type); |
| | | }, |
| | | |
| | | // è·åæä»¶ç±»å |
| | | getFileType(fileName) { |
| | | const ext = fileName |
| | |
| | | }; |
| | | return typeMap[ext] || ext.toUpperCase(); |
| | | }, |
| | | // æå¼ä¸ä¼ å¯¹è¯æ¡ |
| | | |
| | | // æå¼èæ»äº¡ä¸ä¼ å¯¹è¯æ¡ |
| | | openUploadDialog(type = null) { |
| | | this.currentUploadType = type || this.activeAttachmentType; |
| | | this.tempFileList = []; |
| | |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // æå¼å¿æ»äº¡ä¸ä¼ å¯¹è¯æ¡ |
| | | openHeartDeathUploadDialog(type = null) { |
| | | this.currentHeartDeathUploadType = |
| | | type || this.activeHeartDeathAttachmentType; |
| | | this.tempHeartDeathFileList = []; |
| | | this.heartDeathUploadDialogVisible = true; |
| | | this.$nextTick(() => { |
| | | if (this.$refs.heartDeathUploadRef) { |
| | | this.$refs.heartDeathUploadRef.clearFiles(); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // ä¸ä¼ åæ ¡éª |
| | | beforeUpload(file) { |
| | | const allowedTypes = [ |
| | |
| | | |
| | | return true; |
| | | }, |
| | | // æä»¶éæ©åå |
| | | |
| | | // èæ»äº¡æä»¶éæ©åå |
| | | handleFileChange(file, fileList) { |
| | | this.tempFileList = fileList; |
| | | }, |
| | | // ç§»é¤ä¸´æ¶æä»¶ |
| | | |
| | | // å¿æ»äº¡æä»¶éæ©åå |
| | | handleHeartDeathFileChange(file, fileList) { |
| | | this.tempHeartDeathFileList = fileList; |
| | | }, |
| | | |
| | | // ç§»é¤èæ»äº¡ä¸´æ¶æä»¶ |
| | | handleTempRemove(file, fileList) { |
| | | this.tempFileList = fileList; |
| | | }, |
| | | /** ä¸ä¼ æåå¤ç */ |
| | | |
| | | // ç§»é¤å¿æ»äº¡ä¸´æ¶æä»¶ |
| | | handleHeartDeathTempRemove(file, fileList) { |
| | | this.tempHeartDeathFileList = fileList; |
| | | }, |
| | | |
| | | // èæ»äº¡ä¸ä¼ æåå¤ç |
| | | handleUploadSuccess(response, file, fileList) { |
| | | if (response.code === 200) { |
| | | file.url = response.data || response.url; |
| | | this.$message.success("æä»¶ä¸ä¼ æå"); |
| | | |
| | | for (const file of this.tempFileList) { |
| | | const newAttachment = { |
| | | id: Date.now() + Math.random(), |
| | | type: this.currentUploadType, |
| | | typeName: this.getCurrentTypeLabel, |
| | | typeName: this.getCurrentBrainDeathTypeLabel, |
| | | fileName: file.name, |
| | | fileSize: file.size, |
| | | uploadTime: new Date().toISOString(), |
| | |
| | | this.attachmentList.push(newAttachment); |
| | | } |
| | | |
| | | // æ´æ°éä»¶JSONæ°æ®å°è¡¨å |
| | | this.form.rememberAnnex = this.buildAttachmentJson(); |
| | | // æ´æ°èæ»äº¡éä»¶JSONæ°æ®å°è¡¨å |
| | | this.form.rememberAnnex = this.buildBrainDeathAttachmentJson(); |
| | | |
| | | this.$message.success("æä»¶ä¸ä¼ æå"); |
| | | this.uploadDialogVisible = false; |
| | |
| | | this.$message.error(response.msg || "æä»¶ä¸ä¼ 失败"); |
| | | } |
| | | }, |
| | | // æäº¤ä¸ä¼ |
| | | async submitUpload() { |
| | | |
| | | // å¿æ»äº¡ä¸ä¼ æåå¤ç |
| | | handleHeartDeathUploadSuccess(response, file, fileList) { |
| | | if (response.code === 200) { |
| | | file.url = response.data || response.url; |
| | | |
| | | for (const file of this.tempHeartDeathFileList) { |
| | | const newAttachment = { |
| | | id: Date.now() + Math.random(), |
| | | type: this.currentHeartDeathUploadType, |
| | | typeName: this.getCurrentHeartDeathTypeLabel, |
| | | fileName: file.name, |
| | | fileSize: file.size, |
| | | uploadTime: new Date().toISOString(), |
| | | uploader: "å½åç¨æ·", |
| | | fileUrl: file.url |
| | | }; |
| | | |
| | | this.heartDeathAttachmentList.push(newAttachment); |
| | | } |
| | | |
| | | // æ´æ°å¿æ»äº¡éä»¶JSONæ°æ®å°è¡¨å |
| | | this.form.heartdeathjudgeannex = this.buildHeartDeathAttachmentJson(); |
| | | |
| | | this.$message.success("æä»¶ä¸ä¼ æå"); |
| | | this.heartDeathUploadDialogVisible = false; |
| | | this.heartDeathUploadLoading = false; |
| | | this.tempHeartDeathFileList = []; |
| | | } else { |
| | | this.$message.error(response.msg || "æä»¶ä¸ä¼ 失败"); |
| | | } |
| | | }, |
| | | |
| | | // æäº¤èæ»äº¡ä¸ä¼ |
| | | submitUpload() { |
| | | if (this.tempFileList.length === 0) { |
| | | this.$message.warning("请å
éæ©è¦ä¸ä¼ çæä»¶"); |
| | | return; |
| | | } |
| | | this.$refs.uploadRef.submit(); |
| | | this.uploadLoading = true; |
| | | |
| | | // try { |
| | | // for (const file of this.tempFileList) { |
| | | // const newAttachment = { |
| | | // id: Date.now() + Math.random(), |
| | | // type: this.currentUploadType, |
| | | // typeName: this.getCurrentTypeLabel, |
| | | // fileName: file.name, |
| | | // fileSize: file.size, |
| | | // uploadTime: new Date().toISOString(), |
| | | // uploader: "å½åç¨æ·", |
| | | // fileUrl: URL.createObjectURL(file.raw) |
| | | // }; |
| | | |
| | | // this.attachmentList.push(newAttachment); |
| | | // } |
| | | |
| | | // // æ´æ°éä»¶JSONæ°æ®å°è¡¨å |
| | | // this.form.rememberAnnex = this.buildAttachmentJson(); |
| | | |
| | | // this.$message.success("æä»¶ä¸ä¼ æå"); |
| | | // this.uploadDialogVisible = false; |
| | | // this.tempFileList = []; |
| | | // } catch (error) { |
| | | // this.$message.error("æä»¶ä¸ä¼ 失败"); |
| | | // console.error("ä¸ä¼ 失败:", error); |
| | | // } finally { |
| | | // this.uploadLoading = false; |
| | | // } |
| | | }, |
| | | // å é¤éä»¶ |
| | | |
| | | // æäº¤å¿æ»äº¡ä¸ä¼ |
| | | submitHeartDeathUpload() { |
| | | if (this.tempHeartDeathFileList.length === 0) { |
| | | this.$message.warning("请å
éæ©è¦ä¸ä¼ çæä»¶"); |
| | | return; |
| | | } |
| | | this.$refs.heartDeathUploadRef.submit(); |
| | | this.heartDeathUploadLoading = true; |
| | | }, |
| | | |
| | | // å é¤èæ»äº¡éä»¶ |
| | | handleRemoveAttachment(attachment) { |
| | | this.$confirm("ç¡®å®è¦å é¤è¿ä¸ªè¯ä¼°è¡¨éä»¶åï¼", "æç¤º", { |
| | | confirmButtonText: "ç¡®å®", |
| | |
| | | ); |
| | | if (index !== -1) { |
| | | this.attachmentList.splice(index, 1); |
| | | // æ´æ°éä»¶JSONæ°æ®å°è¡¨å |
| | | this.form.rememberAnnex = this.buildAttachmentJson(); |
| | | this.form.rememberAnnex = this.buildBrainDeathAttachmentJson(); |
| | | this.$message.success("è¯ä¼°è¡¨å 餿å"); |
| | | } |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | |
| | | // å é¤å¿æ»äº¡éä»¶ |
| | | handleRemoveHeartDeathAttachment(attachment) { |
| | | this.$confirm("ç¡®å®è¦å é¤è¿ä¸ªè¯ä¼°è¡¨éä»¶åï¼", "æç¤º", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | const index = this.heartDeathAttachmentList.findIndex( |
| | | item => item.id === attachment.id |
| | | ); |
| | | if (index !== -1) { |
| | | this.heartDeathAttachmentList.splice(index, 1); |
| | | this.form.heartdeathjudgeannex = this.buildHeartDeathAttachmentJson(); |
| | | this.$message.success("è¯ä¼°è¡¨å 餿å"); |
| | | } |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | |
| | | // é¢è§éä»¶ |
| | | handlePreview(attachment) { |
| | | if (attachment.fileName.endsWith(".pdf")) { |
| | |
| | | this.$message.info("该æä»¶ç±»åæä¸æ¯æå¨çº¿é¢è§ï¼è¯·ä¸è½½åæ¥ç"); |
| | | } |
| | | }, |
| | | |
| | | // ä¸è½½éä»¶ |
| | | handleDownload(attachment) { |
| | | const link = document.createElement("a"); |
| | |
| | | link.click(); |
| | | this.$message.success(`å¼å§ä¸è½½: ${attachment.fileName}`); |
| | | }, |
| | | |
| | | // ç¼è¾ä¿¡æ¯ |
| | | handleEdit() { |
| | | this.isEdit = true; |
| | | }, |
| | | |
| | | // ä¿åä¿¡æ¯ |
| | | async handleSave() { |
| | | this.$refs.form.validate(async valid => { |
| | | // æ ¹æ®å½åæ ç¾éæ©éªè¯è§å |
| | | let formRef = |
| | | this.activeJudgmentType === "brain" ? "brainForm" : "heartForm"; |
| | | |
| | | this.$refs[formRef].validate(async valid => { |
| | | if (valid) { |
| | | this.saveLoading = true; |
| | | |
| | |
| | | ...this.form, |
| | | infoid: this.infoid, |
| | | // ç¡®ä¿éä»¶æ°æ®ææ° |
| | | rememberannex: this.buildAttachmentJson() |
| | | rememberAnnex: this.buildBrainDeathAttachmentJson(), |
| | | heartdeathjudgeannex: this.buildHeartDeathAttachmentJson() |
| | | }; |
| | | let response = null; |
| | | |
| | |
| | | } else { |
| | | response = await deathinfoadd(submitData); |
| | | } |
| | | // const response = await deathinfoedit(submitData); |
| | | |
| | | if (response.code === 200) { |
| | | this.$message.success("ä¿åæå"); |
| | |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // æä»¶å¤§å°æ ¼å¼å |
| | | formatFileSize(size) { |
| | | if (size === 0) return "0 B"; |
| | |
| | | const i = Math.floor(Math.log(size) / Math.log(k)); |
| | | return parseFloat((size / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]; |
| | | }, |
| | | |
| | | // æ¶é´æ ¼å¼å |
| | | parseTime(time) { |
| | | if (!time) return ""; |
| | |
| | | padding: 20px; |
| | | } |
| | | |
| | | .detail-card { |
| | | .type-card { |
| | | margin-bottom: 20px; |
| | | border: none; |
| | | box-shadow: none; |
| | | } |
| | | |
| | | .attachment-card { |
| | | .type-card >>> .el-tabs__item { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | padding: 0 20px; |
| | | height: 50px; |
| | | line-height: 50px; |
| | | } |
| | | |
| | | .type-card >>> .el-tabs__item.is-active { |
| | | color: #409eff; |
| | | border-bottom: 3px solid #409eff; |
| | | } |
| | | |
| | | .detail-card { |
| | | margin-bottom: 20px; |
| | | border: 1px solid #e6ebf5; |
| | | border-radius: 8px; |
| | | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .common-info-card { |
| | | border-top: 2px solid #67c23a; |
| | | } |
| | | |
| | | .detail-card >>> .el-card__header { |
| | | background-color: #f5f7fa; |
| | | border-bottom: 1px solid #e6ebf5; |
| | | padding: 15px 20px; |
| | | } |
| | | |
| | | .detail-title { |
| | | font-size: 16px; |
| | | font-size: 18px; |
| | | font-weight: bold; |
| | | color: #303133; |
| | | } |
| | | |
| | | .attachment-section { |
| | | margin-top: 20px; |
| | | padding-top: 20px; |
| | | border-top: 1px solid #e6ebf5; |
| | | } |
| | | |
| | | .attachment-header h3 { |
| | | font-size: 16px; |
| | | color: #303133; |
| | | margin-bottom: 15px; |
| | | padding-bottom: 10px; |
| | | border-bottom: 1px solid #eee; |
| | | } |
| | | |
| | | .attachment-upload-section { |
| | |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 15px; |
| | | padding: 10px 0; |
| | | } |
| | | |
| | | .upload-title { |
| | |
| | | text-align: center; |
| | | padding: 40px 0; |
| | | color: #909399; |
| | | border: 1px dashed #dcdfe6; |
| | | border-radius: 4px; |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | /* å¾çé¢è§å¯¹è¯æ¡æ ·å¼ */ |
| | |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column |
| | | <!-- |
| | | <el-table-column |
| | | label="æ¡ä¾ç¼å·" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="æ²»çå»é¢" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="180" |
| | | show-overflow-tooltip |
| | | /> |
| | | --> |
| | | |
| | | <el-table-column |
| | | label="ä½é¢å·" |
| | | align="center" |
| | |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="æç®è
å§å" |
| | | label="å§å" |
| | | align="center" |
| | | prop="name" |
| | | width="120" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¹´é¾" align="center" prop="age" width="80" /> |
| | | <el-table-column |
| | | label="æ²»çå»é¢" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="180" |
| | | show-overflow-tooltip |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ç¾ç
è¯æ" |
| | | align="center" |
| | |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="è®°å½ç¶æ" |
| | | label="å¤å®ç¶æ" |
| | | align="center" |
| | | prop="recordstate" |
| | | width="100" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="å建æ¶é´" |
| | | label="å¤å®æ¶é´" |
| | | align="center" |
| | | prop="createTime" |
| | | width="160" |
| | |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column |
| | | label="ä½é¢å·" |
| | | align="center" |
| | | prop="inpatientno" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="å§å" |
| | | align="center" |
| | | prop="name" |
| | | width="100" |
| | | /> |
| | | |
| | | <el-table-column label="æ§å«" align="center" prop="sex" width="80"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_user_sex" |
| | | :value="scope.row.sex" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¹´é¾" align="center" prop="age" width="80" /> |
| | | <!-- |
| | | |
| | | <el-table-column |
| | | label="æ¡ä¾ç¼å·" |
| | | align="center" |
| | | prop="caseNo" |
| | |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="å§å" |
| | | align="center" |
| | | prop="name" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="ä½é¢å·" |
| | | align="center" |
| | | prop="inpatientno" |
| | | width="120" |
| | | /> |
| | | <el-table-column label="æ§å«" align="center" prop="sex" width="80"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_user_sex" |
| | | :value="scope.row.sex" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¹´é¾" align="center" prop="age" width="80" /> |
| | | <el-table-column |
| | | label="è¡å" |
| | | align="center" |
| | | prop="bloodtype" |
| | |
| | | prop="idcardno" |
| | | width="180" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="å»çæºæ" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | min-width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ä¸å®¶å§å" |
| | | align="center" |
| | | prop="expertName" |
| | | width="100" |
| | | /> |
| | | --> |
| | | <el-table-column |
| | | label="ç¾ç
è¯æ" |
| | | align="center" |
| | |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="å»çæºæ" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | min-width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="伦çç¶æ" |
| | | label="审æ¥ç¶æ" |
| | | align="center" |
| | | prop="status" |
| | | width="100" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="ä¸å®¶ç»è®º" |
| | | label="审æ¥ç»è®º" |
| | | align="center" |
| | | prop="expertConclusion" |
| | | width="120" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="ä¸å®¶æè§" |
| | | label="å®¡æ¥æè§" |
| | | align="center" |
| | | prop="expertOpinion" |
| | | min-width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="ä¸å®¶å§å" |
| | | align="center" |
| | | prop="expertName" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="ç»è®ºæ¶é´" |
| | | label="å®¡æ¥æ¶é´" |
| | | align="center" |
| | | prop="expertTime" |
| | | width="160" |
| | |
| | | :inline="true" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="æç®è
å§å" prop="name"> |
| | | <el-form-item label="å§å" prop="name"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="请è¾å
¥æç®è
å§å" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æå¨å»çæºæ" prop="treatmenthospitalname"> |
| | | <el-input |
| | | v-model="queryParams.treatmenthospitalname" |
| | | placeholder="请è¾å
¥å»çæºæ" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="åè°å" prop="coordinatorName"> |
| | | <el-input |
| | | v-model="queryParams.coordinatorName" |
| | | placeholder="请è¾å
¥åè°åå§å" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ£è
ç¶æ" prop="recordstate"> |
| | | <el-form-item label="æ¡ä¾è¿åº¦" prop="recordstate"> |
| | | <el-select |
| | | v-model="queryParams.recordstate" |
| | | placeholder="è¯·éæ©è®°å½ç¶æ" |
| | |
| | | <el-option label="æªå®ææç®" value="5" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å¹´é¾èå´" prop="ageRange"> |
| | | <el-form-item label="å¹´é¾" prop="ageRange"> |
| | | <el-input |
| | | v-model="queryParams.startAge" |
| | | placeholder="æå°å¹´é¾" |
| | | placeholder="0" |
| | | clearable |
| | | style="width: 95px" |
| | | @keyup.enter.native="handleQuery" |
| | |
| | | <span style="margin: 0 5px">-</span> |
| | | <el-input |
| | | v-model="queryParams.endAge" |
| | | placeholder="æå¤§å¹´é¾" |
| | | placeholder="70" |
| | | clearable |
| | | style="width: 95px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¡£æ¡å½å
¥æ¶é´" prop="recordTimeRange"> |
| | | <el-form-item label="å
¥é¢æ¶é´" prop="recordTimeRange"> |
| | | <el-date-picker |
| | | v-model="queryParams.recordTimeRange" |
| | | type="daterange" |
| | |
| | | end-placeholder="ç»ææ¥æ" |
| | | value-format="yyyy-MM-dd" |
| | | style="width: 240px" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="åè°å" prop="coordinatorName"> |
| | | <el-input |
| | | v-model="queryParams.coordinatorName" |
| | | placeholder="请è¾å
¥åè°åå§å" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <!-- <el-table-column |
| | | <!-- |
| | | <el-table-column |
| | | label="æ¡ä¾ç¼å·" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="120" |
| | | /> --> |
| | | <el-table-column |
| | | /> |
| | | --> |
| | | <el-table-column |
| | | label="æç®ç¼å·" |
| | | align="center" |
| | | prop="inpatientno" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="ä½é¢å·" |
| | | align="center" |
| | | prop="inpatientno" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="æ½å¨æç®è
å§å" |
| | | label="å§å" |
| | | align="center" |
| | | prop="name" |
| | | width="120" |
| | |
| | | min-width="180" |
| | | show-overflow-tooltip |
| | | /> |
| | | <<<<<<< HEAD |
| | | |
| | | ======= |
| | | <el-table-column |
| | | label="é¦è¯å»çæºæ" |
| | | align="center" |
| | |
| | | prop="coordinatorName" |
| | | width="100" |
| | | /> |
| | | >>>>>>> 059398ad3ad81ea49dfb75ac09f268bc0b0f6145 |
| | | <!-- <el-table-column |
| | | label="ç»´æ¤é¡¹ç®" |
| | | align="center" |
| | |
| | | width="120" |
| | | show-overflow-tooltip |
| | | /> --> |
| | | <el-table-column |
| | | label="馿¬¡ç»´æ¤æ¶é´" |
| | | align="center" |
| | | prop="updateTime" |
| | | width="140" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ |
| | | scope.row.updateTime |
| | | ? parseTime(scope.row.updateTime) |
| | | : "-" |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="ææ°ç»´æ¤æ¶é´" |
| | | align="center" |
| | |
| | | align="center" |
| | | prop="updateBy" |
| | | width="120" |
| | | /><el-table-column |
| | | label="å
¥é¢æ¶é´" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="150" |
| | | show-overflow-tooltip |
| | | /><el-table-column |
| | | label="䏿¥å»é¢" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="150" |
| | | show-overflow-tooltip |
| | | /> |
| | | <!-- <el-table-column |
| | | label="ç¶æ" |
| | | align="center" |
| | | prop="recordstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="statusFilter(scope.row.recordstate)"> |
| | | {{ statusTextFilter(scope.row.recordstate) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> --> |
| | | <el-table-column |
| | | label="åè°å" |
| | | align="center" |
| | | prop="coordinatorName" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="æä½" |
| | |
| | | :inline="true" |
| | | label-width="80px" |
| | | > |
| | | <el-form-item label="æ¡ä¾ç¼å·" prop="caseNo"> |
| | | <el-form-item label="䏿¥å»é¢" prop="caseNo"> |
| | | <el-input |
| | | v-model="queryParams.caseNo" |
| | | placeholder="请è¾å
¥æ¡ä¾ç¼å·" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ£è
å§å" prop="patName"> |
| | | <el-form-item label="å§å" prop="patName"> |
| | | <el-input |
| | | v-model="queryParams.patName" |
| | | placeholder="请è¾å
¥æ£è
å§å" |
| | |
| | | <el-option label="æå" :value="5" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å建æ¶é´"> |
| | | <el-form-item label="è½¬è¿æ¶é´"> |
| | | <el-date-picker |
| | | v-model="dateRange" |
| | | style="width: 240px" |
| | |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="åºå·" type="index" width="60" align="center" /> |
| | | |
| | | <el-table-column |
| | | label="æ¡ä¾ç¼å·" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="140" |
| | | /> |
| | | <el-table-column |
| | | label="转è¿ç¶æ" |
| | | align="center" |
| | | prop="transitStatus" |
| | | width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="getStatusTagType(scope.row.transitStatus)"> |
| | | {{ getStatusText(scope.row.transitStatus) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç¼å·" align="center" prop="caseNo" width="140" /> |
| | | <el-table-column label="æ£è
ä¿¡æ¯" align="center" width="260"> |
| | | <template slot-scope="scope"> |
| | | <div class="donor-info"> |
| | |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="æ²»çå»é¢" |
| | | label="转è¿ç¶æ" |
| | | align="center" |
| | | prop="treatmentHospitalName" |
| | | width="150" |
| | | /> |
| | | prop="transitStatus" |
| | | width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="getStatusTagType(scope.row.transitStatus)"> |
| | | {{ getStatusText(scope.row.transitStatus) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="计åè½¬è¿æ¶é´" |
| | | align="center" |
| | |
| | | width="160" |
| | | /> |
| | | <el-table-column |
| | | label="è´è´£åè°å" |
| | | label="åè°å" |
| | | align="center" |
| | | prop="contactPerson" |
| | | width="100" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="䏿¥å»é¢" |
| | | align="center" |
| | | prop="treatmentHospitalName" |
| | | width="150" |
| | | /> |
| | | <el-table-column |
| | | label="å建æ¶é´" |
| | | align="center" |
| | |
| | | append-to-body |
| | | > |
| | | <div class="action-confirm"> |
| | | <p>ç¡®å®è¦{{ actionText }}转è¿å "{{ currentTransport.id }}" åï¼</p> |
| | | <p> |
| | | ç¡®å®è¦{{ actionText }}转è¿å "{{ currentTransport.patName }}" åï¼ |
| | | </p> |
| | | </div> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="actionOpen = false">å æ¶</el-button> |
| | |
| | | transportEdit, |
| | | transportDel, |
| | | transportInfo, |
| | | donateList |
| | | donateInfo, |
| | | donateList, |
| | | donateEdit |
| | | } from "@/api/businessApi/index"; |
| | | import TransportDetail from "./transportDetail"; |
| | | import TransportEdit from "./TransportEdit"; |
| | |
| | | async confirmAction() { |
| | | try { |
| | | let requestData = { |
| | | id: this.currentTransport.id |
| | | ...this.currentTransport |
| | | }; |
| | | |
| | | if (this.actionText === "å¼å§") { |
| | |
| | | |
| | | const response = await transportEdit(requestData); |
| | | |
| | | if (response.code === 200) { |
| | | if (response.code == 200) { |
| | | this.$modal.msgSuccess(`${this.actionText}è½¬è¿æå`); |
| | | if (requestData.transitStatus==3) { |
| | | const resappear = await donateInfo(requestData.reportId); |
| | | if (resappear.code) { |
| | | let obj = resappear.data; |
| | | obj.isDonate = 1; |
| | | await donateEdit(obj); |
| | | this.$modal.msgSuccess(`对åºä¸æ¥æ¡ä¾å·²è¿å
¥æ£å¼æ¡ä¾æµç¨`); |
| | | } |
| | | } |
| | | this.getList(); |
| | | } else { |
| | | this.$modal.msgError(response.msg || `${this.actionText}转è¿å¤±è´¥`); |
| | |
| | | <el-card header="å»çä¿¡æ¯" class="form-section"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å½åå»é¢" prop="Reporttothehospital"> |
| | | <el-form-item label="å
¥é¢æ¶é´" prop="Reporttothehospital"> |
| | | <el-input |
| | | v-model="formData.Reporttothehospital" |
| | | placeholder="请è¾å
¥ä¸æ¥å»é¢" |
| | | placeholder="请è¾å
¥å
¥é¢æ¶é´" |
| | | /> |
| | | |
| | | </el-form-item> |
| | |
| | | > |
| | | <el-row :gutter="8"> |
| | | <el-col :span="5"> |
| | | <el-form-item label="æç®è
å§å" prop="name"> |
| | | <el-form-item label="å§å" prop="name"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="请è¾å
¥å§å" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <el-form-item label="䏿¥å»é¢" prop="treatmenthospitalname"> |
| | | <el-form-item label="æ¥åå»é¢" prop="treatmenthospitalname"> |
| | | <org-selecter |
| | | ref="orgSelecter" |
| | | :org-type="'3'" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <el-form-item label="䏿¥æ¶é´"> |
| | | <el-form-item label="æ¥åæ¶é´"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="selecttime" |
| | |
| | | border |
| | | :default-sort="{ prop: 'donatetime', order: 'descending' }" |
| | | > |
| | | <el-table-column label="å§å" align="center" prop="name" width="100" /> |
| | | <el-table-column |
| | | label="æ¡ä¾æ¶é´" |
| | | align="center" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æç®è¿åº¦" |
| | | align="center" |
| | | prop="workflow" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <div v-if="!scope.row.terminationCase"> |
| | | <dict-tag |
| | | :options="dict.type.sys_donornode" |
| | | :value="scope.row.workflow" |
| | | /> |
| | | </div> |
| | | <div v-else><el-button type="danger" plain>ä»»å¡ç»æ¢</el-button></div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æç®ç±»å«" |
| | | align="center" |
| | | prop="donationcategory" |
| | | width="150" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_DonationCategory" |
| | | :value="scope.row.donationcategory" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æ¡ä¾ç¼å·" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="200" |
| | | /> |
| | | <el-table-column label="æç®è
å§å" align="center" prop="name" width="100" /> |
| | | <el-table-column label="æ§å«" align="center" prop="sex" width="100"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | |
| | | }} |
| | | </template> |
| | | </el-table-column> |
| | | <<<<<<< HEAD |
| | | <el-table-column label="GCSè¯å" align="center" prop="gcsScore" width="100"/> |
| | | ======= |
| | | <el-table-column |
| | | label="䏿¥å»é¢" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | /> |
| | | <el-table-column label="GCSè¯å" align="center" prop="gcsScore" /> |
| | | >>>>>>> 059398ad3ad81ea49dfb75ac09f268bc0b0f6145 |
| | | <el-table-column label="è¡å" align="center" prop="bloodtype" width="100"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æç®ç±»å«" |
| | | label="æ¥åå»é¢" |
| | | align="center" |
| | | prop="donationcategory" |
| | | width="150" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_DonationCategory" |
| | | :value="scope.row.donationcategory" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | prop="treatmenthospitalname" |
| | | /> |
| | | <el-table-column |
| | | label="æ¥å人" |
| | | align="center" |
| | | prop="reportername" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="æç®è¿åº¦" |
| | | align="center" |
| | | prop="workflow" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <div v-if="!scope.row.terminationCase"> |
| | | <dict-tag |
| | | :options="dict.type.sys_donornode" |
| | | :value="scope.row.workflow" |
| | | /> |
| | | </div> |
| | | <div v-else><el-button type="danger" plain>ä»»å¡ç»æ¢</el-button></div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æä½" |
| | | width="190" |
| | |
| | | proxy: { |
| | | // detail: https://cli.vuejs.org/config/#devserver-proxy |
| | | [process.env.VUE_APP_BASE_API]: { |
| | | // target:`http://localhost:8080`, |
| | | target:`http://192.168.100.10:8080`, |
| | | target:`http://localhost:8080`, |
| | | // target:`http://192.168.100.10:8080`, |
| | | // target:`http://192.168.100.137:8080`, |
| | | // target: `https://slb.hospitalstar.com:9093`, |
| | | changeOrigin: true, |