From 89046fa31fbfec5a160c4a924589c24e40aee882 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Fri, 14 Mar 2025 03:29:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AE=BE=E7=BD=AE=E7=9A=84?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/assets/providers/siliconflow.png | Bin 29089 -> 2179 bytes web/src/views/SettingView.vue | 203 ++++++++++++++++------- 2 files changed, 141 insertions(+), 62 deletions(-) diff --git a/web/src/assets/providers/siliconflow.png b/web/src/assets/providers/siliconflow.png index f32fc6ebf84f0a60fabd3e0a42f27bded426931f..d54921c67bc7a161d2ddef926cba4bd29e9a57df 100644 GIT binary patch literal 2179 zcmV-}2z>X6P)Px#19L)2R0s$N+u={(0000WV@Og>004R>004l5008;` z004mK004C`008P>0026e000+ooVrmw00042P)t-sgIM;Ka`&i-__dt+!K?bv!290P z{NUC6@9O^d^#1?<|MBhq=H30!!2GkB`H*V&iD34kg7~?i`qIPv>f-(V{Quz9{i%%k zg;`rgz0uaxyh+ z^6mcB#{83Q_p+Dyu95l6xclPR{qXAko_zSRmidcf_Q$jPjAi%r^8V=G{jHJt#;)hxwRw z_~hIDrib{biundD!9M^129QZaK~#90?Vame8b=g|p=yicjf+dST8NYs4AHJMqOB&T zctMn0wb7bhq^9X5ZPWJu|58vB5!vN8yJzQ&KJ$Le^Wbyd%50$mrPk1b27{@kBB;X?2I+Mfzi#J5EpRPo}2(Ih^xphC5hS zvbR!Kt|KpI;@lDUB==cf#-h#SZSJ72kRAA3)}l=z${qM+in9ej8ZGYVv?ke-)SYpe zyWG)VFc+r;Vu9PC#l+pf8bUZlZjDI7?_PD8ac++! z_%70qGOvdHC5?s@rZ1aYB;l5CXXDY zMs0yF!#GA}u{~4gT8$QQKW|x^shy=t;u5U!20m&&`B zIg@VQR3tP;bX|=$Rovq-|3QHV>#zsUS67rLu*XyGP`!DEdgyYv>Be)=V~RV_evD!s zdwSRWw7{MsPJ=tnek@`OqW6Z?rVe@RGrtZ3%t9i%?^rETh(}HT1&Qn-A~W1k0zef& zI=?Eu1G=)fg9KPXM3_r4Afkv!i91Sw1R}y%zyOm$MD+c3d%+SSqGigY3rK`JNCYFI z8>O2fGH66J!-z1l@@@Ua;3=gSndrgUKVCDD=y-Ly`!r`{^{{eqokYHyOC7m}`10j7 z5y^hP7QE{~G%yZA)0kg&UyD#Eq^C0U8Oe=%)U}qF%nv`3YRpTX3=-n(&}EN`hb*h{ zj&-Wip!x`>MhoW_g+`IKz}+ABgL@>nm*W&G@S6O@dUsrq57y*rLrG~Rj0Sn46rr57 zA_8=e+`hvdd?y9pj}yH-{4a@a9)7zO;^0BELVOhk+VoZWf$`O2b;uoc5B&5`!zCpu zS(W!_khif=uqW+dPjkoIlbEy!cI>a5Nm-95L53j=(y}6H?ucDTNqS&~F$^5bd4$j( zMMP6h1Uhx%;7INpi5+a9Oo;p}w;<9r`pS@OM5JxUAw;q>w88;)e76#aU5Tfich9-Ukpst%POg%o@Td$J80w#1c{K6&@opBzty=g{VrbU_hR zICje3(vDOI)rq$lm69TnHqMB zm6M?Qm-0c*W;oxWgW$;p-QMM_8 z-UoTelSsk#i&Si^d;I~ZS?n-;5vbnJ>n4HbQAuW~{IGz;@w@xyu@i}U_#)7MsO7#S z1IXw5?0Y0YO>6FzQxn*veg(~9(7h_eAH6@F#SXQ%!}o|pz@%Z%+ZCO*{6>Yy8!Q%a zc=hTkLf;OBqON>+l4^Rs>ytS+)u?0w<`x=_aF#o3);I9vw~A~~i+wmCVXeMiY$wnT znkAXi71>jNpFoeq4u)g0qTDG;0lRr%NL5SEc{@>FUkg2JP5ZIeqWUb z^{)tYqi{yeZkQf5mD2^nEIac`fRlqCh)UyeA`u4RHMl7rtF;x@#`UM_DNfi~pghVa zyTrpe{r^j~M@aX3jpK(*WnY336l8&}lBF*QoZ;|j?OZitk4>(*bAQwB!3Dkvlcc}s z!ZnKj6vE~ti{(at58c-FjMan8#A5$NMj8|5>*|c-;CokIkMWX~paspbx7-Tnybac| zTh?cydVI#ehIOpf#OS);0X3UEzYye3@s%G9XI87_IHUQGw8vvj=XY1+%HPvWKf(xL z*Wp#M)|%YWdea<34nqo4nqE|$#83K63d^Vd)$kVYN&LU6%lBYsdM9yREY2xrlGSua z&dAv=KOfk=21C?cC^j0o#BPK8XPOKKgTY`h7z~C!{13Ldm@(>K*<%0z002ovPDHLk FV1jZ9fg=C_ literal 29089 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配置文件也可以在 saves/config/base.yaml 中修改

@@ -121,12 +118,12 @@ > - +
{{ item.api_base }}
-
-

{{ modelNames[item].name }}

- +
+ 模型图标 +
+
+

{{ modelNames[item].name }}

+ + 更多模型 + +
- 需配置 {{ key }} + 需配置{{ key }}
@@ -212,6 +231,8 @@ import { DeleteOutlined, EditOutlined, InfoCircleOutlined, + DownOutlined, + UpOutlined, } from '@ant-design/icons-vue'; import HeaderComponent from '@/components/HeaderComponent.vue'; import TableConfigComponent from '@/components/TableConfigComponent.vue'; @@ -228,7 +249,7 @@ const isNeedRestart = ref(false) const customModel = reactive({ modelTitle: '添加自定义模型', visible: false, - custom_id: '', // Add this line + custom_id: '', name: '', api_key: '', api_base: '', @@ -249,6 +270,9 @@ const notModelKeys = computed(() => { return Object.keys(modelStatus.value || {}).filter(key => !modelStatus.value?.[key]) }) +// 模型展开状态管理 +const expandedModels = reactive({}) + const generateRandomHash = (length) => { let chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; let hash = ''; @@ -298,49 +322,35 @@ const handleChange = (key, e) => { configStore.setConfigValue(key, e) } -const handleAddCustomModel = async () => { +const handleAddOrEditCustomModel = async () => { if (!customModel.name || !customModel.api_base) { - message.error('请填写完整模型信息') + message.error('请填写完整的模型名称和API Base信息。') return } - if (!configStore.config.custom_models) { - configStore.config.custom_models = [] - } - + let custom_models = configStore.config.custom_models || []; const model_info = { - custom_id: customModel.custom_id, + custom_id: customModel.custom_id || `${customModel.name}-${generateRandomHash(4)}`, name: customModel.name, api_key: customModel.api_key, api_base: customModel.api_base, } - if (customModel.edit_type == 'add') { - if (configStore.config.custom_models.find(item => item.custom_id == customModel.custom_id)) { - message.error('模型ID已存在') + if (customModel.edit_type === 'add') { + if (custom_models.find(item => item.custom_id === customModel.custom_id)) { + message.error('模型ID已存在') return } - const modelHash = generateRandomHash(4) - model_info.custom_id = `${customModel.name}-${modelHash}` - configStore.config.custom_models.push(model_info) + custom_models.push(model_info) } else { - configStore.config.custom_models = configStore.config.custom_models.map(item => { - if (item.custom_id == customModel.custom_id) { - if (item.name != customModel.name) { - const modelHash = generateRandomHash(4) - model_info.custom_id = `${customModel.name}-${modelHash}` - configStore.setConfigValue('model_name', model_info.custom_id) - } - return model_info - } - return item - }) + // 如果 custom_id 相同,则更新 + custom_models = custom_models.map(item => item.custom_id === customModel.custom_id ? model_info : item); } - customModel.visible = false - await configStore.setConfigValue('custom_models', configStore.config.custom_models) - message.success('添加自定义模型成功') + customModel.visible = false; + await configStore.setConfigValue('custom_models', custom_models); + message.success(customModel.edit_type === 'add' ? '模型添加成功' : '模型修改成功'); } const handleDeleteCustomModel = (custom_id) => { @@ -348,21 +358,32 @@ const handleDeleteCustomModel = (custom_id) => { configStore.setConfigValue('custom_models', updatedModels); } -const handleEditCustomModel = (item) => { +const prepareToEditCustomModel = (item) => { customModel.modelTitle = '编辑自定义模型' customModel.custom_id = item.custom_id + customModel.visible = true + customModel.edit_type = 'edit' customModel.name = item.name customModel.api_key = item.api_key customModel.api_base = item.api_base - customModel.visible = true - customModel.edit_type = 'edit' } -const handleCancelCustomModel = () => { +const prepareToAddCustomModel = () => { + customModel.modelTitle = '添加自定义模型' + customModel.edit_type = 'add' + customModel.visible = true + clearCustomModel() +} + +const clearCustomModel = () => { customModel.custom_id = '' customModel.name = '' customModel.api_key = '' customModel.api_base = '' +} + +const handleCancelCustomModel = () => { + clearCustomModel() customModel.visible = false } @@ -496,17 +517,31 @@ const sendRestart = () => { padding: 12px; .card-header { display: flex; - align-items: center; + align-items: flex-start; gap: 10px; + .model-title-container { + display: flex; + flex-direction: column; + flex: 1; + } + + .model-url { + font-size: 12px; + width: fit-content; + color: var(--gray-500); + } + .model-icon { - width: 24px; - height: 24px; + width: 40px; + height: 40px; // 灰度 filter: grayscale(100%); img { width: 100%; height: 100%; + border-radius: 4px; + border: 1px solid var(--gray-300); } &.available { @@ -514,10 +549,9 @@ const sendRestart = () => { } } - h3 { margin: 0; - font-size: 1rem; + font-size: 0.9rem; font-weight: bold; } @@ -546,12 +580,53 @@ const sendRestart = () => { } .missing-keys { + margin-top: 4px; color: var(--gray-600); + font-size: 12px; & > span { - margin-left: 10px; + margin-left: 6px; user-select: all; + background-color: var(--gray-100); + padding: 2px 6px; + border-radius: 4px; + color: var(--gray-800); } } + + .expand-button { + margin-left: auto; + height: 32px; + width: 32px; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + cursor: pointer; + color: var(--gray-500); + + &:hover { + background-color: var(--gray-100); + } + + .icon-wrapper { + display: inline-flex; + transition: transform 0.5s ease; + + &.rotated { + transform: rotate(180deg); + } + } + } + } + + .card-body-wrapper { + max-height: 0; + overflow: hidden; + transition: max-height 0.5s ease-in-out; + + &.expanded { + max-height: 500px; /* 设置一个足够大的值 */ + } } .card-body { @@ -606,7 +681,7 @@ const sendRestart = () => { gap: 10px; .card-models__header { width: 100%; - height: 32px; + height: 24px; display: flex; justify-content: flex-start; align-items: center; @@ -631,6 +706,10 @@ const sendRestart = () => { .api_base { font-size: 12px; color: var(--gray-600); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; } &:hover {