5e47f98e by zrj

大屏12.24修改

1 parent c07e138f
...@@ -157,3 +157,29 @@ export function getYS009(url, objData) { ...@@ -157,3 +157,29 @@ export function getYS009(url, objData) {
157 } 157 }
158 }) 158 })
159 } 159 }
160
161 /**
162 * 中间 中间模块-收入对比
163 * @returns {*}
164 */
165 export function getYS0010(url, objData) {
166 return request({
167 method: 'post',
168 data: {
169 'INTERFACEID': 'YS010',
170 'USERCONTEXT': url,
171 'FIELD': objData
172 }
173 })
174 }
175
176 export function getYS0011(url, objData) {
177 return request({
178 method: 'post',
179 data: {
180 'INTERFACEID': 'YS011',
181 'USERCONTEXT': url,
182 'FIELD': objData
183 }
184 })
185 }
......
...@@ -103,15 +103,13 @@ h1 { ...@@ -103,15 +103,13 @@ h1 {
103 } 103 }
104 104
105 .text-top { 105 .text-top {
106 background: url('@/assets/image/top@3x.png') no-repeat top center;
107 background-size: 100%;
108 height: calc(63 * 100vw / 1920); 106 height: calc(63 * 100vw / 1920);
109 margin: 0; 107 margin: 0;
110 font-size: calc(17 * 100vw / 1920); 108 font-size: calc(17 * 100vw / 1920);
111 font-weight: 400; 109 font-weight: 400;
112 color: #12BFFF;
113 line-height: calc(40 * 100vw / 1920); 110 line-height: calc(40 * 100vw / 1920);
114 padding-left: calc(30 * 100vw / 1920) 111 padding-left: calc(30 * 100vw / 1920)
112
115 } 113 }
116 114
117 .date { 115 .date {
...@@ -119,5 +117,21 @@ h1 { ...@@ -119,5 +117,21 @@ h1 {
119 position: absolute; 117 position: absolute;
120 right: calc(30 * 100vw / 1920); 118 right: calc(30 * 100vw / 1920);
121 } 119 }
120
121 .dark {
122 .text-top {
123 background: url('@/assets/image/top@3x.png') no-repeat top center;
124 background-size: 100%;
125 color: #12BFFF;
126 }
127 }
128
129 .light {
130 .text-top {
131 background: url('@/assets/image/top-light@2x.png') no-repeat top center;
132 background-size: 100%;
133 color: #0060AA;
134 }
135 }
122 </style> 136 </style>
123 137
......
1 <template> 1 <template>
2 <div class="bg"> 2 <div v-loading="isLoading" class="bg" :class="{dark: styleTheme=='dark',light: styleTheme=='light'}">
3 <video id="video" autoplay loop muted src="/bg.mp4"></video> 3 <el-button v-if="styleTheme=='light'" class="theme-button dark-btn" @click="handleChangeTheme('dark')"></el-button>
4 <app-header/> 4 <el-button v-else-if="styleTheme=='dark'" class="theme-button light-btn" @click="handleChangeTheme('light')"></el-button>
5 <app-main/> 5 <!-- <video id="video" autoplay loop muted src="/bg.mp4"></video>-->
6 <app-header />
7 <app-main :myTheme="styleTheme" />
6 </div> 8 </div>
7 </template> 9 </template>
8 10
9 <script setup> 11 <script setup>
10 import {AppMain, AppHeader, AppBottom} from './components' 12 import {AppMain, AppHeader, AppBottom} from './components'
13
14 const styleTheme = ref('dark')
15 const isLoading = ref(false)
16
17 function handleChangeTheme(type) {
18 styleTheme.value = type
19 isLoading.value = true
20 setTimeout(() => {
21 isLoading.value = false
22 }, 3000)
23 }
24
11 </script> 25 </script>
12 26
13 <style lang="scss"> 27 <style lang="scss">
...@@ -25,7 +39,34 @@ import {AppMain, AppHeader, AppBottom} from './components' ...@@ -25,7 +39,34 @@ import {AppMain, AppHeader, AppBottom} from './components'
25 min-width: 1000px; 39 min-width: 1000px;
26 overflow: hidden; 40 overflow: hidden;
27 //background: rgba(0,0,0,0.75) 41 //background: rgba(0,0,0,0.75)
28 background: url("@/assets/image/bg@2x.png") no-repeat top center;
29 background-size: 100% 100%; 42 background-size: 100% 100%;
30 } 43 }
44
45 .dark {
46 background: url("@/assets/image/bg@2x.png") no-repeat top center;
47 }
48
49 .light {
50 background: url("@/assets/image/bg_light.png") no-repeat top center;
51 }
52
53 .theme-button {
54 position: absolute;
55 z-index: 2;
56 width: 30px;
57 height: 30px;
58 border: none;
59 top: 4vh;
60 right: 20px;
61 }
62
63 .dark-btn {
64 background: url("@/assets/image/dark@2x.png") no-repeat top center;
65 background-size: contain;
66 }
67
68 .light-btn {
69 background: url("@/assets/image/light@2x.png") no-repeat top center;
70 background-size: contain;
71 }
31 </style> 72 </style>
......
...@@ -13,25 +13,25 @@ ...@@ -13,25 +13,25 @@
13 v-for="(val,i) in baseList" :key="i" :label="val" :value="val"/> 13 v-for="(val,i) in baseList" :key="i" :label="val" :value="val"/>
14 </el-select> 14 </el-select>
15 </div> 15 </div>
16 <div class="datePick_bg" style="position: absolute;top: 4vh;right: 18px;height: 28px"> 16 <div class="datePick_bg" style="position: absolute;top: 4vh;right: 58px;height: 28px">
17 <el-date-picker 17 <el-date-picker
18 v-model="nowDate" 18 v-model="nowDate"
19 type="month" 19 type="month"
20 placeholder="历史回溯" 20 placeholder="历史回溯"
21 :size="size" 21 :size="size"
22 style="width: 100%" 22 style="width: 100%;height: 100%"
23 value-format="YYYY-MM" 23 value-format="YYYY-MM"
24 ></el-date-picker> 24 ></el-date-picker>
25 </div> 25 </div>
26 <el-row class="w100"> 26 <el-row class="w100">
27 <el-col v-if="!isLoad&&obj.IFBASE" :span="8"> 27 <el-col v-if="!isLoad&&obj.IFBASE" :span="8">
28 <left-page :obj="obj" :type="type" :url="result" :historyDate="nowDate" :sBase="selectBase"/> 28 <left-page :obj="obj" :type="type" :url="result" :historyDate="nowDate" :sBase="selectBase" :myTheme="props.myTheme" />
29 </el-col> 29 </el-col>
30 <el-col v-if="!isLoad&&obj.IFBASE" :span="8"> 30 <el-col v-if="!isLoad&&obj.IFBASE" :span="8">
31 <center-page :obj="obj" :isLeader="isLeader" :type="type" :url="result" :historyDate="nowDate" :sBase="selectBase"/> 31 <center-page :myTheme="props.myTheme" :obj="obj" :isLeader="isLeader" :type="type" :url="result" :historyDate="nowDate" :sBase="selectBase"/>
32 </el-col> 32 </el-col>
33 <el-col v-if="!isLoad&&obj.IFBASE" :span="8"> 33 <el-col v-if="!isLoad&&obj.IFBASE" :span="8">
34 <right-page :obj="obj" :type="type" :url="result" :historyDate="nowDate" :sBase="selectBase"/> 34 <right-page :obj="obj" :type="type" :url="result" :historyDate="nowDate" :sBase="selectBase" :myTheme="props.myTheme"/>
35 </el-col> 35 </el-col>
36 </el-row> 36 </el-row>
37 </div> 37 </div>
...@@ -60,7 +60,7 @@ const nowDate = ref(`${year}-${formatMonth(month)}`) ...@@ -60,7 +60,7 @@ const nowDate = ref(`${year}-${formatMonth(month)}`)
60 let selectBase = ref() 60 let selectBase = ref()
61 let baseList = ref() 61 let baseList = ref()
62 let isLeader = ref(false) 62 let isLeader = ref(false)
63 // url.value = 'http://192.168.1.152:8899/login/sid=a659e865-486c-434f-8707-add6bfa2276d#/' 63 // url.value = 'http://192.168.1.152:8899/login/sid=9cdeffd3-0a59-414c-944c-8e71a11b05cc#/'
64 url.value = window.location.href 64 url.value = window.location.href
65 result.value = url.value?.split('=')[1]?.split('#')[0]; 65 result.value = url.value?.split('=')[1]?.split('#')[0];
66 66
...@@ -69,6 +69,12 @@ function validateEmail(email) { ...@@ -69,6 +69,12 @@ function validateEmail(email) {
69 return re.test(String(email).toLowerCase()); 69 return re.test(String(email).toLowerCase());
70 } 70 }
71 71
72 const props = defineProps({
73 myTheme: {
74 type: String,
75 }
76 })
77
72 onMounted(() => { 78 onMounted(() => {
73 if (result.value) { 79 if (result.value) {
74 handelGetYS000() 80 handelGetYS000()
...@@ -109,13 +115,11 @@ function setType(){ ...@@ -109,13 +115,11 @@ function setType(){
109 .basePick_bg { 115 .basePick_bg {
110 position: absolute; 116 position: absolute;
111 top: 4vh; 117 top: 4vh;
112 right: 180px; 118 right: 220px;
113 height: 28px; 119 height: 28px;
114 width: 155px; 120 width: 155px;
115 background: #0B2239;
116 //box-shadow: 0 0 24px 0 rgba(130, 220, 255, 0.5), 0 0 16px 0 rgba(130, 220, 255, 0.27); 121 //box-shadow: 0 0 24px 0 rgba(130, 220, 255, 0.5), 0 0 16px 0 rgba(130, 220, 255, 0.27);
117 border-radius: 5px; 122 border-radius: 5px;
118 border: 1px solid #12BFFF;
119 123
120 .select { 124 .select {
121 background-color: transparent; 125 background-color: transparent;
...@@ -141,7 +145,6 @@ function setType(){ ...@@ -141,7 +145,6 @@ function setType(){
141 :deep(.el-select__placeholder) { 145 :deep(.el-select__placeholder) {
142 font-family: PingFang SC, serif; 146 font-family: PingFang SC, serif;
143 font-weight: 500; 147 font-weight: 500;
144 color: #fff;
145 //text-shadow: 0 2px 0 rgba(0, 1, 1, 0.41); 148 //text-shadow: 0 2px 0 rgba(0, 1, 1, 0.41);
146 //background: linear-gradient(180deg, #75E2E9 0%, #FFFFFF 100%); 149 //background: linear-gradient(180deg, #75E2E9 0%, #FFFFFF 100%);
147 background-color: rgb(33, 123, 188, .1); /* 背景色 */ 150 background-color: rgb(33, 123, 188, .1); /* 背景色 */
...@@ -154,44 +157,98 @@ function setType(){ ...@@ -154,44 +157,98 @@ function setType(){
154 border-color: #1c81a6; /* 边框色 */ 157 border-color: #1c81a6; /* 边框色 */
155 color: #fff; /* 文字颜色 */ 158 color: #fff; /* 文字颜色 */
156 } 159 }
157
158 :deep(.el-icon ) {
159 color: #fff;
160 }
161 } 160 }
162 } 161 }
163 162
164 .datePick_bg { 163 .datePick_bg {
165 background: url("@/assets/image/datePicker.png") no-repeat center;
166 background-size: 100% 100%;
167 width: 155px; 164 width: 155px;
165 border-radius: 5px;
166
167 ::v-deep .el-date-editor .el-input__inner {
168 background-color: transparent !important;
169 border-color: #80ffff;
170 box-shadow: none;
171 height: 30px;
172 padding: 0 0 2px 10px;
173 }
174 ::v-deep .el-input__wrapper {
175 background: transparent;
176 border: none;
177 box-shadow: none;
178 }
179 /* 隐藏默认图标 */
180 ::v-deep .el-date-editor .el-input__prefix {
181 width: 20px;
182 height: 20px;
183 position: absolute;
184 right: 10px;
185 }
186
187 /* 强制右侧显示图标 */
188 ::v-deep .el-date-editor .el-input__suffix .clear-icon{
189 display: inline-block !important;
190 padding: 0 40px 0 0;
191 }
168 } 192 }
169 ::v-deep .el-date-editor .el-input__inner { 193
170 background-color: transparent !important; 194 .dark {
171 border-color: #80ffff; 195 .basePick_bg {
172 box-shadow: none; 196 background: #0B2239;
173 height: 30px; 197 border: 1px solid #12BFFF;
174 color: #fff; 198
175 padding: 0 0 2px 10px; 199 /* placeholder */
176 } 200 :deep(.el-select__placeholder) {
177 ::v-deep .el-input__wrapper { 201 color: #fff;
178 background: transparent; 202 }
179 border: none; 203
180 box-shadow: none; 204 :deep(.el-icon ) {
181 } 205 color: #fff;
182 /* 隐藏默认图标 */ 206 }
183 ::v-deep .el-date-editor .el-input__prefix { 207 }
184 background: url("@/assets/image/rili.png") no-repeat center; 208
185 background-size: 100% 100%; 209 .datePick_bg {
186 width: 20px; 210 background: url("@/assets/image/datePicker.png") no-repeat center;
187 height: 20px; 211 background-size: 100% 100%;
188 position: absolute; 212
189 right: 10px; 213 ::v-deep .el-date-editor .el-input__inner {
214 color: #fff;
215 }
216
217 /* 隐藏默认图标 */
218 ::v-deep .el-date-editor .el-input__prefix {
219 background: url("@/assets/image/rili.png") no-repeat center;
220 background-size: 100% 100%;
221 }
222 }
190 } 223 }
191 224
192 /* 强制右侧显示图标 */ 225 .light {
193 ::v-deep .el-date-editor .el-input__suffix .clear-icon{ 226 .basePick_bg {
194 display: inline-block !important; 227 background: #FFFFFF;
195 padding: 0 40px 0 0; 228 border: 1px solid #97D3FF;
229
230 /* placeholder */
231 :deep(.el-select__placeholder) {
232 color: #005D8D;
233 }
234
235 :deep(.el-icon ) {
236 color: #0060AA;
237 }
238 }
239
240 .datePick_bg {
241 background: #FFFFFF;
242 border: 1px solid #97D3FF;
243
244 :deep(.el-date-editor .el-input__inner) {
245 color: #0060AA;
246 }
247
248 ::v-deep .el-date-editor .el-input__prefix {
249 background: url("@/assets/image/rili-light.png") no-repeat center;
250 background-size: 100% 100%;
251 }
252 }
196 } 253 }
197 </style> 254 </style>
......
...@@ -10,7 +10,8 @@ ...@@ -10,7 +10,8 @@
10 <div class="right" :style="{width:myType?'calc(480 * 100vw / 1920)':'calc(640 * 100vw / 1920)'}"> 10 <div class="right" :style="{width:myType?'calc(480 * 100vw / 1920)':'calc(640 * 100vw / 1920)'}">
11 <div class="rTop"> 11 <div class="rTop">
12 <div style="font-family: SimHei, serif;">领导重点关注</div> 12 <div style="font-family: SimHei, serif;">领导重点关注</div>
13 <div @click="handelView"><img alt="" class="rTop-img" src="@/assets/image/more@2x.png"></div> 13 <div v-if="props.myTheme=='dark'" @click="handelView"><img alt="" class="rTop-img" src="@/assets/image/more@2x.png"></div>
14 <div v-if="props.myTheme=='light'" @click="handelView"><img alt="" class="rTop-img" src="@/assets/image/more-light@2x.png"></div>
14 </div> 15 </div>
15 <div class="rBotton"> 16 <div class="rBotton">
16 <ScrollingData :data="form.leaderinfo" :speed=".3"/> 17 <ScrollingData :data="form.leaderinfo" :speed=".3"/>
...@@ -19,40 +20,48 @@ ...@@ -19,40 +20,48 @@
19 </div> 20 </div>
20 21
21 <div class="bottom"> 22 <div class="bottom">
22 <div class="father dong"> 23 <div class="father dong" @click="contrastDialogShow('1')">
23 <div style="display: flex"> 24 <div style="display: flex">
24 <div class="bing" style="width: 30%"> 25 <div class="bing" style="width: 30%">
25 <div class="bingTitle heiti"> 26 <div class="bingTitle heiti">
26 <span><img alt="" class="titleImg" src="@/assets/image/title_bg.png"></span> 27 <span>
28 <img v-if="props.myTheme=='dark'" alt="" class="titleImg" src="@/assets/image/title_bg.png">
29 <img v-if="props.myTheme=='light'" alt="" class="titleImg" src="@/assets/image/title_bg-light@2x.png">
30 </span>
27 营业收入 31 营业收入
28 </div> 32 </div>
29 <div ref="bing1" style="width: 100%" :style="{height:myType?'13.3vh':'18.3vh'}"> 33 <!-- '18.3vh'-->
34 <div ref="bing1" style="width: 100%;height:13.3vh">
30 </div> 35 </div>
31 <!-- <div class="bingBottom heiti">--> 36 <!-- <div class="bingBottom heiti">-->
32 <!-- <div style="text-align: center">{{ `${dayjs().format('YYYY')}年` }}营业收入 <br>(万元)</div>--> 37 <!-- <div style="text-align: center">{{ `${dayjs().format('YYYY')}年` }}营业收入 <br>(万元)</div>-->
33 <!-- </div>--> 38 <!-- </div>-->
34 </div> 39 </div>
35 <div ref="zhuRef1" class="zhu" style="width:70%" :style="{height:myType?'17.3vh':'calc(20.5vh + 1vw + 8px)'}"/> 40 <div ref="zhuRef1" class="zhu" style="width:70%;height:17.3vh"/>
36 </div> 41 </div>
37 42
38 <hr> 43 <hr>
39 </div> 44 </div>
40 <div class="father"> 45 <div class="father" @click="contrastDialogShow('2')">
41 <div style="display: flex"> 46 <div style="display: flex">
42 <div class="bing" style="width: 30%"> 47 <div class="bing" style="width: 30%">
43 <div class="bingTitle"> 48 <div class="bingTitle">
44 <span><img alt="" class="titleImg heiti" src="@/assets/image/title_bg.png"></span> 49 <span>
50 <img v-if="props.myTheme=='dark'" alt="" class="titleImg" src="@/assets/image/title_bg.png">
51 <img v-if="props.myTheme=='light'" alt="" class="titleImg" src="@/assets/image/title_bg-light@2x.png">
52 </span>
45 应收余额 53 应收余额
46 </div> 54 </div>
47 <div ref="bing2" style="width: 100%" :style="{height:myType?'13.3vh':'18.3vh'}"> 55 <div ref="bing2" style="width: 100%;height:13.3vh">
48 </div> 56 </div>
49 <!-- <div class="bingBottom">--> 57 <!-- <div class="bingBottom">-->
50 <!-- <div style="text-align: center;">{{ `${dayjs().format('YYYY')}年${dayjs().format('MM')}月` }} <br>--> 58 <!-- <div style="text-align: center;">{{ `${dayjs().format('YYYY')}年${dayjs().format('MM')}月` }} <br>-->
51 <!-- 累计应收余额 <br>(万元)--> 59 <!-- 累计应收余额 <br>(万元)-->
52 <!-- </div>--> 60 <!-- </div>-->
53 <!-- </div>--> 61 <!-- </div>-->
62 <!-- 'calc(20.5vh + 1vw + 8px)'-->
54 </div> 63 </div>
55 <div ref="zhuRef2" class="zhu" style="width:70%" :style="{height:myType?'17.3vh':'calc(20.5vh + 1vw + 8px)'}"/> 64 <div ref="zhuRef2" class="zhu" style="width:70%;height:17.3vh"/>
56 </div> 65 </div>
57 66
58 <hr> 67 <hr>
...@@ -61,7 +70,10 @@ ...@@ -61,7 +70,10 @@
61 <div style="display: flex"> 70 <div style="display: flex">
62 <div class="bing" style="width: 30%"> 71 <div class="bing" style="width: 30%">
63 <div class="bingTitle heiti"> 72 <div class="bingTitle heiti">
64 <span><img alt="" class="titleImg" src="@/assets/image/title_bg.png"></span> 73 <span>
74 <img v-if="props.myTheme=='dark'" alt="" class="titleImg" src="@/assets/image/title_bg.png">
75 <img v-if="props.myTheme=='light'" alt="" class="titleImg" src="@/assets/image/title_bg-light@2x.png">
76 </span>
65 现金余额 77 现金余额
66 </div> 78 </div>
67 <div class="bingImg" style="width: 100%;height:13.3vh;position: relative"><span style="position: absolute;top:50%;left:0;width: 100%">{{bing_number3}}</span></div> 79 <div class="bingImg" style="width: 100%;height:13.3vh;position: relative"><span style="position: absolute;top:50%;left:0;width: 100%">{{bing_number3}}</span></div>
...@@ -76,21 +88,53 @@ ...@@ -76,21 +88,53 @@
76 </div> 88 </div>
77 <hr> 89 <hr>
78 </div> 90 </div>
91
79 <div class="father"> 92 <div class="father">
80 <div class="bingTitle tex4"> 93 <div class="bingTitle tex4">
81 <span><img alt="" class="titleImg" src="@/assets/image/title_bg.png"></span> 94 <span>
82 <span class="heiti">DSO天数</span> 95 <img v-if="props.myTheme=='dark'" alt="" class="titleImg" src="@/assets/image/title_bg.png">
96 <img v-if="props.myTheme=='light'" alt="" class="titleImg" src="@/assets/image/title_bg-light@2x.png">
97 </span>
98 <span v-if="myType" class="heiti">DSO天数</span>
99 <span v-if="!myType" class="heiti">全公司DSO天数</span>
100 <span class="dsotext heiti">&nbsp;{{ dsoAll }}</span>
101 </div>
102 <div ref="zhuRef4" style="width:100%;height: 17.3vh">
103 </div>
104 <hr v-if="!myType">
105 </div>
106
107 <div class="father" v-if="!myType">
108 <div class="bingTitle tex4">
109 <span>
110 <img v-if="props.myTheme=='dark'" alt="" class="titleImg" src="@/assets/image/title_bg.png">
111 <img v-if="props.myTheme=='light'" alt="" class="titleImg" src="@/assets/image/title_bg-light@2x.png">
112 </span>
113 <span class="heiti">分公司DSO天数</span>
83 <span class="dsotext heiti">&nbsp;{{ dso }}</span> 114 <span class="dsotext heiti">&nbsp;{{ dso }}</span>
84 </div> 115 </div>
85 <div ref="zhuRef4" style="width: 100%" :style="{height:myType?'calc(17.3vh - 2px)':'calc(20.5vh + 1vw + 8px)'}"> 116 <div ref="zhuRef42" style="width: 100%;height: calc(17.3vh - 2px)">
117 <!-- calc(20.5vh + 1vw + 8px)-->
86 </div> 118 </div>
87 </div> 119 </div>
88 </div> 120 </div>
89 121
90 <Information ref="InformationRef"></Information> 122 <Information ref="InformationRef"></Information>
91 </div>
92
93 123
124 <el-dialog
125 v-model="showDialog"
126 :append-to-body="true"
127 :z-index="999999"
128 style="width: 766px;height: 593px"
129 :class="{'darkDialog': props.myTheme=='dark','lightDialog': props.myTheme=='light'}"
130 draggable
131 :title="showTitle"
132 >
133 <div>
134 <div ref="contrastRef" class="zhu" style="width:100%;height: 500px"/>
135 </div>
136 </el-dialog>
137 </div>
94 </template> 138 </template>
95 139
96 <script setup> 140 <script setup>
...@@ -100,7 +144,7 @@ import * as echarts from "echarts"; ...@@ -100,7 +144,7 @@ import * as echarts from "echarts";
100 import * as api from "@/apiPc/common" 144 import * as api from "@/apiPc/common"
101 import {onMounted, ref, computed, onUnmounted, getCurrentInstance, nextTick, watch} from 'vue' 145 import {onMounted, ref, computed, onUnmounted, getCurrentInstance, nextTick, watch} from 'vue'
102 import {dayjs} from 'element-plus' 146 import {dayjs} from 'element-plus'
103 import {getYS000, getYS001, getYS002, getYS003, getYS004, getYS005} from '@/api/server.js' 147 import {getYS000, getYS001, getYS002, getYS003, getYS004, getYS005, getYS0010, getYS0011} from '@/api/server.js'
104 import Information from "/@/viewsPc/vip/components/information.vue"; 148 import Information from "/@/viewsPc/vip/components/information.vue";
105 149
106 const {proxy} = getCurrentInstance() 150 const {proxy} = getCurrentInstance()
...@@ -131,8 +175,14 @@ const props = defineProps({ ...@@ -131,8 +175,14 @@ const props = defineProps({
131 type: String, 175 type: String,
132 default: undefined 176 default: undefined
133 }, 177 },
178 myTheme:{
179 type: String,
180 default: 'dark'
181 }
134 }) 182 })
135 183
184 const showDialog = ref(false)
185 const showTitle = ref('')
136 const url = computed(() => props.url) 186 const url = computed(() => props.url)
137 const obj = computed(() => props.obj) 187 const obj = computed(() => props.obj)
138 const hDate = computed(() => props.historyDate) 188 const hDate = computed(() => props.historyDate)
...@@ -148,12 +198,19 @@ watch(() => props.sBase,(newVal) => { ...@@ -148,12 +198,19 @@ watch(() => props.sBase,(newVal) => {
148 init() 198 init()
149 } 199 }
150 }) 200 })
201 watch(() => props.myTheme,(newVal) => {
202 if (isMounted.value) {
203 init()
204 }
205 })
151 const isLeader = computed(() => props.isLeader) 206 const isLeader = computed(() => props.isLeader)
152 const myType = computed(() => props.type) 207 const myType = computed(() => props.type)
153 const zhuRef1 = ref(null) 208 const zhuRef1 = ref(null)
154 const zhuRef2 = ref(null) 209 const zhuRef2 = ref(null)
155 const zhuRef3 = ref(null) 210 const zhuRef3 = ref(null)
156 const zhuRef4 = ref(null) 211 const zhuRef4 = ref(null)
212 const zhuRef42 = ref(null)
213 const contrastRef = ref(null)
157 const bing1 = ref(null) 214 const bing1 = ref(null)
158 const bing2 = ref(null) 215 const bing2 = ref(null)
159 const bing3 = ref(null) 216 const bing3 = ref(null)
...@@ -163,6 +220,7 @@ const form = ref({ ...@@ -163,6 +220,7 @@ const form = ref({
163 leaderinfo: [] 220 leaderinfo: []
164 }) 221 })
165 const dso = ref(0) 222 const dso = ref(0)
223 const dsoAll = ref(0)
166 224
167 const resYear1 = ref() 225 const resYear1 = ref()
168 const resYear2 = ref() 226 const resYear2 = ref()
...@@ -180,6 +238,8 @@ let chart22 ...@@ -180,6 +238,8 @@ let chart22
180 let chart3 238 let chart3
181 let chart33 239 let chart33
182 let chart44 240 let chart44
241 let chart442
242 let chartContrast
183 243
184 const list = ref([]) 244 const list = ref([])
185 245
...@@ -265,8 +325,18 @@ async function handelGetYS003() { ...@@ -265,8 +325,18 @@ async function handelGetYS003() {
265 let nowYearString = ref(parseInt(hDate.value.substring(0,4))) 325 let nowYearString = ref(parseInt(hDate.value.substring(0,4)))
266 async function handelGetYS004() { 326 async function handelGetYS004() {
267 const res = await getYS004(url.value, obj.value) 327 const res = await getYS004(url.value, obj.value)
268 let arrList = res.data.blockgroup || [] 328 let arrList = []
269 dso.value = res.data.DSOTOTAL || 0 329 let arrBaseList = []
330
331 if (!myType.value) {
332 arrBaseList = res.data.basedso || []
333 arrList = res.data.blockgroup || []
334 dso.value = res.data.BASEDSOTOTAL || 0
335 dsoAll.value = res.data.DSOTOTAL || 0
336 } else {
337 arrList = res.data.blockgroup || []
338 dsoAll.value = res.data.DSOTOTAL || 0
339 }
270 // let arrList = [ 340 // let arrList = [
271 // { 341 // {
272 // BLOCK: '海上', 342 // BLOCK: '海上',
...@@ -309,78 +379,79 @@ async function handelGetYS004() { ...@@ -309,78 +379,79 @@ async function handelGetYS004() {
309 // ] 379 // ]
310 // } 380 // }
311 // ] 381 // ]
312 if (myType.value) {
313 let haishang
314 let dalu
315 382
316 for (const v of arrList) { 383 let haishang
317 if (v.BLOCK === '海上') { 384 let dalu
318 haishang = v 385
319 } else { 386 for (const v of arrList) {
320 dalu = v 387 if (v.BLOCK === '海上') {
321 } 388 haishang = v
389 } else {
390 dalu = v
322 } 391 }
323 let haishangArr = haishang.list.map(v => ({ 392 }
324 ...v, 393 let haishangArr = haishang.list.map(v => ({
325 type: 1 394 ...v,
326 })).sort((v1, v2) => v2.DSO - v1.DSO) 395 type: 1
327 let daluArr = dalu.list.map(v => ({ 396 })).sort((v1, v2) => v2.DSO - v1.DSO)
328 ...v, 397 let daluArr = dalu.list.map(v => ({
329 type: 2 398 ...v,
330 })).sort((v1, v2) => v2.DSO - v1.DSO) 399 type: 2
400 })).sort((v1, v2) => v2.DSO - v1.DSO)
331 401
332 let arr = [...haishangArr, ...daluArr] 402 let arr = [...haishangArr, ...daluArr]
333 let listX = arr.map(v => v.BASEJC) 403 let listX = arr.map(v => v.BASEJC)
334 404
335 let styleItem1 = { 405 let styleItem1 = {
336 color: { 406 color: {
337 type: 'linear', 407 type: 'linear',
338 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变 408 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
339 colorStops: [ 409 colorStops: [
340 {offset: 0, color: 'rgba(21, 219, 203, 1)'}, // 顶部颜色 410 {offset: 0, color: 'rgba(21, 219, 203, 1)'}, // 顶部颜色
341 {offset: 1, color: 'rgba(106, 235, 228, 1)'} // 底部颜色 411 {offset: 1, color: 'rgba(106, 235, 228, 1)'} // 底部颜色
342 ] 412 ]
343 }, 413 },
344 borderColor: 'rgba(0, 255, 190, 1)', 414 borderColor: 'rgba(0, 255, 190, 1)',
345 borderWidth: 1 415 borderWidth: 1
346 } 416 }
347 let styleItem2 = { 417 let styleItem2 = {
348 color: { 418 color: {
349 type: 'linear', 419 type: 'linear',
350 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变 420 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
351 colorStops: [ 421 colorStops: [
352 {offset: 0, color: 'rgba(0, 168, 255, 1)'}, // 顶部颜色 422 {offset: 0, color: 'rgba(0, 168, 255, 1)'}, // 顶部颜色
353 {offset: 1, color: 'rgba(77, 197, 243, 1)'} // 底部颜色 423 {offset: 1, color: 'rgba(77, 197, 243, 1)'} // 底部颜色
354 ] 424 ]
355 }, 425 },
356 borderColor: 'rgba(0, 168, 255, 1)', 426 borderColor: 'rgba(0, 168, 255, 1)',
357 borderWidth: 1 427 borderWidth: 1
358 } 428 }
359 429
360 let dataList = arr.map(v => ({ 430 let dataList = arr.map(v => ({
361 value: v.DSO, 431 value: v.DSO,
362 day: v.DAYS, 432 day: v.DAYS,
363 itemStyle: v.type == 2 ? styleItem1 : styleItem2, 433 itemStyle: v.type == 2 ? styleItem1 : styleItem2,
364 name: v.BASEJC, 434 name: v.BASEJC,
365 type: v.type 435 type: v.type
366 })) 436 }))
367 let arr1 = [] 437 let arr1 = []
368 let arr2 = [] 438 let arr2 = []
369 for (const v of arr) { 439 for (const v of arr) {
370 if (v.type == 2) { 440 if (v.type == 2) {
371 arr2.push(290) 441 arr2.push(290)
372 arr1.push(null) 442 arr1.push(null)
373 } else { 443 } else {
374 arr1.push(150) 444 arr1.push(150)
375 arr2.push(null) 445 arr2.push(null)
376 }
377 } 446 }
378 if (arr2.length > 0) arr2.push(290) 447 }
379 if (arr1.length > 0) arr1.unshift(150) 448 if (arr2.length > 0) arr2.push(290)
380 handelZhu4(listX, dataList, arr1, arr2) 449 if (arr1.length > 0) arr1.unshift(150)
381 } else { 450 handelZhu4(listX, dataList, arr1, arr2)
451
452 if (!myType.value) {
382 let nowYear=[],lastYear=[] 453 let nowYear=[],lastYear=[]
383 for (const v of arrList[0].list) { 454 for (const v of arrBaseList[0].list) {
384 if (v.YEAR == nowYearString.value) { 455 if (v.YEAR == nowYearString.value) {
385 nowYear.push(v) 456 nowYear.push(v)
386 } else { 457 } else {
...@@ -439,7 +510,7 @@ async function handelGetYS004() { ...@@ -439,7 +510,7 @@ async function handelGetYS004() {
439 })) 510 }))
440 let arr1 = [] 511 let arr1 = []
441 for (let i=0;i<14;i++) { 512 for (let i=0;i<14;i++) {
442 if (arrList[0].BLOCK == '陆地') { 513 if (arrBaseList[0].BLOCK == '陆地') {
443 arr1.push(290) 514 arr1.push(290)
444 } else { 515 } else {
445 arr1.push(150) 516 arr1.push(150)
...@@ -451,8 +522,6 @@ async function handelGetYS004() { ...@@ -451,8 +522,6 @@ async function handelGetYS004() {
451 dataList2.push('') 522 dataList2.push('')
452 handelZhu4_2(listX1, dataList1,dataList2, arr1) 523 handelZhu4_2(listX1, dataList1,dataList2, arr1)
453 } 524 }
454
455
456 } 525 }
457 526
458 async function handelGetYS005() { 527 async function handelGetYS005() {
...@@ -465,6 +534,31 @@ async function handelGetYS005() { ...@@ -465,6 +534,31 @@ async function handelGetYS005() {
465 } 534 }
466 } 535 }
467 536
537 async function handelGetYS0010() {
538 const res = await getYS0010(url.value, {"yeargroup": resYear1.value})
539 const TBdata = res.data.list.map(n => n.TBRATIO)
540 const HBdata = res.data.list.map(n => n.HBRATIO)
541 handelContrast(resYear1.value[0], resYear1.value[1], TBdata, HBdata, true)
542 }
543
544 async function handelGetYS0011() {
545 const res = await getYS0011(url.value, {"yeargroup": resYear2.value})
546 const TBdata = res.data.list.map(n => n.TBRATIO)
547 const HBdata = res.data.list.map(n => n.HBRATIO)
548 handelContrast(resYear1.value[0], resYear1.value[1], TBdata, HBdata, false)
549 }
550
551 function contrastDialogShow(type) {
552 showDialog.value = true
553 if (type == "1") {
554 showTitle.value = '营业收入详情'
555 handelGetYS0010()
556 } else {
557 showTitle.value = '应收余额详情'
558 handelGetYS0011()
559 }
560 }
561
468 562
469 function getdata() { 563 function getdata() {
470 clear() 564 clear()
...@@ -483,6 +577,8 @@ function handleResize() { ...@@ -483,6 +577,8 @@ function handleResize() {
483 chart3?.resize() 577 chart3?.resize()
484 chart33?.resize() 578 chart33?.resize()
485 chart44?.resize() 579 chart44?.resize()
580 chart442?.resize()
581 chartContrast?.resize()
486 } 582 }
487 583
488 function toDieThousands(num) { 584 function toDieThousands(num) {
...@@ -561,11 +657,11 @@ const handelBing1 = (arr1, arr2) => { ...@@ -561,11 +657,11 @@ const handelBing1 = (arr1, arr2) => {
561 show: true, // 显示标签 657 show: true, // 显示标签
562 position: 'center', // 位置居中 658 position: 'center', // 位置居中
563 formatter: toDieThousands((arr1.TOTAL / 10000).toFixed()), // 文字内容 659 formatter: toDieThousands((arr1.TOTAL / 10000).toFixed()), // 文字内容
564 color: "#ffff", 660 color: props.myTheme=='dark'?'#fff':'#515F6F',
565 rich: { 661 rich: {
566 total: { 662 total: {
567 fontSize: 5, 663 fontSize: 5,
568 color: '#fff' 664 color: props.myTheme=='dark'?'#fff':'#515F6F'
569 } 665 }
570 } 666 }
571 }, 667 },
...@@ -603,11 +699,11 @@ const handelBing1 = (arr1, arr2) => { ...@@ -603,11 +699,11 @@ const handelBing1 = (arr1, arr2) => {
603 show: false, // 显示标签 699 show: false, // 显示标签
604 position: 'center', // 位置居中 700 position: 'center', // 位置居中
605 formatter: (arr1.TOTAL / 10000).toFixed(), // 文字内容 701 formatter: (arr1.TOTAL / 10000).toFixed(), // 文字内容
606 color: "#ffff", 702 color: props.myTheme=='dark'?'#fff':'#515F6F',
607 rich: { 703 rich: {
608 total: { 704 total: {
609 fontSize: 5, 705 fontSize: 5,
610 color: '#fff' 706 color: props.myTheme=='dark'?'#fff':'#515F6F'
611 } 707 }
612 } 708 }
613 }, 709 },
...@@ -730,11 +826,11 @@ const handelBing1 = (arr1, arr2) => { ...@@ -730,11 +826,11 @@ const handelBing1 = (arr1, arr2) => {
730 show: true, // 显示标签 826 show: true, // 显示标签
731 position: 'center', // 位置居中 827 position: 'center', // 位置居中
732 formatter: toDieThousands((arr1.TOTAL / 10000).toFixed()), // 文字内容 828 formatter: toDieThousands((arr1.TOTAL / 10000).toFixed()), // 文字内容
733 color: "#ffff", 829 color: props.myTheme=='dark'?'#fff':'#515F6F',
734 rich: { 830 rich: {
735 total: { 831 total: {
736 fontSize: 5, 832 fontSize: 5,
737 color: '#fff' 833 color: props.myTheme=='dark'?'#fff':'#515F6F'
738 } 834 }
739 } 835 }
740 }, 836 },
...@@ -772,11 +868,11 @@ const handelBing1 = (arr1, arr2) => { ...@@ -772,11 +868,11 @@ const handelBing1 = (arr1, arr2) => {
772 show: false, // 显示标签 868 show: false, // 显示标签
773 position: 'center', // 位置居中 869 position: 'center', // 位置居中
774 formatter: (arr1.TOTAL / 10000).toFixed(), // 文字内容 870 formatter: (arr1.TOTAL / 10000).toFixed(), // 文字内容
775 color: "#ffff", 871 color: props.myTheme=='dark'?'#fff':'#515F6F',
776 rich: { 872 rich: {
777 total: { 873 total: {
778 fontSize: 5, 874 fontSize: 5,
779 color: '#fff' 875 color: props.myTheme=='dark'?'#fff':'#515F6F'
780 } 876 }
781 } 877 }
782 }, 878 },
...@@ -903,11 +999,11 @@ const handelBing2 = (row1, row2) => { ...@@ -903,11 +999,11 @@ const handelBing2 = (row1, row2) => {
903 show: true, // 显示标签 999 show: true, // 显示标签
904 position: 'center', // 位置居中 1000 position: 'center', // 位置居中
905 formatter: toDieThousands((row1.TOTAL / 10000).toFixed() || 0), // 文字内容 1001 formatter: toDieThousands((row1.TOTAL / 10000).toFixed() || 0), // 文字内容
906 color: "#ffff", 1002 color: props.myTheme=='dark'?'#fff':'#515F6F',
907 rich: { 1003 rich: {
908 total: { 1004 total: {
909 fontSize: 5, 1005 fontSize: 5,
910 color: '#fff' 1006 color: props.myTheme=='dark'?'#fff':'#515F6F'
911 } 1007 }
912 } 1008 }
913 }, 1009 },
...@@ -1019,11 +1115,11 @@ const handelBing2 = (row1, row2) => { ...@@ -1019,11 +1115,11 @@ const handelBing2 = (row1, row2) => {
1019 show: true, // 显示标签 1115 show: true, // 显示标签
1020 position: 'center', // 位置居中 1116 position: 'center', // 位置居中
1021 formatter: toDieThousands((row1.TOTAL / 10000).toFixed() || 0), // 文字内容 1117 formatter: toDieThousands((row1.TOTAL / 10000).toFixed() || 0), // 文字内容
1022 color: "#ffff", 1118 color: props.myTheme=='dark'?'#fff':'#515F6F',
1023 rich: { 1119 rich: {
1024 total: { 1120 total: {
1025 fontSize: 5, 1121 fontSize: 5,
1026 color: '#fff' 1122 color: props.myTheme=='dark'?'#fff':'#515F6F'
1027 } 1123 }
1028 } 1124 }
1029 }, 1125 },
...@@ -1138,11 +1234,11 @@ const handelBing3 = (row1, row2) => { ...@@ -1138,11 +1234,11 @@ const handelBing3 = (row1, row2) => {
1138 show: true, // 显示标签 1234 show: true, // 显示标签
1139 position: 'center', // 位置居中 1235 position: 'center', // 位置居中
1140 formatter: (row1.TOTAL / 10000).toFixed() || 0, // 文字内容 1236 formatter: (row1.TOTAL / 10000).toFixed() || 0, // 文字内容
1141 color: "#ffff", 1237 color: props.myTheme=='dark'?'#fff':'#515F6F',
1142 rich: { 1238 rich: {
1143 total: { 1239 total: {
1144 fontSize: 5, 1240 fontSize: 5,
1145 color: '#fff' 1241 color: props.myTheme=='dark'?'#fff':'#515F6F'
1146 } 1242 }
1147 } 1243 }
1148 }, 1244 },
...@@ -1229,7 +1325,7 @@ const handelZhu1 = (row1, row2) => { ...@@ -1229,7 +1325,7 @@ const handelZhu1 = (row1, row2) => {
1229 legend: { 1325 legend: {
1230 top: '0', 1326 top: '0',
1231 textStyle: { 1327 textStyle: {
1232 color: '#FFF' 1328 color: props.myTheme=='dark'?'#fff':'#515F6F'
1233 }, 1329 },
1234 }, 1330 },
1235 grid: { 1331 grid: {
...@@ -1246,12 +1342,15 @@ const handelZhu1 = (row1, row2) => { ...@@ -1246,12 +1342,15 @@ const handelZhu1 = (row1, row2) => {
1246 axisLine: { 1342 axisLine: {
1247 show: true, 1343 show: true,
1248 lineStyle: { 1344 lineStyle: {
1249 color: '#fff', 1345 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1250 width: 2, 1346 width: 2,
1251 type: 'solid' 1347 type: 'solid'
1252 } 1348 }
1253 }, 1349 },
1254 axisLabel: { 1350 axisLabel: {
1351 textStyle: {
1352 color: props.myTheme=='dark'?'#fff':'#515F6F',
1353 },
1255 formatter: function(value, index) { 1354 formatter: function(value, index) {
1256 // 只显示奇数索引的标签(从0开始计数) 1355 // 只显示奇数索引的标签(从0开始计数)
1257 return index % 2 === 0 ? value : ''; 1356 return index % 2 === 0 ? value : '';
...@@ -1265,7 +1364,7 @@ const handelZhu1 = (row1, row2) => { ...@@ -1265,7 +1364,7 @@ const handelZhu1 = (row1, row2) => {
1265 axisLine: { 1364 axisLine: {
1266 show: true, 1365 show: true,
1267 lineStyle: { 1366 lineStyle: {
1268 color: '#fff', 1367 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1269 width: 1, 1368 width: 1,
1270 type: 'solid' 1369 type: 'solid'
1271 }, 1370 },
...@@ -1277,7 +1376,7 @@ const handelZhu1 = (row1, row2) => { ...@@ -1277,7 +1376,7 @@ const handelZhu1 = (row1, row2) => {
1277 splitLine: { 1376 splitLine: {
1278 show: true, // 默认false,需显式开启 1377 show: true, // 默认false,需显式开启
1279 lineStyle: { 1378 lineStyle: {
1280 color: 'rgba(255, 255, 255, .2)', // 绿色轴线 1379 color: props.myTheme=='dark'?'rgba(255, 255, 255, .2)':'rgba(0, 0, 0, .2)', // 绿色轴线
1281 } 1380 }
1282 } 1381 }
1283 } 1382 }
...@@ -1356,7 +1455,7 @@ const handelZhu2 = (row1, row2) => { ...@@ -1356,7 +1455,7 @@ const handelZhu2 = (row1, row2) => {
1356 legend: { 1455 legend: {
1357 top: '0', 1456 top: '0',
1358 textStyle: { 1457 textStyle: {
1359 color: '#FFF' 1458 color: props.myTheme=='dark'?'#fff':'#515F6F'
1360 }, 1459 },
1361 }, 1460 },
1362 grid: { 1461 grid: {
...@@ -1373,12 +1472,15 @@ const handelZhu2 = (row1, row2) => { ...@@ -1373,12 +1472,15 @@ const handelZhu2 = (row1, row2) => {
1373 axisLine: { 1472 axisLine: {
1374 show: true, 1473 show: true,
1375 lineStyle: { 1474 lineStyle: {
1376 color: '#fff', 1475 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1377 width: 2, 1476 width: 2,
1378 type: 'solid' 1477 type: 'solid'
1379 } 1478 }
1380 }, 1479 },
1381 axisLabel: { 1480 axisLabel: {
1481 textStyle: {
1482 color: props.myTheme=='dark'?'#fff':'#515F6F',
1483 },
1382 interval:0, 1484 interval:0,
1383 formatter: function(value, index) { 1485 formatter: function(value, index) {
1384 // 只显示奇数索引的标签(从0开始计数) 1486 // 只显示奇数索引的标签(从0开始计数)
...@@ -1393,7 +1495,7 @@ const handelZhu2 = (row1, row2) => { ...@@ -1393,7 +1495,7 @@ const handelZhu2 = (row1, row2) => {
1393 axisLine: { 1495 axisLine: {
1394 show: true, 1496 show: true,
1395 lineStyle: { 1497 lineStyle: {
1396 color: '#fff', 1498 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1397 width: 1, 1499 width: 1,
1398 type: 'solid' 1500 type: 'solid'
1399 } 1501 }
...@@ -1496,7 +1598,7 @@ const handelZhu3 = (row1, row2) => { ...@@ -1496,7 +1598,7 @@ const handelZhu3 = (row1, row2) => {
1496 legend: { 1598 legend: {
1497 data: [name1, name2], 1599 data: [name1, name2],
1498 textStyle: { 1600 textStyle: {
1499 color: "#00DDFF" 1601 color: props.myTheme=='dark'?"#00DDFF":'#515F6F'
1500 } 1602 }
1501 }, 1603 },
1502 toolbox: { 1604 toolbox: {
...@@ -1521,12 +1623,15 @@ const handelZhu3 = (row1, row2) => { ...@@ -1521,12 +1623,15 @@ const handelZhu3 = (row1, row2) => {
1521 axisLine: { 1623 axisLine: {
1522 show: true, 1624 show: true,
1523 lineStyle: { 1625 lineStyle: {
1524 color: '#fff', 1626 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1525 width: 2, 1627 width: 2,
1526 type: 'solid', 1628 type: 'solid',
1527 } 1629 }
1528 }, 1630 },
1529 axisLabel: { 1631 axisLabel: {
1632 textStyle: {
1633 color: props.myTheme=='dark'?'#fff':'#515F6F',
1634 },
1530 padding: [0, 0, 0, 20], 1635 padding: [0, 0, 0, 20],
1531 formatter: function(value, index) { 1636 formatter: function(value, index) {
1532 // 只显示奇数索引的标签(从0开始计数) 1637 // 只显示奇数索引的标签(从0开始计数)
...@@ -1541,7 +1646,7 @@ const handelZhu3 = (row1, row2) => { ...@@ -1541,7 +1646,7 @@ const handelZhu3 = (row1, row2) => {
1541 axisLine: { 1646 axisLine: {
1542 show: true, 1647 show: true,
1543 lineStyle: { 1648 lineStyle: {
1544 color: '#fff', 1649 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1545 width: 1, 1650 width: 1,
1546 type: 'solid' 1651 type: 'solid'
1547 } 1652 }
...@@ -1659,7 +1764,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => { ...@@ -1659,7 +1764,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => {
1659 }, 1764 },
1660 legend: { 1765 legend: {
1661 textStyle: { 1766 textStyle: {
1662 color: '#FFF' 1767 color: props.myTheme=='dark'?'#fff':'#515F6F'
1663 }, 1768 },
1664 selectedMode: false, 1769 selectedMode: false,
1665 }, 1770 },
...@@ -1679,12 +1784,15 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => { ...@@ -1679,12 +1784,15 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => {
1679 axisLine: { 1784 axisLine: {
1680 show: true, 1785 show: true,
1681 lineStyle: { 1786 lineStyle: {
1682 color: '#fff', 1787 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1683 width: 2, 1788 width: 2,
1684 type: 'solid' 1789 type: 'solid'
1685 } 1790 }
1686 }, 1791 },
1687 axisLabel:{ 1792 axisLabel:{
1793 textStyle: {
1794 color: props.myTheme=='dark'?'#fff':'#515F6F',
1795 },
1688 padding: [0, 0, 0, 6] 1796 padding: [0, 0, 0, 6]
1689 } 1797 }
1690 } 1798 }
...@@ -1696,7 +1804,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => { ...@@ -1696,7 +1804,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => {
1696 axisLine: { 1804 axisLine: {
1697 show: true, 1805 show: true,
1698 lineStyle: { 1806 lineStyle: {
1699 color: '#fff', 1807 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1700 width: 1, 1808 width: 1,
1701 type: 'solid' 1809 type: 'solid'
1702 } 1810 }
...@@ -1805,7 +1913,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => { ...@@ -1805,7 +1913,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => {
1805 return ''; // 其他点不显示 1913 return ''; // 其他点不显示
1806 }, 1914 },
1807 fontSize: 13, 1915 fontSize: 13,
1808 color: '#fff', 1916 color: props.myTheme=='dark'?'#fff':'#000',
1809 // fontWeight: 'bold', 1917 // fontWeight: 'bold',
1810 opacity: 1, // 关键:取消透明度 1918 opacity: 1, // 关键:取消透明度
1811 shadowBlur: 0 // 取消阴影 1919 shadowBlur: 0 // 取消阴影
...@@ -1849,7 +1957,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => { ...@@ -1849,7 +1957,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => {
1849 return ''; // 其他点不显示 1957 return ''; // 其他点不显示
1850 }, 1958 },
1851 fontSize: 13, 1959 fontSize: 13,
1852 color: '#fff', 1960 color: props.myTheme=='dark'?'#fff':'#000',
1853 // fontWeight: 'bold', 1961 // fontWeight: 'bold',
1854 opacity: 1, // 关键:取消透明度 1962 opacity: 1, // 关键:取消透明度
1855 shadowBlur: 0 // 取消阴影 1963 shadowBlur: 0 // 取消阴影
...@@ -1862,7 +1970,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => { ...@@ -1862,7 +1970,7 @@ const handelZhu4 = (listX, dataList, arr1, arr2) => {
1862 } 1970 }
1863 1971
1864 const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => { 1972 const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => {
1865 chart44 = echarts.init(zhuRef4.value) 1973 chart442 = echarts.init(zhuRef42.value)
1866 const option = { 1974 const option = {
1867 tooltip: { 1975 tooltip: {
1868 trigger: 'axis', 1976 trigger: 'axis',
...@@ -1900,7 +2008,7 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => { ...@@ -1900,7 +2008,7 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => {
1900 }, 2008 },
1901 legend: { 2009 legend: {
1902 textStyle: { 2010 textStyle: {
1903 color: '#FFF' 2011 color: props.myTheme=='dark'?'#fff':'#515F6F'
1904 }, 2012 },
1905 }, 2013 },
1906 grid: { 2014 grid: {
...@@ -1919,12 +2027,15 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => { ...@@ -1919,12 +2027,15 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => {
1919 axisLine: { 2027 axisLine: {
1920 show: true, 2028 show: true,
1921 lineStyle: { 2029 lineStyle: {
1922 color: '#fff', 2030 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1923 width: 2, 2031 width: 2,
1924 type: 'solid' 2032 type: 'solid'
1925 } 2033 }
1926 }, 2034 },
1927 axisLabel: { 2035 axisLabel: {
2036 textStyle: {
2037 color: props.myTheme=='dark'?'#fff':'#515F6F',
2038 },
1928 interval:0, 2039 interval:0,
1929 formatter: function(value, index) { 2040 formatter: function(value, index) {
1930 // 只显示奇数索引的标签(从0开始计数) 2041 // 只显示奇数索引的标签(从0开始计数)
...@@ -1940,7 +2051,7 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => { ...@@ -1940,7 +2051,7 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => {
1940 axisLine: { 2051 axisLine: {
1941 show: true, 2052 show: true,
1942 lineStyle: { 2053 lineStyle: {
1943 color: '#fff', 2054 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1944 width: 1, 2055 width: 1,
1945 type: 'solid' 2056 type: 'solid'
1946 } 2057 }
...@@ -2042,7 +2153,7 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => { ...@@ -2042,7 +2153,7 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => {
2042 return ''; // 其他点不显示 2153 return ''; // 其他点不显示
2043 }, 2154 },
2044 fontSize: 13, 2155 fontSize: 13,
2045 color: '#fff', 2156 color: props.myTheme=='dark'?'#fff':'#000',
2046 // fontWeight: 'bold', 2157 // fontWeight: 'bold',
2047 opacity: 1, // 关键:取消透明度 2158 opacity: 1, // 关键:取消透明度
2048 shadowBlur: 0 // 取消阴影 2159 shadowBlur: 0 // 取消阴影
...@@ -2050,10 +2161,263 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => { ...@@ -2050,10 +2161,263 @@ const handelZhu4_2 = (listX1, dataList1,dataList2, arr1) => {
2050 }, 2161 },
2051 ] 2162 ]
2052 } 2163 }
2053 chart44.setOption(option) 2164 chart442.setOption(option)
2054 // autoHover(chart44, option, 0, 2000) 2165 // autoHover(chart44, option, 0, 2000)
2055 } 2166 }
2056 2167
2168 const handelContrast = (row1, row2, TBdata, HBdata, flag) => {
2169 chartContrast = echarts.init(contrastRef.value)
2170 let monthData = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
2171
2172 // 处理环比数据为series格式
2173 const increaseData = [];
2174 const decreaseData = [];
2175 const barData = []
2176 HBdata.forEach((item, index) => {
2177 if (item >= 0) {
2178 increaseData.push([index, item]);
2179 decreaseData.push([index, '-']);
2180 } else {
2181 decreaseData.push([index, item]);
2182 increaseData.push([index, '-']);
2183 }
2184 barData.push(item)
2185 });
2186
2187 const option = {
2188 tooltip: {
2189 trigger: 'axis',
2190 axisPointer: {
2191 type: 'shadow'
2192 },
2193 backgroundColor: 'rgba(5, 28, 51, 1)', // 背景色
2194 borderColor: 'rgba(46, 151, 198, 1)', // 边框颜色
2195 borderWidth: 1, // 边框宽度
2196 textStyle: {
2197 color: props.myTheme=='dark'?'#fff':'#515F6F', // 文字颜色
2198 fontSize: 12, // 文字大小
2199 },
2200 formatter: function (params) {
2201 let tip = `${params[0].name}<br/>`;
2202 params.forEach((item) => {
2203 if (item.value !== '-') {
2204 const val = item.seriesName.includes('同比')
2205 ? `${item.value}%`
2206 : item.seriesName.includes('环比')
2207 ? `${item.value[1]}%`
2208 : item.value;
2209 if (!item.seriesName.includes('连接线')) {
2210 tip += `${item.seriesName}: ${val}<br/>`
2211 }
2212 }
2213 });
2214 return tip;
2215 }
2216 },
2217 legend: {
2218 data: ['同比', '环比增加', '环比减少', ''+row1.YEAR, ''+row2.YEAR],
2219 top: '5%',
2220 textStyle: {
2221 color: props.myTheme=='dark'?'#fff':'#515F6F'
2222 },
2223 },
2224 grid: [
2225 {top: '15%', left: '0%', right: '0%', height: '20%'},
2226 {top: '40%', left: '0%', right: '0%', height: '20%'},
2227 {top: '65%', left: '0%', right: '0%', bottom: '1%', containLabel: true}
2228 ],
2229 xAxis: [
2230 // 同比的x轴(隐藏,复用月份)
2231 {
2232 gridIndex: 0,
2233 data: monthData,
2234 axisLine: {
2235 show:true,
2236 lineStyle: {
2237 color: props.myTheme=='dark'?'#fff':'#000',
2238 width: 2,
2239 type: 'solid'
2240 }
2241 },
2242 axisLabel: { show:false },
2243 splitLine:{show:false} },
2244 // 环比的x轴(隐藏,复用月份)
2245 {
2246 gridIndex: 1,
2247 data: monthData,
2248 axisLine: {
2249 show:true,
2250 lineStyle: {
2251 color: props.myTheme=='dark'?'#fff':'#000',
2252 width: 2,
2253 type: 'solid'
2254 }
2255 },
2256 axisLabel: { show:false },
2257 splitLine:{show:false} },
2258 {
2259 gridIndex: 2,
2260 type: 'category',
2261 data: monthData,
2262 axisLine: {
2263 show: true,
2264 lineStyle: {
2265 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
2266 width: 2,
2267 type: 'solid'
2268 }
2269 },
2270 axisLabel: {
2271 textStyle: {
2272 color: props.myTheme=='dark'?'#fff':'#515F6F',
2273 },
2274 formatter: function(value, index) {
2275 // 只显示奇数索引的标签(从0开始计数)
2276 return index % 2 === 0 ? value : '';
2277 }
2278 }
2279 }
2280 ],
2281 yAxis: [
2282 // 同比的y轴(百分比)
2283 { gridIndex: 0, axisLine: { show:false }, axisLabel: { show:false }, splitLine:{show:false} },
2284 // 环比的y轴(百分比)
2285 { gridIndex: 1, axisLine: { show:false }, axisLabel: { show:false }, splitLine:{show:false} },
2286 {
2287 gridIndex: 2,
2288 type: 'value',
2289 axisLine: {
2290 show: true,
2291 lineStyle: {
2292 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
2293 width: 1,
2294 type: 'solid'
2295 },
2296 },
2297 axisLabel: {
2298 show:false
2299 // formatter: '{value}w' // 在数值后添加单位
2300 },
2301 splitLine: {
2302 show: true, // 默认false,需显式开启
2303 lineStyle: {
2304 color: props.myTheme=='dark'?'rgba(255, 255, 255, .2)':'rgba(0, 0, 0, .2)', // 绿色轴线
2305 }
2306 }
2307 }
2308 ],
2309 series: [
2310 // 同比折线
2311 {
2312 name: '同比',
2313 type: 'line',
2314 xAxisIndex: 0,
2315 yAxisIndex: 0,
2316 data: TBdata,
2317 symbol: 'circle',
2318 symbolSize: 8,
2319 lineStyle: { color: '#f9d342' },
2320 itemStyle: { color: '#f9d342' },
2321 label: { show: true, color: props.myTheme=='dark'?'#fff':'#000', formatter: '{c}%' }
2322 },
2323 // 环比增加(青色点)
2324 {
2325 name: '环比增加',
2326 type: 'scatter',
2327 xAxisIndex: 1,
2328 yAxisIndex: 1,
2329 data: increaseData,
2330 symbolSize: 10,
2331 itemStyle: { color: flag?'#00d8c9':'#ff4d4f' },
2332 label: {
2333 offset: [0, -20],
2334 show: true,
2335 color: props.myTheme=='dark'?'#fff':'#000',
2336 formatter: '{@[1]}%' }
2337 },
2338 // 环比减少(红色点)
2339 {
2340 name: '环比减少',
2341 type: 'scatter',
2342 xAxisIndex: 1,
2343 yAxisIndex: 1,
2344 data: decreaseData,
2345 symbolSize: 10,
2346 itemStyle: { color: flag?'#ff4d4f':'#00d8c9' },
2347 label: {
2348 offset: [0, 20],
2349 show: true,
2350 color: props.myTheme=='dark'?'#fff':'#000',
2351 formatter: '{@[1]}%'
2352 }
2353 },
2354 {
2355 name: '连接线',
2356 type: 'bar',
2357 xAxisIndex: 1,
2358 yAxisIndex: 1,
2359 data: barData, // 在每个点后添加一个null,以便连线可以到达y轴
2360 showSymbol: false, // 不显示连线上的点
2361 itemStyle: { color: props.myTheme=='dark'?'#fff':'#000' },
2362 barWidth: 1,
2363 },
2364 {
2365 name: row1.YEAR,
2366 type: 'bar',
2367 barGap: 0,
2368 xAxisIndex: 2,
2369 yAxisIndex: 2,
2370 emphasis: {
2371 focus: 'series'
2372 },
2373 data: row1.list.map(val => {
2374 return (val.SRJE / 10000).toFixed()
2375 }),
2376 itemStyle: {
2377 color: {
2378 type: 'linear',
2379 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
2380 colorStops: [
2381 {offset: 0, color: 'rgba(242, 196, 0, 1)'}, // 顶部颜色
2382 {offset: 1, color: 'rgba(153, 101, 0, 1)'} // 底部颜色
2383 ]
2384 },
2385 borderColor: 'rgba(240, 255, 0, 1)',
2386 borderWidth: 1
2387 },
2388 barWidth: '35%',
2389 borderColor: 'rgba(240, 255, 0, 1)'
2390 },
2391 {
2392 name: row2.YEAR,
2393 type: 'bar',
2394 xAxisIndex: 2,
2395 yAxisIndex: 2,
2396 emphasis: {
2397 focus: 'series'
2398 },
2399 data: row2.list.map(val => {
2400 return (val.SRJE / 10000).toFixed()
2401 }),
2402 itemStyle: {
2403 color: {
2404 type: 'linear',
2405 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
2406 colorStops: [
2407 {offset: 0, color: 'rgba(0, 162, 255, 1)'}, // 顶部颜色
2408 {offset: 1, color: 'rgba(34, 117, 255, 1)'} // 底部颜色
2409 ]
2410 },
2411 borderColor: 'rgba(0, 246, 255, 1)',
2412 borderWidth: 1
2413 },
2414 barWidth: '35%',
2415 },
2416 ]
2417 }
2418 chartContrast.setOption(option)
2419 }
2420
2057 function autoHover(myChart, option, index, time) { 2421 function autoHover(myChart, option, index, time) {
2058 autoToolTip(myChart, option, { 2422 autoToolTip(myChart, option, {
2059 interval: time,// 轮播间隔时间 默认2s 2423 interval: time,// 轮播间隔时间 默认2s
...@@ -2077,6 +2441,33 @@ onUnmounted(() => { ...@@ -2077,6 +2441,33 @@ onUnmounted(() => {
2077 }) 2441 })
2078 </script> 2442 </script>
2079 2443
2444 <style lang="scss">
2445 .lightDialog {
2446 background: url("@/assets/image/dialogBG-light@2x.png") no-repeat center;
2447 background-size: 100% 100%;
2448
2449 .el-dialog__title {
2450 color: #000;
2451 }
2452
2453 .el-dialog__headerbtn .el-icon {
2454 color: #000;
2455 }
2456 }
2457
2458 .darkDialog {
2459 background: url("@/assets/image/dialogBG-dark.png") no-repeat center;
2460 background-size: 100% 100%;
2461
2462 .el-dialog__title {
2463 color: #fff;
2464 }
2465
2466 .el-dialog__headerbtn .el-icon {
2467 color: #fff;
2468 }
2469 }
2470 </style>
2080 <style lang="scss" scoped> 2471 <style lang="scss" scoped>
2081 :deep(.el-radio-button--small .el-radio-button__inner) { 2472 :deep(.el-radio-button--small .el-radio-button__inner) {
2082 font-size: calc(12 * 100vw / 1920); 2473 font-size: calc(12 * 100vw / 1920);
...@@ -2096,9 +2487,6 @@ onUnmounted(() => { ...@@ -2096,9 +2487,6 @@ onUnmounted(() => {
2096 font-size: calc(18 * 100vw / 1920); 2487 font-size: calc(18 * 100vw / 1920);
2097 color: #D1D6DF; 2488 color: #D1D6DF;
2098 text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41); 2489 text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41);
2099 background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%);
2100 -webkit-background-clip: text;
2101 -webkit-text-fill-color: transparent;
2102 display: flex; 2490 display: flex;
2103 margin-top: calc(5 * 100vw / 1920); 2491 margin-top: calc(5 * 100vw / 1920);
2104 2492
...@@ -2118,22 +2506,6 @@ onUnmounted(() => { ...@@ -2118,22 +2506,6 @@ onUnmounted(() => {
2118 } 2506 }
2119 } 2507 }
2120 2508
2121 .dong {
2122 position: relative;
2123
2124 &::after {
2125 content: '';
2126 width: 40%;
2127 height: 40%;
2128 background: url("@/assets/img/line2.png") no-repeat;
2129 background-size: contain;
2130 position: absolute;
2131 top: -25%;
2132 left: 0;
2133 animation: movelr 4s ease-in infinite;
2134 }
2135 }
2136
2137 .top { 2509 .top {
2138 padding-top: calc(20 * 100vw / 1920); 2510 padding-top: calc(20 * 100vw / 1920);
2139 display: flex; 2511 display: flex;
...@@ -2143,8 +2515,6 @@ onUnmounted(() => { ...@@ -2143,8 +2515,6 @@ onUnmounted(() => {
2143 overflow: hidden; 2515 overflow: hidden;
2144 2516
2145 .left { 2517 .left {
2146 background: url("@/assets/image/box02@2x.png") no-repeat center;
2147 background-size: 100% 100%;
2148 width: calc(140 * 100vw / 1920); 2518 width: calc(140 * 100vw / 1920);
2149 height: calc(210 * 100vh / 1920); 2519 height: calc(210 * 100vh / 1920);
2150 2520
...@@ -2154,12 +2524,8 @@ onUnmounted(() => { ...@@ -2154,12 +2524,8 @@ onUnmounted(() => {
2154 font-family: SimHei, serif; 2524 font-family: SimHei, serif;
2155 font-weight: 600; 2525 font-weight: 600;
2156 font-size: calc(20 * 100vw / 1920); 2526 font-size: calc(20 * 100vw / 1920);
2157 color: #FFFFFF;
2158 padding-top: calc(9 * 100vw / 1920); 2527 padding-top: calc(9 * 100vw / 1920);
2159 //text-shadow: 0px 2px 0px rgba(0, 1, 1, 0.41); 2528 //text-shadow: 0px 2px 0px rgba(0, 1, 1, 0.41);
2160 background: linear-gradient(180deg, #75E2E9 0%, #FFFFFF 100%);
2161 -webkit-background-clip: text;
2162 -webkit-text-fill-color: transparent;
2163 } 2529 }
2164 2530
2165 .titleCenter { 2531 .titleCenter {
...@@ -2168,28 +2534,17 @@ onUnmounted(() => { ...@@ -2168,28 +2534,17 @@ onUnmounted(() => {
2168 font-family: SimHei, serif; 2534 font-family: SimHei, serif;
2169 font-weight: 400; 2535 font-weight: 400;
2170 font-size: calc(15 * 100vw / 1920); 2536 font-size: calc(15 * 100vw / 1920);
2171 color: #FFFFFF;
2172 margin-top: calc(22 * 100vh / 1920); 2537 margin-top: calc(22 * 100vh / 1920);
2173 2538
2174 span { 2539 span {
2175 margin-left: calc(10 * 100vw / 1920); 2540 margin-left: calc(10 * 100vw / 1920);
2176 font-size: calc(17 * 100vw / 1920); 2541 font-size: calc(17 * 100vw / 1920);
2177 } 2542 }
2178
2179 .tex1 {
2180 color: #F4AB09
2181 }
2182
2183 .tex2 {
2184 color: #1DFBD1;
2185 }
2186 } 2543 }
2187 2544
2188 } 2545 }
2189 2546
2190 .right { 2547 .right {
2191 background: url("@/assets/image/box03@2x.png") no-repeat center;
2192 background-size: 100% 100%;
2193 width: calc(480 * 100vw / 1920); 2548 width: calc(480 * 100vw / 1920);
2194 height: calc(220 * 100vh / 1920); 2549 height: calc(220 * 100vh / 1920);
2195 padding: calc(10 * 100vw / 1920) calc(35 * 100vw / 1920); 2550 padding: calc(10 * 100vw / 1920) calc(35 * 100vw / 1920);
...@@ -2200,11 +2555,7 @@ onUnmounted(() => { ...@@ -2200,11 +2555,7 @@ onUnmounted(() => {
2200 font-family: rTop, serif; 2555 font-family: rTop, serif;
2201 font-weight: 600; 2556 font-weight: 600;
2202 font-size: calc(20 * 100vw / 1920); 2557 font-size: calc(20 * 100vw / 1920);
2203 color: #FFFFFF;
2204 //text-shadow: 0 2px 0 rgba(0, 1, 1, 0.41); 2558 //text-shadow: 0 2px 0 rgba(0, 1, 1, 0.41);
2205 background: linear-gradient(180deg, #75E2E9 0%, #FFFFFF 100%);
2206 -webkit-background-clip: text;
2207 -webkit-text-fill-color: transparent;
2208 2559
2209 .rTop-img { 2560 .rTop-img {
2210 width: calc(30 * 100vw / 1920); 2561 width: calc(30 * 100vw / 1920);
...@@ -2238,8 +2589,6 @@ onUnmounted(() => { ...@@ -2238,8 +2589,6 @@ onUnmounted(() => {
2238 } 2589 }
2239 2590
2240 .bottom { 2591 .bottom {
2241 background: url("@/assets/image/box04@2x.png") no-repeat center;
2242 background-size: 100% 100%;
2243 margin-top: calc(20 * 100vw / 1920); 2592 margin-top: calc(20 * 100vw / 1920);
2244 padding: calc(10 * 100vw / 1920); 2593 padding: calc(10 * 100vw / 1920);
2245 position: relative; 2594 position: relative;
...@@ -2255,9 +2604,6 @@ onUnmounted(() => { ...@@ -2255,9 +2604,6 @@ onUnmounted(() => {
2255 font-size: calc(18 * 100vw / 1920); 2604 font-size: calc(18 * 100vw / 1920);
2256 color: #D1D6DF; 2605 color: #D1D6DF;
2257 text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41); 2606 text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41);
2258 background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%);
2259 -webkit-background-clip: text;
2260 -webkit-text-fill-color: transparent;
2261 display: flex; 2607 display: flex;
2262 margin-top: calc(10 * 100vw / 1920); 2608 margin-top: calc(10 * 100vw / 1920);
2263 2609
...@@ -2285,7 +2631,6 @@ onUnmounted(() => { ...@@ -2285,7 +2631,6 @@ onUnmounted(() => {
2285 2631
2286 .bingImg { 2632 .bingImg {
2287 background: url("@/assets/image/rmb.png") no-repeat center; 2633 background: url("@/assets/image/rmb.png") no-repeat center;
2288 color: #fff;
2289 font-size: 12px; 2634 font-size: 12px;
2290 padding: 49px; 2635 padding: 49px;
2291 } 2636 }
...@@ -2304,14 +2649,168 @@ onUnmounted(() => { ...@@ -2304,14 +2649,168 @@ onUnmounted(() => {
2304 } 2649 }
2305 } 2650 }
2306 2651
2307 hr {
2308 border: 0;
2309 border-top: 1px solid #373e51;
2310 }
2311
2312 .heiti { 2652 .heiti {
2313 font-family: SimHei, serif; 2653 font-family: SimHei, serif;
2314 } 2654 }
2315 2655
2316 2656
2657 .light {
2658 hr {
2659 border: 0;
2660 border-top: 1px solid #ADC1D4;
2661 }
2662
2663 .top {
2664 .left {
2665 background: url("@/assets/image/box02-light@2x.png") no-repeat center;
2666 background-size: 100% 100%;
2667
2668 .titleCenter {
2669 color: #000;
2670
2671 .tex1 {
2672 color: #F4AB09
2673 }
2674
2675 .tex2 {
2676 color: #0060AA;
2677 }
2678 }
2679
2680 .titleTop {
2681 color: #0060AA;
2682 }
2683 }
2684
2685 .right {
2686 background: url("@/assets/image/box03-light@2x.png") no-repeat center;
2687 background-size: 100% 100%;
2688
2689 .rTop {
2690 color: #0060AA;
2691 }
2692 }
2693 }
2694
2695 .bottom {
2696 background: url("@/assets/image/box04-light@2x.png") no-repeat center;
2697 background-size: 100% 100%;
2698
2699 .bing {
2700 .bingTitle {
2701 background: #0060AA;
2702 -webkit-background-clip: text;
2703 -webkit-text-fill-color: transparent;
2704 }
2705
2706 .bingImg {
2707 background: url("@/assets/image/rmb-light.png") no-repeat center;
2708 color: #515F6F;
2709 }
2710 }
2711 }
2712
2713 .center {
2714 .father {
2715 .tex4 {
2716 background: #0060AA;
2717 -webkit-background-clip: text;
2718 -webkit-text-fill-color: transparent;
2719 }
2720 }
2721 }
2722 }
2723
2724 .dark {
2725 hr {
2726 border: 0;
2727 border-top: 1px solid #373e51;
2728 }
2729
2730 .top {
2731 .left {
2732 background: url("@/assets/image/box02@2x.png") no-repeat center;
2733 background-size: 100% 100%;
2734
2735 .titleTop {
2736 color: #FFFFFF;
2737 //text-shadow: 0px 2px 0px rgba(0, 1, 1, 0.41);
2738 background: linear-gradient(180deg, #75E2E9 0%, #FFFFFF 100%);
2739 -webkit-background-clip: text;
2740 -webkit-text-fill-color: transparent;
2741 }
2742
2743 .titleCenter {
2744 color: #FFFFFF;
2745
2746 .tex1 {
2747 color: #F4AB09
2748 }
2749
2750 .tex2 {
2751 color: #1DFBD1;
2752 }
2753 }
2754 }
2755
2756 .right {
2757 background: url("@/assets/image/box03@2x.png") no-repeat center;
2758 background-size: 100% 100%;
2759
2760 .rTop {
2761 color: #FFFFFF;
2762 //text-shadow: 0 2px 0 rgba(0, 1, 1, 0.41);
2763 background: linear-gradient(180deg, #75E2E9 0%, #FFFFFF 100%);
2764 -webkit-background-clip: text;
2765 -webkit-text-fill-color: transparent;
2766 }
2767 }
2768 }
2769
2770 .bottom {
2771 background: url("@/assets/image/box04@2x.png") no-repeat center;
2772 background-size: 100% 100%;
2773
2774 .bing {
2775 .bingTitle {
2776 background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%);
2777 -webkit-background-clip: text;
2778 -webkit-text-fill-color: transparent;
2779 }
2780 }
2781
2782 .bingImg {
2783 background: url("@/assets/image/rmb.png") no-repeat center;
2784 color: #fff;
2785 }
2786 }
2787
2788 .center {
2789 .father {
2790 .tex4 {
2791 background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%);
2792 -webkit-background-clip: text;
2793 -webkit-text-fill-color: transparent;
2794 }
2795 }
2796
2797 .dong {
2798 position: relative;
2799
2800 &::after {
2801 content: '';
2802 width: 40%;
2803 height: 40%;
2804 background: url("@/assets/img/line2.png") no-repeat;
2805 background-size: contain;
2806 position: absolute;
2807 top: -25%;
2808 left: 0;
2809 animation: movelr 4s ease-in infinite;
2810 }
2811 }
2812 }
2813 }
2814
2815
2317 </style> 2816 </style>
......
...@@ -25,7 +25,6 @@ const showGroup = ref(false) ...@@ -25,7 +25,6 @@ const showGroup = ref(false)
25 25
26 26
27 function open(row,date) { 27 function open(row,date) {
28 debugger
29 showGroup.value = true 28 showGroup.value = true
30 list.value = row 29 list.value = row
31 myDate.value = date 30 myDate.value = date
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
25 placeholder="数据因素" 25 placeholder="数据因素"
26 size="small" 26 size="small"
27 @change="handelSelect1"> 27 @change="handelSelect1">
28 <el-option label="收入" value="1"/> 28 <el-option label="累计收入" value="1"/>
29 <el-option label="应收账款余额" value="2"/> 29 <el-option label="应收账款余额" value="2"/>
30 </el-select> 30 </el-select>
31 </div> 31 </div>
...@@ -39,41 +39,26 @@ ...@@ -39,41 +39,26 @@
39 <div class="title">余额占比</div> 39 <div class="title">余额占比</div>
40 <div ref="zhuRef" style="width: 100%; height: 24vh;"></div> 40 <div ref="zhuRef" style="width: 100%; height: 24vh;"></div>
41 </div> 41 </div>
42
43 42
44 <div class="chartCard mt30"> 43 <div class="chartCard mt30">
45 <div> 44 <div class="title">应收账期</div>
46 <div class="title">节点组成</div> 45 <!-- <div class="po_right" style="justify-content: end;">-->
47 46 <!-- <div class="itemBox" v-if="myType">-->
48 <div class="po_right"> 47 <!-- <el-select-->
49 <div class="itemBox"> 48 <!-- v-model="list9Y"-->
50 <el-select 49 <!-- class="select"-->
51 v-model="type4" 50 <!-- collapse-tags-->
52 class="select" 51 <!-- multiple-->
53 collapse-tags 52 <!-- placeholder="全部基地"-->
54 multiple 53 <!-- size="small"-->
55 placeholder="全部基地" 54 <!-- @change="handelSelect9">-->
56 size="small" 55 <!-- <el-option-->
57 @change="handelSelect4"> 56 <!-- v-for="(val,i) in list9"-->
58 <el-option :label="`${Year1}年`" value="1"/> 57 <!-- :key="i" :label="val.BASEJC" :value="val.BASEJC"/>-->
59 <el-option :label="`${Year2}年`" value="2"/> 58 <!-- </el-select>-->
60 </el-select> 59 <!-- </div>-->
61 </div> 60 <!-- </div>-->
62 <div class="itemBox" v-if="myType"> 61 <div ref="overdueRef" style="width: 100%; height: 24vh;"></div>
63 <el-select
64 v-model="type3"
65 class="select"
66 placeholder="全部基地"
67 size="small"
68 @change="handelSelect3"
69 >
70 <el-option label="全部" value="0"/>
71 <el-option v-for="val in list" :key="val.BASEJC" :label="val.BASEJC" :value="val.BASEJC"/>
72 </el-select>
73 </div>
74 </div>
75 </div>
76 <div ref="payeeRef" style="width: 100%; height: 24vh;"></div>
77 </div> 62 </div>
78 </div> 63 </div>
79 </template> 64 </template>
...@@ -83,7 +68,7 @@ import {onMounted, ref, onUnmounted, computed, watch} from 'vue' ...@@ -83,7 +68,7 @@ import {onMounted, ref, onUnmounted, computed, watch} from 'vue'
83 import {autoToolTip} from "@/plugins/auto-toolTip"; 68 import {autoToolTip} from "@/plugins/auto-toolTip";
84 import * as echarts from "echarts"; 69 import * as echarts from "echarts";
85 import * as api from "@/apiPc/common" 70 import * as api from "@/apiPc/common"
86 import {getYS006} from '@/api/server.js' 71 import {getYS006, getYS009} from '@/api/server.js'
87 import {dayjs} from 'element-plus' 72 import {dayjs} from 'element-plus'
88 73
89 const props = defineProps({ 74 const props = defineProps({
...@@ -108,6 +93,10 @@ const props = defineProps({ ...@@ -108,6 +93,10 @@ const props = defineProps({
108 type: String, 93 type: String,
109 default: undefined 94 default: undefined
110 }, 95 },
96 myTheme:{
97 type: String,
98 default: 'dark'
99 },
111 }) 100 })
112 101
113 const url = computed(() => props.url) 102 const url = computed(() => props.url)
...@@ -127,10 +116,15 @@ watch(() => props.sBase,(newVal) => { ...@@ -127,10 +116,15 @@ watch(() => props.sBase,(newVal) => {
127 init() 116 init()
128 } 117 }
129 }) 118 })
119 watch(() => props.myTheme,(newVal) => {
120 if (isMounted.value) {
121 init()
122 }
123 })
130 124
131 const zhuRef = ref(null) 125 const zhuRef = ref(null)
132 const lineRef = ref(null) 126 const lineRef = ref(null)
133 const payeeRef = ref(null) 127 const overdueRef = ref(null)
134 128
135 const type3 = ref('0') 129 const type3 = ref('0')
136 const type4 = ref(['1','2']) 130 const type4 = ref(['1','2'])
...@@ -148,14 +142,8 @@ const s2 = ref([]) ...@@ -148,14 +142,8 @@ const s2 = ref([])
148 const s3 = ref([]) 142 const s3 = ref([])
149 const s4 = ref([]) 143 const s4 = ref([])
150 144
151 145 const list9 = ref([])
152 const h1 = ref([]) 146 const list9Y = ref([])
153 const h2 = ref([])
154 const h3 = ref([])
155
156 const h4 = ref([])
157 const h5 = ref([])
158 const h6 = ref([])
159 147
160 // const Year1 = dayjs().year() - 1 148 // const Year1 = dayjs().year() - 1
161 // const Year2 = dayjs().year() 149 // const Year2 = dayjs().year()
...@@ -168,7 +156,6 @@ const legend1 = [`${Year1.value}待收款`, `${Year1.value}收费单待签`, `${ ...@@ -168,7 +156,6 @@ const legend1 = [`${Year1.value}待收款`, `${Year1.value}收费单待签`, `${
168 const legend2 = [`${Year2.value}待收款`, `${Year2.value}收费单待签`, `${Year2.value}合同待签`] 156 const legend2 = [`${Year2.value}待收款`, `${Year2.value}收费单待签`, `${Year2.value}合同待签`]
169 157
170 158
171 console.log(Year1.value, Year2.value)
172 let chartA 159 let chartA
173 let chartB 160 let chartB
174 let chartC 161 let chartC
...@@ -198,13 +185,7 @@ async function handelGetYS006() { ...@@ -198,13 +185,7 @@ async function handelGetYS006() {
198 s2.value = [...new Array(12).fill(0)] 185 s2.value = [...new Array(12).fill(0)]
199 s3.value = [...new Array(12).fill(0)] 186 s3.value = [...new Array(12).fill(0)]
200 s4.value = [...new Array(12).fill(0)] 187 s4.value = [...new Array(12).fill(0)]
201 188
202 h1.value = [...new Array(12).fill(0)]// 初始化 12 个月,默认值 0
203 h2.value = [...new Array(12).fill(0)] // 初始化 12 个月,默认值 0
204 h3.value = [...new Array(12).fill({value: 0, info: ''})] // 初始化 12 个月,默认值 0
205 h4.value = [...new Array(12).fill(0)] // 初始化 12 个月,默认值 0
206 h5.value = [...new Array(12).fill(0)] // 初始化 12 个月,默认值 0
207 h6.value = [...new Array(12).fill({value: 0, info: ''})] // 初始化 12 个月,默认值 0
208 // h3.value = new Array(12).fill(0); // 初始化 12 个月,默认值 0 189 // h3.value = new Array(12).fill(0); // 初始化 12 个月,默认值 0
209 type2.value = [] 190 type2.value = []
210 for (const v1 of list.value) { 191 for (const v1 of list.value) {
...@@ -230,19 +211,6 @@ async function handelGetYS006() { ...@@ -230,19 +211,6 @@ async function handelGetYS006() {
230 type2.value.push(v1.BASEJC) 211 type2.value.push(v1.BASEJC)
231 for (const v2 of v1.list) { 212 for (const v2 of v1.list) {
232 const i = v2.MONTH - 1; // 转为 0~11 的索引 213 const i = v2.MONTH - 1; // 转为 0~11 的索引
233 h1.value[i] += v2.YSDSK / 10000 || 0;
234 h2.value[i] += v2.SFDDQ / 10000 || 0;
235 let obj = {...h3.value[i]}
236 obj.value += v2.HTDQ / 10000 || 0;
237 obj.info += v2.YSWELLINFO;
238 h3.value[i] = {...obj}
239
240 h4.value[i] += v2.JNYSDSK / 10000 || 0
241 h5.value[i] += v2.JNSFDDQ / 10000 || 0
242 let obj2 = {...h6.value[i]}
243 obj2.value += v2.JNHTDQ / 10000 || 0;
244 obj2.info += v2.JNYSWELLINFO;
245 h6.value[i] = {...obj2}
246 s1.value[i] += v2.INCOME / 10000 || 0; 214 s1.value[i] += v2.INCOME / 10000 || 0;
247 s2.value[i] += v2.LASTINCOME / 10000 || 0; 215 s2.value[i] += v2.LASTINCOME / 10000 || 0;
248 s3.value[i] += v2.LASTYSBALANCE / 10000 || 0; 216 s3.value[i] += v2.LASTYSBALANCE / 10000 || 0;
...@@ -277,19 +245,64 @@ async function handelGetYS006() { ...@@ -277,19 +245,64 @@ async function handelGetYS006() {
277 ) 245 )
278 // h3.value = h3.value.map((item) => JSON.parse(item)) 246 // h3.value = h3.value.map((item) => JSON.parse(item))
279 // setC(h1.value, h2.value, h3.value, h4.value, h5.value, h6.value) 247 // setC(h1.value, h2.value, h3.value, h4.value, h5.value, h6.value)
280 setC( 248 }
281 type4.value.includes('1') ? h1.value : [], 249
282 type4.value.includes('1') ? h2.value : [], 250 async function handelGetYS009() {
283 type4.value.includes('1') ? h3.value : [], 251 const res = await getYS009(url.value, obj.value)
284 type4.value.includes('2') ? h4.value : [], 252 list9.value = res.data.list
285 type4.value.includes('2') ? h5.value : [], 253 list9Y.value = []
286 type4.value.includes('2') ? h6.value : [], 254 let arrY = []
287 type4.value.includes('1') ? legend1 : [], 255 let arr1 = []
288 type4.value.includes('2') ? legend2 : [], 256 let arr2 = []
289 ) 257 let arr3 = []
290 258
291 console.log(2222222, h3.value) 259 if (myType.value) {
292 console.log(33333333, h6.value) 260 for (const val of list9.value) {
261 list9Y.value.push(val.BASEJC)
262 arrY.push(val.BASEJC)
263 arr1.push(Math.round(val.WKPCOSTONE / 10000))
264 arr2.push(Math.round(val.WKPCOSTTWO / 10000))
265 arr3.push({
266 value: Math.round(val.WKPCOSTTHREE / 10000),
267 info: val.YQWELLINFO
268 })
269 }
270 } else {
271 for (const val of list9.value) {
272 arrY.push(val.MONTH)
273 arr1.push(Math.round(val.WKPCOSTONE / 10000))
274 arr2.push(Math.round(val.WKPCOSTTWO / 10000))
275 arr3.push({
276 value: Math.round(val.WKPCOSTTHREE / 10000),
277 info: val.YQWELLINFO
278 })
279 }
280 }
281
282 setC(arrY, arr1, arr2, arr3)
283 }
284
285 function handelSelect9() {
286 let arr = list9Y.value.map(val => list9.value.find(item => item.BASEJC === val));
287 list9Y.value = []
288 console.log(arr)
289 let arrY = []
290 let arr1 = []
291 let arr2 = []
292 let arr3 = []
293
294 for (const val of arr) {
295 list9Y.value.push(val.BASEJC)
296 arrY.push(val.BASEJC)
297 arr1.push(Math.round(val.WKPCOSTONE / 10000))
298 arr2.push(Math.round(val.WKPCOSTTWO / 10000))
299 arr3.push({
300 value: Math.round(val.WKPCOSTTHREE / 10000),
301 info: val.YQWELLINFO
302 })
303 }
304
305 setC(arrY, arr1, arr2, arr3)
293 } 306 }
294 307
295 function handelSelect1() { 308 function handelSelect1() {
...@@ -326,92 +339,6 @@ function handelSelect2() { ...@@ -326,92 +339,6 @@ function handelSelect2() {
326 ) 339 )
327 } 340 }
328 341
329 function handelSelect3() {
330 h1.value = [...new Array(12).fill(0)] // 初始化 12 个月,默认值 0
331 h2.value = [...new Array(12).fill(0)] // 初始化 12 个月,默认值 0
332 h3.value = [...new Array(12).fill({value: 0, info: ''})] // 初始化 12 个月,默认值 0
333 h4.value = [...new Array(12).fill(0)] // 初始化 12 个月,默认值 0
334 h5.value = [...new Array(12).fill(0)] // 初始化 12 个月,默认值 0
335 h6.value = [...new Array(12).fill({value: 0, info: ''})] // 初始化 12 个月,默认值 0
336
337 if (type3.value == '0') {
338 // h1.value.push(val.YSDSK)//应待收款
339 // h2.value.push(val.SFDDQ)//收费单待签
340 // h3.value.push(val.HTDQ)//合同待签
341 for (const department of list.value) {
342 for (const monthData of department.list) {
343 const i = monthData.MONTH - 1; // 转为 0~11 的索引
344 h1.value[i] += monthData.YSDSK / 10000 || 0;
345 h2.value[i] += monthData.SFDDQ / 10000 || 0;
346 let obj = {...h3.value[i]}
347 obj.value += monthData.HTDQ / 10000 || 0;
348 obj.info += monthData.YSWELLINFO;
349 h3.value[i] = {...obj}
350
351 h4.value[i] += monthData.JNYSDSK / 10000 || 0
352 h5.value[i] += monthData.JNSFDDQ / 10000 || 0
353 let obj2 = {...h6.value[i]}
354 obj2.value += monthData.JNHTDQ / 10000 || 0;
355 obj2.info += monthData.JNYSWELLINFO;
356 h6.value[i] = {...obj2}
357 }
358 }
359 // h3.value = h3.value.map((item) => JSON.parse(item))
360 } else {
361 // 找到对应的数据
362 h3.value = []
363 h2.value = []
364 h1.value = []
365 h4.value = []
366 h5.value = []
367 h6.value = []
368 let obj = list.value.find(item => item.BASEJC === type3.value)
369 for (const val of obj.list) {
370 const i = val.MONTH - 1; // 转为 0~11 的索引
371 h1.value.push(val.YSDSK / 10000 || 0)//应待收款
372 h2.value.push(val.SFDDQ / 10000 || 0)//收费单待签
373 h3.value.push({
374 value: val.HTDQ / 10000 || 0,
375 info: val.YSWELLINFO
376 })//合同待签
377
378 h4.value.push(val.JNYSDSK / 10000 || 0)//应待收款
379 h5.value.push(val.JNSFDDQ / 10000 || 0)//收费单待签
380 let obj2 = {...h6.value[i]}
381 obj2.value += val.JNHTDQ / 10000 || 0;
382 obj2.info += val.JNYSWELLINFO;
383 h6.value[i] = {...obj2}
384 }
385 }
386 setC(
387 type4.value.includes('1') ? h1.value : [],
388 type4.value.includes('1') ? h2.value : [],
389 type4.value.includes('1') ? h3.value : [],
390 type4.value.includes('2') ? h4.value : [],
391 type4.value.includes('2') ? h5.value : [],
392 type4.value.includes('2') ? h6.value : [],
393 type4.value.includes('1') ? legend1 : [],
394 type4.value.includes('2') ? legend2 : [],
395 )
396 // setC(h1.value, h2.value, h3.value, h4.value, h5.value, h6.value)
397 }
398
399 function handelSelect4() {
400 // console.log(type4.value)
401 // if (type4.value)
402 setC(
403 type4.value.includes('1') ? h1.value : [],
404 type4.value.includes('1') ? h2.value : [],
405 type4.value.includes('1') ? h3.value : [],
406 type4.value.includes('2') ? h4.value : [],
407 type4.value.includes('2') ? h5.value : [],
408 type4.value.includes('2') ? h6.value : [],
409 type4.value.includes('1') ? legend1 : [],
410 type4.value.includes('2') ? legend2 : [],
411 )
412
413 }
414
415 const init = () => { 342 const init = () => {
416 clear() 343 clear()
417 // if (!intervalA) { 344 // if (!intervalA) {
...@@ -426,12 +353,38 @@ const init = () => { ...@@ -426,12 +353,38 @@ const init = () => {
426 const getdata = () => { 353 const getdata = () => {
427 clear() 354 clear()
428 handelGetYS006() 355 handelGetYS006()
356 handelGetYS009()
429 } 357 }
430 358
431 const setA = (arr, arr2, arr3) => { 359 const setA = (arr, arr2, arr3) => {
432 let sum1 = arr.reduce((a, b) => a + b.value, 0) 360 let sum1 = arr.reduce((a, b) => a + b.value, 0)
433 let sumPercent1 = ((arr2.reduce((a, b) => a + b.value, 0)/sum1)*100).toFixed(2) 361 let sumPercent1 = Math.round((arr2.reduce((a, b) => a + b.value, 0)/sum1)*100)
434 let sumPercent2 = ((arr3.reduce((a, b) => a + b.value, 0)/sum1)*100).toFixed(2) 362 let sumPercent2 = Math.round((arr3.reduce((a, b) => a + b.value, 0)/sum1)*100)
363 let sum2 = arr2.reduce((a, b) => a + b.value, 0)
364 let sum3 = arr3.reduce((a, b) => a + b.value, 0)
365 let per2 = Math.round((sum2/(sum2 + sum3)) * 100)
366 let per3 = Math.round((sum3/(sum2 + sum3)) * 100)
367 arr2.forEach(item => {
368 item.perValue = Math.round((item.value/(sum2 + sum3)) * 100)
369 })
370 arr3.forEach(item => {
371 item.perValue = Math.round((item.value/(sum2 + sum3)) * 100)
372 })
373 let perSum2 = arr2.reduce((a, b) => a + b.perValue, 0)
374 let perSum3 = arr3.reduce((a, b) => a + b.perValue, 0)
375 if (perSum2 < per2) {
376 arr2[0].perValue += 1
377 }
378 if (perSum2 > per2) {
379 arr2[0].perValue -= 1
380 }
381 if (perSum3 < per3) {
382 arr3[0].perValue += 1
383 }
384 if (perSum3 > per3) {
385 arr3[0].perValue -= 1
386 }
387
435 chartA = echarts.init(zhuRef.value) 388 chartA = echarts.init(zhuRef.value)
436 const option = { 389 const option = {
437 tooltip: { 390 tooltip: {
...@@ -454,7 +407,7 @@ const setA = (arr, arr2, arr3) => { ...@@ -454,7 +407,7 @@ const setA = (arr, arr2, arr3) => {
454 bottom: '25%', 407 bottom: '25%',
455 itemGap:10, 408 itemGap:10,
456 textStyle: { 409 textStyle: {
457 color: '#FFF', 410 color: props.myTheme=='dark'?'#fff':'#515F6F',
458 rich: { 411 rich: {
459 a:{ 412 a:{
460 float:'left', 413 float:'left',
...@@ -481,7 +434,7 @@ const setA = (arr, arr2, arr3) => { ...@@ -481,7 +434,7 @@ const setA = (arr, arr2, arr3) => {
481 width:40, 434 width:40,
482 }, 435 },
483 hr: { 436 hr: {
484 borderColor: '#fff', 437 borderColor: props.myTheme=='dark'?'#fff':'#515F6F',
485 borderWidth: 1, 438 borderWidth: 1,
486 width: '100%', 439 width: '100%',
487 height: 0, 440 height: 0,
...@@ -494,7 +447,7 @@ const setA = (arr, arr2, arr3) => { ...@@ -494,7 +447,7 @@ const setA = (arr, arr2, arr3) => {
494 let isLast = false 447 let isLast = false
495 for (let i = 0; i < option.series[2].data?.length; i++) { 448 for (let i = 0; i < option.series[2].data?.length; i++) {
496 if (option.series[2].data[i].name === name) { 449 if (option.series[2].data[i].name === name) {
497 value = option.series[2].data[i].value; 450 value = option.series[2].data[i].perValue;
498 break; 451 break;
499 } 452 }
500 } 453 }
...@@ -502,8 +455,8 @@ const setA = (arr, arr2, arr3) => { ...@@ -502,8 +455,8 @@ const setA = (arr, arr2, arr3) => {
502 isLast = true 455 isLast = true
503 } 456 }
504 // 计算百分比 457 // 计算百分比
505 let num1 = ((value / option.series[2].data.reduce((a, b) => a + b.value, 0)) * 100).toFixed(2); 458 // let num1 = Math.round((value / option.series[2].data.reduce((a, b) => a + b.value, 0)) * 100);
506 let num2 = num1 > 0 ? num1 + '%' : 0 + '%' 459 let num2 = value > 0 ? value + '%' : 0 + '%'
507 return isLast?['{c|' + name + '}' + ' ' + '{d|' + num2 + '}','{hr|}'].join('\n') : '{a|' + name + '}' + ' ' + '{b|' + num2 + '}'; 460 return isLast?['{c|' + name + '}' + ' ' + '{d|' + num2 + '}','{hr|}'].join('\n') : '{a|' + name + '}' + ' ' + '{b|' + num2 + '}';
508 // return name + ' ' + num2; 461 // return name + ' ' + num2;
509 }, 462 },
...@@ -516,7 +469,7 @@ const setA = (arr, arr2, arr3) => { ...@@ -516,7 +469,7 @@ const setA = (arr, arr2, arr3) => {
516 bottom: '25%', 469 bottom: '25%',
517 itemGap:10, 470 itemGap:10,
518 textStyle: { 471 textStyle: {
519 color: '#FFF', 472 color: props.myTheme=='dark'?'#fff':'#515F6F',
520 rich: { 473 rich: {
521 a:{ 474 a:{
522 float:'left', 475 float:'left',
...@@ -543,7 +496,7 @@ const setA = (arr, arr2, arr3) => { ...@@ -543,7 +496,7 @@ const setA = (arr, arr2, arr3) => {
543 width:40, 496 width:40,
544 }, 497 },
545 hr: { 498 hr: {
546 borderColor: '#fff', 499 borderColor: props.myTheme=='dark'?'#fff':'#515F6F',
547 borderWidth: 1, 500 borderWidth: 1,
548 width: '100%', 501 width: '100%',
549 height: 0, 502 height: 0,
...@@ -556,7 +509,7 @@ const setA = (arr, arr2, arr3) => { ...@@ -556,7 +509,7 @@ const setA = (arr, arr2, arr3) => {
556 let isLast = false 509 let isLast = false
557 for (let i = 0; i < option.series[2].data?.length; i++) { 510 for (let i = 0; i < option.series[2].data?.length; i++) {
558 if (option.series[2].data[i].name === name) { 511 if (option.series[2].data[i].name === name) {
559 value = option.series[2].data[i].value; 512 value = option.series[2].data[i].perValue;
560 break; 513 break;
561 } 514 }
562 } 515 }
...@@ -564,8 +517,8 @@ const setA = (arr, arr2, arr3) => { ...@@ -564,8 +517,8 @@ const setA = (arr, arr2, arr3) => {
564 isLast = true 517 isLast = true
565 } 518 }
566 // 计算百分比 519 // 计算百分比
567 let num1 = ((value / option.series[2].data.reduce((a, b) => a + b.value, 0)) * 100).toFixed(2); 520 // let num1 = Math.round((value / option.series[2].data.reduce((a, b) => a + b.value, 0)) * 100);
568 let num2 = num1 > 0 ? num1 + '%' : 0 + '%' 521 let num2 = value > 0 ? value + '%' : 0 + '%'
569 return isLast?['{c|' + name + '}' + ' ' + '{d|' + num2 + '}','{hr|}'].join('\n') : '{a|' + name + '}' + ' ' + '{b|' + num2 + '}'; 522 return isLast?['{c|' + name + '}' + ' ' + '{d|' + num2 + '}','{hr|}'].join('\n') : '{a|' + name + '}' + ' ' + '{b|' + num2 + '}';
570 // return name + ' ' + num2; 523 // return name + ' ' + num2;
571 }, 524 },
...@@ -578,7 +531,7 @@ const setA = (arr, arr2, arr3) => { ...@@ -578,7 +531,7 @@ const setA = (arr, arr2, arr3) => {
578 right: '31%', 531 right: '31%',
579 style: { 532 style: {
580 text: '陆地: ' + sumPercent2+'%', // 这里可以计算合计值并显示 533 text: '陆地: ' + sumPercent2+'%', // 这里可以计算合计值并显示
581 fill: '#fff', // 文本颜色 534 fill: props.myTheme=='dark'?'#fff':'#515F6F', // 文本颜色
582 fontSize: 12, // 文本大小 535 fontSize: 12, // 文本大小
583 }, 536 },
584 },{ 537 },{
...@@ -587,7 +540,7 @@ const setA = (arr, arr2, arr3) => { ...@@ -587,7 +540,7 @@ const setA = (arr, arr2, arr3) => {
587 right: '6%', 540 right: '6%',
588 style: { 541 style: {
589 text: '海上: ' + sumPercent1+'%', // 这里可以计算合计值并显示 542 text: '海上: ' + sumPercent1+'%', // 这里可以计算合计值并显示
590 fill: '#fff', // 文本颜色 543 fill: props.myTheme=='dark'?'#fff':'#515F6F', // 文本颜色
591 fontSize: 12, // 文本大小 544 fontSize: 12, // 文本大小
592 } 545 }
593 }], 546 }],
...@@ -700,7 +653,7 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -700,7 +653,7 @@ const setB = (arr1, arr2, arr3, arr4) => {
700 legend: { 653 legend: {
701 top: '3%', 654 top: '3%',
702 textStyle: { 655 textStyle: {
703 color: '#FFF' 656 color: props.myTheme=='dark'?'#fff':'#515F6F'
704 }, 657 },
705 }, 658 },
706 grid: { 659 grid: {
...@@ -716,12 +669,15 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -716,12 +669,15 @@ const setB = (arr1, arr2, arr3, arr4) => {
716 axisLine: { 669 axisLine: {
717 show: true, 670 show: true,
718 lineStyle: { 671 lineStyle: {
719 color: '#fff', 672 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
720 width: 2, 673 width: 2,
721 type: 'solid' 674 type: 'solid'
722 } 675 }
723 }, 676 },
724 axisLabel: { 677 axisLabel: {
678 textStyle: {
679 color: props.myTheme=='dark'?'#fff':'#515F6F',
680 },
725 formatter: function(value, index) { 681 formatter: function(value, index) {
726 // 只显示奇数索引的标签(从0开始计数) 682 // 只显示奇数索引的标签(从0开始计数)
727 return index % 2 === 0 ? value : ''; 683 return index % 2 === 0 ? value : '';
...@@ -740,7 +696,7 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -740,7 +696,7 @@ const setB = (arr1, arr2, arr3, arr4) => {
740 axisLine: { 696 axisLine: {
741 show: true, 697 show: true,
742 lineStyle: { 698 lineStyle: {
743 color: '#fff', 699 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
744 width: 1, 700 width: 1,
745 type: 'solid' 701 type: 'solid'
746 } 702 }
...@@ -748,7 +704,7 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -748,7 +704,7 @@ const setB = (arr1, arr2, arr3, arr4) => {
748 splitLine: { 704 splitLine: {
749 show: true, // 默认false,需显式开启 705 show: true, // 默认false,需显式开启
750 lineStyle: { 706 lineStyle: {
751 color: 'rgba(255, 255, 255, .2)', // 绿色轴线 707 color: props.myTheme=='dark'?'rgba(255, 255, 255, .2)':'#ADC1D4', // 绿色轴线
752 } 708 }
753 } 709 }
754 } 710 }
...@@ -757,7 +713,7 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -757,7 +713,7 @@ const setB = (arr1, arr2, arr3, arr4) => {
757 series: [ 713 series: [
758 { 714 {
759 name: `${Year2.value}应收余额`, 715 name: `${Year2.value}应收余额`,
760 type: 'bar', 716 type: 'line',
761 barGap: 0, 717 barGap: 0,
762 emphasis: { 718 emphasis: {
763 focus: 'series' 719 focus: 'series'
...@@ -780,7 +736,7 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -780,7 +736,7 @@ const setB = (arr1, arr2, arr3, arr4) => {
780 }, 736 },
781 { 737 {
782 name: `${Year1.value}应收余额`, 738 name: `${Year1.value}应收余额`,
783 type: 'bar', 739 type: 'line',
784 emphasis: { 740 emphasis: {
785 focus: 'series' 741 focus: 'series'
786 }, 742 },
...@@ -802,8 +758,8 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -802,8 +758,8 @@ const setB = (arr1, arr2, arr3, arr4) => {
802 barWidth: '15%' 758 barWidth: '15%'
803 }, 759 },
804 { 760 {
805 name: `${Year2.value}收入`, 761 name: `${Year2.value}累计收入`,
806 type: 'bar', 762 type: 'line',
807 emphasis: { 763 emphasis: {
808 focus: 'series' 764 focus: 'series'
809 }, 765 },
...@@ -824,8 +780,8 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -824,8 +780,8 @@ const setB = (arr1, arr2, arr3, arr4) => {
824 barWidth: '15%' 780 barWidth: '15%'
825 }, 781 },
826 { 782 {
827 name: `${Year1.value}收入`, 783 name: `${Year1.value}累计收入`,
828 type: 'bar', 784 type: 'line',
829 emphasis: { 785 emphasis: {
830 focus: 'series' 786 focus: 'series'
831 }, 787 },
...@@ -851,14 +807,14 @@ const setB = (arr1, arr2, arr3, arr4) => { ...@@ -851,14 +807,14 @@ const setB = (arr1, arr2, arr3, arr4) => {
851 chartB.setOption(option) 807 chartB.setOption(option)
852 // autoHover(chartB, option, 0, 2000) 808 // autoHover(chartB, option, 0, 2000)
853 } 809 }
854 const setC = (h1, h2, h3, h4, h5, h6, l1, l2) => { 810
855 chartC = echarts.init(payeeRef.value) 811 const setC = (arry, arr1, arr2, arr3) => {
812 chartC = echarts.init(overdueRef.value)
856 const option = { 813 const option = {
857 tooltip: { 814 tooltip: {
858 // axisPointer: { 815 trigger: 'axis',
859 // type: 'shadow' 816 confine: true,
860 // }, 817 // valueFormatter: (value) => value + '万',
861 valueFormatter: (value) => (value * 1).toFixed() + '万',
862 backgroundColor: 'rgba(5, 28, 51, 1)', // 背景色 818 backgroundColor: 'rgba(5, 28, 51, 1)', // 背景色
863 borderColor: 'rgba(46, 151, 198, 1)', // 边框颜色 819 borderColor: 'rgba(46, 151, 198, 1)', // 边框颜色
864 borderWidth: 1, // 边框宽度 820 borderWidth: 1, // 边框宽度
...@@ -866,56 +822,39 @@ const setC = (h1, h2, h3, h4, h5, h6, l1, l2) => { ...@@ -866,56 +822,39 @@ const setC = (h1, h2, h3, h4, h5, h6, l1, l2) => {
866 color: '#fff', // 文字颜色 822 color: '#fff', // 文字颜色
867 fontSize: 12, // 文字大小 823 fontSize: 12, // 文字大小
868 }, 824 },
869 confine: true, 825 axisPointer: {
826 type: 'none' // 关闭悬浮竖线
827 },
870 position: 'top', 828 position: 'top',
871 formatter: function (row) { 829 formatter: function (row) {
872 return ` 830 return `
873 <div style="font-weight:bold">${row.name}</div> 831 <div style="font-weight:bold">${row[0].name}</div>
874 <div style="display:flex;align-items:center;margin-top:5px"> 832 <div style="display:flex;align-items:center;margin-top:5px">
875 ${row.marker} 833 ${row[0].marker}
876 ${row.seriesName}: ${row.value.toFixed(0)} 834 ${row[0].seriesName == '逾期360天以上' ? '未开票金额' : row[0].seriesName}: ${row[0].value}
877 </div> 835 </div>
878 <div> 836 <div style="display:flex;align-items:center;margin-top:5px">
879 ${row.data?.info ? row.data?.info?.replaceAll('万', '万<br>') : ''} 837 ${row[1].marker}
838 ${row[0].seriesName == '逾期360天以上' ? '未开票金额' : row[1].seriesName}: ${row[1].value}
839 </div>
840 <div style="display:flex;align-items:center;margin-top:5px">
841 ${row[2].marker}
842 ${row[0].seriesName == '逾期360天以上' ? '未开票金额' : row[2].seriesName}: ${row[2].value}
843 </div>
844 <div style="display:flex;align-items:center;margin-top:5px">
845 <span>合计:</span>
846 ${row[0].value + row[1].value + row[2].value}
880 </div> 847 </div>
881 `; 848 `;
882 },
883 extraCssText: `
884 max-height: 150px;
885 overflow: auto !important;
886 padding-right: 10px; /* 为滚动条留出空间 */
887 `,
888 enterable: true, // 允许鼠标进入tooltip
889 axisPointer: {
890 type: 'cross',
891 label: {
892 backgroundColor: '#6a7985'
893 }
894 } 849 }
895 }, 850 },
896 legend: [ 851 legend: {
897 { 852 top: '10%',
898 data: l1, 853 textStyle: {
899 left: 'center', 854 color: props.myTheme=='dark'?'#fff':'#515F6F'
900 itemGap: 20,
901 top: '5%',
902 textStyle: {
903 color: '#FFF'
904 },
905 }, 855 },
906 { 856 },
907 data: l2,
908 left: 'center',
909 itemGap: 20,
910 padding: [25, 0, 0, 0], // 上右下左内边距
911 top: '5%',
912 textStyle: {
913 color: '#FFF'
914 },
915 }
916 ],
917 grid: { 857 grid: {
918 top: '30%',
919 left: '3%', 858 left: '3%',
920 right: '4%', 859 right: '4%',
921 bottom: '3%', 860 bottom: '3%',
...@@ -925,186 +864,117 @@ const setC = (h1, h2, h3, h4, h5, h6, l1, l2) => { ...@@ -925,186 +864,117 @@ const setC = (h1, h2, h3, h4, h5, h6, l1, l2) => {
925 { 864 {
926 type: 'category', 865 type: 'category',
927 stack: 'Ad', 866 stack: 'Ad',
928 data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], 867 // data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
868 data: arry,
869 axisLabel: {
870 textStyle: {
871 color: props.myTheme=='dark'?'#fff':'#515F6F',
872 },
873 formatter: function(value, index) {
874 // 只显示奇数索引的标签(从0开始计数)
875 if (myType.value) {
876 return value;
877 }
878 return index % 2 === 0 ? value : ''
879 },
880 interval: 0,
881 // rotate: 45,
882 fontSize: 10,
883 },
929 axisLine: { 884 axisLine: {
930 show: true, 885 show: true,
931 lineStyle: { 886 lineStyle: {
932 color: '#fff', 887 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
933 width: 2, 888 width: 2,
934 type: 'solid' 889 type: 'solid'
935 } 890 },
891
936 }, 892 },
937 axisLabel: {
938 formatter: function(value, index) {
939 // 只显示奇数索引的标签(从0开始计数)
940 return index % 2 === 0 ? value : '';
941 }
942 }
943 } 893 }
944 ], 894 ],
945 yAxis: [ 895 yAxis: [
946 { 896 {
947 type: 'value', 897 type: 'value',
948 name: '', 898 name: '金额(万元)',
949 axisLabel: { 899 show: false, // 完全隐藏 Y 轴
950 // formatter: '{value}w' // 在数值后添加单位 900 axisTick: {show: false},
951 show:false, 901 axisLabel: {show: false},
952 }, 902 splitLine: {show: false},
953
954 axisLine: { 903 axisLine: {
955 show: true, 904 show: false,
956 lineStyle: { 905 lineStyle: {
957 color: '#fff', 906 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
958 width: 2, 907 width: 2,
959 type: 'solid' 908 type: 'solid'
960 } 909 }
961 }, 910 },
962 splitLine: {
963 show: true, // 默认false,需显式开启
964 lineStyle: {
965 color: 'rgba(255, 255, 255, .2)', // 绿色轴线
966 }
967 }
968 } 911 }
969 ], 912 ],
970 series: [ 913 series: [
971 { 914 {
972 name: `${Year1.value}待收款`, 915 name: '0-180天',
973 type: 'bar', 916 type: 'bar',
974 stack: 'Ad', 917 stack: 'Ad',
975 barGap: 0, 918 barMaxWidth: 60, // 设置柱子的最大宽度为40px
919
976 emphasis: { 920 emphasis: {
977 focus: 'series' 921 focus: 'series'
978 }, 922 },
979 // data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390], 923 // data: [320, 332,],
980 data: h1, 924 data: arr1,
981 itemStyle: { 925 itemStyle: {
982 color: { 926 color: {
983 type: 'linear', 927 type: 'linear',
984 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变 928 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
985 colorStops: [ 929 colorStops: [
986 {offset: 0, color: '#18c877'}, // 顶部颜色 930 {offset: 0, color: 'rgba(109, 217, 255, 1)'}, // 顶部颜色
987 // {offset: 1, color: 'rgba(70, 232, 116,1 )'} // 底部颜色 931 // {offset: 1, color: 'rgba(244, 171, 9, 1)'} // 底部颜色
988 ] 932 ],
989 }, 933 },
990 }, 934 },
991 barWidth: '30%' 935 barWidth: '30%'
992 }, 936 },
993 { 937 {
994 name: `${Year1.value}收费单待签`, 938 name: '180-360天',
995 type: 'bar', 939 type: 'bar',
940 barMaxWidth: 60, // 设置柱子的最大宽度为40px
996 stack: 'Ad', 941 stack: 'Ad',
997 barGap: 0,
998 emphasis: { 942 emphasis: {
999 focus: 'series' 943 focus: 'series'
1000 }, 944 },
1001 // data: [120, 132, 101, 134, 90, 230, 210, 101, 134, 90, 230, 210], 945 // data: [120, 132,],
1002 data: h2, 946 data: arr2,
1003 itemStyle: { 947 itemStyle: {
1004 color: { 948 color: {
1005 type: 'linear', 949 type: 'linear',
1006 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变 950 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1007 colorStops: [ 951 colorStops: [
1008 {offset: 0, color: '#69c818'}, // 顶部颜色 952 {offset: 0, color: 'rgba(24, 124, 236, 1)'}, // 顶部颜色
1009 // {offset: 1, color: 'rgba(234, 216, 18, 1)'} // 底部颜色 953 // {offset: 1, color: 'rgba(148, 140, 252, 1)'} // 底部颜色
1010 ] 954 ],
1011 }, 955 },
1012 }, 956 },
1013 barWidth: '30%' 957 barWidth: '30%'
1014 }, 958 },
1015 { 959 {
1016 name: `${Year1.value}合同待签`, 960 name: '360天以上',
1017 type: 'bar', 961 type: 'bar',
1018 stack: 'Ad', 962 stack: 'Ad',
1019 barGap: 0, 963 barMaxWidth: 60, // 设置柱子的最大宽度为40px
1020 emphasis: { 964
1021 focus: 'series'
1022 },
1023 // data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,],
1024 data: h3,
1025 itemStyle: {
1026 color: {
1027 type: 'linear',
1028 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1029 colorStops: [
1030 {offset: 0, color: 'rgba(9, 173, 122, 1)'}, // 顶部颜色
1031 // {offset: 1, color: 'rgba(77, 197, 243, 1)'} // 底部颜色
1032 ]
1033 },
1034 },
1035 barWidth: '30%'
1036 },
1037
1038 {
1039 name: `${Year2.value}待收款`,
1040 type: 'bar',
1041 stack: 'Ad2',
1042 barGap: 0,
1043 emphasis: {
1044 focus: 'series'
1045 },
1046 // data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390],
1047 data: h4,
1048 itemStyle: {
1049 color: {
1050 type: 'linear',
1051 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1052 colorStops: [
1053 {offset: 0, color: '#2FA9FF'},
1054 // {offset: 1, color: 'rgba(76, 175, 80, 1)'}
1055 ]
1056 },
1057 },
1058 barWidth: '30%'
1059 },
1060 {
1061 name: `${Year2.value}收费单待签`,
1062 type: 'bar',
1063 barGap: 0,
1064 stack: 'Ad2',
1065 emphasis: {
1066 focus: 'series'
1067 },
1068 // data: [120, 132, 101, 134, 90, 230, 210, 101, 134, 90, 230, 210],
1069 data: h5,
1070 itemStyle: {
1071 color: {
1072 type: 'linear',
1073 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1074 colorStops: [
1075 {offset: 0, color: '#187CEC'},
1076 // {offset: 1, color: 'rgba(96, 181, 255, 1)'}
1077
1078 // {offset: 0, color: 'rgba(142, 36, 170, 1)'},
1079 // {offset: 1, color: 'rgba(213, 0, 249, 1)'}
1080
1081 // {offset: 0, color: 'rgba(255, 215, 0, 0.8)'},
1082 // {offset: 1, color: 'rgba(255, 255, 0, 0.6)'}
1083 ]
1084 },
1085 },
1086 barWidth: '30%'
1087 },
1088 {
1089 name: `${Year2.value}合同待签`,
1090 type: 'bar',
1091 stack: 'Ad2',
1092 barGap: 0,
1093 emphasis: { 965 emphasis: {
1094 focus: 'series' 966 focus: 'series'
1095 }, 967 },
1096 // data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,], 968 // data: [220, 182,],
1097 data: h6, 969 data: arr3,
1098 itemStyle: { 970 itemStyle: {
1099 color: { 971 color: {
1100 type: 'linear', 972 type: 'linear',
1101 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变 973 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1102 colorStops: [ 974 colorStops: [
1103 // {offset: 0, color: 'rgba(255, 87, 34, 0.8)'}, 975 {offset: 0, color: 'rgba(201, 19, 34, 1)'}, // 顶部颜色
1104 // {offset: 1, color: 'rgba(255, 138, 101, 0.6)'} 976 // {offset: 1, color: 'rgba(176, 72, 119, 1)'} // 底部颜色
1105 {offset: 0, color: 'rgba(2, 62, 218, 1)'}, 977 ],
1106 // {offset: 1, color: 'rgba(180, 120, 255, 0.6)'}
1107 ]
1108 }, 978 },
1109 }, 979 },
1110 barWidth: '30%' 980 barWidth: '30%'
...@@ -1115,7 +985,6 @@ const setC = (h1, h2, h3, h4, h5, h6, l1, l2) => { ...@@ -1115,7 +985,6 @@ const setC = (h1, h2, h3, h4, h5, h6, l1, l2) => {
1115 // autoHover(chartC, option, 0, 2000) 985 // autoHover(chartC, option, 0, 2000)
1116 } 986 }
1117 987
1118
1119 const clear = () => { 988 const clear = () => {
1120 if (autoToolTip) { 989 if (autoToolTip) {
1121 clearTimeout(autoToolTip); 990 clearTimeout(autoToolTip);
...@@ -1151,26 +1020,13 @@ onUnmounted(() => { ...@@ -1151,26 +1020,13 @@ onUnmounted(() => {
1151 .title { 1020 .title {
1152 font-family: SimHei, serif; 1021 font-family: SimHei, serif;
1153 font-weight: 600; 1022 font-weight: 600;
1154 color: #FFFFFF;
1155 //text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41); 1023 //text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41);
1156 background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%); 1024 //background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%);
1157 -webkit-background-clip: text; 1025 //-webkit-background-clip: text;
1158 -webkit-text-fill-color: transparent; 1026 //-webkit-text-fill-color: transparent;
1159 padding: calc(12 * 100vw / 1920) calc(5 * 100vw / 1920) 0; 1027 padding: calc(12 * 100vw / 1920) calc(5 * 100vw / 1920) 0;
1160 font-size: calc(22 * 100vw / 1920); 1028 font-size: calc(22 * 100vw / 1920);
1161 position: relative; 1029 position: relative;
1162
1163 &::after {
1164 content: '';
1165 width: 100%;
1166 height: 100%;
1167 background: url("@/assets/img/line2.png") no-repeat;
1168 background-size: contain;
1169 position: absolute;
1170 top: calc(20 * 100vw / 1920);
1171 left: 0;
1172 animation: movelr 4s ease-in infinite;
1173 }
1174 } 1030 }
1175 1031
1176 @keyframes movelr { 1032 @keyframes movelr {
...@@ -1185,8 +1041,6 @@ onUnmounted(() => { ...@@ -1185,8 +1041,6 @@ onUnmounted(() => {
1185 } 1041 }
1186 1042
1187 .chartCard { 1043 .chartCard {
1188 background: url("@/assets/image/box01@2x.png") no-repeat top left;
1189 background-size: 100% 100%;
1190 position: relative; 1044 position: relative;
1191 overflow: hidden; 1045 overflow: hidden;
1192 1046
...@@ -1220,10 +1074,8 @@ onUnmounted(() => { ...@@ -1220,10 +1074,8 @@ onUnmounted(() => {
1220 1074
1221 .itemBox { 1075 .itemBox {
1222 width: 48%; 1076 width: 48%;
1223 background: #0B2239; 1077 //box-shadow: 0 0 24px 0 rgba(130, 220, 255, 0.5), 0 0 16px 0 rgba(130, 220, 255, 0.27);
1224 box-shadow: 0 0 24px 0 rgba(130, 220, 255, 0.5), 0 0 16px 0 rgba(130, 220, 255, 0.27);
1225 border-radius: 5px; 1078 border-radius: 5px;
1226 border: 1px solid #12BFFF;
1227 margin-left: 10px; 1079 margin-left: 10px;
1228 1080
1229 .select { 1081 .select {
...@@ -1250,23 +1102,13 @@ onUnmounted(() => { ...@@ -1250,23 +1102,13 @@ onUnmounted(() => {
1250 :deep(.el-select__placeholder) { 1102 :deep(.el-select__placeholder) {
1251 font-family: PingFang SC, serif; 1103 font-family: PingFang SC, serif;
1252 font-weight: 500; 1104 font-weight: 500;
1253 color: #fff; 1105 //color: #fff;
1254 //text-shadow: 0 2px 0 rgba(0, 1, 1, 0.41); 1106 //text-shadow: 0 2px 0 rgba(0, 1, 1, 0.41);
1255 //background: linear-gradient(180deg, #75E2E9 0%, #FFFFFF 100%); 1107 //background: linear-gradient(180deg, #75E2E9 0%, #FFFFFF 100%);
1256 background-color: rgb(33, 123, 188, .1); /* 背景色 */ 1108 background-color: rgb(33, 123, 188, .1); /* 背景色 */
1257 -webkit-background-clip: text; 1109 -webkit-background-clip: text;
1258 //-webkit-text-fill-color: transparent 1110 //-webkit-text-fill-color: transparent
1259 } 1111 }
1260
1261 :deep(.el-tag--info) {
1262 background-color: rgb(33, 123, 188, .1); /* 背景色 */
1263 border-color: #1c81a6; /* 边框色 */
1264 color: #fff; /* 文字颜色 */
1265 }
1266
1267 :deep(.el-icon ) {
1268 color: #fff;
1269 }
1270 } 1112 }
1271 } 1113 }
1272 } 1114 }
...@@ -1284,4 +1126,87 @@ onUnmounted(() => { ...@@ -1284,4 +1126,87 @@ onUnmounted(() => {
1284 bottom: 0; 1126 bottom: 0;
1285 } 1127 }
1286 } 1128 }
1129
1130 .dark {
1131 .chartCard {
1132 background: url("@/assets/image/box01@2x.png") no-repeat top left;
1133 background-size: 100% 100%;
1134
1135 .title {
1136 background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%);
1137 -webkit-text-fill-color: transparent;
1138 -webkit-background-clip: text;
1139
1140 &::after {
1141 content: '';
1142 width: 100%;
1143 height: 100%;
1144 background: url("@/assets/img/line2.png") no-repeat;
1145 background-size: contain;
1146 position: absolute;
1147 top: calc(20 * 100vw / 1920);
1148 left: 0;
1149 animation: movelr 4s ease-in infinite;
1150 }
1151 }
1152
1153 .itemBox {
1154 background: #0B2239;
1155 border: 1px solid #12BFFF;
1156 box-shadow: 0 0 24px 0 rgba(130, 220, 255, 0.5), 0 0 16px 0 rgba(130, 220, 255, 0.27);
1157
1158 .select {
1159 :deep(.el-tag--info) {
1160 background-color: rgb(33, 123, 188, .1); /* 背景色 */
1161 border-color: #1c81a6; /* 边框色 */
1162 color: #fff; /* 文字颜色 */
1163 }
1164
1165 :deep(.el-icon ) {
1166 color: #fff;
1167 }
1168
1169 :deep(.el-select__placeholder) {
1170 color: #fff;
1171 }
1172 }
1173 }
1174 }
1175
1176
1177 }
1178
1179 .light {
1180 .chartCard {
1181 background: url("@/assets/image/box01-light.png") no-repeat top left;
1182 background-size: 100% 100%;
1183
1184 .title {
1185 color: #0060AA;
1186 }
1187
1188 .itemBox {
1189 background: transparent;
1190 border: 1px solid #97D3FF;
1191
1192 .select {
1193 :deep(.el-tag--info) {
1194 border: 1px solid #12BFFF;
1195 color: #0060AA;
1196 }
1197
1198 :deep(.el-icon ) {
1199 color: #0060AA;
1200 }
1201
1202 :deep(.el-select__placeholder) {
1203 color: #0060AA;
1204 }
1205 }
1206 }
1207 }
1208
1209
1210
1211 }
1287 </style> 1212 </style>
......
...@@ -51,33 +51,47 @@ ...@@ -51,33 +51,47 @@
51 </div> 51 </div>
52 <div ref="lineRef" style="width: 100%; height: 24vh;"></div> 52 <div ref="lineRef" style="width: 100%; height: 24vh;"></div>
53 </div> 53 </div>
54 54
55 <div class="chartCard mt30"> 55 <div class="chartCard mt30">
56 <div class="title">应收账期</div> 56 <div>
57 <!-- <div class="po_right" style="justify-content: end;">--> 57 <div class="title">节点组成</div>
58 <!-- <div class="itemBox" v-if="myType">--> 58
59 <!-- <el-select--> 59 <div class="po_right">
60 <!-- v-model="list9Y"--> 60 <div class="itemBox">
61 <!-- class="select"--> 61 <el-select
62 <!-- collapse-tags--> 62 v-model="type4"
63 <!-- multiple--> 63 class="select"
64 <!-- placeholder="全部基地"--> 64 collapse-tags
65 <!-- size="small"--> 65 multiple
66 <!-- @change="handelSelect9">--> 66 placeholder="全部"
67 <!-- <el-option--> 67 size="small"
68 <!-- v-for="(val,i) in list9"--> 68 @change="handelSelect4">
69 <!-- :key="i" :label="val.BASEJC" :value="val.BASEJC"/>--> 69 <el-option :label="`${Year1}年`" value="1"/>
70 <!-- </el-select>--> 70 <el-option :label="`${Year2}年`" value="2"/>
71 <!-- </div>--> 71 </el-select>
72 <!-- </div>--> 72 </div>
73 <div ref="overdueRef" style="width: 100%; height: 24vh;"></div> 73 <div class="itemBox" v-if="myType">
74 <el-select
75 v-model="type3"
76 class="select"
77 placeholder="全部基地"
78 size="small"
79 @change="handelSelect3"
80 >
81 <el-option label="全部" value="0"/>
82 <el-option v-for="val in list" :key="val.BASEJC" :label="val.BASEJC" :value="val.BASEJC"/>
83 </el-select>
84 </div>
85 </div>
86 </div>
87 <div ref="payeeRef" style="width: 100%; height: 24vh;"></div>
74 </div> 88 </div>
75 </div> 89 </div>
76 </template> 90 </template>
77 91
78 <script setup> 92 <script setup>
79 import {onMounted, onUnmounted, computed, ref, watch} from 'vue' 93 import {onMounted, onUnmounted, computed, ref, watch} from 'vue'
80 import {getYS007, getYS008, getYS009} from '@/api/server.js' 94 import {getYS007, getYS008, getYS006} from '@/api/server.js'
81 import {autoToolTip} from "@/plugins/auto-toolTip"; 95 import {autoToolTip} from "@/plugins/auto-toolTip";
82 import * as echarts from "echarts"; 96 import * as echarts from "echarts";
83 import * as api from "@/apiPc/common" 97 import * as api from "@/apiPc/common"
...@@ -104,6 +118,10 @@ const props = defineProps({ ...@@ -104,6 +118,10 @@ const props = defineProps({
104 type: String, 118 type: String,
105 default: undefined 119 default: undefined
106 }, 120 },
121 myTheme:{
122 type: String,
123 default: 'dark'
124 }
107 }) 125 })
108 126
109 const url = computed(() => props.url) 127 const url = computed(() => props.url)
...@@ -115,17 +133,21 @@ watch(() => props.historyDate,(newVal) => { ...@@ -115,17 +133,21 @@ watch(() => props.historyDate,(newVal) => {
115 nowYear.value = parseInt(newVal.substring(0,4)) 133 nowYear.value = parseInt(newVal.substring(0,4))
116 init() 134 init()
117 } 135 }
118
119 }) 136 })
120 watch(() => props.sBase,(newVal) => { 137 watch(() => props.sBase,(newVal) => {
121 if (isMounted.value) { 138 if (isMounted.value) {
122 init() 139 init()
123 } 140 }
124 }) 141 })
142 watch(() => props.myTheme,(newVal) => {
143 if (isMounted.value) {
144 init()
145 }
146 })
125 const myType = computed(() => props.type) 147 const myType = computed(() => props.type)
126 const zhuRef = ref(null) 148 const zhuRef = ref(null)
127 const lineRef = ref(null) 149 const lineRef = ref(null)
128 const overdueRef = ref(null) 150 const payeeRef = ref(null)
129 const kindList = ref(['文书', '婚姻', '图书', '档案', '司法', '环保', '音频', '视频', '会计', '其他']) 151 const kindList = ref(['文书', '婚姻', '图书', '档案', '司法', '环保', '音频', '视频', '会计', '其他'])
130 const dataA = ref([80, 60, 55, 62, 50, 55, 60, 62, 48, 53]) 152 const dataA = ref([80, 60, 55, 62, 50, 55, 60, 62, 48, 53])
131 const radioA = ref('month') 153 const radioA = ref('month')
...@@ -269,6 +291,26 @@ const list7Y = ref([]) ...@@ -269,6 +291,26 @@ const list7Y = ref([])
269 const select7 = ref([]) 291 const select7 = ref([])
270 const BC = ref() 292 const BC = ref()
271 293
294 const list = ref([])
295
296 const arrX = ref([])
297 const h1 = ref([])
298 const h2 = ref([])
299 const h3 = ref([])
300
301 const h4 = ref([])
302 const h5 = ref([])
303 const h6 = ref([])
304
305 let Year1 = ref(parseInt(hDate.value.substring(0,4)) - 1)
306 let Year2 = ref(parseInt(hDate.value.substring(0,4)))
307
308 const legend1 = ref([`${Year1.value}待收款`, `${Year1.value}收费单待签`, `预提占比`])
309 const legend2 = ref([`${Year2.value}待收款`, `${Year2.value}收费单待签`, `同期预提占比`])
310
311 const type4 = ref(['1','2'])
312 const type3 = ref('0')
313
272 let chartA 314 let chartA
273 let chartB 315 let chartB
274 let chartC 316 let chartC
...@@ -323,8 +365,8 @@ onMounted(() => { ...@@ -323,8 +365,8 @@ onMounted(() => {
323 // handelGetYS007() 365 // handelGetYS007()
324 // handelGetYS008() 366 // handelGetYS008()
325 // handelGetYS009() 367 // handelGetYS009()
326
327 }) 368 })
369
328 const init = () => { 370 const init = () => {
329 clear() 371 clear()
330 obj.value["SELECTDATE"] = hDate 372 obj.value["SELECTDATE"] = hDate
...@@ -340,6 +382,72 @@ const init = () => { ...@@ -340,6 +382,72 @@ const init = () => {
340 intervalA = setInterval(getdata(), 1000 * 60 * 60); 382 intervalA = setInterval(getdata(), 1000 * 60 * 60);
341 } 383 }
342 384
385 async function handelGetYS006() {
386 obj.value["SELECTDATE"] = hDate
387 obj.value["BASE"] = sBase
388
389 const res = await getYS006(url.value, obj.value)
390 list.value = res.data.baselist
391 arrX.value = []
392
393 if (myType.value) {
394 for (let i=0; i<list.value.length; i++) {
395 let row = list.value[i]
396 arrX.value.push(list.value[i].BASEJC)
397 h2.value[i] = {value:'',info:''}
398 h5.value[i] = {value:'',info:''}
399
400 h1.value[i] = list.value[i].YSDSKTOTAL / 10000;
401 h2.value[i].value = list.value[i].SFDDQTOTAL / 10000;
402 h3.value[i] = list.value[i].BASEYTZB
403 h4.value[i] = list.value[i].LASTYSDSKTOTAL / 10000;
404 h5.value[i].value = list.value[i].LASTSFDDQTOTAL / 10000
405 h6.value[i] = list.value[i].BASELASTYTZB
406
407 for (let n=0; n<row.list.length; n++) {
408 h2.value[i].info += row.list[n].YSWELLINFO
409 h5.value[i].info += row.list[n].JNYSWELLINFO
410 }
411 }
412 } else {
413 h3.value = []
414 h2.value = []
415 h1.value = []
416 h4.value = []
417 h5.value = []
418 h6.value = []
419 arrX.value = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
420 legend1.value = [`${Year1.value}待收款`, `${Year1.value}收费单待签`]
421 legend2.value = [`${Year2.value}待收款`, `${Year2.value}收费单待签`]
422
423 let obj2 = list.value.find(item => item.BASE === sBase.value)
424 for (let i=0; i<obj2.list.length; i++) {
425 h2.value[i] = {value:'',info:''}
426 h5.value[i] = {value:'',info:''}
427 h1.value[i] = obj2.list[i].YSDSK / 10000;
428 h2.value[i].value = obj2.list[i].SFDDQ / 10000;
429 h4.value[i] = obj2.list[i].JNYSDSK / 10000;
430 h5.value[i].value = obj2.list[i].JNSFDDQ / 10000;
431
432 h2.value[i].info += obj2.list[i].YSWELLINFO
433 h5.value[i].info += obj2.list[i].JNYSWELLINFO
434 }
435 }
436
437
438 setC(
439 arrX.value,
440 type4.value.includes('1') ? h1.value : [],
441 type4.value.includes('1') ? h2.value : [],
442 type4.value.includes('1') ? h3.value : [],
443 type4.value.includes('2') ? h4.value : [],
444 type4.value.includes('2') ? h5.value : [],
445 type4.value.includes('2') ? h6.value : [],
446 type4.value.includes('1') ? legend1.value : [],
447 type4.value.includes('2') ? legend2.value : [],
448 )
449 }
450
343 async function handelGetYS007() { 451 async function handelGetYS007() {
344 const res = await getYS007(url.value, obj.value) 452 const res = await getYS007(url.value, obj.value)
345 list7.value = res.data.list 453 list7.value = res.data.list
...@@ -350,9 +458,8 @@ async function handelGetYS007() { ...@@ -350,9 +458,8 @@ async function handelGetYS007() {
350 let arr1 = [] 458 let arr1 = []
351 let arr2 = [] 459 let arr2 = []
352 let arr3 = [] 460 let arr3 = []
353
354 if (myType.value) { 461 if (myType.value) {
355 list7.value.sort((a, b) => a.EXECOST - b.EXECOST); 462 list7.value.sort((a, b) => a.EXERATIO - b.EXERATIO);
356 for (const val of list7.value) { 463 for (const val of list7.value) {
357 select7.value.push(val.BASEJC) 464 select7.value.push(val.BASEJC)
358 list7Y.value.push({ 465 list7Y.value.push({
...@@ -410,6 +517,7 @@ function handelSelect7() { ...@@ -410,6 +517,7 @@ function handelSelect7() {
410 let arr3 = [] 517 let arr3 = []
411 list7Y.value = [] 518 list7Y.value = []
412 select7.value = [] 519 select7.value = []
520 arr.sort((a, b) => a.EXERATIO - b.EXERATIO);
413 for (const val of arr) { 521 for (const val of arr) {
414 select7.value.push(val.BASEJC) 522 select7.value.push(val.BASEJC)
415 list7Y.value.push({ 523 list7Y.value.push({
...@@ -419,12 +527,12 @@ function handelSelect7() { ...@@ -419,12 +527,12 @@ function handelSelect7() {
419 arr1.push({ 527 arr1.push({
420 value: Math.round(val.PLANCOST / 10000), 528 value: Math.round(val.PLANCOST / 10000),
421 name: (val.EXERATIO * 100).toFixed() + '%', 529 name: (val.EXERATIO * 100).toFixed() + '%',
422 itemStyle: val.EXERATIO * 100 >= BC.value ? color1 : color3 530 itemStyle: color4
423 }) 531 })
424 arr2.push({ 532 arr2.push({
425 value: Math.round(val.EXECOST / 10000), 533 value: Math.round(val.EXECOST / 10000),
426 name: (val.EXERATIO * 100).toFixed() + '%', 534 name: (val.EXERATIO * 100).toFixed() + '%',
427 itemStyle: val.EXERATIO * 100 >= BC.value ? color2 : color4 535 itemStyle: color2
428 }) 536 })
429 arr3.push(val.EXERATIO) 537 arr3.push(val.EXERATIO)
430 } 538 }
...@@ -522,74 +630,111 @@ function handelType8() { ...@@ -522,74 +630,111 @@ function handelType8() {
522 setB(list8Y.value, arrc) 630 setB(list8Y.value, arrc)
523 } 631 }
524 632
525 async function handelGetYS009() { 633 function handelSelect3() {
526 const res = await getYS009(url.value, obj.value) 634 if (type3.value == '0') {
527 list9.value = res.data.list 635 legend1.value = [`${Year1.value}待收款`, `${Year1.value}收费单待签`, `预提占比`]
528 list9Y.value = [] 636 legend2.value = [`${Year2.value}待收款`, `${Year2.value}收费单待签`, `同期预提占比`]
529 let arrY = [] 637 // for (const department of list.value) {
530 let arr1 = [] 638 // for (const monthData of department.list) {
531 let arr2 = [] 639 // const i = monthData.MONTH - 1; // 转为 0~11 的索引
532 let arr3 = [] 640 // h1.value[i] += monthData.YSDSK / 10000 || 0;
641 // h2.value[i] += monthData.SFDDQ / 10000 || 0;
642 // let obj = {...h3.value[i]}
643 // obj.value += monthData.HTDQ / 10000 || 0;
644 // obj.info += monthData.YSWELLINFO;
645 // h3.value[i] = {...obj}
646 //
647 // h4.value[i] += monthData.JNYSDSK / 10000 || 0
648 // h5.value[i] += monthData.JNSFDDQ / 10000 || 0
649 // let obj2 = {...h6.value[i]}
650 // obj2.value += monthData.JNHTDQ / 10000 || 0;
651 // obj2.info += monthData.JNYSWELLINFO;
652 // h6.value[i] = {...obj2}
653 // }
654 // }
655 arrX.value = []
656 for (let i=0; i<list.value.length; i++) {
657 let row = list.value[i]
658 arrX.value.push(list.value[i].BASEJC)
659 h2.value[i] = {value:'',info:''}
660 h5.value[i] = {value:'',info:''}
533 661
534 if (myType.value) { 662 h1.value[i] = list.value[i].YSDSKTOTAL / 10000;
535 for (const val of list9.value) { 663 h2.value[i].value = list.value[i].SFDDQTOTAL / 10000;
536 list9Y.value.push(val.BASEJC) 664 h3.value[i] = list.value[i].BASEYTZB
537 arrY.push(val.BASEJC) 665 h4.value[i] = list.value[i].LASTYSDSKTOTAL / 10000;
538 arr1.push(Math.round(val.WKPCOSTONE / 10000)) 666 h5.value[i].value = list.value[i].LASTSFDDQTOTAL / 10000
539 arr2.push(Math.round(val.WKPCOSTTWO / 10000)) 667 h6.value[i] = list.value[i].BASELASTYTZB
540 arr3.push({ 668
541 value: Math.round(val.WKPCOSTTHREE / 10000), 669 for (let n=0; n<row.list.length; n++) {
542 info: val.YQWELLINFO 670 h2.value[i].info += row.list[n].YSWELLINFO
543 }) 671 h5.value[i].info += row.list[n].JNYSWELLINFO
672 }
544 } 673 }
545 } else { 674 } else {
546 for (const val of list9.value) { 675 // 找到对应的数据
547 arrY.push(val.MONTH) 676 h3.value = []
548 arr1.push(Math.round(val.WKPCOSTONE / 10000)) 677 h2.value = []
549 arr2.push(Math.round(val.WKPCOSTTWO / 10000)) 678 h1.value = []
550 arr3.push({ 679 h4.value = []
551 value: Math.round(val.WKPCOSTTHREE / 10000), 680 h5.value = []
552 info: val.YQWELLINFO 681 h6.value = []
553 }) 682 arrX.value = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
554 } 683 legend1.value = [`${Year1.value}待收款`, `${Year1.value}收费单待签`]
555 } 684 legend2.value = [`${Year2.value}待收款`, `${Year2.value}收费单待签`]
556 685
557 setC(arrY, arr1, arr2, arr3) 686 let obj = list.value.find(item => item.BASEJC === type3.value)
558 } 687 for (let i=0; i<obj.list.length; i++) {
688 h2.value[i] = {value:'',info:''}
689 h5.value[i] = {value:'',info:''}
690 h1.value[i] = obj.list[i].YSDSK / 10000;
691 h2.value[i].value = obj.list[i].SFDDQ / 10000;
692 h4.value[i] = obj.list[i].JNYSDSK / 10000;
693 h5.value[i].value = obj.list[i].JNSFDDQ / 10000;
559 694
560 function handelSelect9() { 695 h2.value[i].info += obj.list[i].YSWELLINFO
561 let arr = list9Y.value.map(val => list9.value.find(item => item.BASEJC === val)); 696 h5.value[i].info += obj.list[i].JNYSWELLINFO
562 list9Y.value = [] 697 }
563 console.log(arr)
564 let arrY = []
565 let arr1 = []
566 let arr2 = []
567 let arr3 = []
568
569 for (const val of arr) {
570 list9Y.value.push(val.BASEJC)
571 arrY.push(val.BASEJC)
572 arr1.push(Math.round(val.WKPCOSTONE / 10000))
573 arr2.push(Math.round(val.WKPCOSTTWO / 10000))
574 arr3.push({
575 value: Math.round(val.WKPCOSTTHREE / 10000),
576 info: val.YQWELLINFO
577 })
578 } 698 }
699 setC(
700 arrX.value,
701 type4.value.includes('1') ? h1.value : [],
702 type4.value.includes('1') ? h2.value : [],
703 type4.value.includes('1') ? h3.value : [],
704 type4.value.includes('2') ? h4.value : [],
705 type4.value.includes('2') ? h5.value : [],
706 type4.value.includes('2') ? h6.value : [],
707 type4.value.includes('1') ? legend1.value : [],
708 type4.value.includes('2') ? legend2.value : [],
709 )
710 // setC(h1.value, h2.value, h3.value, h4.value, h5.value, h6.value)
711 }
579 712
580 setC(arrY, arr1, arr2, arr3) 713 function handelSelect4() {
714 // console.log(type4.value)
715 // if (type4.value)
716 setC(
717 arrX.value,
718 type4.value.includes('1') ? h1.value : [],
719 type4.value.includes('1') ? h2.value : [],
720 type4.value.includes('1') ? h3.value : [],
721 type4.value.includes('2') ? h4.value : [],
722 type4.value.includes('2') ? h5.value : [],
723 type4.value.includes('2') ? h6.value : [],
724 type4.value.includes('1') ? legend1.value : [],
725 type4.value.includes('2') ? legend2.value : [],
726 )
581 } 727 }
582 728
583 const getdata = () => { 729 const getdata = () => {
730 handelGetYS006()
584 handelGetYS007() 731 handelGetYS007()
585 handelGetYS008() 732 handelGetYS008()
586 handelGetYS009()
587 } 733 }
588 734
589 const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { 735 const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
590 chartA = echarts.init(zhuRef.value) 736 chartA = echarts.init(zhuRef.value)
591 let option 737 let option
592 console.log(myType.value)
593 if (myType.value) { 738 if (myType.value) {
594 option = { 739 option = {
595 tooltip: { 740 tooltip: {
...@@ -609,12 +754,12 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -609,12 +754,12 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
609 legend: { 754 legend: {
610 top: "3%", 755 top: "3%",
611 textStyle: { 756 textStyle: {
612 color: '#FFF' 757 color: props.myTheme=='dark'?'#fff':'#515F6F'
613 }, 758 },
614 }, 759 },
615 grid: { 760 grid: {
616 top: "15%", 761 top: "15%",
617 left: '5%', 762 left: '3%',
618 right: '4%', 763 right: '4%',
619 bottom: '3%', 764 bottom: '3%',
620 containLabel: true 765 containLabel: true
...@@ -622,12 +767,15 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -622,12 +767,15 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
622 xAxis: { 767 xAxis: {
623 type: 'value', 768 type: 'value',
624 axisLabel: { 769 axisLabel: {
770 textStyle: {
771 color: props.myTheme=='dark'?'#fff':'#515F6F',
772 },
625 formatter: '{value}' // 在数值后添加单位 773 formatter: '{value}' // 在数值后添加单位
626 }, 774 },
627 axisLine: { 775 axisLine: {
628 show: true, 776 show: true,
629 lineStyle: { 777 lineStyle: {
630 color: '#fff', 778 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
631 width: 2, 779 width: 2,
632 type: 'solid' 780 type: 'solid'
633 } 781 }
...@@ -635,7 +783,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -635,7 +783,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
635 splitLine: { 783 splitLine: {
636 show: true, // 默认false,需显式开启 784 show: true, // 默认false,需显式开启
637 lineStyle: { 785 lineStyle: {
638 color: 'rgba(255, 255, 255, .2)', // 绿色轴线 786 color: props.myTheme=='dark'?'rgba(255, 255, 255, .2)':'#ADC1D4', // 绿色轴线
639 } 787 }
640 } 788 }
641 }, 789 },
...@@ -660,6 +808,9 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -660,6 +808,9 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
660 type: 'category', 808 type: 'category',
661 data: arrY, 809 data: arrY,
662 axisLabel: { 810 axisLabel: {
811 textStyle: {
812 color: props.myTheme=='dark'?'#fff':'#515F6F',
813 },
663 // formatter: '{value}w' // 在数值后添加单位 814 // formatter: '{value}w' // 在数值后添加单位
664 interval: 0, 815 interval: 0,
665 fontSize: 10, 816 fontSize: 10,
...@@ -667,7 +818,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -667,7 +818,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
667 axisLine: { 818 axisLine: {
668 show: true, 819 show: true,
669 lineStyle: { 820 lineStyle: {
670 color: 'rgba(255, 255, 255, 1)', 821 color: props.myTheme=='dark'?'rgba(255, 255, 255, 1)':'#ADC1D4',
671 width: 1, 822 width: 1,
672 type: 'solid' 823 type: 'solid'
673 } 824 }
...@@ -722,7 +873,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -722,7 +873,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
722 show: true, 873 show: true,
723 position: 'right', 874 position: 'right',
724 textStyle: { 875 textStyle: {
725 color: 'rgba(255, 255, 255, 1)', 876 color: props.myTheme=='dark'?'rgba(255, 255, 255, 1)':'rgba(0, 0, 0, 1)',
726 }, 877 },
727 formatter: function (v1) { 878 formatter: function (v1) {
728 return v1.data.name 879 return v1.data.name
...@@ -767,7 +918,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -767,7 +918,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
767 formatter: BC + '%', 918 formatter: BC + '%',
768 position: 'end', // 可选值: 'start', 'middle', 'end' 919 position: 'end', // 可选值: 'start', 'middle', 'end'
769 distance: [-20, 40], 920 distance: [-20, 40],
770 color: "#fff" 921 color: props.myTheme=='dark'?'#fff':'#000'
771 } 922 }
772 } 923 }
773 ] 924 ]
...@@ -795,7 +946,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -795,7 +946,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
795 legend: { 946 legend: {
796 top: "3%", 947 top: "3%",
797 textStyle: { 948 textStyle: {
798 color: '#FFF' 949 color: props.myTheme=='dark'?'#fff':'#515F6F'
799 }, 950 },
800 }, 951 },
801 grid: { 952 grid: {
...@@ -816,7 +967,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -816,7 +967,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
816 splitLine: { 967 splitLine: {
817 show: true, // 默认false,需显式开启 968 show: true, // 默认false,需显式开启
818 lineStyle: { 969 lineStyle: {
819 color: 'rgba(255, 255, 255, .2)', // 绿色轴线 970 color: props.myTheme=='dark'?'rgba(255, 255, 255, .2)':'#ADC1D4', // 绿色轴线
820 } 971 }
821 } 972 }
822 }, 973 },
...@@ -841,6 +992,9 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -841,6 +992,9 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
841 type: 'category', 992 type: 'category',
842 data: arrY, 993 data: arrY,
843 axisLabel: { 994 axisLabel: {
995 textStyle: {
996 color: props.myTheme=='dark'?'#fff':'#515F6F',
997 },
844 formatter: function(value, index) { 998 formatter: function(value, index) {
845 // 只显示奇数索引的标签(从0开始计数) 999 // 只显示奇数索引的标签(从0开始计数)
846 return index % 2 === 0 ? value : ''; 1000 return index % 2 === 0 ? value : '';
...@@ -851,7 +1005,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -851,7 +1005,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
851 axisLine: { 1005 axisLine: {
852 show: true, 1006 show: true,
853 lineStyle: { 1007 lineStyle: {
854 color: 'rgba(255, 255, 255, 1)', 1008 color: props.myTheme=='dark'?'rgba(255, 255, 255, 1)':'#ADC1D4',
855 width: 1, 1009 width: 1,
856 type: 'solid' 1010 type: 'solid'
857 } 1011 }
...@@ -904,7 +1058,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -904,7 +1058,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
904 show: true, 1058 show: true,
905 position: 'right', 1059 position: 'right',
906 textStyle: { 1060 textStyle: {
907 color: 'rgba(255, 255, 255, 1)', 1061 color: props.myTheme=='dark'?'rgba(255, 255, 255, 1)':'rgba(0, 0, 0, 1)',
908 }, 1062 },
909 formatter: function (v1) { 1063 formatter: function (v1) {
910 return v1.data.name 1064 return v1.data.name
...@@ -947,7 +1101,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => { ...@@ -947,7 +1101,7 @@ const setA = (arrY, arr1, arr2, arr3, markLineName, BC) => {
947 formatter: BC + '%', 1101 formatter: BC + '%',
948 position: 'end', // 可选值: 'start', 'middle', 'end' 1102 position: 'end', // 可选值: 'start', 'middle', 'end'
949 distance: [-20, 40], 1103 distance: [-20, 40],
950 color: "#fff" 1104 color: props.myTheme=='dark'?'#fff':'#000'
951 } 1105 }
952 } 1106 }
953 ] 1107 ]
...@@ -992,12 +1146,15 @@ const setB = (arrY, arr1, arr2) => { ...@@ -992,12 +1146,15 @@ const setB = (arrY, arr1, arr2) => {
992 xAxis: { 1146 xAxis: {
993 type: 'value', 1147 type: 'value',
994 axisLabel: { 1148 axisLabel: {
1149 textStyle: {
1150 color: props.myTheme=='dark'?'#fff':'#515F6F',
1151 },
995 formatter: '{value}' // 在数值后添加单位 1152 formatter: '{value}' // 在数值后添加单位
996 }, 1153 },
997 axisLine: { 1154 axisLine: {
998 show: true, 1155 show: true,
999 lineStyle: { 1156 lineStyle: {
1000 color: '#fff', 1157 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1001 width: 1, 1158 width: 1,
1002 type: 'solid' 1159 type: 'solid'
1003 } 1160 }
...@@ -1005,7 +1162,7 @@ const setB = (arrY, arr1, arr2) => { ...@@ -1005,7 +1162,7 @@ const setB = (arrY, arr1, arr2) => {
1005 splitLine: { 1162 splitLine: {
1006 show: true, // 默认false,需显式开启 1163 show: true, // 默认false,需显式开启
1007 lineStyle: { 1164 lineStyle: {
1008 color: 'rgba(255, 255, 255, .2)', // 绿色轴线 1165 color: props.myTheme=='dark'?'rgba(255, 255, 255, .2)':'#ADC1D4', // 绿色轴线
1009 } 1166 }
1010 } 1167 }
1011 }, 1168 },
...@@ -1014,6 +1171,9 @@ const setB = (arrY, arr1, arr2) => { ...@@ -1014,6 +1171,9 @@ const setB = (arrY, arr1, arr2) => {
1014 // data: ['塘沽', '深圳', '漳江', '上海', '海南', '山西', '陕西', '新疆', '伊拉克'], 1171 // data: ['塘沽', '深圳', '漳江', '上海', '海南', '山西', '陕西', '新疆', '伊拉克'],
1015 data: arrY, 1172 data: arrY,
1016 axisLabel: { 1173 axisLabel: {
1174 textStyle: {
1175 color: props.myTheme=='dark'?'#fff':'#515F6F',
1176 },
1017 // formatter: '{value}w' // 在数值后添加单位 1177 // formatter: '{value}w' // 在数值后添加单位
1018 interval: 0, 1178 interval: 0,
1019 fontSize: 10, 1179 fontSize: 10,
...@@ -1021,7 +1181,7 @@ const setB = (arrY, arr1, arr2) => { ...@@ -1021,7 +1181,7 @@ const setB = (arrY, arr1, arr2) => {
1021 axisLine: { 1181 axisLine: {
1022 show: true, 1182 show: true,
1023 lineStyle: { 1183 lineStyle: {
1024 color: '#fff', 1184 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1025 width: 2, 1185 width: 2,
1026 type: 'solid' 1186 type: 'solid'
1027 } 1187 }
...@@ -1186,7 +1346,7 @@ const setB = (arrY, arr1, arr2) => { ...@@ -1186,7 +1346,7 @@ const setB = (arrY, arr1, arr2) => {
1186 legend: { 1346 legend: {
1187 top: "3%", 1347 top: "3%",
1188 textStyle: { 1348 textStyle: {
1189 color: '#FFF' 1349 color: props.myTheme=='dark'?'#fff':'#515F6F'
1190 }, 1350 },
1191 }, 1351 },
1192 grid: { 1352 grid: {
...@@ -1207,7 +1367,7 @@ const setB = (arrY, arr1, arr2) => { ...@@ -1207,7 +1367,7 @@ const setB = (arrY, arr1, arr2) => {
1207 splitLine: { 1367 splitLine: {
1208 show: true, // 默认false,需显式开启 1368 show: true, // 默认false,需显式开启
1209 lineStyle: { 1369 lineStyle: {
1210 color: 'rgba(255, 255, 255, .2)', // 绿色轴线 1370 color: props.myTheme=='dark'?'rgba(255, 255, 255, .2)':'#ADC1D4', // 绿色轴线
1211 } 1371 }
1212 } 1372 }
1213 }, 1373 },
...@@ -1216,6 +1376,9 @@ const setB = (arrY, arr1, arr2) => { ...@@ -1216,6 +1376,9 @@ const setB = (arrY, arr1, arr2) => {
1216 // data: ['塘沽', '深圳', '漳江', '上海', '海南', '山西', '陕西', '新疆', '伊拉克'], 1376 // data: ['塘沽', '深圳', '漳江', '上海', '海南', '山西', '陕西', '新疆', '伊拉克'],
1217 data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'], 1377 data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'],
1218 axisLabel: { 1378 axisLabel: {
1379 textStyle: {
1380 color: props.myTheme=='dark'?'#fff':'#515F6F',
1381 },
1219 formatter: function(value, index) { 1382 formatter: function(value, index) {
1220 // 只显示奇数索引的标签(从0开始计数) 1383 // 只显示奇数索引的标签(从0开始计数)
1221 return index % 2 === 0 ? value : ''; 1384 return index % 2 === 0 ? value : '';
...@@ -1226,7 +1389,7 @@ const setB = (arrY, arr1, arr2) => { ...@@ -1226,7 +1389,7 @@ const setB = (arrY, arr1, arr2) => {
1226 axisLine: { 1389 axisLine: {
1227 show: true, 1390 show: true,
1228 lineStyle: { 1391 lineStyle: {
1229 color: '#fff', 1392 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1230 width: 2, 1393 width: 2,
1231 type: 'solid' 1394 type: 'solid'
1232 } 1395 }
...@@ -1527,13 +1690,15 @@ const setB = (arrY, arr1, arr2) => { ...@@ -1527,13 +1690,15 @@ const setB = (arrY, arr1, arr2) => {
1527 chartB.setOption(option) 1690 chartB.setOption(option)
1528 // autoHover(chartB, option, 0, 2000) 1691 // autoHover(chartB, option, 0, 2000)
1529 } 1692 }
1530 const setC = (arry, arr1, arr2, arr3) => { 1693
1531 chartC = echarts.init(overdueRef.value) 1694 const setC = (arr, h1, h2, h3, h4, h5, h6, l1, l2) => {
1695 chartC = echarts.init(payeeRef.value)
1532 const option = { 1696 const option = {
1533 tooltip: { 1697 tooltip: {
1534 trigger: 'axis', 1698 // axisPointer: {
1535 confine: true, 1699 // type: 'shadow'
1536 valueFormatter: (value) => value + '万', 1700 // },
1701 valueFormatter: (value) => (value * 1).toFixed() + '万',
1537 backgroundColor: 'rgba(5, 28, 51, 1)', // 背景色 1702 backgroundColor: 'rgba(5, 28, 51, 1)', // 背景色
1538 borderColor: 'rgba(46, 151, 198, 1)', // 边框颜色 1703 borderColor: 'rgba(46, 151, 198, 1)', // 边框颜色
1539 borderWidth: 1, // 边框宽度 1704 borderWidth: 1, // 边框宽度
...@@ -1541,30 +1706,73 @@ const setC = (arry, arr1, arr2, arr3) => { ...@@ -1541,30 +1706,73 @@ const setC = (arry, arr1, arr2, arr3) => {
1541 color: '#fff', // 文字颜色 1706 color: '#fff', // 文字颜色
1542 fontSize: 12, // 文字大小 1707 fontSize: 12, // 文字大小
1543 }, 1708 },
1544 axisPointer: { 1709 confine: true,
1545 type: 'none' // 关闭悬浮竖线
1546 },
1547 position: 'top', 1710 position: 'top',
1548 // formatter: function (row) { 1711 formatter: function (row) {
1549 // return ` 1712 let outStr = ''
1550 // <div style="font-weight:bold">${row.name}</div> 1713 let barStr = `
1551 // <div style="display:flex;align-items:center;margin-top:5px"> 1714 <div style="font-weight:bold">${row.name}</div>
1552 // ${row.marker} 1715 <div style="display:flex;align-items:center;margin-top:5px">
1553 // ${row.seriesName == '逾期360天以上' ? '未开票金额' : row.seriesName}: ${row.value}万 1716 ${row.marker}
1554 // </div> 1717 ${row.seriesName}: ${row.value.toFixed(0)}
1555 // <div> 1718 </div>
1556 // ${row.data?.info ? row.data?.info?.replaceAll('\n', '<br>') : ''} 1719 <div>
1557 // </div> 1720 ${row.data?.info ? row.data?.info?.replaceAll('万', '万<br>') : ''}
1558 // `; 1721 </div>
1559 // } 1722 `
1560 }, 1723
1561 legend: { 1724 let lineStr = `
1562 top: '10%', 1725 <div style="font-weight:bold">${row.name}</div>
1563 textStyle: { 1726 <div style="display:flex;align-items:center;margin-top:5px">
1564 color: '#FFF' 1727 ${row.marker}
1728 ${row.seriesName}: ${row.value}
1729 </div>
1730 `
1731
1732 if (row.seriesName == "预提占比" || row.seriesName == "同期预提占比") {
1733 outStr = lineStr
1734 } else {
1735 outStr = barStr
1736 }
1737
1738 return outStr;
1565 }, 1739 },
1740 extraCssText: `
1741 max-height: 150px;
1742 overflow: auto !important;
1743 padding-right: 10px; /* 为滚动条留出空间 */
1744 `,
1745 enterable: true, // 允许鼠标进入tooltip
1746 axisPointer: {
1747 type: 'cross',
1748 label: {
1749 backgroundColor: '#6a7985'
1750 }
1751 }
1566 }, 1752 },
1753 legend: [
1754 {
1755 data: l1,
1756 left: 'center',
1757 itemGap: 20,
1758 top: '5%',
1759 textStyle: {
1760 color: props.myTheme=='dark'?'#fff':'#515F6F'
1761 },
1762 },
1763 {
1764 data: l2,
1765 left: 'center',
1766 itemGap: 20,
1767 padding: [25, 0, 0, 0], // 上右下左内边距
1768 top: '5%',
1769 textStyle: {
1770 color: props.myTheme=='dark'?'#fff':'#515F6F'
1771 },
1772 }
1773 ],
1567 grid: { 1774 grid: {
1775 top: '30%',
1568 left: '3%', 1776 left: '3%',
1569 right: '4%', 1777 right: '4%',
1570 bottom: '3%', 1778 bottom: '3%',
...@@ -1574,123 +1782,230 @@ const setC = (arry, arr1, arr2, arr3) => { ...@@ -1574,123 +1782,230 @@ const setC = (arry, arr1, arr2, arr3) => {
1574 { 1782 {
1575 type: 'category', 1783 type: 'category',
1576 stack: 'Ad', 1784 stack: 'Ad',
1577 // data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], 1785 data: arr,
1578 data: arry,
1579 axisLabel: {
1580 formatter: function(value, index) {
1581 // 只显示奇数索引的标签(从0开始计数)
1582 if (myType.value) {
1583 return value;
1584 }
1585 return index % 2 === 0 ? value : ''
1586 },
1587 interval: 0,
1588 // rotate: 45,
1589 fontSize: 10,
1590 },
1591 axisLine: { 1786 axisLine: {
1592 show: true, 1787 show: true,
1593 lineStyle: { 1788 lineStyle: {
1594 color: '#fff', 1789 color: props.myTheme=='dark'?'#fff':'#ADC1D4',
1595 width: 2, 1790 width: 2,
1596 type: 'solid' 1791 type: 'solid'
1597 }, 1792 }
1598
1599 }, 1793 },
1794 axisLabel: {
1795 textStyle: {
1796 color: props.myTheme=='dark'?'#fff':'#515F6F',
1797 }
1798 }
1600 } 1799 }
1601 ], 1800 ],
1602 yAxis: [ 1801 yAxis: [
1603 { 1802 {
1604 type: 'value', 1803 type: 'value',
1605 name: '金额(万元)', 1804 name: '',
1606 show: false, // 完全隐藏 Y 轴 1805 axisLabel: {
1607 axisTick: {show: false}, 1806 // formatter: '{value}w' // 在数值后添加单位
1608 axisLabel: {show: false}, 1807 show:false,
1609 splitLine: {show: false}, 1808 },
1809
1610 axisLine: { 1810 axisLine: {
1611 show: false, 1811 show: false,
1812 },
1813 splitLine: {
1814 show: true, // 默认false,需显式开启
1612 lineStyle: { 1815 lineStyle: {
1613 color: '#fff', 1816 color: props.myTheme=='dark'?'rgba(255, 255, 255, .2)':'#ADC1D4', // 绿色轴线
1614 width: 2,
1615 type: 'solid'
1616 } 1817 }
1818 }
1819 },
1820 {
1821 type: 'value',
1822 name: '',
1823 axisLabel: {
1824 // formatter: '{value}w' // 在数值后添加单位
1825 show:false,
1617 }, 1826 },
1827 axisLine: {
1828 show: false,
1829 },
1830 splitLine: {
1831 show: false, // 默认false,需显式开启
1832 }
1618 } 1833 }
1619 ], 1834 ],
1620 series: [ 1835 series: [
1621 { 1836 {
1622 name: '0-180天', 1837 name: `${Year1.value}待收款`,
1623 type: 'bar', 1838 type: 'bar',
1624 stack: 'Ad', 1839 stack: 'Ad',
1625 barMaxWidth: 60, // 设置柱子的最大宽度为40px 1840 barGap: 0,
1626
1627 emphasis: { 1841 emphasis: {
1628 focus: 'series' 1842 focus: 'series'
1629 }, 1843 },
1630 // data: [320, 332,], 1844 // data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390],
1631 data: arr1, 1845 data: h1,
1632 itemStyle: { 1846 itemStyle: {
1633 color: { 1847 color: {
1634 type: 'linear', 1848 type: 'linear',
1635 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变 1849 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1636 colorStops: [ 1850 colorStops: [
1637 {offset: 0, color: 'rgba(109, 217, 255, 1)'}, // 顶部颜色 1851 {offset: 0, color: '#18c877'}, // 顶部颜色
1638 // {offset: 1, color: 'rgba(244, 171, 9, 1)'} // 底部颜色 1852 // {offset: 1, color: 'rgba(70, 232, 116,1 )'} // 底部颜色
1639 ], 1853 ]
1640 }, 1854 },
1641 }, 1855 },
1642 barWidth: '30%' 1856 barWidth: '30%'
1643 }, 1857 },
1644 { 1858 {
1645 name: '180-360天', 1859 name: `${Year1.value}收费单待签`,
1646 type: 'bar', 1860 type: 'bar',
1647 barMaxWidth: 60, // 设置柱子的最大宽度为40px
1648 stack: 'Ad', 1861 stack: 'Ad',
1862 barGap: 0,
1863 emphasis: {
1864 focus: 'series'
1865 },
1866 // data: [120, 132, 101, 134, 90, 230, 210, 101, 134, 90, 230, 210],
1867 data: h2,
1868 itemStyle: {
1869 color: {
1870 type: 'linear',
1871 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1872 colorStops: [
1873 {offset: 0, color: '#69c818'}, // 顶部颜色
1874 // {offset: 1, color: 'rgba(234, 216, 18, 1)'} // 底部颜色
1875 ]
1876 },
1877 },
1878 barWidth: '30%'
1879 },
1880 // {
1881 // name: `${Year1.value}合同待签`,
1882 // type: 'bar',
1883 // stack: 'Ad',
1884 // barGap: 0,
1885 // emphasis: {
1886 // focus: 'series'
1887 // },
1888 // // data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,],
1889 // data: h3,
1890 // itemStyle: {
1891 // color: {
1892 // type: 'linear',
1893 // x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1894 // colorStops: [
1895 // {offset: 0, color: 'rgba(9, 173, 122, 1)'}, // 顶部颜色
1896 // // {offset: 1, color: 'rgba(77, 197, 243, 1)'} // 底部颜色
1897 // ]
1898 // },
1899 // },
1900 // barWidth: '30%'
1901 // },
1902 {
1903 name: `预提占比`,
1904 type: 'line',
1905 data: h3,
1906 symbol:'circle',
1907 symbolSize: 6,
1908 yAxisIndex:1,
1909 itemStyle: {
1910 normal:{
1911 color:'#F7CE10'
1912 }
1913 },
1914 },
1915
1916 {
1917 name: `${Year2.value}待收款`,
1918 type: 'bar',
1919 stack: 'Ad2',
1920 barGap: 0,
1649 emphasis: { 1921 emphasis: {
1650 focus: 'series' 1922 focus: 'series'
1651 }, 1923 },
1652 // data: [120, 132,], 1924 // data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390],
1653 data: arr2, 1925 data: h4,
1654 itemStyle: { 1926 itemStyle: {
1655 color: { 1927 color: {
1656 type: 'linear', 1928 type: 'linear',
1657 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变 1929 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1658 colorStops: [ 1930 colorStops: [
1659 {offset: 0, color: 'rgba(24, 124, 236, 1)'}, // 顶部颜色 1931 {offset: 0, color: '#2FA9FF'},
1660 // {offset: 1, color: 'rgba(148, 140, 252, 1)'} // 底部颜色 1932 // {offset: 1, color: 'rgba(76, 175, 80, 1)'}
1661 ], 1933 ]
1662 }, 1934 },
1663 }, 1935 },
1664 barWidth: '30%' 1936 barWidth: '30%'
1665 }, 1937 },
1666 { 1938 {
1667 name: '360天以上', 1939 name: `${Year2.value}收费单待签`,
1668 type: 'bar', 1940 type: 'bar',
1669 stack: 'Ad', 1941 barGap: 0,
1670 barMaxWidth: 60, // 设置柱子的最大宽度为40px 1942 stack: 'Ad2',
1671
1672 emphasis: { 1943 emphasis: {
1673 focus: 'series' 1944 focus: 'series'
1674 }, 1945 },
1675 // data: [220, 182,], 1946 // data: [120, 132, 101, 134, 90, 230, 210, 101, 134, 90, 230, 210],
1676 data: arr3, 1947 data: h5,
1677 itemStyle: { 1948 itemStyle: {
1678 color: { 1949 color: {
1679 type: 'linear', 1950 type: 'linear',
1680 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变 1951 x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1681 colorStops: [ 1952 colorStops: [
1682 {offset: 0, color: 'rgba(201, 19, 34, 1)'}, // 顶部颜色 1953 {offset: 0, color: '#187CEC'},
1683 // {offset: 1, color: 'rgba(176, 72, 119, 1)'} // 底部颜色 1954 // {offset: 1, color: 'rgba(96, 181, 255, 1)'}
1684 ], 1955
1956 // {offset: 0, color: 'rgba(142, 36, 170, 1)'},
1957 // {offset: 1, color: 'rgba(213, 0, 249, 1)'}
1958
1959 // {offset: 0, color: 'rgba(255, 215, 0, 0.8)'},
1960 // {offset: 1, color: 'rgba(255, 255, 0, 0.6)'}
1961 ]
1685 }, 1962 },
1686 }, 1963 },
1687 barWidth: '30%' 1964 barWidth: '30%'
1688 }, 1965 },
1966 // {
1967 // name: `${Year2.value}合同待签`,
1968 // type: 'bar',
1969 // stack: 'Ad2',
1970 // barGap: 0,
1971 // emphasis: {
1972 // focus: 'series'
1973 // },
1974 // // data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,],
1975 // data: h6,
1976 // itemStyle: {
1977 // color: {
1978 // type: 'linear',
1979 // x: 0, y: 0, x2: 1, y2: 1, // 垂直渐变
1980 // colorStops: [
1981 // // {offset: 0, color: 'rgba(255, 87, 34, 0.8)'},
1982 // // {offset: 1, color: 'rgba(255, 138, 101, 0.6)'}
1983 // {offset: 0, color: 'rgba(2, 62, 218, 1)'},
1984 // // {offset: 1, color: 'rgba(180, 120, 255, 0.6)'}
1985 // ]
1986 // },
1987 // },
1988 // barWidth: '30%'
1989 // },
1990 {
1991 name: `同期预提占比`,
1992 type: 'line',
1993 data: h6,
1994 symbol:'circle',
1995 symbolSize: 6,
1996 yAxisIndex:1,
1997 itemStyle: {
1998 normal:{
1999 color:'#00B5A3'
2000 }
2001 },
2002 },
1689 ] 2003 ]
1690 } 2004 }
1691 chartC.setOption(option) 2005 chartC.setOption(option)
1692 // autoHover(chartC, option, 0, 2000) 2006 // autoHover(chartC, option, 0, 2000)
1693 } 2007 }
2008
1694 const clear = () => { 2009 const clear = () => {
1695 if (autoToolTip) { 2010 if (autoToolTip) {
1696 clearTimeout(autoToolTip); 2011 clearTimeout(autoToolTip);
...@@ -1727,24 +2042,12 @@ onUnmounted(() => { ...@@ -1727,24 +2042,12 @@ onUnmounted(() => {
1727 font-weight: 600; 2042 font-weight: 600;
1728 color: #FFFFFF; 2043 color: #FFFFFF;
1729 //text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41); 2044 //text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41);
1730 background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%); 2045 //background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%);
1731 -webkit-background-clip: text; 2046 //-webkit-background-clip: text;
1732 -webkit-text-fill-color: transparent; 2047 //-webkit-text-fill-color: transparent;
1733 padding: calc(12 * 100vw / 1920) calc(5 * 100vw / 1920) 0; 2048 padding: calc(12 * 100vw / 1920) calc(5 * 100vw / 1920) 0;
1734 font-size: calc(22 * 100vw / 1920); 2049 font-size: calc(22 * 100vw / 1920);
1735 position: relative; 2050 position: relative;
1736
1737 &::after {
1738 content: '';
1739 width: 100%;
1740 height: 100%;
1741 background: url("@/assets/img/line2.png") no-repeat;
1742 background-size: contain;
1743 position: absolute;
1744 top: calc(20 * 100vw / 1920);
1745 left: 0;
1746 animation: movelr 4s ease-in infinite;
1747 }
1748 } 2051 }
1749 2052
1750 @keyframes movelr { 2053 @keyframes movelr {
...@@ -1796,7 +2099,6 @@ onUnmounted(() => { ...@@ -1796,7 +2099,6 @@ onUnmounted(() => {
1796 .itemBox { 2099 .itemBox {
1797 width: 60%; 2100 width: 60%;
1798 background: #0B2239; 2101 background: #0B2239;
1799 box-shadow: 0 0 24px 0 rgba(130, 220, 255, 0.5), 0 0 16px 0 rgba(130, 220, 255, 0.27);
1800 border-radius: 5px; 2102 border-radius: 5px;
1801 border: 1px solid #12BFFF; 2103 border: 1px solid #12BFFF;
1802 2104
...@@ -1833,12 +2135,6 @@ onUnmounted(() => { ...@@ -1833,12 +2135,6 @@ onUnmounted(() => {
1833 //-webkit-text-fill-color: transparent 2135 //-webkit-text-fill-color: transparent
1834 } 2136 }
1835 2137
1836 :deep(.el-tag--info) {
1837 background-color: rgb(33, 123, 188, .1); /* 背景色 */
1838 border-color: #1c81a6; /* 边框色 */
1839 color: #fff; /* 文字颜色 */
1840 }
1841
1842 :deep(.el-icon ) { 2138 :deep(.el-icon ) {
1843 color: #fff; 2139 color: #fff;
1844 } 2140 }
...@@ -1873,4 +2169,87 @@ onUnmounted(() => { ...@@ -1873,4 +2169,87 @@ onUnmounted(() => {
1873 -webkit-text-fill-color: transparent; 2169 -webkit-text-fill-color: transparent;
1874 cursor: pointer; 2170 cursor: pointer;
1875 } 2171 }
2172
2173 .dark {
2174 .chartCard {
2175 background: url("@/assets/image/box01@2x.png") no-repeat top left;
2176 background-size: 100% 100%;
2177
2178 .title {
2179 background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%);
2180 -webkit-text-fill-color: transparent;
2181 -webkit-background-clip: text;
2182
2183 &::after {
2184 content: '';
2185 width: 100%;
2186 height: 100%;
2187 background: url("@/assets/img/line2.png") no-repeat;
2188 background-size: contain;
2189 position: absolute;
2190 top: calc(20 * 100vw / 1920);
2191 left: 0;
2192 animation: movelr 4s ease-in infinite;
2193 }
2194 }
2195
2196 .itemBox {
2197 background: #0B2239;
2198 border: 1px solid #12BFFF;
2199 box-shadow: 0 0 24px 0 rgba(130, 220, 255, 0.5), 0 0 16px 0 rgba(130, 220, 255, 0.27);
2200
2201 .select {
2202 :deep(.el-tag--info) {
2203 background-color: rgb(33, 123, 188, .1); /* 背景色 */
2204 border-color: #1c81a6; /* 边框色 */
2205 color: #fff; /* 文字颜色 */
2206 }
2207
2208 :deep(.el-icon ) {
2209 color: #fff;
2210 }
2211
2212 :deep(.el-select__placeholder) {
2213 color: #fff;
2214 }
2215 }
2216 }
2217 }
2218
2219
2220 }
2221
2222 .light {
2223 .chartCard {
2224 background: url("@/assets/image/box01-light.png") no-repeat top left;
2225 background-size: 100% 100%;
2226
2227 .title {
2228 color: #0060AA;
2229 }
2230
2231 .itemBox {
2232 background: transparent;
2233 border: 1px solid #97D3FF;
2234
2235 .select {
2236 :deep(.el-tag--info) {
2237 border: 1px solid #97D3FF;
2238 color: #0060AA;
2239 }
2240
2241 :deep(.el-icon ) {
2242 color: #0060AA;
2243 }
2244
2245 :deep(.el-select__placeholder) {
2246 color: #0060AA;
2247 }
2248 }
2249 }
2250 }
2251
2252
2253
2254 }
1876 </style> 2255 </style>
......
...@@ -107,7 +107,7 @@ onUnmounted(() => { ...@@ -107,7 +107,7 @@ onUnmounted(() => {
107 }); 107 });
108 </script> 108 </script>
109 109
110 <style scoped> 110 <style lang="scss" scoped>
111 .scrolling-container { 111 .scrolling-container {
112 width: 100%; 112 width: 100%;
113 height: 100%; 113 height: 100%;
...@@ -124,7 +124,6 @@ onUnmounted(() => { ...@@ -124,7 +124,6 @@ onUnmounted(() => {
124 font-family: SimHei, serif; 124 font-family: SimHei, serif;
125 font-weight: 400; 125 font-weight: 400;
126 font-size: calc(17 * 100vw / 1920); 126 font-size: calc(17 * 100vw / 1920);
127 color: #FFFFFF;
128 height: calc(40 * 100vh / 1920); 127 height: calc(40 * 100vh / 1920);
129 margin: calc(8 * 100vw / 1920) 0; 128 margin: calc(8 * 100vw / 1920) 0;
130 white-space: nowrap; /* 强制文本不换行 */ 129 white-space: nowrap; /* 强制文本不换行 */
...@@ -143,5 +142,15 @@ onUnmounted(() => { ...@@ -143,5 +142,15 @@ onUnmounted(() => {
143 } 142 }
144 } 143 }
145 144
145 .dark {
146 .scrolling-item {
147 color: #FFFFFF;
148 }
149 }
146 150
147 </style>
...\ No newline at end of file ...\ No newline at end of file
151 .light {
152 .scrolling-item {
153 color: #4C5359;
154 }
155 }
156 </style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!