Browse Source

Merge remote-tracking branch 'origin/qin_25'

qin_26
herenshan112 2 months ago
parent
commit
31d8a8bc66
  1. 79
      src/api/DesignForm/tableButton.ts
  2. 2
      src/api/DesignForm/types.ts
  3. 19
      src/api/chart/index.ts
  4. BIN
      src/assets/image/kong.png
  5. 21
      src/components/DesignForm/tableListPage/index.vue
  6. 39
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/bar.vue
  7. 23
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/barRace.vue
  8. 48
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/line.vue
  9. 24
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/pie.vue
  10. 27
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/radar.vue
  11. 2
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/target.vue
  12. 17
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/container.vue
  13. 301
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/drwePage/containerPage.vue
  14. 98
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/drwePage/leftPage.vue
  15. 125
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/myContChart.vue
  16. 270
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/mydialog.vue
  17. 203
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/mydialogCopy.vue
  18. 118
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/seeContChart.vue
  19. 2
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue

79
src/api/DesignForm/tableButton.ts

@ -1,4 +1,8 @@
import { EpPropMergeType } from "element-plus/es/utils";
export interface tableButton {
help: any;
children: any;
control: any;
id?: string;
name?: string;
@ -18,6 +22,11 @@ export interface optionsInfo {
value: string;
}
export interface attrButton {
activeValue: any;
inactiveValue: any;
fieldClass: string;
auxiliary: any;
value: EpPropMergeType<(new (...args: any[]) => string | number) | (() => string | number | null | undefined) | ((new (...args: any[]) => string | number) | (() => string | number | null | undefined))[], unknown, unknown>;
label: string;
key: string;
type: string;
@ -28,38 +37,63 @@ export interface attrButton {
export const tableButtonList :attrButton[] = [
{
label: "新增",
key:"newAdd",
type:"primary",
key: "newAdd",
type: "primary",
size: "small",
icon: "editPen"
icon: "editPen",
value: undefined,
activeValue: undefined,
inactiveValue: undefined,
fieldClass: "",
auxiliary: undefined
},
{
label: "导入",
key:"import",
type:"danger",
key: "import",
type: "danger",
size: "small",
icon: "upload"
icon: "upload",
value: undefined,
activeValue: undefined,
inactiveValue: undefined,
fieldClass: "",
auxiliary: undefined
},
{
label: "导出",
key:"export",
type:"primary",
key: "export",
type: "primary",
size: "small",
icon: "download"
icon: "download",
value: undefined,
activeValue: undefined,
inactiveValue: undefined,
fieldClass: "",
auxiliary: undefined
},
{
label: "批量删除",
key: "del",
type: "danger",
size: "small",
icon: "delete"
icon: "delete",
value: undefined,
activeValue: undefined,
inactiveValue: undefined,
fieldClass: "",
auxiliary: undefined
},
{
label: "生成二维码",
key: "showQrCode",
type: "primary",
size: "small",
icon: "setUp"
icon: "setUp",
value: undefined,
activeValue: undefined,
inactiveValue: undefined,
fieldClass: "",
auxiliary: undefined
}
]
//记录操作
@ -69,21 +103,36 @@ export const tableLogButtonList :attrButton[] = [
key: "look",
type: "success",
size: "small",
icon: "view"
icon: "view",
value: undefined,
activeValue: undefined,
inactiveValue: undefined,
fieldClass: "",
auxiliary: undefined
},
{
label: "编辑",
key: "edit",
type: "warning",
size: "small",
icon: "delete"
icon: "delete",
value: undefined,
activeValue: undefined,
inactiveValue: undefined,
fieldClass: "",
auxiliary: undefined
},
{
label: "删除",
key: "del",
type: "danger",
size: "small",
icon: "delete"
icon: "delete",
value: undefined,
activeValue: undefined,
inactiveValue: undefined,
fieldClass: "",
auxiliary: undefined
}
];
//记录操作
@ -142,6 +191,7 @@ export const diaOrDrawer = [
//表单结构
export interface FormPageList {
tableProps: any;
columns: tableButton[],
config: any,
controlBtn:tableButton[],
@ -312,6 +362,7 @@ export const weekForDay = [
]
export interface viewPageType {
card: any;
list:{
status:boolean,

2
src/api/DesignForm/types.ts

@ -224,6 +224,8 @@ export interface appSetUpContent{
}
//图标结构
export interface echatsViews {
widthBox: number
styles: any
uuid:string;
type:string;
title:string;

19
src/api/chart/index.ts

@ -31,3 +31,22 @@ export function analyzeChartData(data?: any) {
data: data
});
}
//初始化个人图表配置及数据
export function getMyChartSetupAndData(data?: any) {
return request({
url: "/systemapi/chart/getMyChartSetupAndData",
method: 'post',
data: data
});
}
//保存跟人图表设置
export function saveMyBiCharts(data?: any) {
return request({
url: "/systemapi/chart/saveMyBiCharts",
method: 'post',
data: data
});
}

BIN
src/assets/image/kong.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

21
src/components/DesignForm/tableListPage/index.vue

@ -17,6 +17,7 @@ import {
FormPageList,
FormPageConfig,
viewPageType,
tableButton,
} from "@/api/DesignForm/tableButton";
import {
inputUnit,
@ -47,6 +48,7 @@ import MapPage from "@/components/DesignForm/app/mapPage.vue";
import CalendarPage from "@/components/DesignForm/app/calendar/calendar1/calendarPage.vue";
import SearchSelect from "@/components/DesignForm/app/calendar/selectSearch.vue";
import ContainerPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/container.vue";
import SeeContChart from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/seeContChart.vue";
const props = withDefaults(
defineProps<{
@ -542,7 +544,7 @@ function isAllCharactersNumbers(str: string) {
@ 时间: 2024-04-01 11:36:07
@ 功能: 功能按钮动作
*/
const setUpClick = (val: string, id: string) => {
const setUpClick = (val: any, id: string) => {
// console.log("",val,"----id----->",props.versionid,"-----formId---->",props.versiontitle)
if (val.key == "newAdd") {
drawerWith.value = container.value?.clientWidth;
@ -816,7 +818,7 @@ const setUpClick = (val: string, id: string) => {
id: idList.value,
isTrue: 2,
};
softDeletion(sendData).then((data) => {
softDeletion(sendData).then((data: { mag: any; }) => {
// console.log('cancel!',data)
ElNotification({
title: "提示信息!",
@ -1497,10 +1499,10 @@ const tabsView = (val: any, types: number) => {
const writeListTitle = (val: any, viewConfig: any) => {
// console.log("--1-->",val)
// console.log("--2-->",viewConfig)
var titleAry = [];
var titleAry: any[] = [];
if (viewConfig.form && viewConfig.form.title) {
if (viewConfig.form.title.length > 0) {
viewConfig.form.title.forEach((item, index) => {
viewConfig.form.title.forEach((item: string | number, index: any) => {
// console.log("--"+index+"-->",val[item])
if (val[item]) {
titleAry.push(val[item]);
@ -1564,7 +1566,7 @@ function optionsValue4Get4(data: any, fieldName: any) {
@ 时间: 2024-11-29 13:46:36
@ 功能: 获取级联选择值
*/
const judjeCascader = (val: any[], options: any[]) => {
const judjeCascader = (val: any, options: any[]) => {
if (val.length < 0) return "";
let valAry = stringToObj(val);
console.log("获取级联选择值", stringToObj(val), val.length, options);
@ -1617,7 +1619,7 @@ const diGuiJilian = (val: any, options: any[]) => {
@ 时间: 2024-05-21 16:00:41
@ 功能: 定义自定义表头
*/
const readerColumn = (column: any, isSun: int) => {
const readerColumn = (column: any, isSun: number) => {
if (isSun != 1) {
let labelLong = column.label.length; // label
@ -1671,7 +1673,7 @@ const tableChildren = (field:string,dataList:any) => {
let jieguo = ""
if(Array.isArray(dataList)){
dataList.forEach((item:any,key:string) => {
dataList.forEach((item:any) => {
if(isObject(item)){
@ -1692,7 +1694,7 @@ jieguo = jieguo+"<div style='width: 100%;height: 1px;border-bottom: 1px solid #E
}
return jieguo
}
const isObject = (obj) => {
const isObject = (obj: any) => {
return typeof obj === "object";
}
</script>
@ -2268,11 +2270,12 @@ const isObject = (obj) => {
/>
</el-col>
<el-col v-if="viewType == 7" :span="24">
<ContainerPath
<SeeContChart
:echats-views="echatsViewsdf"
:table-key="formBasicConfig.name"
:types="1"
/>
</el-col>
<el-col :span="24" style="display: none"> </el-col>
<el-col :span="24" style="display: none">

39
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/bar.vue

@ -5,8 +5,8 @@
-->
<template>
<div>
<el-space wrap class="spaceBox">
<div ref="biTitleBox">
<el-space wrap class="spaceBox">
<svg-icon icon-class="zydq" :size="20" />
<el-text>{{ props.data.title }}</el-text>
</el-space>
@ -133,6 +133,9 @@ const props = withDefaults(
},
}
);
const setupkuandu = ref(props.kuandu>60?props.kuandu-60:600)
const myChart = ref<any>();
const propsUuid = ref(null)
const seriesAnlay = (listVal: any[]) => {
@ -149,6 +152,17 @@ const seriesAnlay = (listVal: any[]) => {
}
};
watch(()=>props.kuandu,(val:number)=>{
if(val>160){
setupkuandu.value = val-60
}else{
setupkuandu.value = 600
}
drawPictures()
},{
deep:true
})
/**
@ 作者: 秦东
@ 时间: 2025-06-26 11:34:21
@ -157,14 +171,19 @@ const seriesAnlay = (listVal: any[]) => {
const drawPictures = () => {
if (props.uuid && props.uuid != "") {
console.log("改变狂赌---------->",props.kuandu,setupkuandu.value)
myChart.value.resize(
{
width: setupkuandu.value + 'px'
}
);
analyzeChartData({
tableKey: props.tableKey,
chartId: props.uuid,
setConfig: props.data,
}).then((data) => {
console.log("火1111111兔", data);
if (data.code == 0 && data.data != null) {
if (data.code == 0 && data.data != null && data.data.series != null) {
// let optVal = data.data;
// let optVal = {
// tooltip: {
@ -201,9 +220,12 @@ const drawPictures = () => {
xAxis: data.data.xAxis,
series: seriesAnlay(data.data.series),
};
myChart.value.setOption(optChart);
// myChart.value.resize();
} else {
myChart.value.setOption({
grid: {
left: "2%",
@ -232,7 +254,7 @@ const drawPictures = () => {
},
],
});
// myChart.value.resize();
}
});
// myChart.value.setOption({
@ -264,7 +286,7 @@ const drawPictures = () => {
// ],
// });
console.log("画图完毕---->", props);
myChart.value.resize();
// myChart.value.resize();
}else {
myChart.value.setOption({
grid: {
@ -334,7 +356,12 @@ const searBut = (val: string) => {
const onSubmit = () => {
drawPictures();
};
const biTitleBox = ref(null)
onMounted(() => {
props.kuandu = biTitleBox.value.offsetWidth
setupkuandu.value = biTitleBox.value.offsetWidth
if(propsUuid.value){
myChart.value = echarts.init(propsUuid.value);
myChart.value.setOption({

23
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/barRace.vue

@ -18,6 +18,7 @@ const props = withDefaults(
uuid: string;
data: echatsViews;
tableKey: string;
kuandu:number;
}>(),
{
uuid: () => {
@ -37,6 +38,11 @@ const barRaceChar = ref(null)
*/
const drawBarracetures = () => {
if (props.uuid && props.uuid != "") {
myChart.value.resize(
{
width: setupkuandu.value + 'px'
}
);
// myChart.value = echarts.init(document.getElementById(props.uuid) as HTMLDivElement);
analyzeChartData({
tableKey: props.tableKey,
@ -150,7 +156,22 @@ watch(
},
{ deep: true }
);
watch(()=>props.kuandu,(val:number)=>{
if(val>160){
setupkuandu.value = val-60
}else{
setupkuandu.value = 600
}
drawBarracetures()
},{
deep:true
})
const setupkuandu = ref(props.kuandu>60?props.kuandu-60:600)
const biTitleBoxRace = ref(null)
onMounted(() => {
props.kuandu = biTitleBoxRace.value.offsetWidth
setupkuandu.value = biTitleBoxRace.value.offsetWidth
if(barRaceChar.value){
myChart.value = echarts.init(barRaceChar.value);
myChart.value.setOption({
@ -181,7 +202,7 @@ onUnmounted(() => {
})
</script>
<template>
<div>
<div ref="biTitleBoxRace">
<el-space wrap class="spaceBox">
<svg-icon icon-class="zydq" :size="20" />
<el-text>{{ props.data.title }}</el-text>

48
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/line.vue

@ -17,6 +17,7 @@ const props = withDefaults(
uuid: string;
data: echatsViews;
tableKey: string;
kuandu:number;
}>(),
{
uuid: () => {
@ -30,7 +31,18 @@ const props = withDefaults(
const myChartPie = ref<any>();
const lineChar = ref(null)
const pinhuaOrzejiao = ref(false);
const setupkuandu = ref(props.kuandu>60?props.kuandu-60:600)
watch(()=>props.kuandu,(val:number)=>{
if(val>160){
setupkuandu.value = val-60
}else{
setupkuandu.value = 600
}
drawLine()
},{
deep:true
})
/**
@ 作者: 秦东
@ 时间: 2025-08-04 14:31:20
@ -61,6 +73,11 @@ watch(
*/
const drawLine = () => {
if (props.uuid && props.uuid != "") {
myChartPie.value.resize(
{
width: setupkuandu.value + 'px'
}
);
// myChartPie.value = echarts.init(
// document.getElementById(props.uuid) as HTMLDivElement
// );
@ -70,7 +87,7 @@ const drawLine = () => {
setConfig: props.data,
}).then((data) => {
console.log("火兔", data);
if (data.code == 0 && data.data != null) {
if (data.code == 0 && data.data != null && data.data.series != null) {
let optChart = {
grid: {
left: "2%",
@ -175,7 +192,10 @@ watch(
},
{ deep: true }
);
const biTitleBoxLine = ref(null)
onMounted(() => {
props.kuandu = biTitleBoxLine.value.offsetWidth
setupkuandu.value = biTitleBoxLine.value.offsetWidth
if(lineChar.value){
myChartPie.value = echarts.init(lineChar.value);
myChartPie.value.setOption({
@ -203,15 +223,35 @@ onUnmounted(() => {
myChartPie.value.dispose(); //
}
})
//
const pickBar = () => {
props.data.type="bar"
drawLine();
}
//线
const pickLine = () =>{
console.log("切换折线-》",props.data.type)
props.data.type="line"
drawLine();
}
</script>
<template>
<div>
<div ref="biTitleBoxLine">
<el-space wrap class="spaceBox leftOrRight">
<div>
<svg-icon icon-class="zydq" :size="20" />
<el-text>{{ props.data.title }}</el-text>
</div>
<el-switch v-model="pinhuaOrzejiao" active-text="平滑" inactive-text="折角" />
<div class="qiehuan">
<el-space wrap class="spaceBox">
<el-switch v-model="pinhuaOrzejiao" active-text="平滑" inactive-text="折角" />
<svg-icon icon-class="chart" :size="20" @click="pickBar" />
<svg-icon icon-class="tb-zxt" :size="20" @click="pickLine" />
</el-space>
</div>
</el-space>
<el-form
v-if="props.data.search"

24
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/pie.vue

@ -17,6 +17,7 @@ const props = withDefaults(
uuid: string;
data: echatsViews;
tableKey: string;
kuandu:number;
}>(),
{
uuid: () => {
@ -29,6 +30,7 @@ const props = withDefaults(
);
const myChartPie = ref<any>();
const pieChar = ref(null)
const setupkuandu = ref(props.kuandu>60?props.kuandu-60:600)
/**
@ 作者: 秦东
@ 时间: 2025-06-26 11:34:21
@ -36,7 +38,11 @@ const pieChar = ref(null)
*/
const drawPie = () => {
if (props.uuid && props.uuid != "") {
myChartPie.value.resize(
{
width: setupkuandu.value + 'px'
}
);
analyzeChartData({
tableKey: props.tableKey,
chartId: props.uuid,
@ -152,7 +158,21 @@ watch(
},
{ deep: true }
);
watch(()=>props.kuandu,(val:number)=>{
if(val>160){
setupkuandu.value = val-60
}else{
setupkuandu.value = 600
}
drawPie()
},{
deep:true
})
const biTitleBoxPie = ref(null)
onMounted(() => {
props.kuandu = biTitleBoxPie.value.offsetWidth
setupkuandu.value = biTitleBoxPie.value.offsetWidth
if(pieChar.value){
myChartPie.value = echarts.init(pieChar.value);
myChartPie.value.setOption({
@ -187,7 +207,7 @@ onUnmounted(() => {
})
</script>
<template>
<div>
<div ref="biTitleBoxPie">
<el-space wrap class="spaceBox">
<svg-icon icon-class="zydq" :size="20" />
<el-text>{{ props.data.title }}</el-text>

27
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/radar.vue

@ -17,6 +17,7 @@ const props = withDefaults(
uuid: string;
data: echatsViews;
tableKey: string;
kuandu:number;
}>(),
{
uuid: () => {
@ -29,6 +30,7 @@ const props = withDefaults(
);
const myChartPie = ref<any>();
const radarChar = ref(null)
const setupkuandu = ref(props.kuandu>60?props.kuandu-60:600)
/**
@ 作者: 秦东
@ 时间: 2025-06-26 11:34:21
@ -39,6 +41,11 @@ const drawRadar = () => {
// myChartPie.value = echarts.init(
// document.getElementById(props.uuid) as HTMLDivElement
// );
myChartPie.value.resize(
{
width: setupkuandu.value + 'px'
}
);
analyzeChartData({
tableKey: props.tableKey,
chartId: props.uuid,
@ -138,9 +145,23 @@ watch(
},
{ deep: true }
);
watch(()=>props.kuandu,(val:number)=>{
if(val>160){
setupkuandu.value = val-60
}else{
setupkuandu.value = 600
}
drawRadar()
},{
deep:true
})
const biTitleBoxRadar = ref(null)
onMounted(() => {
if(pieChar.value){
myChartPie.value = echarts.init(pieChar.value);
props.kuandu = biTitleBoxRadar.value.offsetWidth
setupkuandu.value = biTitleBoxRadar.value.offsetWidth
if(radarChar.value){
myChartPie.value = echarts.init(radarChar.value);
myChartPie.value.setOption({
grid: {
left: "2%",
@ -195,7 +216,7 @@ onUnmounted(() => {
})
</script>
<template>
<div>
<div ref="biTitleBoxRadar">
<el-space wrap class="spaceBox">
<svg-icon icon-class="zydq" :size="20" />
<el-text>{{ props.data.title }}</el-text>

2
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/target.vue

@ -1,4 +1,4 @@
<!--
a<!--
@ 作者: 秦东
@ 时间: 2025-06-25 15:59:10
@ 备注: 指标图

17
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/container.vue

@ -63,7 +63,7 @@ const type = computed({
return newVal;
},
});
const biBox = ref(null)
const state = reactive({
clone: true, // clone
gridAdd: false,
@ -174,9 +174,23 @@ const getFormItemStyle = (ele: echatsViews) => {
return AnalysisCss(ele.styles.divStyle);
}
};
// const darwBodyWidth = ref(0)
onMounted(() => {
// dimMeaList();
// nextTick(()=>{
// console.log("-->", biBox.value);
// console.log("", biBox.value.offsetWidth);
kuandu.value = biBox.value.offsetWidth
// console.log("-->", kuandu.value);
// })
// props.state.echatsViews.push(echartsInfo);
});
</script>
<template>
<div ref="biBox">
<draggable
itemKey="id"
:list="dataList"
name="fade"
@ -271,6 +285,7 @@ const getFormItemStyle = (ele: echatsViews) => {
</div>
</template>
</draggable>
</div>
</template>
<style lang="scss" scoped>
.drag {

301
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/drwePage/containerPage.vue

@ -0,0 +1,301 @@
<!--
@ 作者: 秦东
@ 时间: 2025-06-24 14:02:25
@ 备注: 画板
-->
<script lang="ts" setup>
import { echatsViews } from "@/api/DesignForm/types";
import { Md5 } from "ts-md5";
import Draggable from "vuedraggable-es";
import { useDesignEchartsStore } from "@/store/DesignForm/designForm";
import { jsonParseStringify } from "@/utils/DesignForm";
import { AnalysisCss } from "@/components/DesignForm/public/form/calculate/cssInfo.ts";
//
import BarPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/bar.vue";
import BarRacePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/barRace.vue";
import LinePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/line.vue";
import PiePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/pie.vue";
import RadarPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/radar.vue";
import TargetPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/target.vue";
const props = defineProps({
tableKey: {
type: String,
default: "",
},
types: {
type: Number,
default: 5,
},
echatsViews: {
type: Array,
default() {
return [];
},
},
dimAry: {
type: Array,
default() {
return [];
},
},
meaAry: {
type: Array,
default() {
return [];
},
},
kuandu: {
type: Number,
default: 500,
}
});
const dataList = computed({
get: () => {
return props.echatsViews;
},
set: (newVal: any) => {
return newVal;
},
});
const type = computed({
get: () => {
return props.types;
},
set: (newVal: any) => {
return newVal;
},
});
const state = reactive({
clone: true, // clone
gridAdd: false,
});
const store = useDesignEchartsStore() as any; //
const activeKey = computed(() => {
return store.activeKey;
});
const pickEcharts = ref<echatsViews>();
const groupBox = ref(null)
const draggableAdd = (evt: any) => {
const newIndex = evt.newIndex;
const key = new Date().getTime().toString();
const obj: any = dataList.value[newIndex];
// console.log("-----1------->", evt);
// console.log("-----2------->", key);
// console.log("-----3------->", obj);
// console.log("-----4------->", newIndex);
if (!obj.uuid) {
obj.uuid = obj.type + key;
}
groupClick(obj);
};
//
const linksIf = (obj: FormList) => {
// console.log("-----1------->", obj);
return true;
};
const getGroupName = (item: any) => {
console.log("获取编号-----1------->", groupBox.vlaue);
if (item.uuid) {
return item.uuid;
} else {
let md5Object: any = new Md5();
md5Object.appendAsciiStr(JSON.stringify(item));
let md5Str = md5Object.end();
// item.uuid = md5Str;
return md5Str;
}
};
const groupClick = (item: any, ele?: string) => {
console.log("获取编号-----2------->", item,ele);
// if (props.types == 5) {
store.setActiveKey(getGroupName(item));
store.setControlAttr(item);
// grid
state.gridAdd = item.type === "grid";
// state.clone = !notNested(item.type)
// state.clone = !notNestedTableFlex(item.type);
pickEcharts.value = item;
// }
console.log("点击激活当前--->", props.types, item, ele);
};
//
const click = (action: string, index: number, item?: any) => {
// if (type.value !== 5) {
// return; //
// }
// console.log("--->", action, index, item);
if (action === "clone") {
const key = item.type + new Date().getTime().toString();
const newItem = jsonParseStringify(item);
dataList.value.splice(index, 0, Object.assign(newItem, { uuid: key }));
} else if (action === "del") {
console.log("要删除的对象------->", index);
dataList.value.splice(index, 1);
//
store.setActiveKey("");
store.setControlAttr({});
} else if (action === "gridAdd") {
item.columns.push({
list: [],
attr: { span: 12 },
});
} else if (action === "delGridChild") {
item.splice(index, 1);
}
};
const kuandu = ref(0);
//
const getFormItemStyle = (ele: echatsViews) => {
console.log("返回栅格宽度311---->", ele);
if (ele.widthBox == 0) {
kuandu.value = "auto";
return { width: "auto", margin: "0 5px" };
}
if (ele.widthBox > 24) {
ele.widthBox = 24;
}
if (ele.widthBox < 0) {
ele.widthBox = 0;
}
if (ele.widthBox) {
if (ele.styles?.divStyle) {
ele.styles.divStyle.width = (ele.widthBox / 24) * 100 + "%";
// console.log("311--2-->", ele.styles.divStyle);
kuandu.value = (ele.widthBox / 24) * 100 + "%";
return AnalysisCss(ele.styles.divStyle);
}
kuandu.value = (ele.widthBox / 24) * 100 + "%";
// console.log("311--5-->", kuandu.value);
return { width: (ele.widthBox / 24) * 100 + "%" };
}
if (ele.styles?.divStyle) {
// console.log("3", AnalysisCss(ele.styles.divStyle));
return AnalysisCss(ele.styles.divStyle);
}
};
</script>
<template>
<draggable
itemKey="id"
:list="dataList"
name="fade"
class="drag"
v-bind="{
group: 'echartsMyForm',
ghostClass: 'ghost',
animation: 200,
handle: '.drag-move',
disabled: type !== 5,
}"
@add="draggableAdd"
>
<template #item="{ element, index }">
<div
ref="groupBox"
class="group"
:class="{
['group-' + element.type]: true,
active: activeKey === getGroupName(element),
}"
@click.stop="groupClick(element)"
v-if="linksIf(element)"
>
<BarPage
v-if="element.type == 'bar'"
:data="element"
:table-key="tableKey"
:uuid="element.uuid"
:kuandu="props.kuandu"
/>
<BarRacePage
v-if="element.type == 'barRace'"
:data="element"
:uuid="element.uuid"
:table-key="tableKey"
:kuandu="props.kuandu"
/>
<LinePage
v-if="element.type == 'line'"
:data="element"
:table-key="tableKey"
:uuid="element.uuid"
:kuandu="props.kuandu"
/>
<PiePage
v-if="element.type == 'pie'"
:data="element"
:table-key="tableKey"
:uuid="element.uuid"
:kuandu="props.kuandu"
/>
<RadarPage
v-if="element.type == 'radar'"
:data="element"
:table-key="tableKey"
:uuid="element.uuid"
:kuandu="props.kuandu"
/>
<TargetPage
v-if="element.type == 'target'"
:data="element"
:uuid="element.uuid"
:table-key="tableKey"
:dim-ary="props.dimAry"
:mea-ary="props.meaAry"
:kuandu="props.kuandu"
/>
<template v-if="type === 5">
<div class="drag-control">
<div class="item-control">
<i
class="icon-plus"
@click.stop="click('gridAdd', index, element)"
v-if="state.gridAdd"
title="添加列"
></i>
<i
class="icon-clone"
@click.stop="click('clone', index, element)"
v-if="state.clone"
title="克隆"
></i>
<i class="icon-del" @click.stop="click('del', index)"></i>
</div>
<div class="drag-move icon-move"></div>
</div>
<!-- <div class="tooltip" style="display: black;">{{ element.name }}</div> -->
<div class="tooltip" style="display: black"></div>
</template>
</div>
</template>
</draggable>
</template>
<style lang="scss" scoped>
.drag {
background: #ffffff;
border: 1px dashed #999;
height: calc(100vh - 105px);
overflow-y: auto;
overflow-x: hidden;
position: relative;
}
.tiaojian {
width: 100%;
height: 50px;
}
</style>

98
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/drwePage/leftPage.vue

@ -0,0 +1,98 @@
<!--
@ 作者: 秦东
@ 时间: 2025-09-28 08:40:20
@ 备注:
-->
<script lang='ts' setup>
import Draggable from "vuedraggable-es";
import { echartsUnitList } from "@/components/DesignForm/echarts/index";
import { jsonParseStringify } from "@/utils/DesignForm";
/**
@ 作者: 秦东
@ 时间: 2024-05-15 10:15:14
@ 功能: 克隆选中的组件数据结构
*/
const clone = (origin: any) => {
console.log("new--->克隆选中的组件数据结构", origin);
origin.uuid = origin.type + "_" + new Date().getTime().toString();
return jsonParseStringify(origin);
};
</script>
<template>
<div class="echartLeft">
<draggable
v-model="echartsUnitList"
tag="ul"
:group="{ name: 'echartsMyForm', pull: 'clone', put: false }"
ghost-class="ghost"
:sort="false"
:clone="clone"
item-key="mykey123"
>
<template #item="{ element }">
<li :span="12">
<el-card class="cardBox" style="width: 100%" shadow="always">
<svg-icon :icon-class="element.icon" :size="100" />
<el-text class="mx-1" size="large">{{ element.title }}</el-text>
</el-card>
</li>
</template>
</draggable>
</div>
</template>
<style lang='scss' scoped>
.echartLeft {
width: 100%;
ul {
position: relative;
overflow: hidden;
margin: 0;
padding-top: 25px;
li {
width: 46%;
position: relative;
float: left;
left: 0;
text-align: center;
margin-left: 3%;
cursor: pointer;
}
}
}
.common-layout {
width: 100%;
.el-aside {
height: calc(100vh - 40px);
padding: 0 0px;
.cardBox {
padding: 0px;
margin-bottom: 20px;
}
:deep .el-card__body {
text-align: center;
padding: 0 0 10px 0;
cursor: position;
}
}
.el-main {
padding: 10px;
border-right: 1px solid rgb(221.7, 222.6, 224.4);
border-left: 1px solid rgb(221.7, 222.6, 224.4);
.drawingBoard {
background-color: rgb(232.8, 233.4, 234.6);
height: 100%;
}
}
.tubiaoRow {
margin-top: 20px;
overflow: hidden;
}
.svgClass {
width: 100%;
}
}
</style>

125
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/myContChart.vue

@ -0,0 +1,125 @@
<!--
@ 作者: 秦东
@ 时间: 2025-09-26 09:02:14
@ 备注: 个人BI报表
-->
<script lang='ts' setup>
import Mydialog from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/mydialog.vue";
//
import BarPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/bar.vue";
import BarRacePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/barRace.vue";
import LinePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/line.vue";
import PiePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/pie.vue";
import RadarPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/radar.vue";
import TargetPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/target.vue";
import KongData from '@/assets/image/kong.png'
const props = defineProps({
tableKey: {
type: String,
default: "",
},
chartId: {
type: String,
default: "",
},
chartView:{
type: Array,
default() {
return [];
},
}
})
const dataList = computed({
get: () => {
return props.chartView;
},
set: (newVal: any) => {
return newVal;
},
})
const openClose = ref(false)
/**
@ 作者: 秦东
@ 时间: 2025-09-26 11:49:19
@ 功能: 打开窗口
*/
const openDialog = () => {
openClose.value = true
}
</script>
<template>
<div class="fullBox">
<div class="fullBox"><el-button type="primary" @click="openDialog">设计个人BI报表</el-button></div>
<div class="fullBox">
<div v-if="props.chartId!=''" class="fullBox">
<div v-for="item in dataList">
<BarPage
v-if="item.type == 'bar'"
:data="item"
:table-key="tableKey"
:uuid="item.uuid"
/>
<BarRacePage
v-if="item.type == 'barRace'"
:data="item"
:uuid="item.uuid"
:table-key="tableKey"
/>
<LinePage
v-if="item.type == 'line'"
:data="item"
:table-key="tableKey"
:uuid="item.uuid"
/>
<PiePage
v-if="item.type == 'pie'"
:data="item"
:table-key="tableKey"
:uuid="item.uuid"
/>
<RadarPage
v-if="item.type == 'radar'"
:data="item"
:table-key="tableKey"
:uuid="item.uuid"
/>
<TargetPage
v-if="item.type == 'target'"
:data="item"
:uuid="item.uuid"
:table-key="tableKey"
/>
</div>
</div>
<img v-else class="fullBox" :src="KongData"></img>
</div >
<Mydialog v-if="openClose" v-model:show="openClose" :chart-view="dataList" :table-key="tableKey" :chart-id="myChartId" />
</div>
</template>
<style lang='scss' scoped>
.fullBox{
width: 100%;
:deep .el-dialog{
padding: 5px;
}
}
.diaBox{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.faButBox{
font-size: 15px;
cursor: pointer;
}
.diaTitle{
font-size: 20px;
}
}
</style>

270
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/mydialog.vue

@ -0,0 +1,270 @@
<!--
@ 作者: 秦东
@ 时间: 2025-09-26 14:07:42
@ 备注: 个人BI设计器
-->
<script lang='ts' setup>
import { dimMeaInfo } from "@/api/chart/type";
import { dimMeaFormTable, countChartValue, getMyChartSetupAndData,saveMyBiCharts } from "@/api/chart/index";
import { useDesignEchartsStore } from "@/store/DesignForm/designForm";
import LeftPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/drwePage/leftPage.vue";
import ContainerPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/drwePage/containerPage.vue";
import RightPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/right.vue";
const props = defineProps({
tableKey: {
type: String,
default: "",
},
chartId: {
type: String,
default: "",
},
show:{
type: Boolean,
default: false,
},
chartView:{
type: Array,
default() {
return [];
},
}
})
const emits = defineEmits(["update:show"]);
const openClose = computed({
get: () => props.show,
set: (val) => {
emits("update:show", val);
},
});
const maxWindows = ref(true)
const dimAry = ref<dimMeaInfo[]>([]);
const meaAry = ref<dimMeaInfo[]>([]);
const sunDimAry = ref<any>([]);
const sunMeaAry = ref<any>([]);
const darwBody = ref(null)
const darwBodyWidth = ref(0)
const store = useDesignEchartsStore() as any; //
const dataList = ref(props.chartView)
const increment = inject('haveMyBiCherBi');
/**
@ 作者: 秦东
@ 时间: 2025-09-26 11:48:38
@ 功能: 关闭窗口
*/
const closeDialog = () => {
console.log("清空")
dimAry.value = []
meaAry.value = []
sunDimAry.value = []
sunMeaAry.value = []
props.chartView = []
dataList.value=[]
//
store.setActiveKey("");
store.setControlAttr({});
increment();
emits("update:show", false);
}
/**
@ 作者: 秦东
@ 时间: 2025-06-27 13:06:25
@ 功能: 获取维度义量化字段
*/
const dimMeaList = () => {
// console.log("----------------------->", props);
dimMeaFormTable({ id: props.tableKey }).then((data) => {
// console.log("----------------------->", data);
dimAry.value = data.data.dimList;
meaAry.value = data.data.meaList;
sunDimAry.value = data.data.SunDimListAry;
sunMeaAry.value = data.data.SunMeaListAry;
});
/*获取视图数据*/
getMyChartSetupAndData({ id: props.tableKey }).then((data) => {
console.log("获取视图数据----------------------->", data);
if (data.code == 0) {
props.chartView = data.data.chartList;
dataList.value = data.data.chartList;
}
});
};
onMounted(() => {
dimMeaList();
nextTick(()=>{
console.log("提交图标设置-->", darwBody.value);
console.log("提交图标设置", darwBody.value.offsetWidth);
darwBodyWidth.value = darwBody.value.offsetWidth
})
// props.state.echatsViews.push(echartsInfo);
});
const saveLoading = ref(false)
/**
@ 作者: 秦东
@ 时间: 2025-09-26 16:23:50
@ 功能: 保存个人设计
*/
const saveChart = () => {
saveLoading.value = true
console.log("提交图标设置", props);
console.log("提交图标设置------------dataList----->", dataList);
saveMyBiCharts({
tableKey: props.tableKey,
chartList: dataList.value,
})
.then((data) => {
console.log("获取视图数据", data);
saveLoading.value = false;
})
.finally(() => {
saveLoading.value = false;
closeDialog();
});
}
//&
const openAllOrSmiall = (val:boolean) => {
console.log("全屏&还原", val);
console.log("全屏&还原------>", darwBody.value.offsetWidth);
if(val){
maxWindows.value = false
nextTick(()=>{
darwBodyWidth.value = darwBody.value.offsetWidth
})
}else{
maxWindows.value = true
nextTick(()=>{
darwBodyWidth.value = darwBody.value.offsetWidth
})
}
}
</script>
<template>
<div class="fullBox">
<el-dialog v-model="openClose" title="设计个人BI报表" :fullscreen="maxWindows" :show-close="false" :before-close="closeDialog" width="80%" >
<template #header="{ close, titleId, titleClass }">
<div class="diaBox">
<div class="diaTitle">设计个人BI报表</div>
<div class="faButBox">
<el-space wrap>
<i title="全屏" v-if="!maxWindows" class="fa fa-expand" @click="openAllOrSmiall(maxWindows)"></i>
<i title="还原" v-if="maxWindows" class="fa fa-compress" @click="openAllOrSmiall(maxWindows)"></i>
<i title="关闭" class="fa fa-close" @click="closeDialog"></i>
</el-space>
</div>
</div>
</template>
<div :class="maxWindows?'minBoxWidth common-layout':'minBoxWidth minBox common-layout'">
<el-container>
<el-aside width="250px">
<LeftPath />
</el-aside>
<el-main>
<div class="chartBut">
<el-button type="primary" size="small" v-loading="saveLoading" @click="saveChart()"
>保存</el-button>
</div>
<div ref="darwBody" class="design-form">
<ContainerPath
:echats-views="dataList"
:table-key="props.tableKey"
:dim-ary="dimAry"
:mea-ary="meaAry"
:types="5"
:kuandu="darwBodyWidth"
/>
</div>
</el-main>
<el-aside width="250px">
<RightPath
:dim-ary="dimAry"
:mea-ary="meaAry"
:sun-dim-ary="sunDimAry"
:sun-mea-ary="sunMeaAry"
/>
</el-aside>
</el-container>
</div>
</el-dialog>
</div>
</template>
<style lang='scss' scoped>
.fullBox{
width: 100%;
:deep .el-dialog{
padding: 5px;
}
.minBoxWidth{
width: 100%;
overflow: hidden;
border-top: 1px solid rgb(221.7, 222.6, 224.4);
}
.minBox{
height: calc(100vh - 30vh);
}
}
.diaBox{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.faButBox{
font-size: 15px;
cursor: pointer;
}
.diaTitle{
font-size: 20px;
}
}
.common-layout {
width: 100%;
.el-aside {
padding: 0 0px;
height: calc(100vh - 60px);
.cardBox {
padding: 0px;
margin-bottom: 20px;
}
:deep .el-card__body {
text-align: center;
padding: 0 0 10px 0;
cursor: position;
}
}
.el-main {
padding: 0px;
border-right: 1px solid rgb(221.7, 222.6, 224.4);
border-left: 1px solid rgb(221.7, 222.6, 224.4);
background-color: rgb(232.8, 233.4, 234.6);
.drawingBoard {
/* background-color: rgb(232.8, 233.4, 234.6); */
/* height: 100%; */
}
}
.tubiaoRow {
margin-top: 20px;
}
.svgClass {
width: 100%;
}
}
.chartBut {
background-color: #ffffff;
padding: 5px;
text-align: right;
}
.design-form {
padding: 10px 10px 0 10px;
}
</style>

203
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/mydialogCopy.vue

@ -0,0 +1,203 @@
<!--
@ 作者: 秦东
@ 时间: 2025-09-26 14:07:42
@ 备注: 个人BI设计器
-->
<script lang='ts' setup>
import { dimMeaInfo } from "@/api/chart/type";
import { dimMeaFormTable, countChartValue, getChartCont } from "@/api/chart/index";
import LeftPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/left.vue";
import ContainerPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/container.vue";
import RightPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/right.vue";
const props = defineProps({
tableKey: {
type: String,
default: "",
},
chartId: {
type: String,
default: "",
},
show:{
type: Boolean,
default: false,
},
chartView:{
type: Array,
default() {
return [];
},
}
})
const emits = defineEmits(["update:show"]);
const openClose = computed({
get: () => props.show,
set: (val) => {
emits("update:show", val);
},
});
const maxWindows = ref(true)
const dimAry = ref<dimMeaInfo[]>([]);
const meaAry = ref<dimMeaInfo[]>([]);
const sunDimAry = ref<any>([]);
const sunMeaAry = ref<any>([]);
/**
@ 作者: 秦东
@ 时间: 2025-09-26 11:48:38
@ 功能: 关闭窗口
*/
const closeDialog = () => {
emits("update:show", false);
}
/**
@ 作者: 秦东
@ 时间: 2025-06-27 13:06:25
@ 功能: 获取维度义量化字段
*/
const dimMeaList = () => {
console.log("获取维度义量化字段", props);
dimMeaFormTable({ id: props.tableKey }).then((data) => {
console.log("获取维度义量化字段", data);
dimAry.value = data.data.dimList;
meaAry.value = data.data.meaList;
sunDimAry.value = data.data.SunDimListAry;
sunMeaAry.value = data.data.SunMeaListAry;
});
/*获取视图数据*/
getChartCont({ id: props.tableKey }).then((data) => {
console.log("获取视图数据", data);
if (data.code == 0) {
props.chartView = data.data;
}
});
};
onMounted(() => {
dimMeaList();
// props.state.echatsViews.push(echartsInfo);
});
</script>
<template>
<div class="fullBox">
<el-dialog v-model="openClose" title="设计个人BI报表" :fullscreen="maxWindows" :show-close="false" :before-close="closeDialog" width="80%" >
<template #header="{ close, titleId, titleClass }">
<div class="diaBox">
<div class="diaTitle">设计个人BI报表</div>
<div class="faButBox">
<el-space wrap>
<i title="全屏" v-if="!maxWindows" class="fa fa-expand" @click="maxWindows=!maxWindows"></i>
<i title="还原" v-if="maxWindows" class="fa fa-compress" @click="maxWindows=!maxWindows"></i>
<i title="关闭" class="fa fa-close" @click="closeDialog"></i>
</el-space>
</div>
</div>
</template>
<div :class="maxWindows?'minBoxWidth common-layout':'minBoxWidth minBox common-layout'">
<el-container>
<el-aside width="250px">
<LeftPath />
</el-aside>
<el-main>
<div class="chartBut">
<el-button type="primary" v-loading="butLoading" @click="saveChart()"
>保存</el-button>
</div>
<div class="design-form">
<ContainerPath
:echats-views="props.chartView"
:table-key="props.tableKey"
:dim-ary="dimAry"
:mea-ary="meaAry"
:types="5"
/>
</div>
</el-main>
<el-aside width="250px">
<RightPath
:dim-ary="dimAry"
:mea-ary="meaAry"
:sun-dim-ary="sunDimAry"
:sun-mea-ary="sunMeaAry"
/>
</el-aside>
</el-container>
</div>
</el-dialog>
</div>
</template>
<style lang='scss' scoped>
.fullBox{
width: 100%;
:deep .el-dialog{
padding: 5px;
}
.minBoxWidth{
width: 100%;
overflow: hidden;
border-top: 1px solid rgb(221.7, 222.6, 224.4);
}
.minBox{
height: calc(100vh - 30vh);
}
}
.diaBox{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.faButBox{
font-size: 15px;
cursor: pointer;
}
.diaTitle{
font-size: 20px;
}
}
.common-layout {
width: 100%;
.el-aside {
padding: 0 0px;
overflow: hidden;
.cardBox {
padding: 0px;
margin-bottom: 20px;
}
:deep .el-card__body {
text-align: center;
padding: 0 0 10px 0;
cursor: position;
}
}
.el-main {
padding: 0px;
border-right: 1px solid rgb(221.7, 222.6, 224.4);
border-left: 1px solid rgb(221.7, 222.6, 224.4);
background-color: rgb(232.8, 233.4, 234.6);
.drawingBoard {
/* background-color: rgb(232.8, 233.4, 234.6); */
/* height: 100%; */
}
}
.tubiaoRow {
margin-top: 20px;
}
.svgClass {
width: 100%;
}
}
.chartBut {
background-color: #ffffff;
padding: 5px;
text-align: right;
}
.design-form {
padding: 10px 10px 0 10px;
}
</style>

118
src/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/seeContChart.vue

@ -0,0 +1,118 @@
<!--
@ 作者: 秦东
@ 时间: 2025-09-25 15:52:59
@ 备注: BI图表查看
-->
<script lang='ts' setup>
import type { TabPaneName } from 'element-plus'
import { getMyChartSetupAndData } from "@/api/chart/index";
//
import MyContChart from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/myContChart.vue";
import BarPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/bar.vue";
import BarRacePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/barRace.vue";
import LinePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/line.vue";
import PiePage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/pie.vue";
import RadarPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/radar.vue";
import TargetPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/chart/target.vue";
const props = defineProps({
tableKey: {
type: String,
default: "",
},
echatsViews:{
type: Array,
default() {
return [];
},
}
})
const dataList = computed({
get: () => {
return props.echatsViews;
},
set: (newVal: any) => {
return newVal;
},
});
const pickChar = ref("all")
const myChartView = ref<any>([])
const myChartId = ref("")
const myLoading = ref(false)
//
const pickChartTable = (name: TabPaneName) => {
if(name=="oneman"){
haveMyBiChears()
}
}
/**
@ 作者: 秦东
@ 时间: 2025-09-29 15:37:44
@ 功能: 获取个人报表
*/
const haveMyBiChears = () => {
myLoading.value = true
getMyChartSetupAndData({id:props.tableKey}).then((data:any)=>{
myLoading.value = false
myChartView.value = data.data.chartList
myChartId.value = data.data.myChartId
}).finally(()=>{ myLoading.value = false})
}
provide("haveMyBiCherBi",haveMyBiChears)
</script>
<template>
<div>
<el-tabs v-model="pickChar" class="demo-tabs" @tab-change="pickChartTable">
<el-tab-pane label="公共报表" name="all">
<div v-for="item in dataList">
<BarPage
v-if="item.type == 'bar'"
:data="item"
:table-key="tableKey"
:uuid="item.uuid"
/>
<BarRacePage
v-if="item.type == 'barRace'"
:data="item"
:uuid="item.uuid"
:table-key="tableKey"
/>
<LinePage
v-if="item.type == 'line'"
:data="item"
:table-key="tableKey"
:uuid="item.uuid"
/>
<PiePage
v-if="item.type == 'pie'"
:data="item"
:table-key="tableKey"
:uuid="item.uuid"
/>
<RadarPage
v-if="item.type == 'radar'"
:data="item"
:table-key="tableKey"
:uuid="item.uuid"
/>
<TargetPage
v-if="item.type == 'target'"
:data="item"
:uuid="item.uuid"
:table-key="tableKey"
/>
</div>
</el-tab-pane>
<el-tab-pane label="个人报表" name="oneman" v-loading="myLoading">
<MyContChart :table-key="tableKey" :chart-view="myChartView" :chart-id="myChartId" @my-charts="haveMyBiChears" />
</el-tab-pane>
</el-tabs>
</div>
</template>
<style lang='scss' scoped>
</style>

2
src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue

@ -217,7 +217,7 @@ const handleAppPageClick = () => {};
const gainAppFormPageInit = () => {
if (props.menusInfo.id) {
gainAppPageInfo({ id: props.menusInfo.id }).then((data) => {
// console.log("----->", data);
console.log("获取初始化表单数据----->", data);
appInitData.value = data.data;
echatsViews.value = data.data.chartList;
if (data.data.page && data.data.pageList && data.data.appFlow) {

Loading…
Cancel
Save