seeder-st2110-components 1.2.5 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +1 -0
- package/dist/index.esm.css +1 -0
- package/dist/index.esm.js +478 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +476 -5
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
package/dist/index.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.preset-management .w-full{width:100%}.preset-management .h-full{height:100%}.preset-management .h-auto{height:auto}.preset-management .p-0{padding:0}.preset-management .p-4{padding:16px}.preset-management .p-6{padding:24px}.preset-management .p-8{padding:32px}.preset-management .block{display:block}.preset-management .mx-auto{margin-left:auto;margin-right:auto}.preset-management .text-gray-400{color:#9ca3af}.preset-management .text-text-normal{color:#bfbfbf}.preset-management .grid{display:grid}.preset-management .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.preset-management .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.preset-management .ant-modal .ant-modal-content{padding:0}.preset-management .ant-modal-header{padding-block-start:24px;padding-inline:24px}.preset-management .ant-spin-nested-loading{margin-block-start:0}.preset-management .left-list-wrapper{display:flex;flex-direction:column;position:relative}.preset-management .left-list-wrapper:after{background-color:rgba(0,0,0,.3);bottom:0;content:"";display:block;position:absolute;right:0;top:0;width:1px}.preset-management .left-list-wrapper .list-container{flex:1;overflow-y:auto}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar-track-piece{background:#282828;box-shadow:0 1px 1px 0 #282828}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar{width:5px}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar-thumb{background:#141414;border-radius:2em;box-shadow:0 1px 1px 0 #282828}.preset-management .left-list-wrapper .list-header{color:hsla(0,0%,100%,.75);font-weight:500;padding-block:4px;padding-inline:24px}.preset-management .left-list-wrapper .list-item{background-color:transparent;cursor:pointer;transition-duration:.15s;transition-property:background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.preset-management .left-list-wrapper .list-item.selected{background-color:hsla(0,0%,100%,.12)}.preset-management .submit-btn-wrapper{bottom:0;left:0;margin-block-start:0;padding:16px 24px;position:absolute;right:0;text-align:right}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.preset-management .w-full{width:100%}.preset-management .h-full{height:100%}.preset-management .h-auto{height:auto}.preset-management .p-0{padding:0}.preset-management .p-4{padding:16px}.preset-management .p-6{padding:24px}.preset-management .p-8{padding:32px}.preset-management .block{display:block}.preset-management .mx-auto{margin-left:auto;margin-right:auto}.preset-management .text-gray-400{color:#9ca3af}.preset-management .text-text-normal{color:#bfbfbf}.preset-management .grid{display:grid}.preset-management .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.preset-management .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.preset-management .ant-modal .ant-modal-content{padding:0}.preset-management .ant-modal-header{padding-block-start:24px;padding-inline:24px}.preset-management .ant-spin-nested-loading{margin-block-start:0}.preset-management .left-list-wrapper{display:flex;flex-direction:column;position:relative}.preset-management .left-list-wrapper:after{background-color:rgba(0,0,0,.3);bottom:0;content:"";display:block;position:absolute;right:0;top:0;width:1px}.preset-management .left-list-wrapper .list-container{flex:1;overflow-y:auto}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar-track-piece{background:#282828;box-shadow:0 1px 1px 0 #282828}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar{width:5px}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar-thumb{background:#141414;border-radius:2em;box-shadow:0 1px 1px 0 #282828}.preset-management .left-list-wrapper .list-header{color:hsla(0,0%,100%,.75);font-weight:500;padding-block:4px;padding-inline:24px}.preset-management .left-list-wrapper .list-item{background-color:transparent;cursor:pointer;transition-duration:.15s;transition-property:background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.preset-management .left-list-wrapper .list-item.selected{background-color:hsla(0,0%,100%,.12)}.preset-management .submit-btn-wrapper{bottom:0;left:0;margin-block-start:0;padding:16px 24px;position:absolute;right:0;text-align:right}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useState, useCallback, useEffect, memo, useMemo, useRef, forwardRef, useContext, createContext } from 'react';
|
|
2
2
|
import { useWebSocket, useInterval } from 'ahooks';
|
|
3
|
-
import { Tooltip, Space, Flex, Divider, App, Modal, Form, Input, Alert, message, Dropdown, Spin, Popover, Button, Popconfirm, Typography, Empty, ConfigProvider, Tree, InputNumber, Badge, Switch, Select } from 'antd';
|
|
3
|
+
import { Tooltip, Space, Flex, Divider, App, Modal, Form, Input, Alert, message, Dropdown, Spin, Popover, Button, Popconfirm, Typography, Empty, ConfigProvider, Tree, InputNumber, Badge, Switch, Select, List, Checkbox, Row, Col } from 'antd';
|
|
4
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
-
import { LoadingOutlined, ExclamationCircleFilled, FolderOpenOutlined, FolderOutlined } from '@ant-design/icons';
|
|
5
|
+
import { LoadingOutlined, ExclamationCircleFilled, FolderOpenOutlined, FolderOutlined, PlusOutlined } from '@ant-design/icons';
|
|
6
6
|
import axios from 'axios';
|
|
7
7
|
|
|
8
8
|
const useHardwareWebSocket = socketUrl => {
|
|
@@ -1222,12 +1222,12 @@ const useDirectoryTree = _ref => {
|
|
|
1222
1222
|
}, [treeState.data, treeState.selectedKeys, treeState.expandedKeys]);
|
|
1223
1223
|
return {
|
|
1224
1224
|
directoryTree: MemoizedTree,
|
|
1225
|
-
contents,
|
|
1226
|
-
currentPath,
|
|
1225
|
+
contents: treeState.contents,
|
|
1226
|
+
currentPath: treeState.currentPath,
|
|
1227
|
+
loading: treeState.loading,
|
|
1228
|
+
originTreeData,
|
|
1227
1229
|
updateFileContents,
|
|
1228
|
-
removeFile
|
|
1229
|
-
loading,
|
|
1230
|
-
originTreeData
|
|
1230
|
+
removeFile
|
|
1231
1231
|
};
|
|
1232
1232
|
};
|
|
1233
1233
|
|
|
@@ -3175,5 +3175,475 @@ const NetworkSettingsModal = _ref2 => {
|
|
|
3175
3175
|
};
|
|
3176
3176
|
var NetworkSettingsModal$1 = /*#__PURE__*/memo(NetworkSettingsModal);
|
|
3177
3177
|
|
|
3178
|
-
|
|
3178
|
+
const LeftList = /*#__PURE__*/memo(_ref => {
|
|
3179
|
+
let {
|
|
3180
|
+
dataSource,
|
|
3181
|
+
selectedPresetId,
|
|
3182
|
+
onSelectPreset,
|
|
3183
|
+
onAddNew,
|
|
3184
|
+
onRemove,
|
|
3185
|
+
hasPresets = dataSource.length > 0,
|
|
3186
|
+
showDescription = false,
|
|
3187
|
+
texts = {
|
|
3188
|
+
newButton: "New Preset",
|
|
3189
|
+
removeButton: "Remove"
|
|
3190
|
+
}
|
|
3191
|
+
} = _ref;
|
|
3192
|
+
// 动态计算列布局
|
|
3193
|
+
const gridColumns = showDescription ? "grid-cols-3" : "grid-cols-2";
|
|
3194
|
+
return /*#__PURE__*/jsxs("div", {
|
|
3195
|
+
className: "h-full left-list-wrapper",
|
|
3196
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
3197
|
+
className: "list-container",
|
|
3198
|
+
children: /*#__PURE__*/jsx(List, {
|
|
3199
|
+
header: /*#__PURE__*/jsxs("div", {
|
|
3200
|
+
className: `grid ${gridColumns} w-full list-header`,
|
|
3201
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
3202
|
+
children: "Name"
|
|
3203
|
+
}), /*#__PURE__*/jsx("div", {
|
|
3204
|
+
children: "Create Time"
|
|
3205
|
+
}), showDescription && /*#__PURE__*/jsx("div", {
|
|
3206
|
+
children: "Description"
|
|
3207
|
+
})]
|
|
3208
|
+
}),
|
|
3209
|
+
dataSource: dataSource,
|
|
3210
|
+
rowKey: "id",
|
|
3211
|
+
renderItem: item => /*#__PURE__*/jsx(List.Item, {
|
|
3212
|
+
className: `list-item ${selectedPresetId === item.id ? 'selected' : ''}`,
|
|
3213
|
+
style: {
|
|
3214
|
+
padding: "9px 24px"
|
|
3215
|
+
},
|
|
3216
|
+
onClick: () => onSelectPreset(item),
|
|
3217
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
3218
|
+
className: `grid ${gridColumns} w-full text-text-normal`,
|
|
3219
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
3220
|
+
title: item.name,
|
|
3221
|
+
children: item.name || "Untitled Preset"
|
|
3222
|
+
}), /*#__PURE__*/jsx("div", {
|
|
3223
|
+
children: item.create_time
|
|
3224
|
+
}), showDescription && /*#__PURE__*/jsx("div", {
|
|
3225
|
+
children: item.description
|
|
3226
|
+
})]
|
|
3227
|
+
})
|
|
3228
|
+
}),
|
|
3229
|
+
locale: {
|
|
3230
|
+
emptyText: /*#__PURE__*/jsx("div", {
|
|
3231
|
+
className: "p-8",
|
|
3232
|
+
children: /*#__PURE__*/jsx(Empty, {
|
|
3233
|
+
image: Empty.PRESENTED_IMAGE_SIMPLE,
|
|
3234
|
+
description: /*#__PURE__*/jsx("span", {
|
|
3235
|
+
className: "text-gray-400",
|
|
3236
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
3237
|
+
type: "link",
|
|
3238
|
+
onClick: onAddNew,
|
|
3239
|
+
className: "p-0 h-auto",
|
|
3240
|
+
icon: /*#__PURE__*/jsx(PlusOutlined, {}),
|
|
3241
|
+
children: "Create new preset"
|
|
3242
|
+
})
|
|
3243
|
+
})
|
|
3244
|
+
})
|
|
3245
|
+
})
|
|
3246
|
+
}
|
|
3247
|
+
})
|
|
3248
|
+
}), hasPresets && /*#__PURE__*/jsx("div", {
|
|
3249
|
+
className: "p-4",
|
|
3250
|
+
style: {
|
|
3251
|
+
paddingInline: 24
|
|
3252
|
+
},
|
|
3253
|
+
children: /*#__PURE__*/jsxs(Space, {
|
|
3254
|
+
size: "middle",
|
|
3255
|
+
children: [/*#__PURE__*/jsx(Button, {
|
|
3256
|
+
type: "default",
|
|
3257
|
+
icon: /*#__PURE__*/jsx(PlusOutlined, {}),
|
|
3258
|
+
style: {
|
|
3259
|
+
padding: "20px 12px"
|
|
3260
|
+
},
|
|
3261
|
+
className: "btn-gray",
|
|
3262
|
+
onClick: onAddNew,
|
|
3263
|
+
children: texts.newButton
|
|
3264
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
3265
|
+
type: "default",
|
|
3266
|
+
style: {
|
|
3267
|
+
padding: "20px 12px"
|
|
3268
|
+
},
|
|
3269
|
+
className: "btn-gray",
|
|
3270
|
+
onClick: onRemove,
|
|
3271
|
+
children: texts.removeButton
|
|
3272
|
+
})]
|
|
3273
|
+
})
|
|
3274
|
+
})]
|
|
3275
|
+
});
|
|
3276
|
+
});
|
|
3277
|
+
const SubmitButton = _ref2 => {
|
|
3278
|
+
let {
|
|
3279
|
+
loading,
|
|
3280
|
+
action,
|
|
3281
|
+
children,
|
|
3282
|
+
disabled = false
|
|
3283
|
+
} = _ref2;
|
|
3284
|
+
return /*#__PURE__*/jsx("div", {
|
|
3285
|
+
className: "submit-btn-wrapper",
|
|
3286
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
3287
|
+
className: "btn-gray",
|
|
3288
|
+
loading: loading,
|
|
3289
|
+
onClick: action,
|
|
3290
|
+
disabled: disabled,
|
|
3291
|
+
children: children
|
|
3292
|
+
})
|
|
3293
|
+
});
|
|
3294
|
+
};
|
|
3295
|
+
const RightDetailForm = /*#__PURE__*/memo(_ref3 => {
|
|
3296
|
+
let {
|
|
3297
|
+
form,
|
|
3298
|
+
onSave,
|
|
3299
|
+
onLoad,
|
|
3300
|
+
isLoading,
|
|
3301
|
+
isEditing,
|
|
3302
|
+
fields = {
|
|
3303
|
+
name: {
|
|
3304
|
+
label: "Preset Name",
|
|
3305
|
+
placeholder: "Enter preset name",
|
|
3306
|
+
required: true
|
|
3307
|
+
}
|
|
3308
|
+
},
|
|
3309
|
+
texts = {
|
|
3310
|
+
loadButton: "Load",
|
|
3311
|
+
saveButton: "Save"
|
|
3312
|
+
},
|
|
3313
|
+
presetChanged
|
|
3314
|
+
} = _ref3;
|
|
3315
|
+
const [initialSelected, setInitialSelected] = useState([]);
|
|
3316
|
+
const currentSelected = Form.useWatch('category_list', form) || [];
|
|
3317
|
+
|
|
3318
|
+
// 检查是否包含category_list字段
|
|
3319
|
+
const hasCategoryList = fields.category_list !== null && fields.category_list !== undefined;
|
|
3320
|
+
|
|
3321
|
+
// 初始化 category_list 的选择状态
|
|
3322
|
+
useEffect(() => {
|
|
3323
|
+
if (hasCategoryList) {
|
|
3324
|
+
const currentValue = form.getFieldValue('category_list') || [];
|
|
3325
|
+
setInitialSelected(currentValue);
|
|
3326
|
+
}
|
|
3327
|
+
}, [presetChanged, form, hasCategoryList]); // 当presetChanged变化时更新
|
|
3328
|
+
|
|
3329
|
+
// 动态生成 checkbox 选项
|
|
3330
|
+
const checkboxOptions = useMemo(() => {
|
|
3331
|
+
if (!hasCategoryList) return [];
|
|
3332
|
+
return fields.category_list.options.map(category => {
|
|
3333
|
+
const isInitiallySelected = initialSelected.includes(category.name);
|
|
3334
|
+
const shouldDisable = isEditing ? !isInitiallySelected : false;
|
|
3335
|
+
return {
|
|
3336
|
+
...category,
|
|
3337
|
+
disabled: shouldDisable
|
|
3338
|
+
};
|
|
3339
|
+
});
|
|
3340
|
+
}, [initialSelected, isEditing, hasCategoryList, fields.category_list]);
|
|
3341
|
+
return /*#__PURE__*/jsxs(Flex, {
|
|
3342
|
+
vertical: true,
|
|
3343
|
+
className: "h-full",
|
|
3344
|
+
children: [/*#__PURE__*/jsxs(Form, {
|
|
3345
|
+
form: form,
|
|
3346
|
+
layout: "vertical",
|
|
3347
|
+
autoComplete: "off",
|
|
3348
|
+
style: {
|
|
3349
|
+
flex: 1,
|
|
3350
|
+
overflowY: 'auto'
|
|
3351
|
+
},
|
|
3352
|
+
children: [/*#__PURE__*/jsx(Form.Item, {
|
|
3353
|
+
name: "name",
|
|
3354
|
+
label: fields.name.label,
|
|
3355
|
+
rules: [{
|
|
3356
|
+
required: fields.name.required,
|
|
3357
|
+
validator: async (_, value) => {
|
|
3358
|
+
if (!value || value.trim() === '') {
|
|
3359
|
+
return Promise.reject(new Error('Preset name cannot be empty or spaces only'));
|
|
3360
|
+
}
|
|
3361
|
+
}
|
|
3362
|
+
}],
|
|
3363
|
+
children: /*#__PURE__*/jsx(Input, {
|
|
3364
|
+
placeholder: fields.name.placeholder,
|
|
3365
|
+
disabled: isEditing
|
|
3366
|
+
})
|
|
3367
|
+
}), hasCategoryList && /*#__PURE__*/jsx(Form.Item, {
|
|
3368
|
+
name: "category_list",
|
|
3369
|
+
label: fields.category_list.label,
|
|
3370
|
+
rules: [{
|
|
3371
|
+
required: fields.category_list.required,
|
|
3372
|
+
message: 'Please select at least one category',
|
|
3373
|
+
validator: (_, value) => {
|
|
3374
|
+
if (value && value.length > 0) {
|
|
3375
|
+
return Promise.resolve();
|
|
3376
|
+
}
|
|
3377
|
+
return Promise.reject(new Error('Please select at least one category'));
|
|
3378
|
+
}
|
|
3379
|
+
}],
|
|
3380
|
+
children: /*#__PURE__*/jsx(Checkbox.Group, {
|
|
3381
|
+
className: "grid grid-cols-2 gap-2",
|
|
3382
|
+
children: checkboxOptions.map(category => /*#__PURE__*/jsx(Checkbox, {
|
|
3383
|
+
value: category.name,
|
|
3384
|
+
disabled: category.disabled,
|
|
3385
|
+
children: category.label
|
|
3386
|
+
}, category.name))
|
|
3387
|
+
})
|
|
3388
|
+
}), fields.description && /*#__PURE__*/jsx(Form.Item, {
|
|
3389
|
+
name: "description",
|
|
3390
|
+
label: fields.description.label,
|
|
3391
|
+
children: /*#__PURE__*/jsx(Input.TextArea, {
|
|
3392
|
+
rows: 4,
|
|
3393
|
+
placeholder: fields.description.placeholder,
|
|
3394
|
+
disabled: isEditing
|
|
3395
|
+
})
|
|
3396
|
+
})]
|
|
3397
|
+
}), isEditing ? /*#__PURE__*/jsx(SubmitButton, {
|
|
3398
|
+
action: onLoad,
|
|
3399
|
+
...(hasCategoryList && {
|
|
3400
|
+
disabled: !currentSelected.length
|
|
3401
|
+
}),
|
|
3402
|
+
children: texts.loadButton
|
|
3403
|
+
}) : /*#__PURE__*/jsx(SubmitButton, {
|
|
3404
|
+
action: onSave,
|
|
3405
|
+
loading: isLoading,
|
|
3406
|
+
children: texts.saveButton
|
|
3407
|
+
})]
|
|
3408
|
+
});
|
|
3409
|
+
});
|
|
3410
|
+
|
|
3411
|
+
const Preset = _ref => {
|
|
3412
|
+
let {
|
|
3413
|
+
open,
|
|
3414
|
+
onClose,
|
|
3415
|
+
// API 方法通过 props 传入
|
|
3416
|
+
getPresetList,
|
|
3417
|
+
savePreset,
|
|
3418
|
+
removePreset,
|
|
3419
|
+
loadPreset,
|
|
3420
|
+
// 字段配置
|
|
3421
|
+
fields = {
|
|
3422
|
+
name: {
|
|
3423
|
+
label: "Preset Name",
|
|
3424
|
+
placeholder: "Enter preset name",
|
|
3425
|
+
required: true
|
|
3426
|
+
}
|
|
3427
|
+
},
|
|
3428
|
+
texts = {
|
|
3429
|
+
title: "Preset Management",
|
|
3430
|
+
emptyText: "Select a preset from the list to view details",
|
|
3431
|
+
deleteConfirm: "Are you sure to delete preset",
|
|
3432
|
+
loadText: "Loading...",
|
|
3433
|
+
successText: "Success",
|
|
3434
|
+
newButton: "New Preset",
|
|
3435
|
+
removeButton: "Remove",
|
|
3436
|
+
loadButton: "Load",
|
|
3437
|
+
saveButton: "Save"
|
|
3438
|
+
},
|
|
3439
|
+
// 样式定制
|
|
3440
|
+
width = 1000,
|
|
3441
|
+
height = 680,
|
|
3442
|
+
className = ""
|
|
3443
|
+
} = _ref;
|
|
3444
|
+
const {
|
|
3445
|
+
message: AntdMessage,
|
|
3446
|
+
modal: AntdModal
|
|
3447
|
+
} = App.useApp();
|
|
3448
|
+
const [presetList, setPresetList] = useState([]);
|
|
3449
|
+
const [selectedPreset, setSelectedPreset] = useState(null);
|
|
3450
|
+
const [loading, setLoading] = useState(false);
|
|
3451
|
+
const [presetChanged, setPresetChanged] = useState(0);
|
|
3452
|
+
const [form] = Form.useForm();
|
|
3453
|
+
|
|
3454
|
+
// 获取预设列表
|
|
3455
|
+
useEffect(() => {
|
|
3456
|
+
fetchPresetList();
|
|
3457
|
+
}, []);
|
|
3458
|
+
const fetchPresetList = useCallback(async () => {
|
|
3459
|
+
try {
|
|
3460
|
+
const data = await getPresetList();
|
|
3461
|
+
if (data?.preset_list) {
|
|
3462
|
+
setPresetList(data.preset_list);
|
|
3463
|
+
}
|
|
3464
|
+
} catch (error) {
|
|
3465
|
+
console.error('Failed to fetch preset list:', error);
|
|
3466
|
+
}
|
|
3467
|
+
}, [getPresetList]);
|
|
3468
|
+
const handleSelectPreset = useCallback(preset => {
|
|
3469
|
+
setSelectedPreset(preset);
|
|
3470
|
+
form.setFieldsValue(preset);
|
|
3471
|
+
// setPresetChanged(prev => prev + 1); // 触发更新
|
|
3472
|
+
}, [form]);
|
|
3473
|
+
const handleAddNew = useCallback(() => {
|
|
3474
|
+
const unsavedPreset = presetList.find(item => !item.id);
|
|
3475
|
+
if (unsavedPreset) {
|
|
3476
|
+
AntdMessage.warning('Existing unsaved preset detected.');
|
|
3477
|
+
return;
|
|
3478
|
+
}
|
|
3479
|
+
|
|
3480
|
+
// 创建新的数据,包含所有配置的字段
|
|
3481
|
+
const newPreset = Object.keys(fields).reduce((acc, fieldName) => {
|
|
3482
|
+
acc[fieldName] = '';
|
|
3483
|
+
return acc;
|
|
3484
|
+
}, {});
|
|
3485
|
+
|
|
3486
|
+
// 特殊处理 category_list
|
|
3487
|
+
if (fields.category_list?.options) {
|
|
3488
|
+
newPreset.category_list = fields.category_list.options.map(item => item.name);
|
|
3489
|
+
}
|
|
3490
|
+
setPresetList([...presetList, newPreset]);
|
|
3491
|
+
setSelectedPreset(newPreset);
|
|
3492
|
+
form.setFieldsValue(newPreset);
|
|
3493
|
+
}, [form, presetList, AntdMessage]);
|
|
3494
|
+
const handleRemove = useCallback(async () => {
|
|
3495
|
+
if (!selectedPreset) return;
|
|
3496
|
+
|
|
3497
|
+
// 检查是否为新建的未保存数据(无id)
|
|
3498
|
+
const isUnsavedPreset = !selectedPreset.id;
|
|
3499
|
+
const presetName = selectedPreset.name || 'Untitled Preset';
|
|
3500
|
+
try {
|
|
3501
|
+
AntdModal.confirm({
|
|
3502
|
+
icon: /*#__PURE__*/jsx(ExclamationCircleFilled, {}),
|
|
3503
|
+
title: `${texts.deleteConfirm} "${presetName}"?`,
|
|
3504
|
+
cancelText: 'No',
|
|
3505
|
+
okText: 'Yes',
|
|
3506
|
+
onOk: async () => {
|
|
3507
|
+
if (!isUnsavedPreset) {
|
|
3508
|
+
await removePreset({
|
|
3509
|
+
id: selectedPreset.id
|
|
3510
|
+
});
|
|
3511
|
+
AntdMessage.success(texts.successText);
|
|
3512
|
+
// 刷新列表
|
|
3513
|
+
await fetchPresetList();
|
|
3514
|
+
} else {
|
|
3515
|
+
setPresetList(prev => prev.filter(item => !!item.id));
|
|
3516
|
+
}
|
|
3517
|
+
|
|
3518
|
+
// 重置表单和选择状态
|
|
3519
|
+
setSelectedPreset(null);
|
|
3520
|
+
form.resetFields();
|
|
3521
|
+
}
|
|
3522
|
+
});
|
|
3523
|
+
} catch (error) {
|
|
3524
|
+
console.error('Failed to delete preset:', error);
|
|
3525
|
+
}
|
|
3526
|
+
}, [selectedPreset, form, AntdModal, AntdMessage, fetchPresetList, texts]);
|
|
3527
|
+
const handleLoadPreset = useCallback(async () => {
|
|
3528
|
+
if (!selectedPreset?.id) return;
|
|
3529
|
+
|
|
3530
|
+
// 显示加载模态框
|
|
3531
|
+
const modalInstance = Modal.info({
|
|
3532
|
+
title: texts.loadText,
|
|
3533
|
+
content: /*#__PURE__*/jsx(Spin, {
|
|
3534
|
+
size: "large",
|
|
3535
|
+
className: "block mx-auto"
|
|
3536
|
+
}),
|
|
3537
|
+
maskClosable: false,
|
|
3538
|
+
okButtonProps: {
|
|
3539
|
+
style: {
|
|
3540
|
+
display: 'none'
|
|
3541
|
+
}
|
|
3542
|
+
}
|
|
3543
|
+
});
|
|
3544
|
+
try {
|
|
3545
|
+
await loadPreset({
|
|
3546
|
+
id: selectedPreset.id,
|
|
3547
|
+
...(selectedPreset.category_list && {
|
|
3548
|
+
category_list: selectedPreset.category_list
|
|
3549
|
+
})
|
|
3550
|
+
});
|
|
3551
|
+
// 成功时延迟关闭
|
|
3552
|
+
setTimeout(() => {
|
|
3553
|
+
modalInstance.destroy();
|
|
3554
|
+
AntdMessage.success(texts.successText);
|
|
3555
|
+
}, 1000);
|
|
3556
|
+
} catch (error) {
|
|
3557
|
+
console.error('Failed to load preset:', error);
|
|
3558
|
+
modalInstance.destroy();
|
|
3559
|
+
}
|
|
3560
|
+
}, [selectedPreset, loadPreset, texts, AntdMessage]);
|
|
3561
|
+
const handleSave = useCallback(async () => {
|
|
3562
|
+
setLoading(true);
|
|
3563
|
+
try {
|
|
3564
|
+
const values = await form.validateFields();
|
|
3565
|
+
console.log('Form values:', values);
|
|
3566
|
+
await savePreset(values);
|
|
3567
|
+
AntdMessage.success(texts.successText);
|
|
3568
|
+
// 刷新列表
|
|
3569
|
+
await fetchPresetList();
|
|
3570
|
+
|
|
3571
|
+
// 重置表单和选择状态
|
|
3572
|
+
setSelectedPreset(null);
|
|
3573
|
+
form.resetFields();
|
|
3574
|
+
} catch (error) {
|
|
3575
|
+
if (error.errorFields) {
|
|
3576
|
+
// 表单验证错误
|
|
3577
|
+
console.error('Form validation failed:', error.errorFields);
|
|
3578
|
+
} else {
|
|
3579
|
+
console.error('Failed to save preset:', error);
|
|
3580
|
+
}
|
|
3581
|
+
} finally {
|
|
3582
|
+
setLoading(false);
|
|
3583
|
+
}
|
|
3584
|
+
}, [form, AntdMessage, fetchPresetList, savePreset, texts]);
|
|
3585
|
+
return /*#__PURE__*/jsx(Modal, {
|
|
3586
|
+
title: texts.title,
|
|
3587
|
+
width: width,
|
|
3588
|
+
open: open,
|
|
3589
|
+
wrapClassName: `preset-management ${className}`,
|
|
3590
|
+
footer: null,
|
|
3591
|
+
onCancel: onClose,
|
|
3592
|
+
centered: true,
|
|
3593
|
+
styles: {
|
|
3594
|
+
body: {
|
|
3595
|
+
height: `${height}px`
|
|
3596
|
+
}
|
|
3597
|
+
},
|
|
3598
|
+
children: /*#__PURE__*/jsxs(Row, {
|
|
3599
|
+
gutter: 0,
|
|
3600
|
+
className: "h-full w-full",
|
|
3601
|
+
children: [/*#__PURE__*/jsx(Col, {
|
|
3602
|
+
span: 14,
|
|
3603
|
+
className: "h-full",
|
|
3604
|
+
children: /*#__PURE__*/jsx(LeftList, {
|
|
3605
|
+
dataSource: presetList,
|
|
3606
|
+
selectedPresetId: selectedPreset?.id,
|
|
3607
|
+
onSelectPreset: handleSelectPreset,
|
|
3608
|
+
onAddNew: handleAddNew,
|
|
3609
|
+
onRemove: handleRemove,
|
|
3610
|
+
showDescription: !!fields.description // 根据 fields 判断是否显示 description
|
|
3611
|
+
,
|
|
3612
|
+
texts: {
|
|
3613
|
+
newButton: texts.newButton,
|
|
3614
|
+
removeButton: texts.removeButton
|
|
3615
|
+
}
|
|
3616
|
+
})
|
|
3617
|
+
}), /*#__PURE__*/jsx(Col, {
|
|
3618
|
+
span: 10,
|
|
3619
|
+
className: "h-full p-6",
|
|
3620
|
+
children: selectedPreset ? /*#__PURE__*/jsx(RightDetailForm, {
|
|
3621
|
+
form: form,
|
|
3622
|
+
onSave: handleSave,
|
|
3623
|
+
onLoad: handleLoadPreset,
|
|
3624
|
+
isLoading: loading,
|
|
3625
|
+
isEditing: !!selectedPreset?.id,
|
|
3626
|
+
fields: fields,
|
|
3627
|
+
texts: {
|
|
3628
|
+
loadButton: texts.loadButton,
|
|
3629
|
+
saveButton: texts.saveButton
|
|
3630
|
+
},
|
|
3631
|
+
presetChanged: presetChanged
|
|
3632
|
+
}) : /*#__PURE__*/jsx(Flex, {
|
|
3633
|
+
vertical: true,
|
|
3634
|
+
justify: "center",
|
|
3635
|
+
align: "center",
|
|
3636
|
+
className: "h-full text-gray-400",
|
|
3637
|
+
children: /*#__PURE__*/jsx(Empty, {
|
|
3638
|
+
image: Empty.PRESENTED_IMAGE_SIMPLE,
|
|
3639
|
+
description: texts.emptyText
|
|
3640
|
+
})
|
|
3641
|
+
})
|
|
3642
|
+
})]
|
|
3643
|
+
})
|
|
3644
|
+
});
|
|
3645
|
+
};
|
|
3646
|
+
var PresetModal = /*#__PURE__*/memo(Preset);
|
|
3647
|
+
|
|
3648
|
+
export { AuthorizationModal, NetworkSettingsModal$1 as NetworkSettingsModal, PresetModal, PtpModal$1 as PtpModal, SystemOperations, UpgradeManager, useAuth, useDirectoryTree, useHardwareUsage, useHardwareWebSocket, useSystemOperations, useUpgrade };
|
|
3179
3649
|
//# sourceMappingURL=index.esm.js.map
|