Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

日历组件新增小红点 #640

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

810505339
Copy link
Collaborator

@810505339 810505339 commented Sep 29, 2024

🤔 这个 PR 的性质是?(至少选择一个)

  • 日常 bug 修复
  • 新特性提交
  • 站点、文档改进
  • 演示代码改进
  • 组件样式/交互改进
  • TypeScript 定义更新
  • CI/CD 改进
  • 包体积优化
  • 性能优化
  • 功能增强
  • 国际化改进
  • 代码重构
  • 代码风格优化
  • 测试用例
  • 分支合并
  • 其他改动(是关于什么的改动?)

🔗 相关 Issue

💡 需求背景和解决方案

☑️ 请求合并前的自查清单

⚠️ 请自检并全部勾选全部选项⚠️

  • 文档已补充或无须补充
  • 代码演示已提供或无须提供
  • TypeScript 定义已补充或无须补充

Summary by CodeRabbit

  • 新功能

    • 在日历组件中添加了isDot属性,允许用户启用或禁用红点指示器。
    • 在日期时间选择器组件中添加了right-icon插槽,支持自定义右侧图标。
  • 改进

    • 日历视图支持周和月范围选择,增强了用户的选择功能。
    • 日历组件的视觉表示得到了改善,增加了基于isDot属性的徽章指示器。
  • 样式

    • 更新了日历和分页组件的样式,以改善视觉效果。

Copy link

vercel bot commented Sep 29, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
wot-design-uni ✅ Ready (Inspect) Visit Preview 💬 Add feedback Sep 29, 2024 2:31am

Copy link

coderabbitai bot commented Sep 29, 2024

Walkthrough

本次更改主要涉及对日历和日期时间选择器组件的功能扩展。新增了 isDot 属性,用于指示日历中是否启用红点功能。同时,日期时间选择器组件中引入了 right-icon 插槽,允许用户自定义右侧图标。这些更改旨在增强组件的可视化效果和用户交互体验。

Changes

文件路径 更改摘要
docs/component/calendar-view.md 新增 isDot: boolean 属性,表示是否启用红点功能。
docs/component/calendar.md 更新文档,新增 isDot: boolean 属性。
docs/component/datetime-picker.md 新增 right-icon 插槽,允许自定义右侧图标。
src/pages/calendarView/Index.vue 修改日历视图类型,新增周和月范围选择,优化日期格式化逻辑。
src/pages/datetimePicker/Index.vue 新增示例块,包含自定义图标功能和计算属性 isEmpty
src/uni_modules/wot-design-uni/components/wd-calendar-view/month/index.scss 新增 .wd-badge CSS 规则,设置显示属性为块级元素。
src/uni_modules/wot-design-uni/components/wd-calendar-view/month/month.vue 新增 <wd-badge> 组件,结合 item.isDot 属性显示点指示。
src/uni_modules/wot-design-uni/components/wd-calendar-view/types.ts 新增 isDot?: boolean 属性,增强日历项数据结构。
src/uni_modules/wot-design-uni/components/wd-calendar-view/year/index.scss 新增 .wd-badge CSS 规则,设置为块级元素。
src/uni_modules/wot-design-uni/components/wd-calendar-view/year/year.vue 新增 <wd-badge> 组件,结合 item.isDot 属性显示月份标签。
src/uni_modules/wot-design-uni/components/wd-datetime-picker/wd-datetime-picker.vue 新增 right-icon 插槽,允许插入自定义右侧图标。
src/uni_modules/wot-design-uni/components/wd-pagination/index.scss 修改激活和禁用状态的样式规则,调整透明度属性。

Possibly related PRs

Suggested reviewers

  • Moonofweisheng

Poem

🐇 在日历上点点滴滴,
新增红点真美丽。
日期时间选得妙,
自定义图标来助力。
兔子欢跳庆新变,
组件更佳乐无边! 🌟


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

netlify bot commented Sep 29, 2024

Deploy Preview for wot-design-uni ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit e94944c
🔍 Latest deploy log https://app.netlify.com/sites/wot-design-uni/deploys/66f8bbc8451f19000806198e
😎 Deploy Preview https://deploy-preview-640--wot-design-uni.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Outside diff range and nitpick comments (14)
src/uni_modules/wot-design-uni/components/wd-calendar-view/types.ts (1)

82-82: 新增的 isDot 属性看起来不错!

这个改动很好地实现了PR的目标,为日历组件添加了小红点功能。代码简洁明了,不影响现有功能。

为了提高代码的可读性和可维护性,建议添加一个简短的注释来解释 isDot 属性的用途。例如:

isDot?: boolean // 是否显示日期下方的小红点

这样可以帮助其他开发者更快地理解这个属性的作用。

src/uni_modules/wot-design-uni/components/wd-calendar-view/year/index.scss (1)

128-130: 新增的徽章样式看起来不错,但可以考虑进一步优化。

新增的 .wd-badge 类的 display: block; 设置是合理的,这将确保徽章占据其容器的全宽并开始新的一行。这与PR目标中提到的添加小红点功能相符。

然而,为了更精确地控制徽章的位置和大小,您可能想要考虑添加一些额外的样式属性。

建议您考虑添加以下属性来进一步优化徽章的样式:

 .wd-badge{
   display: block;
+  width: 6px;
+  height: 6px;
+  border-radius: 50%;
+  background-color: red;
+  margin: 2px auto 0;
 }

这些额外的样式将使徽章呈现为一个小红点,并在月份文本上方居中显示。请根据您的具体需求调整尺寸和颜色。

src/uni_modules/wot-design-uni/components/wd-calendar-view/month/index.scss (1)

130-130: 建议移除多余的空行

在第130行添加的空行会在 .wd-month__day-container.wd-month__day-text 规则之间创建额外的空间。为了保持代码的紧凑性和一致性,建议移除这个额外的空行。

应用以下更改以改善代码组织:

    }
  }
-
 
  @include e(day-text) {
src/pages/calendarView/Index.vue (2)

83-83: 建议移除调试用的 console.log 语句

在生产环境中保留 console.log 语句可能会影响性能,并可能泄露敏感信息。建议在提交代码前删除此调试语句。

- console.log(month)

如果这个日志对于开发或调试很重要,可以考虑使用条件日志或专门的日志库,以便在生产环境中禁用它。


100-105: 范围选择的起始和结束日期标记看起来不错,建议小幅改进

为范围选择的起始和结束日期添加 isDot 标记是一个很好的改进。这样可以在视觉上更好地突出显示这些重要的日期。

实现逻辑看起来正确,符合 PR 的目标。不过,为了保持一致性,建议也为 'same' 类型的日期(即起始和结束日期相同的情况)添加 isDot 标记。

建议修改如下:

if (day.type === 'start' || day.type === 'end' || day.type === 'same') {
  day.isDot = true
}

if (day.type === 'start') {
  day.bottomInfo = '开始'
} else if (day.type === 'end') {
  day.bottomInfo = '结束'
} else if (day.type === 'same') {
  day.bottomInfo = '开始/结束'
}

这样可以确保所有特殊的范围选择日期都有一致的视觉标记。

src/uni_modules/wot-design-uni/components/wd-calendar-view/year/year.vue (1)

14-18: 新功能实现正确,建议更新文档

新增的 <wd-badge> 组件很好地实现了日历组件的小红点功能。实现方式简洁明了,并且通过 is-dot 属性可以灵活控制小红点的显示。

为了帮助其他开发者更好地理解和使用这个新功能,建议:

  1. 在组件的文档中添加关于 isDot 属性的说明,包括其用途和如何使用。
  2. 如果可能,提供一个简单的示例代码,展示如何在日历中启用和禁用小红点。
  3. 考虑在文档中解释 topright 属性的作用,以及如何根据需要调整小红点的位置。

这些文档更新将有助于确保新功能的可用性和可维护性。

src/pages/datetimePicker/Index.vue (2)

36-44: 自定义图标功能实现得很好!

新增的自定义图标功能实现得很好,使用了插槽来实现灵活的定制。条件渲染根据选择器的状态显示不同的图标,这是一个很好的用户体验设计。

为了提高可访问性,建议为图标添加一个 aria-label 属性,以便屏幕阅读器用户能够理解图标的功能。例如:

- <wd-icon custom-class="wd-picker__arrow" :name="isEmpty ? 'arrow-right' : 'close'" />
+ <wd-icon custom-class="wd-picker__arrow" :name="isEmpty ? 'arrow-right' : 'close'" :aria-label="isEmpty ? '打开选择器' : '清除选择'" />

53-54: 脚本部分的更改实现得很好!

新增的自定义图标功能在脚本部分的实现非常出色,遵循了 Vue 3 Composition API 的最佳实践。isEmpty 计算属性和 rightIconClick 函数的逻辑清晰且高效。

为了提高类型安全性,建议在使用 dateTimePickerRef.value 时进行空值检查,以避免可能的运行时错误。例如:

function rightIconClick() {
  if (isEmpty.value) {
-   dateTimePickerRef.value!.open()
+   dateTimePickerRef.value?.open()
    return
  }
  value18.value = []
  toast.success('清空成功')
}

这样可以避免在 dateTimePickerRef.valueundefined 时出现的潜在错误。

Also applies to: 75-75, 80-81, 176-188

docs/component/calendar-view.md (1)

150-150: 新属性 isDot 已添加到文档中

新属性 isDot 的文档说明已正确添加到 Attributes 表格中。描述清晰地解释了该属性的功能。

然而,有几点建议:

  1. 考虑为该属性添加默认值,例如 false
  2. 可以在文档的其他部分(如"基本使用"或单独的示例)中添加使用 isDot 的示例代码,以便更好地说明其用法。
  3. 确保 ($LOWEST_VERSION$) 占位符被替换为实际的版本号。

建议应用以下更改:

-| isDot   | boolean   | 是否开启红点                                                                                                                                                | `($LOWEST_VERSION$)`       |
+| isDot   | boolean   | 是否开启红点                                                                                                                                                | false | `($LOWEST_VERSION$)`       |

另外,请考虑在文档中添加一个使用 isDot 的示例,例如:

<wd-calendar-view v-model="value" :is-dot="true" @change="handleChange" />

这将帮助用户更好地理解如何使用这个新属性。

src/uni_modules/wot-design-uni/components/wd-calendar-view/month/month.vue (2)

17-21: 新增的小红点功能实现正确,建议考虑灵活性

小红点功能的实现看起来正确且符合需求。使用 <wd-badge> 组件来显示小红点是一个好的选择。

考虑将 topright 属性设置为可配置的 prop,以增加组件的灵活性:

<wd-badge :is-dot="item.isDot" :top="badgeTop" :right="badgeRight">
  <view class="wd-month__day-text">
    {{ item.text }}
  </view>
</wd-badge>

然后在 props 中添加:

badgeTop: {
  type: Number,
  default: 6
},
badgeRight: {
  type: Number,
  default: 6
}

这样可以让使用者根据需要调整小红点的位置。


350-351: isDot 属性添加正确,建议添加注释

isDot 属性的添加正确实现了小红点功能的控制。

建议为 isDot 属性添加注释,以提高代码的可读性和可维护性:

let dayObj: CalendarDayItem = {
  date: date,
  text: day,
  topInfo: '',
  bottomInfo: '',
  type,
  disabled: compareDate(date, props.minDate) === -1 || compareDate(date, props.maxDate) === 1,
  isDot: false // 控制是否显示小红点
}

这样可以帮助其他开发者更快地理解这个属性的用途。

docs/component/calendar.md (2)

159-160: 新属性 isDot 的文档已添加

新增的 isDot 属性文档看起来简洁明了。然而,为了保持文档的一致性和完整性,建议考虑以下几点:

  1. 添加示例代码,展示如何使用 isDot 属性。
  2. 说明该属性的默认值。
  3. 考虑在组件的 "基本使用" 或 "格式化日期" 部分添加对该属性的引用,以便用户更容易发现和理解这个新功能。

建议按照以下格式补充文档:

| isDot      | boolean   | 是否显示红点标记                                | -        | false   | `($LOWEST_VERSION$)` |

## 显示红点标记

设置 `isDot` 属性为 `true`,可以在日期上显示红点标记。

```html
<wd-calendar v-model="value" :formatter="formatter" />
const formatter = (day) => {
  if (day.date === '2023-05-01') {
    day.isDot = true
  }
  return day
}

---

Line range hint `1-560`: **文档整体结构良好,但可以进一步完善**

整体来看,Calendar 组件的文档结构清晰,内容丰富。为了进一步提高文档质量,建议考虑以下几点:

1. 确保所有新增的属性、事件或方法都有相应的示例代码。
2. 检查并统一所有属性、事件和方法的描述格式,确保一致性。
3. 考虑添加一个 "更新日志" 部分,列出组件的版本历史和重要变更。
4. 可以考虑为一些复杂的用例添加在线演示链接,帮助用户更直观地理解组件的使用方法。


建议在文档开头添加一个简短的组件描述和功能列表,以便用户快速了解组件的核心特性。例如:

```markdown
# Calendar 日历选择器

Calendar 组件提供了灵活的日期选择功能,支持单选、多选、范围选择等多种模式。

## 功能特性

- 支持日期、周、月的选择
- 支持范围选择
- 自定义日期格式化
- 快捷选项配置
- 自定义主题样式
src/uni_modules/wot-design-uni/components/wd-datetime-picker/wd-datetime-picker.vue (1)

41-43: 新增的 right-icon 插槽提高了组件的灵活性

这个改动很好地增强了组件的可定制性。通过添加 right-icon 插槽,用户现在可以根据需要自定义右侧图标,同时保持了原有的默认行为。

建议:

  1. 考虑为插槽添加一个简短的注释,说明其用途和预期的使用方式。
  2. 可以在组件的文档中添加这个新插槽的使用示例,以帮助用户理解如何利用这个新功能。

考虑添加如下注释:

+<!-- 自定义右侧图标 -->
<slot name="right-icon" :disabled="disabled" :readonly="readonly">
  <wd-icon v-if="!disabled && !readonly" custom-class="wd-picker__arrow" name="arrow-right" />
</slot>
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 898f079 and e94944c.

📒 Files selected for processing (12)
  • docs/component/calendar-view.md (1 hunks)
  • docs/component/calendar.md (1 hunks)
  • docs/component/datetime-picker.md (2 hunks)
  • src/pages/calendarView/Index.vue (3 hunks)
  • src/pages/datetimePicker/Index.vue (4 hunks)
  • src/uni_modules/wot-design-uni/components/wd-calendar-view/month/index.scss (2 hunks)
  • src/uni_modules/wot-design-uni/components/wd-calendar-view/month/month.vue (2 hunks)
  • src/uni_modules/wot-design-uni/components/wd-calendar-view/types.ts (1 hunks)
  • src/uni_modules/wot-design-uni/components/wd-calendar-view/year/index.scss (2 hunks)
  • src/uni_modules/wot-design-uni/components/wd-calendar-view/year/year.vue (1 hunks)
  • src/uni_modules/wot-design-uni/components/wd-datetime-picker/wd-datetime-picker.vue (1 hunks)
  • src/uni_modules/wot-design-uni/components/wd-pagination/index.scss (2 hunks)
🔇 Additional comments (6)
src/uni_modules/wot-design-uni/components/wd-pagination/index.scss (1)

36-36: 活动状态样式变更可能影响可见性

将活动状态的样式从特定颜色更改为不透明度值可能会影响组件的视觉层次结构。

请确认这个变更是否符合设计规范,并且在各种背景颜色下都能保持足够的对比度。您可以考虑使用 Web 内容无障碍指南(WCAG)的对比度检查工具来验证可访问性。

src/uni_modules/wot-design-uni/components/wd-calendar-view/month/index.scss (1)

126-128: 请提供红点功能的完整实现细节

当前的更改只添加了 .wd-badge 的基本显示属性,这可能不足以完全实现 PR 目标中描述的红点功能。为了全面理解此功能的实现:

  1. 是否有其他文件(如 JavaScript 或 模板文件)也进行了相关更改?
  2. 如何控制红点的显示和隐藏?
  3. 是否有相关的文档或使用示例来说明此新功能?

为了验证完整的实现,请运行以下脚本:

这将帮助我们找到可能与此功能相关的其他文件和文档。

src/pages/calendarView/Index.vue (1)

85-86: 当前日期标记的实现看起来不错

为当前日期添加 topInfoisDot 标记是一个很好的改进。这样可以在日历中清晰地突出显示今天的日期,提高了用户体验。

实现逻辑看起来正确,符合 PR 的目标。好的工作!

src/pages/datetimePicker/Index.vue (1)

36-44: 总结:新增的自定义图标功能增强了日期时间选择器的灵活性和用户体验

这次更改成功地为日期时间选择器组件添加了自定义图标功能。主要亮点包括:

  1. 使用插槽实现灵活的图标定制。
  2. 根据选择器状态动态切换图标。
  3. 实现了清空选择的功能。
  4. 代码结构清晰,遵循 Vue 3 最佳实践。

这些改进显著增强了组件的灵活性和用户体验。建议在合并之前,考虑实施之前提到的小改进,以进一步提高可访问性和类型安全性。

Also applies to: 53-54, 75-75, 80-81, 176-188

docs/component/datetime-picker.md (1)

Line range hint 258-365: 文档更新总体评价

整体而言,此次文档更新质量良好,主要亮点如下:

  1. 新增的自定义图标功能描述清晰,并提供了详细的代码示例。
  2. Slot 表格已更新,包含了新增的 right-icon 插槽信息。
  3. 文档结构保持一致,新内容与现有内容融合得当。

建议在修复之前提到的小问题后合并这些更改。这将为用户提供清晰、准确的新功能使用指南。

src/uni_modules/wot-design-uni/components/wd-calendar-view/month/month.vue (1)

Line range hint 1-365: 总体评价:小红点功能实现完善,符合需求

此PR成功实现了日历组件的小红点新功能。代码变更符合预期,实现了以下目标:

  1. 在模板中添加了 <wd-badge> 组件来显示小红点。
  2. getFormatterDate 函数中添加了 isDot 属性来控制小红点的显示。

这些变更正确地实现了需求,代码质量良好。我提出了一些小的改进建议,主要涉及增加灵活性和改善文档,但这些并不影响功能的正确性。

建议在合并此PR之前,考虑实施之前提到的改进建议,以进一步提高代码的可维护性和灵活性。

Comment on lines +39 to +40
// color: rgba(0,0,0,0.15)
opacity:0.985;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

禁用状态的不透明度显著提高

将禁用状态的样式从 rgba(0,0,0,0.15) 更改为不透明度 0.985 会使禁用的元素变得更加可见。

这可能会导致用户混淆禁用和启用的状态。建议重新考虑这个改动,可能的解决方案包括:

  1. 使用较低的不透明度值,如 0.5 或 0.6。
  2. 保留原来的 rgba 颜色值,因为它提供了更明确的视觉区分。
  3. 如果确实需要更高的不透明度,考虑添加其他视觉提示(如删除线)来表示禁用状态。

请与设计团队讨论,确保这个改动符合整体的设计语言和可用性要求。

Comment on lines +126 to +128
.wd-badge{
display: block;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

建议完善红点样式定义

新增的 .wd-badge 类只设置了 display: block,这可能不足以实现预期的红点效果。建议考虑以下几点:

  1. 为红点添加具体的样式,如大小、颜色、形状等。
  2. 指定红点在日期单元格中的位置。
  3. 确保红点的颜色符合设计要求(当前未指定为红色)。

考虑添加以下样式来完善红点效果:

 .wd-badge{
   display: block;
+  position: absolute;
+  top: 4px;
+  right: 4px;
+  width: 6px;
+  height: 6px;
+  border-radius: 50%;
+  background-color: red;
 }

这将创建一个小型的红色圆点,位于日期单元格的右上角。请根据实际设计需求调整具体的尺寸和位置。

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
.wd-badge{
display: block;
}
.wd-badge{
display: block;
position: absolute;
top: 4px;
right: 4px;
width: 6px;
height: 6px;
border-radius: 50%;
background-color: red;
}

Comment on lines +38 to +39
<wd-calendar-view type="weekrange" allow-same-day v-model="value6" :formatter="formatter"></wd-calendar-view>
<wd-calendar-view type="monthrange" allow-same-day v-model="value6" :formatter="formatter"></wd-calendar-view>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

建议为每个日历组件使用独立的 v-model 绑定

目前,周范围和月范围选择器使用相同的 v-model 绑定(value6)。这可能会导致意外的行为,因为两个组件可能会相互影响。

建议修改如下:

<wd-calendar-view type="weekrange" allow-same-day v-model="weekRangeValue" :formatter="formatter"></wd-calendar-view>
<wd-calendar-view type="monthrange" allow-same-day v-model="monthRangeValue" :formatter="formatter"></wd-calendar-view>

同时,在 <script> 部分定义新的响应式变量:

const weekRangeValue = ref([Date.now() - 24 * 60 * 60 * 1000 * 3, Date.now() - 24 * 60 * 60 * 1000])
const monthRangeValue = ref([Date.now() - 24 * 60 * 60 * 1000 * 3, Date.now() - 24 * 60 * 60 * 1000])

这样可以确保两个日历组件的选择互不影响。

Comment on lines 90 to +91
day.topInfo = '618大促'
day.isDot = true
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

建议使用更灵活的方式标记特殊日期

当前的实现直接在代码中硬编码了特定的促销日期(6月18日)。虽然这种方法可行,但可能不够灵活,特别是当需要频繁更新或添加新的特殊日期时。

建议考虑以下改进:

  1. 创建一个特殊日期的配置数组或对象,可以更容易地管理和更新。
  2. 使用一个函数来检查日期是否为特殊日期,而不是直接在 formatter 中进行判断。

例如:

const specialDates = [
  { month: 5, day: 18, info: '618大促' },
  { month: 10, day: 11, info: '京东双11' }
  // 可以轻松添加更多特殊日期
]

function isSpecialDate(date: Date) {
  return specialDates.find(sd => sd.month === date.getMonth() && sd.day === date.getDate())
}

// 在 formatter 中使用
if (const specialDate = isSpecialDate(date)) {
  day.topInfo = specialDate.info
  day.isDot = true
}

这种方法更容易维护和扩展,特别是当有多个特殊日期需要标记时。

@@ -328,6 +362,7 @@ const displayFormatTabLabel = (items) => {
|------|-----|---------|
| default | 使用默认插槽 | - |
| label | 左侧标题插槽 | - |
| right-icon | 右侧图标插槽,作用域参数:{ disabled, readonly } | $LOWEST_VERSION$ |
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Slot 表格更新

新增的 right-icon 插槽已正确添加到 Slot 表格中。但是有一个小问题需要注意:

$LOWEST_VERSION$ 占位符没有被实际的版本号替换。建议将其替换为实际的最低支持版本号,例如 "1.0.0" 或当前组件库的版本号。

-| right-icon | 右侧图标插槽,作用域参数:{ disabled, readonly } | $LOWEST_VERSION$ |
+| right-icon | 右侧图标插槽,作用域参数:{ disabled, readonly } | 1.0.0 |

Committable suggestion was skipped due to low confidence.

Comment on lines +258 to +291
## 自定义icon

添加 `right-icon` 插槽来自定义右侧图标。


```html
<wd-datetime-picker label="自定义icon" v-model="value" ref="dateTimePickerRef">
<template #right-icon="{ disabled, readonly }">
<view @click.stop="rightIconClick" v-if="!disabled && !readonly">
<wd-icon custom-class="wd-picker__arrow" :name="isEmpty ? 'arrow-right' : 'close'" />
</view>
</template>
</wd-datetime-picker>
```

```typescript
import type {,
DatetimePickerExpose
} from '@/uni_modules/wot-design-uni/components/wd-datetime-picker/types'

const value = ref<any[]>(['', Date.now()])
const dateTimePickerRef=ref<DatetimePickerExpose>(null)

/* right-icon点击事件 */
function rightIconClick() {
if (isEmpty.value) {
dateTimePickerRef.value!.open()
return
}
value.value = []
}
```


Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

新增自定义图标功能的文档说明

这个新增的部分很好地介绍了自定义图标的功能。但是有一些地方可以改进:

  1. 示例代码中使用了 view 标签,这在 uni-app 中不是标准用法。建议改为 viewdiv
  2. 示例代码中的 isEmpty 变量没有在 TypeScript 代码中定义。
  3. 可以添加一些注释来解释 right-icon 插槽的作用域参数 { disabled, readonly } 的用途。

建议进行以下修改:

  1. 将 HTML 示例中的 view 改为 view
  2. 在 TypeScript 代码中添加 isEmpty 的定义。
  3. right-icon 插槽的作用域参数添加注释说明。
 <wd-datetime-picker label="自定义icon" v-model="value" ref="dateTimePickerRef">
        <template #right-icon="{ disabled, readonly }">
-          <view @click.stop="rightIconClick" v-if="!disabled && !readonly">
+          <view @click.stop="rightIconClick" v-if="!disabled && !readonly">
            <wd-icon custom-class="wd-picker__arrow" :name="isEmpty ? 'arrow-right' : 'close'" />
          </view>
        </template>
</wd-datetime-picker>

// TypeScript 代码
import type {,
  DatetimePickerExpose
} from '@/uni_modules/wot-design-uni/components/wd-datetime-picker/types'

const value = ref<any[]>(['', Date.now()])
const dateTimePickerRef=ref<DatetimePickerExpose>(null)
+const isEmpty = computed(() => value.value.length === 0 || value.value.every(v => !v))

/* right-icon点击事件 */
function rightIconClick() {
  if (isEmpty.value) {
    dateTimePickerRef.value!.open()
    return
  }
  value.value = []
}

+// 注释说明
+// right-icon 插槽的作用域参数:
+// disabled: 是否禁用
+// readonly: 是否只读
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## 自定义icon
添加 `right-icon` 插槽来自定义右侧图标。
```html
<wd-datetime-picker label="自定义icon" v-model="value" ref="dateTimePickerRef">
<template #right-icon="{ disabled, readonly }">
<view @click.stop="rightIconClick" v-if="!disabled && !readonly">
<wd-icon custom-class="wd-picker__arrow" :name="isEmpty ? 'arrow-right' : 'close'" />
</view>
</template>
</wd-datetime-picker>
```
```typescript
import type {,
DatetimePickerExpose
} from '@/uni_modules/wot-design-uni/components/wd-datetime-picker/types'
const value = ref<any[]>(['', Date.now()])
const dateTimePickerRef=ref<DatetimePickerExpose>(null)
/* right-icon点击事件 */
function rightIconClick() {
if (isEmpty.value) {
dateTimePickerRef.value!.open()
return
}
value.value = []
}
```
## 自定义icon
添加 `right-icon` 插槽来自定义右侧图标。
```html
<wd-datetime-picker label="自定义icon" v-model="value" ref="dateTimePickerRef">
<template #right-icon="{ disabled, readonly }">
<view @click.stop="rightIconClick" v-if="!disabled && !readonly">
<wd-icon custom-class="wd-picker__arrow" :name="isEmpty ? 'arrow-right' : 'close'" />
</view>
</template>
</wd-datetime-picker>
```
```typescript
import type {,
DatetimePickerExpose
} from '@/uni_modules/wot-design-uni/components/wd-datetime-picker/types'
const value = ref<any[]>(['', Date.now()])
const dateTimePickerRef=ref<DatetimePickerExpose>(null)
const isEmpty = computed(() => value.value.length === 0 || value.value.every(v => !v))
/* right-icon点击事件 */
function rightIconClick() {
if (isEmpty.value) {
dateTimePickerRef.value!.open()
return
}
value.value = []
}
// 注释说明
// right-icon 插槽的作用域参数:
// disabled: 是否禁用
// readonly: 是否只读
```

@oknixus
Copy link

oknixus commented Nov 6, 2024

可以新增自定义文字吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants