Files
2026-10-08 18:19:39 +08:00

899 lines
30 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="page-body">
<!-- 页面内容开始 -->
<!-- 表格搜索组件开始 -->
<vk-data-table-query v-model="queryForm1.formData" :columns="queryForm1.columns"
@search="search"></vk-data-table-query>
<!-- 表格搜索组件结束 -->
<!-- 自定义按钮区域开始 -->
<view>
<el-row>
</el-row>
</view>
<!-- 自定义按钮区域结束 -->
<!-- 表格组件开始 -->
<vk-data-table ref="table1" :action="table1.action" :columns="table1.columns" :query-form-param="queryForm1"
:pagination="true" @current-change="currentChange"
>
<template v-slot:action="{ row, column, index }">
<el-button size="mini" @click.native="doShowInfo(row)">详情</el-button>
<el-button size="mini" @click.native="showQuoteList(row)" v-if="row.quoteNum > 0">报价列表</el-button>
</template>
<template v-slot:isShow="{ row, column, index }">
<el-switch v-if="row.status === 0" v-model="row.isShow" size="mini"
@change="changeField(row._id, 'isShow', $event)" :active-value="1"
:inactive-value="0"/>
<span v-else></span>
</template>
<template v-slot:isUrgent="{ row, column, index }">
<el-switch v-if="row.status === 0" v-model="row.isUrgent" size="mini"
@change="changeField(row._id, 'isUrgent', $event)" :active-value="true"
:inactive-value="false"/>
<span v-else></span>
</template>
<template v-slot:quoteAmount="{ row, column, index }">
<el-input-number v-model="row.quoteAmount" @change="changeQuoteAmount($event, row._id)"/>
</template>
</vk-data-table>
<!-- 表格组件结束 -->
<!-- 添加或编辑的弹窗开始 -->
<vk-data-dialog v-model="form1.props.show" :title="form1.props.title" width="60%" mode="form"
:close-on-click-modal="false">
<vk-data-form v-model="form1.data" :rules="form1.props.rules" :action="form1.props.action"
:form-type="form1.props.formType" :columns='form1.props.columns' label-width="120px"
@success="form1.props.show = false;refresh();"></vk-data-form>
</vk-data-dialog>
<!-- 添加或编辑的弹窗结束 -->
<!-- 页面内容结束 -->
<vk-data-dialog
v-model="showInfo"
:title="title"
width="60%"
top="14vh"
center
:close-on-click-modal="true"
>
<div style="display: flex;align-items: flex-start;flex-direction: column;justify-content: flex-start;"
v-if="showInfo && info">
<div class="row">
<span class="title">类型</span>
<span v-if="info.type === 0">拍卖</span>
<span v-if="info.type === 1">采购</span>
<span v-if="info.type === 2">租赁</span>
<span v-if="info.type === 3">物资回收</span>
</div>
<div class="row" v-if="info.type === 2">
<span class="title">租赁类型</span>
<span v-if="info.rentType === 0">承租信息</span>
<span v-if="info.rentType === 1">出租信息</span>
</div>
<div class="row">
<span class="title">分类</span>
<span>{{ info.category }}</span>
</div>
<div class="row">
<span class="title">标题</span>
<span>{{ info.title }}</span>
</div>
<div class="row">
<span class="title">详情</span>
<span>{{ info.desc }}</span>
</div>
<div class="row">
<span class="title">附件</span>
<a href="javascript:;" v-for="(item, index) in info.files" :key="index" @click="previewFile(item)">预览:文件{{ index + 1 }}</a>
</div>
<div class="row">
<span class="title">物资所在地</span>
<span>{{
(info.addressRegion && info.addressRegion.province && info.addressRegion.province.name) ? `${info.addressRegion.province.name}${info.addressRegion.city.name}${info.addressRegion.area.name}` : ''
}}</span>
</div>
<div class="row">
<span class="title">物资交货地</span>
<span>{{
(info.deliverAddressRegion && info.deliverAddressRegion.province && info.deliverAddressRegion.province.name) ? `${info.deliverAddressRegion.province.name}${info.deliverAddressRegion.city.name}${info.deliverAddressRegion.area.name}` : ''
}}</span>
</div>
<div class="row">
<span class="title">报价区域</span>
<span>{{
(info.offerAddressRegion && info.offerAddressRegion.province && info.offerAddressRegion.province.name) ? `${info.offerAddressRegion.province.name}${info.offerAddressRegion.city.name}${info.offerAddressRegion.area.name}` : ''
}}</span>
</div>
<div class="row">
<span class="title">起拍计价单位</span>
<span>{{ info.unit }}</span>
</div>
<div class="row">
<span class="title">起拍人民币单价</span>
<span>{{ info.startAmount }}</span>
</div>
<div class="row">
<span class="title">拍卖信息失效时间</span>
<span>{{ dayjs(info.expiredTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
</div>
<div class="row">
<span class="title">付款方式</span>
<span>{{ info.payMethod }}</span>
</div>
<div class="row">
<span class="title">预付比例</span>
<span>{{ info.prePayRate }}%</span>
</div>
<div class="row">
<span class="title">是否含税</span>
<span v-if="info.invoice">含税</span>
<span v-else>不含税</span>
</div>
<div class="row">
<span class="title">开票时间</span>
<span v-if="info.writeInvoiceTime === 0">付款当月(限20号之前付款,20号之后付款次月开票)</span>
<span v-if="info.writeInvoiceTime === 1">付款后次月</span>
<span v-if="info.writeInvoiceTime === 2">付款前</span>
</div>
<template v-if="!info.invoiceOther">
<div class="row">
<span class="title">纳税人身份</span>
<span>{{ info.taxType }}</span>
</div>
<div class="row">
<span class="title">发票种类</span>
<span>{{ info.invoiceType }}</span>
</div>
<div class="row">
<span class="title">税率</span>
<span>{{ info.taxRate }}</span>
</div>
</template>
<div class="row">
<span class="title">手动填写税票要求</span>
<span>{{ info.invoiceOther }}</span>
</div>
<div class="row">
<span class="title">报价详情</span>
<span>{{ info.invoiceDetail }}</span>
</div>
<div class="row">
<span class="title">报价失效时间</span>
<span>{{ info.offerExpiredTime }}</span>
</div>
<div class="row">
<span class="title">报价形式</span>
<span v-if="info.offerType === 0">整单报价</span>
<span v-if="info.offerType === 1">可分项报价</span>
</div>
<div class="row">
<span class="title">签约模式</span>
<span v-if="info.signMethod === 0">线上签约-标准合同</span>
<span v-if="info.signMethod === 1">线下签约</span>
<span v-if="info.signMethod === 2">线上签约-双方协商合同</span>
</div>
<div class="row" v-if="info.signMethod === 2">
<span class="title">合同文件</span>
<template v-if="info.contract && info.contract.contractBase">
<a href="javascript:;" v-for="(item, index) in getFileList(info.contract.contractBase)" :key="index" @click="previewFile(item)">预览文件{{ getFileList(info.contract.contractBase).length > 1 ? index + 1 : '' }}</a>
</template>
</div>
<template v-if="info.type !== 2">
<div class="row">
<span class="title">供应商信息</span>
<span>{{ info.supplier ? info.supplier.companyName : '' }}</span>
</div>
<div class="row">
<span class="title">供应商联系方式</span>
<span>{{ info.supplier ? info.supplier.contract : '' }}</span>
</div>
<div class="row">
<span class="title">供应商授权人姓名</span>
<span>{{ info.supplier ? info.supplier.managerName : '' }}</span>
</div>
<div class="row">
<span class="title">供应商授权联系方式</span>
<span>{{ info.supplier ? info.supplier.managerContract : ''}}</span>
</div>
<div class="row">
<span class="title">采购商信息</span>
<span>{{ info.buyer? info.buyer.companyName : '' }}</span>
</div>
<div class="row">
<span class="title">采购商联系方式</span>
<span>{{ info.buyer ? info.buyer.contract : '' }}</span>
</div>
<div class="row">
<span class="title">采购授权人姓名</span>
<span>{{ info.buyer ? info.buyer.managerName : '' }}</span>
</div>
<div class="row">
<span class="title">采购商授权联系方式</span>
<span>{{ info.buyer ? info.buyer.managerContract : ''}}</span>
</div>
</template>
<template v-else>
<div class="row">
<span class="title">{{ info.rentType === 0 ? '承租方' : '出租方' }}信息</span>
<span>{{ info.supplier? info.supplier.companyName : '' }}</span>
</div>
<div class="row">
<span class="title">{{ info.rentType === 0 ? '承租方' : '出租方' }}联系方式</span>
<span>{{ info.supplier ? info.supplier.contract : '' }}</span>
</div>
<div class="row">
<span class="title">{{ info.rentType === 0 ? '承租方' : '出租方' }}授权人姓名</span>
<span>{{ info.supplier ? info.supplier.managerName : '' }}</span>
</div>
<div class="row">
<span class="title">{{ info.rentType === 0 ? '承租方' : '出租方' }}授权联系方式</span>
<span>{{ info.supplier ? info.supplier.managerContract : '' }}</span>
</div>
</template>
</div>
<!-- <vk-data-detail-table-->
<!-- :data="info"-->
<!-- size="medium"-->
<!-- label-width="150px"-->
<!-- >-->
<!-- <template v-slot:columns="{ column, index }"> -->
<!-- </template>-->
<!-- </vk-data-detail-table>-->
</vk-data-dialog>
<el-dialog title="图片预览" :visible.sync="showImagePreview" width="80%" append-to-body>
<img v-if="previewImageUrl" class="preview-image" :src="previewImageUrl" alt="附件预览"/>
</el-dialog>
<el-dialog title="PDF预览" :visible.sync="showPdfPreview" width="80%" append-to-body @closed="revokePdfPreviewUrl">
<iframe v-if="pdfPreviewUrl" class="pdf-preview-frame" :src="pdfPreviewUrl"></iframe>
</el-dialog>
<OldQuoteList ref="OldQuoteList"/>
</view>
</template>
<script>
import OldQuoteList from "./components/OldQuoteList.vue";
import dayjs from "dayjs";
var that; // 当前页面对象
var vk = uni.vk; // vk实例
var originalForms = {}; // 表单初始化数据
function escapeHtml(value = "") {
return String(value)
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#39;");
}
function formatPreviewLinks(files = []) {
const list = Array.isArray(files) ? files : (files ? [files] : []);
return list
.filter(Boolean)
.map((item, itemIndex) => {
const url = encodeURIComponent(item);
const label = escapeHtml(`预览:文件${itemIndex + 1}`);
return `<a href="javascript:;" onclick="window.__previewOldFile && window.__previewOldFile('${url}')">${label}</a> `;
})
.join("");
}
export default {
components: {OldQuoteList},
data() {
// 页面数据变量
return {
showInfo: false,
info: null,
title: '',
showImagePreview: false,
previewImageUrl: '',
showPdfPreview: false,
pdfPreviewUrl: '',
pdfObjectUrl: '',
infoColumns: [
{
key: "type", title: "类型", type: "select",
data: [
{value: 0, label: '拍卖'},
{value: 1, label: '采购'},
{value: 2, label: '租赁'},
{value: 3, label: '物资回收'},
]
},
{
key: "rentType", title: "租赁类型", type: "select",
data: [
{value: 0, label: '拍卖'},
{value: 1, label: '采购'},
{value: 2, label: '租赁'},
{value: 3, label: '物资回收'},
],
show: formData => {
return formData.type === 2
}
},
{
key: "category", title: "分类", type: "array",
},
{key: "title", title: "标题", type: "text"},
{key: "desc", title: "详情", type: "text"},
{
key: "files", title: "附件", type: "html",
formatter: (val = [], row, column, index) => {
return formatPreviewLinks(val)
}
},
{
key: "addressRegion",
title: "物资所在地",
type: "address",
formatter: (val, row, column, index) => {
return `${val.province.name}`
}
},
{
key: "deliverAddressRegion",
title: "物资交货地",
type: "text",
formatter: (val, row, column, index) => {
return `${val.province.name} ${val.city.name} ${val.area.name} ${row.deliverAddressDetail}`
},
showRule: formData => {
return [1, 2].includes(formData.type)
}
},
{
key: "offerAddressRegion",
title: "报价区域",
type: "address"
},
{
key: "unit", title: "起拍计价单位", type: "text",
// formatter: (val, row, column, index) => {
// return `${row.startNum ? row.startNum : ''} ${row.unit ? row.unit : ''}`
// },
},
{
key: "startAmount", title: "起拍人民币单价", type: "text",
formatter: (val, row, column, index) => {
return val ? `${val}元` : ''
},
},
{key: "expiredTime", title: "拍卖信息失效时间", type: "text"},
{
key: "payMethod", title: "付款方式", type: "text",
},
{
key: "prePayRate", title: "预付比例", type: "text",
},
{
key: "invoice", title: "是否含税", type: "radio", data: [
{label: "含税", value: true},
{label: "不含税", value: false}
]
},
{
key: "writeInvoiceTime", title: "开票时间", type: "radio", data: [
{label: "付款当月(限20号之前付款,20号之后付款次月开票)", value: 0},
{label: "付款后次月", value: 1},
{label: "付款前", value: 2}
]
},
// {
// key: "invoiceType", title: "发票种类", type: "radio", data: [
// {label: "增值税专用发票13%", value: 0},
// {label: "增值税普通发票", value: 1},
// {label: "普通发票", value: 2}
// ]
// },
// {key: "invoiceOther", title: "发票其他要求", type: "text"},
{
key: "taxType", title: "纳税人身份", type: "text", showRule: formData => {
return !!formData.invoiceOther
}
},
{
key: "invoiceType", title: "发票种类", type: "text", showRule: formData => {
return !!formData.invoiceOther
}
},
{
key: "taxRate", title: "税率", type: "text", showRule: formData => {
return !!formData.invoiceOther
}
},
{
key: "invoiceOther", title: "手动填写税票要求", type: "text", showRule: formData => {
console.log(formData)
return !!formData.taxType
}
},
{key: "invoiceDetail", title: "报价详情", type: "text"},
{key: "offerExpiredTime", title: "报价失效时间", type: "time"},
{
key: "offerType", title: "报价形式", type: "radio", data: [
{label: "整单报价", value: 0},
{label: "可分项报价", value: 1}
]
},
{
key: "signMethod", title: "签约模式", type: "radio", data: [
{label: "线上签约-标准合同", value: 0},
{label: "线下签约", value: 1},
{label: "线上签约-双方协商合同", value: 2},
]
},
{key: "supplier.companyName", title: "供应商信息", type: "text"},
{key: "supplier.contract", title: "供应商联系方式", type: "text"},
{key: "supplier.managerName", title: "供应商授权人姓名", type: "text"},
{key: "supplier.managerContract", title: "供应商授权联系方式", type: "text"},
{key: "buyer.companyName", title: "采购商信息", type: "text"},
{key: "buyer.contract", title: "采购商联系方式", type: "text"},
{key: "buyer.managerName", title: "采购授权人姓名", type: "text"},
{key: "buyer.managerContract", title: "采购商授权联系方式", type: "text"},
],
// 页面是否请求中或加载中
loading: false,
// init请求返回的数据
data: {},
// 表格相关开始 -----------------------------------------------------------
table1: {
// 表格数据请求地址
action: "admin/old/sys/getList",
// 表格字段显示规则
columns: [
{
key: "title",
title: "标题",
type: "text",
align: "left",
width: 200
},
{
key: "type",
title: "类型",
type: "select",
data: [
{value: 0, label: '拍卖'},
{value: 1, label: '采购'},
{value: 2, label: '租赁'},
{value: 3, label: '物资回收'},
]
},
{
key: "rentType", title: "租赁类型", type: "select",
data: [
{value: 0, label: '承租信息'},
{value: 1, label: '出租信息'},
],
showRow: (row) => {
return row.type === 2
}
},
{
key: "category",
title: "分类",
type: "text",
align: "left",
width: 180,
formatter: (val, row, column, index) => {
return val[1]
}
},
{
key: "",
title: "报价情况",
type: "text",
align: "left",
formatter: (val = [], row, column, index) => {
return `${row.quoteNum}家`
}
},
{
key: "status",
title: "状态",
type: "tag",
data: [
{value: 0, label: '未选商'},
{value: 1, label: '已选商', tagType: 'danger'},
{value: 2, label: '已完成', tagType: 'success'},
]
},
{key: "isUrgent", title: "是否加急", type: "html"},
{key: "isShow", title: "是否显示", type: "html"},
{key: "quoteAmount", title: "单次报价金额", type: "html", width: 210,},
{
key: "_add_time",
title: "添加时间",
type: "time",
align: "left",
width: 160,
sortable: "custom"
},
{
key: "_add_time_diff",
title: "距离现在",
type: "html",
align: "left",
width: 120,
formatter: (val, row) => vk.pubfn.dateDiff(row._add_time)
},
{key: "action", title: "操作", type: "html", width: 220,},
],
// 多选框选中的值
multipleSelection: [],
// 当前高亮的记录
selectItem: ""
},
// 表格相关结束 -----------------------------------------------------------
// 表单相关开始 -----------------------------------------------------------
// 查询表单请求数据
queryForm1: {
// 查询表单数据源,可在此设置默认值
formData: {},
// 查询表单的字段规则 fieldName:指定数据库字段名,不填默认等于key
columns: [
{
key: "title",
title: "标题",
type: "text",
width: 160,
mode: "%%"
},
{
key: "type",
title: "类型",
type: "select",
data: [
{value: 0, label: '拍卖'},
{value: 1, label: '采购'},
{value: 2, label: '租赁'},
{value: 3, label: '物资回收'},
]
},
{
key: "rentType", title: "租赁类型", type: "select",
data: [
{value: 0, label: '承租信息'},
{value: 1, label: '出租信息'},
],
showRow: (row) => {
return row.type === 2
}
},
{
key: "status",
title: "状态",
type: "select",
data: [
{value: 0, label: '未选商'},
{value: 1, label: '已选商'},
{value: 2, label: '已完成'},
]
},
{
key: "signMethod",
title: "签约方式",
type: "select",
data: [
{value: 0, label: '线上签约-标准合同'},
{value: 1, label: '线下签约'},
{value: 2, label: '线上签约-双方协商合同'},
]
},
]
},
form1: {
// 表单请求数据,此处可以设置默认值
data: {
sort: 0
},
// 表单属性
props: {
// 表单请求地址
action: "",
// 表单字段显示规则
columns: [{
key: "name",
title: "名称",
type: "text",
placeholder: "请输入分类名称"
},
{
key: "icon",
title: "图标",
type: "icon",
placeholder: "请选择图标"
},
{
key: "parent_id",
title: "上级分类",
type: "tree-select",
placeholder: "请选择上级分类",
action: "admin/spot/category/sys/getTree",
props: {
list: "rows",
value: "_id",
label: "name",
children: "children"
},
},
{
key: "remark",
title: "备注",
type: "textarea",
maxlength: "99",
showWordLimit: true,
autosize: {
minRows: 2,
maxRows: 10
},
},
{
key: "sort",
title: "排序",
type: "number",
precision: 0,
placeholder: "请输入排序值",
},
],
// 表单验证规则
rules: {
sort: [{
type: 'number',
message: '排序值必须为数字'
}],
name: [
{required: true, message: '分类名称不能为空', trigger: 'blur'},
],
},
// add 代表添加 update 代表修改
formType: "",
// 是否显示表单的弹窗
show: false
}
},
// 其他弹窗表单
formDatas: {},
// 表单相关结束 -----------------------------------------------------------
};
},
// 监听 - 页面每次【加载时】执行(如:前进)
onLoad(options = {}) {
that = this;
vk = that.vk;
that.options = options;
that.registerFilePreviewHandler();
that.init(options);
},
onUnload() {
this.unregisterFilePreviewHandler();
},
beforeDestroy() {
this.unregisterFilePreviewHandler();
this.revokePdfPreviewUrl();
},
// 监听 - 页面【首次渲染完成时】执行。注意如果渲染速度快,会在页面进入动画完成前触发
onReady() {
},
// 监听 - 页面每次【显示时】执行(如:前进和返回) (页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面)
onShow() {
},
// 监听 - 页面每次【隐藏时】执行(如:返回)
onHide() {
},
// 函数
methods: {
dayjs,
// 页面数据初始化函数
init(options) {
originalForms["form1"] = vk.pubfn.copyObject(that.form1);
},
registerFilePreviewHandler() {
if (typeof window === "undefined") return
window.__previewOldFile = encodedUrl => {
this.previewFile(decodeURIComponent(encodedUrl))
}
},
unregisterFilePreviewHandler() {
if (typeof window === "undefined") return
if (window.__previewOldFile) delete window.__previewOldFile
},
getFileList(files) {
return Array.isArray(files) ? files : (files ? [files] : [])
},
// 页面跳转
pageTo(path) {
vk.navigateTo(path);
},
// 表单重置
resetForm() {
vk.pubfn.resetForm(originalForms, that);
},
// 搜索
search() {
that.$refs.table1.search();
},
// 刷新
refresh() {
that.$refs.table1.refresh();
},
// 获取当前选中的行的数据
getCurrentRow() {
return that.$refs.table1.getCurrentRow();
},
// 监听 - 行的选中高亮事件
currentChange(val) {
that.table1.selectItem = val;
},
// 当选择项发生变化时会触发该事件
selectionChange(list) {
that.table1.multipleSelection = list;
},
// 显示添加页面
addBtn() {
that.resetForm();
that.form1.props.action = 'admin/contract/template/sys/add';
that.form1.props.formType = 'add';
that.form1.props.title = '添加';
that.form1.props.show = true;
},
// 显示修改页面
updateBtn({
item
}) {
that.form1.props.action = 'admin/contract/template/sys/update';
that.form1.props.formType = 'update';
that.form1.props.title = '编辑';
that.form1.props.show = true;
that.form1.data = item;
},
// 删除按钮
deleteBtn({
item,
deleteFn
}) {
deleteFn({
action: "admin/contract/template/sys/delete",
data: {
_id: item._id
},
});
},
// 监听 - 批量操作的按钮点击事件
batchBtn(index) {
switch (index) {
case 1:
vk.toast("批量操作按钮1");
break;
case 2:
vk.toast("批量操作按钮2");
break;
default:
break;
}
},
changeField(id, field, value) {
vk.callFunction({
url: 'admin/old/sys/changeField',
data: {
id, field, value
}
}).then(() => {
this.$refs.table1.refresh()
})
},
doShowInfo(info) {
this.info = info
this.title = '详情'
this.showInfo = true
},
showQuoteList({_id}) {
this.$refs.OldQuoteList.open(_id)
},
changeQuoteAmount(value, id) {
this.changeField(id, 'quoteAmount', value)
},
getFileExt(url = "") {
const cleanUrl = String(url).split("?")[0].split("#")[0]
const match = cleanUrl.match(/\.([a-z0-9]+)$/i)
return match ? match[1].toLowerCase() : ""
},
isImageFile(url) {
return ["png", "jpg", "jpeg", "gif", "webp", "bmp", "svg"].includes(this.getFileExt(url))
},
isPdfFile(url) {
return this.getFileExt(url) === "pdf"
},
isOfficeFile(url) {
return ["doc", "docx", "xls", "xlsx", "ppt", "pptx"].includes(this.getFileExt(url))
},
getOfficePreviewUrl(url) {
return `https://view.officeapps.live.com/op/view.aspx?src=${encodeURIComponent(url)}`
},
revokePdfPreviewUrl() {
if (this.pdfObjectUrl) {
URL.revokeObjectURL(this.pdfObjectUrl)
this.pdfObjectUrl = ''
}
this.pdfPreviewUrl = ''
},
async previewPdfFile(url) {
this.revokePdfPreviewUrl()
try {
const response = await fetch(url)
if (!response.ok) throw new Error('PDF加载失败')
const blob = await response.blob()
this.pdfObjectUrl = URL.createObjectURL(new Blob([blob], {type: 'application/pdf'}))
this.pdfPreviewUrl = this.pdfObjectUrl
} catch (e) {
this.pdfPreviewUrl = `https://mozilla.github.io/pdf.js/web/viewer.html?file=${encodeURIComponent(url)}`
}
this.showPdfPreview = true
},
previewFile(url) {
if (!url) return
if (this.isImageFile(url)) {
this.previewImageUrl = url
this.showImagePreview = true
return
}
if (this.isPdfFile(url)) {
this.previewPdfFile(url)
return
}
if (this.isOfficeFile(url)) {
window.open(this.getOfficePreviewUrl(url), "_blank")
return
}
window.open(url, "_blank")
},
},
// 监听属性
watch: {},
// 过滤器
filters: {},
// 计算属性
computed: {}
};
</script>
<style lang="scss" scoped>
.row {
display: flex;
align-items: center;
justify-content: flex-start;
border: 1px solid #F5F7F9;
width: 100%;
* {
padding: 20px;
}
.title {
font-weight: bold;
background-color: #F5F7F9;
width: 300px;
}
}
.preview-image {
display: block;
max-width: 100%;
max-height: 75vh;
margin: 0 auto;
}
.pdf-preview-frame {
display: block;
width: 100%;
height: 75vh;
border: 0;
}
</style>