homepage
BIN
client/public/imgs/home/advanced_settings.png
Normal file
After Width: | Height: | Size: 428 KiB |
BIN
client/public/imgs/home/ai_assiatant.png
Normal file
After Width: | Height: | Size: 596 KiB |
BIN
client/public/imgs/home/dataset_import.png
Normal file
After Width: | Height: | Size: 223 KiB |
1
client/public/imgs/home/icon_1.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="1691391466028" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4715" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M511.957333 21.333333C241.024 21.333333 21.333333 240.981333 21.333333 512c0 216.832 140.544 400.725333 335.573334 465.664 24.490667 4.394667 32.256-10.069333 32.256-23.082667 0-11.690667 0.256-44.245333 0-85.205333-136.448 29.610667-164.736-64.64-164.736-64.64-22.314667-56.704-54.4-71.765333-54.4-71.765333-44.586667-30.464 3.285333-29.824 3.285333-29.824 49.194667 3.413333 75.178667 50.517333 75.178667 50.517333 43.776 75.008 114.816 53.333333 142.762666 40.789333 4.522667-31.658667 17.152-53.376 31.189334-65.536-108.970667-12.458667-223.488-54.485333-223.488-242.602666 0-53.546667 19.114667-97.322667 50.517333-131.669334-5.034667-12.330667-21.930667-62.293333 4.778667-129.834666 0 0 41.258667-13.184 134.912 50.346666a469.802667 469.802667 0 0 1 122.88-16.554666c41.642667 0.213333 83.626667 5.632 122.88 16.554666 93.653333-63.488 134.784-50.346667 134.784-50.346666 26.752 67.541333 9.898667 117.504 4.864 129.834666 31.402667 34.346667 50.474667 78.122667 50.474666 131.669334 0 188.586667-114.730667 230.016-224.042666 242.090666 17.578667 15.232 33.578667 44.672 33.578666 90.453334v135.850666c0 13.141333 7.936 27.605333 32.853334 22.869334C862.250667 912.597333 1002.666667 728.746667 1002.666667 512 1002.666667 240.981333 783.018667 21.333333 511.957333 21.333333z" p-id="4716"></path></svg>
|
After Width: | Height: | Size: 1.6 KiB |
1
client/public/imgs/home/icon_2.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="1688889092975" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2652" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M932.15857778 820.62601482V639.06702222c-26.82121482 23.42305185-57.04059259 42.71976297-89.4445037 57.28331853-104.97896297 46.11792592-218.45333333 69.41961482-333.14133333 68.32734814-148.06281482 8.61677037-294.66927408-32.768-416.39632593-117.35798519v182.89398519C101.4290963 910.07051852 277.52675555 997.45185185 512.36408889 997.45185185c234.83733333 0 409.6-88.10951111 419.79448889-168.57315555v-8.25268148z" p-id="2653" fill="#4e83fd"></path><path d="M932.15857778 505.93185185v-3.39816296 8.25268148c-10.19448889 80.58500741-184.95715555 168.57315555-419.79448889 168.57315555-234.83733333 0-410.93499259-87.38133333-419.18767407-167.23816295V329.10601482C214.90346667 413.81736297 361.50992592 455.08077037 509.57274075 446.464c114.688 1.09226667 228.16237037-22.08805925 333.14133333-68.32734815 32.40391111-14.68491852 62.62328889-33.98162963 89.4445037-57.28331852V505.93185185z" p-id="2654" fill="#4e83fd"></path><path d="M816.13558518 85.40918518c69.66234075 30.70482963 111.28983703 74.3954963 111.28983704 113.35300741 0 38.22933333-42.96248889 80.58500741-111.28983704 113.35300741-97.09037037 41.26340741-201.70524445 61.53102222-307.16965926 59.34648889-238.96367408 0-417.1245037-90.7794963-417.1245037-171.97131852s178.88900741-172.6994963 418.4594963-172.69949629c104.97896297-2.3058963 209.10838518 17.71899259 305.83466666 58.6183111z" p-id="2655" fill="#4e83fd"></path></svg>
|
After Width: | Height: | Size: 1.7 KiB |
1
client/public/imgs/home/icon_3.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="1691459708057" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5077" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M934.423357 388.738675H636.152113v99.05297h-64.657602L413.227927 382.546649v-64.511269h32.679284c69.808926 0 126.410038-56.601112 126.410038-126.410038 0-69.807902-56.602136-126.409015-126.410038-126.409015H330.962296c-69.808926 0-126.410038 56.602136-126.410038 126.409015 0 69.809949 56.602136 126.410038 126.410038 126.410038h32.702819v64.536852L166.551782 513.623987l197.114356 131.054825v61.440327h-32.702819c-69.808926 0-126.410038 56.601112-126.410038 126.410038 0 69.807902 56.602136 126.410038 126.410038 126.410038h114.944915c60.205197 0 110.372783-42.185798 123.096573-98.54541h240.532215V636.430964h124.887358V388.738675zM759.973186 810.856575h-189.833533c-10.328229-59.431577-61.84965-104.737436-124.232442-104.737436h-32.679284v-61.414745l161.435763-107.349936h61.488423v99.075483h123.821073v174.426634z" p-id="5078" fill="#FC9663"></path></svg>
|
After Width: | Height: | Size: 1.2 KiB |
1
client/public/imgs/home/icon_4.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="1691460113549" class="icon" viewBox="0 0 1443 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2328" xmlns:xlink="http://www.w3.org/1999/xlink" width="90.1875" height="64"><path d="M1200.165345 1023.218368H349.208974c-192.401638 0-349.208974-215.369584-349.208974-406.207959a348.006463 348.006463 0 0 1 349.208974-346.022321 322.33287 322.33287 0 0 1 38.780955 2.344895C470.963136 141.056856 617.248506 0.002405 774.777348 0.002405a454.368494 454.368494 0 0 1 454.669122 423.403856c120.251024 14.309872 213.625944 168.952689 213.625944 359.189808a242.005186 242.005186 0 0 1-242.907069 240.622299zM349.148848 330.57247A288.061328 288.061328 0 0 0 60.125512 617.010409c0 158.009846 129.690729 346.623577 289.083462 346.623577h850.956371A182.120176 182.120176 0 0 0 1382.886776 782.596069c0-156.867461-81.951073-301.349066-182.661305-301.349066a30.062756 30.062756 0 0 1-30.062756-30.062756A394.062606 394.062606 0 0 0 774.717222 59.28616c-142.67784 0-274.893841 136.965916-344.940062 260.70422a29.581752 29.581752 0 0 1-31.265266 14.73075 297.080155 297.080155 0 0 0-49.30292-4.14866z m881.079253 120.912405zM300.62756 783.497952H240.502048v-240.502048h60.125512v60.125512h60.125512v-60.125512h60.125512v240.502048H360.753072v-120.251024H300.62756v120.251024z m180.376536-180.376536v-60.125512h180.376536v60.125512h-60.125512v180.376536H541.129608v-180.376536H481.004096z m240.502048 0v-60.125512h180.376536v60.125512h-60.125512v180.376536h-60.125512v-180.376536h-60.125512z m300.62756 180.376536h-60.125512v-240.502048h60.125512c71.368983-0.962008 127.225583-24.050205 126.263575 30.062756-1.863891 50.264928-7.936568 147.548006-66.138063 150.31378h-60.125512v60.125512z m0-180.376536v60.125512a35.293676 35.293676 0 0 0 12.025103 6.012551q56.39773 5.471422 54.954717-36.075307 0-37.818947-54.954717-36.075307a35.293676 35.293676 0 0 0-12.025103 6.012551z" fill="#7839ee" p-id="2329"></path></svg>
|
After Width: | Height: | Size: 2.0 KiB |
1
client/public/imgs/home/icon_5.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="1686561811905" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2855" xmlns:xlink="http://www.w3.org/1999/xlink" ><path d="M992 528c0 273.9-222.1 496-496 496S0 801.9 0 528 222.1 32 496 32c86.2 0 167.3 22 238 60.7 2.3 1.3 2.8 4.4 0.9 6.3l-37 37.3-4.2 4.3c-1.2 1.2-3.1 1.5-4.6 0.8-8.2-4.1-16.5-7.9-24.9-11.5C610.9 107.4 554.3 96 496 96s-114.9 11.4-168.1 33.9c-51.4 21.8-97.7 52.9-137.3 92.6-39.7 39.7-70.9 85.9-92.6 137.3C75.4 413.1 64 469.6 64 528c0 58.3 11.4 114.9 33.9 168.1 21.8 51.4 52.9 97.6 92.6 137.3 39.7 39.7 85.9 70.9 137.3 92.6 53.3 22.6 109.9 34 168.2 34s114.9-11.4 168.1-33.9c51.4-21.8 97.7-52.9 137.3-92.6 39.7-39.7 70.9-85.9 92.6-137.3 22.6-53.3 34-109.9 34-168.2 0-58.4-11.4-114.9-33.9-168.1-3.6-8.5-7.4-16.8-11.5-25-0.8-1.5-0.5-3.4 0.8-4.6l4.3-4.2 37.3-37c1.9-1.9 5-1.4 6.3 0.9C970 360.6 992 441.7 992 528z" p-id="2856" fill="#6CD3CC"></path><path d="M781.4 397c-3.7-8-11.7-13.1-20.6-13.1H740c-6 0-11.8 2.4-16 6.6-7 7-8.6 17.6-4.1 26.4 2.6 5.1 5 10.3 7.3 15.7 13.2 31.2 19.9 64.3 19.9 98.5s-6.7 67.3-19.9 98.5c-12.7 30.1-31 57.2-54.2 80.4-23.3 23.3-50.3 41.5-80.4 54.2-31.3 13.1-64.4 19.8-98.6 19.8s-67.3-6.7-98.5-19.9c-30.1-12.7-57.2-31-80.4-54.2-23.3-23.3-41.5-50.3-54.2-80.4-13.2-31.2-19.9-64.3-19.9-98.5s6.7-67.3 19.9-98.5c12.7-30.1 31-57.2 54.2-80.4 23.3-23.3 50.3-41.5 80.4-54.2 31.2-13.2 64.3-19.9 98.5-19.9s67.3 6.7 98.5 19.9c4.9 2.1 9.8 4.3 14.6 6.7 8.8 4.4 19.4 2.6 26.3-4.4 4.3-4.3 6.7-10.1 6.7-16.2v-20.2c0-9-5.2-17.1-13.4-20.8-40.4-18.6-85.3-29-132.6-29-175.5 0-318 143.4-317 318.9C178 707.1 319.6 848 494 848c174.8 0 316.6-141.3 317-316.2 0.1-48.2-10.5-93.9-29.6-134.8z" p-id="2857" fill="#6CD3CC"></path><path d="M634.5 488.5c-0.8-2.9-4.5-3.9-6.7-1.7l-34.7 34.7-1.8 1.8c-9 9-15.7 20.1-20.1 32.1-11.5 31.6-42.4 54-78.3 52.7-41.6-1.6-75.3-35.3-76.9-76.9-1.4-35.9 21-66.8 52.7-78.3 12-4.4 23-11.1 32.1-20.1l1.8-1.8 34.7-34.7c2.2-2.2 1.2-5.8-1.7-6.7-12.9-3.7-26.5-5.6-40.6-5.5-79.4 0.5-143 64.5-143 143.9 0 79.5 64.5 144 144 144 79.4 0 143.4-63.6 144-142.9 0.1-14.1-1.8-27.8-5.5-40.6z" p-id="2858" fill="#6CD3CC"></path><path d="M1014.3 146H882c-2.2 0-4-1.8-4-4V9.8c0-2.4-2-4-4-4-1 0-2 0.4-2.8 1.2L766.8 112.4l-46.1 46.5-44 44.4c-3 3-4.6 7-4.6 11.3v85.5c0 4.3-1.7 8.3-4.7 11.3l-94.7 94.7-47.4 47.4-51.8 51.9c-12.5 12.5-12.5 32.8 0 45.3 6.3 6.3 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l51.8-51.9 123.2-123.2 19-19c3-3 7.1-4.7 11.3-4.7h85.5c4.2 0 8.3-1.7 11.3-4.6l44.3-43.9 46.5-46.1L1017 152.9c2.6-2.6 0.8-6.9-2.7-6.9zM864 214.3l-44 43.5-25.6 25.4c-3 3-7 4.6-11.3 4.6H744c-4.4 0-8-3.6-8-8v-39c0-4.2 1.7-8.3 4.6-11.3l25.5-25.7 43.5-43.9 1.6-1.6c1.6-1.7 4.5-0.7 4.8 1.6 4.8 25.8 23.5 41.6 48.6 47.7 2.1 0.5 2.9 3.2 1.3 4.7l-1.9 2z" p-id="2859" fill="#6CD3CC"></path></svg>
|
After Width: | Height: | Size: 2.8 KiB |
1
client/public/imgs/home/icon_6.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="1691460052375" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7219" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M950.676002 419.057175a255.346807 255.346807 0 0 0-22.014863-209.48251 257.949339 257.949339 0 0 0-277.74565-123.72694A258.759964 258.759964 0 0 0 212.538139 178.386943a255.346807 255.346807 0 0 0-170.572521 123.726941 257.949339 257.949339 0 0 0 31.699696 302.789689 255.133485 255.133485 0 0 0 21.758876 209.525175 258.162662 258.162662 0 0 0 277.958972 123.726941A255.346807 255.346807 0 0 0 565.757223 1023.996587a258.375984 258.375984 0 0 0 246.259276-179.446729 255.560129 255.560129 0 0 0 170.529856-123.726941 258.375984 258.375984 0 0 0-31.870353-301.765742zM565.757223 957.013381a190.966133 190.966133 0 0 1-122.702994-44.371041l6.015689-3.455821 203.893466-117.668587a33.918248 33.918248 0 0 0 16.724469-29.054499v-287.430483l86.182214 49.832092a3.029177 3.029177 0 0 1 1.621249 2.218552v238.195693a192.160738 192.160738 0 0 1-191.734093 191.734094zM153.618516 780.979809a190.710147 190.710147 0 0 1-22.825487-128.590689l6.058354 3.626479 204.064123 117.711252a32.8943 32.8943 0 0 0 33.278281 0l249.288453-143.736574v99.493526a3.413157 3.413157 0 0 1-1.407927 2.645197L415.578315 851.205514a191.990081 191.990081 0 0 1-261.959799-70.225705zM99.861294 336.928085a191.350114 191.350114 0 0 1 100.944118-84.176984V494.957254a32.680978 32.680978 0 0 0 16.553811 28.841176l248.093849 143.139272-86.182214 49.832092a3.242499 3.242499 0 0 1-3.029177 0l-206.069353-118.863193A192.160738 192.160738 0 0 1 99.861294 335.904138z m708.102081 164.471503l-248.861809-144.504534L645.070458 307.23362a3.242499 3.242499 0 0 1 3.029177 0l206.069353 119.076514a191.734094 191.734094 0 0 1-28.841177 345.795467v-242.248817a33.704925 33.704925 0 0 0-17.364436-28.457196z m85.75557-128.97467l-6.01569-3.626479-203.680143-118.692534a33.107623 33.107623 0 0 0-33.491603 0L401.456378 393.842478V294.306288a2.815855 2.815855 0 0 1 1.194605-2.602533l206.069353-118.905856a191.990081 191.990081 0 0 1 284.998609 198.816394z m-539.278804 176.417552l-86.182214-49.661434a3.413157 3.413157 0 0 1-1.62125-2.431875V259.236099a191.990081 191.990081 0 0 1 314.65041-147.320388l-6.058354 3.413157-203.850801 117.668587a33.918248 33.918248 0 0 0-16.767134 29.054499z m46.802915-100.901454l111.012931-63.996693 111.226253 63.996693v127.950723l-110.799609 63.996693-111.226253-63.996693z" p-id="7220"></path></svg>
|
After Width: | Height: | Size: 2.6 KiB |
BIN
client/public/imgs/home/openapi.png
Normal file
After Width: | Height: | Size: 177 KiB |
BIN
client/public/imgs/home/test.png
Normal file
After Width: | Height: | Size: 2.6 MiB |
BIN
client/public/imgs/home/videobgpc.png
Normal file
After Width: | Height: | Size: 455 KiB |
BIN
client/public/imgs/home/videobgphone.png
Normal file
After Width: | Height: | Size: 149 KiB |
@@ -43,9 +43,47 @@
|
||||
"upload error description": "Only upload multiple files or one folder at a time"
|
||||
},
|
||||
"home": {
|
||||
"AI Assistant": "AI Assistant",
|
||||
"AI Assistant Desc": "",
|
||||
"Advanced Settings": "",
|
||||
"Advanced Settings Desc": "",
|
||||
"Choice Debug": "Convenient Debugging",
|
||||
"Choice Debug Desc": "Search testing, reference modification, full conversation preview and many other debugging ways",
|
||||
"Choice Desc": "FastGPT follows the Apache License 2.0 open source protocol",
|
||||
"Choice Extension": "Infinite Extension",
|
||||
"Choice Extension Desc": "HTTP based extension, easy to achieve custom functions",
|
||||
"Choice Models": "Multiple Models",
|
||||
"Choice Models Desc": "",
|
||||
"Choice Open": "Open",
|
||||
"Choice Open Desc": "",
|
||||
"Choice QA": "QA Struceture",
|
||||
"Choice QA Desc": "The index is constructed with the structure of QA pairs, and ADAPTS to various scenarios such as Q&A and reading",
|
||||
"Choice Visual": "Visual workflow",
|
||||
"Choice Visual Desc": "Visualize modular operations, easily implement complex workflows, and make your AI no longer monolithic",
|
||||
"Community": "Community",
|
||||
"Dateset": "",
|
||||
"Dateset Desc": "",
|
||||
"Docs": "Docs",
|
||||
"FastGPT Ability": "FastGPT Ability",
|
||||
"FastGPT Desc": "FastGPT is a knowledgebase question answering system based on LLM large language model, which provides out-of-the-box data processing, model invocation and other capabilities. At the same time, workflow orchestration can be performed through Flow visualization to achieve complex Q&A scenarios!",
|
||||
"Features": "Features",
|
||||
"Footer Developer": "Developer",
|
||||
"Footer Docs": "Docs",
|
||||
"Footer FastGPT Cloud": "FastGPT Cloud",
|
||||
"Footer Feedback": "Feedback",
|
||||
"Footer Git": "Code",
|
||||
"Footer Product": "Product",
|
||||
"Footer Support": "Support",
|
||||
"Login": "Login",
|
||||
"Open": "",
|
||||
"OpenAPI": "OpenAPI",
|
||||
"OpenAPI Desc": "",
|
||||
"Quickly build AI question and answer library": "Quickly build AI question and answer library",
|
||||
"Start Now": "Start Now",
|
||||
"Visual AI orchestration": "Visual AI orchestration"
|
||||
"Visual AI orchestration": "Visual AI orchestration",
|
||||
"Why FastGPT": "",
|
||||
"desc": "",
|
||||
"slogan": ""
|
||||
},
|
||||
"navbar": {
|
||||
"Account": "Account",
|
||||
|
@@ -43,9 +43,47 @@
|
||||
"upload error description": "单次只支持上传多个文件或者一个文件夹"
|
||||
},
|
||||
"home": {
|
||||
"AI Assistant": "AI 客服",
|
||||
"AI Assistant Desc": "无论对内还是对外,AI 将 24 小时为您的用户提供服务",
|
||||
"Advanced Settings": "高级编排",
|
||||
"Advanced Settings Desc": "基于 Flow 的流程编排模式,让你的 AI 轻松实现数据库查询、IO 操作、联网通信等扩展能力",
|
||||
"Choice Debug": "调试便捷",
|
||||
"Choice Debug Desc": "拥有搜索测试、引用修改、完整对话预览等多种调试途径",
|
||||
"Choice Desc": "",
|
||||
"Choice Extension": "无限扩展",
|
||||
"Choice Extension Desc": "基于 HTTP 实现扩展,轻松实现定制功能",
|
||||
"Choice Models": "支持多种模型",
|
||||
"Choice Models Desc": "支持 GPT、Claude、文心一言等多模型",
|
||||
"Choice Open": "更开放",
|
||||
"Choice Open Desc": "FastGPT 遵循 Apache License 2.0 开源协议",
|
||||
"Choice QA": "独特的 QA 结构",
|
||||
"Choice QA Desc": "采用 QA 对的结构构建索引,适应问答、阅读等多种场景",
|
||||
"Choice Visual": "可视化工作流",
|
||||
"Choice Visual Desc": "可视化模块操作,轻松实现复杂工作流,让你的 AI 不再单一",
|
||||
"Community": "社区",
|
||||
"Dateset": "自动数据预处理",
|
||||
"Dateset Desc": "提供手动输入、直接分段、LLM 自动处理和 CSV 等多种数据导入途径",
|
||||
"Docs": "文档",
|
||||
"FastGPT Ability": "FastGPT 能力",
|
||||
"FastGPT Desc": "FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!",
|
||||
"Features": "特点",
|
||||
"Footer Developer": "开发者",
|
||||
"Footer Docs": "文档",
|
||||
"Footer FastGPT Cloud": "FastGPT 线上服务",
|
||||
"Footer Feedback": "反馈",
|
||||
"Footer Git": "源码",
|
||||
"Footer Product": "产品",
|
||||
"Footer Support": "支持",
|
||||
"Login": "登录",
|
||||
"Open": "",
|
||||
"OpenAPI": "OpenAPI",
|
||||
"OpenAPI Desc": "与 GPT API 一致的对外接口,助你轻松接入已有应用",
|
||||
"Quickly build AI question and answer library": "快速搭建 AI 问答系统",
|
||||
"Start Now": "立即开始",
|
||||
"Visual AI orchestration": "可视化 AI 编排"
|
||||
"Visual AI orchestration": "可视化 AI 编排",
|
||||
"Why FastGPT": "为什么选择 FastGPT",
|
||||
"desc": "基于 LLM 大模型的 AI 知识库问答平台",
|
||||
"slogan": "让 AI 更懂你的知识"
|
||||
},
|
||||
"navbar": {
|
||||
"Account": "账号",
|
||||
|
30
client/src/components/CommunityModal/index.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
import React from 'react';
|
||||
import { Button, ModalFooter, ModalBody } from '@chakra-ui/react';
|
||||
import MyModal from '../MyModal';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import Markdown from '../Markdown';
|
||||
|
||||
const md = `
|
||||
| 交流群 | 小助手 |
|
||||
| ----------------------- | -------------------- |
|
||||
|  |  |
|
||||
`;
|
||||
|
||||
const CommunityModal = ({ onClose }: { onClose: () => void }) => {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<MyModal isOpen={true} onClose={onClose} title={t('home.Community')}>
|
||||
<ModalBody textAlign={'center'}>
|
||||
<Markdown source={md} />
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} onClick={onClose}>
|
||||
关闭
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</MyModal>
|
||||
);
|
||||
};
|
||||
|
||||
export default CommunityModal;
|
1
client/src/components/Icon/icons/fill/play.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="1691412437336" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2312" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M512 14.8973037a497.1026963 497.1026963 0 1 0 497.1026963 497.1026963A497.1026963 497.1026963 0 0 0 512 14.8973037z m165.70089876 581.8863224l-207.12612345 124.27567408L346.29910124 796.45320912V255.16360691l125.38034629 75.39390894 207.12612347 124.27567407 118.47614261 70.97521873z" p-id="2313"></path></svg>
|
After Width: | Height: | Size: 642 B |
@@ -73,7 +73,8 @@ const map = {
|
||||
language_zh: require('./icons/language/zh.svg').default,
|
||||
outlink_share: require('./icons/outlink/share.svg').default,
|
||||
outlink_iframe: require('./icons/outlink/iframe.svg').default,
|
||||
addCircle: require('./icons/circle/add.svg').default
|
||||
addCircle: require('./icons/circle/add.svg').default,
|
||||
playFill: require('./icons/fill/play.svg').default
|
||||
};
|
||||
|
||||
export type IconName = keyof typeof map;
|
||||
|
@@ -1,27 +0,0 @@
|
||||
import React from 'react';
|
||||
import { Button, ModalFooter, ModalBody, Image } from '@chakra-ui/react';
|
||||
import MyModal from '../MyModal';
|
||||
|
||||
const WxConcat = ({ onClose }: { onClose: () => void }) => {
|
||||
return (
|
||||
<MyModal isOpen={true} onClose={onClose} title={'联系方式-wx'}>
|
||||
<ModalBody textAlign={'center'}>
|
||||
<Image
|
||||
style={{ margin: 'auto' }}
|
||||
src={'https://otnvvf-imgs.oss.laf.run/wx300.jpg'}
|
||||
width={'200px'}
|
||||
height={'200px'}
|
||||
alt=""
|
||||
/>
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} onClick={onClose}>
|
||||
关闭
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</MyModal>
|
||||
);
|
||||
};
|
||||
|
||||
export default WxConcat;
|
@@ -65,7 +65,6 @@ function App({ Component, pageProps }: AppProps) {
|
||||
/>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
</Head>
|
||||
<Script src="/js/particles.js"></Script>
|
||||
<Script src="/js/qrcode.min.js" strategy="lazyOnload"></Script>
|
||||
<Script src="/js/pdf.js" strategy="lazyOnload"></Script>
|
||||
<Script src="/js/html2pdf.bundle.min.js" strategy="lazyOnload"></Script>
|
||||
|
106
client/src/pages/components/Ability.tsx
Normal file
@@ -0,0 +1,106 @@
|
||||
import { Box, Image, BoxProps, Grid, useTheme } from '@chakra-ui/react';
|
||||
import React from 'react';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
|
||||
const Ability = () => {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation();
|
||||
|
||||
const CardStyles: BoxProps = {
|
||||
pt: 4,
|
||||
borderRadius: 'xl',
|
||||
overflow: 'hidden',
|
||||
border: theme.borders.base
|
||||
};
|
||||
const TitleStyles: BoxProps = {
|
||||
px: 4,
|
||||
fontSize: ['xl', '30px'],
|
||||
fontWeight: 'bold'
|
||||
};
|
||||
const DescStyles: BoxProps = {
|
||||
px: 4,
|
||||
mt: 2,
|
||||
mb: 5,
|
||||
fontSize: ['sm', 'lg'],
|
||||
whiteSpace: 'pre-wrap'
|
||||
};
|
||||
|
||||
return (
|
||||
<Box>
|
||||
<Box
|
||||
className="textlg"
|
||||
py={['30px', '60px']}
|
||||
textAlign={'center'}
|
||||
fontSize={['22px', '30px']}
|
||||
fontWeight={'bold'}
|
||||
>
|
||||
{t('home.FastGPT Ability')}
|
||||
</Box>
|
||||
<Grid px={[5, 0]} minH={'400px'} gridTemplateColumns={['1fr', `500px 1fr`]} gridGap={6}>
|
||||
<Box
|
||||
{...CardStyles}
|
||||
backgroundImage={'linear-gradient(to bottom right, #00A9A6 0%, #33BABB 100%)'}
|
||||
>
|
||||
<Box {...TitleStyles} color={'white'}>
|
||||
{t('home.AI Assistant')}
|
||||
</Box>
|
||||
<Box {...DescStyles} color={'rgba(255,255,255,0.9)'}>
|
||||
{t('home.AI Assistant Desc')}
|
||||
</Box>
|
||||
<Image
|
||||
src="/imgs/home/ai_assiatant.png"
|
||||
alt={''}
|
||||
w={'100%'}
|
||||
borderRadius={'lg'}
|
||||
transform={'translateX(20px)'}
|
||||
/>
|
||||
</Box>
|
||||
<Box
|
||||
{...CardStyles}
|
||||
pb={4}
|
||||
backgroundImage={'linear-gradient(120deg, #3370ff 0%, #4e83fd 100%)'}
|
||||
>
|
||||
<Box {...TitleStyles} color={'white'}>
|
||||
{t('home.Dateset')}
|
||||
</Box>
|
||||
<Box {...DescStyles} color={'rgba(255,255,255,0.9)'}>
|
||||
{t('home.Dateset Desc')}
|
||||
</Box>
|
||||
<Image
|
||||
src="/imgs/home/dataset_import.png"
|
||||
alt={''}
|
||||
w={'90%'}
|
||||
mx={'auto'}
|
||||
borderRadius={'lg'}
|
||||
/>
|
||||
</Box>
|
||||
</Grid>
|
||||
<Grid
|
||||
mt={6}
|
||||
px={[5, 0]}
|
||||
minH={'400px'}
|
||||
gridTemplateColumns={['1fr', `1fr 500px`]}
|
||||
gridGap={6}
|
||||
>
|
||||
<Box {...CardStyles} backgroundImage={'linear-gradient(to top, #6a85b6 0%, #bac8e0 100%)'}>
|
||||
<Box {...TitleStyles}>{t('home.Advanced Settings')}</Box>
|
||||
<Box {...DescStyles} fontSize={['sm', 'md']}>
|
||||
{t('home.Advanced Settings Desc')}
|
||||
</Box>
|
||||
<Image src="/imgs/home/advanced_settings.png" alt={''} w={'100%'} />
|
||||
</Box>
|
||||
<Box
|
||||
{...CardStyles}
|
||||
pb={4}
|
||||
backgroundImage={'linear-gradient(to right, #FDCBB1 0%, #FEE5D8 100%)'}
|
||||
>
|
||||
<Box {...TitleStyles}>{t('home.OpenAPI')}</Box>
|
||||
<Box {...DescStyles}>{t('home.OpenAPI Desc')}</Box>
|
||||
<Image src="/imgs/home/openapi.png" alt={''} w={'90%'} mx={'auto'} borderRadius={'lg'} />
|
||||
</Box>
|
||||
</Grid>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default Ability;
|
103
client/src/pages/components/Choice.tsx
Normal file
@@ -0,0 +1,103 @@
|
||||
import { Box, Image, Flex, Grid, useTheme } from '@chakra-ui/react';
|
||||
import React, { useRef } from 'react';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import MyTooltip from '@/components/MyTooltip';
|
||||
import MyIcon from '@/components/Icon';
|
||||
|
||||
const Choice = () => {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation();
|
||||
|
||||
const list = [
|
||||
{
|
||||
icon: '/imgs/home/icon_1.svg',
|
||||
title: t('home.Choice Open'),
|
||||
desc: t('home.Choice Open Desc'),
|
||||
tooltip: '前往 GitHub',
|
||||
onClick: () => window.open('https://github.com/labring/FastGPT', '_blank')
|
||||
},
|
||||
{
|
||||
icon: '/imgs/home/icon_2.svg',
|
||||
title: t('home.Choice QA'),
|
||||
desc: t('home.Choice QA Desc'),
|
||||
onClick: () => {}
|
||||
},
|
||||
{
|
||||
icon: '/imgs/home/icon_3.svg',
|
||||
title: t('home.Choice Visual'),
|
||||
desc: t('home.Choice Visual Desc'),
|
||||
onClick: () => {}
|
||||
},
|
||||
{
|
||||
icon: '/imgs/home/icon_4.svg',
|
||||
title: t('home.Choice Extension'),
|
||||
desc: t('home.Choice Extension Desc'),
|
||||
onClick: () => {}
|
||||
},
|
||||
{
|
||||
icon: '/imgs/home/icon_5.svg',
|
||||
title: t('home.Choice Debug'),
|
||||
desc: t('home.Choice Debug Desc'),
|
||||
onClick: () => {}
|
||||
},
|
||||
{
|
||||
icon: '/imgs/home/icon_6.svg',
|
||||
title: t('home.Choice Models'),
|
||||
desc: t('home.Choice Models Desc'),
|
||||
onClick: () => {}
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
<Box>
|
||||
<Box
|
||||
className="textlg"
|
||||
py={['30px', '60px']}
|
||||
textAlign={'center'}
|
||||
fontSize={['22px', '30px']}
|
||||
fontWeight={'bold'}
|
||||
>
|
||||
{t('home.Why FastGPT')}
|
||||
</Box>
|
||||
<Grid px={[5, 0]} gridTemplateColumns={['1fr', `1fr 1fr`, 'repeat(3,1fr)']} gridGap={6}>
|
||||
{list.map((item) => (
|
||||
<MyTooltip key={item.title} label={item.tooltip}>
|
||||
<Flex
|
||||
alignItems={'flex-start'}
|
||||
border={theme.borders.md}
|
||||
borderRadius={'lg'}
|
||||
p={'40px'}
|
||||
transition={'0.1s'}
|
||||
cursor={'default'}
|
||||
_hover={{
|
||||
bg: 'rgba(255,255,255,0.8)'
|
||||
}}
|
||||
onClick={item.onClick}
|
||||
>
|
||||
<Flex
|
||||
flex={'0 0 48px'}
|
||||
h={'48px'}
|
||||
alignItems={'center'}
|
||||
justifyContent={'center'}
|
||||
boxShadow={theme.shadows.base}
|
||||
borderRadius={'14px'}
|
||||
>
|
||||
<Image src={item.icon} w={'28px'} alt={''} />
|
||||
</Flex>
|
||||
<Box ml={5}>
|
||||
<Box fontSize={['lg', '2xl']} fontWeight={'bold'} color={'myGray.900'}>
|
||||
{item.title}
|
||||
</Box>
|
||||
<Box mt={1} fontSize={['md', 'lg']}>
|
||||
{item.desc}
|
||||
</Box>
|
||||
</Box>
|
||||
</Flex>
|
||||
</MyTooltip>
|
||||
))}
|
||||
</Grid>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default Choice;
|
123
client/src/pages/components/Footer.tsx
Normal file
@@ -0,0 +1,123 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import { Box, Flex, useDisclosure } from '@chakra-ui/react';
|
||||
import { feConfigs } from '@/store/static';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import Avatar from '@/components/Avatar';
|
||||
import { useRouter } from 'next/router';
|
||||
import CommunityModal from '@/components/CommunityModal';
|
||||
|
||||
const Footer = () => {
|
||||
const { t } = useTranslation();
|
||||
const router = useRouter();
|
||||
const { isOpen, onOpen, onClose } = useDisclosure();
|
||||
const list = useMemo(
|
||||
() => [
|
||||
{
|
||||
label: t('home.Footer Product'),
|
||||
child: [
|
||||
{
|
||||
label: t('home.Footer FastGPT Cloud'),
|
||||
onClick: () => {
|
||||
router.push('/app/list');
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Sealos',
|
||||
onClick: () => {
|
||||
window.open('https://github.com/labring/sealos', '_blank');
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Laf',
|
||||
onClick: () => {
|
||||
window.open('https://github.com/labring/laf', '_blank');
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: t('home.Footer Developer'),
|
||||
child: [
|
||||
{
|
||||
label: t('home.Footer Git'),
|
||||
onClick: () => {
|
||||
window.open('https://github.com/labring/FastGPT', '_blank');
|
||||
}
|
||||
},
|
||||
{
|
||||
label: t('home.Footer Docs'),
|
||||
onClick: () => {
|
||||
window.open('https://doc.fastgpt.run/docs/intro', '_blank');
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: t('home.Footer Support'),
|
||||
child: [
|
||||
{
|
||||
label: t('home.Footer Feedback'),
|
||||
onClick: () => {
|
||||
window.open('https://github.com/labring/FastGPT/issues', '_blank');
|
||||
}
|
||||
},
|
||||
{
|
||||
label: t('home.Community'),
|
||||
onClick: () => {
|
||||
onOpen();
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
[onOpen, t]
|
||||
);
|
||||
|
||||
return (
|
||||
<Box
|
||||
display={['block', 'flex']}
|
||||
px={[5, 0]}
|
||||
maxW={'1200px'}
|
||||
m={'auto'}
|
||||
py={['30px', '60px']}
|
||||
flexWrap={'wrap'}
|
||||
>
|
||||
<Box flex={1}>
|
||||
<Flex alignItems={'center'}>
|
||||
<Avatar src="/icon/logo.png" w={['24px', '30px']} />
|
||||
<Box
|
||||
className="textlg"
|
||||
fontSize={['xl', '2xl']}
|
||||
fontWeight={'bold'}
|
||||
ml={3}
|
||||
fontStyle={'italic'}
|
||||
>
|
||||
{feConfigs?.systemTitle}
|
||||
</Box>
|
||||
</Flex>
|
||||
<Box mt={5} fontSize={'sm'} color={'myGray.600'} maxW={'380px'} textAlign={'justify'}>
|
||||
{t('home.FastGPT Desc')}
|
||||
</Box>
|
||||
</Box>
|
||||
{list.map((item) => (
|
||||
<Box key={item.label} w={'200px'} mt={[5, 0]}>
|
||||
<Box color={'myGray.500'}>{item.label}</Box>
|
||||
{item.child.map((child) => (
|
||||
<Box
|
||||
key={child.label}
|
||||
mt={[2, 3]}
|
||||
cursor={'pointer'}
|
||||
_hover={{ textDecoration: 'underline' }}
|
||||
onClick={child.onClick}
|
||||
>
|
||||
{child.label}
|
||||
</Box>
|
||||
))}
|
||||
</Box>
|
||||
))}
|
||||
{isOpen && <CommunityModal onClose={onClose} />}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default Footer;
|
86
client/src/pages/components/Hero.tsx
Normal file
@@ -0,0 +1,86 @@
|
||||
import { Box, Flex, Button, Image } from '@chakra-ui/react';
|
||||
import React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { feConfigs } from '@/store/static';
|
||||
import { useGlobalStore } from '@/store/global';
|
||||
import MyIcon from '@/components/Icon';
|
||||
import { useRouter } from 'next/router';
|
||||
import { useToast } from '@/hooks/useToast';
|
||||
|
||||
const Hero = () => {
|
||||
const router = useRouter();
|
||||
const { toast } = useToast();
|
||||
const { t } = useTranslation();
|
||||
const { isPc, gitStar } = useGlobalStore();
|
||||
|
||||
return (
|
||||
<Flex flexDirection={'column'} pt={['24px', '50px']} alignItems={'center'}>
|
||||
<Box fontSize={['38px', '60px']} fontWeight={'bold'}>
|
||||
{t('home.slogan')}
|
||||
</Box>
|
||||
<Box fontSize={['xl', '3xl']} py={5} color={'myGray.600'} textAlign={'center'} maxW={'400px'}>
|
||||
{t('home.desc')}
|
||||
</Box>
|
||||
<Flex zIndex={1} flexDirection={['column', 'row']} mt={[5, 8]}>
|
||||
{feConfigs?.show_git && (
|
||||
<Button
|
||||
mr={[0, 5]}
|
||||
mb={[5, 0]}
|
||||
fontSize={['xl', '3xl']}
|
||||
h={'auto'}
|
||||
py={[2, 3]}
|
||||
variant={'base'}
|
||||
border={'2px solid'}
|
||||
borderColor={'myGray.800'}
|
||||
transition={'0.3s'}
|
||||
borderRadius={'xl'}
|
||||
_hover={{
|
||||
bg: 'myGray.800',
|
||||
color: 'white'
|
||||
}}
|
||||
leftIcon={<MyIcon name={'git'} w={'20px'} />}
|
||||
onClick={() => window.open('https://github.com/labring/FastGPT', '_blank')}
|
||||
>
|
||||
Stars {(gitStar / 1000).toFixed(1)}k
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
fontSize={['xl', '3xl']}
|
||||
h={['38px', 'auto']}
|
||||
borderRadius={'xl'}
|
||||
py={[2, 3]}
|
||||
w={'150px'}
|
||||
onClick={() => router.push(`/app/list`)}
|
||||
>
|
||||
{t('home.Start Now')}
|
||||
</Button>
|
||||
</Flex>
|
||||
<Box mt={['', '-50px']} position={'relative'}>
|
||||
<Image
|
||||
minH={['auto', '400px']}
|
||||
src={isPc ? '/imgs/home/videobgpc.png' : '/imgs/home/videobgphone.png'}
|
||||
mx={['-10%', 'auto']}
|
||||
maxW={['120%', '950px']}
|
||||
alt=""
|
||||
/>
|
||||
<MyIcon
|
||||
name={'playFill'}
|
||||
position={'absolute'}
|
||||
w={['30px', '40px']}
|
||||
cursor={'pointer'}
|
||||
left={'50%'}
|
||||
top={'50%'}
|
||||
color={'#363c42b8'}
|
||||
transform={['translate(-50%,5px)', 'translate(-50%,40px)']}
|
||||
onClick={() => {
|
||||
toast({
|
||||
title: '录制中~'
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export default Hero;
|
144
client/src/pages/components/Navbar.tsx
Normal file
@@ -0,0 +1,144 @@
|
||||
import React, { useEffect, useMemo, useState } from 'react';
|
||||
import { Flex, Box, type BoxProps, Button, useDisclosure } from '@chakra-ui/react';
|
||||
import { feConfigs } from '@/store/static';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useRouter } from 'next/router';
|
||||
import Avatar from '@/components/Avatar';
|
||||
import CommunityModal from '@/components/CommunityModal';
|
||||
import { useGlobalStore } from '@/store/global';
|
||||
import MyIcon from '@/components/Icon';
|
||||
|
||||
const Navbar = () => {
|
||||
const router = useRouter();
|
||||
const { t } = useTranslation();
|
||||
const [scrollTop, setScrollTop] = useState(0);
|
||||
const {
|
||||
isOpen: isOpenCommunity,
|
||||
onOpen: onOpenCommunity,
|
||||
onClose: onCloseCommunity
|
||||
} = useDisclosure();
|
||||
const { isOpen: isOpenMenu, onOpen: onOpenMenu, onClose: onCloseMenu } = useDisclosure();
|
||||
const { isPc } = useGlobalStore();
|
||||
const menuList = useMemo(
|
||||
() => [
|
||||
// { label: t('home.Features'), key: 'features', onClick: () => {} },
|
||||
{
|
||||
label: t('home.Community'),
|
||||
key: 'community',
|
||||
onClick: () => {
|
||||
onOpenCommunity();
|
||||
}
|
||||
},
|
||||
{
|
||||
label: t('home.Docs'),
|
||||
key: 'docs',
|
||||
onClick: () => {
|
||||
window.open('https://doc.fastgpt.run/docs/intro');
|
||||
}
|
||||
}
|
||||
],
|
||||
[onOpenCommunity, t]
|
||||
);
|
||||
const bgOpacity = useMemo(() => {
|
||||
const rate = scrollTop / 120;
|
||||
if (rate > 0.7) {
|
||||
return 0.7;
|
||||
}
|
||||
return rate;
|
||||
}, [scrollTop]);
|
||||
|
||||
const menuStyles: BoxProps = {
|
||||
mr: 4,
|
||||
px: 5,
|
||||
py: 2,
|
||||
cursor: 'pointer',
|
||||
transition: '0.5s',
|
||||
borderRadius: 'xl',
|
||||
fontSize: 'lg',
|
||||
_hover: {
|
||||
bg: 'myGray.100'
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const scrollListen = (e: any) => {
|
||||
setScrollTop(e?.target?.scrollTop);
|
||||
};
|
||||
const dom = document.getElementById('home');
|
||||
if (!dom) return;
|
||||
|
||||
dom.addEventListener('scroll', scrollListen);
|
||||
|
||||
return () => {
|
||||
dom.removeEventListener('scroll', scrollListen);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Box
|
||||
bg={`rgba(255,255,255,${bgOpacity})`}
|
||||
backdropFilter={'blur(24px)'}
|
||||
py={[3, 5]}
|
||||
px={5}
|
||||
transition={'0.4s ease'}
|
||||
h={isOpenMenu ? '100vh' : 'auto'}
|
||||
>
|
||||
<Flex maxW={'1000px'} m={'auto'} alignItems={'center'}>
|
||||
<Avatar src="/icon/logo.png" w={['30px', '38px']} />
|
||||
<Box
|
||||
className="textlg"
|
||||
fontSize={['3xl', '4xl']}
|
||||
fontWeight={'bold'}
|
||||
ml={3}
|
||||
fontStyle={'italic'}
|
||||
>
|
||||
{feConfigs?.systemTitle}
|
||||
</Box>
|
||||
<Box flex={1} />
|
||||
{isPc ? (
|
||||
<>
|
||||
{menuList.map((item) => (
|
||||
<Box key={item.key} {...menuStyles} onClick={item.onClick}>
|
||||
{item.label}
|
||||
</Box>
|
||||
))}
|
||||
<Box px={4} color={'myGray.500'}>
|
||||
|
|
||||
</Box>
|
||||
<Box {...menuStyles} onClick={() => router.push('/login')}>
|
||||
{t('home.Login')}
|
||||
</Box>
|
||||
<Button ml={4} h={'36px'} borderRadius={'3xl'} onClick={() => router.push('/app/list')}>
|
||||
{t('home.Start Now')}
|
||||
</Button>
|
||||
</>
|
||||
) : (
|
||||
<MyIcon
|
||||
name={isOpenMenu ? 'closeLight' : 'menu'}
|
||||
w={'20px'}
|
||||
onClick={() => (isOpenMenu ? onCloseMenu() : onOpenMenu())}
|
||||
/>
|
||||
)}
|
||||
</Flex>
|
||||
{isOpenMenu && !isPc && (
|
||||
<Box mt={'15vh'} ml={'10vw'}>
|
||||
{menuList.map((item) => (
|
||||
<Box key={item.key} mb={8} onClick={item.onClick}>
|
||||
{item.label}
|
||||
</Box>
|
||||
))}
|
||||
<Box bg={'myGray.500'} h={'1.5px'} w={'20px'} mb={8} />
|
||||
<Box mb={10} onClick={() => router.push('/login')}>
|
||||
{t('home.Login')}
|
||||
</Box>
|
||||
<Button h={'36px'} borderRadius={'3xl'} onClick={() => router.push('/app/list')}>
|
||||
{t('home.Start Now')}
|
||||
</Button>
|
||||
</Box>
|
||||
)}
|
||||
{isOpenCommunity && <CommunityModal onClose={onCloseCommunity} />}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default Navbar;
|
@@ -1,220 +1,31 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Card, Box, Link, Flex, Image, Button } from '@chakra-ui/react';
|
||||
import { useRouter } from 'next/router';
|
||||
import { useGlobalStore } from '@/store/global';
|
||||
import { feConfigs } from '@/store/static';
|
||||
import { serviceSideProps } from '@/utils/i18n';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import React, { useEffect } from 'react';
|
||||
import { Box } from '@chakra-ui/react';
|
||||
|
||||
import styles from './index.module.scss';
|
||||
import MyIcon from '@/components/Icon';
|
||||
import { serviceSideProps } from '@/utils/i18n';
|
||||
|
||||
import Navbar from './components/Navbar';
|
||||
import Hero from './components/Hero';
|
||||
import Ability from './components/Ability';
|
||||
import Choice from './components/Choice';
|
||||
import Footer from './components/Footer';
|
||||
|
||||
const Home = () => {
|
||||
const router = useRouter();
|
||||
const { t } = useTranslation();
|
||||
const { inviterId } = router.query as { inviterId: string };
|
||||
const { isPc, gitStar } = useGlobalStore();
|
||||
|
||||
useEffect(() => {
|
||||
if (inviterId) {
|
||||
localStorage.setItem('inviterId', inviterId);
|
||||
}
|
||||
}, [inviterId]);
|
||||
|
||||
/* 加载动画 */
|
||||
useEffect(() => {
|
||||
setTimeout(() => {
|
||||
try {
|
||||
window.particlesJS?.('particles-js', {
|
||||
particles: {
|
||||
number: {
|
||||
value: 40,
|
||||
density: {
|
||||
enable: true,
|
||||
value_area: 500
|
||||
}
|
||||
},
|
||||
color: {
|
||||
value: '#4e83fd'
|
||||
},
|
||||
shape: {
|
||||
type: 'circle',
|
||||
stroke: {
|
||||
width: 0,
|
||||
color: '#000000'
|
||||
},
|
||||
polygon: {
|
||||
nb_sides: 5
|
||||
}
|
||||
},
|
||||
opacity: {
|
||||
value: 0.5,
|
||||
random: false,
|
||||
anim: {
|
||||
enable: false,
|
||||
speed: 0.1,
|
||||
opacity_min: 0.1,
|
||||
sync: false
|
||||
}
|
||||
},
|
||||
size: {
|
||||
value: 3,
|
||||
random: true,
|
||||
anim: {
|
||||
enable: false,
|
||||
speed: 10,
|
||||
size_min: 0.1,
|
||||
sync: false
|
||||
}
|
||||
},
|
||||
line_linked: {
|
||||
enable: true,
|
||||
distance: 150,
|
||||
color: '#adceff',
|
||||
opacity: 0.4,
|
||||
width: 1
|
||||
},
|
||||
move: {
|
||||
enable: true,
|
||||
speed: 2,
|
||||
direction: 'none',
|
||||
random: true,
|
||||
straight: false,
|
||||
out_mode: 'out',
|
||||
bounce: false,
|
||||
attract: {
|
||||
enable: false,
|
||||
rotateX: 600,
|
||||
rotateY: 1200
|
||||
}
|
||||
}
|
||||
},
|
||||
interactivity: {
|
||||
detect_on: 'canvas',
|
||||
events: {
|
||||
onhover: {
|
||||
enable: true,
|
||||
mode: 'grab'
|
||||
},
|
||||
onclick: {
|
||||
enable: true,
|
||||
mode: 'push'
|
||||
},
|
||||
resize: true
|
||||
},
|
||||
modes: {
|
||||
grab: {
|
||||
distance: 140,
|
||||
line_linked: {
|
||||
opacity: 1
|
||||
}
|
||||
},
|
||||
bubble: {
|
||||
distance: 400,
|
||||
size: 40,
|
||||
duration: 2,
|
||||
opacity: 8,
|
||||
speed: 3
|
||||
},
|
||||
repulse: {
|
||||
distance: 200,
|
||||
duration: 0.4
|
||||
},
|
||||
push: {
|
||||
particles_nb: 4
|
||||
},
|
||||
remove: {
|
||||
particles_nb: 2
|
||||
}
|
||||
}
|
||||
},
|
||||
retina_detect: true
|
||||
});
|
||||
} catch (error) {}
|
||||
}, 500);
|
||||
}, [isPc]);
|
||||
|
||||
return (
|
||||
<Flex
|
||||
className={styles.home}
|
||||
position={'relative'}
|
||||
flexDirection={'column'}
|
||||
alignItems={'center'}
|
||||
h={'100%'}
|
||||
overflow={'overlay'}
|
||||
>
|
||||
<Box id={'particles-js'} position={'absolute'} top={0} left={0} right={0} bottom={0} />
|
||||
|
||||
<Flex
|
||||
flexDirection={'column'}
|
||||
alignItems={'center'}
|
||||
justifyContent={'center'}
|
||||
mt={'22vh'}
|
||||
position={'absolute'}
|
||||
userSelect={'none'}
|
||||
textAlign={'center'}
|
||||
>
|
||||
<Image src="/icon/logo2.png" w={['70px', '120px']} h={['70px', '120px']} alt={''}></Image>
|
||||
<Box
|
||||
className={styles.textlg}
|
||||
fontWeight={'bold'}
|
||||
fontSize={['40px', '70px']}
|
||||
letterSpacing={'5px'}
|
||||
>
|
||||
{feConfigs?.systemTitle || 'AI知识库'}
|
||||
</Box>
|
||||
<Box className={styles.textlg} fontWeight={'bold'} fontSize={['30px', '50px']}>
|
||||
{t('home.Visual AI orchestration')}
|
||||
</Box>
|
||||
<Box className={styles.textlg} fontWeight={'bold'} fontSize={['30px', '50px']}>
|
||||
{t('home.Quickly build AI question and answer library')}
|
||||
</Box>
|
||||
|
||||
<Flex flexDirection={['column', 'row']} my={5}>
|
||||
{feConfigs?.show_git && (
|
||||
<Button
|
||||
mr={[0, 5]}
|
||||
mb={[5, 0]}
|
||||
fontSize={['xl', '3xl']}
|
||||
h={'auto'}
|
||||
py={[2, 3]}
|
||||
variant={'base'}
|
||||
border={'2px solid'}
|
||||
borderColor={'myGray.800'}
|
||||
transition={'0.3s'}
|
||||
_hover={{
|
||||
bg: 'myGray.800',
|
||||
color: 'white'
|
||||
}}
|
||||
leftIcon={<MyIcon name={'git'} w={'20px'} />}
|
||||
onClick={() => window.open('https://github.com/labring/FastGPT', '_blank')}
|
||||
>
|
||||
Stars {(gitStar / 1000).toFixed(1)}k
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
fontSize={['xl', '3xl']}
|
||||
h={'auto'}
|
||||
py={[2, 3]}
|
||||
onClick={() => router.push(`/app/list`)}
|
||||
>
|
||||
{t('home.Start Now')}
|
||||
</Button>
|
||||
</Flex>
|
||||
</Flex>
|
||||
|
||||
<Box w={'100%'} mt={'100vh'} px={[5, 10]} pb={[5, 10]}>
|
||||
<Card p={5} mt={4} textAlign={'center'}>
|
||||
{feConfigs?.beianText && (
|
||||
<Link href="https://beian.miit.gov.cn/" target="_blank">
|
||||
{feConfigs.beianText}
|
||||
</Link>
|
||||
)}
|
||||
|
||||
{feConfigs?.authorText && <Box>{feConfigs?.authorText}</Box>}
|
||||
</Card>
|
||||
<Box id="home" bg={'myWhite.600'} h={'100vh'} overflowY={'auto'} overflowX={'hidden'}>
|
||||
<Box position={'fixed'} zIndex={10} top={0} left={0} right={0}>
|
||||
<Navbar />
|
||||
</Box>
|
||||
</Flex>
|
||||
<Box maxW={'1200px'} pt={'70px'} m={'auto'}>
|
||||
<Hero />
|
||||
<Ability />
|
||||
<Box my={[4, 6]}>
|
||||
<Choice />
|
||||
</Box>
|
||||
</Box>
|
||||
<Box bg={'white'}>
|
||||
<Footer />
|
||||
</Box>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
|
@@ -12,7 +12,7 @@ import dynamic from 'next/dynamic';
|
||||
import { serviceSideProps } from '@/utils/i18n';
|
||||
import { setToken } from '@/utils/user';
|
||||
import { feConfigs } from '@/store/static';
|
||||
import WxConcat from '@/components/WxConcat';
|
||||
import CommunityModal from '@/components/CommunityModal';
|
||||
const RegisterForm = dynamic(() => import('./components/RegisterForm'));
|
||||
const ForgetPasswordForm = dynamic(() => import('./components/ForgetPasswordForm'));
|
||||
|
||||
@@ -115,7 +115,7 @@ const Login = () => {
|
||||
</Box>
|
||||
</Flex>
|
||||
|
||||
{isOpen && <WxConcat onClose={onClose} />}
|
||||
{isOpen && <CommunityModal onClose={onClose} />}
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
@@ -8,14 +8,15 @@ import { setToken } from '@/utils/user';
|
||||
import { gitLogin } from '@/api/user';
|
||||
import { useToast } from '@/hooks/useToast';
|
||||
import Loading from '@/components/Loading';
|
||||
import { serviceSideProps } from '@/utils/i18n';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
|
||||
const provider = () => {
|
||||
const provider = ({ code }: { code: string }) => {
|
||||
const { loginStore } = useGlobalStore();
|
||||
const { setLastChatId, setLastChatAppId } = useChatStore();
|
||||
const { setUserInfo } = useUserStore();
|
||||
const router = useRouter();
|
||||
const { toast } = useToast();
|
||||
const { code } = router.query as { code?: string };
|
||||
|
||||
const loginSuccess = useCallback(
|
||||
(res: ResLogin) => {
|
||||
@@ -64,11 +65,21 @@ const provider = () => {
|
||||
}
|
||||
}, [code, loginStore, loginSuccess]);
|
||||
|
||||
useEffect(() => {
|
||||
useQuery(['init', code], () => {
|
||||
authCode();
|
||||
}, [authCode]);
|
||||
return null;
|
||||
});
|
||||
|
||||
return <Loading />;
|
||||
};
|
||||
|
||||
export async function getServerSideProps(content: any) {
|
||||
return {
|
||||
props: {
|
||||
code: content?.query?.code,
|
||||
...(await serviceSideProps(content))
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export default provider;
|
||||
|