Ver código fonte

更新平台的选取逻辑,由原来的每个页面独立选择,改为全局共享;更新用户趋势图中,部分tab的统计数据展示;更新趋势图的统计字段的数据结构;更新表格样式;优化获取事件列表及选项列表的获取逻辑,现在按需请求数据;修复了表格查询字段中,无法正确选择'全部'选项的bug;更新平台图标;

fxs 1 ano atrás
pai
commit
475b1386a3

+ 1 - 0
auto-imports.d.ts

@@ -6,4 +6,5 @@
 export {}
 declare global {
   const ElMessage: typeof import('element-plus/es')['ElMessage']
+  const ElNotification: typeof import('element-plus/es')['ElNotification']
 }

+ 1 - 0
public/img/platformIcon/backup/tt - 副本.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1726209175050" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1296" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M0 0m184.32 0l655.36 0q184.32 0 184.32 184.32l0 655.36q0 184.32-184.32 184.32l-655.36 0q-184.32 0-184.32-184.32l0-655.36q0-184.32 184.32-184.32Z" fill="#111111" p-id="1297"></path><path d="M204.27776 670.59712a246.25152 246.25152 0 0 1 245.97504-245.97504v147.57888a98.49856 98.49856 0 0 0-98.38592 98.38592c0 48.34304 26.14272 100.352 83.54816 100.352 3.81952 0 93.55264-0.88064 93.55264-77.19936V134.35904h157.26592a133.31456 133.31456 0 0 0 133.12 132.99712l-0.13312 147.31264a273.152 273.152 0 0 1-142.62272-38.912l-0.06144 317.98272c0 146.00192-124.24192 224.77824-241.14176 224.77824-131.74784 0.03072-231.1168-106.56768-231.1168-247.92064z" fill="#FF4040" p-id="1298"></path><path d="M164.92544 631.23456a246.25152 246.25152 0 0 1 245.97504-245.97504v147.57888a98.49856 98.49856 0 0 0-98.38592 98.38592c0 48.34304 26.14272 100.352 83.54816 100.352 3.81952 0 93.55264-0.88064 93.55264-77.19936V94.99648h157.26592a133.31456 133.31456 0 0 0 133.12 132.99712l-0.13312 147.31264a273.152 273.152 0 0 1-142.62272-38.912l-0.06144 317.98272c0 146.00192-124.24192 224.77824-241.14176 224.77824-131.74784 0.03072-231.1168-106.56768-231.1168-247.92064z" fill="#00F5FF" p-id="1299"></path><path d="M410.91072 427.58144c-158.8224 20.15232-284.44672 222.72-154.112 405.00224 120.40192 98.47808 373.68832 41.20576 380.70272-171.85792l-0.17408-324.1472a280.7296 280.7296 0 0 0 142.88896 38.62528V261.2224a144.98816 144.98816 0 0 1-72.8064-54.82496 135.23968 135.23968 0 0 1-54.70208-72.45824h-123.66848l-0.08192 561.41824c-0.11264 78.46912-130.9696 106.41408-164.18816 30.2592-83.18976-39.77216-64.37888-190.9248 46.31552-192.57344z" fill="#FFFFFF" p-id="1300"></path></svg>

+ 1 - 0
public/img/platformIcon/backup/tt.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725874777803" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1034" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M866.304 0H157.696C71.168 0 0 69.632 0 156.16v711.168C0 954.368 71.168 1024 157.696 1024h709.12c86.528 0 157.184-69.632 157.696-156.16V156.16C1023.488 69.632 952.832 0 866.304 0zM842.24 444.416c-63.488 0.512-126.976-19.456-179.2-56.32 0 80.384 0 160.768 1.024 241.152 0 10.752 0.512 21.504-0.512 32.256-2.56 39.424-15.36 77.312-34.816 111.616-16.896 29.184-39.936 55.808-67.584 75.776-35.328 26.112-79.36 40.96-123.392 41.984-22.528 0.512-45.056-0.512-66.56-5.632-30.72-6.656-60.416-19.456-86.016-37.376-0.512-0.512-1.536-1.024-1.536-1.536-27.648-19.456-50.688-44.544-67.584-73.728-23.04-38.4-34.816-83.968-33.28-129.024 1.024-41.472 13.312-82.432 34.816-117.76 19.456-32.256 47.104-59.904 79.36-79.36 46.592-28.672 103.424-40.96 157.696-33.28v30.72c0.512 12.8 0 25.6 0.512 37.888v65.024c-16.384-5.632-34.304-5.632-51.2-1.536-19.968 4.608-39.424 13.312-55.296 26.624-9.728 8.192-17.92 17.92-23.552 29.184-9.728 18.944-13.312 40.96-11.264 62.464 2.56 20.48 11.264 40.448 24.576 56.32 9.216 10.752 20.48 19.968 32.768 27.136 33.28 18.432 76.288 16.896 108.544-3.584 31.232-19.456 51.2-54.784 51.2-91.136V322.56c0.512-62.976 0-125.952 0.512-188.928h130.048c-0.512 11.264 1.024 22.016 3.072 33.28h0.512c3.584 18.432 10.24 35.84 18.944 52.736 13.312 25.6 32.768 48.64 57.344 63.488 1.536 1.024 2.56 2.56 4.096 3.584 18.432 11.264 38.4 19.968 59.392 24.064 12.288 2.56 25.088 3.584 37.376 4.096v129.536z" fill="#000000" p-id="1035"></path></svg>

+ 1 - 0
public/img/platformIcon/backup/web - 副本.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1726209354219" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1023" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M-78.43050413-31.57210636m209.68898924 0l745.56084983 0q209.68898924 0 209.68898803 209.68898925l0 745.56084982q0 209.68898924-209.68898803 209.68898803l-745.56084983 0q-209.68898924 0-209.68898924-209.68898803l0-745.56084982q0-209.68898924 209.68898924-209.68898925Z" fill="#FFFFFF" p-id="1024"></path><path d="M705.22384595 648.51918119L503.11860861 1032.59951255a478.30058416 478.30058416 0 0 1-401.90389514-737.40627815l209.3045587 370.660237z" fill="#539E55" p-id="1025"></path><path d="M513.773568 331.93543453L940.19798691 355.68517484C1047.62320729 596.96617031 934.67103141 878.34461738 693.39003593 985.76983776A548.53474592 548.53474592 0 0 1 497.32519344 1032.72945103l207.15433954-383.90395942z" fill="#F1BF45" p-id="1026"></path><path d="M313.30347569 671.66651582l-212.19360768-376.40338485c143.84664607-221.51311815 441.86129749-288.35730773 663.36276602-144.51066167a478.78985774 478.78985774 0 0 1 175.84751562 205.14572788l-426.01812848-23.84629791z" fill="#D44F3E" p-id="1027"></path><path d="M504.03891002 550.8973078m-221.33837733 0a221.33837733 221.33837733 0 1 0 442.67675466 0 221.33837733 221.33837733 0 1 0-442.67675466 0Z" fill="#FFFFFF" p-id="1028"></path><path d="M340.94747436 556.72200185a168.91612972 163.09143567 90 1 0 326.18287134 0 168.91612972 163.09143567 90 1 0-326.18287134 0Z" fill="#467EE6" p-id="1029"></path></svg>

+ 1 - 0
public/img/platformIcon/backup/web.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725845503147" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1030" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M34.13333334-8.53333334l948.08746667 0-77.55093333 900.02773334-401.95413334 123.42613333-382.29333333-123.42613333zM793.25866668 263.44106666l22.9376-136.53333333-610.57706667-1.09226667 39.3216 409.6 397.58506667 0 0 107.04213334-133.25653334 46.96746666-138.71786666-49.152-8.73813334-57.89013333-109.22666666 1.09226667 16.384 144.1792 233.74506666 81.92 245.76-77.55093334 31.67573334-329.86453333-432.5376 0-10.92266667-138.71786667 456.56746667 0z" p-id="1031"></path></svg>

+ 1 - 0
public/img/platformIcon/backup/wx - 副本.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1726209181365" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1467" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M0 0m184.32 0l655.36 0q184.32 0 184.32 184.32l0 655.36q0 184.32-184.32 184.32l-655.36 0q-184.32 0-184.32-184.32l0-655.36q0-184.32 184.32-184.32Z" fill="#65DB79" p-id="1468"></path><path d="M663.21408 407.02976c-128.75776 0-233.13408 87.296-233.13408 194.97984s104.37632 194.97984 233.13408 194.97984a273.85856 273.85856 0 0 0 88.79104-14.76608l66.74432 35.55328-8.98048-64.12288a183.78752 183.78752 0 0 0 86.5792-151.64416c-0.01024-107.68384-104.38656-194.97984-233.13408-194.97984z" fill="#FFFFFF" p-id="1469"></path><path d="M404.48 194.56c137.0112 0 250.28608 83.968 276.16256 195.2768-48.82432-4.01408-302.08 23.27552-261.85728 271.36-36.4032 0.1024-86.016-1.49504-121.5488-13.4656l-80.62976 42.97728 10.8544-77.45536C164.7104 571.7504 122.88 505.00608 122.88 430.08c0-130.048 126.07488-235.52 281.6-235.52z" fill="#FFFFFF" p-id="1470"></path><path d="M313.344 352.256m-36.864 0a36.864 36.864 0 1 0 73.728 0 36.864 36.864 0 1 0-73.728 0Z" fill="#65DB79" p-id="1471"></path><path d="M497.664 352.256m-36.864 0a36.864 36.864 0 1 0 73.728 0 36.864 36.864 0 1 0-73.728 0Z" fill="#65DB79" p-id="1472"></path><path d="M585.728 544.768m-32.768 0a32.768 32.768 0 1 0 65.536 0 32.768 32.768 0 1 0-65.536 0Z" fill="#65DB79" p-id="1473"></path><path d="M741.376 544.768m-32.768 0a32.768 32.768 0 1 0 65.536 0 32.768 32.768 0 1 0-65.536 0Z" fill="#65DB79" p-id="1474"></path></svg>

+ 1 - 0
public/img/platformIcon/backup/wx.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725845505819" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1183" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M236.24 323.769c0 24.005 19.32 43.325 43.325 43.325s43.326-19.32 43.326-43.325c0-24.005-19.321-43.325-43.326-43.325-24.004 0-43.325 19.32-43.325 43.325z m336.064 223.067c0 18.735 15.223 33.958 33.958 33.958s33.958-15.223 33.958-33.958-15.223-33.958-33.958-33.958-33.958 15.223-33.958 33.958zM456.38 323.769c0 24.005 19.32 43.325 43.325 43.325 24.005 0 43.325-19.32 43.325-43.325 0-24.005-19.32-43.325-43.325-43.325-24.005 0-43.325 19.32-43.325 43.325z" p-id="1184"></path><path d="M858.017 0H165.983C74.648 0 0.293 74.356 0.293 166.276v690.863c0 91.92 74.355 166.276 165.69 166.276h692.034c91.335 0 165.69-74.356 165.69-166.276V166.276C1023.707 74.94 949.352 0 858.017 0zM384.366 686.18c-38.642 0-69.672-8.197-108.899-15.808L167.154 724.82l31.03-93.09C120.316 577.28 74.063 507.022 74.063 422.128c0-147.54 139.929-264.05 310.303-264.05 152.81 0 286.298 93.09 313.23 217.798a255.341 255.341 0 0 0-29.859-1.757c-147.54 0-264.05 110.07-264.05 245.315 0 22.834 3.513 44.496 9.367 64.988-9.367 1.171-18.735 1.757-28.688 1.757z m457.843 108.313l23.42 77.283-84.895-46.838c-31.03 7.61-62.06 15.808-93.09 15.808-147.541 0-264.051-100.703-264.051-225.41 0-124.12 116.51-225.408 264.05-225.408 139.344 0 263.465 101.288 263.465 225.409-0.585 70.843-46.838 132.903-108.899 179.156z" p-id="1185"></path><path d="M741.507 546.836c0 18.735 15.223 33.958 33.958 33.958s33.958-15.223 33.958-33.958-15.223-33.958-33.958-33.958c-19.32 0-33.958 15.223-33.958 33.958z" p-id="1186"></path></svg>

+ 1 - 1
public/img/platformIcon/tt.svg

@@ -1 +1 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725874777803" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1034" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M866.304 0H157.696C71.168 0 0 69.632 0 156.16v711.168C0 954.368 71.168 1024 157.696 1024h709.12c86.528 0 157.184-69.632 157.696-156.16V156.16C1023.488 69.632 952.832 0 866.304 0zM842.24 444.416c-63.488 0.512-126.976-19.456-179.2-56.32 0 80.384 0 160.768 1.024 241.152 0 10.752 0.512 21.504-0.512 32.256-2.56 39.424-15.36 77.312-34.816 111.616-16.896 29.184-39.936 55.808-67.584 75.776-35.328 26.112-79.36 40.96-123.392 41.984-22.528 0.512-45.056-0.512-66.56-5.632-30.72-6.656-60.416-19.456-86.016-37.376-0.512-0.512-1.536-1.024-1.536-1.536-27.648-19.456-50.688-44.544-67.584-73.728-23.04-38.4-34.816-83.968-33.28-129.024 1.024-41.472 13.312-82.432 34.816-117.76 19.456-32.256 47.104-59.904 79.36-79.36 46.592-28.672 103.424-40.96 157.696-33.28v30.72c0.512 12.8 0 25.6 0.512 37.888v65.024c-16.384-5.632-34.304-5.632-51.2-1.536-19.968 4.608-39.424 13.312-55.296 26.624-9.728 8.192-17.92 17.92-23.552 29.184-9.728 18.944-13.312 40.96-11.264 62.464 2.56 20.48 11.264 40.448 24.576 56.32 9.216 10.752 20.48 19.968 32.768 27.136 33.28 18.432 76.288 16.896 108.544-3.584 31.232-19.456 51.2-54.784 51.2-91.136V322.56c0.512-62.976 0-125.952 0.512-188.928h130.048c-0.512 11.264 1.024 22.016 3.072 33.28h0.512c3.584 18.432 10.24 35.84 18.944 52.736 13.312 25.6 32.768 48.64 57.344 63.488 1.536 1.024 2.56 2.56 4.096 3.584 18.432 11.264 38.4 19.968 59.392 24.064 12.288 2.56 25.088 3.584 37.376 4.096v129.536z" fill="#000000" p-id="1035"></path></svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1726209175050" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1296" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M0 0m184.32 0l655.36 0q184.32 0 184.32 184.32l0 655.36q0 184.32-184.32 184.32l-655.36 0q-184.32 0-184.32-184.32l0-655.36q0-184.32 184.32-184.32Z" fill="#111111" p-id="1297"></path><path d="M204.27776 670.59712a246.25152 246.25152 0 0 1 245.97504-245.97504v147.57888a98.49856 98.49856 0 0 0-98.38592 98.38592c0 48.34304 26.14272 100.352 83.54816 100.352 3.81952 0 93.55264-0.88064 93.55264-77.19936V134.35904h157.26592a133.31456 133.31456 0 0 0 133.12 132.99712l-0.13312 147.31264a273.152 273.152 0 0 1-142.62272-38.912l-0.06144 317.98272c0 146.00192-124.24192 224.77824-241.14176 224.77824-131.74784 0.03072-231.1168-106.56768-231.1168-247.92064z" fill="#FF4040" p-id="1298"></path><path d="M164.92544 631.23456a246.25152 246.25152 0 0 1 245.97504-245.97504v147.57888a98.49856 98.49856 0 0 0-98.38592 98.38592c0 48.34304 26.14272 100.352 83.54816 100.352 3.81952 0 93.55264-0.88064 93.55264-77.19936V94.99648h157.26592a133.31456 133.31456 0 0 0 133.12 132.99712l-0.13312 147.31264a273.152 273.152 0 0 1-142.62272-38.912l-0.06144 317.98272c0 146.00192-124.24192 224.77824-241.14176 224.77824-131.74784 0.03072-231.1168-106.56768-231.1168-247.92064z" fill="#00F5FF" p-id="1299"></path><path d="M410.91072 427.58144c-158.8224 20.15232-284.44672 222.72-154.112 405.00224 120.40192 98.47808 373.68832 41.20576 380.70272-171.85792l-0.17408-324.1472a280.7296 280.7296 0 0 0 142.88896 38.62528V261.2224a144.98816 144.98816 0 0 1-72.8064-54.82496 135.23968 135.23968 0 0 1-54.70208-72.45824h-123.66848l-0.08192 561.41824c-0.11264 78.46912-130.9696 106.41408-164.18816 30.2592-83.18976-39.77216-64.37888-190.9248 46.31552-192.57344z" fill="#FFFFFF" p-id="1300"></path></svg>

+ 1 - 1
public/img/platformIcon/web.svg

@@ -1 +1 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725845503147" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1030" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M34.13333334-8.53333334l948.08746667 0-77.55093333 900.02773334-401.95413334 123.42613333-382.29333333-123.42613333zM793.25866668 263.44106666l22.9376-136.53333333-610.57706667-1.09226667 39.3216 409.6 397.58506667 0 0 107.04213334-133.25653334 46.96746666-138.71786666-49.152-8.73813334-57.89013333-109.22666666 1.09226667 16.384 144.1792 233.74506666 81.92 245.76-77.55093334 31.67573334-329.86453333-432.5376 0-10.92266667-138.71786667 456.56746667 0z" p-id="1031"></path></svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1726209354219" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1023" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M-78.43050413-31.57210636m209.68898924 0l745.56084983 0q209.68898924 0 209.68898803 209.68898925l0 745.56084982q0 209.68898924-209.68898803 209.68898803l-745.56084983 0q-209.68898924 0-209.68898924-209.68898803l0-745.56084982q0-209.68898924 209.68898924-209.68898925Z" fill="#FFFFFF" p-id="1024"></path><path d="M705.22384595 648.51918119L503.11860861 1032.59951255a478.30058416 478.30058416 0 0 1-401.90389514-737.40627815l209.3045587 370.660237z" fill="#539E55" p-id="1025"></path><path d="M513.773568 331.93543453L940.19798691 355.68517484C1047.62320729 596.96617031 934.67103141 878.34461738 693.39003593 985.76983776A548.53474592 548.53474592 0 0 1 497.32519344 1032.72945103l207.15433954-383.90395942z" fill="#F1BF45" p-id="1026"></path><path d="M313.30347569 671.66651582l-212.19360768-376.40338485c143.84664607-221.51311815 441.86129749-288.35730773 663.36276602-144.51066167a478.78985774 478.78985774 0 0 1 175.84751562 205.14572788l-426.01812848-23.84629791z" fill="#D44F3E" p-id="1027"></path><path d="M504.03891002 550.8973078m-221.33837733 0a221.33837733 221.33837733 0 1 0 442.67675466 0 221.33837733 221.33837733 0 1 0-442.67675466 0Z" fill="#FFFFFF" p-id="1028"></path><path d="M340.94747436 556.72200185a168.91612972 163.09143567 90 1 0 326.18287134 0 168.91612972 163.09143567 90 1 0-326.18287134 0Z" fill="#467EE6" p-id="1029"></path></svg>

+ 1 - 1
public/img/platformIcon/wx.svg

@@ -1 +1 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725845505819" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1183" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M236.24 323.769c0 24.005 19.32 43.325 43.325 43.325s43.326-19.32 43.326-43.325c0-24.005-19.321-43.325-43.326-43.325-24.004 0-43.325 19.32-43.325 43.325z m336.064 223.067c0 18.735 15.223 33.958 33.958 33.958s33.958-15.223 33.958-33.958-15.223-33.958-33.958-33.958-33.958 15.223-33.958 33.958zM456.38 323.769c0 24.005 19.32 43.325 43.325 43.325 24.005 0 43.325-19.32 43.325-43.325 0-24.005-19.32-43.325-43.325-43.325-24.005 0-43.325 19.32-43.325 43.325z" p-id="1184"></path><path d="M858.017 0H165.983C74.648 0 0.293 74.356 0.293 166.276v690.863c0 91.92 74.355 166.276 165.69 166.276h692.034c91.335 0 165.69-74.356 165.69-166.276V166.276C1023.707 74.94 949.352 0 858.017 0zM384.366 686.18c-38.642 0-69.672-8.197-108.899-15.808L167.154 724.82l31.03-93.09C120.316 577.28 74.063 507.022 74.063 422.128c0-147.54 139.929-264.05 310.303-264.05 152.81 0 286.298 93.09 313.23 217.798a255.341 255.341 0 0 0-29.859-1.757c-147.54 0-264.05 110.07-264.05 245.315 0 22.834 3.513 44.496 9.367 64.988-9.367 1.171-18.735 1.757-28.688 1.757z m457.843 108.313l23.42 77.283-84.895-46.838c-31.03 7.61-62.06 15.808-93.09 15.808-147.541 0-264.051-100.703-264.051-225.41 0-124.12 116.51-225.408 264.05-225.408 139.344 0 263.465 101.288 263.465 225.409-0.585 70.843-46.838 132.903-108.899 179.156z" p-id="1185"></path><path d="M741.507 546.836c0 18.735 15.223 33.958 33.958 33.958s33.958-15.223 33.958-33.958-15.223-33.958-33.958-33.958c-19.32 0-33.958 15.223-33.958 33.958z" p-id="1186"></path></svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1726209181365" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1467" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M0 0m184.32 0l655.36 0q184.32 0 184.32 184.32l0 655.36q0 184.32-184.32 184.32l-655.36 0q-184.32 0-184.32-184.32l0-655.36q0-184.32 184.32-184.32Z" fill="#65DB79" p-id="1468"></path><path d="M663.21408 407.02976c-128.75776 0-233.13408 87.296-233.13408 194.97984s104.37632 194.97984 233.13408 194.97984a273.85856 273.85856 0 0 0 88.79104-14.76608l66.74432 35.55328-8.98048-64.12288a183.78752 183.78752 0 0 0 86.5792-151.64416c-0.01024-107.68384-104.38656-194.97984-233.13408-194.97984z" fill="#FFFFFF" p-id="1469"></path><path d="M404.48 194.56c137.0112 0 250.28608 83.968 276.16256 195.2768-48.82432-4.01408-302.08 23.27552-261.85728 271.36-36.4032 0.1024-86.016-1.49504-121.5488-13.4656l-80.62976 42.97728 10.8544-77.45536C164.7104 571.7504 122.88 505.00608 122.88 430.08c0-130.048 126.07488-235.52 281.6-235.52z" fill="#FFFFFF" p-id="1470"></path><path d="M313.344 352.256m-36.864 0a36.864 36.864 0 1 0 73.728 0 36.864 36.864 0 1 0-73.728 0Z" fill="#65DB79" p-id="1471"></path><path d="M497.664 352.256m-36.864 0a36.864 36.864 0 1 0 73.728 0 36.864 36.864 0 1 0-73.728 0Z" fill="#65DB79" p-id="1472"></path><path d="M585.728 544.768m-32.768 0a32.768 32.768 0 1 0 65.536 0 32.768 32.768 0 1 0-65.536 0Z" fill="#65DB79" p-id="1473"></path><path d="M741.376 544.768m-32.768 0a32.768 32.768 0 1 0 65.536 0 32.768 32.768 0 1 0-65.536 0Z" fill="#65DB79" p-id="1474"></path></svg>

+ 33 - 5
src/components/Table.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-20 18:16:18
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-11 17:05:33
+ * @LastEditTime: 2024-09-13 15:11:03
  * @FilePath: \Game-Backstage-Management-System\src\components\Table.vue
  * @Description: 
  * 
@@ -54,7 +54,7 @@ const loading = ref(false)
 const tableData: Array<any> = reactive([])
 
 // 查询表单的数据
-const queryFormData = reactive<any>({})
+const queryFormData = reactive<{ [key: string]: any }>({})
 
 // 分页数据
 const paginationConfig2 = reactive<TablePaginationSetting>({
@@ -356,6 +356,16 @@ const initReqConfig = () => {
 }
 
 /**
+ * @description: 初始化查询框的数据
+ * @return {*}
+ */
+const initFormData = () => {
+  props.queryInfo?.map((item: any) => {
+    queryFormData[item.name] = item.default
+  })
+}
+
+/**
  * @description: 表格排序
  * @param {*} data 获取到的数据
  * @return {*}
@@ -416,6 +426,7 @@ defineExpose({
 onMounted(() => {
   initpageConfig()
   initReqConfig()
+  initFormData()
   if (props.loadingState !== undefined) {
     loading.value = props.loadingState
   }
@@ -454,11 +465,18 @@ onMounted(() => {
           </el-form-item>
 
           <!-- 所有选择框 -->
+          <!-- <el-config-provider :value-on-clear="null" :empty-values="[undefined, null]"> -->
           <el-form-item :label="item.label" v-for="item in selectFieldsList" class="filterItem">
-            <el-select v-model="queryFormData[item.name]" :placeholder="item.placeholder">
+            <el-select
+              :empty-values="[undefined, null]"
+              v-model="queryFormData[item.name]"
+              :placeholder="item.placeholder"
+              :value-key="item.name"
+            >
               <el-option v-for="val in item.otherOption" :label="val.cnName" :value="val.value" />
             </el-select>
           </el-form-item>
+          <!-- </el-config-provider> -->
 
           <!-- 所有日期选择框 -->
           <el-form-item :label="item.label" v-for="item in dateFieldsList" class="filterItem">
@@ -703,7 +721,7 @@ onMounted(() => {
 
 <style scoped>
 .tableContent {
-  margin: 0 auto;
+  margin: 10px auto 20px;
   width: 100%;
 
   /* height: 100%; */
@@ -807,11 +825,21 @@ onMounted(() => {
 .tableBox {
   width: 98%;
   /* height: 98%; */
-  margin: 0 auto;
+  margin: 5px auto;
+  box-shadow:
+    0 4px 8px 0 rgba(0, 0, 0, 0.02),
+    0 1px 3px 0 rgba(0, 0, 0, 0.02);
   /* margin-top: 0.5%;
   margin-bottom: 2%; */
 }
 
+.tableBody {
+  box-shadow: 0 0 3px 0px rgba(0, 0, 0, 0.1);
+  /* box-shadow:
+    -4px -4px 8px 1px rgba(0, 0, 0, 0.02),
+    -4px -4px 3px 1px rgba(0, 0, 0, 0.02); */
+}
+
 .userTablePaginationBox {
   box-sizing: border-box;
   width: 98%;

+ 2 - 1
src/components/common/WithIconSelect.vue

@@ -178,7 +178,8 @@ onMounted(() => {
   justify-content: center;
 }
 .btnItem {
-  margin-right: 8px;
+  margin-right: 4px;
+  margin-left: 4px;
 }
 
 .disabledSelect {

+ 57 - 27
src/components/dataAnalysis/HeaderCard.vue

@@ -11,10 +11,12 @@ import router from '@/router'
 import type { HeaderCardProps, IconDropdownItem } from '@/types/dataAnalysis'
 import { computed, onMounted, reactive, ref, watch } from 'vue'
 import WithIconSelect from '@/components/common/WithIconSelect.vue'
+import { useCommonStore } from '@/stores/useCommon'
+
+const { selectInfo } = useCommonStore()
 
 const props = withDefaults(defineProps<HeaderCardProps>(), {
   openDateSelect: false,
-  defaultPf: 'wx',
   needPfSelect: true,
   needBreadcrumb: false
 })
@@ -115,30 +117,8 @@ const clearBreadcrumb = () => {
   }
 }
 
-const watchRoute = watch(
-  () => [router.currentRoute.value],
-  () => {
-    clearBreadcrumb()
-  },
-  { deep: true }
-)
-
-if (!props.needBreadcrumb) watchRoute()
-
-defineExpose({
-  addPath,
-  clearBreadcrumb
-})
-
-onMounted(() => {
-  breadcrumbList.push({
-    title: props.title,
-    pathName: router.currentRoute.value.name as string
-  })
-  dateChange(selectDate.value)
-})
-
-const selectInfo = reactive<Array<IconDropdownItem>>([
+// 下拉框的平台信息
+const pfSelectInfo = reactive<Array<IconDropdownItem>>([
   {
     value: 'web',
     icon: '/img/platformIcon/web.svg',
@@ -160,8 +140,58 @@ const selectInfo = reactive<Array<IconDropdownItem>>([
 ])
 
 const changePlatForm = (val: Array<any>) => {
-  emits('changePf', val)
+  selectInfo.pf = [val[0]]
 }
+
+/**
+ * @description: 监控当前路由,每次路由改变都要去执行clearBreadcrumb,来判断是否需要清除当前面包屑
+ * @param {*} watch
+ * @return {*}
+ */
+const watchRoute = watch(
+  () => [router.currentRoute.value],
+  () => {
+    clearBreadcrumb()
+  },
+  { deep: true }
+)
+
+/**
+ * @description: 这里是为了去监控store中的pf,pf变化的时候,emits最新的pf
+ *   整体的流程是:当下拉框改变,他会emtis一个事件出来,这个时候,headercard组件接收新的值,去改变store中的pf
+ *   headercard组件中还有一个watch,用来监听store中的pf,一旦改变那么就去重新给下拉选择框赋值,并且etmiss一次
+ *   这个watch会在开始的时候执行一次,用来在页面加载的时候,给下拉框赋值,并且请求
+ * @return {*}
+ */
+watch(
+  () => selectInfo.pf,
+  (newPf) => {
+    emits('changePf', [newPf[0]])
+    pfSelectInfo.forEach((item) => {
+      if (item.value === newPf[0]) {
+        item.isSelected = true
+      } else {
+        item.isSelected = false
+      }
+    })
+  },
+  { immediate: true, deep: true }
+)
+
+if (!props.needBreadcrumb) watchRoute()
+
+defineExpose({
+  addPath,
+  clearBreadcrumb
+})
+
+onMounted(() => {
+  breadcrumbList.push({
+    title: props.title,
+    pathName: router.currentRoute.value.name as string
+  })
+  dateChange(selectDate.value)
+})
 </script>
 
 <template>
@@ -188,7 +218,7 @@ const changePlatForm = (val: Array<any>) => {
     <div class="selectBox" v-if="props.needPfSelect">
       <el-divider direction="vertical" />
       <div class="selectItem">
-        <WithIconSelect @change-pf="changePlatForm" :slect-info="selectInfo"></WithIconSelect>
+        <WithIconSelect @change-pf="changePlatForm" :slect-info="pfSelectInfo"></WithIconSelect>
       </div>
     </div>
     <div v-if="props.openDateSelect" class="datePicker">

+ 1 - 1
src/components/dataAnalysis/TemporalTrend.vue

@@ -264,7 +264,7 @@ const getData = async (type: number) => {
         // 如果有统计数据的配置,则生成
         if (props.staticFields) {
           statisticFieldsInfo.splice(0, statisticFieldsInfo.length)
-          props.staticFields.map((item) => {
+          props.staticFields[activeTab.value].map((item) => {
             statisticFieldsInfo.push({
               name: item.name,
               cnName: item.cnName,

+ 33 - 4
src/components/form/FileUpload.vue

@@ -7,6 +7,9 @@ interface UploadProps {
   title: string
 }
 
+// 上传动画
+const loading = ref(false)
+
 // 上传组价
 const uploadRef = ref<UploadInstance>()
 
@@ -33,6 +36,7 @@ const uploadInfo = reactive({
  */
 const beforeUpload = (file: UploadRawFile) => {
   if (!file) return false // 取消上传
+  loading.value = true // 开始上传
   let state = false
   let reader = new FileReader()
   reader.readAsText(file)
@@ -85,25 +89,50 @@ const handleExceed = (files: UploadRawFile[]) => {
   uploadRef.value!.handleStart(file)
 }
 
+/**
+ * @description: 打开提示
+ * @return {*}
+ */
 const openTip = () => {
   tipVisisble.value = true
 }
 
+/**
+ * @description: 关闭掉上传组件
+ * @return {*}
+ */
 const closeUpload = () => {
   uploadRef.value?.clearFiles()
   uploadInfo.uploadVisible = false
+  loading.value = false // 上传结束
+}
+
+/**
+ * @description: 上传结束的回调
+ * @return {*}
+ */
+const uploadCallback = () => {
+  uploadInfo.uploadVisible = false // 关闭上传框
+  loading.value = false // 上传结束
 }
 
 defineExpose({
   startUpload,
-  closeUpload
+  closeUpload,
+  uploadCallback
 })
 </script>
 
 <template>
   <div class="uploadFile">
-    <el-dialog align-center v-model="uploadInfo.uploadVisible" title="文件上传" width="500">
-      <div class="uploadBox">
+    <el-dialog
+      align-center
+      v-model="uploadInfo.uploadVisible"
+      title="文件上传"
+      width="500"
+      @close="closeUpload"
+    >
+      <div class="uploadBox" v-loading="loading" element-loading-text="正在上传...">
         <el-upload
           :on-exceed="handleExceed"
           :before-upload="beforeUpload"
@@ -127,7 +156,7 @@ defineExpose({
         </el-upload>
       </div>
       <template #footer>
-        <div class="dialog-footer">
+        <div class="dialog-footer" v-if="!loading">
           <el-button type="primary" @click="confirmUpload"> 确定 </el-button>
           <el-button @click="cancelUpload">取消</el-button>
         </div>

+ 9 - 3
src/hooks/useRequest.ts

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-20 17:24:06
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-11 15:46:58
+ * @LastEditTime: 2024-09-13 16:48:09
  * @FilePath: \Game-Backstage-Management-System\src\hooks\useRequest.ts
  * @Description:
  *
@@ -16,8 +16,14 @@ import type { AxiosResponse } from 'axios'
 import type { ResponseInfo } from '@/types/res'
 
 export function useRequest() {
-  const baseIp = 'http://server.ichunhao.cn' // 测试服
-  // const baseIp = 'http://service.ichunhao.cn' // 正式库
+  let baseIp = ''
+  // 根据环境不同,切换不同的IP
+  if (import.meta.env.MODE === 'development') {
+    // baseIp = 'http://service.ichunhao.cn' // 正式库
+    baseIp = 'http://server.ichunhao.cn' // 测试服
+  } else {
+    baseIp = 'http://service.ichunhao.cn' // 正式库
+  }
   // const baseIp = 'http://192.168.1.139:8000' // 本地
 
   const AllApi = {

+ 4 - 2
src/stores/useCommon.ts

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-28 11:46:10
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-08-28 12:08:24
+ * @LastEditTime: 2024-09-13 15:45:29
  * @FilePath: \Game-Backstage-Management-System\src\stores\useCommon.ts
  * @Description:通用的store,在多个页面均会使用
  *
@@ -12,11 +12,13 @@ import { defineStore } from 'pinia'
 
 interface SelectInfo {
   gid: string
+  pf: Array<string>
 }
 
 export const useCommonStore = defineStore('commonStore', () => {
   const selectInfo = reactive<SelectInfo>({
-    gid: '1001'
+    gid: '1001',
+    pf: ['wx']
   })
   return { selectInfo }
 })

+ 5 - 4
src/types/dataAnalysis.ts

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-23 14:58:29
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-12 16:17:36
+ * @LastEditTime: 2024-09-13 16:29:32
  * @FilePath: \Game-Backstage-Management-System\src\types\dataAnalysis.ts
  * @Description:用于dataAnalysis相关组件的type
  *
@@ -100,14 +100,14 @@ export interface TemporalTrendProps {
   resDataFieldsInfo: ResDataFieldInfo // 返回的数据中每个字段的分类信息
   requestConfig: ReqConfig // 请求参数配置,需要监听,一旦变化,需要重新获取数据
 
-  staticFields?: Array<StaticField> // 图表中统计组件的字段信息
+  staticFields?: { [key: string]: Array<StaticField> } // 图表中统计组件的字段信息
+  // staticFields?: Array<StaticField> // 图表中统计组件的字段信息
   title: string // 上方显示的title
 }
 
 // 头部切换组件所需要的props
 export interface HeaderCardProps {
   title: string // title信息
-  defaultPf?: string // 默认选择的pf
   openDateSelect?: boolean // 是否开启时间选择
   needPfSelect?: boolean // 是否需要平台选择
   needBreadcrumb?: boolean // 是否需要面包屑导航
@@ -119,7 +119,8 @@ export interface TemporalTrendInfo {
   resDataField: ResDataFieldInfo // 返回数据中的字段信息
   tabList?: Array<TabInfo> //表格数据
   trendTableFields: TrendTableField // 表格的字段,同时也作为legend的一部分
-  chartsStaticField?: Array<StaticField> // 统计字段的信息
+  // chartsStaticField?: Array<StaticField> // 统计字段的信息
+  chartsStaticField?: { [key: string]: Array<StaticField> } // 统计字段的信息
 }
 
 export interface IconDropdownItem {

+ 63 - 26
src/views/AppManage/EventManageView.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-09-02 17:57:15
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-12 18:01:11
+ * @LastEditTime: 2024-09-13 12:02:28
  * @FilePath: \Game-Backstage-Management-System\src\views\AppManage\EventManageView.vue
  * @Description: 
  * 
@@ -10,13 +10,16 @@
 <script setup lang="ts">
 import HeaderCard from '@/components/dataAnalysis/HeaderCard.vue'
 import { shouldListenToEvent } from '@/utils/table/table'
-import { onMounted, ref, reactive } from 'vue'
-import { ElMessage } from 'element-plus'
+import { onMounted, ref, reactive, computed } from 'vue'
+
+// import { ElMessage, ElNotification } from 'element-plus'
+
 import FileUpload from '@/components/form/FileUpload.vue'
 import axiosInstance from '@/utils/axios/axiosInstance'
 import { useRequest } from '@/hooks/useRequest'
 import { useCommonStore } from '@/stores/useCommon'
 import { downLoadData } from '@/utils/table/table'
+
 import { resetTimeToMidnight } from '@/utils/common'
 import router from '@/router'
 
@@ -38,8 +41,8 @@ const uploadInfo = reactive({
   dialogTitle: '上传事件信息'
 })
 
-// 现在所有的选项列表
-// const nowOptionList: Array<any> = []
+// 现在的路由路径名称
+const nowRouteName = computed(() => router.currentRoute.value.name)
 
 /**
  * @description: 进入详情页,触发headercard的添加事件,增加一个面包屑导航
@@ -52,20 +55,33 @@ const headerAddPath = (info: any) => {
 }
 
 /**
- * @description: 提交所有新上传的事件及选项请求
+ * @description:  提交所有新上传的事件及选项请求
  * @param {*} reqList 请求列表
+ * @param {*} msg 提示信息,用于展示上传之后返回的消息
  * @return {*}
  */
-const submitUpload = async (reqList: Array<Promise<boolean>>) => {
+const submitUpload = async (reqList: Array<Promise<boolean>>, msg?: string) => {
   await Promise.allSettled(reqList).then((res) => {
     if (
       res.every((item) => {
         return item.status === 'fulfilled' && item.value === true
       })
     ) {
-      ElMessage.success('上传成功')
+      ElNotification({
+        type: 'success',
+        title: '上传完成',
+        message: `${msg}上传成功`,
+        position: 'top-left'
+      })
     } else {
-      ElMessage.error('部分上传失败,请检查参数')
+      ElNotification({
+        type: 'error',
+        title: '上传完成',
+        message: `${msg}部分上传失败,请检查参数`,
+        duration: 3000,
+        position: 'top-left'
+      })
+      // ElMessage.error()
     }
   })
 }
@@ -142,21 +158,41 @@ const batReqOptionsData = async (
   return finalResult
 }
 
+type GetTableReturn<T> = T extends 'all'
+  ? { allEventTable: Array<any>; allOptionsInfo: any }
+  : T extends 'event'
+    ? { allEventTable: Array<any> }
+    : T extends 'option'
+      ? { allOptionsInfo: any }
+      : never
+
 /**
  * @description: 拿到事件数据和选项数据,首先需要拿到所有的事件列表,然后将他们的actionId抽出来形成一个列表,这个列表去作为optin的查询参数批量查询
  * @return {*} 返回事件数据和选项数据
  */
-const getAllTable = async (): Promise<{ allEventTable: Array<any>; allOptionsInfo: any }> => {
-  let allEventTable = await getTableData(AllApi.gameActionList, { gid: selectInfo.gid })
-  let optionReqList = allEventTable.map((item) => {
-    return { actionId: parseInt(item.id) }
-  })
-  let allOptionsInfo = await batReqOptionsData(
-    AllApi.gameActionOptionList,
-    optionReqList,
-    allEventTable
-  )
-  return { allEventTable, allOptionsInfo }
+const getAllTable = async <T extends 'all' | 'event' | 'option' = 'all'>(
+  table?: T
+): Promise<GetTableReturn<T>> => {
+  let allEventTable: Array<any> = [],
+    allOptionsInfo: any = null
+  if (table === 'event') {
+    allEventTable = await getTableData(AllApi.gameActionList, { gid: selectInfo.gid })
+    return { allEventTable } as GetTableReturn<T>
+  }
+
+  if (table === 'option') {
+    let optionReqList = allEventTable.map((item) => {
+      return { actionId: parseInt(item.id) }
+    })
+    allOptionsInfo = await batReqOptionsData(
+      AllApi.gameActionOptionList,
+      optionReqList,
+      allEventTable
+    )
+    return { allOptionsInfo } as GetTableReturn<T>
+  }
+
+  return { allEventTable, allOptionsInfo } as GetTableReturn<T>
 }
 
 /**
@@ -195,9 +231,10 @@ const startDownload = async () => {
 const uploadSuccess = async (data: any) => {
   let uploadEventTable = data.allEventTable
   let uploadOptionsInfo = data.allOptionsInfo
-
+  let allEventTable: Array<any> = [],
+    allOptionsInfo: { [key: string]: any } = {}
   // 上传的事件列表有值,则开始上传
-  let { allEventTable, allOptionsInfo } = await getAllTable() // 获取所有事件列表和选项列表
+  ;({ allEventTable } = await getAllTable('event')) // 获取所有事件列表和选项列表
 
   // 开始上传事件
   let eventReqList: Array<Promise<boolean>> = []
@@ -223,7 +260,7 @@ const uploadSuccess = async (data: any) => {
         })
       eventReqList.push(eventReq) // 统一放入请求列表中
     })
-    await submitUpload(eventReqList) // 等待所有的事件请求完成
+    await submitUpload(eventReqList, '事件') // 等待所有的事件请求完成
   }
   ;({ allEventTable, allOptionsInfo } = await getAllTable()) // 重新获取所有事件列表和选项列表
   let optionsReqList: Array<Promise<boolean>> = []
@@ -267,8 +304,8 @@ const uploadSuccess = async (data: any) => {
       })
     }
   })
-  await submitUpload(optionsReqList)
-  uploadRef.value?.closeUpload()
+  await submitUpload(optionsReqList, '选项') // 等待所有选项上传完成
+  uploadRef.value?.uploadCallback()
   eventTableRef.value?.updateData()
 }
 
@@ -286,7 +323,7 @@ onMounted(() => {})
       ></HeaderCard>
     </div>
 
-    <div class="handleEvent" v-if="router.currentRoute.value.name === 'EventTable'">
+    <div class="handleEvent" v-if="nowRouteName === 'EventTable'">
       <div class="fileGroup">
         <el-button class="fileBtn" color="#626aef" @click="startUpload">上传</el-button>
         <el-button class="fileBtn" @click="startDownload">下载</el-button>

+ 5 - 5
src/views/Home/Analysis/EventAnalysisDetail.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-27 17:11:23
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-12 16:25:55
+ * @LastEditTime: 2024-09-13 14:41:37
  * @FilePath: \Game-Backstage-Management-System\src\views\Home\Analysis\EventAnalysisDetail.vue
  * @Description: 
  * 
@@ -56,19 +56,19 @@ const tableFieldsInfo = reactive<Array<TableFieldInfo>>([
     name: 'date',
     cnName: '日期',
     isShow: true,
-    needSort: true
+    needSort: false
   },
   {
     name: 'activeCount',
     cnName: '触发次数',
     isShow: true,
-    needSort: true
+    needSort: false
   },
   {
     name: 'activeUserCount',
     cnName: '活跃用户数',
     isShow: true,
-    needSort: true
+    needSort: false
   },
   {
     name: 'activeCountRate',
@@ -80,7 +80,7 @@ const tableFieldsInfo = reactive<Array<TableFieldInfo>>([
     name: 'activeCountUser',
     cnName: '每次启动发生数',
     isShow: true,
-    needSort: true
+    needSort: false
   }
 ])
 

+ 4 - 4
src/views/Home/Analysis/EventAnalysisView.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-27 17:11:23
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-12 16:04:20
+ * @LastEditTime: 2024-09-13 16:05:45
  * @FilePath: \Game-Backstage-Management-System\src\views\Home\Analysis\EventAnalysisView.vue
  * @Description: 
  * 
@@ -21,7 +21,6 @@ const headerCard = ref()
 // 头部组件需要的 props
 const headerProps = reactive<HeaderCardProps>({
   title: '事件分析',
-  defaultPf: 'wx',
   openDateSelect: true
 })
 
@@ -57,13 +56,13 @@ const dateChange = (newDate: Array<Date>) => {
       <HeaderCard
         ref="headerCard"
         :title="headerProps.title"
-        :default-pf="headerProps.defaultPf"
         :open-date-select="headerProps.openDateSelect"
         :need-breadcrumb="true"
         :need-pf-select="false"
         @change-date="dateChange"
       ></HeaderCard>
     </div>
+
     <div class="content">
       <!-- 监听表格的跳转事件 -->
       <router-view v-slot="{ Component, route }" :startTime="startTime" :endTime="endTime">
@@ -87,7 +86,8 @@ const dateChange = (newDate: Array<Date>) => {
   width: 98%;
   margin: 1% auto;
   box-sizing: border-box;
-  /* background-color: white; */
+
+  background-color: white;
   /* border: 1px solid #e5e6eb; */
 }
 </style>

+ 3 - 4
src/views/Home/Analysis/KeepView.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-27 17:11:23
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-11 15:32:00
+ * @LastEditTime: 2024-09-13 16:08:50
  * @FilePath: \Game-Backstage-Management-System\src\views\Home\Analysis\KeepView.vue
  * @Description: 
  * 
@@ -30,7 +30,7 @@ const { AllApi, analysisResCode } = useRequest()
 
 // 选择的信息
 const keepViewSelect = reactive({
-  pf: 'wx'
+  pf: selectInfo.pf[0]
 })
 
 const loading = ref(true) // 加载状态
@@ -250,7 +250,6 @@ watchPageChange(() => [keepDataTableInfo.requestConfig], backupReq, getTableData
       <HeaderCard
         :title="headerCardInfo.title"
         :open-date-select="headerCardInfo.openDateSelect"
-        :default-pf="keepViewSelect.pf"
         @change-pf="changePf"
         @change-date="changeDate"
       ></HeaderCard>
@@ -271,7 +270,7 @@ watchPageChange(() => [keepDataTableInfo.requestConfig], backupReq, getTableData
 .KeepViewBox {
   width: 98%;
   margin: 1% auto;
-  /* background-color: white; */
+  background-color: white;
   border: 1px solid #e5e6eb;
 }
 

+ 54 - 12
src/views/Home/Analysis/UserTrendView.vue

@@ -111,18 +111,60 @@ const dataTrendInfo = reactive<TemporalTrendInfo>({
       type: 6
     }
   ]),
-  chartsStaticField: toRaw([
-    {
-      name: 'avg',
-      cnName: '均值',
-      value: ''
-    },
-    {
-      name: 'count',
-      cnName: '总数',
-      value: ''
-    }
-  ]),
+  chartsStaticField: toRaw({
+    newUser: [
+      {
+        name: 'avg',
+        cnName: '均值',
+        value: ''
+      },
+      {
+        name: 'count',
+        cnName: '总数',
+        value: ''
+      }
+    ],
+    dailyActiveUser: [
+      {
+        name: 'avg',
+        cnName: '均值',
+        value: ''
+      },
+      {
+        name: 'count',
+        cnName: '总数',
+        value: ''
+      }
+    ],
+    weeklyActiveUser: [
+      {
+        name: 'avg',
+        cnName: '均值',
+        value: ''
+      }
+    ],
+    detailDatalyActiveUser: [
+      {
+        name: 'avg',
+        cnName: '均值',
+        value: ''
+      }
+    ],
+    launchCount: [
+      {
+        name: 'avg',
+        cnName: '均值',
+        value: ''
+      }
+    ],
+    dailyUsageTime: [
+      {
+        name: 'avg',
+        cnName: '均值',
+        value: ''
+      }
+    ]
+  }),
   resDataField: toRaw({
     xAxis: 'imeDistribution', // x轴的刻度信息所在的字段
     values: ['imeDistribution'] // 值所在的字段

+ 117 - 36
src/views/Home/Overview/OverView.vue

@@ -22,7 +22,7 @@ const overviewStaticRef = ref()
 // 目前选择的信息
 // 这里不太合理,应该根据返回的数据中的pf和game赋值,因为这个可能会变
 const overViewSelectInfo = reactive({
-  pf: 'wx'
+  pf: selectInfo.pf[0]
 })
 
 // 总览数据的字段对应的信息
@@ -85,23 +85,59 @@ const periodInfo = reactive<TemporalTrendInfo>({
       type: 3
     }
   ]),
-  chartsStaticField: toRaw([
-    {
-      name: 'yesterdayCount',
-      cnName: '昨日',
-      value: ''
-    },
-    {
-      name: 'todayCount',
-      cnName: '今日',
-      value: ''
-    },
-    {
-      name: 'yesterdayThisTimeCount',
-      cnName: '昨日此时',
-      value: ''
-    }
-  ]),
+  chartsStaticField: toRaw({
+    newUser: [
+      {
+        name: 'yesterdayCount',
+        cnName: '昨日',
+        value: ''
+      },
+      {
+        name: 'todayCount',
+        cnName: '今日',
+        value: ''
+      },
+      {
+        name: 'yesterdayThisTimeCount',
+        cnName: '昨日此时',
+        value: ''
+      }
+    ],
+    activeUser: [
+      {
+        name: 'yesterdayCount',
+        cnName: '昨日',
+        value: ''
+      },
+      {
+        name: 'todayCount',
+        cnName: '今日',
+        value: ''
+      },
+      {
+        name: 'yesterdayThisTimeCount',
+        cnName: '昨日此时',
+        value: ''
+      }
+    ],
+    launchCount: [
+      {
+        name: 'yesterdayCount',
+        cnName: '昨日',
+        value: ''
+      },
+      {
+        name: 'todayCount',
+        cnName: '今日',
+        value: ''
+      },
+      {
+        name: 'yesterdayThisTimeCount',
+        cnName: '昨日此时',
+        value: ''
+      }
+    ]
+  }),
   resDataField: toRaw({
     xAxis: 'today', // x轴的刻度信息所在的字段
     values: ['today', 'yesterday'] // 值所在的字段
@@ -161,18 +197,68 @@ const monthInfo = reactive<TemporalTrendInfo>({
       type: 5
     }
   ]),
-  chartsStaticField: toRaw([
-    {
-      name: 'avg',
-      cnName: '平均值',
-      value: ''
-    },
-    {
-      name: 'count',
-      cnName: '总数',
-      value: ''
-    }
-  ]),
+  chartsStaticField: toRaw({
+    newUser: [
+      {
+        name: 'avg',
+        cnName: '平均值',
+        value: ''
+      },
+      {
+        name: 'count',
+        cnName: '总数',
+        value: ''
+      }
+    ],
+    activeUser: [
+      {
+        name: 'avg',
+        cnName: '平均值',
+        value: ''
+      },
+      {
+        name: 'count',
+        cnName: '总数',
+        value: ''
+      }
+    ],
+    launchCount: [
+      {
+        name: 'avg',
+        cnName: '平均值',
+        value: ''
+      },
+      {
+        name: 'count',
+        cnName: '总数',
+        value: ''
+      }
+    ],
+    deviceDuration: [
+      {
+        name: 'avg',
+        cnName: '平均值',
+        value: ''
+      },
+      {
+        name: 'count',
+        cnName: '总数',
+        value: ''
+      }
+    ],
+    retentionRate: [
+      {
+        name: 'avg',
+        cnName: '平均值',
+        value: ''
+      },
+      {
+        name: 'count',
+        cnName: '总数',
+        value: ''
+      }
+    ]
+  }),
   resDataField: toRaw({
     xAxis: 'timeDistribution', // x轴的刻度信息所在的字段
     values: ['timeDistribution'] // 值所在的字段
@@ -235,12 +321,7 @@ watchPageChange(() => [overViewSelectInfo.pf, selectInfo.gid], backupSelect, upd
 <template>
   <div class="overViewBox">
     <div class="header">
-      <HeaderCard
-        :open-date-select="false"
-        :default-pf="overViewSelectInfo.pf"
-        @change-pf="changePf"
-        :title="'数据总览'"
-      ></HeaderCard>
+      <HeaderCard :open-date-select="false" @change-pf="changePf" :title="'数据总览'"></HeaderCard>
     </div>
     <div class="staticBox">
       <StatisticText

+ 2 - 1
src/views/Index.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-20 14:06:49
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-09 10:39:52
+ * @LastEditTime: 2024-09-13 16:39:27
  * @FilePath: \Game-Backstage-Management-System\src\views\Index.vue
  * @Description: 
  * 
@@ -169,6 +169,7 @@ getAllGameInfo().then((data) => {
 })
 
 onMounted(() => {
+  console.log('okok')
   // 去加载所有需要的资源
   initLoadResouce(resourceInfo).then((data) => {
     Object.assign(blobUrlInfo, data)

+ 1 - 11
tsconfig.app.json

@@ -1,16 +1,6 @@
 {
   "extends": "@vue/tsconfig/tsconfig.dom.json",
-  "include": [
-    "src/**/*.ts",
-    "src/**/*.d.ts",
-    "src/**/*.tsx",
-    "src/**/*.vue",
-    "src/components/toolsPopover/FilterPopover.vue",
-    "src/components/input/TextInput.vue",
-    "src/components/input/TextInput.VUE",
-    "src/components/svgIcon/SvgIcon.vue",
-    "src/components/svgIcon/SvgIcon.vue"
-  ],
+  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "auto-imports.d.ts"],
   "exclude": ["src/**/__tests__/*"],
   "compilerOptions": {
     "composite": true,

+ 4 - 12
vite.config.ts

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-20 14:06:49
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-09-12 17:31:14
+ * @LastEditTime: 2024-09-13 16:43:31
  * @FilePath: \Game-Backstage-Management-System\vite.config.ts
  * @Description:
  *
@@ -26,8 +26,6 @@ import viteCompression from 'vite-plugin-compression'
 import { ViteImageOptimizer } from 'vite-plugin-image-optimizer'
 const DEFAULT_OPTIONS = {
   test: /\.(jpe?g|png|gif|tiff|webp|svg|avif)$/i,
-  exclude: undefined,
-  include: undefined,
   includePublic: true,
   logStats: true,
   ansiColors: true,
@@ -100,17 +98,11 @@ export default defineConfig(({ mode }) => {
           entryFileNames: 'js/[name]-[hash].js', // 包的入口文件名称
           assetFileNames: '[ext]/[name]-[hash].[ext]' // 资源文件像 字体,图片等
         }
-      },
-      terserOptions: {
-        compress: {
-          drop_console: true,
-          drop_debugger: true
-        }
-      },
-      esbuild: {
-        drop: mode === 'production' ? ['console', 'debugger'] : []
       }
     },
+    esbuild: {
+      drop: mode === 'production' ? ['console', 'debugger'] : []
+    },
     plugins: [
       vue(),
       ViteImageOptimizer(DEFAULT_OPTIONS),