From e3cac4fb5b540b45d6ec1a53a534d08c03d7c174 Mon Sep 17 00:00:00 2001
From: fei <791364011@qq.com>
Date: 星期六, 15 十一月 2025 16:36:08 +0800
Subject: [PATCH] 打的修改
---
src/views/archiveManager/archiveMaterial/index.vue | 290 ++++++---
src/views/archiveManager/arMAutoUser.vue | 11
src/views/system/user/index.vue | 8
src/assets/12.xls | 0
src/views/archiveManager/seleUser.vue | 8
package-lock.json | 55 +
src/views/system/user/profile/userInfo.vue | 8
package.json | 3
src/views/archiveManager/index.vue | 1108 +++++++++++++++++++++++++++++++++++--
src/views/archiveDoublePdf/index.vue | 219 +++++++
src/api/system/dpdf.js | 9
11 files changed, 1,536 insertions(+), 183 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 022a088..a46a4f2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,6 +10,8 @@
"license": "MIT",
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",
+ "@vue-office/excel": "^1.7.14",
+ "@vue/composition-api": "^1.7.2",
"axios": "0.28.1",
"clipboard": "2.0.8",
"core-js": "3.37.1",
@@ -29,6 +31,7 @@
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
+ "vue-demi": "^0.14.10",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0"
@@ -2019,6 +2022,23 @@
"integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==",
"dev": true
},
+ "node_modules/@vue-office/excel": {
+ "version": "1.7.14",
+ "resolved": "https://registry.npmjs.org/@vue-office/excel/-/excel-1.7.14.tgz",
+ "integrity": "sha512-pVUgt+emDQUnW7q22CfnQ+jl43mM/7IFwYzOg7lwOwPEbiVB4K4qEQf+y/bc4xGXz75w1/e3Kz3G6wAafmFBFg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@vue/composition-api": "^1.7.1",
+ "vue": "^2.0.0 || >=3.0.0",
+ "vue-demi": "^0.14.6"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@vue/babel-helper-vue-jsx-merge-props": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz",
@@ -2656,6 +2676,15 @@
"dev": true,
"engines": {
"node": ">=0.10.0"
+ }
+ },
+ "node_modules/@vue/composition-api": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/@vue/composition-api/-/composition-api-1.7.2.tgz",
+ "integrity": "sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "vue": ">= 2.5 < 2.7"
}
},
"node_modules/@vue/preload-webpack-plugin": {
@@ -16945,6 +16974,32 @@
"resolved": "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.5.5.tgz",
"integrity": "sha512-5mGaBlS1EwLxUFwHHX2Q8zOZSiVfBUjOfolR+ZNKwu7Rh3u+GhwHYOyFkgZHhhoQBBNdyVB28O6W+MpMimhCbA=="
},
+ "node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/vue-hot-reload-api": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
diff --git a/package.json b/package.json
index 768081f..a143e68 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,8 @@
},
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",
+ "@vue-office/excel": "^1.7.14",
+ "@vue/composition-api": "^1.7.2",
"axios": "0.28.1",
"clipboard": "2.0.8",
"core-js": "3.37.1",
@@ -44,6 +46,7 @@
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
+ "vue-demi": "^0.14.10",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0"
diff --git a/src/api/system/dpdf.js b/src/api/system/dpdf.js
new file mode 100644
index 0000000..da90a00
--- /dev/null
+++ b/src/api/system/dpdf.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
+export function getPdfFile(id) {
+ return request({
+ url: '/system/doublePdf/downLoadFile/' + id,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/src/assets/12.xls b/src/assets/12.xls
new file mode 100644
index 0000000..e6c141c
--- /dev/null
+++ b/src/assets/12.xls
Binary files differ
diff --git a/src/views/archiveDoublePdf/index.vue b/src/views/archiveDoublePdf/index.vue
new file mode 100644
index 0000000..c5b58dc
--- /dev/null
+++ b/src/views/archiveDoublePdf/index.vue
@@ -0,0 +1,219 @@
+<template>
+ <div class="app-container">
+ <!-- 姘村钩鎺掑垪瀹瑰櫒 -->
+ <div style="display: flex; align-items: center; gap: 20px;">
+ <!-- 涓婁紶鍖哄煙 -->
+ <div class="upload-container" style="width: 400px; height: 200px;">
+ <el-upload
+ class="upload-demo"
+ ref="upload"
+ :action="uploadUrl"
+ :headers="uploadHeaders"
+ :on-success="handleUploadSuccess"
+ :on-error="handleUploadError"
+ :before-upload="beforeUpload"
+ accept=".pdf"
+ :auto-upload="true"
+ drag
+ >
+ <i class="el-icon-upload"></i>
+ <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+ <div class="el-upload__tip" slot="tip">鏀寔鍗曚釜鎴栨壒閲忎笂浼狅紝璇烽�夋嫨PDF鏂囦欢</div>
+ </el-upload>
+ </div>
+
+ <!-- 涓嬭浇鎸夐挳鍖哄煙 - 涓婁紶鍓嶇鐢紝涓婁紶鍚庡彲鐢� -->
+ <div class="download-container" style="white-space: nowrap;">
+ <el-button
+ type="primary"
+ icon="el-icon-download"
+ @click="downloadFile"
+ :disabled="!canDownload"
+ >
+ 鑾峰彇涓嬭浇閾炬帴
+ </el-button>
+ <!-- 鏄剧ず涓嬭浇閾炬帴鍖哄煙 -->
+ <div v-if="showDownloadLink" style="margin-left: 10px;">
+ <div style="margin-bottom: 5px;">
+ <span>涓嬭浇閾炬帴:</span>
+ </div>
+ <div style="margin-bottom: 5px;">
+ <a :href="displayedDownloadLink" target="_blank" style="color: #409EFF; word-break: break-all; max-width: 400px; display: inline-block;">
+ {{ displayedDownloadLink }}
+ </a>
+ </div>
+ <div>
+ <el-button
+ type="text"
+ icon="el-icon-copy-document"
+ @click="copyLink"
+ size="small"
+ >
+ 澶嶅埗
+ </el-button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import { getToken } from '@/utils/auth'
+import { getPdfFile } from '@/api/system/dpdf'
+export default {
+ name: "DoublePdf",
+ data() {
+ return {
+ fid: '',
+ // 閬僵灞�
+ loading: true,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ // 鎬绘潯鏁�
+ total: 0,
+ // 銆愯濉啓鍔熻兘鍚嶇О銆戣〃鏍兼暟鎹�
+ categoryList: [],
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+ // 鏄惁鏄剧ず寮瑰嚭灞�
+ open: false,
+ // 鏌ヨ鍙傛暟
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ numb: null,
+ nname: null
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {},
+ // 琛ㄥ崟鏍¢獙
+ rules: {
+ numb: [
+ { required: true, message: '璇疯緭鍏ョ紪鍙�', trigger: 'blur' }
+ ],
+ nname: [
+ { required: true, message: '璇疯緭鍏ュ悕绉�', trigger: 'blur' }
+ ]
+ },
+ // 鏂囦欢涓婁紶鐩稿叧
+ uploadUrl: process.env.VUE_APP_BASE_API + "/system/doublePdf/upload", // 涓婁紶鎺ュ彛
+ uploadHeaders: {
+ Authorization: 'Bearer ' + getToken()
+ },
+ // 鏂囦欢涓嬭浇鐩稿叧
+ canDownload: false, // 鏄惁鍙互涓嬭浇
+ uploadedFileName: '', // 宸蹭笂浼犵殑鏂囦欢鍚�
+ downloadUrl: '', // 涓嬭浇閾炬帴
+ showDownloadLink: false, // 鏄惁鏄剧ず涓嬭浇閾炬帴
+ displayedDownloadLink: '' // 鏄剧ず鐨勪笅杞介摼鎺�
+ }
+ },
+ created() {
+ this.getList()
+ },
+ methods: {
+ /** 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� */
+ getList() {
+ this.loading = true
+ },
+
+ /** 涓婁紶鍓嶆鏌� */
+ beforeUpload(file) {
+ const isPdf = file.type === 'application/pdf'
+ const isLt50M = file.size / 1024 / 1024 < 50
+
+ if (!isPdf) {
+ this.$message.error('涓婁紶鏂囦欢鍙兘鏄� PDF 鏍煎紡!')
+ }
+ if (!isLt50M) {
+ this.$message.error('涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 50MB!')
+ }
+
+ return isPdf && isLt50M
+ },
+
+ /** 涓婁紶鎴愬姛澶勭悊 */
+ handleUploadSuccess(response) {
+ console.log(response)
+ console.log("-------------")
+ if (response.code === 200) {
+ this.$message.success('涓婁紶鎴愬姛')
+ // 璁剧疆涓嬭浇鐩稿叧淇℃伅
+ this.canDownload = true
+ // 鍋囪鍝嶅簲涓寘鍚枃浠跺悕鍜屼笅杞介摼鎺�
+ this.fid = (response.data.data)
+ // this.uploadedFileName = response.fileName || '涓婁紶鐨勬枃浠�'
+ // this.downloadUrl = response.downloadUrl || (process.env.VUE_APP_BASE_API + "/system/doublePdf/download?fileId=" + response.fileId)
+ // // 鍙互鍦ㄨ繖閲屽埛鏂板垪琛ㄦ暟鎹�
+ // // this.getList()
+ } else {
+ this.$message.error(response.msg || '涓婁紶澶辫触')
+ }
+ },
+
+ /** 鑾峰彇涓嬭浇閾炬帴 */
+ downloadFile() {
+ // 鍙戣捣ajax璇锋眰鑾峰彇涓嬭浇閾炬帴
+ getPdfFile(this.fid).then(response => {
+ console.log(response)
+ // 纭繚response.data.data鏄瓧绗︿覆绫诲瀷
+ const dataStr = String(response.data.data)
+ alert(dataStr)
+ if(dataStr.includes("浠诲姟灏氭湭缁撴潫锛屾棤娉曡幏鍙栨枃浠�")) {
+ this.$message.success("鏂囦欢娌℃湁澶勭悊瀹岋紝绋嶇瓑鐗囧埢")
+ return;
+ }
+ if (response.code === 200 && response.data) {
+ // 鍋囪鍝嶅簲涓寘鍚笅杞介摼鎺�
+ this.displayedDownloadLink = response.data.data || response.data.downloadUrl || response.data
+ this.showDownloadLink = true
+ this.$message.success('涓嬭浇閾炬帴宸茶幏鍙�')
+ } else {
+ this.$message.error('鑾峰彇涓嬭浇閾炬帴澶辫触: ' + (response.msg || '鏈煡閿欒'))
+ }
+ }).catch(error => {
+ console.error('鑾峰彇涓嬭浇閾炬帴澶辫触:', error)
+ this.$message.error('鑾峰彇涓嬭浇閾炬帴澶辫触锛岃閲嶈瘯')
+ })
+ },
+
+ /** 澶嶅埗閾炬帴鍒板壀璐存澘 */
+ copyLink() {
+ if (this.displayedDownloadLink) {
+ // 鍒涘缓涓存椂鏂囨湰鍖哄煙
+ const textarea = document.createElement('textarea')
+ textarea.value = this.displayedDownloadLink
+ textarea.style.position = 'fixed'
+ textarea.style.opacity = '0'
+ document.body.appendChild(textarea)
+ textarea.select()
+
+ try {
+ document.execCommand('copy')
+ this.$message.success('閾炬帴宸插鍒跺埌鍓创鏉�')
+ } catch (err) {
+ this.$message.error('澶嶅埗澶辫触锛岃鎵嬪姩澶嶅埗')
+ console.error('Copy error:', err)
+ } finally {
+ document.body.removeChild(textarea)
+ }
+ }
+ },
+
+ /** 涓婁紶澶辫触澶勭悊 */
+ handleUploadError(err) {
+ this.$message.error('涓婁紶澶辫触锛岃閲嶈瘯')
+ console.error('Upload error:', err)
+ }
+ }
+}
+ /** 鎻愪氦鎸夐挳 */
+
+</script>
diff --git a/src/views/archiveManager/arMAutoUser.vue b/src/views/archiveManager/arMAutoUser.vue
index c55c7e6..d7eb9ef 100644
--- a/src/views/archiveManager/arMAutoUser.vue
+++ b/src/views/archiveManager/arMAutoUser.vue
@@ -48,7 +48,7 @@
v-hasPermi="['system:role:remove']"
>鎵归噺鍙栨秷鎺堟潈</el-button>
</el-col> -->
- <el-col :span="1.5">
+ <!-- <el-col :span="1.5">
<el-button
type="warning"
plain
@@ -56,7 +56,7 @@
size="mini"
@click="handleClose"
>鍏抽棴</el-button>
- </el-col>
+ </el-col> -->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@@ -148,7 +148,7 @@
created() {
const roleId = this.$route.params && this.$route.params.roleId
const recordId = this.$route.params && this.$route.params.archiveRecordsId
-
+
if (roleId && recordId) {
this.queryParams.roleId = roleId
// 杩涜绫诲瀷杞崲
@@ -164,7 +164,7 @@
// 鍒涘缓涓�涓柊瀵硅薄锛屽皢瀛楃涓茬被鍨嬬殑archiveRecordsId杞崲涓烘暟瀛楃被鍨�
const params = {
...this.queryParams,
- archiveRecordsId: !isNaN(Number(this.queryParams.archiveRecordsId)) ?
+ archiveRecordsId: !isNaN(Number(this.queryParams.archiveRecordsId)) ?
Number(this.queryParams.archiveRecordsId) : 0
}
listArchiverecordstouser(params).then(response => {
@@ -176,8 +176,9 @@
/** 鎵撳紑鎺堟潈鐢ㄦ埛琛ㄥ脊绐� */
openSelectUser() {
// 纭繚浼犻�掔粰select缁勪欢鐨剅ecordId鏄暟瀛楃被鍨�
- const recordId = !isNaN(Number(this.queryParams.archiveRecordsId)) ?
+ const recordId = !isNaN(Number(this.queryParams.archiveRecordsId)) ?
Number(this.queryParams.archiveRecordsId) : 0
+
this.$refs.select.show(recordId)
},
// 杩斿洖鎸夐挳
diff --git a/src/views/archiveManager/archiveMaterial/index.vue b/src/views/archiveManager/archiveMaterial/index.vue
index 83b9619..7551f1d 100644
--- a/src/views/archiveManager/archiveMaterial/index.vue
+++ b/src/views/archiveManager/archiveMaterial/index.vue
@@ -2,8 +2,17 @@
<div class="app-container">
<h2 class="title-border">娣诲姞妗堝嵎璇︾粏璁板綍</h2>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
+
+ <el-row>
+ <el-col :span="8">
+ <el-form-item label="鏂囦欢缂栧彿" prop="documentNumber">
+ <el-input ref="documentNumberInput" v-model="form.documentNumber" placeholder="璇疯緭鍏ユ枃浠剁紪鍙�" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
<el-row>
- <el-col :span="8">
+ <el-col :span="16">
<el-form-item label="璐d换鑰�" prop="creator">
<el-input v-model="form.creator" placeholder="璇疯緭鍏ヨ矗浠昏��" />
</el-form-item>
@@ -11,7 +20,7 @@
</el-row>
<el-row>
- <el-col :span="8">
+ <el-col :span="16">
<el-form-item label="鏂囦欢棰樺悕" prop="title">
<el-input v-model="form.title" placeholder="璇疯緭鍏ユ枃浠堕鍚�" />
</el-form-item>
@@ -42,20 +51,56 @@
:value="item.value"
/>
</el-select>
-
+
</el-form-item>
- <el-form-item label="椤靛彿"
+ <el-form-item label="椤靛彿"
prop="pageNumber"
v-if=" form.fileStyle !== '鍏朵粬鏉愭枡'">
<el-col :span="8">
- <el-input
- v-model.number="form.pageNumber"
- placeholder="璇疯緭鍏ラ〉鍙凤紙鏁板瓧绫诲瀷锛�"
- type="number"
+ <el-input
+ v-model.number="form.pageNumber"
+ placeholder="璇疯緭鍏ラ〉鍙凤紙鏁板瓧绫诲瀷锛�"
+ type="number"
min="1"
oninput="value=value.replace(/[^\d]/g,'')" style="width: 450px;"
/></el-col>
</el-form-item>
+
+ <el-form-item label="澶囨敞" prop="remarks">
+ <el-col :span="8">
+ <el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" />
+ </el-col>
+ </el-form-item>
+
+ <el-form-item label="鍏紑灞炴��" prop="publicity">
+ <el-select
+ v-model="form.publicity"
+ placeholder="璇烽�夋嫨鍏紑灞炴��"
+ clearable
+ >
+ <el-option
+ v-for="item in publicityOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鏄惁涓洪檮浠�" prop="isAttachment">
+ <el-select
+ v-model="form.isAttachment"
+ placeholder="璇烽�夋嫨鏄惁涓洪檮浠�"
+ >
+ <el-option
+ v-for="item in isAttachmentOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+
+
<el-form-item label="鎵�澶勯樁娈�" prop="stage">
<el-select
v-model="form.stage"
@@ -69,13 +114,14 @@
/>
</el-select>
</el-form-item>
- <el-form-item label="鍏紑灞炴��" prop="publicity">
+
+ <el-form-item label="瀵嗙骇" prop="securityLevel">
<el-select
- v-model="form.publicity"
- placeholder="璇烽�夋嫨鍏紑灞炴��"
+ v-model="form.securityLevel"
+ placeholder="璇烽�夋嫨瀵嗙骇"
>
<el-option
- v-for="item in publicityOptions"
+ v-for="item in securityLevelOptions"
:key="item.value"
:label="item.label"
:value="item.value"
@@ -83,19 +129,6 @@
</el-select>
</el-form-item>
- <el-form-item label="鏄惁涓洪檮浠�" prop="isAttachment">
- <el-select
- v-model="form.isAttachment"
- placeholder="璇烽�夋嫨鏄惁涓洪檮浠�"
- >
- <el-option
- v-for="item in isAttachmentOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
<el-form-item label="淇濈鏈熼檺" prop="retentionPeriod">
<el-select
@@ -112,19 +145,7 @@
</el-form-item>
<!-- 瀵硅瘽妗嗚〃鍗曚腑鐨勫瘑绾� -->
- <el-form-item label="瀵嗙骇" prop="securityLevel">
- <el-select
- v-model="form.securityLevel"
- placeholder="璇烽�夋嫨瀵嗙骇"
- >
- <el-option
- v-for="item in securityLevelOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
+
@@ -200,6 +221,16 @@
</el-col>
<el-col :span="1.5">
<el-button
+ type="warning"
+ plain
+ icon="el-icon-download"
+ size="mini"
+ @click="handleExport"
+
+ >瀵煎嚭</el-button>
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
type="danger"
plain
icon="el-icon-delete"
@@ -209,16 +240,7 @@
v-hasPermi="['system:materials:remove']"
>鍒犻櫎</el-button>
</el-col>
- <el-col :span="1.5">
- <el-button
- type="warning"
- plain
- icon="el-icon-download"
- size="mini"
- @click="handleExport"
- v-hasPermi="['system:materials:export']"
- >瀵煎嚭</el-button>
- </el-col>
+
<el-col :span="1.5">
<el-button
type="success"
@@ -236,8 +258,8 @@
class="upload-demo"
ref="upload"
:action="uploadUrl"
- :headers="headers"
- :data="uploadParams"
+ :headers="headers"
+ :data="uploadParams"
:on-success="handleSuccess"
:on-error="handleError"
:on-preview="handlePreview"
@@ -288,7 +310,33 @@
<el-table v-loading="loading" :data="materialsList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
+ <el-table-column label="鎿嶄綔" align="center" width="160" class-name="small-padding ">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:materials:edit']"
+ >淇敼</el-button>
+ <!-- <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:materials:edit']"
+ >瀵煎叆闄勪欢</el-button> -->
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-delete"
+ @click="handleDelete(scope.row)"
+ v-hasPermi="['system:materials:remove']"
+ >鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
<el-table-column label="鏂囦欢鏉愭枡搴忓彿" align="center" prop="fileNumber" />
+ <el-table-column label="鏂囦欢缂栧彿" align="center" prop="documentNumber" />
<el-table-column label="璐d换鑰�" align="center" prop="creator" />
<el-table-column label="鏂囦欢棰樺悕" align="center" prop="title" />
@@ -297,15 +345,18 @@
<span>{{ parseTime(scope.row.date, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
- <el-table-column label="椤靛彿" sortable align="center" prop="pageNumber" />
- <el-table-column label="椤垫" sortable align="center" prop="pageOrder" />
+ <el-table-column label="椤靛彿" sortable align="center" prop="pageNumber" />
+ <el-table-column label="澶囨敞" align="center" prop="remarks" />
+ <el-table-column label="椤垫" sortable align="center" prop="pageOrder" />
- <el-table-column label="鎵�澶勯樁娈�" sortable align="center" prop="stage" />
- <el-table-column label="鍏紑灞炴��" sortable align="center" prop="publicity" />
+ <el-table-column label="鎵�澶勯樁娈�" sortable align="center" width="180" prop="stage" />
+ <el-table-column label="鍏紑灞炴��" sortable align="center" width="180" prop="publicity" />
<el-table-column label="鏄惁涓洪檮鍥惧強闄勪欢" align="center" prop="isAttachment" />
<el-table-column label="淇濈鏈熼檺" align="center" prop="retentionPeriod" />
<el-table-column label="瀵嗙骇" align="center" prop="securityLevel" />
+ <el-table-column label="鏉愭枡绫诲瀷" align="fileStyle" prop="fileStyle" />
+
<el-table-column label="鏄惁娑夊瘑鍙婃晱鎰熶俊鎭�" align="center" prop="isSensitive" />
<el-table-column label="鏄惁娉ㄩ攢" align="center" prop="isCanceled" />
<el-table-column label="鏍煎紡" align="center" prop="format" />
@@ -317,31 +368,8 @@
<el-table-column label="澶у皬" align="center" prop="fileSize" />
<el-table-column label="闄勪欢鍙婂巻鍙插彂鏂囧彿" align="center" prop="attachmentHistoryNumbers" />
- <el-table-column label="鎿嶄綔" align="center" width="160" class-name="small-padding ">
- <template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['system:materials:edit']"
- >淇敼</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['system:materials:edit']"
- >瀵煎叆闄勪欢</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['system:materials:remove']"
- >鍒犻櫎</el-button>
- </template>
- </el-table-column>
+
+
</el-table>
<pagination
@@ -354,18 +382,22 @@
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="forms" :model="forms" :rules="rules" label-width="100px">
+
+
+ <el-form-item label="鏂囦欢缂栧彿" prop="documentNumber">
+ <el-input v-model="forms.documentNumber" placeholder="璇疯緭鍏ユ枃浠剁紪鍙�" />
+ </el-form-item>
<el-row>
- <el-col :span="8">
+ <el-col :span="16">
<el-form-item label="璐d换鑰�" prop="creator">
<el-input v-model="forms.creator" placeholder="璇疯緭鍏ヨ矗浠昏��" />
</el-form-item>
</el-col>
- <el-col :span="8">
- <el-form-item label="鏂囦欢棰樺悕" prop="title">
- <el-input v-model="forms.title" placeholder="璇疯緭鍏ユ枃浠堕鍚�" />
- </el-form-item>
- </el-col>
+
</el-row>
+ <el-form-item label="鏂囦欢棰樺悕" prop="title">
+ <el-input v-model="forms.title" placeholder="璇疯緭鍏ユ枃浠堕鍚�" />
+ </el-form-item>
<el-form-item label="鏃ユ湡" prop="date">
<el-input v-model="forms.date" placeholder="璇疯緭鍏ユ棩鏈� (鏍煎紡锛歽yyy-mm-dd)" style="width: 200px;" />
<!-- <el-date-picker clearable
@@ -394,7 +426,9 @@
</el-select>
</el-form-item>
-
+ <el-form-item label="澶囨敞" prop="remarks">
+ <el-input v-model="forms.remarks" placeholder="璇疯緭鍏ュ娉�" />
+ </el-form-item>
<el-form-item label="鎵�澶勯樁娈�" prop="stage">
<el-select
v-model="forms.stage"
@@ -706,7 +740,7 @@
uploadUrl: process.env.VUE_APP_BASE_API +'/system/materials/upload/'+this.recordId, // 鏇挎崲涓哄疄闄呯殑涓婁紶鎺ュ彛
headers: {
Authorization: 'Bearer ' + getToken()
- },
+ },
uploadParams: {
type: 'material' // 鑷畾涔変笂浼犵被鍨�
},
@@ -722,8 +756,9 @@
securityLevelOptions: [
{ value: '绉樺瘑', label: '绉樺瘑' },
{ value: '鏅��', label: '鏅��' },
- { value: '璇ラ〉鍙﹀瓨', label: '璇ラ〉鍙﹀瓨' }
-
+ { value: '璇ラ〉鍙﹀瓨', label: '璇ラ〉鍙﹀瓨' },
+ { value: '鍐呴儴鐢ㄩ��', label: '鍐呴儴鐢ㄩ��' },
+ { value: '鍐呴儴鐢ㄥ浘', label: '鍐呴儴鐢ㄥ浘' },
],
// 娣诲姞淇濈鏈熼檺閫夐」
retentionPeriodOptions: [
@@ -813,19 +848,22 @@
// 琛ㄥ崟鏍¢獙
rules: {
creator: [
- { required: true, message: "鍒涘缓鑰呬笉鑳戒负绌�", trigger: "blur" }
+ // { required: true, message: "鍒涘缓鑰呬笉鑳戒负绌�", trigger: "blur" }
],
title: [
{ required: true, message: "妗堝嵎棰樺悕涓嶈兘涓虹┖", trigger: "blur" }
],
date: [
- { required: true, message: "鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" },
+ // { required: true, message: "鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" },
{ pattern: /^\d{4}-\d{2}-\d{2}$/, message: "鏃ユ湡鏍煎紡蹇呴』涓簓yyy-mm-dd", trigger: "blur" }
],
pageNumber: [
{ required: true, message: "椤靛彿涓嶈兘涓虹┖", trigger: "blur" },
{ type: 'number', message: '椤靛彿蹇呴』涓烘暟瀛楃被鍨�', trigger: ['blur', 'change'] },
{ pattern: /^\d+$/, message: '璇疯緭鍏ユ鏁存暟', trigger: 'blur' }
+ ],
+ stage: [
+ { required: true, message: "鎵�澶勯樁娈典笉鑳戒负绌�", trigger: "change" }
]
}
}
@@ -1069,11 +1107,69 @@
console.log(this.form)
this.form.recordId = this.recordId
console.log("==============+++++++++++++++============")
+
+ // 淇濆瓨褰撳墠琛ㄥ崟涓渶瑕佷繚鐣欑殑瀛楁鍊�
+ const preservedValues = {
+ documentNumber: this.form.documentNumber,
+ creator: this.form.creator,
+ title: this.form.title,
+ date: this.form.date,
+ pageNumber: this.form.pageNumber,
+ remarks: this.form.remarks,
+ stage: this.form.stage // 鎵�澶勯樁娈典繚鎸佽窡涓婁竴鏉′竴鑷�
+ };
+ this.$refs.form.validate(valid => {
+ if (valid) {
addMaterials(this.form).then(response => {
this.$modal.msgSuccess("鏂板鎴愬姛")
- // this.opens = false
-
+
+ // 鍒涘缓鏂拌〃鍗曪紝淇濈暀鐗瑰畾瀛楁锛岄噸缃叾浠栧瓧娈�
+ this.form = {
+ materialId: null,
+ recordId: this.recordId,
+ // 淇濈暀鐨勫瓧娈�
+ documentNumber: preservedValues.documentNumber,
+ creator: preservedValues.creator,
+ title: preservedValues.title,
+ date: preservedValues.date,
+ pageNumber: preservedValues.pageNumber,
+ remarks: preservedValues.remarks,
+ stage: preservedValues.stage,
+ // 閲嶇疆涓虹┖鐨勫瓧娈�
+ publicity: null,
+ // 閲嶇疆涓洪粯璁ゅ�肩殑瀛楁
+ fileStyle: '鏂囧瓧鏉愭枡', // 鏉愭枡绫诲瀷榛樿涓烘枃瀛楁潗鏂�
+ securityLevel: '鏅��', // 瀵嗙骇榛樿涓烘櫘閫�
+ isAttachment: '鍚�', // 鏄惁涓洪檮浠堕粯璁や负鍚�
+ isSensitive: '鍚�', // 鏄惁鏁忔劅榛樿涓哄惁
+ isCanceled: '鍚�', // 鏄惁娉ㄩ攢榛樿涓哄惁
+ // 鍏朵粬闇�瑕侀噸缃殑瀛楁
+ isDiagram: '鍚�',
+ retentionPeriod: '姘镐箙',
+ format: null,
+ sizeType: null,
+ horizontalResolution: null,
+ verticalResolution: null,
+ width: null,
+ height: null,
+ fileSize: null,
+ attachmentHistoryNumbers: null,
+ createdAt: null,
+ updatedAt: null
+ };
+
+ // 淇濆瓨鎴愬姛鍚庯紝鍏夋爣璺冲洖鏂囦欢缂栧彿杈撳叆妗�
+ this.$nextTick(() => {
+ this.$refs.documentNumberInput.focus();
+ });
this.getList()
+ })
+ }
+ else
+ {
+ this.$message.error('璇峰~鍐欐墍鏈夊繀濉瓧娈�');
+
+ }
})
},
/** 鎻愪氦鎸夐挳 */
@@ -1083,6 +1179,10 @@
if (this.forms.materialId != null) {
updateMaterials(this.forms).then(response => {
this.$modal.msgSuccess("淇敼鎴愬姛")
+ // 淇敼鎴愬姛鍚庯紝鍏夋爣璺冲洖鏂囦欢缂栧彿杈撳叆妗�
+ this.$nextTick(() => {
+ this.$refs.documentNumberInput.focus();
+ });
this.open = false
this.getList()
})
@@ -1153,7 +1253,7 @@
},
/** 鍙栨秷鎺堟潈鎸夐挳鎿嶄綔 */
cancelAuthUser(row) {
- const recordId = this.recordId
+ const recordId = this.recordId
var userId = store.state.user.id
var _this = this
// alert(userId)
@@ -1174,7 +1274,7 @@
_this.$router.push('/archiveManager/infoManager')
_this.$modal.msgSuccess("鍙栨秷鎺堟潈鎴愬姛")
})
-
+
}).catch(() => {})
},
}
diff --git a/src/views/archiveManager/index.vue b/src/views/archiveManager/index.vue
index 50eb592..690a203 100644
--- a/src/views/archiveManager/index.vue
+++ b/src/views/archiveManager/index.vue
@@ -287,6 +287,78 @@
<el-table v-loading="loading" :data="recordsList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
+
+
+
+ <el-table-column label="鎿嶄綔" align="center" width="190" class-name="small-padding fixed-width">
+ <template slot-scope="scope">
+ <el-button
+ v-if="scope.row.ownData"
+
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleInfo(scope.row)"
+ v-hasPermi="['system:records:edit']"
+ >妗堝嵎璇︾粏淇℃伅</el-button>
+
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleCheck(scope.row)"
+ >鏌ョ湅</el-button>
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-printer"
+ @click="viewAndPrintExcel(scope.row)"
+ title="鏌ョ湅骞舵墦鍗癊xcel鏂囦欢"
+ >鎵撳嵃棰勬暣鐞嗘竻鍗�</el-button>
+ <el-button
+ v-if="userId!==1&&scope.row.ownData"
+
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleSubmit(scope.row)"
+ v-hasPermi="['system:records:edit']"
+ >鎻愪氦妗堝嵎</el-button>
+ <el-button
+ v-if="scope.row.ownData||userId===1"
+
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:records:edit']"
+ >淇敼</el-button>
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-delete"
+ @click="handleDelete(scope.row)"
+ v-hasPermi="['system:records:remove']"
+ >鍒犻櫎</el-button>
+ <el-dropdown size="mini" v-hasPermi="['system:records:remove']" @command="(command) => handleCommand(command, scope.row)">
+ <el-button size="mini" type="text" icon="el-icon-d-arrow-right">鏇村</el-button>
+ <el-dropdown-menu slot="dropdown">
+
+ <el-dropdown-item command="handleAuthUser" icon="el-icon-user"
+ >鍒嗛厤鐢ㄦ埛</el-dropdown-item>
+ </el-dropdown-menu>
+ </el-dropdown>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鐘舵��" align="center" prop="recordStatus" width="120">
+ <template slot-scope="scope">
+ <el-button :type="scope.row.recordStatus === '鏈綍鍏�' ? 'danger' : 'success'" size="mini">
+ {{ scope.row.recordStatus }}
+ </el-button>
+ </template>
+ </el-table-column>
+
<!-- <el-table-column label="${comment}" align="center" prop="id" /> -->
<el-table-column label="妗f鍙�" align="center" prop="recordId" />
<el-table-column label="鍙戞枃鍙�" align="center" prop="inquiryNumber" />
@@ -313,69 +385,7 @@
<el-table-column label="缂╁井鍙�" align="center" prop="microfilmNumber" />
<el-table-column label="澶囨敞" align="center" prop="remarks" />
<el-table-column label="鍘嗗彶鐩稿叧鍙戞枃鍙�" align="center" prop="historicalReferenceNumber" />
-
- <el-table-column label="鐘舵��" align="center" prop="recordStatus">
- <template slot-scope="scope">
- <el-button :type="scope.row.recordStatus === '鏈綍鍏�' ? 'danger' : 'success'" size="mini">
- {{ scope.row.recordStatus }}
- </el-button>
- </template>
-</el-table-column>
-
- <el-table-column label="鎿嶄綔" align="center" width="190" class-name="small-padding fixed-width">
- <template slot-scope="scope">
- <el-button
- v-if="scope.row.ownData"
-
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleInfo(scope.row)"
- v-hasPermi="['system:records:edit']"
- >妗堝嵎璇︾粏淇℃伅</el-button>
-
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleCheck(scope.row)"
- >鏌ョ湅</el-button>
- <el-button
- v-if="userId!==1&&scope.row.ownData"
-
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleSubmit(scope.row)"
- v-hasPermi="['system:records:edit']"
- >鎻愪氦妗堝嵎</el-button>
- <el-button
- v-if="scope.row.ownData||userId===1"
-
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['system:records:edit']"
- >淇敼</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['system:records:remove']"
- >鍒犻櫎</el-button>
- <el-dropdown size="mini" v-hasPermi="['system:records:remove']" @command="(command) => handleCommand(command, scope.row)">
- <el-button size="mini" type="text" icon="el-icon-d-arrow-right">鏇村</el-button>
- <el-dropdown-menu slot="dropdown">
-
- <el-dropdown-item command="handleAuthUser" icon="el-icon-user"
- >鍒嗛厤鐢ㄦ埛</el-dropdown-item>
- </el-dropdown-menu>
- </el-dropdown>
- </template>
- </el-table-column>
</el-table>
<pagination
@@ -385,6 +395,86 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
+ <!-- Excel鎿嶄綔寮圭獥 -->
+ <el-dialog :visible.sync="excelDialogVisible" class="excel-dialog-overlay" @click="closeExcelDialog">
+ <div class="excel-dialog" @click.stop>
+ <div class="excel-dialog-header">
+ <h3>Excel鎿嶄綔</h3>
+ <p class="excel-dialog-tip">璇烽�夋嫨浠ヤ笅鎿嶄綔澶勭悊Excel鏂囦欢</p>
+
+ <!-- <button class="excel-dialog-close" @click="closeExcelDialog">脳</button> -->
+ </div>
+ <div class="excel-dialog-body">
+ <!-- 閫夋嫨妗嗗尯鍩� -->
+ <div class="excel-options-section">
+ <!-- 浜岀淮鐮侀�夋嫨 -->
+ <div class="option-group">
+ <label class="option-label">
+ <input type="checkbox" v-model="excelOptions.includeQrCode">
+ <span>鍖呭惈浜岀淮鐮�</span>
+ </label>
+ </div>
+
+ <!-- 娉ㄨВ閫夋嫨 -->
+ <div class="option-group">
+ <div class="option-label">閫夋嫨娉ㄨВ:</div>
+ <div class="annotation-options">
+ <label v-for="i in 5" :key="i" class="annotation-checkbox">
+ <input type="checkbox" v-model="excelOptions.selectedAnnotations" :value="i">
+ <span>娉ㄨВ{{ i }}</span>
+ </label>
+ </div>
+ </div>
+
+ <!-- 绛惧悕鏍忛�夋嫨 -->
+ <div class="option-group">
+ <div class="option-label">绛惧悕鏍忚缃�:</div>
+ <div class="signature-options">
+ <div class="signature-checkboxes">
+ <label v-for="i in 3" :key="i" class="signature-checkbox">
+ <input type="checkbox" v-model="excelOptions.selectedSignatures" :value="i">
+ <span>绛惧悕鏍弡{ i }}</span>
+ </label>
+ </div>
+<!-- <p v-if="excelOptions.selectedSignatures.length === 0" class="option-tip">璇烽�夋嫨鑷冲皯涓�涓鍚嶆爮</p> -->
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- 浼樺寲鐨凟xcel棰勮缁勪欢 -->
+ <div class="excel-preview-wrapper" v-if="excelDialogVisible">
+ <!-- 涓昏棰勮缁勪欢 -->
+ <vue-office-excel
+ v-if="currentExcelUrl"
+ :src="currentExcelUrl"
+ style="width: 100%; height: 500px;"
+ @rendered="renderedHandler"
+ @error="handleExcelRenderError"
+ />
+
+ <!-- 閿欒鎻愮ず -->
+ <div v-if="excelRenderError" class="excel-error-message">
+ <h3>Excel娓叉煋澶辫触</h3>
+ <p>{{ excelRenderError }}</p>
+ <p>璇峰皾璇曚互涓嬭В鍐虫柟妗堬細</p>
+ <ul>
+ <li>涓嬭浇鏂囦欢鍚庝娇鐢‥xcel杞欢鎵撳紑</li>
+ <li>纭鏂囦欢鏍煎紡鏄惁涓烘敮鎸佺殑.xls鎴�.xlsx</li>
+ </ul>
+ <button class="excel-dialog-btn download-btn" @click="handleDownloadClick">涓嬭浇Excel鏂囦欢</button>
+ </div>
+ </div>
+
+ <div class="excel-dialog-footer">
+ <button class="excel-dialog-btn preview-btn" @click="handlePreviewClick">棰勮</button>
+ <button class="excel-dialog-btn print-btn" @click="handlePrintClick">鎵撳嵃</button>
+ <button class="excel-dialog-btn download-btn" @click="handleDownloadClick">涓嬭浇</button>
+ </div>
+ </div>
+
+
+
+ </el-dialog>
<!-- 鏌ョ湅鏁版嵁鎸夐挳 -->
<el-dialog :title="title" :visible.sync="open_check" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
@@ -696,14 +786,24 @@
</template>
<script>
+import VueOfficeExcel from '@vue-office/excel'
+import '@vue-office/excel/lib/index.css'
+
+import axios from 'axios'
+import { getToken } from '@/utils/auth'
import { enload, batchSubmitRecords,updateStatusById,listRecords,getMaxId, getRecords, delRecords, addRecords, updateRecords } from "@/api/system/records"
import { listAllCategory } from "@/api/system/category"
import { listAllProjectName } from "@/api/system/projectName"
import { listPlaceName, listAllPlaceName } from "@/api/system/placeName"
export default {
+ components: {
+ VueOfficeExcel
+ },
name: "Records",
data() {
return {
+ excel: 'http://localhost:8080/profile/upload/12.xls', //璁剧疆鏂囨。缃戠粶鍦板潃锛屽彲浠ユ槸鐩稿鍦板潃
+
open_check: false,
securityLevelOptions: [
{ value: '绉樺瘑', label: '绉樺瘑' },
@@ -774,6 +874,21 @@
remarks: null,
historicalReferenceNumber: null
},
+ // Excel寮圭獥鐩稿叧鏁版嵁
+ excelDialogVisible: false,
+ currentExcelUrl: '',
+ currentExcelBlob: null,
+ currentExcelId: '',
+ excelLoading: false,
+ excelPreviewTimeout: null,
+ excelRenderError: '', // Excel娓叉煋閿欒淇℃伅
+ // Excel閫夐」閰嶇疆
+ excelOptions: {
+ includeQrCode: false, // 鏄惁鍖呭惈浜岀淮鐮�
+ selectedAnnotations: [], // 閫変腑鐨勬敞瑙e垪琛�
+ includeSignature: false, // 鏄惁鍖呭惈绛惧悕鏍�
+ signaturePosition: 'bottom' // 绛惧悕鏍忎綅缃細top/bottom
+ },
// 琛ㄥ崟鍙傛暟
form: {
recordSeq: '',
@@ -802,7 +917,8 @@
}
},
created() {
-
+ // 鐩戝惉ESC閿叧闂脊绐�
+ document.addEventListener('keydown', this.handleKeyDown);
this.userId = this.$store.state.user.id;
// 鑾峰彇鐢ㄦ埛瑙掕壊
@@ -832,7 +948,42 @@
immediate: true
}
},
+ beforeDestroy() {
+ // 娓呯悊浜嬩欢鐩戝惉鍣ㄥ拰瀹氭椂鍣�
+ document.removeEventListener('keydown', this.handleKeyDown);
+ if (this.excelPreviewTimeout) {
+ clearTimeout(this.excelPreviewTimeout);
+ }
+ if (this.currentExcelUrl) {
+ URL.revokeObjectURL(this.currentExcelUrl);
+ }
+ },
methods: {
+ /** Excel娓叉煋瀹屾垚澶勭悊 */
+ renderedHandler() {
+ console.log("Excel娓叉煋瀹屾垚");
+ this.excelLoading = false;
+ this.excelRenderError = '';
+ },
+ /** Excel娓叉煋閿欒澶勭悊 */
+ handleExcelRenderError(error) {
+ console.error("Excel娓叉煋澶辫触:", error);
+ this.excelLoading = false;
+
+ // 璁剧疆鍙嬪ソ鐨勯敊璇俊鎭�
+ if (error && error.message) {
+ this.excelRenderError = error.message;
+ } else {
+ this.excelRenderError = '鏃犳硶娓叉煋姝xcel鏂囦欢锛屽彲鑳芥槸鏂囦欢鏍煎紡涓嶅吋瀹规垨宸叉崯鍧忋��';
+ }
+
+ // 灏濊瘯澶囬�夋柟妗�
+ this.tryAlternativePreview();
+ },
+ /** 灏濊瘯澶囬�夐瑙堟柟妗� */
+ tryAlternativePreview() {
+ console.log('灏濊瘯澶囬�夐瑙堟柟妗�...');
+ },
getId()
{
var _this = this;
@@ -849,19 +1000,19 @@
// 鐢熸垚妗堝嵎棰樺悕
generateCaseTitle() {
let titleParts = [];
-
+
if (this.form.constructionUnit) {
titleParts.push(this.form.constructionUnit);
}
-
+
if (this.form.constructionAddress) {
titleParts.push(this.form.constructionAddress);
}
-
+
if (this.form.projectName) {
titleParts.push(this.form.projectName);
}
-
+
this.form.caseTitle = titleParts.join('');
},
async getZoneOptions()
@@ -1057,7 +1208,7 @@
.map(item => item.id);
// 妫�鏌ラ�変腑鐨処D鏄惁鍏ㄩ儴灞炰簬鑷繁
const invalidIds = this.ids.filter(id => !myValidIds.includes(id));
-
+
if (invalidIds.length > 0) {
this.$message.error(`鍖呭惈鏃犳潈鎿嶄綔鐨処D: ${invalidIds.join(',')}`);
return false;
@@ -1166,10 +1317,518 @@
},
/** 瀵煎嚭鎸夐挳鎿嶄綔 */
handleExport() {
- this.download('system/records/export', {
- ...this.queryParams
- }, `records_${new Date().getTime()}.xlsx`)
+ // 妫�鏌ユ槸鍚︽湁閫変腑鐨勮褰�
+ //alert(234)
+ // alert(this.ids.length)
+ if (this.ids && this.ids.length > 0) {
+ // 鍙鍑洪�変腑鐨勮褰�
+ this.download('system/records/export', {
+ ids: this.ids.join(',') // 灏嗛�変腑鐨処D鏁扮粍杞崲涓洪�楀彿鍒嗛殧鐨勫瓧绗︿覆
+ }, `records_${new Date().getTime()}.xlsx`)
+ } else {
+ // 娌℃湁閫変腑璁板綍鏃讹紝瀵煎嚭绗﹀悎鏌ヨ鏉′欢鐨勬墍鏈夎褰�
+ this.download('system/records/export', {
+ ...this.queryParams
+ }, `records_${new Date().getTime()}.xlsx`)
+ }
},
+
+ /** 鏌ョ湅骞舵墦鍗癊xcel鏂囦欢 */
+ viewAndPrintExcel(row) {
+ const id = row.id || this.ids;
+ this.$modal.loading('姝e湪鑾峰彇Excel鏂囦欢锛岃绋嶅��...');
+
+ // 浠庡悗绔幏鍙朎xcel鏂囦欢
+ this.getExcelFile(id).then(blob => {
+ this.$modal.closeLoading();
+ // 淇濆瓨鏂囦欢淇℃伅骞舵樉绀洪潤鎬佸脊绐�
+ this.currentExcelUrl = URL.createObjectURL(blob);
+ this.currentExcelBlob = blob;
+ this.currentExcelId = id;
+ this.excelDialogVisible = true;
+ this.excelLoading = false;
+ }).catch(error => {
+ this.$modal.closeLoading();
+ console.error('鑾峰彇Excel鏂囦欢澶辫触:', error);
+ this.$modal.msgError('鑾峰彇Excel鏂囦欢澶辫触锛岃绋嶅悗閲嶈瘯');
+ });
+ },
+
+ /** 澶勭悊閿洏浜嬩欢 - ESC閿叧闂脊绐� */
+ handleKeyDown(e) {
+ if (e.key === 'Escape' && this.excelDialogVisible) {
+ this.closeExcelDialog();
+ }
+ },
+
+ /** 鍏抽棴Excel寮圭獥骞舵竻鐞嗚祫婧� */
+ closeExcelDialog() {
+ this.excelDialogVisible = false;
+ if (this.excelPreviewTimeout) {
+ clearTimeout(this.excelPreviewTimeout);
+ this.excelPreviewTimeout = null;
+ }
+ if (this.currentExcelUrl) {
+ URL.revokeObjectURL(this.currentExcelUrl);
+ this.currentExcelUrl = '';
+ }
+ this.currentExcelBlob = null;
+ },
+
+ /** 澶勭悊棰勮鎸夐挳鐐瑰嚮 */
+ handlePreviewClick() {
+ this.excelLoading = true;
+ this.excelRenderError = '';
+
+ // 閲嶇疆vue-office-excel缁勪欢
+ if (this.currentExcelUrl) {
+ const tempUrl = this.currentExcelUrl;
+ this.currentExcelUrl = '';
+ this.$nextTick(() => {
+ this.currentExcelUrl = tempUrl;
+ });
+ }
+
+ const previewContainer = this.$refs.excelPreviewContainer;
+
+ // 娓呯┖棰勮瀹瑰櫒
+ if (previewContainer) {
+ previewContainer.innerHTML = '';
+
+ // 灏濊瘯浣跨敤寰蒋Office Online棰勮鏈嶅姟浣滀负澶囬��
+ const officeOnlineUrl = `https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(this.currentExcelUrl)}`;
+
+ // 鍒涘缓iframe鐢ㄤ簬棰勮
+ const iframe = document.createElement('iframe');
+ iframe.style.width = '100%';
+ iframe.style.height = '100%';
+ iframe.style.border = 'none';
+ iframe.style.minHeight = '600px';
+ iframe.src = officeOnlineUrl;
+ iframe.title = 'Excel鏂囦欢棰勮';
+
+ // 鍒涘缓鍔犺浇鎸囩ず鍣�
+ const loadingIndicator = document.createElement('div');
+ loadingIndicator.className = 'loading-indicator';
+ loadingIndicator.innerHTML = `
+ <div class="loading-spinner"></div>
+ <p>姝e湪鍔犺浇Excel鏂囦欢锛岃绋嶅��...</p>
+ `;
+ previewContainer.style.position = 'relative';
+ previewContainer.appendChild(iframe);
+ previewContainer.appendChild(loadingIndicator);
+
+ // 鐩戝惉iframe鍔犺浇瀹屾垚
+ iframe.onload = () => {
+ this.excelLoading = false;
+ if (loadingIndicator && loadingIndicator.parentNode) {
+ loadingIndicator.parentNode.removeChild(loadingIndicator);
+ }
+ };
+
+ // 璁剧疆瓒呮椂澶勭悊
+ this.excelPreviewTimeout = setTimeout(() => {
+ this.excelLoading = false;
+ if (loadingIndicator && loadingIndicator.parentNode) {
+ loadingIndicator.parentNode.removeChild(loadingIndicator);
+ }
+
+ // 灏濊瘯鐩存帴棰勮浣滀负澶囬�夋柟妗�
+ previewContainer.innerHTML = '';
+ const directIframe = document.createElement('iframe');
+ directIframe.style.width = '100%';
+ directIframe.style.height = '100%';
+ directIframe.style.border = 'none';
+ directIframe.style.minHeight = '600px';
+ directIframe.src = this.currentExcelUrl;
+
+ const fallbackMessage = document.createElement('div');
+ fallbackMessage.textContent = 'Office棰勮鏈嶅姟鍔犺浇瓒呮椂锛屾鍦ㄥ皾璇曠洿鎺ラ瑙�...';
+ fallbackMessage.style.cssText = `
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ padding: 10px;
+ background-color: #f56c6c;
+ color: white;
+ text-align: center;
+ font-size: 14px;
+ z-index: 10;
+ `;
+
+ previewContainer.appendChild(directIframe);
+ previewContainer.appendChild(fallbackMessage);
+
+ directIframe.onload = () => {
+ if (fallbackMessage && fallbackMessage.parentNode) {
+ fallbackMessage.parentNode.removeChild(fallbackMessage);
+ }
+ };
+
+ // 浜屾瓒呮椂澶勭悊
+ setTimeout(() => {
+ if (directIframe && directIframe.parentNode) {
+ directIframe.parentNode.removeChild(directIframe);
+ }
+ const errorMessage = document.createElement('div');
+ errorMessage.innerHTML = `
+ <div style="text-align: center; padding: 40px;">
+ <h3 style="color: #f56c6c; margin-bottom: 20px;">棰勮澶辫触</h3>
+ <p style="color: #666; margin-bottom: 30px;">鏃犳硶鍦ㄦ祻瑙堝櫒涓瑙圗xcel鏂囦欢锛岃鐐瑰嚮涓嬫柟鎸夐挳涓嬭浇鏂囦欢鍚庢煡鐪嬨��</p>
+ <button onclick="this.parentNode.parentNode.querySelector('.download-btn').click()"
+ style="padding: 8px 20px; background: #409EFF; color: white; border: none; border-radius: 4px; cursor: pointer;">
+ 涓嬭浇Excel鏂囦欢
+ </button>
+ </div>
+ `;
+ previewContainer.appendChild(errorMessage);
+ }, 20000);
+ }, 25000);
+ }
+ },
+
+ /** 澶勭悊鎵撳嵃鎸夐挳鐐瑰嚮 */
+ handlePrintClick() {
+ if (this.currentExcelUrl) {
+ // 鍒涘缓涓�涓复鏃秈frame鐢ㄤ簬鎵撳嵃
+ const iframe = document.createElement('iframe');
+ iframe.style.position = 'absolute';
+ iframe.style.left = '-9999px';
+ iframe.style.top = '-9999px';
+ iframe.style.width = '210mm';
+ iframe.style.height = '297mm';
+ document.body.appendChild(iframe);
+
+ // 鐩戝惉iframe鍔犺浇瀹屾垚
+ iframe.onload = () => {
+ try {
+ // 鎵ц鎵撳嵃
+ iframe.contentWindow.print();
+
+ // 璁剧疆瓒呮椂绉婚櫎iframe
+ setTimeout(() => {
+ if (iframe && iframe.parentNode) {
+ iframe.parentNode.removeChild(iframe);
+ }
+ }, 1000);
+ } catch (error) {
+ console.error('Print error:', error);
+ // 鎵撳嵃澶辫触鏃讹紝鎻愮ず鐢ㄦ埛涓嬭浇
+ this.$confirm('鎵撳嵃澶辫触锛屾槸鍚︿笅杞芥枃浠讹紵', '鎻愮ず', {
+ confirmButtonText: '涓嬭浇',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.handleDownloadClick();
+ });
+
+ // 绉婚櫎iframe
+ if (iframe && iframe.parentNode) {
+ iframe.parentNode.removeChild(iframe);
+ }
+ }
+ };
+
+ // 璁剧疆iframe鐨剆rc
+ iframe.src = this.currentExcelUrl;
+ }
+ },
+
+ /** 澶勭悊涓嬭浇鎸夐挳鐐瑰嚮 */
+ handleDownloadClick() {
+ if (this.currentExcelUrl) {
+ // 鑾峰彇鐢ㄦ埛閫夋嫨鐨勯�夐」
+ const { includeQrCode, selectedAnnotations } = this.excelOptions;
+ console.log('涓嬭浇閫夐」:', { includeQrCode, selectedAnnotations });
+
+ // 鍒涘缓涓嬭浇閾炬帴锛屾枃浠跺悕鍖呭惈閫夐」淇℃伅
+ const link = document.createElement('a');
+ link.href = this.currentExcelUrl;
+
+ // 鏋勫缓鏂囦欢鍚嶏紝鍖呭惈閫夐」淇℃伅
+ let filename = `record_${this.currentExcelId}`;
+ if (includeQrCode) filename += '_qr';
+ if (selectedAnnotations.length > 0) {
+ filename += `_anno${selectedAnnotations.join('')}`;
+ }
+ filename += `_${new Date().getTime()}.xlsx`;
+
+ link.download = filename;
+
+ // 瑙﹀彂涓嬭浇
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+
+ // 鎻愮ず涓嬭浇鎴愬姛
+ this.$modal.msgSuccess('Excel鏂囦欢涓嬭浇鎴愬姛');
+ }
+ },
+
+ /** 妫�鏌ユ祻瑙堝櫒鏄惁鍙兘鏀寔鐩存帴棰勮Excel */
+ canPreviewExcelInBrowser() {
+ // 鐜板湪鎴戜滑浣跨敤寰蒋Office Online鏈嶅姟锛屽鎵�鏈夌幇浠f祻瑙堝櫒閮芥敮鎸侀瑙�
+ return true;
+ },
+
+ /** 澶勭悊Excel棰勮瓒呮椂鎯呭喌 */
+ handleExcelPreviewTimeout(url, iframe) {
+ // 瓒呮椂鍚庯紝鎻愪緵鍦ㄦ柊绐楀彛鎵撳紑鐨勯�夐」
+ this.$confirm('Excel鏂囦欢鍔犺浇瓒呮椂锛屾槸鍚﹀湪鏂扮獥鍙d腑鎵撳紑锛�', '鎻愮ず', {
+ confirmButtonText: '鎵撳紑',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ window.open(url, '_blank');
+ }).finally(() => {
+ // 娓呯悊锛氱Щ闄frame骞堕噴鏀綰RL瀵硅薄
+ this.cleanupExcelPreview(iframe, url);
+ });
+ },
+
+ /** 娓呯悊Excel棰勮鐩稿叧璧勬簮 */
+ cleanupExcelPreview(iframe, url) {
+ setTimeout(() => {
+ if (iframe && iframe.parentNode) {
+ document.body.removeChild(iframe);
+ }
+ if (url) {
+ URL.revokeObjectURL(url);
+ }
+ this.excelRenderError = '';
+ }, 1000);
+ },
+
+ /** 浠庡悗绔幏鍙朎xcel鏂囦欢 */
+ getExcelFile(id) {
+ return new Promise((resolve, reject) => {
+ // 棣栧厛灏濊瘯浣跨敤axios锛堥」鐩凡鏈夌殑HTTP瀹㈡埛绔級
+ try {
+ axios({
+ method: 'Post',
+ url: `${process.env.VUE_APP_BASE_API}/system/records/model`,
+ params: { id: id },
+ responseType: 'blob',
+ headers: { 'Authorization': 'Bearer ' + getToken() }
+ }).then(response => {
+ resolve(response.data);
+ }).catch(error => {
+ // 濡傛灉axios澶辫触锛屽洖閫�鍒癤MLHttpRequest
+ console.warn('Axios璇锋眰澶辫触锛屽皾璇曚娇鐢╔MLHttpRequest:', error);
+ this.fallbackGetExcelFile(id, resolve, reject);
+ });
+ } catch (e) {
+ // 鎹曡幏浠讳綍鎰忓閿欒
+ reject(new Error('鑾峰彇Excel鏂囦欢鏃跺彂鐢熼敊璇�: ' + e.message));
+ }
+ });
+ },
+
+ /** 澶囩敤鐨刋MLHttpRequest鑾峰彇Excel鏂囦欢鏂规硶 */
+ fallbackGetExcelFile(id, resolve, reject) {
+ try {
+ const xhr = new XMLHttpRequest();
+ // 灏濊瘯涓嶅悓鐨凙PI璺緞锛屼互閫傚簲鍙兘鐨勫悗绔疄鐜�
+ const apiUrls = [
+ `${process.env.VUE_APP_BASE_API}/system/records/model?id=${id}`,
+ `${process.env.VUE_APP_BASE_API}/system/records/model`
+ ];
+
+ let currentUrlIndex = 0;
+
+ const tryNextUrl = () => {
+ if (currentUrlIndex >= apiUrls.length) {
+ reject(new Error('鎵�鏈堿PI璺緞閮借姹傚け璐�'));
+ return;
+ }
+
+ const url = apiUrls[currentUrlIndex];
+ currentUrlIndex++;
+
+ xhr.open('GET', url, true);
+ xhr.setRequestHeader('Authorization', 'Bearer ' + getToken());
+ xhr.responseType = 'blob';
+
+ xhr.onload = () => {
+ if (xhr.status === 200) {
+ // 楠岃瘉杩斿洖鐨勬槸鍚︿负鏈夋晥鐨凚lob
+ if (xhr.response instanceof Blob && xhr.response.size > 0) {
+ resolve(xhr.response);
+ } else {
+ console.warn('杩斿洖鐨勬暟鎹笉鏄湁鏁堢殑Blob锛屽皾璇曚笅涓�涓猆RL');
+ tryNextUrl();
+ }
+ } else if (currentUrlIndex < apiUrls.length) {
+ console.warn(`URL ${url} 璇锋眰澶辫触 (${xhr.status})锛屽皾璇曚笅涓�涓猆RL`);
+ tryNextUrl();
+ } else {
+ reject(new Error(`璇锋眰澶辫触: ${xhr.status} ${xhr.statusText}`));
+ }
+ };
+
+ xhr.onerror = () => {
+ if (currentUrlIndex < apiUrls.length) {
+ console.warn(`URL ${url} 缃戠粶閿欒锛屽皾璇曚笅涓�涓猆RL`);
+ tryNextUrl();
+ } else {
+ reject(new Error('缃戠粶閿欒锛屾棤娉曡幏鍙朎xcel鏂囦欢'));
+ }
+ };
+
+ // 璁剧疆璇锋眰瓒呮椂
+ xhr.timeout = 30000; // 30绉�
+ xhr.ontimeout = () => {
+ if (currentUrlIndex < apiUrls.length) {
+ console.warn(`URL ${url} 璇锋眰瓒呮椂锛屽皾璇曚笅涓�涓猆RL`);
+ tryNextUrl();
+ } else {
+ reject(new Error('璇锋眰瓒呮椂锛屾棤娉曡幏鍙朎xcel鏂囦欢'));
+ }
+ };
+
+ xhr.send();
+ };
+
+ // 寮�濮嬪皾璇曠涓�涓猆RL
+ tryNextUrl();
+ } catch (e) {
+ reject(new Error('XMLHttpRequest璇锋眰澶辫触: ' + e.message));
+ }
+ },
+
+ /** 鎵归噺鎵撳嵃Excel鏂囦欢 */
+ batchPrintExcel() {
+ if (this.ids.length === 0) {
+ this.$modal.msgWarning('璇烽�夋嫨瑕佹墦鍗扮殑璁板綍');
+ return;
+ }
+
+ this.$confirm(`纭畾瑕佹墦鍗伴�変腑鐨� ${this.ids.length} 鏉¤褰曞悧锛焋, '鎵归噺鎵撳嵃纭', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ // 瀵逛簬鎵归噺鎿嶄綔锛屾垜浠彲浠ラ�夋嫨锛�
+ // 1. 濡傛灉鍚庣鏀寔鎵归噺瀵煎嚭锛岀洿鎺ヨ皟鐢ㄦ壒閲忓鍑烘帴鍙�
+ this.$modal.loading('姝e湪鍑嗗鎵归噺鎵撳嵃鏂囦欢锛岃绋嶅��...');
+
+ // 灏濊瘯鎵归噺瀵煎嚭API
+ this.getBatchExcelFile(this.ids).then(blob => {
+ this.$modal.closeLoading();
+ this.handleExcelBlobForPrint(blob, 'batch_records');
+ }).catch(error => {
+ this.$modal.closeLoading();
+ console.warn('鎵归噺瀵煎嚭澶辫触锛屽皾璇曢�愪釜澶勭悊:', error);
+
+ // 2. 濡傛灉鎵归噺瀵煎嚭澶辫触锛屾彁绀虹敤鎴烽�愪釜鎵撳嵃鎴栦笅杞�
+ this.$confirm('鎵归噺鎵撳嵃澶辫触锛屾槸鍚︿笅杞芥墍鏈夋枃浠讹紵', '鎻愮ず', {
+ confirmButtonText: '涓嬭浇',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ // 閫愪釜涓嬭浇鏂囦欢
+ this.downloadMultipleExcelFiles(this.ids);
+ }).catch(() => {});
+ });
+ }).catch(() => {});
+ },
+
+ /** 鑾峰彇鎵归噺Excel鏂囦欢 */
+ getBatchExcelFile(ids) {
+ return new Promise((resolve, reject) => {
+ try {
+ if (typeof axios !== 'undefined') {
+ axios({
+ method: 'get',
+ url: `${process.env.VUE_APP_BASE_API}/system/records/batchExport`,
+ params: { ids: ids.join(',') },
+ responseType: 'blob',
+ headers: { 'Authorization': 'Bearer ' + this.getToken() }
+ }).then(response => {
+ resolve(response.data);
+ }).catch(reject);
+ } else {
+ reject(new Error('鎵归噺瀵煎嚭鍔熻兘涓嶅彲鐢�'));
+ }
+ } catch (e) {
+ reject(e);
+ }
+ });
+ },
+
+ /** 澶勭悊Excel Blob鐢ㄤ簬鎵撳嵃 */
+ handleExcelBlobForPrint(blob, prefix = 'record') {
+ const url = URL.createObjectURL(blob);
+
+ if (this.canPreviewExcelInBrowser()) {
+ const iframe = document.createElement('iframe');
+ iframe.style.display = 'none';
+ document.body.appendChild(iframe);
+
+ iframe.src = url;
+
+ const timeoutId = setTimeout(() => {
+ this.handleExcelPreviewTimeout(url, iframe);
+ }, 5000);
+
+ iframe.onload = () => {
+ clearTimeout(timeoutId);
+ this.$confirm('Excel鏂囦欢宸插噯澶囧ソ锛屾槸鍚︽墦鍗帮紵', '鎵撳嵃纭', {
+ confirmButtonText: '鎵撳嵃',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ try {
+ iframe.contentWindow.print();
+ } catch (e) {
+ this.$modal.msgWarning('鎵撳嵃澶辫触锛屽皢鍦ㄦ柊绐楀彛鎵撳紑鏂囦欢');
+ window.open(url, '_blank');
+ } finally {
+ this.cleanupExcelPreview(iframe, url);
+ }
+ }).catch(() => {
+ window.open(url, '_blank');
+ this.cleanupExcelPreview(iframe, url);
+ });
+ };
+ } else {
+ // 鐩存帴涓嬭浇
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = `${prefix}_${new Date().getTime()}.xlsx`;
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ URL.revokeObjectURL(url);
+ }
+ },
+
+ /** 涓嬭浇澶氫釜Excel鏂囦欢 */
+ downloadMultipleExcelFiles(ids) {
+ // 杩欓噷绠�鍗曞鐞嗕负閫愪釜涓嬭浇
+ // 瀹為檯搴旂敤涓彲鑳介渶瑕佽�冭檻鎬ц兘浼樺寲鎴栦娇鐢ㄥ帇缂╁寘
+ ids.forEach((id, index) => {
+ // 浣跨敤setTimeout閬垮厤娴忚鍣ㄩ檺鍒跺悓鏃朵笅杞�
+ setTimeout(() => {
+ this.getExcelFile(id).then(blob => {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = `record_${id}_${new Date().getTime()}.xlsx`;
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ URL.revokeObjectURL(url);
+ });
+ }, index * 1000); // 姣忎釜鏂囦欢闂撮殧1绉掍笅杞�
+ });
+ },
+
+ // /** 鑾峰彇Token鐨勮緟鍔╂柟娉� */
+ // getToken() {
+ // return localStorage.getItem('token') || '';
+ // },
/** 瀵煎叆妯℃澘涓嬭浇鎿嶄綔*/
handleExportTemplate()
{
@@ -1218,7 +1877,7 @@
});
}
-
+
}
@@ -1247,4 +1906,309 @@
::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb:hover {
background: #2f91ec;
}
+
+/* Excel鎿嶄綔寮圭獥鏍峰紡 */
+.excel-dialog-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+}
+
+/* Excel棰勮鍖呰鍣ㄦ牱寮� */
+.excel-preview-wrapper {
+ width: 100%;
+ height: 100%;
+ min-height: 500px;
+ display: flex;
+ flex-direction: column;
+ background: #f9f9f9;
+ border-radius: 8px;
+ padding: 10px;
+ margin-bottom: 20px;
+}
+
+/* Excel閿欒鎻愮ず鏍峰紡 */
+.excel-error-message {
+ background: #fff2f0;
+ border: 1px solid #ffccc7;
+ border-radius: 8px;
+ padding: 20px;
+ margin: 10px 0;
+ color: #f56c6c;
+}
+
+.excel-error-message h3 {
+ margin-top: 0;
+ margin-bottom: 10px;
+ color: #f56c6c;
+ font-size: 16px;
+}
+
+.excel-error-message p {
+ margin: 8px 0;
+ line-height: 1.5;
+}
+
+.excel-error-message ul {
+ text-align: left;
+ margin: 10px 0;
+}
+
+.excel-error-message li {
+ margin: 5px 0;
+ padding-left: 5px;
+}
+
+/* 浼樺寲鎸夐挳鏍峰紡 */
+.excel-dialog-btn.download-btn {
+ background: #67c23a;
+ border-color: #67c23a;
+ color: white;
+ margin-top: 10px;
+}
+
+.excel-dialog-btn.download-btn:hover {
+ background: #85ce61;
+ border-color: #85ce61;
+}
+
+/* 閫夋嫨妗嗗尯鍩熸牱寮� */
+.excel-options-section {
+ background: #f5f7fa;
+ border-radius: 8px;
+ padding: 20px;
+ margin-bottom: 20px;
+}
+
+/* 閫夐」缁勬牱寮� */
+.option-group {
+ margin-bottom: 15px;
+}
+
+.option-group:last-child {
+ margin-bottom: 0;
+}
+
+/* 閫夐」鏍囩鏍峰紡 */
+.option-label {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ color: #303133;
+ cursor: pointer;
+ margin-bottom: 10px;
+}
+
+/* 澶嶉�夋鏍峰紡 */
+.option-label input[type="checkbox"] {
+ width: 16px;
+ height: 16px;
+ margin-right: 8px;
+ cursor: pointer;
+}
+
+/* 娉ㄨВ閫夐」瀹瑰櫒 */
+.annotation-options {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 15px;
+ margin-top: 10px;
+}
+
+/* 娉ㄨВ澶嶉�夋鏍峰紡 */
+.annotation-checkbox {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ color: #303133;
+ cursor: pointer;
+ background: white;
+ padding: 8px 12px;
+ border-radius: 4px;
+ border: 1px solid #dcdfe6;
+ transition: all 0.3s;
+}
+
+.annotation-checkbox:hover {
+ border-color: #c0c4cc;
+ background: #fafafa;
+}
+
+.annotation-checkbox input[type="checkbox"] {
+ width: 14px;
+ height: 14px;
+ margin-right: 6px;
+ cursor: pointer;
+}
+.excel-dialog {
+ background-color: white;
+ border-radius: 8px;
+ width: 96%;
+ max-width: 900px;
+ max-height: 100vh;
+ overflow: hidden;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
+ animation: slideUp 0.3s ease;
+ display: flex;
+ flex-direction: column;
+}
+
+.excel-dialog-header {
+ padding: 20px 24px;
+ border-bottom: 1px solid #e9ecef;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background-color: #f8f9fa;
+}
+
+.excel-dialog-header h3 {
+ margin: 0;
+ font-size: 18px;
+ font-weight: 600;
+ color: #333;
+}
+
+.excel-dialog-close {
+ background: none;
+ border: none;
+ font-size: 24px;
+ cursor: pointer;
+ color: #666;
+ width: 32px;
+ height: 32px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 4px;
+ transition: all 0.2s;
+}
+
+.excel-dialog-close:hover {
+ background-color: #e9ecef;
+ color: #333;
+}
+
+.excel-dialog-body {
+ padding: 24px;
+ flex: 1;
+ overflow-y: auto;
+}
+
+.excel-preview-container {
+ width: 100%;
+ height: 400px;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ margin-bottom: 16px;
+ position: relative;
+ background-color: #f8f9fa;
+ overflow: hidden;
+}
+
+.loading-indicator {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ background-color: rgba(255, 255, 255, 0.9);
+ color: #666;
+ z-index: 10;
+}
+
+.loading-spinner {
+ width: 40px;
+ height: 40px;
+ border: 3px solid #f3f3f3;
+ border-top: 3px solid #2f91ec;
+ border-radius: 50%;
+ animation: spin 1s linear infinite;
+ margin-bottom: 10px;
+}
+
+.excel-dialog-tip {
+ margin: 0;
+ color: #666;
+ text-align: center;
+ font-size: 14px;
+}
+
+.excel-dialog-footer {
+ padding: 16px 24px;
+ border-top: 1px solid #e9ecef;
+ display: flex;
+ justify-content: center;
+ gap: 16px;
+ background-color: #f8f9fa;
+}
+
+.excel-dialog-btn {
+ padding: 10px 24px;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 14px;
+ font-weight: 500;
+ transition: all 0.2s;
+ min-width: 100px;
+}
+
+.preview-btn {
+ background-color: #2f91ec;
+ color: white;
+}
+
+.preview-btn:hover {
+ background-color: #1c7ed6;
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px rgba(47, 145, 236, 0.3);
+}
+
+.print-btn {
+ background-color: #20c997;
+ color: white;
+}
+
+.print-btn:hover {
+ background-color: #17a589;
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px rgba(32, 201, 151, 0.3);
+}
+
+.download-btn {
+ background-color: #6c757d;
+ color: white;
+}
+
+.download-btn:hover {
+ background-color: #5a6268;
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px rgba(108, 117, 125, 0.3);
+}
+
+@keyframes fadeIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+@keyframes slideUp {
+ from {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
</style>
diff --git a/src/views/archiveManager/seleUser.vue b/src/views/archiveManager/seleUser.vue
index 1c61ea5..0b313c2 100644
--- a/src/views/archiveManager/seleUser.vue
+++ b/src/views/archiveManager/seleUser.vue
@@ -111,7 +111,7 @@
}
this.queryParams.roleId = this.roleId
this.queryParams.archiveRecordsId = this.archiveRecordsId
-
+
this.getList()
this.visible = true
},
@@ -146,15 +146,15 @@
handleSelectUser() {
const archiveRecordsId = this.queryParams.archiveRecordsId
const userIds = this.userIds.join(",")
-
+
if (userIds == "") {
this.$modal.msgError("璇烽�夋嫨瑕佸垎閰嶇殑鐢ㄦ埛")
return
}
-
+
// 鍒涘缓杞崲鍚庣殑鍙傛暟锛岀‘淇漴ecordId鏄暟瀛楃被鍨�
const convertedRecordId = !isNaN(Number(archiveRecordsId)) ? Number(archiveRecordsId) : 0
-
+
authRecordToUser({ recordId: convertedRecordId, userIds: userIds }).then(res => {
if(res.code === 200) {
this.$modal.msgSuccess(res.msg)
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 2bde078..7b4e627 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -99,8 +99,8 @@
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
- <el-form-item label="鐢ㄦ埛鏄电О" prop="nickName">
- <el-input v-model="form.nickName" placeholder="璇疯緭鍏ョ敤鎴锋樀绉�" maxlength="30" />
+ <el-form-item label="鐢ㄦ埛濮撳悕" prop="userName">
+ <el-input v-model="form.userName" placeholder="璇疯緭鍏ョ敤鎴峰鍚�" maxlength="30" />
</el-form-item>
</el-col>
@@ -165,7 +165,7 @@
</el-select>
</el-form-item>
</el-col> -->
-
+
</el-row>
<el-row>
<el-col :span="24">
@@ -490,6 +490,8 @@
},
/** 鎻愪氦鎸夐挳 */
submitForm: function() {
+ console.log(this.form)
+ console.log("---------")
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.userId != undefined) {
diff --git a/src/views/system/user/profile/userInfo.vue b/src/views/system/user/profile/userInfo.vue
index ad41eb8..3cc41ad 100644
--- a/src/views/system/user/profile/userInfo.vue
+++ b/src/views/system/user/profile/userInfo.vue
@@ -1,8 +1,8 @@
<template>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
- <el-form-item label="鐢ㄦ埛鍚嶇О" prop="nickName">
+ <el-form-item label="鐢ㄦ埛鏄电О" prop="nickName">
<el-input v-model="form.nickName" maxlength="30" />
- </el-form-item>
+ </el-form-item>
<el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
<el-input v-model="form.phonenumber" maxlength="11" />
</el-form-item>
@@ -40,7 +40,7 @@
{ required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" }
],
email: [
- { required: true, message: "閭鍦板潃涓嶈兘涓虹┖", trigger: "blur" },
+ // { required: true, message: "閭鍦板潃涓嶈兘涓虹┖", trigger: "blur" },
{
type: "email",
message: "璇疯緭鍏ユ纭殑閭鍦板潃",
@@ -48,7 +48,7 @@
}
],
phonenumber: [
- { required: true, message: "鎵嬫満鍙风爜涓嶈兘涓虹┖", trigger: "blur" },
+ // { required: true, message: "鎵嬫満鍙风爜涓嶈兘涓虹┖", trigger: "blur" },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
--
Gitblit v1.9.1