当前位置: 首页 > news >正文

vue项目通过点击文字上传html文件,查看html文件

上传html文件

解决思路:新建一个上传组件,将它挪到页面之外。当点击文字时,手动触发上传组件,打开上传文件框。

<template><BasicTable @register="registerTable"><template #bodyCell="{ column, record }"><template v-if="column.key === 'action'"><TableAction :actions="[{label: '上传',onClick: handleUploadClick.bind(null, record),},{label: '上传记录',onClick: handleCheck.bind(null, record),}]" /></template></template></BasicTable><!-- 页面外的上传组件,点击文字后触发 --><a-upload ref="uploadDom" :show-upload-list="false" :customRequest="handleUpload" class="record-uploader"><a-button type="primary">上传已填写的模板</a-button></a-upload>
</template><script lang="ts">import { defineComponent, onMounted, ref, unref, onUpdated } from 'vue';import { BasicTable, useTable, TableAction } from '/@/components/Table';import { message } from 'ant-design-vue';import { grtBannerList } from "/@/api/b2b/serviceManagement";import { getBasicColumns } from './index.data';import { uploadHtml } from '/@/api/b2b/systemSet';import {Button,Upload,} from 'ant-design-vue';export default defineComponent({name: 'agreementSetPage',components: {BasicTable,AButton: Button,AUpload: Upload,TableAction,},setup() {const [registerTable, { setShowPagination }] = useTable({// api: grtBannerList,dataSource: tableData,columns: getBasicColumns(),useSearchForm: false,tableSetting: {redo: false,size: false,},showIndexColumn: false,rowKey: 'id',actionColumn: {width: 120,title: '操作',dataIndex: 'action'},});const tabActiveKey = ref<string | number>('1');const uploadDom = ref(null)// 手动触发上传function handleUploadClick(record: any) {tabActiveKey.value = record.iduploadDom.value.$el.querySelector('button').click()}// 上传方法function handleUpload(file) {if (file.file.type !== "text/html") {message.warning('请上传html格式的文件')return}let formData = new FormData();formData.append('file', file.file);formData.append('type', unref(tabActiveKey));uploadHtml(formData).then(async (res) => {message.success('上传成功')});}// 查看上传记录function handleCheck(record) {tabActiveKey.value = record.idtitle.value = `上传记录(${record.agreementType})`let data = { id: record.id }openModalOperateRecord(true, data);}return {registerTable,registerOperateRecord,isShow,handleUploadClick,handleCheck,bannerDate,handleUpload,tabActiveKey,uploadDom,tabActiveKey,title};}})
</script>

查看html文件

解决思路:将接口返回的html完整文件代码缓存到本地,然后读取本地保存的html数据,使用新窗口打开,就能查看html文件。

<template><div><BasicModal v-bind="$attrs" @register="registerModal" :title="title" okText="确定" cancelText="取消":canFullscreen="false" :footer="null" @visible-change="handleVisibleChange" @ok="handleOk"wrapClassName="recordModalWrap" :useWrapper="false" :width="630" :top="19"><BasicTable @register="registerRecordTable"><template #bodyCell="{ column, record }"><template v-if="column.key === 'action'"><TableAction :actions="[{label: '查看',onClick: handleCheck.bind(null, record),},]" /></template></template></BasicTable></BasicModal></div>
</template><script lang="ts">
import { defineComponent, ref } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { BasicTable, useTable, BasicColumn, TableAction } from '/@/components/Table';
import { GetOperateRecordPage } from '/@/api/b2b/systemSet';const recordColumns: BasicColumn[] = [{title: '上传时间',dataIndex: 'createTime',},
];
export default defineComponent({name: 'SystemSetOperateRecord',components: { BasicTable, BasicModal, TableAction },props: {tabActiveKey: { type: [String, Number], require: true },title: { type: String, default: '' }},emits: ['success', 'register'],setup(props, { emit }) {console.log(666, props);const modelRef = ref({});const [registerRecordTable, { reload }] = useTable({api: GetOperateRecordPage,columns: recordColumns,useSearchForm: false,showTableSetting: false,showIndexColumn: false,striped: false,rowKey: 'id',scroll: { y: 330 },actionColumn: {width: 120,title: '操作',dataIndex: 'action'},fetchSetting: { listField: 'records', totalField: 'total' },beforeFetch: (params) => {let newParams = {...params,type: props.tabActiveKey,};return newParams;},});const [registerModal] = useModalInner((data) => {reload()});function handleCheck(record: any) {// 读取本地保存的html数据,使用新窗口打开window.localStorage.removeItem('callbackHTML');window.localStorage.setItem('callbackHTML', record.content)let newWin = window.open('')newWin.document.write(localStorage.getItem('callbackHTML'))newWin.document.close() // 关闭输出流}function handleVisibleChange(v) { }async function handleOk() { }return {registerModal,model: modelRef,handleCheck,registerRecordTable,handleVisibleChange,handleOk,};},
});
</script><style scoped lang="less">
:deep(.ant-table-wrapper) {padding: 0px !important;
}:deep(.ant-spin-container) {height: 442px;
}:deep(.scroll-container) {padding: 0 !important;
}:deep(.ant-pagination-options-quick-jumper) {display: none;
}:deep(.ant-table-body) {height: 330px !important;max-height: 696px !important;
}
</style>

http://www.lryc.cn/news/348708.html

相关文章:

  • 【WEEK12】 【DAY1】整合JDBC【中文版】
  • 23种设计模式(软考中级 软件设计师)
  • 记录一下 log4j的漏洞
  • Springboot-配置文件中敏感信息的加密:三种加密保护方法比较
  • linux 性能监控命令之dstat
  • 花趣短视频源码淘宝客系统全开源版带直播带货带自营商城流量主小游戏功能介绍
  • 大模型管理工具:Ollama
  • recycleView的item,TV正确方式获取焦点,以及刷新界面
  • QT内存管理机制
  • 亚马逊卖家,如何打造爆款,如何提高产品权重、曝光、流量?
  • 处理HTTP请求的服务器
  • 打造本地GPT专业领域知识库AnythingLLM+Ollama
  • 数据可视化训练第6天(美国人口调查获得关于收入与教育背景的数据,并且可视化)
  • 如何更换远程服务器的Python版本
  • Python 运筹优化13 Thompson Sampling 解读
  • 计算机毕业设计 | SpringBoot健身房管理系统(附源码)
  • 大模型LLM 结合联网搜索增强isou
  • 软删除和硬删除的区别及实际应用
  • 算法加密-简介
  • 搞懂Docker(九)- 使用Docker Compose
  • EOCRSP-40NM7施耐德电机保护器EOCR-SP
  • 一文带你快速了解GPT-4o!内含免费使用指南!
  • react18【系列实用教程】useState (2024最新版)
  • 电商选品的数据是可以用爬虫进行采集的吗?
  • 数据特征降维 | 局部线性嵌入(LLE)
  • js发票查验、票据OCR接口助力解决发票录入与真假辨别难题
  • HTML静态网页成品作业(HTML+CSS+JS)——华为商城网页(1个页面)
  • 【吃透Java手写】5-RPC-简易版
  • express 本地https服务 接口、静态文件,并支持跨域
  • 从零手写实现 tomcat-08-tomcat 如何与 springboot 集成?