ปฏิทินโปรแกรมมินิ WeChat
· 年月周日程视图 · 支持skyline和webview渲染 · 支持插件扩展
มินิโปรแกรมไลบรารีพื้นฐาน SDKVersion
>= 3.0.0
npm i @lspriv/wx-calendar -S
แถบเมนูเครื่องมือพัฒนาแอปเพล็ต WeChat:工具
->构建npm
เอกสารอย่างเป็นทางการ ของ npm
กำหนดค่าในหน้าหรือไฟล์การกำหนดค่าส่วนกลาง
{
"usingComponents" : {
"calendar" : " @lspriv/wx-calendar "
}
}
ใช้ในไฟล์หน้า wxml
< calendar id =" calendar " bindload =" handleLoad " />
const { WxCalendar } = require ( '@lspriv/wx-calendar/lib' ) ;
const { LunarPlugin } = require ( '@lspriv/wc-plugin-lunar' ) ;
// 使用农历插件
WxCalendar . use ( LunarPlugin ) ;
Page ( {
handleLoad ( detail ) {
conosle . log ( 'calendar load' , detail ) ;
}
} )
สำคัญ
โปรดดำเนินการ selectComponent('#calendar') หลังจากเหตุการณ์ bindload
สาขาอัลฟ่าเป็นสาขาที่ทำงานของฉันและสาขาที่มีความคืบหน้าล่าสุด ปัญหา/* สาขาคือการแก้ปัญหาที่กล่าวถึงในปัญหา สาขาที่พัฒนานั้นเทียบเท่ากับ SIT ส่ง PR ไปยังสาขาหลักเพื่อแท็ก ที่จะดึง
npm install
# 启动,默认skyline配置
npm run dev
# 设置webview
# npm run dev @webview 或者 npm run dev @W
npm run build
npm run package
บันทึก
คำสั่งการส่งแพ็กเกจนี้ทำหน้าที่สามส่วน: การบรรจุ การส่ง และการพุชไปยังคลังสินค้า ดังนั้นจึงไม่จำเป็นต้องดำเนินการคำสั่งการบรรจุซ้ำ ๆ
ข้อสอบยังไม่ได้เขียนเลย พอจะมีเวลาไหม?
คุณต้องเปิดใช้งานตัวเลือกต่อไปนี้ มุมขวาบนของเครื่องมือการพัฒนา -> รายละเอียด -> การตั้งค่าท้องถิ่น
usingComponents
ใน globalStyle
ของ pages.json
{
"globalStyle" : {
"wx-calendar" : " /components/wx-calendar "
}
}
โปรดดูการสนับสนุนคอมโพเนนต์ที่กำหนดเองของแอปเพล็ต UniApp สำหรับเรื่องที่ต้องดำเนินการ
อ้างถึง Taro 使用原生模块
บันทึก
หากโปรเจ็กต์ Taro อ้างอิงถึงส่วนประกอบดั้งเดิมของมินิโปรแกรม โปรเจ็กต์จะไม่สามารถแปลงหลายเทอร์มินัลได้อีกต่อไป
คำจำกัดความประเภทต่อไปนี้ปรากฏขึ้น:
type CalendarDay = {
year : number ; // 年
month : number ; // 月
day : number ; // 日
} ;
แอ็ตทริบิวต์ต่อไปนี้ทั้งหมดเป็นทางเลือก
คุณสมบัติ | พิมพ์ | แสดงให้เห็น | ค่าเริ่มต้น |
---|---|---|---|
ดู | เชือก | ดู | เดือน [สัปดาห์|ตาราง] |
เครื่องหมาย | อาร์เรย์ | วาระ ตรา และเครื่องหมายวันหยุด | - |
สั่น | บูลีน | คลิกว่าวันที่จะสั่นหรือไม่ | จริง |
โหมดมืด | บูลีน | โหมดมืด (ตามระบบ) | จริง |
วันที่ | สตริง|หมายเลข | วันที่เลือก | xxxx-xx-xx|การประทับเวลา |
เริ่มต้นสัปดาห์ | ตัวเลข | วันแรกของสัปดาห์ 0|1|2|3|4|5|6 | 0 |
สไตล์ | เชือก | ตั้งค่าตัวแปรสไตล์ธีม | - |
แบบอักษร | เชือก | ตั้งค่าแบบอักษร | - |
พื้นที่ | อาร์เรย์ | พื้นที่เค้าโครงที่กำหนดเอง | ['header', 'title', 'ข้อมูลย่อย', 'วันนี้', 'viewbar', 'dragbar'] |
ดูท่าทาง | บูลีน | ไม่ว่าจะควบคุมมุมมองด้วยการเลื่อนท่าทาง | จริง |
เหมือนกันตรวจสอบแล้ว | บูลีน | รักษาสไตล์วันที่ที่เลือกให้สอดคล้องกัน | เท็จ |
NavBar แบบกำหนดเอง | บูลีน | หน้าที่เป็นที่ตั้งของส่วนประกอบนั้นมีแถบนำทางที่ปรับแต่งหรือไม่ | จริง |
จัดวันที่ | เชือก | การจัดเรียงวันที่ (จัดกึ่งกลาง | จัดชิดเส้นพื้นฐาน) | ศูนย์กลาง [ศูนย์กลาง|พื้นฐาน] |
แสดงส่วนที่เหลือ | บูลีน | จะแสดงวันที่อื่นที่ไม่ใช่เดือนนี้หรือไม่ | จริง |
เคล็ดลับ
เวอร์ชัน 1.7.0+ ได้ลบแอตทริบิวต์มุมมองคงที่ และเพิ่ม viewGesture
มุมมองคงที่ถูกนำไปใช้ในลักษณะต่อไปนี้ โดยมีระดับความเป็นอิสระที่สูงขึ้น
วิธีใหม่ในการปักหมุดมุมมอง
<!-- 固定为周视图 -->
<!-- view 默认初始视图 -->
<!-- view-gesture 取消手势控制 -->
<!-- areas 只保留四个区域,将viewbar和dragbar移除 -->
< calendar
view =" week "
view-gesture =" {{ false }} "
areas =" {{ ['header', 'title', 'subinfo', 'today'] }} "
/>
เคล็ดลับ
เกี่ยวกับ marks
คุณลักษณะ
// 标记里的日期,要么输入年月日year|month|day,要么输入日期 date
type Mark = {
year ?: number ; // 年
month ?: number ; // 月
day ?: number ; // 日
date ?: string | number | Date ; // 日期 yyyy-mm-dd | timestamp | Date
type : 'schedule' | 'corner' | 'festival' | 'solar' ; // 日程|角标|节假日 | 日期文字
text : string ; // 内容
style ?: string | Record < string , string | number > ; // 标记样式
}
// 样式标记
type StyleMark = {
year ?: number ; // 年
month ?: number ; // 月
day ?: number ; // 日
date ?: string | number | Date ; // 日期 yyyy-mm-dd | timestamp |
style : string | Record < string , string | number > ;
}
เนื้อหาของคำบรรยายควรมีความยาวหนึ่งอักขระ เฉพาะตำแหน่งของอักขระหนึ่งตัวเท่านั้นที่ได้รับการแก้ไข หากมีอักขระเพิ่มเติม โปรดปรับตำแหน่งด้วยตนเอง
สำคัญ
หากหน้าที่เป็นที่ตั้งของส่วนประกอบไม่ได้เปิดใช้งานแถบนำทางแบบกำหนดเอง โปรดตั้งค่าแอตทริบิวต์ customNavBar
เป็น false
การโหลดปฏิทิน bindload
เสร็จสมบูรณ์
type LoadEventDetail = {
checked : CalenderDay ; // 当前选择日期
view : 'week' | 'month' | 'schedule' ; // 当前视图
range : [ start : CalenderDay , end : CalenderDay ] ; // 当前渲染的月份范围
}
รับอินสแตนซ์ส่วนประกอบ
< calendar id =" calendar " bindload =" handleLoad " />
import { CalendarExport } from '@lspriv/wx-calendar/lib' ;
Page ( {
handleLoad ( ) {
const calendar = this . selectComponent ( '#calendar' ) as CalendarExport ;
// 如果你使用了其他插件,比如 WxCalendar.use(AnyPlugin),则可以
// const calendar = ... as CalendarExport<[typeof AnyPlugin]>;
}
} ) ;
คลิกวันที่ bindclick
type LoadEventDetail = {
checked : CalenderDay ; // 当前点击日期
view : 'week' | 'month' | 'schedule' ; // 当前视图
}
บันทึก
เหตุการณ์การคลิกวันที่ หากจำเป็น โปรดจัดการด้วยตนเอง
bindchange
การเปลี่ยนแปลงที่เลือก
type ChangeEventDetail = {
checked : CalenderDay ; // 当前选择日期
view : 'week' | 'month' | 'schedule' ; // 当前视图
range : [ start : CalenderDay , end : CalenderDay ] ; // 当前渲染的月份范围
}
การเปลี่ยนแปลงมุมมองแผง bindviewchange
type ViewChangeEventDetail = {
checked : CalenderDay ; // 当前选择日期
view : 'week' | 'month' | 'schedule' ; // 当前视图
}
ทริกเกอร์กำหนดการคลิก bindschedule
type ScheduleEventDetail = {
schedules ?: Array < ScheduleEventDetail > ; // 所有日程
schedule ?: ScheduleEventDetail ; // 当前点击日程
all : boolean ; // 是否所有日程
}
checked
วันที่เลือกแล้ว
{
/**
* @param date 选中日期
* yyyy-mm-dd | timestamp | Date | CalendarDay
*/
( date : string | number | Date | CalendarDay ) : Promise < void > ;
}
สลับมุม toggleView
สลับมุมมอง
{
/**
* @param [view] 要切换的视图
* 当view未指定时,会在周月视图之间切换
*/
( view ?: 'month' | 'week' | 'schedule' ) : void ;
}
openAnuual
เปิดแผงประจำปี
{
( ) : Promise < void > ;
}
getMarks
ได้รับเครื่องหมายวันที่ที่สมบูรณ์
{
/**
* @param date 获取日期
*/
( date : CalendarDay ) : PluginEntireMarks ;
}
getPlugin
รับอินสแตนซ์ปลั๊กอิน
{
/**
* @param key 插件的KEY
*/
( key : string ) : InstanceType < PluginConstructor > ;
}
updateDates
อัพเดตข้อมูลวันที่
{
/**
* 若不指定哪些日期更新,默认刷新全部
*/
( dates ?: Array < CalendarDay > ) : Promise < void > ;
}
คอมโพเนนต์เปิดการแยกสไตล์ไว้แล้ว คุณสามารถปรับเปลี่ยนได้เฉพาะขนาดตัวอักษรและหมายเลขสีเท่านั้น คุณสามารถแก้ไขตัวแปร CSS ต่อไปนี้ได้โดยส่งแอตทริบิวต์ style เพื่อปรับธีม
. wcc {
/* 浅色主题 */
--wc-bg-light : # FFF ; /* 主背景色 */
--wc-title-color-light : # 333 ; /* 左上角日期标题 */
--wc-title-sub-color-light : # 7A7A7A ; /* 左上角日期标题的右侧描述 */
--wc-opt-bg-light : # D9ECFF ; /* 视图控制背景色 */
--wc-opt-checked-bg-light : # 409EFF ; /* 视图控制按钮背景色 */
--wc-opt-color-light : # 409EFF ; /* 视图控制字体 */
--wc-opt-checked-color-light : # FFF ; /* 视图控制选中字体 */
--wc-week-color-light : # ABABAB ; /* 星期 */
--wc-date-color-light : # 333 ; /* 日期 */
--wc-mark-color-light : # ABABAB ; /* 日期下方信息 */
--wc-dot-color-light : # ABABAB ; /* 日期上方‘・’ */
--wc-schedule-color-light : # 409EFF ; /* 日程默认 */
--wc-schedule-bg-light : # EAEEF2 ; /* 日程默认背景 */
--wc-today-color-light : # 409EFF ; /* 日期(今日) */
--wc-solar-color-light : # 409EFF ; /* 日期下方信息默认(节气,节假日) */
--wc-checked-color-light : # 333 ; /* 被选日期 */
--wc-checked-mark-color-light : # ABABAB ; /* 被选日期下方信息 */
--wc-checked-dot-color-light : # ABABAB ; /* 被选日期上方‘・’ */
--wc-checked-today-color-light : # FFF ; /* 被选日期(今日) */
--wc-checked-bg-light : # F5F5F5 ; /* 被选日期背景圆圈 */
--wc-checked-today-bg-light : # 409EFF ; /* 被选日期背景圆圈(今日) */
--wc-control-bg-light : # DFDFDF ; /* 底部控制条背景 */
--wc-annual-bg-light : # FFF ; /* 年面板背景 */
--wc-annual-title-color-light : # 333 ; /* 年面板左上角标题 */
--wc-annual-title-sub-color-light : # 7A7A7A ; /* 年面板左上角标题右侧信息 */
/* 深色主题,以下和浅色主题一一对应 */
--wc-bg-dark : # 000 ;
--wc-title-color-dark : # E5E5E5 ;
--wc-title-sub-color-dark : # 7A7A7A ;
--wc-opt-bg-dark : # 332D2D80 ;
--wc-opt-checked-bg-dark : # 409EFF ;
--wc-opt-color-dark : # 409EFF ;
--wc-opt-checked-color-dark : # FFF ;
--wc-week-color-dark : # ABABAB ;
--wc-date-color-dark : # E5E5E5 ;
--wc-mark-color-dark : # 5F5F5F ;
--wc-dot-color-dark : # ABABAB ;
--wc-schedule-color-dark : # 66B1FF ;
--wc-schedule-bg-dark : # 332D2D80 ;
--wc-today-color-dark : # 409EFF ;
--wc-solar-color-dark : # 409EFF ;
--wc-checked-color-dark : # E5E5E5 ;
--wc-checked-mark-color-dark : # 5F5F5F ;
--wc-checked-dot-color-dark : # ABABAB ;
--wc-checked-today-color-dark : # E5E5E5 ;
--wc-checked-bg-dark : # 262626 ;
--wc-checked-today-bg-dark : # 409EFF ;
--wc-control-bg-dark : # 262626 ;
--wc-annual-bg-dark : # 000 ;
--wc-annual-title-color-dark : # E5E5E5 ;
--wc-annual-title-sub-color-dark : # 3F3F3F ;
/** 字号 */
--wc-title-size : 46 rpx ; /** 左上角日期标题字号 */
--wc-title-sub-size : 20 rpx ; /** 左上角日期标题右侧描述信息字号 */
--wc-operator-size : 22 rpx ; /** 视图控制按钮字号 */
--wc-week-size : 20 rpx ; /** 星期字号 */
--wc-date-size : 36 rpx ; /** 日期字体字号 */
--wc-mark-size : 20 rpx ; /** 日期下方信息字体字号 */
--wc-corner-size : 16 rpx ; /** 日期角标字体字号 */
--wc-schedule-size : 16 rpx ; /** 日程字体字号 */
--wc-annual-title-size : 50 rpx ; /** 年面板左上角年份标题字体字号 */
--wc-annual-title-sub-size : 18 rpx ; /** 年面板左上角年份标题右侧信息字体字号 */
}
ปรับเปลี่ยนสไตล์
< calendar style =" --wc-bg-light: #000; " />
เนื่องจากลักษณะพิเศษของการสร้าง npm ของมินิโปรแกรม คอมโพเนนต์นี้จึงไม่ใช่ไลบรารี js เพียงอย่างเดียว เพื่อให้ได้พรอมต์ประเภทที่ถูกต้อง คุณต้องระบุพาธในไฟล์ jsconfig.json หรือ tsconfig.json ในไดเร็กทอรีรากของ มินิโปรแกรม
{
"compilerOptions" : {
"paths" : {
"@lspriv/wx-calendar/*" : [
" ./node_modules/@lspriv/wx-calendar/dist/* "
]
}
}
}
const { WxCalendar } = require ( '@lspriv/wx-calendar/lib' ) ;
const { YourPlugin } = require ( 'anywhere' ) ;
// WxCalendar.clearPlugin(); 清理预设插件
WxCalendar . use ( YourPlugin , options ) ; // options 插件选项
Component ( {
...
} )
import { Plugin } from '@lspriv/wx-calendar/lib' ;
class MyPlugin implements Plugin {
/**
* 插件的 KEY 是必须的,没有此插件会被过滤掉
*/
static KEY = 'my-plugin' as const ;
/**
* 构造函数,参数为用户传入的插件选项。
* 此构造器可选择实现,如果没有提供选项配置或是其他初始化过程的话。
*/
constructor ( options ?: Record < string , any > ) {
// options 引入时的插件选项
}
}
ลงทะเบียน hooks วงจรชีวิตสามรายการของส่วนประกอบปฏิทิน created
attached
detacched
import { Plugin , PluginService , CalendarData } from '@lspriv/wx-calendar/lib' ;
class MyPlugin implements Plugin {
/**
* 插件初始化,可选择实现该方法
* 在日历组件 created 阶段最后,在插件实例化后
* @param service PliginService实例
*/
PLUGIN_INITIALIZE ( service : PluginService ) : void {
// 获取日历组件实例
const component = service . component ;
}
/**
* 组件挂载,可选择实现该方法
* 在日历组件 attached 阶段中,此时组件的所有工具类已完成实例化,视图数据即将更新。
* 你可以在此方法里修改视图更新数据 sets,还可以调整一些工具实例的初始值。
* @param service PliginService实例
* @param sets 视图数据
*/
PLUGIN_ON_ATTACH ( service : PluginService , sets : Partial < CalendarData > ) : void {
}
/**
* 组件销毁,可选择实现该方法
* 在日历组件 detacched 阶段中
* @param service PliginService实例
*/
PLUGIN_ON_DETACHED ( service : PluginService ) : void {
}
}
เพิ่มการประทับวันที่แก้ไขและลบ และกรอกข้อมูลกำหนดการเสริมให้ครบถ้วน
import {
Plugin ,
WcYear ,
CalendarDay ,
TrackDateResult ,
TrackYearResult ,
WcScheduleInfo ,
getMarkKey ,
getAnnualMarkKey
} from '@lspriv/wx-calendar/lib' ;
class MyPlugin implements Plugin {
/**
* 捕获日期,可选择实现该方法
* 在此添加修改和删除【周/月/日程视图面板】的日期标记
* @param date 日期
*/
PLUGIN_TRACK_DATE ( date : CalendarDay ) : TrackDateResult | null {
// do something...
return {
schedule : [ { text : '' , color : '' , bgColor : '' , key : getMarkKey ( 'id' , MyPlugin . KEY ) } ] , // 设置日程数组,可选
corner : { text : '' , color : '' } , // 设置角标,可选
festival : { text : '' , color : '' } , // 设置节假日,可选
style : { backgroundColor : '' , color : '' } // 设置日期样式,也可传字符串形式(如 'background-color: #409EFF;color: #fff;'),可选
} ;
} ;
/**
* 捕获年份,可选择实现该方法
* 在此添加修改和删除【年面板】的日期标记
* @param year 年
*/
PLUGIN_TRACK_YEAR ( year : WcYear ) : TrackYearResult | null {
// do something...
return {
subinfo : [
{ text : '乙巳蛇年' , color : '#F56C6C' } ,
{ text : '农历初一' , color : '#409EFF' }
] ,
marks : new Map ( [
[ getAnnualMarkKey ( { month : 10 , day : 6 } ) , { rwtype : 'rest' } ] , // 休息日,置灰
[ getAnnualMarkKey ( { month : 10 , day : 7 } ) , { rwtype : 'work' } ] , // 工作日,正常
[ getAnnualMarkKey ( { month : 10 , day : 12 } ) , { sub : '#F56C6C' } ] // 自定义颜色下标
[ getAnnualMarkKey ( { month : 10 , day : 20 } ) , {
style : {
color : { light : '#fff' , dark : '#000' } , // 日期字体颜色, light浅色模式下,dark深色模式下
bgColor : { light : '#409EFF' , dark : '#409EFF' } , // 日期背景颜色
opacity : { light : 1 , dark : 1 } , // 不支持 0
bgTLRadius : { light : 50 , dark : 50 } , // 日期背景左上圆角半径
bgTRRadius : { light : 0 , dark : 0 } , // 日期背景右上圆角半径
bgBLRadius : { light : 0 , dark : 0 } , // 日期背景左下圆角半径
bgBRRadius : { light : 50 , dark : 50 } , // 日期背景右下圆角半径
bgWidth : { light : 'dateCol' , dark : 'dateCol' } // 日期背景宽度,deteCol为列宽
}
} ]
] )
}
} ;
/**
* 捕获日程信息(点击日程时执行),可选择实现该方法
* @param date 日期
* @param id 插件内标记, 由 getMarkKey 生成 key 时传入的 id,详见 PLUGIN_TRACK_DATE
*/
PLUGIN_TRACK_SCHEDULE ( date : CalendarDay , id :? string ) : WcScheduleInfo {
}
}
บันทึกการกระทำด้วยท่าทางของผู้ใช้เมื่อการกระทำเสร็จสมบูรณ์ แต่ก่อนพฤติกรรมเริ่มต้นขององค์ประกอบปฏิทิน
import { Plugin , PluginService , EventIntercept } from '@lspriv/wx-calendar/lib' ;
class MyPlugin implements Plugin {
/**
* 拦截日期点击动作,可选择实现该方法
* @param service PliginService实例
* @param event 事件参数
* @param intercept 拦截器
*/
PLUGIN_CATCH_TAP ( service : PluginService , event : TouchEvent , intercept : EventIntercept ) : void {
// 获取日历组件实例
const component = service . component ;
// 若不想事件继续传播
if ( ... ) intercept ( ) ;
// intercept(0) 直接退出
// intercept(1) 继续向其他插件传播,但不会执行日历组件默认行为
}
/**
* 拦截日期跳转动作(如跳转到今日或者调用toDate方法),可选择实现该方法
* @param service PliginService实例
* @param date 要跳转的日期
* @param intercept 拦截器
*/
PLUGIN_CATCH_MANUAL ( service : PluginService , date : CalendarDay , intercept : EventIntercept ) : void { }
}
บันทึก
มีการดำเนินการหลักเจ็ดรายการในสถิติปฏิทินนี้ ปัจจุบัน เฉพาะการดำเนินการคลิกวันที่และการดำเนินการข้ามวันที่เท่านั้นที่จะถูกบันทึก
ตอบสนองต่อ load
เหตุการณ์องค์ประกอบปฏิทิน click
change
viewChange
import { Plugin , PluginService , CalendarEventDetail , OnceEmiter } from '@lspriv/wx-calendar/lib' ;
class MyPlugin implements Plugin {
/**
* 日历加载完成,可选择实现该方法
* @param service PliginService实例
* @param detail 响应数据
* @param emiter 事件触发器
*/
PLUGIN_ON_LOAD ( service : PluginService , detail : CalendarEventDetail , emiter : OnceEmiter ) : void {
// 获取日历组件实例
const component = service . component ;
emiter . cancel ( ) ; // 取消日历组件触发 bindload 事件。
// emiter.emit(detail); 劫持触发 bindload 事件,和 emiter.cancel 只能二选一。
}
/**
* 日期点击事件,可选择实现该方法
* @param service PliginService实例
* @param detail 响应数据
* @param emiter 事件触发器
*/
PLUGIN_ON_CLICK ( service : PluginService , detail : CalendarEventDetail , emiter : OnceEmiter ) : void {
}
/**
* 日期选中变化,可选择实现该方法
* @param service PliginService实例
* @param detail 响应数据
* @param emiter 事件触发器
*/
PLUGIN_ON_CHANGE ( service : PluginService , detail : CalendarEventDetail , emiter : OnceEmiter ) : void {
}
/**
* 视图变化,可选择实现该方法
* @param service PliginService实例
* @param detail 响应数据
* @param emiter 事件触发器
*/
PLUGIN_ON_VIEWCHANGE ( service : PluginService , detail : CalendarEventDetail , emiter : OnceEmiter ) : void {
}
}
import { Plugin , CalendarDay , PluginService , DateRange } from '@lspriv/wx-calendar/lib' ;
class MyPlugin implements Plugin {
/**
* 日期过滤器(提供给其他组件调用的),可选择实现该方法
* @param service PliginService实例
* @param dates 待过滤的日期数组
*/
PLUGIN_DATES_FILTER ( service : PluginService , dates : Array < CalendarDay | DateRange > ) : Array < Calendar | DateRange > {
// 获取日历组件实例
const component = service . component ;
return [
[ { year : 2024 , month : 6 , day : 1 } , { year : 2024 , month : 6 , day : 28 } ] , // 日期范围
{ year : 2024 , month : 7 , day : 1 } // 单点日期
]
}
}
数据标记
เขียนทับข้อมูลปลั๊กอินที่แนะนำครั้งแรก动作捕捉
响应事件
เหตุการณ์ตามลำดับที่ปลั๊กอินถูกนำมาใช้ โดยที่ปลั๊กอินที่แนะนำจะตอบสนองก่อน 有任何问题或是需求请到 `Issues` 面板提交 忙的时候还请见谅 有兴趣开发维护的道友加微信