{"_id":"@composy/scheduler-vue","name":"@composy/scheduler-vue","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@composy/scheduler-vue","version":"0.0.1","description":"Vue components for @composy/scheduler-core","keywords":["scheduler","vue","vue3","component","ldesign"],"author":{"name":"LDesign Team"},"license":"MIT","type":"module","sideEffects":false,"exports":{".":{"types":"./es/index.d.ts","import":"./es/index.js","require":"./lib/index.cjs","default":"./es/index.js"},"./composables/*":{"types":"./es/composables/*.d.ts","import":"./es/composables/*.js","require":"./lib/composables/*.cjs","default":"./es/composables/*.js"},"./plugins/*":{"types":"./es/plugins/*.d.ts","import":"./es/plugins/*.js","require":"./lib/plugins/*.cjs","default":"./es/plugins/*.js"},"./package.json":"./package.json"},"main":"./lib/index.cjs","module":"./es/index.js","types":"./es/index.d.ts","typings":"./es/index.d.ts","browser":"./dist/index.js","unpkg":"./dist/index.min.js","jsdelivr":"./dist/index.min.js","scripts":{"build":"ldesign-builder build","dev":"ldesign-builder build --watch","lint":"eslint . --cache","lint:check":"eslint . --cache --max-warnings 0","lint:fix":"eslint . --cache --fix","type-check":"vue-tsc --noEmit","test":"ltesting run:unit","test:coverage":"ltesting run:unit --coverage","test:watch":"ltesting run:unit --watch","test:run":"ltesting run:unit","test:changed":"ltesting run:unit --changed","test:failed":"ltesting run:unit --failed","test:ui":"ltesting dashboard"},"dependencies":{"@composy/scheduler-core":"^0.0.1"},"peerDependencies":{"vue":"^3.5.32"},"devDependencies":{"@antfu/eslint-config":"9.1.0","@composy/builder":"^0.0.1","@composy/testing":"^0.0.1","@vue/test-utils":"^2.4.11","eslint":"10.7.0","fast-check":"^4.9.0","jsdom":"29.1.1","typescript":"5.9.3","vue":"3.5.39","vue-tsc":"^3.3.7"},"publishConfig":{"registry":"http://npm.longrise.cn:6286/"},"_id":"@composy/scheduler-vue@0.0.1","_nodeVersion":"23.11.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-snLbssyBr9T/+NFV6jOH3HrcG7F2JHT8dIQBYXbDKaRDAnIt7UUOdxD4wKDLHRbNmlQlJn2vgPaLJ2pKKdLW7Q==","shasum":"e98c61dabf42011510f746aa4effc814f81f8935","tarball":"https://registry.npmjs.org/@composy/scheduler-vue/-/scheduler-vue-0.0.1.tgz","fileCount":69,"unpackedSize":258477,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCYj1UK40NEVFzPUPIGeWoejGoWAZ7qVs+3ynKuJCflIAIhAOGMg9TKW/d0Q/IDzItEFA0eqtIh8HQUAQin+B56z/qm"}]},"_npmUser":{"name":"swimly","email":"979741120@qq.com"},"directories":{},"maintainers":[{"name":"swimly","email":"979741120@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/scheduler-vue_0.0.1_1786949278487_0.2257233315422711"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-17T06:47:58.316Z","0.0.1":"2026-08-17T06:47:58.630Z","modified":"2026-08-17T06:47:58.992Z"},"maintainers":[{"name":"swimly","email":"979741120@qq.com"}],"description":"Vue components for @composy/scheduler-core","keywords":["scheduler","vue","vue3","component","ldesign"],"author":{"name":"LDesign Team"},"license":"MIT","readme":"# @composy/scheduler-vue\n\n资源调度/排程器 - 会议室预约、人员排班（Vue 3 适配层）\n\n## 功能特性\n\n- 🧩 Vue 3 组件（`<Scheduler>`）\n- 🪝 组合式函数（`useScheduler`）\n- ⚡ 响应式数据绑定\n- 🎨 主题管理插件\n- 🔌 Engine 插件支持\n\n## 安装\n\n```bash\npnpm add @composy/scheduler-vue\n```\n\n## 快速开始\n\n### 组件使用\n\n```vue\n<template>\n  <Scheduler\n    :resources=\"resources\"\n    :bookings=\"bookings\"\n    view=\"week\"\n    :start-hour=\"8\"\n    :end-hour=\"20\"\n    :row-height=\"56\"\n    :sidebar-width=\"180\"\n    :height=\"600\"\n    @booking-click=\"onBookingClick\"\n    @slot-click=\"onSlotClick\"\n    @ready=\"onReady\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { Scheduler } from '@composy/scheduler-vue'\nimport type { SchedulerInstance, Booking } from '@composy/scheduler-vue'\n\nconst resources = [\n  { id: '1', name: '会议室A', type: 'room', capacity: 10 },\n  { id: '2', name: '会议室B', type: 'room', capacity: 20 },\n]\n\nconst bookings = [\n  {\n    id: 'b1',\n    resourceId: '1',\n    title: '项目会议',\n    start: new Date('2024-01-01 09:00'),\n    end: new Date('2024-01-01 10:00'),\n  },\n]\n\nfunction onBookingClick(booking: Booking) {\n  console.log('点击预约：', booking)\n}\n\nfunction onSlotClick(slot: { resourceId: string; start: Date; end: Date }) {\n  console.log('点击时间槽：', slot)\n}\n\nfunction onReady(instance: SchedulerInstance) {\n  console.log('调度器就绪')\n}\n</script>\n```\n\n### Composable 使用\n\n```vue\n<template>\n  <div ref=\"containerRef\" style=\"height: 600px\"></div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useScheduler } from '@composy/scheduler-vue'\n\nconst containerRef = ref<HTMLElement>()\n\nconst {\n  generate,\n  addBooking,\n  setView,\n  navigateNext,\n  navigatePrev,\n  goToToday,\n} = useScheduler(ref({\n  resources: [\n    { id: '1', name: '会议室A', type: 'room' },\n  ],\n  bookings: [],\n  view: 'week',\n}))\n\nonMounted(() => {\n  if (containerRef.value) {\n    generate(containerRef.value)\n  }\n})\n</script>\n```\n\n### 插件使用\n\n```typescript\nimport { createApp } from 'vue'\nimport { SchedulerPlugin } from '@composy/scheduler-vue'\nimport App from './App.vue'\n\nconst app = createApp(App)\n\napp.use(SchedulerPlugin, {\n  defaultTheme: 'light',\n  themes: [],\n})\n\napp.mount('#app')\n```\n\n## 组件 Props\n\n| Prop | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `resources` | `Resource[]` | 必填 | 资源列表 |\n| `bookings` | `Booking[]` | 必填 | 预约列表 |\n| `view` | `'day' \\| 'week' \\| 'month'` | `'week'` | 视图模式 |\n| `currentDate` | `Date \\| string \\| number` | 当前日期 | 当前显示日期 |\n| `startHour` | `number` | `8` | 开始小时 |\n| `endHour` | `number` | `20` | 结束小时 |\n| `slotDuration` | `number` | `60` | 时间槽时长（分钟） |\n| `rowHeight` | `number` | `56` | 行高（像素） |\n| `columnWidth` | `number` | `120` | 列宽（像素） |\n| `sidebarWidth` | `number` | `180` | 侧边栏宽度 |\n| `headerHeight` | `number` | `44` | 头部高度 |\n| `theme` | `string \\| SchedulerTheme` | - | 主题 |\n| `readonly` | `boolean` | `false` | 只读模式 |\n| `locale` | `string` | `'zh-CN'` | 本地化 |\n| `showNowIndicator` | `boolean` | `true` | 显示当前时间线 |\n| `detectConflicts` | `boolean` | `true` | 启用冲突检测 |\n| `className` | `string` | - | 自定义 CSS 类 |\n| `width` | `number \\| string` | - | 容器宽度 |\n| `height` | `number \\| string` | `500` | 容器高度 |\n\n## 组件事件\n\n| 事件名 | 参数 | 说明 |\n|--------|------|------|\n| `ready` | `SchedulerInstance` | 调度器就绪 |\n| `bookingClick` | `Booking` | 预约被点击 |\n| `slotClick` | `{ resourceId, start, end }` | 时间槽被点击 |\n| `viewChange` | `ViewMode` | 视图变化 |\n| `dateChange` | `Date` | 日期变化 |\n| `selectionChange` | `string[]` | 选择变化 |\n\n## 依赖\n\n- `@composy/scheduler-core` — 核心引擎\n- `vue` ^3.5.32 (peerDependency)\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-cd1884a6b21b2457de41d8187cbf7715"}