From e058a972e99cd1005521b53c28b9b98232764dcf Mon Sep 17 00:00:00 2001
From: xwt <2740516069@qq.com>
Date: 星期五, 10 十月 2025 15:46:00 +0800
Subject: [PATCH] SJ,XJ,RKJ调用FTP附件信息
---
pages/QC/SJ/detail.vue | 370 ++++++++++++++++++++++++++--------------------------
1 files changed, 188 insertions(+), 182 deletions(-)
diff --git a/pages/QC/SJ/detail.vue b/pages/QC/SJ/detail.vue
index 662fca5..3c5cd56 100644
--- a/pages/QC/SJ/detail.vue
+++ b/pages/QC/SJ/detail.vue
@@ -5,7 +5,7 @@
<view class="title">棣栨椤圭洰鏄庣粏</view>
<view class="order-number">棣栨鍗曞彿: {{formData.billNo}}</view>
</view>
-
+
<!-- 鏍囩鏍� - 濡傛灉鏈夊涓楠岄」鐩彲浠ュ垏鎹� -->
<view class="tabs" v-if="tabs && tabs.length > 1">
<view v-for="(tab, index) in tabs" :key="index" class="tab" :class="{active: currentTab === index}"
@@ -71,7 +71,7 @@
</view>
</view>
</view>
-
+
<!-- 瑙勬牸瑕佹眰 -->
<view class="section" v-if="formData.specRequ">
<view class="section-header">瑙勬牸瑕佹眰</view>
@@ -79,7 +79,7 @@
<text class="spec-text">{{ formData.specRequ }}</text>
</view>
</view>
-
+
<!-- 妫�楠屾弿杩� -->
<view class="section" v-if="formData.itemMod">
<view class="section-header">妫�楠屾弿杩�</view>
@@ -87,7 +87,7 @@
<text class="spec-text">{{ formData.itemMod }}</text>
</view>
</view>
-
+
<!-- 妫�楠岀粨鏋� -->
<view class="section">
<view class="section-header">妫�楠岀粨鏋�</view>
@@ -98,19 +98,19 @@
<view class="info-value">{{formData.result}}</view>
</view>
</view>
-
+
<view v-if="formData.result != null" class="result-preview">
<view class="info-label">棰勮缁撴灉</view>
<view class="info-value">{{formData.result}}</view>
</view>
-
+
<view v-if="formData.remarks != null" class="result-ng">
<view class="info-label">涓嶅悎鏍兼弿杩�</view>
<view class="info-value danger">{{formData.remarks}}</view>
</view>
</view>
</view>
-
+
<!-- 缁撴灉褰曞叆 -->
<view class="section">
<view class="section-header">妫�楠岀粨鏋滃綍鍏�</view>
@@ -140,7 +140,7 @@
</view>
</view>
</view>
-
+
<!-- 缁撴灉琛ㄦ牸 -->
<view v-if="formData.levelNum > 0" class="table-container">
<view class="table-header">
@@ -151,7 +151,7 @@
v-if="isAllCompleted">锛堣緭鍏ュ凡瀹屾垚锛�</i></view>
<view class="th">鎿嶄綔</view>
</view>
-
+
<view v-for="(item, index) in displayTableData" :key="index" class="table-row">
<view class="td">{{ index + 1 }}</view>
<view class="td">{{ getHoleNumber(index) }}</view>
@@ -177,7 +177,7 @@
</view>
</view>
</view>
-
+
<!-- 鍥剧墖棰勮 -->
<view v-if="isShowImg" class="section">
<view class="section-header">鐩稿叧鍥剧墖</view>
@@ -188,7 +188,7 @@
</view>
</view>
</view>
-
+
<!-- 淇敼涓嶅悎鏍兼弿杩板脊鍑烘 -->
<view v-if="remarksPopup" class="overlay">
<view class="popup">
@@ -207,7 +207,7 @@
</view>
</view>
</view>
-
+
<!-- 淇敼妫�楠岀粨鏋滃脊鍑烘 -->
<view v-if="showPopup" class="overlay">
<view class="popup">
@@ -226,7 +226,7 @@
</view>
</view>
</view>
-
+
<!-- 闄勪欢鍒楄〃寮圭獥 -->
<view v-if="showAttachmentPopup" class="overlay">
<view class="popup attachment-list-popup">
@@ -277,7 +277,7 @@
</div>
</view>
</view>
-
+
<!-- 闄勪欢璇︽儏寮圭獥 -->
<view v-if="showAttachmentDetail" class="overlay">
<view class="popup attachment-detail-popup">
@@ -346,7 +346,7 @@
</div>
</view>
</view>
-
+
<!-- 鏂囦欢棰勮寮圭獥 -->
<view v-if="showFilePreviewPopup" class="overlay">
<view class="popup file-preview-popup">
@@ -388,10 +388,10 @@
</div>
</view>
</view>
-
+
</view>
</template>
-
+
<script>
export default {
data() {
@@ -607,7 +607,7 @@
// this.gid = id;
// this.refreshResult();
},
-
+
// ===== 绌村彿鐩稿叧鏂规硶 =====
getHoleNumber(index) {
const item = this.displayTableData[index];
@@ -616,14 +616,14 @@
}
return index + 1;
},
-
+
getRecordValue(item, index) {
if (this.isHoleBlocked(index)) {
return '/';
}
return item.fcheckResu || '鏃�';
},
-
+
isHoleBlocked(index) {
const item = this.displayTableData[index];
if (item && item.holeInfo) {
@@ -631,8 +631,8 @@
}
return false;
},
-
-
+
+
previewImage() {
uni.previewImage({
urls: [this.base64Image],
@@ -646,18 +646,18 @@
}
},
submit() {
-
+
let count = this.formData.levelNum;
let fstand = "鈭�";
-
+
//鏈夋渶澶у�煎拰鏈�灏忓�煎氨鏍规嵁鏄惁绗﹀悎鏍囧噯鍊兼洿鏂板垽瀹氱粨鏋滐紝娌℃湁鏈�澶у�煎拰鏈�灏忓�煎氨鏍规嵁鏄惁閫氳繃妫�楠屽垽瀹氱粨鏋�
if (this.formData.maxValue && this.formData.minValue) {
-
+
if (!this.formData.fcheckResu) {
this.$showMessage("璇疯緭鍏ユ楠屽��");
return;
}
-
+
if (this.formData.fcheckResu >= this.formData.minValue && this.formData.fcheckResu <= this.formData.maxValue) {
fstand = "鈭�"
} else {
@@ -665,11 +665,11 @@
}
count = 1;
} else {
-
+
if (!this.formData.fcheckResu) {
this.formData.fcheckResu = 1
}
-
+
if (this.formData.fcheckResu == 0 || this.formData.fcheckResu == 1) {
this.formData.isPass = this.formData.fcheckResu
// 鏍规嵁fcheckResu璁剧疆fstand
@@ -693,9 +693,9 @@
count = this.formData.levelNum || 1;
}
}
-
+
this.formData.updater = this.$loginInfo.account;
-
+
// 鐩存帴鎵ц淇濆瓨锛屼笉鏄剧ず纭寮圭獥
this.$post({
url: "/SJ/SetQSItemDetail",
@@ -712,7 +712,7 @@
this.$showMessage("淇濆瓨鎴愬姛");
this.refreshResult();
})
-
+
},
refreshResult() {
// 鍏堣幏鍙栨楠岄」鐩熀鏈俊鎭�
@@ -757,25 +757,25 @@
this.editData = item;
},
eidt() {
-
+
if (!this.editData.fcheckResu) {
this.$showMessage("璇疯緭鍏ユ楠岀粨鏋�");
}
-
+
if (this.formData.fcheckResu == this.editData.fcheckResu) {
this.$showMessage("淇敼鎴愬姛");
return;
}
-
+
let fstand = "鈭�";
-
+
if (this.formData.maxValue && this.formData.minValue) {
-
+
if (!this.editData.fcheckResu) {
this.$showMessage("璇疯緭鍏ユ楠屽��");
return;
}
-
+
if (this.editData.fcheckResu >= this.formData.minValue && this.editData.fcheckResu <= this.formData.maxValue) {
this.editData.isPass = 1
} else {
@@ -783,11 +783,11 @@
fstand = "脳";
}
} else {
-
+
if (!this.editData.fcheckResu) {
this.editData.fcheckResu = 1
}
-
+
if (this.editData.fcheckResu == 0 || this.editData.fcheckResu == 1) {
if (this.editData.fcheckResu == 0) {
fstand = "脳";
@@ -797,9 +797,9 @@
return;
}
}
-
+
this.editData.updater = this.$loginInfo.account;
-
+
// 鏄剧ず纭鎻愮ず妗�
uni.showModal({
title: '纭淇敼',
@@ -829,15 +829,15 @@
});
},
numberEdit(item) {
-
+
let fstand = "鈭�";
let fcheckResu = 1;
-
+
if (item.fcheckResu == '1') {
fstand = "脳";
fcheckResu = 0;
}
-
+
this.$post({
url: "/SJ/UpdateQSItemDetail",
data: {
@@ -875,7 +875,7 @@
})
}
},
-
+
// ===== 闄勪欢鐩稿叧鏂规硶 =====
viewAttachmentInfo() {
this.showAttachmentPopup = true;
@@ -895,10 +895,14 @@
if (tbBillListElement && tbBillListElement.itemNo) {
console.log("鑾峰彇鍒扮殑鐗╂枡缂栫爜:", tbBillListElement.itemNo);
- // 浣跨敤鑾峰彇鍒扮殑鐗╂枡缂栫爜璋冪敤闄勪欢鎺ュ彛
+ // 浣跨敤鑾峰彇鍒扮殑鐗╂枡缂栫爜鍜岄」鐩悕绉拌皟鐢ㄩ檮浠舵帴鍙�
return this.$post({
url: "/SJ/getAttachments",
- data: { itemNo: tbBillListElement.itemNo }
+ data: {
+ itemNo: tbBillListElement.itemNo,
+ projName: this.formData.projName, // 浼犻�掗」鐩悕绉�
+ fromPage: 'Detail' // 鏍囪瘑鏉ヨ嚜Detail椤甸潰锛岄渶瑕佽繃婊�
+ }
});
} else {
throw new Error("鏈壘鍒扮墿鏂欑紪鐮佷俊鎭�");
@@ -1011,7 +1015,8 @@
const fileName = item.fattach.replace(/[\s\u3000\r\n]+/g, '').trim();
const downloadUrl = this.$store.state.serverInfo.serverAPI + "/SJ/DownloadFtpFile?itemNo=" +
encodeURIComponent(item.itemNo) + "&fileName=" + encodeURIComponent(fileName) +
- "&ftpServer=" + encodeURIComponent(this.$store.state.serverInfo.ftpServer);
+ "&ftpServer=" + encodeURIComponent(this.$store.state.serverInfo.ftpServer) +
+ "&projName=" + encodeURIComponent(this.formData.projName || '');
uni.downloadFile({
url: downloadUrl,
@@ -1044,7 +1049,8 @@
const previewUrl = this.$store.state.serverInfo.serverAPI + "/SJ/PreviewFtpFile?itemNo=" +
encodeURIComponent(item.itemNo) + "&fileName=" + encodeURIComponent(fileName) +
- "&ftpServer=" + encodeURIComponent(this.$store.state.serverInfo.ftpServer);
+ "&ftpServer=" + encodeURIComponent(this.$store.state.serverInfo.ftpServer) +
+ "&projName=" + encodeURIComponent(this.formData.projName || '');
if (['pdf'].includes(fileExt)) {
this.previewPdfFile(previewUrl, fileName);
@@ -1127,50 +1133,50 @@
onLoad(options) {
//options涓寘鍚簡url闄勫甫鐨勫弬鏁�
let params = options;
-
+
this.id = params["id"];
this.billNo = params["billNo"];
this.gid = params["gid"];
-
+
this.refreshResult();
}
}
</script>
-
+
<style lang="scss">
$primary-color: #409EFF;
$success-color: #67C23A;
$danger-color: #F56C6C;
$border-color: #DCDFE6;
$bg-color: #f5f7fa;
-
+
.container {
padding: 20px;
background-color: #fff;
}
-
+
.header {
padding: 20px;
border-bottom: 1px solid $border-color;
background: linear-gradient(90deg, #f0f7ff, #e1f0ff);
-
+
.title {
font-size: 24px;
color: #333;
margin-bottom: 10px;
}
-
+
.order-number {
color: #666;
font-size: 14px;
}
}
-
+
.tabs {
display: flex;
background-color: $bg-color;
border-bottom: 1px solid $border-color;
-
+
.tab {
flex: 1;
text-align: center;
@@ -1178,17 +1184,17 @@
border-right: 1px solid $border-color;
color: #666;
transition: all 0.3s;
-
+
&:last-child {
border-right: none;
}
-
+
&.active {
background-color: #fff;
color: $primary-color;
font-weight: bold;
position: relative;
-
+
&::after {
content: '';
position: absolute;
@@ -1201,52 +1207,52 @@
}
}
}
-
+
.section {
margin: 20px 0;
border: 1px solid $border-color;
border-radius: 4px;
-
+
&-header {
padding: 12px 16px;
background-color: $bg-color;
border-bottom: 1px solid $border-color;
font-weight: bold;
}
-
+
&-body {
padding: 16px;
}
}
-
+
.info-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
-
+
.info-item {
margin-bottom: 12px;
-
+
.info-label {
color: #909399;
font-size: 14px;
margin-bottom: 4px;
}
-
+
.info-value {
color: #333;
font-weight: 500;
}
}
}
-
+
.input-group {
margin: 16px 0;
-
+
.input-wrapper {
display: flex;
gap: 12px;
-
+
.result-input {
flex: 1;
height: 45px;
@@ -1255,7 +1261,7 @@
border-radius: 4px;
font-size: 14px;
}
-
+
.upload-btn {
background-color: #909399;
color: #fff;
@@ -1269,7 +1275,7 @@
max-width: 120px;
flex: 1;
}
-
+
.attachment-btn {
background-color: #17a2b8;
color: #fff;
@@ -1285,33 +1291,33 @@
}
}
}
-
+
.table-container {
border: 1px solid $border-color;
border-radius: 4px;
margin-top: 20px;
-
+
.table-header {
display: flex;
background-color: $bg-color;
border-bottom: 1px solid $border-color;
-
+
.th {
flex: 1;
padding: 12px;
font-weight: bold;
}
}
-
+
.table-row {
display: flex;
border-bottom: 1px solid $border-color;
padding: 12px;
-
+
&:last-child {
border-bottom: none;
}
-
+
.td {
flex: 1;
display: flex;
@@ -1319,35 +1325,35 @@
}
}
}
-
+
.result-badge {
display: inline-block;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
font-weight: bold;
-
+
&.OK {
background-color: rgba($success-color, 0.1);
color: $success-color;
}
-
+
&.NG {
background-color: rgba($danger-color, 0.1);
color: $danger-color;
}
-
+
&.PENDING {
background-color: rgba(#E6A23C, 0.1);
color: #E6A23C;
}
-
+
&.BLOCKED {
background-color: rgba(#909399, 0.1);
color: #909399;
}
}
-
+
.record-value {
font-family: 'Courier New', monospace;
font-weight: 500;
@@ -1357,38 +1363,38 @@
border-radius: 3px;
border: 1px solid #e9ecef;
}
-
+
.no-data-text {
color: #E6A23C;
font-size: 12px;
font-style: italic;
}
-
+
.blocked-text {
color: #909399;
font-size: 12px;
font-style: italic;
}
-
+
.waiting-text {
color: #E6A23C;
font-size: 12px;
font-style: italic;
}
-
+
.ready-text {
color: #67C23A;
font-size: 12px;
font-weight: bold;
}
-
-
+
+
.spec-text {
font-size: 14px;
color: #333;
line-height: 1.5;
}
-
+
.result-preview {
margin: 16px 0;
padding: 12px;
@@ -1397,19 +1403,19 @@
display: flex;
align-items: center;
gap: 12px;
-
+
.info-label {
color: #909399;
font-size: 14px;
min-width: 80px;
}
-
+
.info-value {
color: #333;
font-weight: 500;
}
}
-
+
.result-ng {
margin: 16px 0;
padding: 12px;
@@ -1418,45 +1424,45 @@
display: flex;
align-items: center;
gap: 12px;
-
+
.info-label {
color: $danger-color;
font-size: 14px;
min-width: 80px;
}
-
+
.info-value {
color: $danger-color;
font-weight: 500;
}
}
-
+
.action-buttons {
margin-top: 20px;
display: flex;
justify-content: flex-end;
gap: 12px;
-
+
.btn {
padding: 8px 20px;
border-radius: 4px;
-
+
&.primary-btn {
background-color: $primary-color;
color: #fff;
}
-
+
&.cancel-btn {
background-color: #909399;
color: #fff;
}
}
}
-
+
.danger {
color: $danger-color;
}
-
+
.overlay {
position: fixed;
top: 0;
@@ -1469,7 +1475,7 @@
align-items: center;
z-index: 2000;
}
-
+
.popup {
background-color: #fff;
padding: 0;
@@ -1484,38 +1490,38 @@
max-height: 80vh;
overflow-y: auto;
}
-
+
.popup-header {
padding: 20px;
border-bottom: 1px solid #eee;
-
+
h3 {
font-size: 18px;
font-weight: 600;
color: #2c3e50;
margin: 0;
}
-
+
.popup-subtitle {
font-size: 14px;
color: #7f8c8d;
margin: 5px 0 0 0;
}
}
-
+
.popup-content {
padding: 20px;
-
+
.input-group {
margin-bottom: 15px;
-
+
.input-label {
font-size: 14px;
color: #7f8c8d;
margin-right: 10px;
min-width: 80px;
}
-
+
.input-field {
flex: 1;
padding: 8px 12px;
@@ -1525,28 +1531,28 @@
background-color: white;
}
}
-
+
.input-hint {
margin-top: 8px;
padding: 8px 12px;
background-color: #f8f9fa;
border-radius: 4px;
border-left: 3px solid #409EFF;
-
+
text {
font-size: 12px;
color: #666;
}
}
}
-
+
.popup-actions {
padding: 20px;
border-top: 1px solid #eee;
display: flex;
gap: 10px;
justify-content: flex-end;
-
+
.action-btn {
padding: 12px 20px;
border: none;
@@ -1555,37 +1561,37 @@
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
-
+
&.primary {
background-color: #3498db;
color: white;
}
-
+
&.secondary {
background-color: #95a5a6;
color: white;
}
-
+
&:hover {
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
}
}
-
+
/* 鍥剧墖棰勮 */
.image-preview {
text-align: center;
cursor: pointer;
}
-
+
.preview-image {
max-width: 100%;
max-height: 300px;
border-radius: 4px;
border: 1px solid #ddd;
}
-
+
/* 鍝嶅簲寮忚璁� */
@media (max-width: 768px) {
.info-grid {
@@ -1600,12 +1606,12 @@
.input-label {
margin-bottom: 5px;
}
-
+
.input-wrapper {
flex-direction: column;
gap: 8px;
}
-
+
.upload-btn,
.attachment-btn {
min-width: 70px;
@@ -1615,19 +1621,19 @@
min-height: 40px;
}
}
-
+
/* 闄勪欢鐩稿叧鏍峰紡 */
.attachment-list-popup {
width: 80vw;
max-width: 800px;
max-height: 85vh;
}
-
+
.attachment-detail-popup {
width: 70vw;
max-width: 600px;
}
-
+
.attachment-popup-header {
padding: 16px;
border-bottom: 1px solid #eee;
@@ -1636,14 +1642,14 @@
align-items: center;
background-color: white;
}
-
+
.attachment-popup-title {
font-size: 16px;
font-weight: 600;
color: #2c3e50;
margin: 0;
}
-
+
.attachment-close-btn {
padding: 8px 16px;
border: 1px solid #ddd;
@@ -1653,17 +1659,17 @@
transition: all 0.2s;
color: #2c3e50;
}
-
+
.attachment-close-btn:hover {
background-color: #f8f9fa;
}
-
+
.attachment-popup-content {
padding: 16px;
max-height: 60vh;
overflow-y: auto;
}
-
+
/* 鍔犺浇鐘舵�� */
.attachment-loading {
display: flex;
@@ -1673,7 +1679,7 @@
padding: 40px 20px;
gap: 16px;
}
-
+
.loading-spinner {
width: 32px;
height: 32px;
@@ -1682,17 +1688,17 @@
border-radius: 50%;
animation: spin 1s linear infinite;
}
-
+
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
-
+
.loading-text {
font-size: 14px;
color: #7f8c8d;
}
-
+
/* 绌虹姸鎬� */
.attachment-empty {
display: flex;
@@ -1703,30 +1709,30 @@
gap: 12px;
text-align: center;
}
-
+
.empty-icon {
font-size: 36px;
opacity: 0.6;
}
-
+
.empty-text {
font-size: 16px;
color: #7f8c8d;
font-weight: 500;
}
-
+
.empty-hint {
font-size: 14px;
color: #95a5a6;
}
-
+
/* 闄勪欢鍒楄〃甯冨眬 */
.attachment-list {
display: flex;
flex-direction: column;
gap: 16px;
}
-
+
.attachment-item {
background-color: white;
border-radius: 8px;
@@ -1735,11 +1741,11 @@
transition: all 0.3s;
border: 1px solid #eee;
}
-
+
.attachment-item:hover {
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
-
+
.attachment-info {
padding: 16px;
border-bottom: 1px solid #eee;
@@ -1747,7 +1753,7 @@
align-items: center;
gap: 16px;
}
-
+
.file-type-badge {
width: 40px;
height: 40px;
@@ -1760,13 +1766,13 @@
border: 2px solid #e9ecef;
flex-shrink: 0;
}
-
+
.file-type-badge.large {
width: 56px;
height: 56px;
font-size: 28px;
}
-
+
.file-type-badge.file-pdf { background: #ffe6e6; border-color: #ffcccc; }
.file-type-badge.file-image { background: #e6f3ff; border-color: #cce7ff; }
.file-type-badge.file-text { background: #e6ffe6; border-color: #ccffcc; }
@@ -1776,12 +1782,12 @@
.file-type-badge.file-archive { background: #f0e6ff; border-color: #e0ccff; }
.file-type-badge.file-cad { background: #e6fff0; border-color: #ccffe0; }
.file-type-badge.file-unknown { background: #f5f5f5; border-color: #e0e0e0; }
-
+
.attachment-details {
flex: 1;
min-width: 0;
}
-
+
.attachment-name {
font-size: 16px;
font-weight: 600;
@@ -1793,39 +1799,39 @@
margin-bottom: 8px;
transition: color 0.2s;
}
-
+
.attachment-name:hover {
color: #3498db;
}
-
+
.attachment-meta {
display: flex;
gap: 16px;
font-size: 12px;
color: #95a5a6;
}
-
+
.meta-type {
background-color: #ecf0f1;
padding: 2px 6px;
border-radius: 10px;
color: #7f8c8d;
}
-
+
.meta-version {
background-color: #e8f5e8;
padding: 2px 6px;
border-radius: 10px;
color: #2e7d32;
}
-
+
.meta-date {
background-color: #fff3e0;
padding: 2px 6px;
border-radius: 10px;
color: #f57c00;
}
-
+
.attachment-actions {
padding: 12px 16px;
border-top: 1px solid #eee;
@@ -1833,7 +1839,7 @@
gap: 8px;
background-color: #f8f9fa;
}
-
+
/* 鎸夐挳鏍峰紡 */
.btn-secondary {
padding: 8px 16px;
@@ -1845,11 +1851,11 @@
color: #2c3e50;
flex: 1;
}
-
+
.btn-secondary:hover {
background-color: #f8f9fa;
}
-
+
.btn-primary {
padding: 8px 16px;
border: 1px solid #3498db;
@@ -1860,11 +1866,11 @@
transition: all 0.2s;
flex: 1;
}
-
+
.btn-primary:hover {
background-color: #2980b9;
}
-
+
.btn-success {
padding: 8px 16px;
border: 1px solid #2ecc71;
@@ -1875,11 +1881,11 @@
transition: all 0.2s;
flex: 1;
}
-
+
.btn-success:hover {
background-color: #27ae60;
}
-
+
/* 闄勪欢璇︽儏鏍峰紡 */
.attachment-detail-header {
display: flex;
@@ -1889,7 +1895,7 @@
padding-bottom: 16px;
border-bottom: 1px solid #eee;
}
-
+
.attachment-detail-title {
font-size: 18px;
font-weight: 600;
@@ -1897,34 +1903,34 @@
flex: 1;
word-break: break-all;
}
-
+
.attachment-detail-info {
margin-bottom: 20px;
}
-
+
.info-row {
display: flex;
margin-bottom: 12px;
gap: 16px;
}
-
+
.info-item {
flex: 1;
}
-
+
.info-label {
display: block;
font-size: 12px;
color: #7f8c8d;
margin-bottom: 4px;
}
-
+
.info-content {
font-size: 14px;
color: #2c3e50;
line-height: 1.5;
}
-
+
.attachment-detail-actions {
padding: 12px 16px;
border-top: 1px solid #eee;
@@ -1932,14 +1938,14 @@
gap: 8px;
background-color: #f8f9fa;
}
-
+
/* 鏂囦欢棰勮寮圭獥鏍峰紡 */
.file-preview-popup {
width: 80vw;
max-width: 800px;
max-height: 80vh;
}
-
+
.file-preview-title {
padding: 20px;
margin: 0;
@@ -1949,13 +1955,13 @@
border-bottom: 1px solid #eee;
word-break: break-all;
}
-
+
.file-preview-content {
padding: 20px;
max-height: 60vh;
overflow-y: auto;
}
-
+
.file-preview-content pre {
white-space: pre-wrap;
word-wrap: break-word;
@@ -1967,38 +1973,38 @@
border-radius: 4px;
border: 1px solid #e9ecef;
}
-
+
.image-preview-container {
text-align: center;
}
-
+
.image-zoom-hint {
margin-top: 10px;
font-size: 12px;
color: #7f8c8d;
}
-
+
.unsupported-preview {
text-align: center;
padding: 40px 20px;
}
-
+
.unsupported-icon {
font-size: 48px;
margin-bottom: 16px;
}
-
+
.unsupported-text {
font-size: 16px;
color: #7f8c8d;
margin-bottom: 8px;
}
-
+
.unsupported-hint {
font-size: 14px;
color: #95a5a6;
}
-
+
.file-preview-actions {
padding: 15px 20px;
border-top: 1px solid #eee;
@@ -2006,7 +2012,7 @@
gap: 10px;
justify-content: center;
}
-
+
.file-preview-btn {
padding: 8px 16px;
border-radius: 4px;
@@ -2015,17 +2021,17 @@
cursor: pointer;
transition: all 0.2s;
}
-
+
.file-preview-btn.download-btn {
background: #2ecc71;
color: white;
}
-
+
.file-preview-btn.close-btn {
background: #95a5a6;
color: white;
}
-
+
.file-preview-btn:hover {
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
--
Gitblit v1.9.3