|
1 | 1 | <template> |
2 | 2 | <div |
3 | | - class="my-8 md:my-0 md:border-none py-6"> |
| 3 | + class="flex flex-col gap-6 my-8 md:my-0 md:border-none py-6"> |
4 | 4 | <!-- 展示英文名 --> |
5 | | - <div class="flex xl:flex-col gap-8"> |
6 | | - <div class="w-[380px] sm:w-full flex flex-col"> |
| 5 | + <div class="flex lg:flex-col gap-8 lg:gap-1"> |
| 6 | + <div class="w-[380px] lg:w-[512px] sm:w-full flex flex-col"> |
7 | 7 | <div class="text-sm text-gray-700 leading-5 font-medium"> |
8 | 8 | {{ $t('models.modelName') }} |
9 | 9 | </div> |
|
22 | 22 | </div> |
23 | 23 | </div> |
24 | 24 |
|
25 | | - <el-divider /> |
26 | | - |
27 | 25 | <!-- 更新模型别名 --> |
28 | | - <div class="flex xl:flex-col gap-8"> |
29 | | - <div class="w-[380px] sm:w-full flex flex-col"> |
| 26 | + <div class="flex lg:flex-col gap-8 lg:gap-1"> |
| 27 | + <div class="w-[380px] lg:w-[512px] sm:w-full flex flex-col"> |
30 | 28 | <div class="text-sm text-gray-700 leading-5 font-medium"> |
31 | 29 | {{ $t('models.modelNickName') }} |
32 | 30 | </div> |
|
41 | 39 | size="large" |
42 | 40 | class="!w-[512px] sm:!w-full" /> |
43 | 41 | <CsgButton |
| 42 | + v-if="hasNicknameChanged" |
44 | 43 | @click="updateNickname" |
45 | 44 | class="btn btn-secondary-gray btn-sm w-fit" |
46 | 45 | :name="$t('all.update')" |
47 | 46 | /> |
48 | 47 | </div> |
49 | 48 | </div> |
50 | 49 |
|
51 | | - <el-divider /> |
52 | | - |
53 | 50 | <!-- 更新模型简介 --> |
54 | | - <div class="flex xl:flex-col gap-8"> |
55 | | - <div class="w-[380px] sm:w-full flex flex-col"> |
| 51 | + <div class="flex lg:flex-col gap-8 lg:gap-1"> |
| 52 | + <div class="w-[380px] lg:w-[512px] sm:w-full flex flex-col"> |
56 | 53 | <div class="text-sm text-gray-700 leading-5 font-medium"> |
57 | 54 | {{ $t('models.modelDesc') }} |
58 | 55 | </div> |
|
68 | 65 | type="textarea" |
69 | 66 | class="!w-[512px] sm:!w-full" /> |
70 | 67 | <CsgButton |
| 68 | + v-if="hasDescChanged" |
71 | 69 | @click="updateModelDesc" |
72 | 70 | class="btn btn-secondary-gray btn-sm w-fit" |
73 | 71 | :name="$t('all.update')" |
|
78 | 76 | <el-divider /> |
79 | 77 |
|
80 | 78 | <!-- 模型标签 --> |
81 | | - <div class="flex xl:flex-col gap-8"> |
82 | | - <div class="w-[380px] sm:w-full flex flex-col"> |
| 79 | + <div class="flex lg:flex-col gap-8 lg:gap-1"> |
| 80 | + <div class="w-[380px] lg:w-[512px] sm:w-full flex flex-col"> |
83 | 81 | <div class="text-sm text-gray-700 leading-5 font-medium"> |
84 | 82 | {{ $t('models.modelTag') }} |
85 | 83 | </div> |
|
125 | 123 | </p> |
126 | 124 | </div> |
127 | 125 | <CsgButton |
| 126 | + v-if="hasTagsChanged" |
128 | 127 | @click="updateTags" |
129 | 128 | class="btn btn-secondary-gray btn-sm w-fit" |
130 | 129 | :name="$t('all.update')" |
|
135 | 134 | </div> |
136 | 135 | </div> |
137 | 136 |
|
138 | | - <el-divider /> |
139 | | - |
140 | 137 | <!-- 行业标签 --> |
141 | | - <div class="flex xl:flex-col gap-8"> |
142 | | - <div class="w-[380px] sm:w-full flex flex-col"> |
| 138 | + <div class="flex lg:flex-col gap-8 lg:gap-1"> |
| 139 | + <div class="w-[380px] lg:w-[512px] sm:w-full flex flex-col"> |
143 | 140 | <div class="text-sm text-gray-700 leading-5 font-medium"> |
144 | 141 | {{ $t('models.modelIndustryTag') }} |
145 | 142 | </div> |
|
189 | 186 | </p> |
190 | 187 | </div> |
191 | 188 | <CsgButton |
| 189 | + v-if="hasIndustryTagsChanged" |
192 | 190 | @click="updateIndustryTags" |
193 | 191 | class="btn btn-secondary-gray btn-sm w-fit" |
194 | 192 | :name="$t('all.update')" |
|
202 | 200 | <el-divider /> |
203 | 201 |
|
204 | 202 | <!-- 修改可见性 --> |
205 | | - <div class="flex xl:flex-col gap-8"> |
206 | | - <div class="w-[380px] sm:w-full flex flex-col"> |
| 203 | + <div class="flex lg:flex-col gap-8 lg:gap-1"> |
| 204 | + <div class="w-[380px] lg:w-[512px] sm:w-full flex flex-col"> |
207 | 205 | <div class="text-sm text-gray-700 leading-5 font-medium"> |
208 | 206 | {{ $t('models.edit.changeVisibility') }} |
209 | 207 | </div> |
|
240 | 238 | </div> |
241 | 239 | </div> |
242 | 240 |
|
243 | | - <el-divider /> |
244 | 241 |
|
245 | 242 | <!-- 删除模型 --> |
246 | | - <div class="flex xl:flex-col gap-8"> |
247 | | - <div class="w-[380px] sm:w-full flex flex-col gap-1.5"> |
| 243 | + <div class="flex lg:flex-col gap-8 lg:gap-1"> |
| 244 | + <div class="w-[380px] lg:w-[512px] sm:w-full flex flex-col gap-1.5"> |
248 | 245 | <div class="text-sm text-gray-700 leading-5 font-medium"> |
249 | 246 | {{ $t('models.edit.delModel') }} |
250 | 247 | </div> |
|
324 | 321 | ], |
325 | 322 | isUpdatingTags: false, |
326 | 323 | isUpdatingIndustryTags: false, |
| 324 | + originalModelNickname: this.modelNickname || '', |
| 325 | + originalModelDesc: this.modelDesc || '', |
| 326 | + originalTags: [], |
| 327 | + originalIndustryTags: [], |
327 | 328 | } |
328 | 329 | }, |
329 | 330 | computed: { |
330 | 331 | ...mapState(useRepoDetailStore, ['isPrivate']), |
331 | 332 | ...mapWritableState(useRepoDetailStore, ['privateVisibility']), |
| 333 | + hasNicknameChanged() { |
| 334 | + return this.theModelNickname.trim() !== this.originalModelNickname.trim() |
| 335 | + }, |
| 336 | + hasDescChanged() { |
| 337 | + return this.theModelDesc.trim() !== this.originalModelDesc.trim() |
| 338 | + }, |
| 339 | + hasTagsChanged() { |
| 340 | + if (this.originalTags.length !== this.selectedTags.length) return true |
| 341 | + const originalTagIds = this.originalTags.map(tag => tag.uid).sort() |
| 342 | + const currentTagIds = this.selectedTags.map(tag => tag.uid).sort() |
| 343 | + return JSON.stringify(originalTagIds) !== JSON.stringify(currentTagIds) |
| 344 | + }, |
| 345 | + hasIndustryTagsChanged() { |
| 346 | + if (this.originalIndustryTags.length !== this.selectedIndustryTags.length) return true |
| 347 | + const originalTagIds = this.originalIndustryTags.map(tag => tag.uid).sort() |
| 348 | + const currentTagIds = this.selectedIndustryTags.map(tag => tag.uid).sort() |
| 349 | + return JSON.stringify(originalTagIds) !== JSON.stringify(currentTagIds) |
| 350 | + }, |
332 | 351 | visibilityName: { |
333 | 352 | get() { |
334 | 353 | return !!this.privateVisibility ? 'Private' : 'Public' |
|
408 | 427 | return tag |
409 | 428 | }) |
410 | 429 | ] |
| 430 | + // Store original values for comparison |
| 431 | + if (this.originalTags.length === 0) { |
| 432 | + this.originalTags = JSON.parse(JSON.stringify(this.selectedTags)) |
| 433 | + } |
| 434 | + if (this.originalIndustryTags.length === 0) { |
| 435 | + this.originalIndustryTags = JSON.parse(JSON.stringify(this.selectedIndustryTags)) |
| 436 | + } |
411 | 437 | }, |
412 | 438 | clickDelete() { |
413 | 439 | if (this.delDesc === this.modelPath) { |
|
0 commit comments