-
文件上传测试
+
+
- {progress > 0 && (
-
- )}
-
- {uploadStatus && (
-
- 状态: {uploadStatus}
-
- )}
+
+
Upload Progress
+ {selectedFiles.map(file => renderProgressBar(file.name))}
+
);
};
-
-export default function HomePage() {
- return
-}
\ No newline at end of file
+export default FileUploadComponent;
\ No newline at end of file
diff --git a/apps/web/src/components/layout/fix-header.tsx b/apps/web/src/components/layout/fix-header.tsx
index af578e8..d5aa1b1 100644
--- a/apps/web/src/components/layout/fix-header.tsx
+++ b/apps/web/src/components/layout/fix-header.tsx
@@ -4,8 +4,8 @@ import React, { ReactNode, useEffect, useState, useRef, CSSProperties } from "re
import { SyncOutlined } from "@ant-design/icons";
import Breadcrumb from "../layout/breadcrumb";
import * as Y from "yjs";
-import { stringToColor, YWsProvider } from "@nicestack/common";
-import { lightenColor } from "@nicestack/client"
+import { stringToColor, YWsProvider } from "@nice/common";
+import { lightenColor } from "@nice/client"
import { useLocalSettings } from "@web/src/hooks/useLocalSetting";
interface FixedHeaderProps {
children?: ReactNode;
diff --git a/apps/web/src/components/layout/main/nav-data.tsx b/apps/web/src/components/layout/main/nav-data.tsx
index d4192b9..1f2bea1 100644
--- a/apps/web/src/components/layout/main/nav-data.tsx
+++ b/apps/web/src/components/layout/main/nav-data.tsx
@@ -1,4 +1,4 @@
-import { NavItem } from '@nicestack/client';
+import { NavItem } from '@nice/client';
import {
HomeIcon,
BookOpenIcon,
diff --git a/apps/web/src/components/layout/main/side-bar.tsx b/apps/web/src/components/layout/main/side-bar.tsx
index a9f6e40..e85cfcf 100644
--- a/apps/web/src/components/layout/main/side-bar.tsx
+++ b/apps/web/src/components/layout/main/side-bar.tsx
@@ -1,6 +1,6 @@
import { motion } from 'framer-motion';
import { useNavigate, useLocation } from 'react-router-dom';
-import { NavItem } from '@nicestack/client';
+import { NavItem } from '@nice/client';
interface SidebarProps {
navItems: Array
;
diff --git a/apps/web/src/components/layout/sidebar-content.tsx b/apps/web/src/components/layout/sidebar-content.tsx
index b85c341..95ab558 100644
--- a/apps/web/src/components/layout/sidebar-content.tsx
+++ b/apps/web/src/components/layout/sidebar-content.tsx
@@ -1,9 +1,9 @@
import { Avatar, Divider, Dropdown, theme } from "antd";
-import { Icon } from "@nicestack/iconer";
+import { Icon } from "@nice/iconer";
import CollapsibleSection from "../presentation/collapse-section";
import { useAuth } from "@web/src/providers/auth-provider";
-import { RolePerms } from "@nicestack/common";
+import { RolePerms } from "@nice/common";
export default function SidebarContent() {
const { logout, user, isAuthenticated, hasSomePermissions } = useAuth();
diff --git a/apps/web/src/components/layout/user-header.tsx b/apps/web/src/components/layout/user-header.tsx
index eaca058..a62ff2a 100644
--- a/apps/web/src/components/layout/user-header.tsx
+++ b/apps/web/src/components/layout/user-header.tsx
@@ -1,6 +1,6 @@
import { Avatar, Button, Dropdown, theme } from "antd";
import { useAuth } from "@web/src/providers/auth-provider";
-import { Icon } from "@nicestack/iconer";
+import { Icon } from "@nice/iconer";
import { useNavigate } from "react-router-dom";
export default function UserHeader() {
diff --git a/apps/web/src/components/models/course/card/CourseCard.tsx b/apps/web/src/components/models/course/card/CourseCard.tsx
index e66a268..560aabb 100644
--- a/apps/web/src/components/models/course/card/CourseCard.tsx
+++ b/apps/web/src/components/models/course/card/CourseCard.tsx
@@ -1,4 +1,4 @@
-import { CourseDto } from '@nicestack/common';
+import { CourseDto } from '@nice/common';
import { Card } from '@web/src/components/presentation/container/Card';
import { CourseHeader } from './CourseHeader';
import { CourseStats } from './CourseStats';
diff --git a/apps/web/src/components/models/course/detail/course-detail.tsx b/apps/web/src/components/models/course/detail/course-detail.tsx
index e4fa121..f949573 100644
--- a/apps/web/src/components/models/course/detail/course-detail.tsx
+++ b/apps/web/src/components/models/course/detail/course-detail.tsx
@@ -1,5 +1,5 @@
import { CheckCircleIcon } from '@heroicons/react/24/outline'
-import { Course } from "@nicestack/common"
+import { Course } from "@nice/common"
interface CourseDetailProps {
course: Course
}
diff --git a/apps/web/src/components/models/course/detail/course-syllabus.tsx b/apps/web/src/components/models/course/detail/course-syllabus.tsx
index 36af3d1..18ab849 100644
--- a/apps/web/src/components/models/course/detail/course-syllabus.tsx
+++ b/apps/web/src/components/models/course/detail/course-syllabus.tsx
@@ -1,7 +1,7 @@
import { ChevronDownIcon, ClockIcon, PlayCircleIcon } from '@heroicons/react/24/outline'
import { useState } from 'react'
-import { Section, SectionDto } from "@nicestack/common"
+import { Section, SectionDto } from "@nice/common"
interface CourseSyllabusProps {
sections: SectionDto[]
onLectureClick?: (lectureId: string) => void
diff --git a/apps/web/src/components/models/course/list/course-list.tsx b/apps/web/src/components/models/course/list/course-list.tsx
index 912954c..2da2963 100644
--- a/apps/web/src/components/models/course/list/course-list.tsx
+++ b/apps/web/src/components/models/course/list/course-list.tsx
@@ -1,6 +1,6 @@
// CourseList.tsx
import { motion } from "framer-motion";
-import { Course, CourseDto } from "@nicestack/common";
+import { Course, CourseDto } from "@nice/common";
import { EmptyState } from "@web/src/components/presentation/space/Empty";
import { Pagination } from "@web/src/components/presentation/element/Pagination";
diff --git a/apps/web/src/components/models/course/manage/CourseBasicForm.tsx b/apps/web/src/components/models/course/manage/CourseBasicForm.tsx
index 23fd165..2fa06ef 100644
--- a/apps/web/src/components/models/course/manage/CourseBasicForm.tsx
+++ b/apps/web/src/components/models/course/manage/CourseBasicForm.tsx
@@ -1,11 +1,11 @@
import { SubmitHandler, useFormContext } from 'react-hook-form';
import { CourseFormData, useCourseEditor } from './CourseEditorContext';
-import { CourseLevel, CourseLevelLabel } from '@nicestack/common';
+import { CourseLevel, CourseLevelLabel } from '@nice/common';
import { FormInput } from '@web/src/components/presentation/form/FormInput';
import { FormSelect } from '@web/src/components/presentation/form/FormSelect';
import { FormArrayField } from '@web/src/components/presentation/form/FormArrayField';
-import { convertToOptions } from '@nicestack/client';
+import { convertToOptions } from '@nice/client';
export function CourseBasicForm() {
const { register, formState: { errors }, watch, handleSubmit } = useFormContext();
diff --git a/apps/web/src/components/models/course/manage/CourseEditorContext.tsx b/apps/web/src/components/models/course/manage/CourseEditorContext.tsx
index 961c2ab..5e24160 100644
--- a/apps/web/src/components/models/course/manage/CourseEditorContext.tsx
+++ b/apps/web/src/components/models/course/manage/CourseEditorContext.tsx
@@ -2,8 +2,8 @@ import { createContext, useContext, ReactNode, useEffect } from 'react';
import { useForm, FormProvider, SubmitHandler } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { z } from 'zod';
-import { CourseDto, CourseLevel, CourseStatus } from '@nicestack/common';
-import { api, useCourse } from '@nicestack/client';
+import { CourseDto, CourseLevel, CourseStatus } from '@nice/common';
+import { api, useCourse } from '@nice/client';
import toast from 'react-hot-toast';
import { useNavigate } from 'react-router-dom';
// 定义课程表单验证 Schema
diff --git a/apps/web/src/components/models/course/manage/CourseEditorHeader.tsx b/apps/web/src/components/models/course/manage/CourseEditorHeader.tsx
index 9f93f91..d3e93b9 100644
--- a/apps/web/src/components/models/course/manage/CourseEditorHeader.tsx
+++ b/apps/web/src/components/models/course/manage/CourseEditorHeader.tsx
@@ -3,7 +3,7 @@ import { SubmitHandler, useFormContext } from 'react-hook-form';
import { useNavigate } from 'react-router-dom';
import { CourseFormData, useCourseEditor } from './CourseEditorContext';
import { Button } from '@web/src/components/presentation/element/Button';
-import { CourseStatus, CourseStatusLabel } from '@nicestack/common';
+import { CourseStatus, CourseStatusLabel } from '@nice/common';
import Tag from '@web/src/components/presentation/element/Tag';
const courseStatusVariant: Record = {
[CourseStatus.DRAFT]: 'default',
diff --git a/apps/web/src/components/models/course/manage/CourseEditorLayout.tsx b/apps/web/src/components/models/course/manage/CourseEditorLayout.tsx
index 63948a5..221a435 100644
--- a/apps/web/src/components/models/course/manage/CourseEditorLayout.tsx
+++ b/apps/web/src/components/models/course/manage/CourseEditorLayout.tsx
@@ -3,7 +3,7 @@ import { useNavigate } from "react-router-dom";
import { DEFAULT_NAV_ITEMS } from "./navItems";
import CourseEditorHeader from "./CourseEditorHeader";
import { motion } from "framer-motion";
-import { NavItem } from "@nicestack/client"
+import { NavItem } from "@nice/client"
import CourseEditorSidebar from "./CourseEditorSidebar";
interface CourseEditorLayoutProps {
children: ReactNode;
diff --git a/apps/web/src/components/models/course/manage/CourseEditorSidebar.tsx b/apps/web/src/components/models/course/manage/CourseEditorSidebar.tsx
index 071f63e..143ab15 100644
--- a/apps/web/src/components/models/course/manage/CourseEditorSidebar.tsx
+++ b/apps/web/src/components/models/course/manage/CourseEditorSidebar.tsx
@@ -1,5 +1,5 @@
import { motion } from 'framer-motion';
-import { NavItem } from "@nicestack/client"
+import { NavItem } from "@nice/client"
interface CourseSidebarProps {
isHovered: boolean;
setIsHovered: (value: boolean) => void;
diff --git a/apps/web/src/components/models/course/manage/navItems.tsx b/apps/web/src/components/models/course/manage/navItems.tsx
index ca88bef..57ac873 100644
--- a/apps/web/src/components/models/course/manage/navItems.tsx
+++ b/apps/web/src/components/models/course/manage/navItems.tsx
@@ -1,5 +1,5 @@
import { AcademicCapIcon, BookOpenIcon, Cog6ToothIcon, VideoCameraIcon } from '@heroicons/react/24/outline';
-import { NavItem } from '@nicestack/client';
+import { NavItem } from '@nice/client';
export const DEFAULT_NAV_ITEMS: (NavItem & { isCompleted?: boolean })[] = [
{
diff --git a/apps/web/src/components/models/department/department-form.tsx b/apps/web/src/components/models/department/department-form.tsx
index 328826f..37d8bc3 100644
--- a/apps/web/src/components/models/department/department-form.tsx
+++ b/apps/web/src/components/models/department/department-form.tsx
@@ -1,6 +1,6 @@
import { Spin, message, Input, InputNumber, Checkbox, Form } from "antd";
-import { useDepartment, api } from "@nicestack/client";
-import { Department, DepartmentDto, ObjectType, mapArrayToObjectArray } from "@nicestack/common";
+import { useDepartment, api } from "@nice/client";
+import { Department, DepartmentDto, ObjectType, mapArrayToObjectArray } from "@nice/common";
import { useContext, useState, useEffect } from "react";
import TermSelect from "../term/term-select";
import DepartmentSelect from "./department-select";
diff --git a/apps/web/src/components/models/department/department-import-drawer.tsx b/apps/web/src/components/models/department/department-import-drawer.tsx
index b33faaf..b77383c 100644
--- a/apps/web/src/components/models/department/department-import-drawer.tsx
+++ b/apps/web/src/components/models/department/department-import-drawer.tsx
@@ -1,7 +1,7 @@
import { Button, Drawer, Form } from "antd";
import React, { useRef, useState } from "react";
import type { ButtonProps, FormInstance } from "antd";
-import { Department } from "@nicestack/common";
+import { Department } from "@nice/common";
import { ExcelImporter } from "../../utils/excel-importer";
import DepartmentSelect from "./department-select";
diff --git a/apps/web/src/components/models/department/department-list.tsx b/apps/web/src/components/models/department/department-list.tsx
index f61260c..ee4f24c 100644
--- a/apps/web/src/components/models/department/department-list.tsx
+++ b/apps/web/src/components/models/department/department-list.tsx
@@ -1,5 +1,5 @@
import React, { useMemo, useContext, useCallback, useState } from "react";
-import { ObjectType } from "@nicestack/common"
+import { ObjectType } from "@nice/common"
import { ICellRendererParams, SortDirection } from "ag-grid-community";
import { ColDef } from "@ag-grid-community/core";
import AgServerTable from "../../presentation/ag-server-table";
@@ -8,7 +8,7 @@ import { Menu, MenuItem } from "../../presentation/dropdown-menu";
import { DeptEditorContext } from "./dept-editor";
import { CustomCellRendererProps } from "ag-grid-react";
import { message, Tag } from "antd";
-import { CrudOperation, emitDataChange, useDepartment } from "@nicestack/client";
+import { CrudOperation, emitDataChange, useDepartment } from "@nice/client";
export default function DepartmentList() {
const { setEditId, setModalOpen, setParentId } = useContext(DeptEditorContext);
diff --git a/apps/web/src/components/models/department/department-select.tsx b/apps/web/src/components/models/department/department-select.tsx
index 848367b..79cb7f4 100644
--- a/apps/web/src/components/models/department/department-select.tsx
+++ b/apps/web/src/components/models/department/department-select.tsx
@@ -1,7 +1,7 @@
import { TreeSelect, TreeSelectProps } from "antd";
import React, { useEffect, useState, useCallback } from "react";
-import { getUniqueItems } from "@nicestack/common";
-import { api } from "@nicestack/client"
+import { getUniqueItems } from "@nice/common";
+import { api } from "@nice/client"
import { DefaultOptionType } from "antd/es/select";
interface DepartmentSelectProps {
diff --git a/apps/web/src/components/models/department/dept-editor.tsx b/apps/web/src/components/models/department/dept-editor.tsx
index 38a1bf8..1d43a2d 100644
--- a/apps/web/src/components/models/department/dept-editor.tsx
+++ b/apps/web/src/components/models/department/dept-editor.tsx
@@ -1,6 +1,6 @@
import { createContext, useMemo, useState } from "react";
import { useAuth } from "@web/src/providers/auth-provider";
-import { RolePerms } from "@nicestack/common";
+import { RolePerms } from "@nice/common";
import { Button, FormInstance } from "antd";
import { useForm } from "antd/es/form/Form";
diff --git a/apps/web/src/components/models/department/dept-import-form.tsx b/apps/web/src/components/models/department/dept-import-form.tsx
index 3a9a6c7..dc70a23 100644
--- a/apps/web/src/components/models/department/dept-import-form.tsx
+++ b/apps/web/src/components/models/department/dept-import-form.tsx
@@ -14,7 +14,7 @@ import DepartmentSelect from "../department/department-select";
import { useAuth } from "@web/src/providers/auth-provider";
-import { useTransform } from "@nicestack/client";
+import { useTransform } from "@nice/client";
import ExcelToBase64Uploader from "../../presentation/excel-to-base64-uploader";
import { DeptEditorContext } from "./dept-editor";
diff --git a/apps/web/src/components/models/role/role-editor/assign-list.tsx b/apps/web/src/components/models/role/role-editor/assign-list.tsx
index 8e16542..4aadd01 100644
--- a/apps/web/src/components/models/role/role-editor/assign-list.tsx
+++ b/apps/web/src/components/models/role/role-editor/assign-list.tsx
@@ -1,5 +1,5 @@
import AgServerTable from "@web/src/components/presentation/ag-server-table";
-import { ObjectType } from "@nicestack/common"
+import { ObjectType } from "@nice/common"
import { ICellRendererParams } from "@ag-grid-community/core";
import { Menu, MenuItem } from "@web/src/components/presentation/dropdown-menu";
import { DeleteOutlined, EllipsisOutlined, PlusOutlined } from "@ant-design/icons";
@@ -9,7 +9,7 @@ import DepartmentSelect from "../../department/department-select";
import { useContext, useEffect } from "react";
import { RoleEditorContext } from "./role-editor";
import { useAuth } from "@web/src/providers/auth-provider";
-import { useRoleMap } from "@nicestack/client"
+import { useRoleMap } from "@nice/client"
const OpreationRenderer = ({ props }: { props: ICellRendererParams }) => {
const { deleteMany } = useRoleMap()
return (
diff --git a/apps/web/src/components/models/role/role-editor/role-editor.tsx b/apps/web/src/components/models/role/role-editor/role-editor.tsx
index 7ebce68..1d83609 100644
--- a/apps/web/src/components/models/role/role-editor/role-editor.tsx
+++ b/apps/web/src/components/models/role/role-editor/role-editor.tsx
@@ -4,7 +4,7 @@ import RoleList from "./role-list";
import RoleStaffModal from "./role-staff-modal";
import { useAuth } from "@web/src/providers/auth-provider";
-import { Role, RolePerms } from "@nicestack/common"
+import { Role, RolePerms } from "@nice/common"
import RoleModal from "./role-modal";
import { FormInstance, useForm } from "antd/es/form/Form";
// 扩展上下文类型以包括 mapStaffIds 和 setMapStaffIds
diff --git a/apps/web/src/components/models/role/role-editor/role-form.tsx b/apps/web/src/components/models/role/role-editor/role-form.tsx
index 1896caf..db58daf 100644
--- a/apps/web/src/components/models/role/role-editor/role-form.tsx
+++ b/apps/web/src/components/models/role/role-editor/role-form.tsx
@@ -1,8 +1,8 @@
import { Form, Input, message, Select, Spin } from "antd";
import { useContext, useEffect } from "react";
-import { Role, RolePerms } from "@nicestack/common";
-import { useRole } from "@nicestack/client";
-import { api } from "@nicestack/client";
+import { Role, RolePerms } from "@nice/common";
+import { useRole } from "@nice/client";
+import { api } from "@nice/client";
import { RoleEditorContext } from "./role-editor";
const options: { value: string; label: string }[] = Object.values(RolePerms).map((permission) => ({
value: permission,
diff --git a/apps/web/src/components/models/role/role-editor/role-list.tsx b/apps/web/src/components/models/role/role-editor/role-list.tsx
index 98a6166..ad3b8cb 100644
--- a/apps/web/src/components/models/role/role-editor/role-list.tsx
+++ b/apps/web/src/components/models/role/role-editor/role-list.tsx
@@ -1,10 +1,10 @@
-import { Role, RolePerms } from "@nicestack/common"
+import { Role, RolePerms } from "@nice/common"
import { DeleteOutlined, EditOutlined, EllipsisOutlined, PlusOutlined, UserOutlined } from "@ant-design/icons";
-import { useRole } from "@nicestack/client";
+import { useRole } from "@nice/client";
import { Button, theme } from "antd";
import { useContext, useEffect, useMemo } from "react";
import { RoleEditorContext } from "./role-editor";
-import { api } from "@nicestack/client"
+import { api } from "@nice/client"
import { useAuth } from "@web/src/providers/auth-provider";
import { Menu, MenuItem } from "@web/src/components/presentation/dropdown-menu";
const OpreationRenderer = ({ data }: { data: Role }) => {
diff --git a/apps/web/src/components/models/role/role-editor/role-staff-modal.tsx b/apps/web/src/components/models/role/role-editor/role-staff-modal.tsx
index f48a5ce..388ab61 100644
--- a/apps/web/src/components/models/role/role-editor/role-staff-modal.tsx
+++ b/apps/web/src/components/models/role/role-editor/role-staff-modal.tsx
@@ -1,10 +1,10 @@
-import { useRoleMap } from "@nicestack/client";
+import { useRoleMap } from "@nice/client";
import { Button, message, Modal } from "antd";
import { useContext, useRef, useState } from "react";
import { RoleEditorContext } from "./role-editor";
import StaffTransfer, { StaffTransferRef } from "../../staff/staff-transfer";
-import { ObjectType } from "@nicestack/common";
-import { api } from "@nicestack/client"
+import { ObjectType } from "@nice/common";
+import { api } from "@nice/client"
export default function RoleStaffModal() {
const {
domainId,
diff --git a/apps/web/src/components/models/role/role-select.tsx b/apps/web/src/components/models/role/role-select.tsx
index b74f0b4..8128884 100644
--- a/apps/web/src/components/models/role/role-select.tsx
+++ b/apps/web/src/components/models/role/role-select.tsx
@@ -1,7 +1,7 @@
import { useState } from 'react';
import { Select, Spin } from 'antd';
import type { SelectProps } from 'antd';
-import { api } from "@nicestack/client"
+import { api } from "@nice/client"
interface RoleSelectProps {
value?: string | string[];
onChange?: (value: string | string[]) => void;
diff --git a/apps/web/src/components/models/staff/staff-editor.tsx b/apps/web/src/components/models/staff/staff-editor.tsx
index 1b76fa1..285e149 100644
--- a/apps/web/src/components/models/staff/staff-editor.tsx
+++ b/apps/web/src/components/models/staff/staff-editor.tsx
@@ -1,6 +1,6 @@
import StaffList from "./staff-list";
-import { ObjectType, RolePerms } from "@nicestack/common"
-import { Icon } from "@nicestack/iconer"
+import { ObjectType, RolePerms } from "@nice/common"
+import { Icon } from "@nice/iconer"
import StaffModal from "./staff-modal";
import { createContext, useEffect, useMemo, useState } from "react";
import { useAuth } from "@web/src/providers/auth-provider";
diff --git a/apps/web/src/components/models/staff/staff-form.tsx b/apps/web/src/components/models/staff/staff-form.tsx
index b7d3c52..1dc4920 100644
--- a/apps/web/src/components/models/staff/staff-form.tsx
+++ b/apps/web/src/components/models/staff/staff-form.tsx
@@ -1,8 +1,8 @@
import { Button, Form, Input, Spin, Switch, message } from "antd";
import { useContext, useEffect} from "react";
-import { useStaff } from "@nicestack/client";
+import { useStaff } from "@nice/client";
import DepartmentSelect from "../department/department-select";
-import { api } from "@nicestack/client"
+import { api } from "@nice/client"
import { StaffEditorContext } from "./staff-editor";
import { useAuth } from "@web/src/providers/auth-provider";
export default function StaffForm() {
diff --git a/apps/web/src/components/models/staff/staff-list.tsx b/apps/web/src/components/models/staff/staff-list.tsx
index 2f295a5..f10018f 100644
--- a/apps/web/src/components/models/staff/staff-list.tsx
+++ b/apps/web/src/components/models/staff/staff-list.tsx
@@ -1,4 +1,4 @@
-import { Icon } from "@nicestack/iconer"; import {
+import { Icon } from "@nice/iconer"; import {
DeleteOutlined,
EditFilled,
EllipsisOutlined,
@@ -8,7 +8,7 @@ import {
ColDef,
ValueGetterParams,
} from "@ag-grid-community/core";
-import { ObjectType, StaffRowModel } from "@nicestack/common";
+import { ObjectType, StaffRowModel } from "@nice/common";
import { Menu, MenuItem } from "../../presentation/dropdown-menu";
import AgServerTable from "../../presentation/ag-server-table";
import IdCard from "../../presentation/id-card";
@@ -16,7 +16,7 @@ import { useContext, useEffect, useState } from "react";
import { StaffEditorContext } from "./staff-editor";
import PhoneBook from "../../presentation/phone-book";
import { SortDirection } from "ag-grid-community";
-import { CrudOperation, emitDataChange, useStaff } from "@nicestack/client";
+import { CrudOperation, emitDataChange, useStaff } from "@nice/client";
import { message, Tag } from "antd";
import { CustomCellRendererProps } from "@ag-grid-community/react";
const OpreationRenderer = ({ props }: { props: ICellRendererParams }) => {
diff --git a/apps/web/src/components/models/staff/staff-select.tsx b/apps/web/src/components/models/staff/staff-select.tsx
index 24e8b16..5881f2a 100644
--- a/apps/web/src/components/models/staff/staff-select.tsx
+++ b/apps/web/src/components/models/staff/staff-select.tsx
@@ -1,7 +1,7 @@
import { useMemo, useState } from "react";
import { Button, Select, Spin } from "antd";
import type { SelectProps } from "antd";
-import { api } from "@nicestack/client";
+import { api } from "@nice/client";
interface StaffSelectProps {
value?: string | string[];
onChange?: (value: string | string[]) => void;
diff --git a/apps/web/src/components/models/staff/staff-transfer.tsx b/apps/web/src/components/models/staff/staff-transfer.tsx
index a99b259..3708839 100644
--- a/apps/web/src/components/models/staff/staff-transfer.tsx
+++ b/apps/web/src/components/models/staff/staff-transfer.tsx
@@ -1,5 +1,5 @@
import { Avatar, theme, Transfer, TransferProps } from "antd";
-import { StaffDto } from "@nicestack/common";
+import { StaffDto } from "@nice/common";
import React, { forwardRef, useImperativeHandle, useMemo, useState } from "react";
// Define the ref type
diff --git a/apps/web/src/components/models/taxonomy/taxonomy-select.tsx b/apps/web/src/components/models/taxonomy/taxonomy-select.tsx
index a6f32bd..b63ad42 100644
--- a/apps/web/src/components/models/taxonomy/taxonomy-select.tsx
+++ b/apps/web/src/components/models/taxonomy/taxonomy-select.tsx
@@ -1,5 +1,5 @@
import { Button, Select } from "antd";
-import { api } from "@nicestack/client"
+import { api } from "@nice/client"
import { useEffect, useState } from "react";
// 定义组件的 props 类型
diff --git a/apps/web/src/components/models/term/taxonomy-form.tsx b/apps/web/src/components/models/term/taxonomy-form.tsx
index 8332675..3bdeee2 100644
--- a/apps/web/src/components/models/term/taxonomy-form.tsx
+++ b/apps/web/src/components/models/term/taxonomy-form.tsx
@@ -1,9 +1,9 @@
import { Form, Input, Select } from "antd";
import { useContext, useState } from "react";
-import { ObjectType } from "@nicestack/common";
-import { useTaxonomy } from "@nicestack/client";
+import { ObjectType } from "@nice/common";
+import { useTaxonomy } from "@nice/client";
import { TermEditorContext } from "./term-editor";
-import { api } from "@nicestack/client"
+import { api } from "@nice/client"
export default function TaxonomyForm() {
const { create, update } = useTaxonomy();
const [loading, setLoading] = useState(false);
diff --git a/apps/web/src/components/models/term/taxonomy-list.tsx b/apps/web/src/components/models/term/taxonomy-list.tsx
index 52822d6..2689cce 100644
--- a/apps/web/src/components/models/term/taxonomy-list.tsx
+++ b/apps/web/src/components/models/term/taxonomy-list.tsx
@@ -1,5 +1,5 @@
import React, { useContext, useMemo, useEffect, useState } from 'react';
-import { api } from "@nicestack/client";
+import { api } from "@nice/client";
import { TermEditorContext } from './term-editor';
import { Button, theme } from 'antd';
diff --git a/apps/web/src/components/models/term/term-editor.tsx b/apps/web/src/components/models/term/term-editor.tsx
index 028396f..bec26ba 100644
--- a/apps/web/src/components/models/term/term-editor.tsx
+++ b/apps/web/src/components/models/term/term-editor.tsx
@@ -1,6 +1,6 @@
import { createContext, useMemo, useState } from "react";
import { useAuth } from "@web/src/providers/auth-provider";
-import { RolePerms } from "@nicestack/common";
+import { RolePerms } from "@nice/common";
import TaxonomyModal from "./taxonomy-modal";
import TaxonomyList from "./taxonomy-list";
import TermList from "./term-list";
diff --git a/apps/web/src/components/models/term/term-form.tsx b/apps/web/src/components/models/term/term-form.tsx
index a114037..59b8594 100644
--- a/apps/web/src/components/models/term/term-form.tsx
+++ b/apps/web/src/components/models/term/term-form.tsx
@@ -1,9 +1,9 @@
import { Button, Form, Input, message, Checkbox, Spin } from "antd";
import { useContext, useEffect, useRef, useState } from "react";
-import { useTerm } from "@nicestack/client";
+import { useTerm } from "@nice/client";
import TermSelect from "./term-select";
import { TermEditorContext } from "./term-editor";
-import { api } from "@nicestack/client"
+import { api } from "@nice/client"
export default function TermForm() {
const { termForm, setTermModalOpen, taxonomyId, domainId, editId, parentId, setEditId, setParentId } = useContext(TermEditorContext);
const { create, update } = useTerm(); // Ensure you have these methods in your hooks
diff --git a/apps/web/src/components/models/term/term-import-form.tsx b/apps/web/src/components/models/term/term-import-form.tsx
index d4e4ab5..0ff4278 100644
--- a/apps/web/src/components/models/term/term-import-form.tsx
+++ b/apps/web/src/components/models/term/term-import-form.tsx
@@ -9,7 +9,7 @@ import { useContext, useState, useEffect, useCallback } from "react";
import DepartmentSelect from "../department/department-select";
import TermSelect from "../term/term-select";
import { useAuth } from "@web/src/providers/auth-provider";
-import { useTransform } from "@nicestack/client";
+import { useTransform } from "@nice/client";
import ExcelToBase64Uploader from "../../presentation/excel-to-base64-uploader";
import { TermEditorContext } from "./term-editor";
diff --git a/apps/web/src/components/models/term/term-list.tsx b/apps/web/src/components/models/term/term-list.tsx
index 082a781..433e7f8 100644
--- a/apps/web/src/components/models/term/term-list.tsx
+++ b/apps/web/src/components/models/term/term-list.tsx
@@ -8,12 +8,12 @@ import {
ImportOutlined,
PlusOutlined,
} from "@ant-design/icons";
-import { CrudOperation, emitDataChange, useTerm } from "@nicestack/client";
-import { ObjectType, Term, TreeDataNode } from "@nicestack/common";
+import { CrudOperation, emitDataChange, useTerm } from "@nice/client";
+import { ObjectType, Term, TreeDataNode } from "@nice/common";
import DepartmentSelect from "../department/department-select";
import { TermEditorContext } from "./term-editor";
import { useAuth } from "@web/src/providers/auth-provider";
-import { api } from "@nicestack/client"
+import { api } from "@nice/client"
import { Menu, MenuItem } from "../../presentation/dropdown-menu";
import AgServerTable from "../../presentation/ag-server-table";
diff --git a/apps/web/src/components/models/term/term-select.tsx b/apps/web/src/components/models/term/term-select.tsx
index b5d28a9..045e0e1 100644
--- a/apps/web/src/components/models/term/term-select.tsx
+++ b/apps/web/src/components/models/term/term-select.tsx
@@ -1,7 +1,7 @@
import { TreeSelect, TreeSelectProps } from "antd";
import React, { useEffect, useState, useCallback, useRef } from "react";
-import { getUniqueItems } from "@nicestack/common";
-import { api } from "@nicestack/client";
+import { getUniqueItems } from "@nice/common";
+import { api } from "@nice/client";
import { DefaultOptionType } from "antd/es/select";
interface TermSelectProps {
diff --git a/apps/web/src/components/models/term/term-select_BACKUP.tsx b/apps/web/src/components/models/term/term-select_BACKUP.tsx
index efac917..1dc7435 100644
--- a/apps/web/src/components/models/term/term-select_BACKUP.tsx
+++ b/apps/web/src/components/models/term/term-select_BACKUP.tsx
@@ -1,6 +1,6 @@
import { TreeSelect } from "antd";
import { useEffect, useState, useCallback, useMemo } from "react";
-import { api } from "@nicestack/client"
+import { api } from "@nice/client"
interface TermSelectProps {
defaultValue?: string | string[];
value?: string | string[];
diff --git a/apps/web/src/components/models/term/util.ts b/apps/web/src/components/models/term/util.ts
index e9bf8bf..c54910a 100644
--- a/apps/web/src/components/models/term/util.ts
+++ b/apps/web/src/components/models/term/util.ts
@@ -1,4 +1,4 @@
-import { TreeDataNode } from "@nicestack/common"
+import { TreeDataNode } from "@nice/common"
export const treeVisitor = (
data: TreeDataNode[],
key: React.Key,
diff --git a/apps/web/src/components/presentation/ag-server-table.tsx b/apps/web/src/components/presentation/ag-server-table.tsx
index 42ea345..d7f13af 100644
--- a/apps/web/src/components/presentation/ag-server-table.tsx
+++ b/apps/web/src/components/presentation/ag-server-table.tsx
@@ -29,12 +29,12 @@ import { ClipboardModule } from "@ag-grid-enterprise/clipboard";
import { MenuModule } from "@ag-grid-enterprise/menu";
import { ServerSideRowModelModule } from "@ag-grid-enterprise/server-side-row-model";
import { AG_GRID_LOCALE_CH } from "@web/src/locale/ag-grid-locale";
-import { api, CrudOperation, emitDataChange } from "@nicestack/client"
+import { api, CrudOperation, emitDataChange } from "@nice/client"
import { message } from "antd";
import { useLocation } from "react-router-dom";
import { useAuth } from "@web/src/providers/auth-provider";
-import { EventBus } from "@nicestack/client";
-import { ObjectType } from "@nicestack/common";
+import { EventBus } from "@nice/client";
+import { ObjectType } from "@nice/common";
ModuleRegistry.registerModules([
MasterDetailModule,
diff --git a/apps/web/src/components/presentation/collapse-section.tsx b/apps/web/src/components/presentation/collapse-section.tsx
index 0dc241d..072e596 100644
--- a/apps/web/src/components/presentation/collapse-section.tsx
+++ b/apps/web/src/components/presentation/collapse-section.tsx
@@ -1,6 +1,6 @@
import React, { useState } from "react";
import { useLocation, useNavigate } from "react-router-dom";
-import { Icon } from "@nicestack/iconer";
+import { Icon } from "@nice/iconer";
import { theme } from "antd";
import { motion } from "framer-motion"; // Import Framer Motion
diff --git a/apps/web/src/components/presentation/dropdown-menu.tsx b/apps/web/src/components/presentation/dropdown-menu.tsx
index 09716bb..3442df2 100644
--- a/apps/web/src/components/presentation/dropdown-menu.tsx
+++ b/apps/web/src/components/presentation/dropdown-menu.tsx
@@ -24,7 +24,7 @@ import {
useTypeahead,
} from "@floating-ui/react";
import * as React from "react";
-import { Icon } from "@nicestack/iconer";
+import { Icon } from "@nice/iconer";
const MenuContext = React.createContext<{
getItemProps: (
diff --git a/apps/web/src/components/presentation/form/FormArrayField.tsx b/apps/web/src/components/presentation/form/FormArrayField.tsx
index 07245bf..93c5b27 100644
--- a/apps/web/src/components/presentation/form/FormArrayField.tsx
+++ b/apps/web/src/components/presentation/form/FormArrayField.tsx
@@ -1,9 +1,9 @@
import { useFormContext } from 'react-hook-form';
import { PlusIcon, XMarkIcon, Bars3Icon } from '@heroicons/react/24/outline';
import { Reorder } from 'framer-motion';
-import { v4 as uuidv4 } from 'uuid';
import { useState } from 'react';
import FormError from './FormError';
+import { UUIDGenerator } from '@nice/common';
interface ArrayFieldProps {
name: string;
label: string;
@@ -21,7 +21,7 @@ export function FormArrayField({ name,
inputProps = {} }: ArrayFieldProps) {
const { register, watch, setValue, formState: { errors }, trigger } = useFormContext();
const [items, setItems] = useState(() =>
- (watch(name) as string[])?.map(value => ({ id: uuidv4(), value })) || []
+ (watch(name) as string[])?.map(value => ({ id: UUIDGenerator.generate(), value })) || []
);
const error = errors[name]?.message as string;
@@ -76,7 +76,7 @@ export function FormArrayField({ name,