From bcf398d588c873875e680541431c267d611ef557 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 12 五月 2025 13:36:02 +0800
Subject: [PATCH] 导出与自定义标签
---
src/views/system/report/index.vue | 90 +++++++++++++++++++++++++++++++++++----------
1 files changed, 70 insertions(+), 20 deletions(-)
diff --git a/src/views/system/report/index.vue b/src/views/system/report/index.vue
index be4c425..df53f4e 100644
--- a/src/views/system/report/index.vue
+++ b/src/views/system/report/index.vue
@@ -2,7 +2,7 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="鍏抽敭瀛�" prop="peopleId">
- <el-input v-model="queryParams.keyword" placeholder="璇疯緭鍏ュ叧閿瓧" clearable @keyup.enter.native="handleQuery" />
+ <el-input v-model="queryParams.keyword" placeholder="鐐逛綅鍚嶆悳绱�" clearable @keyup.enter.native="handleQuery" @clear="handleQuery"/>
</el-form-item>
<el-form-item label="鎶ュ绫诲瀷" prop="reportType">
<el-select v-model="queryParams.reportType" @change="handleQuery" placeholder="鎶ュ绫诲瀷" clearable>
@@ -11,7 +11,7 @@
</el-select>
</el-form-item>
<el-form-item label="鏁呴殰绫诲瀷" prop="errorTypeList">
- <el-select v-model="queryParams.errorTypeList" multiple @change="handleQuery" clearable @clear="handleQuery">
+ <el-select v-model="queryParams.errorTypeList" multiple @change="handleQuery" clearable>
<el-option v-for="dict in dict.type.report_error_type" :value="dict.value" :key="dict.value" :label="dict.label" />
</el-select>
</el-form-item>
@@ -35,7 +35,8 @@
v-hasPermi="['system:report:add']">鍗曟鎶ュ</el-button>
</el-col>
<el-col :span="1.5">
- <el-button type="success" plain icon="el-icon-upload" size="mini" @click="handleImport">鎵归噺鎶ュ</el-button>
+ <el-button type="success" plain icon="el-icon-upload" size="mini" @click="handleImport"
+ v-hasPermi="['system:report:add']">鎵归噺鎶ュ</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
@@ -59,8 +60,17 @@
<div class="info-item">
<div class="info-label">鎶ュ鏉愭枡</div>
<div class="info-list">
- <div style="margin-bottom: 8px" v-for="file in formatFileList(scope.row.reportMaterials)" :key="file">
- <el-link type="primary" @click="handleDownload(file)">
+ <div style="margin-bottom: 8px" v-for="file in scope.row.reportMaterials!=null ? scope.row.reportMaterials.split(',') : scope.row.reportMaterials" :key="file">
+ <el-image
+ v-if="isImageFile(file)"
+ :src="getPreview(file)"
+ :preview-src-list="[getPreview(file)]"
+ fit="cover"
+ class="material-preview"
+ style="width: 100px; height: 100px; margin: 5px;"
+ >
+ </el-image>
+ <el-link v-else type="primary" @click="handleDownload(file)">
{{file.match(/\/([^\/]*)$/)[1]}}
</el-link>
</div>
@@ -87,7 +97,7 @@
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:report:edit']" v-if="scope.row.status === 2 || scope.row.status === 0">淇敼</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleAuditing(scope.row)"
- v-hasPermi="['system:report:edit']" v-if="scope.row.status === 0 || scope.row.status === 2">瀹℃牳</el-button>
+ v-hasPermi="['system:report:auditing']" v-if="scope.row.status === 0 || scope.row.status === 2">瀹℃牳</el-button>
<el-button size="mini" type="text" icon="el-icon-s-check" @click="handleAuditingRecord(scope.row.id)"
v-hasPermi="['system:report:record']">瀹℃牳璁板綍</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
@@ -136,7 +146,10 @@
</el-select>
</el-form-item>
<el-form-item label="鎶ュ鏃堕棿" prop="daterangeCreateTime">
- <el-date-picker v-model="form.daterangeCreateTime" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
+ <el-date-picker v-model="form.daterangeCreateTime"
+ type="datetimerange"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ format="yyyy-MM-dd HH:mm:ss"
range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡"
></el-date-picker>
</el-form-item>
@@ -177,11 +190,22 @@
<div class="content" v-html="getHtmlContent(record.reportContent)"></div>
</el-descriptions-item>
<el-descriptions-item label="鎶ュ鏉愭枡">
- <el-link
+ <div
v-for="item in record.reportMaterials != null ? record.reportMaterials.split(',') : record.reportMaterials"
- :underline="false" type="primary" :key="item" @click="handleDownload(item)">
- {{ item.substring(item.lastIndexOf("/") + 1) }}
- </el-link>
+ :key="item">
+ <el-image
+ v-if="isImageFile(item)"
+ :src="getPreview(item)"
+ :preview-src-list="[getPreview(item)]"
+ fit="cover"
+ style="width: 100px; height: 100px; margin: 5px;">
+ </el-image>
+ <el-link
+ v-else
+ :underline="false" type="primary" @click="handleDownload(item)">
+ {{ item.substring(item.lastIndexOf("/") + 1) }}
+ </el-link>
+ </div>
</el-descriptions-item>
</el-descriptions>
</el-card>
@@ -214,13 +238,13 @@
<el-input v-model="auditingForm.reportType" disabled />
</el-form-item>
<el-form-item label="鏁呴殰绫诲瀷">
- <el-input v-model="auditingForm.errorTypeList" disabled />
+ <el-input v-model="auditingForm.errorType" disabled />
</el-form-item>
<el-form-item label="鐢熸晥鏃堕棿">
- <el-date-picker v-model="auditingForm.beginCreateTime" disabled />
+ <el-date-picker v-model="auditingForm.beginCreateTime" format="yyyy-MM-dd HH:mm:ss" disabled />
</el-form-item>
<el-form-item label="澶辨晥鏃堕棿">
- <el-date-picker v-model="auditingForm.endCreateTime" disabled />
+ <el-date-picker v-model="auditingForm.endCreateTime" format="yyyy-MM-dd HH:mm:ss" disabled />
</el-form-item>
<el-form-item label="瀹℃牳缁撴灉">
<el-radio-group v-model="auditingForm.auditingResult">
@@ -248,10 +272,24 @@
<span v-html="auditingForm.reportContent"></span>
</el-form-item>
<el-form-item label="鎶ュ鏉愭枡">
- <el-link
+ <!-- 娣诲姞绌鸿 -->
+ <div class="material-spacer">{{''}}</div>
+ <div
v-for="item in auditingForm.reportMaterials != null ? auditingForm.reportMaterials.split(',') : auditingForm.reportMaterials"
- :underline="false" type="primary" :key="item" @click="handleDownload(item)">{{ item.substring(item.lastIndexOf("/") + 1)
- }}</el-link>
+ :key="item">
+ <el-image
+ v-if="isImageFile(item)"
+ :src="getPreview(item)"
+ :preview-src-list="[getPreview(item)]"
+ fit="cover"
+ style="width: 100px; height: 100px; margin: 5px;">
+ </el-image>
+ <el-link
+ v-else
+ :underline="false" type="primary" @click="handleDownload(item)">
+ {{ item.substring(item.lastIndexOf("/") + 1) }}
+ </el-link>
+ </div>
</el-form-item>
</el-form>
</div>
@@ -262,7 +300,6 @@
<el-button type="primary" @click="auditingSubmit">瀹� 鏍�</el-button>
</div>
</el-dialog>
-
</div>
</template>
@@ -369,6 +406,16 @@
this.getList();
},
methods: {
+ getPreview(url) {
+ // 浣跨敤鍏ㄥ眬閰嶇疆鐨勫浘鐗囧墠缂�
+ return this.$img + url;
+ },
+ isImageFile(url) {
+ const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp'];
+ return imageExtensions.some(ext =>
+ url.toLowerCase().endsWith(ext)
+ );
+ },
getHtmlContent(content) {
if (content) {
return content
@@ -380,9 +427,9 @@
if (item.result === 0) {
return '瀹℃牳涓�'
} else if (item.status === 1) {
- return '瀹℃牳閫氳繃'
+ return '閫氳繃'
} else if (item.status === 2) {
- return '瀹℃牳鏈�氳繃'
+ return '鏈�氳繃'
}
},
auditingCancel() {
@@ -627,6 +674,9 @@
</script>
<style lang="scss" scoped>
+.material-spacer {
+ height: 50px; /* 鍙互璋冩暣绌鸿鐨勯珮搴� */
+}
.content {
height: 100px;
max-height: 300px;
--
Gitblit v1.8.0