feat:开始与结束时间合并展示

This commit is contained in:
1708-huayu 2025-06-17 19:01:54 +08:00
parent bad15eb312
commit 42e399fc91
11 changed files with 343 additions and 222 deletions

View File

@ -1,9 +1,9 @@
# 前缀为NEXT_PUBLIC_才可以被浏览器使用
# NEXT_PUBLIC_TODO_REQUEST_URL=http://localhost:8092
# NEXT_PUBLIC_SECURITY_REQUEST_URL=http://localhost:8091
NEXT_PUBLIC_TODO_REQUEST_URL=http://localhost:8092
NEXT_PUBLIC_SECURITY_REQUEST_URL=http://localhost:8091
# NEXT_PUBLIC_TODO_REQUEST_URL=http://localhost:80/todo-server
# NEXT_PUBLIC_SECURITY_REQUEST_URL=http://localhost:80/security-server
NEXT_PUBLIC_TODO_REQUEST_URL=http://www.huaruyu.com/todo-server
NEXT_PUBLIC_SECURITY_REQUEST_URL=http://www.huaruyu.com/security-server
# NEXT_PUBLIC_TODO_REQUEST_URL=https://www.huaruyu.com/todo-server
# NEXT_PUBLIC_SECURITY_REQUEST_URL=https://www.huaruyu.com/security-server

View File

@ -1,2 +1,2 @@
NEXT_PUBLIC_TODO_REQUEST_URL=http://www.huaruyu.com/todo-server
NEXT_PUBLIC_SECURITY_REQUEST_URL=http://www.huaruyu.com/security-server
NEXT_PUBLIC_TODO_REQUEST_URL=https://www.huaruyu.com/todo-server
NEXT_PUBLIC_SECURITY_REQUEST_URL=https://www.huaruyu.com/security-server

242
package-lock.json generated
View File

@ -16,7 +16,7 @@
"axios": "^1.6.8",
"dayjs": "^1.11.13",
"js-cookie": "^3.0.5",
"next": "14.1.3",
"next": "14.2.29",
"postcss": "8.4.31",
"react": "^18",
"react-big-calendar": "^1.12.2",
@ -33,7 +33,7 @@
"@types/react-dom": "^18",
"@vercel/style-guide": "^5.0.1",
"eslint": "^8",
"eslint-config-next": "14.1.3",
"eslint-config-next": "14.2.29",
"prettier": "3.0.3",
"prettier-plugin-tailwindcss": "0.5.4",
"react-beautiful-dnd": "^13.1.1",
@ -1151,23 +1151,23 @@
}
},
"node_modules/@next/env": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/env/-/env-14.1.3.tgz",
"integrity": "sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ=="
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/env/-/env-14.2.29.tgz",
"integrity": "sha512-UzgLR2eBfhKIQt0aJ7PWH7XRPYw7SXz0Fpzdl5THjUnvxy4kfBk9OU4RNPNiETewEEtaBcExNFNn1QWH8wQTjg=="
},
"node_modules/@next/eslint-plugin-next": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz",
"integrity": "sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.29.tgz",
"integrity": "sha512-qpxSYiPNJTr9RzqjGi5yom8AIC8Kgdtw4oNIXAB/gDYMDctmfMEv452FRUhT06cWPgcmSsbZiEPYhbFiQtCWTg==",
"dev": true,
"dependencies": {
"glob": "10.3.10"
}
},
"node_modules/@next/swc-darwin-arm64": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.3.tgz",
"integrity": "sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.29.tgz",
"integrity": "sha512-wWtrAaxCVMejxPHFb1SK/PVV1WDIrXGs9ki0C/kUM8ubKHQm+3hU9MouUywCw8Wbhj3pewfHT2wjunLEr/TaLA==",
"cpu": [
"arm64"
],
@ -1180,9 +1180,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.3.tgz",
"integrity": "sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.29.tgz",
"integrity": "sha512-7Z/jk+6EVBj4pNLw/JQrvZVrAh9Bv8q81zCFSfvTMZ51WySyEHWVpwCEaJY910LyBftv2F37kuDPQm0w9CEXyg==",
"cpu": [
"x64"
],
@ -1195,9 +1195,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.3.tgz",
"integrity": "sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.29.tgz",
"integrity": "sha512-o6hrz5xRBwi+G7JFTHc+RUsXo2lVXEfwh4/qsuWBMQq6aut+0w98WEnoNwAwt7hkEqegzvazf81dNiwo7KjITw==",
"cpu": [
"arm64"
],
@ -1210,9 +1210,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.3.tgz",
"integrity": "sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.29.tgz",
"integrity": "sha512-9i+JEHBOVgqxQ92HHRFlSW1EQXqa/89IVjtHgOqsShCcB/ZBjTtkWGi+SGCJaYyWkr/lzu51NTMCfKuBf7ULNw==",
"cpu": [
"arm64"
],
@ -1225,9 +1225,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.3.tgz",
"integrity": "sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.29.tgz",
"integrity": "sha512-B7JtMbkUwHijrGBOhgSQu2ncbCYq9E7PZ7MX58kxheiEOwdkM+jGx0cBb+rN5AeqF96JypEppK6i/bEL9T13lA==",
"cpu": [
"x64"
],
@ -1240,9 +1240,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.3.tgz",
"integrity": "sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.29.tgz",
"integrity": "sha512-yCcZo1OrO3aQ38B5zctqKU1Z3klOohIxug6qdiKO3Q3qNye/1n6XIs01YJ+Uf+TdpZQ0fNrOQI2HrTLF3Zprnw==",
"cpu": [
"x64"
],
@ -1255,9 +1255,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.3.tgz",
"integrity": "sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.29.tgz",
"integrity": "sha512-WnrfeOEtTVidI9Z6jDLy+gxrpDcEJtZva54LYC0bSKQqmyuHzl0ego+v0F/v2aXq0am67BRqo/ybmmt45Tzo4A==",
"cpu": [
"arm64"
],
@ -1270,9 +1270,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.3.tgz",
"integrity": "sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.29.tgz",
"integrity": "sha512-vkcriFROT4wsTdSeIzbxaZjTNTFKjSYmLd8q/GVH3Dn8JmYjUKOuKXHK8n+lovW/kdcpIvydO5GtN+It2CvKWA==",
"cpu": [
"ia32"
],
@ -1285,9 +1285,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.3.tgz",
"integrity": "sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.29.tgz",
"integrity": "sha512-iPPwUEKnVs7pwR0EBLJlwxLD7TTHWS/AoVZx1l9ZQzfQciqaFEr5AlYzA2uB6Fyby1IF18t4PL0nTpB+k4Tzlw==",
"cpu": [
"x64"
],
@ -1518,11 +1518,17 @@
"integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==",
"dev": true
},
"node_modules/@swc/counter": {
"version": "0.1.3",
"resolved": "https://registry.npmmirror.com/@swc/counter/-/counter-0.1.3.tgz",
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
},
"node_modules/@swc/helpers": {
"version": "0.5.2",
"resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.2.tgz",
"integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
"version": "0.5.5",
"resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.5.tgz",
"integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
"dependencies": {
"@swc/counter": "^0.1.3",
"tslib": "^2.4.0"
}
},
@ -2986,14 +2992,15 @@
}
},
"node_modules/eslint-config-next": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/eslint-config-next/-/eslint-config-next-14.1.3.tgz",
"integrity": "sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/eslint-config-next/-/eslint-config-next-14.2.29.tgz",
"integrity": "sha512-KBbGfrcs4y+YxNb9y9IqEcZhQBbtIHyw5ICiCzL+x/0AzYCUwMHJ6IwGDswkQj/SDlzgexDAE258GSpQ8TH3MQ==",
"dev": true,
"dependencies": {
"@next/eslint-plugin-next": "14.1.3",
"@next/eslint-plugin-next": "14.2.29",
"@rushstack/eslint-patch": "^1.3.3",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
"@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"eslint-import-resolver-node": "^0.3.6",
"eslint-import-resolver-typescript": "^3.5.2",
"eslint-plugin-import": "^2.28.1",
@ -4937,12 +4944,12 @@
"dev": true
},
"node_modules/next": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/next/-/next-14.1.3.tgz",
"integrity": "sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/next/-/next-14.2.29.tgz",
"integrity": "sha512-s98mCOMOWLGGpGOfgKSnleXLuegvvH415qtRZXpSp00HeEgdmrxmwL9cgKU+h4XrhB16zEI5d/7BnkS3ATInsA==",
"dependencies": {
"@next/env": "14.1.3",
"@swc/helpers": "0.5.2",
"@next/env": "14.2.29",
"@swc/helpers": "0.5.5",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
"graceful-fs": "^4.2.11",
@ -4956,18 +4963,19 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
"@next/swc-darwin-arm64": "14.1.3",
"@next/swc-darwin-x64": "14.1.3",
"@next/swc-linux-arm64-gnu": "14.1.3",
"@next/swc-linux-arm64-musl": "14.1.3",
"@next/swc-linux-x64-gnu": "14.1.3",
"@next/swc-linux-x64-musl": "14.1.3",
"@next/swc-win32-arm64-msvc": "14.1.3",
"@next/swc-win32-ia32-msvc": "14.1.3",
"@next/swc-win32-x64-msvc": "14.1.3"
"@next/swc-darwin-arm64": "14.2.29",
"@next/swc-darwin-x64": "14.2.29",
"@next/swc-linux-arm64-gnu": "14.2.29",
"@next/swc-linux-arm64-musl": "14.2.29",
"@next/swc-linux-x64-gnu": "14.2.29",
"@next/swc-linux-x64-musl": "14.2.29",
"@next/swc-win32-arm64-msvc": "14.2.29",
"@next/swc-win32-ia32-msvc": "14.2.29",
"@next/swc-win32-x64-msvc": "14.2.29"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
"@playwright/test": "^1.41.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sass": "^1.3.0"
@ -4976,6 +4984,9 @@
"@opentelemetry/api": {
"optional": true
},
"@playwright/test": {
"optional": true
},
"sass": {
"optional": true
}
@ -8561,71 +8572,71 @@
}
},
"@next/env": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/env/-/env-14.1.3.tgz",
"integrity": "sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ=="
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/env/-/env-14.2.29.tgz",
"integrity": "sha512-UzgLR2eBfhKIQt0aJ7PWH7XRPYw7SXz0Fpzdl5THjUnvxy4kfBk9OU4RNPNiETewEEtaBcExNFNn1QWH8wQTjg=="
},
"@next/eslint-plugin-next": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz",
"integrity": "sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.29.tgz",
"integrity": "sha512-qpxSYiPNJTr9RzqjGi5yom8AIC8Kgdtw4oNIXAB/gDYMDctmfMEv452FRUhT06cWPgcmSsbZiEPYhbFiQtCWTg==",
"dev": true,
"requires": {
"glob": "10.3.10"
}
},
"@next/swc-darwin-arm64": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.3.tgz",
"integrity": "sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.29.tgz",
"integrity": "sha512-wWtrAaxCVMejxPHFb1SK/PVV1WDIrXGs9ki0C/kUM8ubKHQm+3hU9MouUywCw8Wbhj3pewfHT2wjunLEr/TaLA==",
"optional": true
},
"@next/swc-darwin-x64": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.3.tgz",
"integrity": "sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.29.tgz",
"integrity": "sha512-7Z/jk+6EVBj4pNLw/JQrvZVrAh9Bv8q81zCFSfvTMZ51WySyEHWVpwCEaJY910LyBftv2F37kuDPQm0w9CEXyg==",
"optional": true
},
"@next/swc-linux-arm64-gnu": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.3.tgz",
"integrity": "sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.29.tgz",
"integrity": "sha512-o6hrz5xRBwi+G7JFTHc+RUsXo2lVXEfwh4/qsuWBMQq6aut+0w98WEnoNwAwt7hkEqegzvazf81dNiwo7KjITw==",
"optional": true
},
"@next/swc-linux-arm64-musl": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.3.tgz",
"integrity": "sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.29.tgz",
"integrity": "sha512-9i+JEHBOVgqxQ92HHRFlSW1EQXqa/89IVjtHgOqsShCcB/ZBjTtkWGi+SGCJaYyWkr/lzu51NTMCfKuBf7ULNw==",
"optional": true
},
"@next/swc-linux-x64-gnu": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.3.tgz",
"integrity": "sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.29.tgz",
"integrity": "sha512-B7JtMbkUwHijrGBOhgSQu2ncbCYq9E7PZ7MX58kxheiEOwdkM+jGx0cBb+rN5AeqF96JypEppK6i/bEL9T13lA==",
"optional": true
},
"@next/swc-linux-x64-musl": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.3.tgz",
"integrity": "sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.29.tgz",
"integrity": "sha512-yCcZo1OrO3aQ38B5zctqKU1Z3klOohIxug6qdiKO3Q3qNye/1n6XIs01YJ+Uf+TdpZQ0fNrOQI2HrTLF3Zprnw==",
"optional": true
},
"@next/swc-win32-arm64-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.3.tgz",
"integrity": "sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.29.tgz",
"integrity": "sha512-WnrfeOEtTVidI9Z6jDLy+gxrpDcEJtZva54LYC0bSKQqmyuHzl0ego+v0F/v2aXq0am67BRqo/ybmmt45Tzo4A==",
"optional": true
},
"@next/swc-win32-ia32-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.3.tgz",
"integrity": "sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.29.tgz",
"integrity": "sha512-vkcriFROT4wsTdSeIzbxaZjTNTFKjSYmLd8q/GVH3Dn8JmYjUKOuKXHK8n+lovW/kdcpIvydO5GtN+It2CvKWA==",
"optional": true
},
"@next/swc-win32-x64-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.3.tgz",
"integrity": "sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.29.tgz",
"integrity": "sha512-iPPwUEKnVs7pwR0EBLJlwxLD7TTHWS/AoVZx1l9ZQzfQciqaFEr5AlYzA2uB6Fyby1IF18t4PL0nTpB+k4Tzlw==",
"optional": true
},
"@nicolo-ribaudo/eslint-scope-5-internals": {
@ -8782,11 +8793,17 @@
"integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==",
"dev": true
},
"@swc/counter": {
"version": "0.1.3",
"resolved": "https://registry.npmmirror.com/@swc/counter/-/counter-0.1.3.tgz",
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
},
"@swc/helpers": {
"version": "0.5.2",
"resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.2.tgz",
"integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
"version": "0.5.5",
"resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.5.tgz",
"integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
"requires": {
"@swc/counter": "^0.1.3",
"tslib": "^2.4.0"
}
},
@ -9981,14 +9998,15 @@
}
},
"eslint-config-next": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/eslint-config-next/-/eslint-config-next-14.1.3.tgz",
"integrity": "sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/eslint-config-next/-/eslint-config-next-14.2.29.tgz",
"integrity": "sha512-KBbGfrcs4y+YxNb9y9IqEcZhQBbtIHyw5ICiCzL+x/0AzYCUwMHJ6IwGDswkQj/SDlzgexDAE258GSpQ8TH3MQ==",
"dev": true,
"requires": {
"@next/eslint-plugin-next": "14.1.3",
"@next/eslint-plugin-next": "14.2.29",
"@rushstack/eslint-patch": "^1.3.3",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
"@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"eslint-import-resolver-node": "^0.3.6",
"eslint-import-resolver-typescript": "^3.5.2",
"eslint-plugin-import": "^2.28.1",
@ -11486,21 +11504,21 @@
"dev": true
},
"next": {
"version": "14.1.3",
"resolved": "https://registry.npmmirror.com/next/-/next-14.1.3.tgz",
"integrity": "sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==",
"version": "14.2.29",
"resolved": "https://registry.npmmirror.com/next/-/next-14.2.29.tgz",
"integrity": "sha512-s98mCOMOWLGGpGOfgKSnleXLuegvvH415qtRZXpSp00HeEgdmrxmwL9cgKU+h4XrhB16zEI5d/7BnkS3ATInsA==",
"requires": {
"@next/env": "14.1.3",
"@next/swc-darwin-arm64": "14.1.3",
"@next/swc-darwin-x64": "14.1.3",
"@next/swc-linux-arm64-gnu": "14.1.3",
"@next/swc-linux-arm64-musl": "14.1.3",
"@next/swc-linux-x64-gnu": "14.1.3",
"@next/swc-linux-x64-musl": "14.1.3",
"@next/swc-win32-arm64-msvc": "14.1.3",
"@next/swc-win32-ia32-msvc": "14.1.3",
"@next/swc-win32-x64-msvc": "14.1.3",
"@swc/helpers": "0.5.2",
"@next/env": "14.2.29",
"@next/swc-darwin-arm64": "14.2.29",
"@next/swc-darwin-x64": "14.2.29",
"@next/swc-linux-arm64-gnu": "14.2.29",
"@next/swc-linux-arm64-musl": "14.2.29",
"@next/swc-linux-x64-gnu": "14.2.29",
"@next/swc-linux-x64-musl": "14.2.29",
"@next/swc-win32-arm64-msvc": "14.2.29",
"@next/swc-win32-ia32-msvc": "14.2.29",
"@next/swc-win32-x64-msvc": "14.2.29",
"@swc/helpers": "0.5.5",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
"graceful-fs": "^4.2.11",

View File

@ -17,7 +17,7 @@
"axios": "^1.6.8",
"dayjs": "^1.11.13",
"js-cookie": "^3.0.5",
"next": "14.1.3",
"next": "14.2.29",
"postcss": "8.4.31",
"react": "^18",
"react-big-calendar": "^1.12.2",
@ -34,7 +34,7 @@
"@types/react-dom": "^18",
"@vercel/style-guide": "^5.0.1",
"eslint": "^8",
"eslint-config-next": "14.1.3",
"eslint-config-next": "14.2.29",
"prettier": "3.0.3",
"prettier-plugin-tailwindcss": "0.5.4",
"react-beautiful-dnd": "^13.1.1",

View File

@ -6,14 +6,6 @@
padding: 6rem;
min-height: 100vh;
}
.icon {
/* em 当前元素的 font-size 值,如果元素没有显式设置 font-size则继承父元素的 font-size。 控制与字体大小相关的属性*/
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
.description {
display: inherit;
justify-content: inherit;

View File

@ -32,6 +32,9 @@ export type TaskMessage ={
description: string;
state: string;
priority: string;
fId?:string;
fName?:string;
taskType?:string;
}

View File

@ -1,7 +1,8 @@
import {unstable_noStore as noStore} from 'next/cache';
import {AxiosResponse} from "axios";
import {httpReq} from "@/utils/axiosReq";
import {DataType, DictType, ResponseVO, ResultPage} from "@/lib/definitions";
import {DataType, DictType, Request, ResponseVO, ResultPage} from "@/lib/definitions";
import {TaskWebSelectVO} from "@/lib/task/project/definitions";
export async function getTaskTreeResult(requestParam: string): Promise<ResponseVO<ResultPage<DataType>>> {
noStore();
@ -13,6 +14,16 @@ export async function getTaskTreeResult(requestParam: string): Promise<ResponseV
return response.data;
}
export async function getTaskTreeResultAPI(requestParam: Request<TaskWebSelectVO>): Promise<ResponseVO<ResultPage<DataType>>> {
noStore();
// 使用 Axios 发送 POST 请求获取数据
const response: AxiosResponse<ResponseVO<ResultPage<DataType>>> = await httpReq.post(
process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/V2/task/select',requestParam);
// 从响应中提取数据并返回
console.log("response.data", response.data)
return response.data;
}
export async function commonUpdate(requestParam: any): Promise<ResponseVO<string>> {
noStore();
// 使用 Axios 发送 PUT 请求获取数据
@ -65,6 +76,18 @@ export async function deleteTask(id: string): Promise<ResponseVO<string>> {
return response.data;
}
/**
*
* @param id
*/
export async function deleteTaskAPI(id: string): Promise<ResponseVO<string>> {
noStore();
// 使用 Axios 发送 DELETE 删除数据
const response: AxiosResponse<ResponseVO<string>> = await httpReq.delete(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/V2/task/' + id);
// 从响应中提取数据并返回
return response.data;
}
//0重要紧急红色1,重要不紧急黄色2不重要紧急灰色3不重要不紧急绿色
export const taskPriorityList: DictType[] = [
{

View File

@ -0,0 +1,13 @@
import {Dayjs} from "dayjs";
export type TaskWebSelectVO ={
name?:string,
description?:string,
treeList:boolean,
treeFilter?:boolean,
pid?:string,
state?:string[],
priority?:string[],
expectedStartTimeStart?:Dayjs,
expectedStartTimeEnd?:Dayjs
}

View File

@ -16,6 +16,18 @@ input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
{
html {
font-size: 16px;
padding: 0;
margin: 0;
box-sizing: border-box;
}
.icon {
/* em 当前元素的 font-size 值,如果元素没有显式设置 font-size则继承父元素的 font-size。 控制与字体大小相关的属性*/
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
padding-right: 0.5em;
}

View File

@ -8,4 +8,7 @@
.css-1k007xr .ant-pro-card .ant-pro-card-border .ant-pro-card-bordered .ant-pro-table-search .ant-pro-table-search-query-filter{
margin-block-end:0;
border-bottom: none;
}
.ant-form-item .ant-form-item-label{
overflow: visible;
}

View File

@ -9,7 +9,7 @@ import {Button, DatePicker, Dropdown, Space, Switch, Tag, Tooltip} from 'antd';
import React, {Fragment, useContext, useEffect, useRef} from 'react';
import {DataType} from "@/lib/definitions";
import {
getTaskTreeResult,
getTaskTreeResult, getTaskTreeResultAPI,
OPERATION_BUTTON_TYPE,
taskPriorityList,
taskStateList,
@ -19,20 +19,24 @@ import OperationButton from "@/ui/task/OperationButton";
import dayjs from "dayjs";
import '@/ui/task/project/TreeTablePro.modules.css'
import {useSearchParams} from "next/navigation";
import {TaskWebSelectVO} from "@/lib/task/project/definitions";
const TreeTablePro: React.FC = () => {
// 刷新表格
const actionRef = useRef<ActionType>();
const formRef = useRef<ProFormInstance>();
// 列表和树切换
const [switchChecked, setSwitchChecked] = React.useState(true);
// 树子集是否参与过滤
const [filterChecked, setFilterChecked] = React.useState(true);
const [current,setCurrent] = React.useState(1);
const [pageSize,setPageSize] = React.useState(10);
// 页码信息
const [current, setCurrent] = React.useState(1);
const [pageSize, setPageSize] = React.useState(10);
// 获取路径参数pid
const pathPid = useSearchParams().get('pid');
const pid = pathPid?pathPid:'0';
const { RangePicker } = DatePicker;
console.log("TreeTablePro",useSearchParams().get('pid'))
const pid = pathPid ? pathPid : '0';
// 时间范围选择
const {RangePicker} = DatePicker;
// 列字段定义
const columns: ProColumns<DataType>[] = [
{
key: 'name',
@ -50,13 +54,13 @@ const TreeTablePro: React.FC = () => {
},
],
},
render:(_, record)=>{
render: (_, record) => {
return <Fragment>
<svg className="icon" aria-hidden="true">
{record.fId && <svg className="icon" aria-hidden="true">
<use xlinkHref="#icon-tuandui"></use>
</svg>
{record.name}
</Fragment>
</svg>}
<text>{record.name}</text>
</Fragment>
}
},
{
@ -68,17 +72,15 @@ const TreeTablePro: React.FC = () => {
key: 'priority',
title: '任务优先级',
dataIndex: 'priority',
order:2,
order: 2,
valueType: 'select',
// 字段对应的组件的属性
fieldProps: {
mode:"tags",
mode: "tags",
options: taskPriorityList.map(item => {
return {label: item.name, value: item.code}
})
},
// renderFormItem: (_, { defaultRender }) => {
// return defaultRender(_);
// },
render: (_, record) => (
<Space>
{
@ -88,7 +90,8 @@ const TreeTablePro: React.FC = () => {
// </Tag>
<div>
{/*< HeartFilled/>*/}
<CheckSquareFilled style={{color:taskPriorityList.find(item => item.code === record.priority?.toString())?.color}}/>
<CheckSquareFilled
style={{color: taskPriorityList.find(item => item.code === record.priority?.toString())?.color}}/>
{taskPriorityList.find(item => item.code === record.priority?.toString())?.name}
</div>
}
@ -99,112 +102,166 @@ const TreeTablePro: React.FC = () => {
title: '任务状态',
dataIndex: 'state',
valueType: 'select',
order:3,
initialValue:['8','9'],
order: 3,
initialValue: ['8', '9'],
fieldProps: {
defaultValue:['8','9'],
mode:"tags",
defaultValue: ['8', '9'],
mode: "tags",
options: taskStateList.map(item => {
return {label: item.name, value: item.code}
}),
},
}, {
key: 'expectedStartTime',
title: '期望开始时间',
title: '期望时间',
dataIndex: 'expectedStartTime',
valueType: 'date',
order:1,
renderFormItem:()=><RangePicker allowEmpty={[true,true]}/>
}, {
key:'expectedEndTime',
title: '期望结束时间',
dataIndex: 'expectedEndTime',
valueType: 'date',
order: 1,
render: (_, record) => {
return <Fragment>
<div>
<div>
<text>:</text>
{record.expectedStartTime ? dayjs(record.expectedStartTime).format("YYYY-MM-DD HH:mm") : "-"}
</div>
<div>
<text>:</text>
{record.expectedEndTime ? dayjs(record.expectedEndTime).format("YYYY-MM-DD HH:mm") : "-"}
</div>
</div>
</Fragment>
},
renderFormItem: () => <RangePicker allowEmpty={[true, true]}/>
}, {
key: 'actualStartTime',
title: '实际开始时间',
title: '实际时间',
dataIndex: 'actualStartTime',
valueType: 'date',
}, {
key: 'actualEndTime',
title: '期望结束时间',
dataIndex: 'actualEndTime',
valueType: 'date',
render: (_, record) => {
return <Fragment>
<div>
<div>
<text>:</text>
{record.actualStartTime ? dayjs(record.actualStartTime).format("YYYY-MM-DD HH:mm") : "-"}
</div>
<div>
<text>:</text>
{record.actualEndTime ? dayjs(record.actualEndTime).format("YYYY-MM-DD HH:mm") : "-"}
</div>
</div>
</Fragment>
},
}, {
key: 'option',
title: '操作',
valueType: 'option',
render: (_, record) => <OperationButton itemId={record.id} pid={record.pid} pPid={record.pPid} refreshDate={()=>{
actionRef.current?.reload( false);
}}/>,
render: (_, record) => <OperationButton itemId={record.id} pid={record.pid} pPid={record.pPid}
refreshDate={() => {
actionRef.current?.reload(false);
}}/>,
}
];
let toolBarRenderList = [
<DetailModelForm open={false} haveButton={true} key={1} operationId={OPERATION_BUTTON_TYPE.ADD} description='添加主线任务' reloadData={()=>{
actionRef.current?.reload( false);
<DetailModelForm open={false} haveButton={true} key={1} operationId={OPERATION_BUTTON_TYPE.ADD}
description='添加主线任务' reloadData={() => {
actionRef.current?.reload(false);
}}/>,
<Switch key={2} checkedChildren="树" unCheckedChildren="列表" checked={switchChecked}
onChange={(checked, event) => {setSwitchChecked(checked);actionRef.current?.reset?.();}} />,
onChange={(checked, event) => {
setSwitchChecked(checked);
actionRef.current?.reset?.();
}}/>,
];
if (switchChecked){
toolBarRenderList.push(<><span></span> <Tooltip title="开启树子集过滤后儿子不满足条件,孙子满足条件,儿子和孙子都不会显示。"><QuestionCircleOutlined /></Tooltip>
if (switchChecked) {
toolBarRenderList.push(<><span></span> <Tooltip
title="开启树子集过滤后儿子不满足条件,孙子满足条件,儿子和孙子都不会显示。"><QuestionCircleOutlined/></Tooltip>
<Switch checkedChildren="是" unCheckedChildren="否" checked={filterChecked}
onChange={(checked, event) => {setFilterChecked(checked);
actionRef.current?.reload( false);
}} /></>)
onChange={(checked, event) => {
setFilterChecked(checked);
actionRef.current?.reload(false);
}}/></>)
}
useEffect(()=>{
actionRef.current?.reload( false)
},[useSearchParams()])
useEffect(() => {
actionRef.current?.reload(false)
}, [useSearchParams()])
return (
<ProTable<DataType>
columns={columns}
actionRef={actionRef}
cardBordered
request={async (params, sort, filter) => {
console.log('request',params,params.keyword,sort, filter);
const searchList=[]
if (switchChecked) {
searchList.push({name:'tree',value:'TRUE',operateType:"TREE"})
}
searchList.push({name:"pid",value:pid,operateType:"="})
if (filterChecked) {
searchList.push({name:'tree',value:'TRUE',operateType:"TREE-FILTER"})
}
if (params.state instanceof Array&&params.state.length>0){
searchList.push({name:'state',value:params.state.join(','),operateType:"IN"})
}
if (params.priority instanceof Array&&params.state.length>0){
searchList.push({name:'priority',value:params.priority.join(','),operateType:"IN"})
}
if (params.expectedStartTime instanceof Array&&params.expectedStartTime.length>0){
if (params.expectedStartTime[0]){
searchList.push({name:'expectedStartTime',value:dayjs(params.expectedStartTime[0]),operateType:">="})
// console.log('request',params,params.keyword,sort, filter);
// const searchList=[]
// if (switchChecked) {
// searchList.push({name:'tree',value:'TRUE',operateType:"TREE"})
// }
// searchList.push({name:"pid",value:pid,operateType:"="})
// if (filterChecked) {
// searchList.push({name:'tree',value:'TRUE',operateType:"TREE-FILTER"})
// }
// if (params.state instanceof Array&&params.state.length>0){
// searchList.push({name:'state',value:params.state.join(','),operateType:"IN"})
// }
// if (params.priority instanceof Array&&params.state.length>0){
// searchList.push({name:'priority',value:params.priority.join(','),operateType:"IN"})
// }
// if (params.expectedStartTime instanceof Array&&params.expectedStartTime.length>0){
// if (params.expectedStartTime[0]){
// searchList.push({name:'expectedStartTime',value:dayjs(params.expectedStartTime[0]),operateType:">="})
// }
// if (params.expectedStartTime[1]){
// searchList.push({name:'expectedStartTime',value:dayjs(params.expectedStartTime[1]),operateType:"<="})
// }
// }
// if (params.name){
// searchList.push({name:'name',value:params.name,operateType:"LIKE"})
// }
// if (params.description){
// searchList.push({name:'description',value:params.description,operateType:"LIKE"})
// }
// if (params.code){
// searchList.push({name:'code',value:params.code,operateType:"="})
// }
// let request = JSON.stringify({
// pageSize:params.pageSize,
// pageNumber:params.current,
// data: searchList
// })
// // const response = await getTaskTreeResult(request)
const search: TaskWebSelectVO =
{
treeList: switchChecked,
treeFilter: filterChecked,
pid: pid,
name: params.name,
description: params.description,
}
if (params.expectedStartTime[1]){
searchList.push({name:'expectedStartTime',value:dayjs(params.expectedStartTime[1]),operateType:"<="})
if (params.state) {
search.state = params.state.join(',');
}
if (params.priority) {
search.priority = params.priority.join(',');
}
if (params.expectedStartTime instanceof Array && params.expectedStartTime.length > 0) {
if (params.expectedStartTime[0]) {
search.expectedStartTimeStart = dayjs(params.expectedStartTime[0])
}
if (params.expectedStartTime[1]) {
search.expectedStartTimeEnd = dayjs(params.expectedStartTime[1])
}
}
if (params.name){
searchList.push({name:'name',value:params.name,operateType:"LIKE"})
}
if (params.description){
searchList.push({name:'description',value:params.description,operateType:"LIKE"})
}
if (params.code){
searchList.push({name:'code',value:params.code,operateType:"="})
}
let request = JSON.stringify({
pageSize:params.pageSize,
pageNumber:params.current,
data: searchList
const response1 = await getTaskTreeResultAPI({
pageSize: params.pageSize ? params.pageSize : pageSize,
pageNumber: params.current ? params.pageNumber : current,
data: search
})
const response = await getTaskTreeResult(request)
return {
data: response.data.content,
success: response.status.success,
total :response.data.totalElements,
data: response1.data.content,
success: response1.status.success,
total: response1.data.totalElements,
}
}}
editable={{
@ -225,8 +282,8 @@ const TreeTablePro: React.FC = () => {
pagination={{
current: current,
pageSize: pageSize,
onChange: (current,pageSize) => {
console.log('onChange',current,pageSize)
onChange: (current, pageSize) => {
console.log('onChange', current, pageSize)
setCurrent(current)
setPageSize(pageSize)
}
@ -234,7 +291,7 @@ const TreeTablePro: React.FC = () => {
dateFormatter="string"
scroll={{y: 580}}
// headerTitle="任务管理"
toolBarRender={()=>toolBarRenderList}>
toolBarRender={() => toolBarRenderList}>
</ProTable>
);
};