@yuku123/z-task-frontend-component 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@yuku123/z-task-frontend-component",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "description": "z-task 共享前端组件 - TaskCard 等",
6
+ "keywords": [
7
+ "react",
8
+ "antd",
9
+ "task",
10
+ "z-opc"
11
+ ],
12
+ "license": "MIT",
13
+ "author": {
14
+ "name": "zifang",
15
+ "email": "1340947819@qq.com"
16
+ },
17
+ "homepage": "https://github.com/yuku123/z-opc/tree/main/z-task/_frontend_component#readme",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/yuku123/z-opc.git",
21
+ "directory": "z-task/_frontend_component"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/yuku123/z-opc/issues"
25
+ },
26
+ "main": "./dist/index.cjs.js",
27
+ "module": "./dist/index.es.js",
28
+ "types": "./dist/index.d.ts",
29
+ "files": [
30
+ "dist",
31
+ "src",
32
+ "README.md"
33
+ ],
34
+ "publishConfig": {
35
+ "access": "public",
36
+ "registry": "https://registry.npmjs.org/"
37
+ },
38
+ "devDependencies": {
39
+ "@vitejs/plugin-react": "^4.2.1",
40
+ "vite": "^6.2.0"
41
+ }
42
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 项目选择器组件
3
+ */
4
+ import {Select} from 'antd'
5
+
6
+ export default function ProjectSelect({value, onChange, projects = []}) {
7
+ return (
8
+ <Select
9
+ value={value}
10
+ onChange={onChange}
11
+ placeholder="请选择项目"
12
+ style={{width: 200}}
13
+ allowClear
14
+ >
15
+ {projects.map((p) => (
16
+ <Select.Option key={p.id} value={p.id}>
17
+ {p.name}
18
+ </Select.Option>
19
+ ))}
20
+ </Select>
21
+ )
22
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 任务卡片组件
3
+ */
4
+ import {Button, Card, Space, Tag} from 'antd'
5
+ import {CheckCircleOutlined, EditOutlined} from '@ant-design/icons'
6
+
7
+ const priorityMap = {
8
+ high: {color: 'red', text: '高'},
9
+ medium: {color: 'orange', text: '中'},
10
+ low: {color: 'green', text: '低'},
11
+ }
12
+
13
+ const statusMap = {
14
+ pending: {color: 'default', text: '待处理'},
15
+ in_progress: {color: 'blue', text: '进行中'},
16
+ completed: {color: 'green', text: '已完成'},
17
+ }
18
+
19
+ export default function TaskCard({task, onEdit, onComplete}) {
20
+ const priority = priorityMap[task.priority] || {color: 'default', text: task.priority}
21
+ const status = statusMap[task.status] || {color: 'default', text: task.status}
22
+
23
+ return (
24
+ <Card size="small" title={task.title} extra={
25
+ <Space>
26
+ {task.status !== 'completed' && (
27
+ <Button size="small" icon={<CheckCircleOutlined/>} onClick={() => onComplete?.(task)}>
28
+ 完成
29
+ </Button>
30
+ )}
31
+ <Button size="small" icon={<EditOutlined/>} onClick={() => onEdit?.(task)}>
32
+ 编辑
33
+ </Button>
34
+ </Space>
35
+ }>
36
+ <Space direction="vertical" style={{width: '100%'}}>
37
+ <div>项目:{task.projectName}</div>
38
+ <Space>
39
+ <Tag color={priority.color}>{priority.text}</Tag>
40
+ <Tag color={status.color}>{status.text}</Tag>
41
+ </Space>
42
+ {task.dueDate && <div>截止:{task.dueDate}</div>}
43
+ </Space>
44
+ </Card>
45
+ )
46
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * 任务表格组件
3
+ */
4
+ import {Button, Space, Table, Tag} from 'antd'
5
+ import {CheckCircleOutlined, DeleteOutlined, EditOutlined} from '@ant-design/icons'
6
+
7
+ const priorityMap = {high: 'red', medium: 'orange', low: 'green'}
8
+ const statusMap = {
9
+ pending: 'default',
10
+ in_progress: 'blue',
11
+ completed: 'green',
12
+ }
13
+
14
+ export default function TaskTable({dataSource, loading, onEdit, onDelete, onComplete}) {
15
+ const columns = [
16
+ {title: '任务名称', dataIndex: 'title', key: 'title'},
17
+ {title: '项目', dataIndex: 'projectName', key: 'projectName'},
18
+ {
19
+ title: '优先级',
20
+ dataIndex: 'priority',
21
+ key: 'priority',
22
+ render: (v) => <Tag color={priorityMap[v]}>{v === 'high' ? '高' : v === 'medium' ? '中' : '低'}</Tag>,
23
+ },
24
+ {
25
+ title: '状态',
26
+ dataIndex: 'status',
27
+ key: 'status',
28
+ render: (v) => {
29
+ const m = {pending: '待处理', in_progress: '进行中', completed: '已完成'}
30
+ return <Tag color={statusMap[v]}>{m[v] || v}</Tag>
31
+ },
32
+ },
33
+ {title: '截止日期', dataIndex: 'dueDate', key: 'dueDate'},
34
+ {
35
+ title: '操作',
36
+ key: 'action',
37
+ render: (_, record) => (
38
+ <Space>
39
+ {record.status !== 'completed' && (
40
+ <Button size="small" icon={<CheckCircleOutlined/>} onClick={() => onComplete?.(record)}>
41
+ 完成
42
+ </Button>
43
+ )}
44
+ <Button size="small" icon={<EditOutlined/>} onClick={() => onEdit?.(record)}>
45
+ 编辑
46
+ </Button>
47
+ <Button size="small" danger icon={<DeleteOutlined/>} onClick={() => onDelete?.(record)}>
48
+ 删除
49
+ </Button>
50
+ </Space>
51
+ ),
52
+ },
53
+ ]
54
+
55
+ return (
56
+ <Table
57
+ columns={columns}
58
+ dataSource={dataSource}
59
+ loading={loading}
60
+ rowKey="id"
61
+ pagination={{pageSize: 10}}
62
+ />
63
+ )
64
+ }
package/src/dev.jsx ADDED
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Task组件库开发调试入口
3
+ */
4
+ import React from 'react'
5
+ import ReactDOM from 'react-dom/client'
6
+ import {ProjectSelect, TaskCard, TaskTable} from './index.js'
7
+
8
+ const App = () => {
9
+ const tasks = [
10
+ {
11
+ id: 1,
12
+ title: '完成登录页',
13
+ projectName: '主应用',
14
+ priority: 'high',
15
+ status: 'in_progress',
16
+ dueDate: '2024-06-10'
17
+ },
18
+ {
19
+ id: 2,
20
+ title: '修复菜单问题',
21
+ projectName: '主应用',
22
+ priority: 'medium',
23
+ status: 'pending',
24
+ dueDate: '2024-06-15'
25
+ },
26
+ {
27
+ id: 3,
28
+ title: '上线审批流程',
29
+ projectName: '流程引擎',
30
+ priority: 'low',
31
+ status: 'completed',
32
+ dueDate: '2024-06-01'
33
+ },
34
+ ]
35
+ const projects = [{id: 1, name: '主应用'}, {id: 2, name: '流程引擎'}]
36
+
37
+ return (
38
+ <div style={{padding: 20}}>
39
+ <h1>Task 组件库 Dev</h1>
40
+ <h2>TaskCard 示例</h2>
41
+ <TaskCard task={tasks[0]} onEdit={(t) => console.log('edit', t)}
42
+ onComplete={(t) => console.log('complete', t)}/>
43
+
44
+ <h2>TaskTable 示例</h2>
45
+ <TaskTable
46
+ dataSource={tasks}
47
+ loading={false}
48
+ onEdit={(t) => console.log('edit', t)}
49
+ onDelete={(t) => console.log('delete', t)}
50
+ onComplete={(t) => console.log('complete', t)}
51
+ />
52
+
53
+ <h2>ProjectSelect 示例</h2>
54
+ <ProjectSelect projects={projects} onChange={(v) => console.log('select', v)}/>
55
+ </div>
56
+ )
57
+ }
58
+
59
+ ReactDOM.createRoot(document.getElementById('root')).render(<App/>)
package/src/index.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Task 组件库 - 导出所有可复用组件
3
+ */
4
+ export {default as TaskCard} from './components/TaskCard'
5
+ export {default as TaskTable} from './components/TaskTable'
6
+ export {default as ProjectSelect} from './components/ProjectSelect'