From 169da067d43ed3cc1408d9c6f46c69d33e91a70d Mon Sep 17 00:00:00 2001
From: lzhe <lzhe@example.com>
Date: 星期日, 29 九月 2024 17:42:18 +0800
Subject: [PATCH] 1
---
src/views/dnc/document/index.vue | 246 +++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 216 insertions(+), 30 deletions(-)
diff --git a/src/views/dnc/document/index.vue b/src/views/dnc/document/index.vue
index 61033c6..e94c58c 100644
--- a/src/views/dnc/document/index.vue
+++ b/src/views/dnc/document/index.vue
@@ -1,7 +1,7 @@
<!--
* @Date: 2024-05-16 22:40:01
* @LastEditors: Sneed
- * @LastEditTime: 2024-05-19 19:52:38
+ * @LastEditTime: 2024-06-22 18:08:04
* @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/dnc/document/index.vue
-->
<template>
@@ -11,9 +11,10 @@
<el-aside width="200px">
<el-container>
<el-main>
- <el-tree default-expand-all ref="tree" node-key="id" :data="treeData" :props="{
- label: 'name',
- }" @node-click="nodeClick" highlight-current :current-node-key="selectNode.id">
+ <el-tree :expand-on-click-node="false" default-expand-all ref="tree" node-key="id"
+ :data="treeData" :props="{
+ label: 'name',
+ }" @node-click="nodeClick" highlight-current :current-node-key="selectNode.id">
<template #default="{ node, data }">
<span :class="data.isGroup ? 'active' : ''" class="custom-tree-node">
<span>{{
@@ -37,19 +38,27 @@
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="addFolder">鏂囦欢澶�</el-dropdown-item>
- <el-dropdown-item>鏂囦欢</el-dropdown-item>
+ <el-dropdown-item @click="addFile">鏂囦欢</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
- <el-button type="primary" style="margin-left: 8px;">涓婁紶鏂囦欢</el-button>
+ <!-- <el-upload style="margin-left: 8px;" :show-file-list="false" class="upload"
+ action="/api/blade-resource/oss/endpoint/put-file">
+ <el-button type="primary">涓婁紶鏂囦欢</el-button>
+ </el-upload> -->
+ <el-upload style="margin-left: 8px;" :show-file-list="false" class="upload"
+ :http-request="request">
+ <el-button type="primary">涓婁紶鏂囦欢</el-button>
+ </el-upload>
+ <!-- <el-button type="primary" style="margin-left: 8px;">涓婁紶鏂囦欢</el-button> -->
<el-dropdown style="margin-left: 8px;" :disabled="selection.length == 0">
<el-button type="primary">
鏇村鎿嶄綔<el-icon class="el-icon--right"><el-icon-arrow-down /></el-icon>
</el-button>
<template #dropdown>
<el-dropdown-menu>
- <el-dropdown-item @click="copy">澶嶅埗</el-dropdown-item>
- <el-dropdown-item @click="move">绉诲姩</el-dropdown-item>
+ <el-dropdown-item @click="action(1)">澶嶅埗</el-dropdown-item>
+ <el-dropdown-item @click="action(2)">绉诲姩</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
@@ -84,9 +93,14 @@
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="鏂囦欢鍚嶇О" prop="name">
<template #default="scope">
+ <el-icon style="margin-right: 4px;">
+ <el-icon-folder v-if="scope.row.fileType === 1" />
+ <el-icon-document v-else />
+ </el-icon>
<a v-if="scope.row.fileType === 1" @click="goCurrent(scope.row)"
style="color: var(--el-color-primary);cursor: pointer;">{{ scope.row.name }}</a>
- <span v-else>{{ scope.row.name }}</span>
+ <a v-else @click="viewHis(scope.row)"
+ style="color: var(--el-color-primary);cursor: pointer;">{{ scope.row.name }}</a>
</template>
</el-table-column>
<el-table-column label="鏂囦欢璺緞" prop="allPathName"></el-table-column>
@@ -97,9 +111,14 @@
<template #default="scope">
<el-button-group>
<el-button text type="primary" size="small"
- @click="table_edit(scope.row, scope.$index)">缂栬緫</el-button>
- <el-button text type="primary" size="small"
- @click="del([scope, row])">鍒犻櫎</el-button>
+ @click="table_edit(scope.row, scope.$index)">閲嶅懡鍚�</el-button>
+ <el-popconfirm width="220" title="纭畾灏嗛�夋嫨鐨勬暟鎹垹闄�" @confirm="del([scope.row], '0')">
+ <template #reference>
+ <el-button text type="primary" size="small">鍒犻櫎</el-button>
+ </template>
+ </el-popconfirm>
+ <!-- <el-button text type="primary" size="small"
+ @click="del([scope.row])">鍒犻櫎</el-button> -->
</el-button-group>
</template>
</el-table-column>
@@ -108,9 +127,12 @@
</el-container>
</el-container>
</el-card>
- <el-dialog v-model="visible" title="鏂板缓鏂囦欢澶�" width="500">
+ <el-dialog v-model="visible" :title="form.id ? '閲嶅懡鍚�' : '鏂板缓鏂囦欢澶�'" width="500">
<el-form :model="form" :rules="rules" ref="dialogForm" label-width="120px" label-position="center">
- <el-form-item label="鏂囦欢澶瑰悕绉�" prop="name">
+ <el-form-item v-if="form.fileType == 1 || !form.id" label="鏂囦欢澶瑰悕绉�" prop="name">
+ <el-input v-model="form.name" />
+ </el-form-item>
+ <el-form-item v-else label="鏂囦欢鍚嶇О" prop="name">
<el-input v-model="form.name" />
</el-form-item>
</el-form>
@@ -122,6 +144,26 @@
</div>
</template>
</el-dialog>
+ <el-dialog v-model="visibleFile" title="鏂板缓鏂囦欢澶�" width="500">
+ <el-form :model="formFile" :rules="rulesFile" ref="dialogForm" label-width="120px" label-position="center">
+ <el-form-item label="鏂囦欢浣嶇疆" prop="id">
+ <el-tree-select v-model="formFile.id" :props="{
+ label: 'name',
+ }" :data="treeData" filter style="width: 240px" @node-click="clickNode" node-key="id" />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button type="primary" @click="saveFile">
+ 纭畾
+ </el-button>
+ </div>
+ </template>
+ </el-dialog>
+ <scDialog v-model="visible1">
+ <scForm ref="form" :config="config" :rules="rules1" v-model="form1" @submit="submit1">
+ </scForm>
+ </scDialog>
</el-main>
</template>
@@ -129,9 +171,44 @@
export default {
data() {
return {
+ visible: false,
+ rules1: {
+ name: [{
+ required: true, message: '蹇呭~'
+ }],
+ content: [{
+ required: true, message: '蹇呭~'
+ }]
+ },
+ form1: {},
+ config: {
+ labelWidth: 120,
+ formItems: [
+ {
+ component: 'input',
+ label: '鏂囦欢鍚嶇О',
+ name: 'name',
+ options: {
+ placeholder: '',
+ maxlength: 100,
+ }
+ },
+ {
+ component: 'input',
+ label: '鏂囦欢鍐呭',
+ type: 'textarea',
+ name: 'content',
+ options: {
+ multiple: false,
+ data: []
+ },
+ disabled: false
+ }
+ ]
+ },
treeData: [],
selectNode: {},
- visible: false,
+ visible1: false,
form: {},
rules: {
name: [{
@@ -154,7 +231,14 @@
}
},
selection: [],
- type: 'list'
+ type: 'list',
+ visibleFile: false,
+ formFile: {},
+ rulesFile: {
+ id: [{
+ required: true, message: '蹇呭~'
+ }]
+ }
}
},
watch: {
@@ -166,7 +250,80 @@
this.init()
},
methods: {
+ request(options) {
+ const formData = new FormData()
+ formData.append('file', options.file)
+ console.log(options)
+ this.$HTTP.post(`/api/blade-resource/oss/endpoint/put-file`, formData).then(resFile => {
+ if (resFile.success) {
+ this.$HTTP.post(`/api/blade-dnc/file/batch-save`, [{
+ name: options.file.name,
+ targetId: this.selectNode.id,
+ ossFile: {
+ attachId: resFile.data.attachId,
+ domain: resFile.data.domain,
+ link: resFile.data.link,
+ name: resFile.data.name,
+ originalName: resFile.data.originalName
+ }
+ }]).then(res => {
+ if (res.success) {
+ this.visible = false
+ this.search()
+ } else {
+ this.$message.error(res.msg)
+ }
+ })
+ } else {
+ this.$message.error(res.msg)
+ }
+
+ })
+ },
+ addFile() {
+ this.form1 = {}
+ this.$refs?.form?.resetFields()
+ this.visible1 = true
+ },
+ submit1() {
+ // 鍒涘缓鏂囨湰鍐呭
+ const textContent = "杩欓噷鏄枃鏈唴瀹�";
+
+ // 鍒涘缓Blob瀵硅薄
+ const blob = new Blob([this.form1.content], { type: 'text/plain' });
+ // 鍒涘缓File瀵硅薄
+ const file = new File([blob], this.form1.name, { type: 'text/plain', lastModified: new Date().getTime() });
+ const data = new FormData()
+ data.append("file", file);
+ this.$HTTP.post(`/api/blade-resource/oss/endpoint/put-file`, data).then(res => {
+ if (res.success) {
+ this.$HTTP.post(`/api/blade-dnc/file/batch-save`, [{
+ name: `${this.form1.name}.txt`,
+ targetId: this.selectNode.id,
+ ossFile: {
+ attachId: res.data.attachId,
+ domain: res.data.domain,
+ link: res.data.link,
+ name: res.data.name,
+ originalName: res.data.originalName
+ }
+ }]).then(res => {
+ if (res.success) {
+ this.visible1 = false
+ this.search()
+ } else {
+ this.$message.error(res.msg)
+ }
+ })
+ } else {
+ this.$message.error(res.msg)
+ }
+ })
+ },
init() {
+ this.selectNode = {
+ id: ''
+ }
this.$HTTP.get(`/api/blade-dnc/folder/folder-tree`).then(res => {
this.treeData = [{
group: true,
@@ -188,21 +345,26 @@
this.selectNode = { id: row.id }
console.log(row)
},
+ viewHis(row) {
+ window.open(row.link)
+ // this.$HTTP.get(`/api/blade-dnc/file/history?name=${row.name}&pid=${row.parentId}`)
+ },
back() {
console.log(this.$refs.tree.getCurrentNode())
this.selectNode = { id: this.$refs.tree.getCurrentNode().parentId }
},
search() {
- this.$refs?.table.reload()
+ this.$refs?.table?.reload()
},
// 鏂板鏂囦欢澶�
addFolder() {
this.visible = true
- this.form = { isNewFile: false }
+ this.form = { fileType: 1 }
},
saveFolder() {
if (this.form.id) {
return this.$HTTP.put(`/api/blade-dnc/file/${this.form.id}/rename`, { fileType: this.form.fileType, newName: this.form.name, parentId: this.form.parentId }).then(res => {
+ this.visible = false
this.search()
})
}
@@ -211,25 +373,41 @@
parent: this.selectNode.id
}
try {
- Reflect.deleteProperty(data, 'isNewFile')
+ Reflect.deleteProperty(data, 'fileType')
} catch (error) {
}
this.$HTTP.post(`/api/blade-dnc/folder`, data).then(res => {
+ this.visible = false
this.init()
})
},
selectionChange(selection) {
this.selection = selection
},
- action() {
-
+ action(type) {
+ this.visibleFile = true
+ this.formFile.move = type
+ },
+ clickNode(node) {
+ this.formFile.id = node.id
+ },
+ saveFile() {
+ if (this.formFile.move === 1) {
+ this.copy()
+ } else {
+ this.move()
+ }
},
copy() {
- this.$HTTP.post(`/api/blade-dnc/file/copy`, { parentId: this.formFile.parentId, sourceIdList: this.selection.map(v => v.id) })
+ this.$HTTP.post(`/api/blade-dnc/file/copy`, { parentId: this.formFile.id, sourceIdList: this.selection.map(v => v.id) }).then(res => {
+ this.visibleFile = false
+ })
},
move() {
- this.$HTTP.post(`/api/blade-dnc/file/move`, { parentId: this.formFile.parentId, sourceIdList: this.selection.map(v => v.id) })
+ this.$HTTP.put(`/api/blade-dnc/file/move`, { parentId: this.formFile.id, sourceIdList: this.selection.map(v => v.id) }).then(res => {
+ this.visibleFile = false
+ })
},
table_edit(row) {
this.form = {
@@ -241,13 +419,18 @@
this.visible = true
},
async del(selection) {
- let confirm = await this.$HTTP.post(`/api/blade-dnc/file/exists-file`).then(res => {
- if (res.data) {
- return res.data
- }
- })
+ let sourceIdList = selection.filter(v => v.fileType === 1).map(v => v.id)
+ let tip = false
let delFlag = true
- if (confirm) {
+ if (sourceIdList.length > 0) {
+ tip = await this.$HTTP.post(`/api/blade-dnc/file/exists-file`, { sourceIdList }).then(res => {
+ if (res.data) {
+ return res.data
+ }
+ })
+ }
+
+ if (tip) {
delFlag = await this.$confirm(`姝ゆ搷浣滀細灏嗗綋鍓嶆枃浠跺す涓嬬殑鎵�鏈夋枃浠跺垹闄わ紝鏄惁缁х画??`, '鎻愮ず', {
type: 'warning',
}).then(() => {
@@ -256,10 +439,13 @@
return false
})
}
+ console.log(delFlag, '>>>>>')
if (!delFlag) {
return
}
- this.$HTTP.post(`/api/blade-dnc/file`, { sourceIdList: this.selection.map(v => v.id) }).then(res => {
+ console.log('------')
+ // return
+ this.$HTTP.delete(`/api/blade-dnc/file`, { sourceIdList: selection.map(v => v.id) }).then(res => {
this.init()
})
}
--
Gitblit v1.9.3