提交 a80b954f authored 作者: lidongxu's avatar lidongxu

feat(jimureport): 增加:积木报表-查看报表新增类目页和是否已分享标识

上级 3932a499
......@@ -54,3 +54,22 @@ export function importReportAPI(data) {
}
})
}
// 查询分享报表连接
export function selShareReportAPI(params) {
return request({
url: `/report/jmreport/share/queryJurisdiction`,
params
})
}
// 创建/编辑分享链接参数
export function addOrEditShareReportAPI(data) {
return request({
url: `/report/jmreport/share/addAndEdit`,
method: 'POST',
data
})
}
......@@ -60,7 +60,9 @@
<template #default="{ row }">
<div>
<svg-icon icon-class="bg-document"></svg-icon>
<span style="margin-left: 10px">{{ row.name }}</span>
<el-link :href="getReportPreviewUrl(row)"
target="_blank"
style="margin-left: 10px">{{ row.name }}</el-link>
</div>
</template>
</el-table-column>
......@@ -69,12 +71,12 @@
align="left"
width="200">
<template #default="scope">
<xl-tool-tip content="预览报表"
<xl-tool-tip content="分享报表"
placement="top">
<el-button link
type="primary"
icon="View"
@click="handlePreview(scope.row)"></el-button>
icon="Share"
@click="handleShare(scope.row)"></el-button>
</xl-tool-tip>
<xl-tool-tip content="修改"
placement="top">
......@@ -108,6 +110,37 @@
v-model:limit="queryParams.pageSize"
@pagination="getReportList" />
</el-col>
<!-- 新增/编辑分享弹窗 -->
<el-dialog title="创建分享链接"
v-model="dialogVisible">
<el-form label-width="180px">
<el-form-item label="过期时间">
<el-radio-group v-model="expireTime">
<el-radio label="永久有效">永久有效</el-radio>
<el-radio label="7天">7天</el-radio>
<el-radio label="1天">1天</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否开启密码">
<el-radio-group v-model="isPasswordEnabled">
<el-radio label="否"></el-radio>
<el-radio label="是"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否检验分享token">
<el-switch v-model="isCheckToken" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary"
@click="handleConfirm">确认</el-button>
</span>
</template>
</el-dialog>
</el-row>
</div>
</div>
......@@ -115,7 +148,7 @@
<script setup>
import { getToken } from '@/utils/auth'
import { getReportFolderStructureAPI, getDesignReportListAPI, deleteReportAPI, copyReportAPI, addReportAPI, importReportAPI } from '@/api'
import { getReportFolderStructureAPI, getDesignReportListAPI, deleteReportAPI, copyReportAPI, addReportAPI, importReportAPI, selShareReportAPI } from '@/api'
import useUserStore from '@/store/modules/user'
const { proxy } = getCurrentInstance()
......@@ -187,7 +220,10 @@ const getReportList = async () => {
total.value = res.result.total
}
getReportList()
// 报表预览地址
const getReportPreviewUrl = (row) => {
return `${reportViewURL}/${row.id}?token=${getToken()}&tenantId=${userStore.$state.userInfo.deptId}`
}
/********* 报表功能按钮 ***********/
// 新建报表
......@@ -206,16 +242,23 @@ const handleImport = () => {
formData.append('type', queryParams.reportType)
const res = await importReportAPI(formData)
proxy.$modal.msgSuccess(res.result)
getReportList()
getReportList()
}).catch(err => {
proxy.$modal.msgError(err)
})
}
// 预览报表
const handlePreview = (row) => {
window.open(`${reportViewURL}/${row.id}?token=${getToken()}&tenantId=${userStore.$state.userInfo.deptId}`)
// 分享报表
const shareReportUrl = ref('')
const dialogVisible = ref(false)
const handleShare = async (row) => {
const res = await selShareReportAPI({
reportId: row.id
})
shareReportUrl.value = res.result?.previewUrl
dialogVisible.value = true
}
// 修改报表
const handleEdit = (row) => {
window.open(`${reportEditURL}/${row.id}?token=${getToken()}&tenantId=${userStore.$state.userInfo.deptId}`)
......
......@@ -37,18 +37,26 @@
prop="name"
align="left"
sortable>
<template #default="scope">
<template #default="{ row }">
<div style="display: flex; align-items: center">
<svg-icon icon-class="bg-document"></svg-icon>
<span style="margin-left: 10px">{{ scope.row.name }}</span>
<el-link :href="row.previewUrl"
target="_blank"
style="margin-left: 10px">{{ row.name }}</el-link>
</div>
</template>
</el-table-column>
<el-table-column label="报表类目"
key="categoryName"
prop="categoryName"
align="left"
width="120"
sortable />
<el-table-column label="创建人"
key="createBy"
prop="createBy"
align="left"
width="180"
width="120"
sortable />
<el-table-column label="创建时间"
prop="createTime"
......@@ -59,16 +67,31 @@
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="是否被分享"
key="hasShare"
prop="hasShare"
align="center"
width="120"
sortable>
<!-- 使用 tag 标记颜色 -->
<template #default="{ row }">
<el-tag :type="row.hasShare === 1 ? 'success' : 'danger'">{{ row.hasShare === 1 ? '是' : '否' }}</el-tag>
</template>
</el-table-column>
<!-- 操作预览 -->
<el-table-column label="操作"
key="operation"
align="center"
width="180">
width="120">
<template #default="scope">
<el-button link
type="primary"
icon="Reading"
@click="previewReport(scope.row)">预览</el-button>
<el-tooltip content="复制报表地址">
<el-button text
type="primary"
icon="Share"
v-copyText="scope.row.previewUrl"
v-copyText:callback="copyTextSuccess" />
</el-tooltip>
</template>
</el-table-column>
</el-table>
......@@ -88,6 +111,7 @@
import { getToken } from '@/utils/auth'
import useUserStore from '@/store/modules/user'
const { proxy } = getCurrentInstance()
const userStore = useUserStore()
const reportViewURL = import.meta.env.VITE_APP_REPORT_PREVIEW_URL
/*************** 报表列表部分 ****************/
......@@ -124,12 +148,10 @@
getReportList()
// 点击某行报表
function previewReport(row) {
window.open(`${reportViewURL}/${row.id}?token=${getToken()}&tenantId=${userStore.$state.userInfo.deptId}`)
function copyTextSuccess() {
proxy.$modal.msgSuccess('链接已复制到剪切板')
}
</script>
<style scoped
lang="scss">
</style>
\ No newline at end of file
lang="scss"></style>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论