diff --git a/package-lock.json b/package-lock.json index 7b8d2ef..2f73c04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "assistant-todo", "version": "0.1.0", "dependencies": { + "@ant-design/pro-components": "^2.7.1", "@heroicons/react": "^2.0.18", "@tailwindcss/forms": "^0.5.7", "antd": "^5.16.1", @@ -110,6 +111,276 @@ "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==" }, + "node_modules/@ant-design/pro-card": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-card/-/pro-card-2.6.1.tgz", + "integrity": "sha512-LiZwTUFHNU8t7bJsp51DnSmuct2uY2WHxl+dMcWCpsW2V6KRPws4raGo96SDMPfGjwbF0YrMZhR9yO7qmI5nag==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.14.1", + "@ant-design/pro-utils": "2.15.7", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.4.0" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-components": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-components/-/pro-components-2.7.1.tgz", + "integrity": "sha512-9e1BCrDNZ4NZXt7sY9eotVOFa506Pnwhsg9alRWfAzn36IpLt0o9/VllBSAR3WeGaUn452vEEOWJTsCVW4Jq4w==", + "dependencies": { + "@ant-design/pro-card": "2.6.1", + "@ant-design/pro-descriptions": "2.5.37", + "@ant-design/pro-field": "2.14.10", + "@ant-design/pro-form": "2.26.0", + "@ant-design/pro-layout": "7.19.1", + "@ant-design/pro-list": "2.5.52", + "@ant-design/pro-provider": "2.14.1", + "@ant-design/pro-skeleton": "2.1.11", + "@ant-design/pro-table": "3.15.3", + "@ant-design/pro-utils": "2.15.7", + "@babel/runtime": "^7.16.3" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-descriptions": { + "version": "2.5.37", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-descriptions/-/pro-descriptions-2.5.37.tgz", + "integrity": "sha512-YaMs0IGQ39n8jMDUQjhpWW6uZMDktgxAAYwUE9s1tF2XK/ySQSdfylsGvMHZFKqWPRnOqNFIYQ1kAcDLIO9KXQ==", + "dependencies": { + "@ant-design/pro-field": "2.14.10", + "@ant-design/pro-form": "2.26.0", + "@ant-design/pro-skeleton": "2.1.11", + "@ant-design/pro-utils": "2.15.7", + "@babel/runtime": "^7.18.0", + "rc-resize-observer": "^0.2.3", + "rc-util": "^5.0.6" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-descriptions/node_modules/rc-resize-observer": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-0.2.6.tgz", + "integrity": "sha512-YX6nYnd6fk7zbuvT6oSDMKiZjyngjHoy+fz+vL3Tez38d/G5iGdaDJa2yE7345G6sc4Mm1IGRUIwclvltddhmA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@ant-design/pro-field": { + "version": "2.14.10", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-field/-/pro-field-2.14.10.tgz", + "integrity": "sha512-Q5JIfZJheQKbxgpX29xNwQgsP+fA9WYD4ov5QBLBn1ePUqOreXOQK4cLMBPxxD5MOMULihzHoKi3JOBmuyBCUw==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.14.1", + "@ant-design/pro-utils": "2.15.7", + "@babel/runtime": "^7.18.0", + "@chenshuai2144/sketch-color": "^1.0.8", + "classnames": "^2.3.2", + "dayjs": "^1.11.10", + "lodash.tonumber": "^4.0.3", + "omit.js": "^2.0.2", + "rc-util": "^5.4.0", + "swr": "^2.0.0" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-form": { + "version": "2.26.0", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-form/-/pro-form-2.26.0.tgz", + "integrity": "sha512-K542iiEM0mS/U2iaBHhJjsNinsquy4ZSSfoz6dRdFg6OQEU6+qxx7SpvXpVAGk+CtTxDTmd6u0EKlyVl6shK5Q==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-field": "2.14.10", + "@ant-design/pro-provider": "2.14.1", + "@ant-design/pro-utils": "2.15.7", + "@babel/runtime": "^7.18.0", + "@chenshuai2144/sketch-color": "^1.0.7", + "@umijs/use-params": "^1.0.9", + "classnames": "^2.3.2", + "dayjs": "^1.11.10", + "lodash.merge": "^4.6.2", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.0.6" + }, + "peerDependencies": { + "@types/lodash.merge": "^4.6.7", + "antd": "^4.24.15 || ^5.11.2", + "rc-field-form": "^1.22.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + }, + "peerDependenciesMeta": { + "@types/lodash.merge": { + "optional": true + } + } + }, + "node_modules/@ant-design/pro-layout": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-layout/-/pro-layout-7.19.1.tgz", + "integrity": "sha512-JquPxUMFuEZ0kAgs75ECsRFEgygmXawk/oAvEvKNuNTavrUyU/8EJHN+oAETjKdhtsst0Wp5MJKQqPZAcQdYnA==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.14.1", + "@ant-design/pro-utils": "2.15.7", + "@babel/runtime": "^7.18.0", + "@umijs/route-utils": "^4.0.0", + "@umijs/use-params": "^1.0.9", + "classnames": "^2.3.2", + "lodash.merge": "^4.6.2", + "omit.js": "^2.0.2", + "path-to-regexp": "2.4.0", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.0.6", + "swr": "^2.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-list": { + "version": "2.5.52", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-list/-/pro-list-2.5.52.tgz", + "integrity": "sha512-Ndro8YKubSQxFDJ3ZTMU9esZJAjye9TqKMLd768ST86nWvSeDrm8A0oUIKtyMgvnbzsh7YXj4JgexGUNJJPaGg==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-card": "2.6.1", + "@ant-design/pro-field": "2.14.10", + "@ant-design/pro-table": "3.15.3", + "@ant-design/pro-utils": "2.15.7", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "dayjs": "^1.11.10", + "rc-resize-observer": "^1.0.0", + "rc-util": "^4.19.0" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-list/node_modules/rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "dependencies": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + }, + "node_modules/@ant-design/pro-provider": { + "version": "2.14.1", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-provider/-/pro-provider-2.14.1.tgz", + "integrity": "sha512-N8hTUNJc7dtIjj79ZFviielizo15nOUyjrmz9Ll0Mn68Btne2FLpf8cKHsUMdA+yLDW9oM0ExcqIWJOKyx0nUg==", + "dependencies": { + "@ant-design/cssinjs": "^1.11.1", + "@babel/runtime": "^7.18.0", + "@ctrl/tinycolor": "^3.4.0", + "rc-util": "^5.0.1", + "swr": "^2.0.0" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-skeleton": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-skeleton/-/pro-skeleton-2.1.11.tgz", + "integrity": "sha512-a1drmZSDXHFexFniN1YD7PgYiWvhdBAM9OwzSOO3eXPAltAg2cGcaVBlFmweShN+dupO220RN+6aaLUv3G9B2Q==", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-table": { + "version": "3.15.3", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-table/-/pro-table-3.15.3.tgz", + "integrity": "sha512-85LMPOsE8vqnKO0/C/r1fLBMhG5jfBUzSlzO7dtDKNzgR3FIeIdOBm49rtoKJ3sHdf3HV3sFazHkOUv9aXQ6Bg==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-card": "2.6.1", + "@ant-design/pro-field": "2.14.10", + "@ant-design/pro-form": "2.26.0", + "@ant-design/pro-provider": "2.14.1", + "@ant-design/pro-utils": "2.15.7", + "@babel/runtime": "^7.18.0", + "@dnd-kit/core": "^6.0.8", + "@dnd-kit/modifiers": "^6.0.1", + "@dnd-kit/sortable": "^7.0.2", + "@dnd-kit/utilities": "^3.2.1", + "classnames": "^2.3.2", + "dayjs": "^1.11.10", + "lodash.merge": "^4.6.2", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.0.1" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "rc-field-form": "^1.22.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-utils": { + "version": "2.15.7", + "resolved": "https://registry.npmmirror.com/@ant-design/pro-utils/-/pro-utils-2.15.7.tgz", + "integrity": "sha512-VMK1mkb9St4OoEoekW0qUqkKK632XOGjBZusKjlfP9WPwv+MP8bPAB2jOH89JoY8SIQ87Zod6lMgWLMJX3qbOw==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.14.1", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "dayjs": "^1.11.10", + "lodash.merge": "^4.6.2", + "rc-util": "^5.0.6", + "safe-stable-stringify": "^2.4.3", + "swr": "^2.0.0" + }, + "peerDependencies": { + "antd": "^4.24.15 || ^5.11.2", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, "node_modules/@ant-design/react-slick": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.1.2.tgz", @@ -582,6 +853,18 @@ "node": ">=6.9.0" } }, + "node_modules/@chenshuai2144/sketch-color": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/@chenshuai2144/sketch-color/-/sketch-color-1.0.9.tgz", + "integrity": "sha512-obzSy26cb7Pm7OprWyVpgMpIlrZpZ0B7vbrU0RMbvRg0YAI890S5Xy02Aj1Nhl4+KTbi1lVYHt6HQP8Hm9s+1w==", + "dependencies": { + "reactcss": "^1.2.3", + "tinycolor2": "^1.4.2" + }, + "peerDependencies": { + "react": ">=16.12.0" + } + }, "node_modules/@ctrl/tinycolor": { "version": "3.6.1", "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", @@ -590,6 +873,68 @@ "node": ">=10" } }, + "node_modules/@dnd-kit/accessibility": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz", + "integrity": "sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/core": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@dnd-kit/core/-/core-6.1.0.tgz", + "integrity": "sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==", + "dependencies": { + "@dnd-kit/accessibility": "^3.1.0", + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/modifiers": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/@dnd-kit/modifiers/-/modifiers-6.0.1.tgz", + "integrity": "sha512-rbxcsg3HhzlcMHVHWDuh9LCjpOVAgqbV78wLGI8tziXY3+qcMQ61qVXIvNKQFuhj75dSfD+o+PYZQ/NUk2A23A==", + "dependencies": { + "@dnd-kit/utilities": "^3.2.1", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.0.6", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/sortable": { + "version": "7.0.2", + "resolved": "https://registry.npmmirror.com/@dnd-kit/sortable/-/sortable-7.0.2.tgz", + "integrity": "sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==", + "dependencies": { + "@dnd-kit/utilities": "^3.2.0", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.0.7", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/utilities": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/@dnd-kit/utilities/-/utilities-3.2.2.tgz", + "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz", @@ -1407,6 +1752,19 @@ "node": "^16.0.0 || >=18.0.0" } }, + "node_modules/@umijs/route-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/@umijs/route-utils/-/route-utils-4.0.1.tgz", + "integrity": "sha512-+1ixf1BTOLuH+ORb4x8vYMPeIt38n9q0fJDwhv9nSxrV46mxbLF0nmELIo9CKQB2gHfuC4+hww6xejJ6VYnBHQ==" + }, + "node_modules/@umijs/use-params": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/@umijs/use-params/-/use-params-1.0.9.tgz", + "integrity": "sha512-QlN0RJSBVQBwLRNxbxjQ5qzqYIGn+K7USppMoIOVlf7fxXHsnQZ2bEsa6Pm74bt6DVQxpUE8HqvdStn6Y9FV1w==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -1484,6 +1842,14 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "dependencies": { + "object-assign": "4.x" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", @@ -4238,14 +4604,17 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.tonumber": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz", + "integrity": "sha512-SY0SwuPOHRwKcCNTdsntPYb+Zddz5mDUIVFABzRMqmAiL41pMeyoQFGxYAw5zdc9NnH4pbJqiqqp5ckfxa+zSA==" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -4572,6 +4941,11 @@ "node": ">= 0.4" } }, + "node_modules/omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/omit.js/-/omit.js-2.0.2.tgz", + "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", @@ -4701,6 +5075,11 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/path-to-regexp": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==" + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", @@ -4978,7 +5357,6 @@ "version": "15.8.1", "resolved": "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -5615,8 +5993,20 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "dependencies": { + "lodash": "^4.0.1" + } }, "node_modules/read-cache": { "version": "1.0.0", @@ -5909,6 +6299,14 @@ "node": ">= 0.4" } }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz", @@ -5984,6 +6382,11 @@ "node": ">= 0.4" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6363,6 +6766,18 @@ "node": ">= 0.4" } }, + "node_modules/swr": { + "version": "2.2.5", + "resolved": "https://registry.npmmirror.com/swr/-/swr-2.2.5.tgz", + "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/synckit": { "version": "0.9.0", "resolved": "https://registry.npmmirror.com/synckit/-/synckit-0.9.0.tgz", @@ -6454,6 +6869,11 @@ "node": ">=12.22" } }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -6675,6 +7095,14 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6690,6 +7118,14 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 2e3a877..5643b5f 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@ant-design/pro-components": "^2.7.1", "@heroicons/react": "^2.0.18", "@tailwindcss/forms": "^0.5.7", "antd": "^5.16.1", diff --git a/src/app/lib/constants.ts b/src/app/lib/constants.ts new file mode 100644 index 0000000..a080606 --- /dev/null +++ b/src/app/lib/constants.ts @@ -0,0 +1 @@ +export const DATE_TIME='yyyy-MM-dd HH:mm:ss' diff --git a/src/app/lib/definitions.ts b/src/app/lib/definitions.ts index e07bb9a..1cb2af3 100644 --- a/src/app/lib/definitions.ts +++ b/src/app/lib/definitions.ts @@ -1,4 +1,5 @@ import React from "react"; +import {Dayjs} from "dayjs"; export type Invoice = { id: string; @@ -40,8 +41,10 @@ export type DataType ={ action?:React.ReactNode; expectedStartTime?:Date; expectedEndTime?:Date; + expectedTimeRange?:(string|Dayjs)[]; actualStartTime?:Date; actualEndTime?:Date; + actualTimeRange?:(string|Dayjs)[] children: DataType[]|undefined; } export type DictType={ diff --git a/src/app/lib/task/project/data.tsx b/src/app/lib/task/project/data.tsx index 12b4a70..1761a81 100644 --- a/src/app/lib/task/project/data.tsx +++ b/src/app/lib/task/project/data.tsx @@ -136,33 +136,6 @@ export const taskPriorityList: DictType[] = [ color: 'green' } ] -export const TASK_PRIORITY_LIST: DictType[] = [ - { - id: 0, - code: '0', - name: '重要紧急', - order: 0, - color: 'red' - }, { - id: 1, - code: '1', - name: '重要不紧急', - order: 1, - color: 'yellow' - }, { - id: 2, - code: '2', - name: '不重要紧急', - order: 2, - color: 'gary' - }, { - id: 3, - code: '3', - name: '不重要不紧急', - order: 3, - color: 'green' - } -] // 0,暂存,1,提交,2,审核,3通过4拒绝5排期中,6进行中,7完成,8bug修复,9修复完成,10确认,11,上线运行 export const taskStateList: DictType[] = [ { diff --git a/src/app/task/four/layout.tsx b/src/app/task/four/layout.tsx index 6e8e4c7..9ccf81f 100644 --- a/src/app/task/four/layout.tsx +++ b/src/app/task/four/layout.tsx @@ -1,12 +1,69 @@ +'use client' import SideNav from '@/app/ui/dashboard/sidenav'; +import TreeTable from "@/app/ui/task/project/TreeTable"; +import '@/app/ui/task/four/index.modules.css' +import {useEffect} from "react"; + +export default function Layout({children}: { children: React.ReactNode }) { + // useEffect(() => { + // // @ts-ignore + // const divWidth = document.getElementById('myDiv').offsetWidth; + // // @ts-ignore + // document.getElementById('mySpan').style.fontSize = divWidth + 'px'; + // }, []); // 这里的空数组表示只在组件挂载时执行一次 + // + // return ( + // <> + //
+ // Content + //
+ // Content + // + // ) + + useEffect(() => { + // @ts-ignore + const divWidth = document.getElementById('tenUp').offsetWidth; + // @ts-ignore + document.getElementById('upUp').style.fontSize = divWidth + 'px'; + // @ts-ignore + document.getElementById('upDown').style.fontSize = divWidth + 'px'; + // @ts-ignore + const divHeight = document.getElementById('left').offsetHeight; + // @ts-ignore + document.getElementById('tenLeft').style.fontSize = divHeight/6*4 + 'px'; + }, []); -export default function Layout({ children }: { children: React.ReactNode }) { return ( -
-
- +
+
+
+ +
+ +
+ 向上重要 +
+ +
+ +
+
+
+ ←向左紧急←向左紧急←向左←向左紧急←向左紧急←向左紧急 +
+
+
+ +
+
+ 向上重要 +
+ {/*
{children}
*/} +
+ +
-
{children}
); -} \ No newline at end of file +} diff --git a/src/app/task/layout.tsx b/src/app/task/layout.tsx index 3f835c9..1e463ed 100644 --- a/src/app/task/layout.tsx +++ b/src/app/task/layout.tsx @@ -1,7 +1,12 @@ -import SideNav from '@/app/ui/dashboard/sidenav'; +'use client' +import React from "react"; +import {TitleOperation} from "@/app/ui/task/TitleOperation"; + +export default function Layout({children}: { children: React.ReactNode }) { -export default function Layout({ children }: { children: React.ReactNode }) { return ( -
{children}
+
+ + {children}
); -} \ No newline at end of file +} diff --git a/src/app/task/project/page.tsx b/src/app/task/project/page.tsx index a3965d8..f3b69de 100644 --- a/src/app/task/project/page.tsx +++ b/src/app/task/project/page.tsx @@ -1,10 +1,11 @@ import TreeTable from "@/app/ui/task/project/TreeTable"; +import TreeTablePro from "@/app/ui/task/project/TreeTablePro"; const Page: React.FC = () => { - return ( <> - + + {/**/} ); }; diff --git a/src/app/ui/task/four/index.modules.css b/src/app/ui/task/four/index.modules.css new file mode 100644 index 0000000..f324857 --- /dev/null +++ b/src/app/ui/task/four/index.modules.css @@ -0,0 +1,45 @@ +div{ + overflow: auto; +} +.leftUp{ + width: 49%; + height: 45vh; + background: red; +} +.up{ + width: 2%; + height: 45vh; + background: dodgerblue; +} +.rightUp{ + width: 49%; + height: 45vh; + background: yellow; +} +.left{ + width: 100%; + height: 4vh; + background: dodgerblue; + overflow: hidden; +} +.leftDown{ + width: 49%; + height: 45vh; + background: gray; +} +.rightDown{ + /*float: right;*/ + width: 49%; + height: 45vh; + background: green; +} + +/*#tenLeft {*/ +/* display: inline-block;*/ +/* animation: scroll 10s linear infinite; !* 控制滚动速度和循环 *!*/ +/*}*/ + +/*@keyframes scroll {*/ +/* 0% { transform: translateX(0); } !* 开始位置 *!*/ +/* 100% { transform: translateX(-100%); } !* 结束位置 *!*/ +/*}*/ diff --git a/src/app/ui/task/project/DetailForm.tsx b/src/app/ui/task/project/DetailForm.tsx index f4239a1..3e8a5b5 100644 --- a/src/app/ui/task/project/DetailForm.tsx +++ b/src/app/ui/task/project/DetailForm.tsx @@ -1,5 +1,6 @@ 'use client' import React, {useEffect, useState} from 'react'; +import '@/app/ui/task/project/detailForm.modules.css' import {PlusOutlined} from '@ant-design/icons'; import { Button, @@ -28,6 +29,7 @@ import { updateTask } from "@/app/lib/task/project/data"; import {DataType, DictType} from "@/app/lib/definitions"; +import {DATE_TIME} from "@/app/lib/constants"; export interface DetailFormProps { itemId: number, @@ -43,7 +45,7 @@ export const DetailForm: React.FC = (props) => { const {RangePicker} = DatePicker; const {TextArea} = Input; // const [taskMessage,setTaskMessage]=useState({name:"useState没效果吗,是这样的"}); - let taskMessage; + // let taskMessage; useEffect(() => { if (props.operationId === OPERATION_BUTTON_TYPE.DETAIL||props.operationId === OPERATION_BUTTON_TYPE.UPDATE) { getTask(props.itemId).then(task => { @@ -52,6 +54,10 @@ export const DetailForm: React.FC = (props) => { // setTaskMessage(task.data) task.data.state=taskStateList.find(taskState=>taskState.code===task.data.state?.toString())?.name; task.data.priority=taskPriorityList.find(taskPriority=>taskPriority.code===task.data.priority?.toString())?.name; + task.data.actualTimeRange = [task.data.expectedStartTime?dayjs(task.data.expectedStartTime,DATE_TIME):'', + task.data.expectedEndTime?dayjs(task.data.expectedEndTime,DATE_TIME):'']; + task.data.expectedTimeRange = [task.data.actualStartTime?dayjs(task.data.actualStartTime,DATE_TIME):'', + task.data.actualEndTime?dayjs(task.data.actualEndTime,DATE_TIME):'']; form.setFieldsValue(task.data) }else{ message.error(task.status.message); @@ -108,20 +114,20 @@ export const DetailForm: React.FC = (props) => { type: values.type, children: [] } - if (values.expectedStartTime) { - if (values.expectedStartTime[0]) { - request.expectedStartTime = values.expectedStartTime[0] + if (values.expectedTimeRange) { + if (values.expectedTimeRange[0]) { + request.expectedStartTime = values.expectedTimeRange[0] } - if (values.expectedStartTime[1]) { - request.expectedEndTime = values.expectedStartTime[1] + if (values.expectedTimeRange[1]) { + request.expectedEndTime = values.expectedTimeRange[1] } } - if (values.actualStartTime) { - if (values.actualStartTime[0]) { - request.actualStartTime = values.actualStartTime[0] + if (values.actualTimeRange) { + if (values.actualTimeRange[0]) { + request.actualStartTime = values.actualTimeRange[0] } - if (values.actualStartTime[1]) { - request.actualEndTime = values.actualStartTime[1] + if (values.actualTimeRange[1]) { + request.actualEndTime = values.actualTimeRange[1] } } if (props.operationId===OPERATION_BUTTON_TYPE.ADD_CHILD){ @@ -164,12 +170,12 @@ export const DetailForm: React.FC = (props) => { {/**/}
@@ -215,7 +221,7 @@ export const DetailForm: React.FC = (props) => { - name={['expectedStartTime']} label="期望"> + name={['expectedTimeRange']} label="期望"> = (props) => { // format="YYYY-MM-DD HH:mm:ss" /> - name='actualStartTime' label="实际"> + name='actualTimeRange' label="实际"> 四象限显示子任务, + label: 四象限显示子任务, } ]; return diff --git a/src/app/ui/task/project/TreeTable.tsx b/src/app/ui/task/project/TreeTable.tsx index c8270c6..a651d74 100644 --- a/src/app/ui/task/project/TreeTable.tsx +++ b/src/app/ui/task/project/TreeTable.tsx @@ -2,9 +2,10 @@ import React, {useEffect, useState} from 'react'; import {Button, ColorPicker, Dropdown, MenuProps, Space, Switch, Table} from 'antd'; import type { TableColumnsType, TableProps } from 'antd'; -import {taskPriorityList, taskStateList,TASK_PRIORITY_LIST, taskTreeResult} from "@/app/lib/task/project/data"; +import {taskPriorityList, taskStateList, taskTreeResult} from "@/app/lib/task/project/data"; import {DataType, ResponseVO, ResultPage} from "@/app/lib/definitions"; import {DownOutlined} from "@ant-design/icons"; +import { useSearchParams, usePathname, useRouter } from 'next/navigation'; import OperationButton from "@/app/ui/task/project/OperationButton"; type TableRowSelection = TableProps['rowSelection']; @@ -65,12 +66,10 @@ const rowSelection: TableRowSelection = { }; const TreeTable: React.FC = () => { - console.log("TreeTable: React.FC ",TASK_PRIORITY_LIST,taskPriorityList) function recursionActionChild(children:DataType[]){ if (children.length===0){ return; } - console.log("TreeTable: React.FC :recursionActionChild",TASK_PRIORITY_LIST,taskPriorityList) for (let item of children) { item.key=item.id; item.action=() @@ -103,10 +102,7 @@ const TreeTable: React.FC = () => { {/**/} {/* CheckStrictly: */} {/**/} - - - - + {/**/} [] = [ + { + title: '任务编码', + dataIndex: 'code', + // valueType: 'indexBorder', + width: '10%', + }, + { + title: '任务名称', + dataIndex: 'name', + width: '15%', + copyable: true, + ellipsis: true, + tooltip: '标题过长会自动收缩', + formItemProps: { + rules: [ + { + required: true, + message: '此项为必填项', + }, + ], + }, + }, + { + title: '任务描述', + dataIndex: 'description', + }, + { + disable: true, + title: '任务状态', + dataIndex: 'state', + filters: true, + onFilter: true, + ellipsis: true, + valueType: 'select', + fieldProps:{options:taskStateList.map(item => {return {label: item.name,value: item.code}})}, + }, + { + disable: true, + title: '优先级', + dataIndex: 'priority', + valueType: 'select', + fieldProps:{options:taskPriorityList.map(item => {return {label: item.name,value: item.code}})}, + render: (_, record) => ( + + { + item.code===record.priority?.toString())?.color} + key={taskPriorityList.find(item=> item.code===record.priority?.toString())?.code}> + {taskPriorityList.find(item=> item.code===record.priority?.toString())?.name} + + } + + ), + }, + { + title: '期望开始时间', + dataIndex: 'expectedStartTime', + valueType: 'date', + hideInTable: true, + search: { + transform: (value) => { + return { + startTime: value, + }; + }, + }, + }, + + // { + // title: '创建时间', + // dataIndex: 'created_at', + // valueType: 'dateRange', + // hideInTable: true, + // search: { + // transform: (value) => { + // return { + // startTime: value[0], + // endTime: value[1], + // }; + // }, + // }, + // }, + // { + // title: '操作', + // valueType: 'option', + // key: 'option', + // render: (text, record, _, action) => [ + // { + // action?.startEditable?.(record.id); + // }} + // > + // 编辑 + // , + // + // 查看 + // , + // action?.reload()} + // menus={[ + // { key: 'copy', name: '复制' }, + // { key: 'delete', name: '删除' }, + // ]} + // />, + // ], + // }, +]; + +const TreeTablePro: React.FC = () => { + const actionRef = useRef(); + return ( + + columns={columns} + actionRef={actionRef} + cardBordered + request={async (params, sort, filter) => { + console.log(sort, filter); + // await waitTime(2000); + // return axios.post<{ + // data: GithubIssueItem[]; + // }>('https://proapi.azurewebsites.net/github/issues', { + // params, + // }); + const response = await taskTreeResult() + // axios.post('https://proapi.azurewebsites.net/github/issues', { + // params, + // }); + return { + data:response.data.content, + success: response.status.success, + } + // return response.data; + }} + editable={{ + type: 'multiple', + }} + columnsState={{ + persistenceKey: 'pro-table-singe-demos', + persistenceType: 'localStorage', + defaultValue: { + option: { fixed: 'right', disable: true }, + }, + onChange(value) { + console.log('value: ', value); + }, + }} + rowKey="id" + search={{ + labelWidth: 'auto', + }} + options={{ + setting: { + listsHeight: 400, + }, + }} + form={{ + // 由于配置了 transform,提交的参与与定义的不同这里需要转化一下 + syncToUrl: (values, type) => { + if (type === 'get') { + return { + ...values, + created_at: [values.startTime, values.endTime], + }; + } + return values; + }, + }} + pagination={{ + pageSize: 5, + onChange: (page) => console.log(page), + }} + dateFormatter="string" + headerTitle="任务管理" + toolBarRender={() => [ + , + // + // + // , + ]}> + ); +}; +export default TreeTablePro diff --git a/src/app/ui/task/project/detailForm.modules.css b/src/app/ui/task/project/detailForm.modules.css new file mode 100644 index 0000000..7c6bb8e --- /dev/null +++ b/src/app/ui/task/project/detailForm.modules.css @@ -0,0 +1,3 @@ +.ant-picker-range-separator{ + width: 60px; +}