feat:导出板块的静态实现
1
frontend/src/assets/icons/DOCX.svg
Normal file
@@ -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="1772516996617" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8642" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M354.40128 0c-87.04 0-157.44 70.55872-157.44 157.59872v275.68128H78.72c-21.6576 0-39.36256 17.69984-39.36256 39.36256v236.31872c0 21.6576 17.69984 39.35744 39.36256 39.35744h118.24128v118.08256c0 87.04 70.4 157.59872 157.44 157.59872h472.63744c87.04 0 157.59872-70.55872 157.59872-157.59872V315.0336c0-41.74848-38.9888-81.93024-107.52-149.27872l-29.11744-29.12256L818.87744 107.52C751.5392 38.9888 711.39328 0 669.59872 0H354.4064z m0 78.72h287.20128c28.35456 7.0912 27.99616 42.1376 27.99616 76.8v120.16128c0 21.6576 17.69984 39.35744 39.36256 39.35744h118.07744c39.38816 0 78.87872-0.0256 78.87872 39.36256v512c0 43.32032-35.55328 78.87872-78.87872 78.87872H354.4064c-43.32544 0-78.72-35.5584-78.72-78.87872v-118.08256h393.91744c21.66272 0 39.36256-17.69472 39.36256-39.35744V472.64256c0-21.66272-17.69984-39.36256-39.36256-39.36256H275.68128V157.59872c0-43.32032 35.39456-78.87872 78.72-78.87872zM308.6336 498.07872c23.04 0 41.28256 8.00256 54.72256 24.00256 14.08 15.36 21.12 37.43744 21.12 66.23744 0 29.44-7.04 51.84-21.12 67.2-13.44 15.36-31.68256 23.04-54.72256 23.04-23.68 0-42.24-7.35744-55.68-22.07744-13.44-15.36-20.15744-38.08256-20.15744-68.16256 0-29.44 6.71744-51.84 20.15744-67.2s32-23.04 55.68-23.04z m186.24 0.96256c17.92 0 33.28 3.2 46.08 9.6l-9.6 19.2c-12.16-6.4-24.32-9.6-36.48-9.6-16.64 0-30.39744 6.4-41.27744 19.2-10.24 12.16-15.36 29.44-15.36 51.84 0 23.04 4.79744 40.63744 14.39744 52.79744 9.6 11.52 23.68 17.28 42.24 17.28 10.24 0 23.36256-2.23744 39.36256-6.71744v19.2c-11.52 4.48-25.92256 6.71744-43.20256 6.71744-23.68 0-42.24-7.35744-55.68-22.07744-13.44-15.36-20.15744-38.08256-20.15744-68.16256 0-28.16 7.04-49.92 21.12-65.28 14.72-16 34.23744-23.99744 58.55744-23.99744z m-421.43744 1.92h48.95744c24.96 0 44.48256 7.68 58.56256 23.04 14.72 14.72 22.07744 35.84 22.07744 63.36 0 28.8-7.68 50.87744-23.04 66.23744-14.72 15.36-35.51744 23.04-62.39744 23.04h-44.16V500.96128z m478.08 0h23.99744l39.36256 67.2 40.32-67.2h23.04l-50.88256 83.51744 54.72256 92.16h-24.96l-43.20256-75.83744-43.19744 75.83744h-23.04l54.71744-92.16-50.87744-83.51744z m-242.88256 17.28c-17.28 0-30.39744 6.07744-39.35744 18.23744-8.96 11.52-13.44 28.8-13.44 51.84 0 23.68 4.48 41.6 13.44 53.76 8.96 11.52 22.07744 17.28 39.35744 17.28s30.40256-5.76 39.36256-17.28c8.96-12.16 13.44-30.08 13.44-53.76 0-23.04-4.48-40.32-13.44-51.84-8.96-12.16-22.08256-18.23744-39.36256-18.23744z m-213.12 1.92v137.27744h19.2c21.76 0 37.76-5.76 48-17.28 10.88-11.52 16.32256-28.8 16.32256-51.84s-5.12-39.99744-15.36-50.87744c-9.6-11.52-24.32-17.28-44.16-17.28h-24.00256z" p-id="8643" ></path></svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
1
frontend/src/assets/icons/DaoChu.svg
Normal file
@@ -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="1772506712715" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5360" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M279.5 354.3l198-162.8V734c0 19.3 15.7 35 35 35s35-15.7 35-35V191.6l197.1 162.6c6.5 5.4 14.4 8 22.3 8 10.1 0 20.1-4.3 27-12.7 12.3-14.9 10.2-37-4.7-49.3L534.7 90.4c-0.2-0.2-0.4-0.3-0.6-0.5-0.2-0.1-0.4-0.3-0.5-0.4-0.6-0.5-1.2-0.9-1.8-1.3-0.6-0.4-1.3-0.8-2-1.2-0.1-0.1-0.2-0.1-0.3-0.2-1.4-0.8-2.9-1.5-4.4-2.1h-0.1c-1.5-0.6-3.1-1.1-4.7-1.4h-0.2c-0.7-0.2-1.5-0.3-2.2-0.4h-0.2c-0.8-0.1-1.5-0.2-2.3-0.3h-0.3c-0.6 0-1.3-0.1-1.9-0.1h-3.1c-0.6 0-1.2 0.1-1.8 0.2-0.2 0-0.4 0-0.6 0.1l-2.1 0.3h-0.1c-0.7 0.1-1.4 0.3-2.1 0.5-0.1 0-0.3 0.1-0.4 0.1-1.5 0.4-2.9 0.9-4.3 1.5-0.1 0-0.1 0.1-0.2 0.1-1.5 0.6-2.9 1.4-4.3 2.2-1.4 0.9-2.8 1.8-4.1 2.9L235 300.3c-14.9 12.3-17.1 34.3-4.8 49.3 12.3 14.9 34.3 17 49.3 4.7z" fill="#ffffff" p-id="5361"></path><path d="M925.8 598.2c-19.3 0-35 15.7-35 35v238.4H133.2V633.2c0-19.3-15.7-35-35-35s-35 15.7-35 35v273.4c0 19.3 15.7 35 35 35h827.5c19.3 0 35-15.7 35-35V633.2c0.1-19.3-15.6-35-34.9-35z" p-id="5362"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
1
frontend/src/assets/icons/Markdown.svg
Normal file
@@ -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="1772517164462" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15871" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326z m1.8 562H232V136h302v216c0 23.2 18.8 42 42 42h216v494zM429 481.2c-1.9-4.4-6.2-7.2-11-7.2h-35c-6.6 0-12 5.4-12 12v272c0 6.6 5.4 12 12 12h27.1c6.6 0 12-5.4 12-12V582.1l66.8 150.2c1.9 4.3 6.2 7.1 11 7.1H524c4.7 0 9-2.8 11-7.1l66.8-150.6V758c0 6.6 5.4 12 12 12H641c6.6 0 12-5.4 12-12V486c0-6.6-5.4-12-12-12h-34.7c-4.8 0-9.1 2.8-11 7.2l-83.1 191-83.2-191z" p-id="15872"></path></svg>
|
||||||
|
After Width: | Height: | Size: 897 B |
1
frontend/src/assets/icons/PPT.svg
Normal file
@@ -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="1772517680962" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="51236" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M192 384h640a42.666667 42.666667 0 0 1 42.666667 42.666667v362.666666a42.666667 42.666667 0 0 1-42.666667 42.666667H192v106.666667a21.333333 21.333333 0 0 0 21.333333 21.333333h725.333334a21.333333 21.333333 0 0 0 21.333333-21.333333V308.821333L949.909333 298.666667h-126.528A98.048 98.048 0 0 1 725.333333 200.618667V72.661333L716.714667 64H213.333333a21.333333 21.333333 0 0 0-21.333333 21.333333v298.666667zM128 832H42.666667a42.666667 42.666667 0 0 1-42.666667-42.666667V426.666667a42.666667 42.666667 0 0 1 42.666667-42.666667h85.333333V85.333333a85.333333 85.333333 0 0 1 85.333333-85.333333h530.026667L1024 282.453333V938.666667a85.333333 85.333333 0 0 1-85.333333 85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333v-106.666667zM94.613333 472.490667V746.666667h44.928v-105.216h67.968c66.816 0 100.224-28.416 100.224-84.864 0-56.064-33.408-84.096-99.456-84.096H94.613333z m44.928 38.4h65.28c19.584 0 34.176 3.456 43.392 10.752 9.216 6.912 14.208 18.432 14.208 34.944 0 16.512-4.608 28.416-13.824 35.712-9.216 6.912-23.808 10.752-43.776 10.752h-65.28v-92.16z m206.592-38.4V746.666667h44.928v-105.216h67.968c66.816 0 100.224-28.416 100.224-84.864 0-56.064-33.408-84.096-99.456-84.096h-113.664z m44.928 38.4h65.28c19.584 0 34.176 3.456 43.392 10.752 9.216 6.912 14.208 18.432 14.208 34.944 0 16.512-4.608 28.416-13.824 35.712-9.216 6.912-23.808 10.752-43.776 10.752h-65.28v-92.16z m185.472-38.4v38.4h89.856V746.666667h44.928V510.890667h89.856v-38.4h-224.64z" p-id="51237"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
1
frontend/src/assets/icons/SiWeiDaoTu.svg
Normal file
@@ -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="1772517247243" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="19879" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M899.782551 181.281467L758.334453 51.211973a230.1401 230.1401 0 0 0-135.511075-51.195458H147.366201C102.619718 1.337688 67.402197 33.665143 68.335276 72.565434v889.942215h63.581456V72.499375a15.754989 15.754989 0 0 1 16.060511-14.76411h475.44892a89.559023 89.559023 0 0 1 16.060511 1.651467v231.692479h251.964229c1.180798 5.466354 1.767069 33.855061 1.767069 38.404851v621.843159a15.754989 15.754989 0 0 1-16.060511 14.76411H147.960729a16.704583 16.704583 0 0 1-11.345575-4.269041 14.177839 14.177839 0 0 1-4.913112-10.453782v-48.652201H68.343533v48.652201c-0.941336 38.892034 34.276185 71.219489 79.030925 72.548919h729.229762c44.754739-1.321173 79.972261-33.648628 79.030925-72.548919V329.401489a259.437114 259.437114 0 0 0-55.844337-148.120022z m-197.300691 51.195458V83.985324a92.812412 92.812412 0 0 1 11.29603 8.191273l140.870084 130.069494c2.997412 2.733177 5.945279 6.605866 9.528961 10.371209z" p-id="19880"></path><path d="M403.26092 602.950383a14.904484 14.904484 0 1 1 0-29.817225 47.182395 47.182395 0 0 0 47.132851-47.132852V492.302134a76.94182 76.94182 0 0 1 75.884881-76.941819h1.70101a14.904484 14.904484 0 1 1 0.412867 29.808968h-1.70101a47.32277 47.32277 0 0 0-46.48878 47.124594V525.992049a77.03265 77.03265 0 0 1-76.941819 76.958334z" p-id="19881"></path><path d="M528.194353 760.747998H526.286909a76.933562 76.933562 0 0 1-75.884881-76.933562v-33.689915a47.182395 47.182395 0 0 0-47.132851-47.132851 14.904484 14.904484 0 1 1 0-29.817226 77.03265 77.03265 0 0 1 76.94182 76.94182v33.689914a47.314512 47.314512 0 0 0 46.488779 47.124594h1.70101a14.904484 14.904484 0 0 1-0.206433 29.808969z" p-id="19882"></path><path d="M528.186096 602.958641H403.26092a14.904484 14.904484 0 0 1 0-29.817226h124.933433a14.904484 14.904484 0 1 1 0 29.817226z" p-id="19883"></path><path d="M381.032182 650.694277h-102.390917a34.821169 34.821169 0 0 1-34.779882-34.779882v-55.728734a34.821169 34.821169 0 0 1 34.779882-34.779882h102.390917a34.821169 34.821169 0 0 1 34.779882 34.779882v55.720476a34.829426 34.829426 0 0 1-34.779882 34.78814z m-102.390917-95.471273a4.954399 4.954399 0 0 0-4.954399 4.9544v55.720476a4.954399 4.954399 0 0 0 4.954399 4.954399h102.390917a4.954399 4.954399 0 0 0 4.954399-4.954399v-55.712219a4.954399 4.954399 0 0 0-4.954399-4.954399z m343.983937-64.547564h-46.719985a62.640121 62.640121 0 1 1 0-125.280241h46.695213a62.640121 62.640121 0 1 1 0 125.280241z m-46.719985-95.446501a32.831152 32.831152 0 0 0 0 65.662305h46.695213a32.831152 32.831152 0 0 0 0-65.662305z m46.695213 255.465338h-46.695213a62.648378 62.648378 0 0 1 0-125.288498h46.695213a62.648378 62.648378 0 0 1 0 125.288498z m-46.695213-95.47953a32.831152 32.831152 0 0 0 0 65.662304h46.695213a32.831152 32.831152 0 0 0 0-65.662304z" p-id="19884"></path><path d="M622.625202 809.788293h-46.670441a62.648378 62.648378 0 0 1 0-125.288499h46.695213a62.648378 62.648378 0 0 1 0 125.288499zM575.954761 714.341792a32.831152 32.831152 0 0 0 0 65.662304h46.695213a32.831152 32.831152 0 1 0 0-65.662304z" p-id="19885"></path></svg>
|
||||||
|
After Width: | Height: | Size: 3.3 KiB |
1
frontend/src/assets/icons/XLSX.svg
Normal file
@@ -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="1772517560235" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="49165" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M354.40128 0c-87.04 0-157.44 70.55872-157.44 157.59872v275.68128H78.72c-21.6576 0-39.36256 17.69984-39.36256 39.36256v236.31872c0 21.6576 17.69984 39.35744 39.36256 39.35744h118.24128v118.08256c0 87.04 70.4 157.59872 157.44 157.59872h472.63744c87.04 0 157.59872-70.55872 157.59872-157.59872V315.0336c0-41.74848-38.9888-81.93024-107.52-149.27872l-29.11744-29.12256L818.87744 107.52C751.5392 38.9888 711.39328 0 669.59872 0H354.4064z m0 78.72h287.20128c28.35456 7.0912 27.99616 42.1376 27.99616 76.8v120.16128c0 21.6576 17.69984 39.35744 39.36256 39.35744h118.07744c39.38816 0 78.87872-0.0256 78.87872 39.36256v512c0 43.32032-35.55328 78.87872-78.87872 78.87872H354.4064c-43.32544 0-78.72-35.5584-78.72-78.87872v-118.08256h393.91744c21.66272 0 39.36256-17.69472 39.36256-39.35744V472.64256c0-21.66272-17.69984-39.36256-39.36256-39.36256H275.68128V157.59872c0-43.32032 35.39456-78.87872 78.72-78.87872z m79.03744 420.32128c17.28 0 32.64 3.2 46.08 9.6l-7.68 18.23744c-13.44-5.76-26.24-8.63744-38.4-8.63744-10.24 0-17.92 2.23744-23.04 6.71744s-7.68 10.56256-7.68 18.24256c0 8.96 1.92 15.67744 5.76 20.15744 4.48 3.84 15.04256 9.6 31.68256 17.28 17.28 7.04 28.47744 14.40256 33.59744 22.08256 5.76 7.04 8.64256 16 8.64256 26.88 0 14.72-5.12 26.55744-15.36 35.51744s-24.96 13.44-44.16 13.44c-18.56 0-33.28-2.56-44.16-7.68v-21.12c15.36 6.4 30.08 9.6 44.16 9.6 12.8 0 22.07744-2.23744 27.83744-6.71744 6.4-4.48 9.6-11.52 9.6-21.12 0-7.68-2.23744-14.08-6.71744-19.2-3.2-3.2-15.04256-9.28256-35.52256-18.24256-13.44-6.4-23.04-13.44-28.8-21.12s-8.63744-17.59744-8.63744-29.75744c0-13.44 4.48-24.00256 13.44-31.68256 9.6-8.32 22.71744-12.47744 39.35744-12.47744z m-318.72 1.92h24.00256l39.35744 67.2 40.32-67.2h23.04l-50.87744 83.51744 54.71744 92.16h-24.96l-43.19744-75.83744-43.20256 75.83744h-23.04l54.72256-92.16-50.88256-83.51744z m154.56256 0h22.07744v155.52h69.12v20.15744H269.28128V500.96128z m228.48 0h23.99744l39.36256 67.2 40.32-67.2h23.04l-50.88256 83.51744 54.72256 92.16h-24.96l-43.20256-75.83744-43.19744 75.83744h-23.04l54.71744-92.16-50.87744-83.51744z" p-id="49166" ></path></svg>
|
||||||
|
After Width: | Height: | Size: 2.4 KiB |
1
frontend/src/assets/icons/XiaZai.svg
Normal file
@@ -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="1772523074969" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="52350" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M897.707 989.867H126.293c-51.2 0-92.16-40.96-92.16-92.16V512c0-13.653 11.947-25.6 25.6-25.6s25.6 11.947 25.6 25.6v385.707c0 22.186 18.774 40.96 40.96 40.96H896c22.187 0 40.96-18.774 40.96-40.96V512c0-13.653 11.947-25.6 25.6-25.6s27.307 11.947 27.307 25.6v385.707c0 51.2-40.96 92.16-92.16 92.16z" p-id="52351"></path><path d="M512 738.987c-6.827 0-13.653-1.707-18.773-6.827l-225.28-226.987c-10.24-10.24-10.24-25.6 0-35.84s25.6-10.24 35.84 0L512 677.547l208.213-208.214c10.24-10.24 25.6-10.24 35.84 0s10.24 25.6 0 35.84l-225.28 225.28c-5.12 5.12-11.946 8.534-18.773 8.534z" p-id="52352"></path><path d="M512 738.987c-13.653 0-25.6-11.947-25.6-25.6V59.733c0-13.653 11.947-25.6 25.6-25.6s25.6 11.947 25.6 25.6v653.654c0 13.653-11.947 25.6-25.6 25.6z" p-id="52353"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
1
frontend/src/assets/icons/XinXiTu.svg
Normal file
@@ -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="1772517519490" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="47945" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M877.6 342.976l28.448-28.48-45.28-45.248-28.448 28.48 45.28 45.248z m-22.624 22.624l-45.28-45.28-188.448 188.48v45.248h45.248l188.48-188.48zM736 864v32a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32h496L736 210.24v90.272l-32 31.296v-108.48L610.56 128H128v768h576v-32H256v-32h64v-160h32v160h64v-256h32v256h64V448h32v384h64v-160h32v160h64v-229.792l32-29.12V832h64v-96h32v96h32v32h-128z m124.8-640l90.496 90.496-271.52 271.552h-90.528v-90.528L860.8 224z" p-id="47946"></path></svg>
|
||||||
|
After Width: | Height: | Size: 827 B |
1
frontend/src/assets/icons/YuLan.svg
Normal file
@@ -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="1772523106062" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="53481" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M500.655752 944.867748H123.266149a39.466573 39.466573 0 0 1-39.365246-39.365246V118.146909a39.466573 39.466573 0 0 1 39.365246-39.365246h708.523774a39.365246 39.365246 0 0 1 39.365246 39.365246v347.853002h78.730493V118.146909A118.247729 118.247729 0 0 0 831.789923 0.000507H123.012834A118.247729 118.247729 0 0 0 4.866431 118.146909v787.507582a118.247729 118.247729 0 0 0 118.146403 118.146403h377.389602z" p-id="53482"></path><path d="M1006.881675 956.114962l-77.261262-77.261263a229.605273 229.605273 0 1 0-55.729435 55.729436l77.261262 77.261262a39.41591 39.41591 0 1 0 55.729435-55.729435z m-369.840797-102.288845a149.962844 149.962844 0 1 1 212.075833 0 150.216159 150.216159 0 0 1-212.278485 0z" p-id="53483"></path><path d="M599.094199 283.713995H227.42953a39.365246 39.365246 0 0 1 0-78.730493h371.664669a39.365246 39.365246 0 0 1 0 78.730493z" p-id="53484" ></path><path d="M413.312528 505.973115H227.42953a39.365246 39.365246 0 0 1 0-78.730493h185.882998a39.365246 39.365246 0 0 1 0 78.730493z" p-id="53485"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,418 @@
|
|||||||
|
<template>
|
||||||
|
<div class="export-list">
|
||||||
|
<!-- 导出样式选择 -->
|
||||||
|
<div class="export-style-grid">
|
||||||
|
<div
|
||||||
|
v-for="item in exportStyles"
|
||||||
|
:key="item.type"
|
||||||
|
class="export-style-item"
|
||||||
|
@click="handleSelect(item)"
|
||||||
|
>
|
||||||
|
<div class="style-icon" :style="{ color: item.color }">
|
||||||
|
<SvgIcon :icon-class="item.icon" size="24px" />
|
||||||
|
</div>
|
||||||
|
<div class="style-name">{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 导出结果列表 -->
|
||||||
|
<div class="export-result-section">
|
||||||
|
<div v-if="exportResults.length > 0" class="result-list">
|
||||||
|
<div v-for="(result, index) in exportResults" :key="index" class="result-item">
|
||||||
|
<div class="result-icon" :style="{ color: result.color }">
|
||||||
|
<SvgIcon :icon-class="result.icon" size="30px" />
|
||||||
|
</div>
|
||||||
|
<div class="result-info">
|
||||||
|
<div class="result-name">{{ result.name }}</div>
|
||||||
|
<div class="result-time">{{ formatTime(result.exportTime || Date.now()) }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="result-actions">
|
||||||
|
<el-popover
|
||||||
|
placement="bottom-end"
|
||||||
|
:width="120"
|
||||||
|
:show-arrow="false"
|
||||||
|
trigger="click"
|
||||||
|
popper-class="action-popover"
|
||||||
|
>
|
||||||
|
<template #reference>
|
||||||
|
<button class="more-btn" @click.stop>
|
||||||
|
<SvgIcon icon-class="more" class="more-icon" size="16px" />
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
<div class="action-menu">
|
||||||
|
<div class="action-item" @click="previewResult(result)">
|
||||||
|
<SvgIcon icon-class="YuLan" size="14px" />
|
||||||
|
<span>预览文件</span>
|
||||||
|
</div>
|
||||||
|
<div class="action-item" @click="downloadResult(result)">
|
||||||
|
<SvgIcon icon-class="XiaZai" size="14px" />
|
||||||
|
<span>下载文件</span>
|
||||||
|
</div>
|
||||||
|
<div class="action-item" @click="shareResult(result)">
|
||||||
|
<SvgIcon icon-class="FenXiang" size="14px" />
|
||||||
|
<span>分享文件</span>
|
||||||
|
</div>
|
||||||
|
<div class="action-item" @click="deleteResult(result)">
|
||||||
|
<SvgIcon icon-class="ShanChu" size="14px" />
|
||||||
|
<span>删除文件</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-popover>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="result-empty">暂无导出记录</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 删除确认对话框 -->
|
||||||
|
<DeleteConfirmDialog
|
||||||
|
v-model="dialogVisible"
|
||||||
|
title="确认删除该导出记录 ?"
|
||||||
|
content="删除后,该记录无法恢复 !"
|
||||||
|
@confirm="confirmDelete"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import SvgIcon from '@/components/SvgIcon/index.vue'
|
||||||
|
import DeleteConfirmDialog from '@/components/DeleteConfirmDialog/index.vue'
|
||||||
|
import { useAgentsStore } from '@/stores'
|
||||||
|
|
||||||
|
const agentsStore = useAgentsStore()
|
||||||
|
|
||||||
|
// 事件定义
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: 'close'): void
|
||||||
|
}>()
|
||||||
|
|
||||||
|
// 导出样式类型
|
||||||
|
interface ExportStyle {
|
||||||
|
type: string
|
||||||
|
name: string
|
||||||
|
icon: string
|
||||||
|
color: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出结果类型
|
||||||
|
interface ExportResult {
|
||||||
|
name: string
|
||||||
|
icon: string
|
||||||
|
type: string
|
||||||
|
color: string
|
||||||
|
exportTime?: number // 时间戳
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出样式数据
|
||||||
|
const exportStyles = ref<ExportStyle[]>([
|
||||||
|
{ type: 'doc', name: '文本报告', icon: 'DOCX', color: '#00A2D2' },
|
||||||
|
{ type: 'markdown', name: 'Markdown', icon: 'Markdown', color: '#FF5B5B' },
|
||||||
|
{ type: 'mindmap', name: '思维导图', icon: 'SiWeiDaoTu', color: '#FF5BEE' },
|
||||||
|
{ type: 'infographic', name: '信息图', icon: 'XinXiTu', color: '#FCE460' },
|
||||||
|
{ type: 'excel', name: '数据表格', icon: 'XLSX', color: '#65AE00' },
|
||||||
|
{ type: 'ppt', name: '演示文稿', icon: 'PPT', color: '#FF7914' }
|
||||||
|
])
|
||||||
|
|
||||||
|
// 导出结果列表
|
||||||
|
const exportResults = ref<ExportResult[]>([])
|
||||||
|
|
||||||
|
// 删除对话框相关
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const resultToDelete = ref<ExportResult | null>(null)
|
||||||
|
|
||||||
|
// 格式化时间显示
|
||||||
|
const formatTime = (timestamp: number): string => {
|
||||||
|
const now = Date.now()
|
||||||
|
const diff = now - timestamp
|
||||||
|
const minutes = Math.floor(diff / 60000)
|
||||||
|
const hours = Math.floor(diff / 3600000)
|
||||||
|
const days = Math.floor(diff / 86400000)
|
||||||
|
|
||||||
|
if (minutes < 1) return '刚刚'
|
||||||
|
if (minutes < 60) return `${minutes}分钟前`
|
||||||
|
if (hours < 24) return `${hours}小时前`
|
||||||
|
if (days < 7) return `${days}天前`
|
||||||
|
|
||||||
|
const date = new Date(timestamp)
|
||||||
|
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(
|
||||||
|
date.getDate()
|
||||||
|
).padStart(2, '0')}`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 预览文件
|
||||||
|
const previewResult = (_result: ExportResult) => {
|
||||||
|
ElMessage.success('预览功能开发中')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载文件
|
||||||
|
const downloadResult = (_result: ExportResult) => {
|
||||||
|
ElMessage.success('下载功能开发中')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分享
|
||||||
|
const shareResult = (_result: ExportResult) => {
|
||||||
|
ElMessage.success('分享功能开发中')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
const deleteResult = (result: ExportResult) => {
|
||||||
|
resultToDelete.value = result
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确认删除
|
||||||
|
const confirmDelete = () => {
|
||||||
|
if (!resultToDelete.value) return
|
||||||
|
|
||||||
|
const index = exportResults.value.indexOf(resultToDelete.value)
|
||||||
|
if (index > -1) {
|
||||||
|
exportResults.value.splice(index, 1)
|
||||||
|
ElMessage.success('删除成功')
|
||||||
|
}
|
||||||
|
dialogVisible.value = false
|
||||||
|
resultToDelete.value = null
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选择导出样式
|
||||||
|
const handleSelect = (item: ExportStyle) => {
|
||||||
|
const currentTask = agentsStore.currentTask
|
||||||
|
if (!currentTask) {
|
||||||
|
ElMessage.warning('请先选择任务')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成导出名称:任务名称 + 样式名称
|
||||||
|
const taskName = currentTask.StepName || '未知任务'
|
||||||
|
const exportName = `${taskName}${item.name}`
|
||||||
|
|
||||||
|
// 添加到导出结果列表(添加到最前面)
|
||||||
|
const newItem = {
|
||||||
|
name: exportName,
|
||||||
|
icon: item.icon,
|
||||||
|
type: item.type,
|
||||||
|
color: item.color,
|
||||||
|
exportTime: Date.now()
|
||||||
|
}
|
||||||
|
|
||||||
|
exportResults.value.unshift(newItem)
|
||||||
|
|
||||||
|
console.log('导出任务:', { task: currentTask, style: item })
|
||||||
|
ElMessage.success(`已开始导出: ${item.name}`)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.export-list {
|
||||||
|
padding: 16px;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.export-style-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 152px);
|
||||||
|
gap: 12px;
|
||||||
|
justify-content: center;
|
||||||
|
margin: 0 -16px 16px -16px;
|
||||||
|
padding: 0 16px 16px 16px;
|
||||||
|
border-bottom: 1px solid var(--color-border-separate);
|
||||||
|
}
|
||||||
|
|
||||||
|
.export-style-item {
|
||||||
|
width: 152px;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
padding: 0 12px;
|
||||||
|
gap: 8px;
|
||||||
|
border-radius: 12px;
|
||||||
|
background: var(--color-bg-detail);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--color-bg-content-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.style-icon {
|
||||||
|
flex-shrink: 0;
|
||||||
|
color: var(--color-text-plan-item);
|
||||||
|
}
|
||||||
|
|
||||||
|
.style-name {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--color-text-plan-item);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.export-result-section {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.result-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--color-text-primary);
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-list {
|
||||||
|
flex: 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
max-height: calc(100vh - 430px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: var(--color-bg-three);
|
||||||
|
transition: background 0.2s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--color-bg-hover);
|
||||||
|
|
||||||
|
.result-name {
|
||||||
|
color: var(--color-text-plan-item-hover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.result-icon {
|
||||||
|
color: var(--color-text-plan-item);
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-info {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
|
||||||
|
.result-name {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--color-text-placeholder);
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
transition: color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-time {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--color-text-plan-item);
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-actions {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更多按钮
|
||||||
|
.more-btn {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 50%;
|
||||||
|
transition: background-color 0.2s;
|
||||||
|
|
||||||
|
.more-icon {
|
||||||
|
color: var(--color-text-plan-item);
|
||||||
|
transition: color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--color-card-border-three);
|
||||||
|
|
||||||
|
.more-icon {
|
||||||
|
color: var(--color-text-plan-item-hover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 操作菜单
|
||||||
|
.action-menu {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-empty {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: var(--color-text-placeholder);
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.action-popover {
|
||||||
|
padding: 0 !important;
|
||||||
|
border-radius: 8px !important;
|
||||||
|
width: 120px !important;
|
||||||
|
min-width: 120px !important;
|
||||||
|
background: var(--color-bg-three) !important;
|
||||||
|
border: 1px solid var(--color-card-border-three) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-menu {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.el-popover__content {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 8px 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 13px;
|
||||||
|
color: var(--color-text-plan-item);
|
||||||
|
transition: background-color 0.2s, color 0.2s;
|
||||||
|
|
||||||
|
.svg-icon {
|
||||||
|
color: var(--color-text-plan-item);
|
||||||
|
transition: color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--color-card-border-three);
|
||||||
|
color: var(--color-text-plan-item-hover);
|
||||||
|
|
||||||
|
.svg-icon {
|
||||||
|
color: var(--color-text-plan-item-hover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-radius: 0 0 8px 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -23,6 +23,7 @@ const props = defineProps<{
|
|||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'refreshLine'): void
|
(e: 'refreshLine'): void
|
||||||
(e: 'setCurrentTask', task: IRawStepTask): void
|
(e: 'setCurrentTask', task: IRawStepTask): void
|
||||||
|
(e: 'openExport'): void
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const agentsStore = useAgentsStore()
|
const agentsStore = useAgentsStore()
|
||||||
@@ -1148,7 +1149,7 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// 按钮交互状态管理
|
// 按钮交互状态管理
|
||||||
type ButtonState = 'process' | 'execute' | 'refresh' | null
|
type ButtonState = 'process' | 'execute' | 'refresh' | 'export' | null
|
||||||
const buttonHoverState = ref<ButtonState>(null)
|
const buttonHoverState = ref<ButtonState>(null)
|
||||||
let buttonHoverTimer: ReturnType<typeof setTimeout> | null = null
|
let buttonHoverTimer: ReturnType<typeof setTimeout> | null = null
|
||||||
|
|
||||||
@@ -1173,6 +1174,8 @@ const handleExecuteMouseEnter = () =>
|
|||||||
setButtonHoverState('execute', !!agentsStore.agentRawPlan.data)
|
setButtonHoverState('execute', !!agentsStore.agentRawPlan.data)
|
||||||
const handleRefreshMouseEnter = () =>
|
const handleRefreshMouseEnter = () =>
|
||||||
setButtonHoverState('refresh', agentsStore.executePlan.length > 0)
|
setButtonHoverState('refresh', agentsStore.executePlan.length > 0)
|
||||||
|
const handleExportMouseEnter = () =>
|
||||||
|
setButtonHoverState('export', agentsStore.executePlan.length > 0)
|
||||||
|
|
||||||
const handleButtonMouseLeave = () => {
|
const handleButtonMouseLeave = () => {
|
||||||
clearButtonHoverTimer()
|
clearButtonHoverTimer()
|
||||||
@@ -1189,21 +1192,44 @@ onUnmounted(() => {
|
|||||||
})
|
})
|
||||||
// 计算按钮类名
|
// 计算按钮类名
|
||||||
const processBtnClass = computed(() => {
|
const processBtnClass = computed(() => {
|
||||||
if (buttonHoverState.value === 'refresh' || buttonHoverState.value === 'execute') {
|
if (
|
||||||
|
buttonHoverState.value === 'refresh' ||
|
||||||
|
buttonHoverState.value === 'execute' ||
|
||||||
|
buttonHoverState.value === 'export'
|
||||||
|
) {
|
||||||
return 'circle'
|
return 'circle'
|
||||||
}
|
}
|
||||||
return buttonHoverState.value === 'process' ? 'ellipse' : 'circle'
|
return buttonHoverState.value === 'process' ? 'ellipse' : 'circle'
|
||||||
})
|
})
|
||||||
|
|
||||||
const executeBtnClass = computed(() => {
|
const executeBtnClass = computed(() => {
|
||||||
if (buttonHoverState.value === 'process' || buttonHoverState.value === 'refresh') {
|
if (
|
||||||
|
buttonHoverState.value === 'process' ||
|
||||||
|
buttonHoverState.value === 'refresh' ||
|
||||||
|
buttonHoverState.value === 'export'
|
||||||
|
) {
|
||||||
return 'circle task-execute-btn'
|
return 'circle task-execute-btn'
|
||||||
}
|
}
|
||||||
return agentsStore.agentRawPlan.data ? 'ellipse task-execute-btn' : 'circle task-execute-btn'
|
return agentsStore.agentRawPlan.data ? 'ellipse task-execute-btn' : 'circle task-execute-btn'
|
||||||
})
|
})
|
||||||
|
|
||||||
const refreshBtnClass = computed(() => {
|
const refreshBtnClass = computed(() => {
|
||||||
if (buttonHoverState.value === 'process' || buttonHoverState.value === 'execute') {
|
if (
|
||||||
|
buttonHoverState.value === 'process' ||
|
||||||
|
buttonHoverState.value === 'execute' ||
|
||||||
|
buttonHoverState.value === 'export'
|
||||||
|
) {
|
||||||
|
return 'circle'
|
||||||
|
}
|
||||||
|
return agentsStore.executePlan.length > 0 ? 'ellipse' : 'circle'
|
||||||
|
})
|
||||||
|
|
||||||
|
const exportBtnClass = computed(() => {
|
||||||
|
if (
|
||||||
|
buttonHoverState.value === 'process' ||
|
||||||
|
buttonHoverState.value === 'execute' ||
|
||||||
|
buttonHoverState.value === 'refresh'
|
||||||
|
) {
|
||||||
return 'circle'
|
return 'circle'
|
||||||
}
|
}
|
||||||
return agentsStore.executePlan.length > 0 ? 'ellipse' : 'circle'
|
return agentsStore.executePlan.length > 0 ? 'ellipse' : 'circle'
|
||||||
@@ -1223,6 +1249,10 @@ const showRefreshText = computed(() => {
|
|||||||
return buttonHoverState.value === 'refresh'
|
return buttonHoverState.value === 'refresh'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const showExportText = computed(() => {
|
||||||
|
return buttonHoverState.value === 'export'
|
||||||
|
})
|
||||||
|
|
||||||
// 计算按钮标题
|
// 计算按钮标题
|
||||||
const processBtnTitle = computed(() => {
|
const processBtnTitle = computed(() => {
|
||||||
return buttonHoverState.value === 'process' ? '查看任务流程' : '点击查看任务流程'
|
return buttonHoverState.value === 'process' ? '查看任务流程' : '点击查看任务流程'
|
||||||
@@ -1255,7 +1285,7 @@ defineExpose({
|
|||||||
<div class="text-[18px] font-bold mb-[7px] flex justify-between items-center px-[20px]">
|
<div class="text-[18px] font-bold mb-[7px] flex justify-between items-center px-[20px]">
|
||||||
<span class="text-[var(--color-text-title-header)]">执行结果</span>
|
<span class="text-[var(--color-text-title-header)]">执行结果</span>
|
||||||
<div
|
<div
|
||||||
class="flex items-center justify-end gap-[10px] task-button-group w-[230px]"
|
class="flex items-center justify-end gap-[10px] task-button-group w-[280px]"
|
||||||
@mouseleave="handleButtonMouseLeave"
|
@mouseleave="handleButtonMouseLeave"
|
||||||
>
|
>
|
||||||
<!-- 刷新按钮 -->
|
<!-- 刷新按钮 -->
|
||||||
@@ -1266,11 +1296,24 @@ defineExpose({
|
|||||||
:disabled="agentsStore.executePlan.length === 0"
|
:disabled="agentsStore.executePlan.length === 0"
|
||||||
@mouseenter="handleRefreshMouseEnter"
|
@mouseenter="handleRefreshMouseEnter"
|
||||||
@click="handleRefresh"
|
@click="handleRefresh"
|
||||||
style="order: 0"
|
style="order: 1"
|
||||||
>
|
>
|
||||||
<svg-icon icon-class="refresh" />
|
<svg-icon icon-class="refresh" />
|
||||||
<span v-if="showRefreshText" class="btn-text">重置</span>
|
<span v-if="showRefreshText" class="btn-text">重置</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<!-- 导出按钮 -->
|
||||||
|
<el-button
|
||||||
|
:class="exportBtnClass"
|
||||||
|
:color="variables.tertiary"
|
||||||
|
title="导出"
|
||||||
|
:disabled="agentsStore.executePlan.length === 0"
|
||||||
|
@mouseenter="handleExportMouseEnter"
|
||||||
|
@click="emit('openExport')"
|
||||||
|
style="order: 0"
|
||||||
|
>
|
||||||
|
<svg-icon icon-class="DaoChu" />
|
||||||
|
<span v-if="showExportText" class="btn-text">导出</span>
|
||||||
|
</el-button>
|
||||||
<!-- Task Process按钮 -->
|
<!-- Task Process按钮 -->
|
||||||
<el-button
|
<el-button
|
||||||
:class="processBtnClass"
|
:class="processBtnClass"
|
||||||
@@ -1278,7 +1321,7 @@ defineExpose({
|
|||||||
:title="processBtnTitle"
|
:title="processBtnTitle"
|
||||||
@mouseenter="handleProcessMouseEnter"
|
@mouseenter="handleProcessMouseEnter"
|
||||||
@click="handleTaskProcess"
|
@click="handleTaskProcess"
|
||||||
style="order: 1"
|
style="order: 3"
|
||||||
>
|
>
|
||||||
<svg-icon icon-class="process" />
|
<svg-icon icon-class="process" />
|
||||||
<span v-if="showProcessText" class="btn-text">任务过程</span>
|
<span v-if="showProcessText" class="btn-text">任务过程</span>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import AgentRepo from './AgentRepo/index.vue'
|
|||||||
import TaskSyllabus from './TaskSyllabus/index.vue'
|
import TaskSyllabus from './TaskSyllabus/index.vue'
|
||||||
import TaskResult from './TaskResult/index.vue'
|
import TaskResult from './TaskResult/index.vue'
|
||||||
import HistoryList from './HistoryList/index.vue'
|
import HistoryList from './HistoryList/index.vue'
|
||||||
|
import ExportList from './ExportList/index.vue'
|
||||||
import SvgIcon from '@/components/SvgIcon/index.vue'
|
import SvgIcon from '@/components/SvgIcon/index.vue'
|
||||||
import { Jsplumb } from './utils.ts'
|
import { Jsplumb } from './utils.ts'
|
||||||
import { type IRawStepTask, useAgentsStore } from '@/stores'
|
import { type IRawStepTask, useAgentsStore } from '@/stores'
|
||||||
@@ -24,11 +25,19 @@ const agentsStore = useAgentsStore()
|
|||||||
// 历史记录弹窗控制
|
// 历史记录弹窗控制
|
||||||
const historyDialogVisible = ref(false)
|
const historyDialogVisible = ref(false)
|
||||||
|
|
||||||
|
// 导出弹窗控制
|
||||||
|
const exportDialogVisible = ref(false)
|
||||||
|
|
||||||
// 打开历史记录弹窗
|
// 打开历史记录弹窗
|
||||||
const openHistoryDialog = () => {
|
const openHistoryDialog = () => {
|
||||||
historyDialogVisible.value = true
|
historyDialogVisible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 打开导出弹窗
|
||||||
|
const openExportDialog = () => {
|
||||||
|
exportDialogVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
// 处理历史任务恢复
|
// 处理历史任务恢复
|
||||||
const handleRestorePlan = (plan: any) => {
|
const handleRestorePlan = (plan: any) => {
|
||||||
// 关闭弹窗
|
// 关闭弹窗
|
||||||
@@ -102,6 +111,7 @@ function clear() {
|
|||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
openHistoryDialog,
|
openHistoryDialog,
|
||||||
|
openExportDialog,
|
||||||
changeTask,
|
changeTask,
|
||||||
resetAgentRepoLine,
|
resetAgentRepoLine,
|
||||||
clear
|
clear
|
||||||
@@ -133,6 +143,7 @@ defineExpose({
|
|||||||
:TaskID="props.TaskID"
|
:TaskID="props.TaskID"
|
||||||
@refresh-line="taskResultJsplumb.repaintEverything"
|
@refresh-line="taskResultJsplumb.repaintEverything"
|
||||||
@set-current-task="handleTaskResultCurrentTask"
|
@set-current-task="handleTaskResultCurrentTask"
|
||||||
|
@open-export="openExportDialog"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -151,6 +162,22 @@ defineExpose({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 导出弹窗 -->
|
||||||
|
<div v-if="exportDialogVisible" class="export-drawer">
|
||||||
|
<div class="export-drawer-content">
|
||||||
|
<div class="export-drawer-header">
|
||||||
|
<span class="export-drawer-title">导出</span>
|
||||||
|
<button class="export-drawer-close" @click="exportDialogVisible = false">
|
||||||
|
<SvgIcon icon-class="close" size="20px" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="h-[1px] w-full bg-[var(--color-border-separate)] my-[8px]"></div>
|
||||||
|
<div class="export-drawer-body">
|
||||||
|
<ExportList @close="exportDialogVisible = false" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -247,4 +274,72 @@ defineExpose({
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 导出 Drawer 样式
|
||||||
|
:deep(.export-drawer) {
|
||||||
|
// 强制使用绝对定位,相对于父容器
|
||||||
|
position: absolute !important;
|
||||||
|
top: 0 !important;
|
||||||
|
bottom: 0 !important;
|
||||||
|
right: 0 !important;
|
||||||
|
z-index: 1000;
|
||||||
|
// 高度由 top/bottom 控制
|
||||||
|
height: auto !important;
|
||||||
|
width: 500px !important;
|
||||||
|
|
||||||
|
background-color: var(--color-bg-three);
|
||||||
|
border: 1px solid var(--color-card-border-three);
|
||||||
|
border-radius: 24px;
|
||||||
|
box-shadow: var(--color-card-shadow-three);
|
||||||
|
padding-top: 20px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
|
||||||
|
// 动画:从右向左滑入
|
||||||
|
animation: export-drawer-slide-in 0.5s ease-out;
|
||||||
|
|
||||||
|
// 头部
|
||||||
|
.export-drawer-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 16px;
|
||||||
|
background-color: var(--color-bg-three);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 标题
|
||||||
|
.export-drawer-title {
|
||||||
|
color: var(--color-text-primary);
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭按钮
|
||||||
|
.export-drawer-close {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: var(--color-text-regular);
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes export-drawer-slide-in {
|
||||||
|
from {
|
||||||
|
transform: translateX(100%);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: translateX(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||