diff --git a/package.json b/package.json index 7053b13..67291cb 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "diagram-js": "12.3.0", "didi": "9.0.2", "echarts": "5.5.0", + "echarts-gl": "^2.0.9", "element-plus": "2.8.8", "esbuild": "^0.25.0", "ezuikit-js": "^8.1.10", diff --git a/src/api/tender/index.ts b/src/api/tender/index.ts new file mode 100644 index 0000000..2ebb22b --- /dev/null +++ b/src/api/tender/index.ts @@ -0,0 +1,44 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; + +//获取版本 +export const obtainAllVersionNumbers = (query: any): AxiosPromise => { + return request({ + url: '/tender/tenderPlanLimitList/obtainAllVersionNumbers', + method: 'get', + params: query + }); +}; +//获取sheet +export const sheetList = (query: any): AxiosPromise => { + return request({ + url: '/tender/tenderPlanLimitList/sheetList', + method: 'get', + params: query + }); +}; +//获取表格数据 +export const getTableList = (query: any): AxiosPromise => { + return request({ + url: '/tender/tenderPlanLimitList/list', + method: 'get', + params: query + }); +}; +//修改单价数据 +export const updatePrice = (query: any): AxiosPromise => { + return request({ + url: '/tender/tenderPlanLimitList', + method: 'put', + data: query + }); +}; +//导入 +export const importExcelFile = (query: any, data: any): AxiosPromise => { + return request({ + url: '/tender/tenderPlanLimitList/importExcelFile', + method: 'post', + params: query, + data + }); +}; diff --git a/src/components/EchartBox/index.vue b/src/components/EchartBox/index.vue new file mode 100644 index 0000000..1725eac --- /dev/null +++ b/src/components/EchartBox/index.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/src/views/contract/division/index.vue b/src/views/contract/division/index.vue index d5ae5b2..bb6c8d0 100644 --- a/src/views/contract/division/index.vue +++ b/src/views/contract/division/index.vue @@ -463,7 +463,16 @@ const getDetails = (row: any) => { } }); }; - +//监听项目id刷新数据 +const listeningProject = watch( + () => currentProject.value?.id, + (nid, oid) => { + getTabsList(); + } +); +onUnmounted(() => { + listeningProject(); +}); onMounted(() => { getTabsList(); }); diff --git a/src/views/largeScreen/components/ProgressComponent.vue b/src/views/largeScreen/components/ProgressComponent.vue index 8620b37..2d7ec49 100644 --- a/src/views/largeScreen/components/ProgressComponent.vue +++ b/src/views/largeScreen/components/ProgressComponent.vue @@ -72,7 +72,7 @@ const percentageClass = computed(() => { .progress_component { width: 100%; height: 100%; - + margin-bottom: 10px; :deep(.el-progress-bar__outer) { background-color: transparent; } diff --git a/src/views/largeScreen/components/leftPage.vue b/src/views/largeScreen/components/leftPage.vue index 804ea76..683c9a3 100644 --- a/src/views/largeScreen/components/leftPage.vue +++ b/src/views/largeScreen/components/leftPage.vue @@ -2,36 +2,72 @@
- -
+ + + + +
+
+
-
diff --git a/src/views/largeScreen/components/optionList.ts b/src/views/largeScreen/components/optionList.ts index 7d9486f..eb269bc 100644 --- a/src/views/largeScreen/components/optionList.ts +++ b/src/views/largeScreen/components/optionList.ts @@ -1,4 +1,5 @@ import * as echarts from 'echarts/core'; +import { text } from 'stream/consumers'; // import { PictorialBarChart } from 'echarts/charts' // 客流量图 export const getOption = (xData: any, yData: any) => { @@ -249,9 +250,10 @@ export const getOption2 = (data: any) => { }; return option; }; -//食堂周报图 +//z折线 export const getLineOption = (lineData: any) => { - const maxData = Math.ceil(Math.max(...lineData.line1)); + const maxData = Math.max(...lineData.line1.flat()); + const option = { backgroundColor: '', tooltip: { @@ -263,37 +265,41 @@ export const getLineOption = (lineData: any) => { }, borderColor: '#7ec7ff' }, - // legend: { - // align: 'left', - // right: '5%', - // top: '1%', - // type: 'plain', - // textStyle: { - // color: '#fff', - // fontSize: 12 - // }, - // // icon:'rect', - // itemGap: 15, - // itemWidth: 18, - // data: [ - // { - // name: '上周销售量' - // }, - // { - // name: '本周销售量' - // } - // ] - // }, + legend: { + align: 'left', + right: '5%', + top: '1%', + type: 'plain', + textStyle: { + color: '#fff', + fontSize: 12 + }, + // icon:'rect', + itemGap: 15, + itemWidth: 18, + data: [ + { + name: '收款金额' + }, + { + name: '付款金额' + }, + { + name: '净现金流' + } + ] + }, grid: { top: '12%', left: '1%', right: '3%', - bottom: '12%', + bottom: '5%', containLabel: true }, xAxis: { type: 'category', data: lineData.xLabel, + boundaryGap: false, axisLine: { show: false }, @@ -318,21 +324,21 @@ export const getLineOption = (lineData: any) => { } } }, - dataZoom: [ - { - // show: true, - start: 0, - end: 30, - bottom: 2, // 下滑块距离x轴底部的距离 - height: 23 - }, - { - type: 'inside' - } - ], + // dataZoom: [ + // { + // // show: true, + // start: 0, + // end: 30, + // bottom: 2, // 下滑块距离x轴底部的距离 + // height: 23 + // }, + // { + // type: 'inside' + // } + // ], series: [ { - name: '逆变器功率', + name: '收款金额', type: 'line', symbol: 'circle', // 默认是空心圆(中间是白色的),改成实心圆 showAllSymbol: false, @@ -373,7 +379,95 @@ export const getLineOption = (lineData: any) => { shadowColor: 'rgba(25,163,223, 0.5)', //阴影颜色 shadowBlur: 20 //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。 }, - data: lineData.line1 + data: lineData.line1[0] + }, + { + name: '付款金额', + type: 'line', + symbol: 'none', // 默认是空心圆(中间是白色的),改成实心圆 + showAllSymbol: false, + symbolSize: 0, + smooth: true, + lineStyle: { + width: 1, + color: 'rgba(255, 224, 179, 1)', // 线条颜色 + borderColor: 'rgba(0,0,0,.4)' + }, + itemStyle: { + color: 'rgba(255, 224, 179, 1)', + borderWidth: 2, + show: true + }, + tooltip: { + show: true + }, + areaStyle: { + //线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。 + color: new echarts.graphic.LinearGradient( + 0, + 0, + 0, + 1, + [ + { + offset: 0, + color: 'rgba(255, 224, 179, 0.4)' + }, + { + offset: 1, + color: 'rgba(255, 224, 179, 0)' + } + ], + false + ), + shadowColor: 'rgba(255, 224, 179, 0.6)', //阴影颜色 + shadowBlur: 20 //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。 + }, + data: lineData.line1[1] + }, + { + name: '净现金流', + type: 'line', + symbol: 'none', // 默认是空心圆(中间是白色的),改成实心圆 + showAllSymbol: false, + symbolSize: 0, + smooth: true, + lineStyle: { + width: 1, + color: 'rgba(39, 255, 252, 1)', // 线条颜色 + borderColor: 'rgba(0,0,0,.4)' + }, + itemStyle: { + color: 'rgba(39, 255, 252, 1)', + borderWidth: 2, + show: false + }, + tooltip: { + show: true + }, + areaStyle: { + //线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。 + color: new echarts.graphic.LinearGradient( + 0, + 0, + 0, + 1, + [ + { + offset: 0, + color: 'rgba(39, 255, 252, 0.4)' + }, + { + offset: 1, + color: 'rgba(39, 255, 252, 0)' + } + ], + false + ), + shadowColor: 'rgba(39, 255, 252, 0.5)', //阴影颜色 + shadowBlur: 20 //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。 + }, + data: lineData.line1[2] } ] }; @@ -481,10 +575,10 @@ export const getDishesOption = (data?: any) => { // 菜品库存图 export const getInventoryOption = () => { const res = { - data: [2800, 300, 3900, 3000, 2450, 2670, 3320], - name: ['麻辣牛肉', '水煮肉片', '酸菜鱼', '辣子鸡丁', '烧白', '冬瓜排骨汤', '清炒油麦菜'], - ratio: [4000, 4000, 4000, 4000, 4000, 4000, 4000] - }, + data: [2800, 300, 3900, 3000, 2450, 2670, 3320], + name: ['麻辣牛肉', '水煮肉片', '酸菜鱼', '辣子鸡丁', '烧白', '冬瓜排骨汤', '清炒油麦菜'], + ratio: [4000, 4000, 4000, 4000, 4000, 4000, 4000] + }, dataIndex = 1; const option = { xAxis: { @@ -733,3 +827,62 @@ export const getBarOptions = (data: any) => { }; return option; }; + +// 收支合同分析 +export const getBarOptions2 = (data: any) => { + const option = { + color:['#FF932A', '#678FE6', '#1DD6FF', '#00E396'], + title: { + text: '数量(个)', + subtext: '16', + bottom: 'center', + left: 'center', + textStyle: { + color: '#9DADB7', + fontSize: 16 + }, + subtextStyle:{ + color: '#707070', + fontSize: 32, + fontWeight: 'bold' + } + }, + tooltip: { + trigger: 'item' + }, + legend: { + top: '5%', + left: 'center' + }, + series: [ + { + name: 'Access From', + type: 'pie', + radius: ['50%', '60%'], + avoidLabelOverlap: false, + padAngle: 5, + label: { + show: false, + position: 'center' + }, + emphasis: { + label: { + show: false, + fontSize: 40, + fontWeight: 'bold' + } + }, + labelLine: { + show: false + }, + data: [ + { value: 3, name: '100万一下' }, + { value: 4, name: '100-500万' }, + { value: 5, name: '500-1000万' }, + { value: 4, name: '1000万以上' }, + ] + } + ] + }; + return option; +} \ No newline at end of file diff --git a/src/views/largeScreen/components/rightPage.vue b/src/views/largeScreen/components/rightPage.vue index 247c4ce..a87ed17 100644 --- a/src/views/largeScreen/components/rightPage.vue +++ b/src/views/largeScreen/components/rightPage.vue @@ -1,13 +1,71 @@ - + diff --git a/src/views/tender/bidd/index.vue b/src/views/tender/bidd/index.vue new file mode 100644 index 0000000..e32016c --- /dev/null +++ b/src/views/tender/bidd/index.vue @@ -0,0 +1,279 @@ + + + + + diff --git a/src/views/tender/plan/index.vue b/src/views/tender/plan/index.vue index dff6321..22c8fd0 100644 --- a/src/views/tender/plan/index.vue +++ b/src/views/tender/plan/index.vue @@ -1,6 +1,7 @@