Signed-off-by: chy <chy@163.com>

This commit is contained in:
chy
2026-02-02 23:28:29 +08:00
commit 84bdfdb8bc
576 changed files with 941155 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
<!--
* @Descripttion:
* @version:
* @Author: qianlishi
* @Date: 2022-05-17 16:55:05
* @LastEditors: qianlishi
* @LastEditTime: 2022-05-17 17:38:54
-->
<template>
<el-dialog
class="tree_dialog"
title="报表管理--复制"
width="30%"
:close-on-click-modal="false"
center
:visible.sync="visib"
:before-close="close"
>
<el-form
:model="form"
:rules="rules"
ref="ruleForm"
label-width="100px"
class="demo-ruleForm"
>
<el-form-item label="报表名称" prop="reportName">
<el-input v-model="form.reportName" />
</el-form-item>
<el-form-item label="报表编码" prop="reportCode">
<el-input v-model="form.reportCode" />
</el-form-item>
</el-form>
<div slot="footer" style="text-align: center">
<el-button type="danger" plain @click="close">取消</el-button>
<el-button type="primary" plain @click="save">保存</el-button>
</div>
</el-dialog>
</template>
<script>
import { reportCopy } from "@/api/reportmanage";
export default {
props: {
visib: Boolean,
rowData: Object
},
data() {
return {
form: {},
rules: {
reportName: [
{ required: true, message: "请输入报表名称", trigger: "blur" }
],
reportCode: [
{ required: true, message: "请输入报表编码", trigger: "blur" }
]
}
};
},
watch: {
visib(val) {
this.form = this.deepClone(this.rowData);
this.form.reportCode = this.form.reportCode + "_" + Date.now();
}
},
methods: {
save() {
this.$refs.ruleForm.validate(async valid => {
if (valid) {
console.log(this.form);
const { code } = await reportCopy(this.form);
if (code != "200") {
return;
}
this.$message.success("复制成功");
this.close();
}
});
},
close() {
this.$emit("close");
}
}
};
</script>

View File

@@ -0,0 +1,238 @@
<!--
* @Descripttion:
* @version:
* @Author: Devli
* @Date: 2021-7-18 18:19:27
* @LastEditors: qianlishi
* @LastEditTime: 2022-8-5 13:31:44
-->
<template>
<el-dialog
class="tree_dialog"
:title="titleBuild()"
width="30%"
:close-on-click-modal="false"
center
:visible.sync="visib"
:before-close="closeDialog"
>
<div v-if="shareLinkFlag1">
<el-form
ref="userForm"
:model="dialogForm"
:rules="rules"
size="small"
label-width="100px"
>
<el-form-item label="有效期" prop="shareValidType">
<el-select
v-model.trim="dialogForm.shareValidType"
placeholder="请选择"
clearable
@change="selectChange"
>
<el-option
v-for="item in shareValidTypeOptions"
:key="item.id"
:label="item.text"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="分享码" prop="sharePasswordFlag">
<el-switch v-model="dialogForm.sharePasswordFlag"> </el-switch>
</el-form-item>
</el-form>
<el-button
type="primary"
plain
@click="createShare"
style="margin-left:45px"
>创建链接</el-button
>
</div>
<div v-else>
<el-form
ref="userForm"
:model="dialogForm"
:rules="rules"
size="small"
label-width="100px"
>
<el-form-item label="链接" prop="reportShareUrl">
<el-input v-model="reportShareUrl" :disabled="true" />
</el-form-item>
<el-form-item
v-if="dialogForm.sharePasswordFlag"
label="分享码"
prop="sharePassword"
>
<el-input v-model="dialogForm.sharePassword" :disabled="true" />
</el-form-item>
<el-row :gutter="10">
<el-button
v-if="dialogForm.sharePassword == ''"
type="primary"
plain
@click="copyShare"
style="margin-left:45px"
>复制链接</el-button
>
<el-button
v-if="dialogForm.sharePassword != ''"
type="primary"
plain
@click="copyShare"
style="margin-left:45px"
>复制链接和分享码</el-button
>
</el-row>
</el-form>
</div>
<div slot="footer" style="text-align: center">
<!-- <el-button type="primary" plain @click="saveReportShare">保存</el-button>-->
<el-button type="danger" plain @click="closeDialog">取消</el-button>
</div>
</el-dialog>
</template>
<script>
import { reportShareAdd } from "@/api/reportShare";
import { excelShareAdd } from "@/api/reportShare";
import { getDictList } from "@/api/dict-data"; // 获取数据字典
import Dictionary from "@/components/Dictionary/index";
export default {
components: { Dictionary },
props: {
visib: {
required: true,
type: Boolean,
default: false
},
reportCode: {
required: true,
type: String,
default: () => {
return "";
}
},
reportName: {
required: true,
type: String,
default: () => {
return "";
}
},
reportType: {
required: true,
type: String,
default:() =>{
return "";
}
}
},
data() {
return {
title: "报表分享",
reportShareUrl: "",
shareValidTypeOptions: [], // 有效期类型
dialogForm: {
shareValidType: 0,
reportCode: "",
reportType: "",
shareUrl: "",
shareCode: "",
sharePassword: "",
sharePasswordFlag: false
},
shareLinkFlag1: true,
rules: {
shareValidType: [
{ required: true, message: "有效期必选", trigger: "change" }
]
}
};
},
watch: {
visib(val) {
if (val) {
// 弹窗弹出时需要执行的逻辑
this.getSystem();
}
}
},
created() {},
methods: {
titleBuild() {
return "【" + this.reportName + "】" + "报表分享";
},
selectChange(val) {
this.dialogForm.shareValidType = val;
},
// 获取数据字典
async getSystem() {
this.shareLinkFlag1 = true;
const { code, data } = await getDictList("SHARE_VAILD");
if (code != "200") return;
this.shareValidTypeOptions = data;
this.dialogForm.shareValidType = this.shareValidTypeOptions[0].id;
this.dialogForm.sharePasswordFlag = false;
this.dialogForm.sharePassword = "";
},
async createShare() {
this.dialogForm.reportType = this.reportType;
this.dialogForm.reportCode = this.reportCode;
this.dialogForm.shareUrl = window.location.href;
const urlType = this.reportType == 'report_screen' ? reportShareAdd(this.dialogForm) : excelShareAdd(this.dialogForm)
const { code, data } = await urlType
if (code != "200") return;
this.shareLinkFlag1 = false;
this.$message({
message: "创建链接成功!",
type: "success"
});
this.reportShareUrl = data.shareUrl;
this.dialogForm.sharePassword = data.sharePassword;
},
copyShare() {
let content = "";
if (this.dialogForm.sharePassword == "") {
content = "分享链接:" + this.reportShareUrl;
} else {
content =
"分享链接:" +
this.reportShareUrl +
" 分享码:" +
this.dialogForm.sharePassword;
}
this.copyToClip(content);
this.$message({
message: "复制链接成功!",
type: "success"
});
},
copyToClip(content, message) {
let aux = document.createElement("input");
aux.setAttribute("value", content);
document.body.appendChild(aux);
aux.select();
document.execCommand("copy");
document.body.removeChild(aux);
},
async saveReportShare() {
let params = {};
//const { code } = await saveAuthorityTree(params)
//if (code != '200') return
this.closeDialog();
},
// 弹窗关闭之前需要执行的逻辑
closeDialog() {
this.$emit("handleClose");
}
}
};
</script>

View File

@@ -0,0 +1,406 @@
<!--
* @Descripttion: 报表设计--报表管理
* @version:
* @Author: yanzili
* @Date: 2021-6-24 14:48:27
* @LastEditors: qianlishi
* @LastEditTime: 2022-05-17 17:38:44
-->
<template>
<anji-crud ref="listPage" :option="crudOption">
<template v-slot:pageSection>
<Share
:visib="visibleForShareDialog"
:reportCode="reportCodeForShareDialog"
:reportName="reportNameForShareDialog"
:reportType="reportTypeForShareDialog"
@handleClose="visibleForShareDialog = false"
/>
<copyDialog :visib.sync="copyVisible" :rowData="rowData" @close="close" />
</template>
</anji-crud>
</template>
<script>
import {
reportList,
reportAdd,
reportDeleteBatch,
reportUpdate,
reportDetail,
reportCopy
} from "@/api/reportmanage";
import Share from "./components/share";
import copyDialog from "./components/copyDialog.vue";
import { validateEngOrNum } from "@/utils/validate";
import { verificationSet } from "@/api/report";
export default {
name: "Report",
components: {
anjiCrud: require("@/components/AnjiPlus/anji-crud/anji-crud").default,
Share,
copyDialog
},
data() {
return {
// 分享
visibleForShareDialog: false,
reportCodeForShareDialog: "",
reportNameForShareDialog: "",
reportTypeForShareDialog: "",
crudOption: {
// 使用菜单做为页面标题
title: "报表管理",
// 详情页中输入框左边文字宽度
labelWidth: "120px",
// 查询表单条件
queryFormFields: [
{
inputType: "anji-select", //form表单类型 input|input-number|anji-select(传递url或者dictCode)|anji-tree(左侧树)|date|datetime|datetimerange
anjiSelectOption: {
dictCode: "REPORT_TYPE"
},
label: "报表类型",
field: "reportType"
},
{
inputType: "input",
label: "报表名称",
field: "reportName"
},
{
inputType: "input",
label: "报表编码",
field: "reportCode"
},
{
inputType: "input",
label: "制作人",
field: "reportAuthor"
}
],
// 表头按钮
tableButtons: [
{
label: "新增",
type: "", // primary、success、info、warning、danger
permission: "reportManage:insert", // 按钮权限码
icon: "el-icon-plus",
plain: true,
click: () => {
return this.$refs.listPage.handleOpenEditView("add");
}
},
{
label: "删除",
type: "danger",
permission: "reportManage:delete",
icon: "el-icon-delete",
plain: false,
click: () => {
return this.$refs.listPage.handleDeleteBatch();
}
}
],
// 表格行按钮
rowButtons: [
{
label: "编辑",
permission: "reportManage:update",
click: row => {
return this.$refs.listPage.handleOpenEditView("edit", row);
}
},
{
label: "预览",
permission: "bigScreenManage:view",
click: this.preview
},
{
label: "设计",
permission: "bigScreenManage:design",
click: this.design
},
{
label: "分享",
permission: "bigScreenManage:share",
isHide: (row) => {
return row.reportType == 'report_screen'
},
click: this.shareReport
},
{
label: "分享",
permission: "excelManage:share",
isHide: (row) => {
return row.reportType == 'report_excel'
},
click: this.shareReport
},
{
label: "复制",
permission: "bigScreenManage:copy",
click: this.copyReport
},
{
label: "删除",
permission: "reportManage:delete",
click: row => {
return this.$refs.listPage.handleDeleteBatch(row);
}
}
],
// 操作按钮
buttons: {
query: {
api: reportList,
permission: "reportManage:query",
sort: "update_time",
order: "DESC"
},
queryByPrimarykey: {
api: reportDetail,
permission: "reportManage:detail"
},
add: {
api: reportAdd,
permission: "reportManage:insert"
},
delete: {
api: reportDeleteBatch,
permission: "reportManage:delete"
},
edit: {
api: reportUpdate,
permission: "reportManage:update"
},
rowButtonsWidth: 150 // row自定义按钮表格宽度
},
// 表格列
columns: [
{
label: "",
field: "id",
primaryKey: true, // 根据主键查询详情或者根据主键删除时, 主键的
tableHide: true, // 表格中不显示
editHide: true // 编辑弹框中不显示
},
{
label: "报表名称", //名称
placeholder: "",
field: "reportName",
editField: "reportName",
inputType: "input",
rules: [
{ required: true, message: "请输入报表名称", trigger: "blur" },
{ min: 1, max: 100, message: "不超过100个字符", trigger: "blur" }
],
disabled: false
},
{
label: "报表编码", //报表编码
placeholder: "唯一标识",
field: "reportCode",
editField: "reportCode",
inputType: "input",
rules: [
{ required: true, message: "请输入报表编码", trigger: "blur" },
{ min: 1, max: 100, message: "不超过100个字符", trigger: "blur" },
{ validator: validateEngOrNum, trigger: "blur" }
],
disabled: "disableOnEdit"
},
{
label: "分组", //分组,暂时不展示出来
placeholder: "",
field: "reportGroup",
tableHide: true,
editHide: true,
editField: "reportGroup",
inputType: "input",
rules: [
{ min: 1, max: 100, message: "不超过100个字符", trigger: "blur" }
],
disabled: false,
defaultValue: "default"
},
{
label: "报表类型", //报表类型-目前仅支持大屏报表,暂时不展示出来
placeholder: "",
field: "reportType",
editField: "reportType",
inputType: "anji-select",
fieldTableRowRenderer: row => {
return this.getDictLabelByCode("REPORT_TYPE", row["reportType"]);
},
anjiSelectOption: {
dictCode: "REPORT_TYPE"
},
rules: [
{ required: true, message: "请输入报表类型", trigger: "blur" },
{ min: 1, max: 20, message: "不超过20个字符", trigger: "blur" }
],
disabled: "disableOnEdit"
},
{
label: "制作人", //名称
placeholder: "",
field: "reportAuthor",
editField: "reportAuthor",
inputType: "input",
rules: [
{ min: 1, max: 100, message: "不超过100个字符", trigger: "blur" }
],
disabled: false
},
{
label: "描述", //报表描述
placeholder: "",
field: "reportDesc",
editField: "reportDesc",
inputType: "input",
rules: [
{ min: 1, max: 255, message: "不超过255个字符", trigger: "blur" }
],
disabled: false
},
{
label: "状态", //0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG
placeholder: "",
field: "enableFlag",
fieldTableRowRenderer: row => {
return this.getDictLabelByCode("ENABLE_FLAG", row["enableFlag"]);
},
colorStyle: {
0: "table-danger", //key为editField渲染的值字典的提交值'红色': 'danger','蓝色': 'primary','绿色': 'success','黄色': 'warning','灰色': 'info','白色'''
1: "table-success"
},
editField: "enableFlag",
inputType: "anji-select",
anjiSelectOption: {
dictCode: "ENABLE_FLAG"
},
rules: [],
disabled: false,
defaultValue: 1
},
{
label: "删除标记", //0--未删除 1--已删除 DIC_NAME=DELETE_FLAG
placeholder: "",
field: "deleteFlag",
editHide: true,
editField: "deleteFlag",
tableHide: true,
inputType: "input",
rules: [],
disabled: false
},
{
label: "报表缩略图", //报表缩略图
placeholder: "",
field: "reportImage",
editField: "reportImage",
inputType: "anji-upload",
tableHide: true,
anjiUpload: {
limit: 1 // 文件大小 Number 类型
}
}
],
// 弹出框表单对应的值有改动时
// formData 整个表单通过编辑打开弹出框根据主键查询数据时fieldName, fieldVal, fieldExtend为空
// fieldName 触发修改的input name
// fieldVal input最新值
// fieldExtend 对于select型的扩展值
formChange: (formData, fieldName, fieldVal, fieldExtend) => {
console.log(formData);
if (fieldName == "reportImage") {
if (fieldVal.length > 0) {
formData["reportImage"] = fieldVal && fieldVal[0].url;
} else {
formData["reportImage"] = "";
}
}
}
},
// 复制
copyVisible: false,
rowData: {}
};
},
created() {},
methods: {
handleOpenDialog1() {
alert("自定义按钮1点击事件");
},
// 预览
preview(val) {
let routePath = "";
if (val.reportType === "report_excel") {
routePath = "/excelreport/viewer";
} else {
routePath = "/bigscreen/viewer";
}
let routeUrl = this.$router.resolve({
path: routePath,
query: { reportCode: val.reportCode }
});
window.open(routeUrl.href, "_blank");
},
// 设计
design(val) {
let routePath = "";
if (val.reportType === "report_excel") {
routePath = "/excelreport/designer";
} else {
routePath = "/bigscreen/designer";
}
let routeUrl = this.$router.resolve({
path: routePath,
query: {
reportCode: val.reportCode
}
});
window.open(routeUrl.href, "_blank");
},
//分享
shareReport(val) {
this.reportCodeForShareDialog = val.reportCode;
this.reportNameForShareDialog = val.reportName;
this.reportTypeForShareDialog = val.reportType;
this.visibleForShareDialog = true;
},
checkReport(val) {
if ("report_screen" == val.reportType) {
return true;
}else {
return false;
}
},
checkExcel(val) {
if ("report_excel" == val.reportType) {
return true;
}else {
return false;
}
},
//复制
async copyReport(val) {
this.copyVisible = true;
this.rowData = val;
// const { code } = await reportCopy(val);
// if (code != "200") {
// return;
// }
// this.$message.success("复制成功");
// this.$refs.listPage.handleQueryForm("query");
},
close() {
this.copyVisible = false;
this.$refs.listPage.handleQueryForm("query");
}
}
};
</script>