|
@@ -1,58 +1,40 @@
|
|
|
<template>
|
|
<template>
|
|
|
-
|
|
|
|
|
- <!-- <section class="xiaoshuhuitu-sections">
|
|
|
|
|
- <div v-for="(item, key) in data" :key="key" :style="{ background: item.background }">
|
|
|
|
|
- <img :src="getAssetURL(item.img)" />
|
|
|
|
|
- <div :style="{ color: item.color }">
|
|
|
|
|
- {{ item.title }}
|
|
|
|
|
- <span>{{ item.content }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </section> -->
|
|
|
|
|
-
|
|
|
|
|
<footer class="picture-upload-footer">
|
|
<footer class="picture-upload-footer">
|
|
|
- <a-popover :popup-visible="showUpload" position="tl" @popup-visible-change="() => {
|
|
|
|
|
- showDeleteTooltip = false;
|
|
|
|
|
- }">
|
|
|
|
|
|
|
+ <a-popover :popup-visible="showUpload" position="tl" @popup-visible-change="handlePopupChange">
|
|
|
<div class="text-hide">
|
|
<div class="text-hide">
|
|
|
- <div class="upload-img-container" @click="() => {
|
|
|
|
|
- showUpload = true;
|
|
|
|
|
- }
|
|
|
|
|
- ">
|
|
|
|
|
|
|
+ <div class="upload-img-container" @click="handleUploadClick">
|
|
|
<img src="@/assets/document/6.svg" class="img-normal" v-if="!showUpload" />
|
|
<img src="@/assets/document/6.svg" class="img-normal" v-if="!showUpload" />
|
|
|
<img src="@/assets/document/7.svg" class="img-hover" v-if="!showUpload" />
|
|
<img src="@/assets/document/7.svg" class="img-hover" v-if="!showUpload" />
|
|
|
<img src="@/assets/document/8.svg" class="img-active" v-if="showUpload" />
|
|
<img src="@/assets/document/8.svg" class="img-active" v-if="showUpload" />
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <p>已选择 {{ fileList.length }} 个图片</p>
|
|
|
|
|
|
|
+ <p>{{ file_status_label_tips }}</p>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<template #content>
|
|
<template #content>
|
|
|
<div :class="{ 'upload-wrap': true, 'upload-wrap-narrow': uploadFile }">
|
|
<div :class="{ 'upload-wrap': true, 'upload-wrap-narrow': uploadFile }">
|
|
|
<header>
|
|
<header>
|
|
|
<p>{{ uploadFile ? "上传图片" : "上传图片" }}</p>
|
|
<p>{{ uploadFile ? "上传图片" : "上传图片" }}</p>
|
|
|
- <div @click="() => {
|
|
|
|
|
- showUpload = false;
|
|
|
|
|
- }
|
|
|
|
|
- ">
|
|
|
|
|
|
|
+
|
|
|
|
|
+ <div @click="handleUploadClose">
|
|
|
<icon-close size="large" />
|
|
<icon-close size="large" />
|
|
|
</div>
|
|
</div>
|
|
|
</header>
|
|
</header>
|
|
|
|
|
|
|
|
<div class="xiaoshuhuitu-image-upload">
|
|
<div class="xiaoshuhuitu-image-upload">
|
|
|
- <section>
|
|
|
|
|
|
|
+ <section v-if="tableData.length === 0">
|
|
|
<a-upload
|
|
<a-upload
|
|
|
- draggable
|
|
|
|
|
|
|
+ :draggable="true"
|
|
|
list-type="picture"
|
|
list-type="picture"
|
|
|
:multiple="false"
|
|
:multiple="false"
|
|
|
:limit="1"
|
|
:limit="1"
|
|
|
:show-file-list="false"
|
|
:show-file-list="false"
|
|
|
- @before-upload="onBeforeUpload"
|
|
|
|
|
- @exceed-limit="onExceedLimit"
|
|
|
|
|
- @before-remove="onBeforeRemove"
|
|
|
|
|
:custom-request="customRequest"
|
|
:custom-request="customRequest"
|
|
|
:show-upload-button="{ showOnExceedLimit: false }"
|
|
:show-upload-button="{ showOnExceedLimit: false }"
|
|
|
accept=".png,.jpg"
|
|
accept=".png,.jpg"
|
|
|
|
|
+ @before-upload="onBeforeUpload"
|
|
|
|
|
+ @exceed-limit="onExceedLimit"
|
|
|
|
|
+ @before-remove="onBeforeRemove"
|
|
|
>
|
|
>
|
|
|
<template #upload-button>
|
|
<template #upload-button>
|
|
|
<div class="upload-main">
|
|
<div class="upload-main">
|
|
@@ -65,57 +47,45 @@
|
|
|
</a-upload>
|
|
</a-upload>
|
|
|
</section>
|
|
</section>
|
|
|
|
|
|
|
|
- <div v-if="tableData.length > 0">
|
|
|
|
|
|
|
+ <!-- <div v-if="tableData.length > 0">
|
|
|
<p>
|
|
<p>
|
|
|
<span>已选择图片列表</span>
|
|
<span>已选择图片列表</span>
|
|
|
<span>共{{ tableData.length }}个</span>
|
|
<span>共{{ tableData.length }}个</span>
|
|
|
</p>
|
|
</p>
|
|
|
<div>
|
|
<div>
|
|
|
- <a-table :pagination="false" row-key="name" :columns="columns" :data="tableData"
|
|
|
|
|
- :row-selection="rowSelection" v-model:selectedKeys="selectedKeys">
|
|
|
|
|
|
|
+ <a-table
|
|
|
|
|
+ :pagination="false"
|
|
|
|
|
+ row-key="name"
|
|
|
|
|
+ :columns="columns"
|
|
|
|
|
+ :data="tableData"
|
|
|
|
|
+ v-model:selectedKeys="selectedKeys"
|
|
|
|
|
+ >
|
|
|
<template #methods="{ record }">
|
|
<template #methods="{ record }">
|
|
|
- <a-tooltip content="下载">
|
|
|
|
|
- <div class="method-button" @click="downloadDocument(record)">
|
|
|
|
|
- <icon-cloud-download />
|
|
|
|
|
- </div>
|
|
|
|
|
- </a-tooltip>
|
|
|
|
|
- <a-popover :popup-visible="showDeleteTooltip && deleteId === record.key">
|
|
|
|
|
- <a-tooltip content="删除">
|
|
|
|
|
- <div class="method-button" @click="handleDeleteButton(record.key)">
|
|
|
|
|
- <icon-delete />
|
|
|
|
|
- </div>
|
|
|
|
|
- </a-tooltip>
|
|
|
|
|
- <template #content>
|
|
|
|
|
- <div>
|
|
|
|
|
- <p>删除后无法恢复,您是否删除?</p>
|
|
|
|
|
- <div class="delete-buttons">
|
|
|
|
|
- <div>
|
|
|
|
|
- <a-button size="mini" type="primary" style="margin-right: 10px"
|
|
|
|
|
- @click="deleteDocument">确认</a-button>
|
|
|
|
|
- <a-button size="mini" type="outline" @click="() => {
|
|
|
|
|
- showDeleteTooltip = false;
|
|
|
|
|
- }
|
|
|
|
|
- ">取消</a-button>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </template>
|
|
|
|
|
- </a-popover>
|
|
|
|
|
|
|
+ <BtnImgDownload @download="downloadDocument(record)"/>
|
|
|
|
|
+ <BtnImgDelete @delete="deleteDocument"/>
|
|
|
</template>
|
|
</template>
|
|
|
</a-table>
|
|
</a-table>
|
|
|
</div>
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
|
|
+ </div> -->
|
|
|
|
|
+
|
|
|
|
|
+ <FileListTable
|
|
|
|
|
+ v-if="tableData.length > 0"
|
|
|
|
|
+ :tableData="tableData"
|
|
|
|
|
+ :columns="columns"
|
|
|
|
|
+ :selectedKeys="selectedKeys"
|
|
|
|
|
+ @download="downloadDocument"
|
|
|
|
|
+ @delete="deleteDocument"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="bottom-buttons">
|
|
<div class="bottom-buttons">
|
|
|
<div>
|
|
<div>
|
|
|
- <a-button type="outline" style="margin-right: 10px" @click="selectFiles(false)">取消</a-button>
|
|
|
|
|
- <a-button :loading="buttonLoading" type="primary" @click="selectFiles(true, 'paper')">去{{
|
|
|
|
|
- uploadFile ? '提问'
|
|
|
|
|
- : '提问'
|
|
|
|
|
- }}({{ fileList.length
|
|
|
|
|
- }})</a-button>
|
|
|
|
|
|
|
+ <a-button type="outline" style="margin-right: 10px" @click="handleUploadClose">取消</a-button>
|
|
|
|
|
+
|
|
|
|
|
+ <a-button :loading="buttonLoading" type="primary" @click="selectFiles(true, 'paper')">
|
|
|
|
|
+ 去{{ uploadFile ? '提问' : '提问' }} ({{ fileList.length}})
|
|
|
|
|
+ </a-button>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
@@ -127,7 +97,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
<script>
|
|
<script>
|
|
|
import dayjs from "dayjs";
|
|
import dayjs from "dayjs";
|
|
|
-import { defineComponent, ref, inject, reactive } from "vue";
|
|
|
|
|
|
|
+import { defineComponent, ref, inject, reactive, onBeforeUnmount, computed } from "vue";
|
|
|
|
|
|
|
|
import { Message } from '@arco-design/web-vue';
|
|
import { Message } from '@arco-design/web-vue';
|
|
|
|
|
|
|
@@ -135,20 +105,34 @@ import BtnIframeComfyui from './btn-iframe-comfyui/BtnIframeComfyui.vue';
|
|
|
|
|
|
|
|
import ImgEditBtn from './image-editor/ImgEditBtn.vue';
|
|
import ImgEditBtn from './image-editor/ImgEditBtn.vue';
|
|
|
|
|
|
|
|
|
|
+import BtnImgDownload from './picture-upload/BtnImgDownload.vue';
|
|
|
|
|
+import BtnImgDelete from './picture-upload/BtnImgDelete.vue';
|
|
|
|
|
+
|
|
|
|
|
+import FileListTable from './picture-upload/FileListTable.vue';
|
|
|
|
|
+
|
|
|
import {huituSetTempImageFile} from './dialog-wrap/temp-image'
|
|
import {huituSetTempImageFile} from './dialog-wrap/temp-image'
|
|
|
|
|
|
|
|
|
|
+import {useImageUploadStatus} from '../store/modules/xs-huitu-image-upload/index';
|
|
|
|
|
+
|
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
|
props: ["data", "uploadFile", "isQuestion", "agentId", "agengtName"],
|
|
props: ["data", "uploadFile", "isQuestion", "agentId", "agengtName"],
|
|
|
components: {
|
|
components: {
|
|
|
|
|
+ BtnImgDownload,
|
|
|
|
|
+ BtnImgDelete,
|
|
|
|
|
+ FileListTable,
|
|
|
|
|
+
|
|
|
BtnIframeComfyui,
|
|
BtnIframeComfyui,
|
|
|
|
|
|
|
|
ImgEditBtn
|
|
ImgEditBtn
|
|
|
},
|
|
},
|
|
|
setup(props) {
|
|
setup(props) {
|
|
|
- const showUpload = ref(false);
|
|
|
|
|
const { helper, ajax } = inject("$global");
|
|
const { helper, ajax } = inject("$global");
|
|
|
|
|
|
|
|
|
|
+ const imageUploadStatus = useImageUploadStatus();
|
|
|
|
|
+
|
|
|
const maxSize = 30 * 1024 * 1024;
|
|
const maxSize = 30 * 1024 * 1024;
|
|
|
|
|
+
|
|
|
|
|
+ const showUpload = ref(false);
|
|
|
let fileList = ref([]);
|
|
let fileList = ref([]);
|
|
|
const tableData = reactive([]);
|
|
const tableData = reactive([]);
|
|
|
let formData = new FormData();
|
|
let formData = new FormData();
|
|
@@ -156,6 +140,42 @@ export default defineComponent({
|
|
|
const showDeleteTooltip = ref(false);
|
|
const showDeleteTooltip = ref(false);
|
|
|
const deleteId = ref("");
|
|
const deleteId = ref("");
|
|
|
const buttonLoading = ref(false);
|
|
const buttonLoading = ref(false);
|
|
|
|
|
+
|
|
|
|
|
+ const file_status_label_tips = computed(() => {
|
|
|
|
|
+ const can_upload = imageUploadStatus.canUploadContinue;
|
|
|
|
|
+
|
|
|
|
|
+ if(!can_upload){
|
|
|
|
|
+ // 不允许上传
|
|
|
|
|
+ return `已保存 1 个图片`
|
|
|
|
|
+ }else{
|
|
|
|
|
+ return `已选择 ${fileList.value.length} 个图片`
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ const handlePopupChange = () => {
|
|
|
|
|
+ showDeleteTooltip.value = false;
|
|
|
|
|
+ };
|
|
|
|
|
+ const handleUploadClick = () => {
|
|
|
|
|
+ // 检查上一次传图后有没有发布文字,如果没有发布文字,则不允许再次上传图片
|
|
|
|
|
+ const can_upload = imageUploadStatus.canUploadContinue;
|
|
|
|
|
+ if(can_upload){
|
|
|
|
|
+ // console.log('允许继续上传图片', can_upload);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ Message.warning('图片已保存,请输入文字进行提问');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ showUpload.value = true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const handleUploadClose = () => {
|
|
|
|
|
+ showUpload.value = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ const handleCancelDelete = () => {
|
|
|
|
|
+ showDeleteTooltip.value = false;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
const selectFiles = async (isSelect, type) => {
|
|
const selectFiles = async (isSelect, type) => {
|
|
|
if (isSelect) {
|
|
if (isSelect) {
|
|
|
if (props.uploadFile) {
|
|
if (props.uploadFile) {
|
|
@@ -202,6 +222,10 @@ export default defineComponent({
|
|
|
helper.write('sendData', sendData);
|
|
helper.write('sendData', sendData);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ // 图片上传的状态
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
let temp_file = null;
|
|
let temp_file = null;
|
|
|
fileList.value.forEach(file => {
|
|
fileList.value.forEach(file => {
|
|
|
formData.append('file', file)
|
|
formData.append('file', file)
|
|
@@ -220,6 +244,7 @@ export default defineComponent({
|
|
|
* 此方案在用户刷新页面后就会失效
|
|
* 此方案在用户刷新页面后就会失效
|
|
|
*/
|
|
*/
|
|
|
huituSetTempImageFile(temp_file, props.agentId, data.chat_id);
|
|
huituSetTempImageFile(temp_file, props.agentId, data.chat_id);
|
|
|
|
|
+ imageUploadStatus.uploadFinish(); // 记录图片的数据
|
|
|
|
|
|
|
|
// 保存小数绘图数据
|
|
// 保存小数绘图数据
|
|
|
helper.write('sendData', {
|
|
helper.write('sendData', {
|
|
@@ -240,25 +265,11 @@ export default defineComponent({
|
|
|
Message.info('图片已保存,请输入文字进行提问');
|
|
Message.info('图片已保存,请输入文字进行提问');
|
|
|
|
|
|
|
|
// 文件清空
|
|
// 文件清空
|
|
|
|
|
+ tableData.length = 0;
|
|
|
fileList.value = [];
|
|
fileList.value = [];
|
|
|
-
|
|
|
|
|
- // created_at: 1732531229
|
|
|
|
|
- // created_by: "069e660f-ffc1-4b02-bfed-0cfef46c928d"
|
|
|
|
|
- // extension: "png"
|
|
|
|
|
- // id: "0e15a523-d029-4ffd-b0b4-3ca4a99f65a4"
|
|
|
|
|
- // mime_type: "image/png"
|
|
|
|
|
- // name: "下载.png"
|
|
|
|
|
- // size: 67593
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- {
|
|
|
|
|
- "message":"图片描述了什么",
|
|
|
|
|
- "upload_file_id":"a1c91dda-2752-474f-8d90-ce0f072ee0a2"
|
|
|
|
|
- }
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
- // helper.$bus.emit("open-dialog", '合并Excel');
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ }else{
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -337,21 +348,24 @@ export default defineComponent({
|
|
|
}
|
|
}
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
- const downloadDocument = (record) => { };
|
|
|
|
|
|
|
+ const downloadDocument = (record) => {
|
|
|
|
|
+ console.log('下载图片');
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const deleteDocument = () => {
|
|
const deleteDocument = () => {
|
|
|
- const index = tableData.findIndex(item => item.key === deleteId.value);
|
|
|
|
|
- tableData.splice(index, 1);
|
|
|
|
|
- fileList.value = fileList.value.filter(item => item.uid !== deleteId.value);
|
|
|
|
|
|
|
+ // const index = tableData.findIndex(item => item.key === deleteId.value);
|
|
|
|
|
+ // tableData.splice(index, 1);
|
|
|
|
|
+ // fileList.value = fileList.value.filter(item => item.uid !== deleteId.value);
|
|
|
|
|
+
|
|
|
|
|
+ tableData.length = 0;
|
|
|
|
|
+ fileList.value = [];
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
- // const image_list = [
|
|
|
|
|
- // 'https://s3.harix.iamidata.com/sd-txt2img-ningbo/20241121_4173677d-b021-4b3a-9535-b7e4de17cded?AWSAccessKeyId=mjf0vn4dlj76z7ph&Expires=2147483647&Signature=kBHLFhQKRUd%2F%2B1hnw0k5DZ8VuA4%3D',
|
|
|
|
|
- // 'https://s3.harix.iamidata.com/sd-txt2img-ningbo/20241121_f0c4a724-ed43-4950-ade0-60190aa8eda4?AWSAccessKeyId=mjf0vn4dlj76z7ph&Expires=2147483647&Signature=Vd8Ja5X3W8qJFZl30NE8d%2B5GW40%3D',
|
|
|
|
|
- // 'https://s3.harix.iamidata.com/sd-txt2img-ningbo/20241121_a969df4c-5b6f-4577-827d-f7459e1a1c69?AWSAccessKeyId=mjf0vn4dlj76z7ph&Expires=2147483647&Signature=CHVinI9kJWnToLXWZ5BHdj54nLM%3D'
|
|
|
|
|
- // ]
|
|
|
|
|
|
|
+ // 组件卸载
|
|
|
|
|
+ onBeforeUnmount(() => {
|
|
|
|
|
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
agengtName: props.agengtName,
|
|
agengtName: props.agengtName,
|
|
@@ -375,6 +389,13 @@ export default defineComponent({
|
|
|
selectFiles,
|
|
selectFiles,
|
|
|
|
|
|
|
|
// image_list
|
|
// image_list
|
|
|
|
|
+
|
|
|
|
|
+ handlePopupChange,
|
|
|
|
|
+ handleCancelDelete,
|
|
|
|
|
+ handleUploadClick,
|
|
|
|
|
+ handleUploadClose,
|
|
|
|
|
+
|
|
|
|
|
+ file_status_label_tips,
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|