| src/components/AttachmentPreviewPane/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/components/FilePreview/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/project/donatebaseinfo/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/project/statistics/chargeStatistics/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/project/unitCost/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/project/unitCost/organfee/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/components/AttachmentPreviewPane/index.vue
@@ -45,10 +45,13 @@ <img :src="file.url" class="attachment-preview-pane__image" :style="{ transform: 'scale(' + scale + ') rotate(' + deg + 'deg)' }" :class="{ 'is-dragging': dragging }" :style="imageStyle" draggable="false" alt="图片预览" @mousedown="startDrag" @click="toggleZoom" @dragstart.prevent /> </div> <iframe @@ -76,10 +79,32 @@ data() { return { scale: 1, deg: 0 deg: 0, offsetX: 0, offsetY: 0, dragging: false, dragMoved: false, dragStartX: 0, dragStartY: 0, dragOriginX: 0, dragOriginY: 0 }; }, computed: { imageStyle() { return { transform: "translate(" + this.offsetX + "px," + this.offsetY + "px) scale(" + this.scale + ") rotate(" + this.deg + "deg)" }; }, fileType() { if (!this.file) { return "other"; @@ -116,7 +141,45 @@ reset() { this.scale = 1; this.deg = 0; this.offsetX = 0; this.offsetY = 0; }, startDrag(e) { if (e.button !== 0) return; this.dragging = true; this.dragMoved = false; this.dragStartX = e.clientX; this.dragStartY = e.clientY; this.dragOriginX = this.offsetX; this.dragOriginY = this.offsetY; document.addEventListener("mousemove", this.onDragMove); document.addEventListener("mouseup", this.onDragEnd); }, onDragMove(e) { if (!this.dragging) return; const dx = e.clientX - this.dragStartX; const dy = e.clientY - this.dragStartY; if (Math.abs(dx) > 3 || Math.abs(dy) > 3) { this.dragMoved = true; } this.offsetX = this.dragOriginX + dx; this.offsetY = this.dragOriginY + dy; }, onDragEnd() { this.dragging = false; document.removeEventListener("mousemove", this.onDragMove); document.removeEventListener("mouseup", this.onDragEnd); }, toggleZoom() { if (this.dragMoved) { this.dragMoved = false; return; } this.scale = this.scale === 1 ? 1.5 : 1; } }, beforeDestroy() { this.onDragEnd(); } }; </script> @@ -156,6 +219,12 @@ max-height: 100%; transition: transform 0.2s ease; transform-origin: center center; cursor: grab; user-select: none; } .attachment-preview-pane__image.is-dragging { cursor: grabbing; transition: none; } .attachment-preview-pane__pdf { flex: 1 1 auto; src/components/FilePreview/index.vue
@@ -92,11 +92,13 @@ <img :src="currentFile.previewUrl" class="file-preview__image" :style="{ transform: 'scale(' + imageScale + ') rotate(' + imageRotate + 'deg)' }" :class="{ 'is-dragging': imageDragging }" :style="imageStyle" draggable="false" alt="图片预览" @mousedown="startImageDrag" @click="toggleImageZoom" @dragstart.prevent /> </div> </div> @@ -158,12 +160,34 @@ currentIndex: 0, imageScale: 1, imageRotate: 0, imageOffsetX: 0, imageOffsetY: 0, imageDragging: false, imageDragMoved: false, imageDragStartX: 0, imageDragStartY: 0, imageDragOriginX: 0, imageDragOriginY: 0, fullscreen: false }; }, computed: { currentFile() { return this.previewFiles[this.currentIndex] || null; }, imageStyle() { return { transform: "translate(" + this.imageOffsetX + "px," + this.imageOffsetY + "px) scale(" + this.imageScale + ") rotate(" + this.imageRotate + "deg)" }; } }, methods: { @@ -334,6 +358,41 @@ resetImage() { this.imageScale = 1; this.imageRotate = 0; this.imageOffsetX = 0; this.imageOffsetY = 0; }, startImageDrag(e) { if (e.button !== 0) return; this.imageDragging = true; this.imageDragMoved = false; this.imageDragStartX = e.clientX; this.imageDragStartY = e.clientY; this.imageDragOriginX = this.imageOffsetX; this.imageDragOriginY = this.imageOffsetY; document.addEventListener("mousemove", this.onImageDrag); document.addEventListener("mouseup", this.endImageDrag); }, onImageDrag(e) { if (!this.imageDragging) return; const dx = e.clientX - this.imageDragStartX; const dy = e.clientY - this.imageDragStartY; if (Math.abs(dx) > 3 || Math.abs(dy) > 3) { this.imageDragMoved = true; } this.imageOffsetX = this.imageDragOriginX + dx; this.imageOffsetY = this.imageDragOriginY + dy; }, endImageDrag() { this.imageDragging = false; document.removeEventListener("mousemove", this.onImageDrag); document.removeEventListener("mouseup", this.endImageDrag); }, toggleImageZoom() { if (this.imageDragMoved) { this.imageDragMoved = false; return; } this.imageScale = this.imageScale === 1 ? 1.5 : 1; }, handleDownload() { const file = this.currentFile; @@ -357,6 +416,7 @@ } }, handleClosed() { this.endImageDrag(); this.revokeUrls(); this.previewFiles = []; this.fileList = []; @@ -373,6 +433,7 @@ } }, beforeDestroy() { this.endImageDrag(); this.revokeUrls(); } }; @@ -430,6 +491,12 @@ max-height: 100%; transition: transform 0.2s ease; transform-origin: center center; cursor: grab; user-select: none; } .file-preview__image.is-dragging { cursor: grabbing; transition: none; } .file-preview__image-pane { width: 100%; src/main.js
@@ -144,7 +144,7 @@ Vue.config.productionTip = false // 前端构建标识:用于确认浏览器实际加载的是哪一版代码 window.__APP_BUILD__ = '2026-11-03-PDF-PREVIEW-15' window.__APP_BUILD__ = '2026-11-03-PDF-PREVIEW-17' const app = new Vue({ el: '#app', src/views/project/donatebaseinfo/index.vue
@@ -181,7 +181,7 @@ border :default-sort="{ prop: 'donatetime', order: 'descending' }" > <!-- <el-table-column label="报告时间" align="center" prop="id" /> --> <!-- <el-table-column type="selection" width="55" align="center" /> --> <el-table-column label="案例时间" @@ -224,7 +224,7 @@ <el-table-column label="医疗机构" align="center" prop="treatmenthospitalname" width="220" prop="treatmenthospitalname" width="250" /> <el-table-column label="血型" align="center" prop="bloodtype" width="80"> <template slot-scope="scope"> @@ -254,14 +254,18 @@ prop="reportername" width="100" /> <el-table-column prop="reporttime" label="报告时间"> <template slot-scope="scope"> {{ scope.row.reporttime ? parseTime(scope.row.reporttime, "{y}-{m}-{d}") : "" }} </template> </el-table-column> <el-table-column label="现所在地市" align="center" prop="registercityname" width="150" /> <el-table-column <!-- <el-table-column label="捐献进度" align="center" prop="recordstate" @@ -273,7 +277,7 @@ :value="scope.row.recordstate" /> </template> </el-table-column> </el-table-column> --> <el-table-column label="捐献进度" src/views/project/statistics/chargeStatistics/index.vue
@@ -81,7 +81,7 @@ show-summary > <el-table-column label="序号" align="center" prop="id" width="80" /> <el-table-column label="医院名称" align="center" prop="hospitalname" show-overflow-tooltip width="260" /> <el-table-column label="汇款医院" align="center" prop="hospitalname" show-overflow-tooltip width="260" /> <el-table-column label="应收金额" align="center" prop="organcharge" width="160" :formatter="amountFormatter" /> <el-table-column label="已收金额" align="center" prop="amount" width="160"> <template slot-scope="scope"> @@ -160,7 +160,7 @@ /> </el-table> <pagination v-show="detailTotal > 0" v-show="detailTotal = 0" :total="detailTotal" :page.sync="detailQuery.pageNum" :limit.sync="detailQuery.pageSize" src/views/project/unitCost/index.vue
@@ -42,7 +42,7 @@ <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span> </template> </el-table-column> <el-table-column label="申请单号" align="center" prop="paymentno" /> <el-table-column label="申请单号" align="center" prop="paymentno" width="250" /> <el-table-column label="医疗机构" width="180" align="center" prop="hospitalname" /> <el-table-column label="付款状态" align="center" prop="paystatus"> @@ -53,7 +53,7 @@ <el-table-column label="应收金额" align="center" prop="receivableamount" /> <el-table-column label="实收金额" align="center" prop="receivedamount" /> <el-table-column label="收款日期" width="180" align="center" prop="receivedtime"><template slot-scope="scope"> <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span> <span>{{ parseTime(scope.row.receivedtime, "{y}-{m}-{d}") }}</span> </template> </el-table-column> <el-table-column label="经办人" align="center" prop="userName" /> src/views/project/unitCost/organfee/index.vue
@@ -8,10 +8,10 @@ v-show="showSearch" label-width="90px" > <el-form-item label="付款医院" prop="hospitalno"> <el-form-item label="回款医院" prop="hospitalno"> <el-select v-model="queryParams.hospitalno" placeholder="请选择付款医院" placeholder="请选择回款医院" clearable filterable size="small" @@ -25,14 +25,17 @@ /> </el-select> </el-form-item> <el-form-item label="捐献者" prop="donorname"> <el-input v-model="queryParams.donorname" placeholder="请输入捐献者姓名" <el-form-item label="回款状态" prop="payStatus"> <el-select v-model="queryParams.payStatus" placeholder="请选择回款状态" clearable size="small" @keyup.enter.native="handleQuery" /> style="width: 140px" > <el-option label="已付" value="已付" /> <el-option label="未付" value="未付" /> </el-select> </el-form-item> <el-form-item label="捐献日期"> <el-date-picker @@ -46,6 +49,31 @@ size="small" @change="handleDonatetimeChange" /> </el-form-item> <el-form-item label="捐献者" prop="donorname"> <el-input v-model="queryParams.donorname" placeholder="请输入捐献者姓名" clearable size="small" @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="利用状态" prop="organState"> <el-select v-model="queryParams.organState" placeholder="请选择器官状态" clearable size="small" style="width: 160px" > <el-option v-for="item in organStateList" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> <el-form-item> <el-button @@ -120,29 +148,21 @@ width="120" align="center" /> <el-table-column prop="payOrganName" label="付款器官名称" width="140" align="center" show-overflow-tooltip /> <el-table-column prop="caseno" label="器官分配编号" label="器官编号" align="center" show-overflow-tooltip /> <el-table-column prop="name" label="受体" width="120" align="center" /> <el-table-column label="器官状态" width="120" align="center"> <el-table-column label="利用状态" width="120" align="center"> <template slot-scope="scope"> <span>{{ selectOrganState(scope.row.organState) }}</span> </template> </el-table-column> <el-table-column prop="hospitalname" label="付款医院" label="回款医院" width="200" align="center" /> @@ -152,7 +172,7 @@ width="120" align="center" /> <el-table-column label="付款状态" width="100" align="center"> <el-table-column label="回款状态" width="100" align="center"> <template slot-scope="scope"> <span>{{ payStatus(scope.row) }}</span> </template> @@ -163,17 +183,25 @@ width="120" align="center" /> <el-table-column label="未付金额" width="160" align="center"> <el-table-column label="未回款金额" width="160" align="center"> <template slot-scope="scope"> <span>{{ formatReceivableDiff(scope.row) }}</span> </template> </el-table-column> <el-table-column label="收款日期" width="120" align="center"> <el-table-column label="回款日期" width="120" align="center"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.organtime, "{y}-{m}-{d}") }}</span> </template> </el-table-column> <el-table-column prop="name" label="受体" width="120" align="center" /> <el-table-column prop="payOrganName" label="器官名称-结算" width="140" align="center" show-overflow-tooltip /> <el-table-column prop="organchargedesc" label="备注" @@ -191,7 +219,6 @@ type="text" icon="el-icon-edit" @click="handleEdit(scope.row)" v-hasPermi="['project:donorchargeorgan:edit']" >修改</el-button > <el-button @@ -199,14 +226,12 @@ type="text" icon="el-icon-check" @click="handleCharge(scope.row)" v-hasPermi="['project:donorchargeorgan:edit']" >已收费</el-button > <el-button type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['project:donorchargeorgan:edit']" >删除</el-button > </template> @@ -223,7 +248,7 @@ <!-- 修改器官状态、备注 --> <el-dialog title="修改器官信息" title="修改器官回款信息" :visible.sync="editOpen" width="760px" append-to-body @@ -232,10 +257,10 @@ <el-form ref="editForm" :model="editForm" label-width="110px"> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="付款医院" prop="hospitalno"> <el-form-item label="回款医院" prop="hospitalno"> <el-select v-model="editForm.hospitalno" placeholder="请选择付款医院" placeholder="请选择回款医院" clearable filterable style="width: 100%" @@ -251,20 +276,20 @@ </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="付款器官名称" prop="payOrganName"> <el-form-item label="(结算)器官名称" prop="payOrganName"> <el-input v-model="editForm.payOrganName" maxlength="100" placeholder="请输入付款器官名称" placeholder="请输入(结算)器官名称" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="器官分配编号" prop="caseno"> <el-form-item label="(国家)器官编号" prop="caseno"> <el-input v-model="editForm.caseno" maxlength="50" placeholder="请输入器官分配编号" placeholder="请输入国家器官分配编号" /> </el-form-item> </el-col> @@ -278,10 +303,10 @@ </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="器官状态" prop="organState"> <el-form-item label="利用状态" prop="organState"> <el-select v-model="editForm.organState" placeholder="请选择器官状态" placeholder="请选择器官利用状态" style="width: 100%" > <el-option @@ -562,6 +587,8 @@ pageSize: 10, hospitalno: null, donorname: null, organState: null, payStatus: null, paymentid: null, // false:走 queryListBypaymentidIsNull,即未收齐费用的器官 paymentidIsNotNull: false, @@ -803,6 +830,8 @@ this.donatetimeRange = []; this.queryParams.hospitalno = null; this.queryParams.donorname = null; this.queryParams.organState = null; this.queryParams.payStatus = null; this.queryParams.starttime = null; this.queryParams.endtime = null; this.queryParams.pageNum = 1;