diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/.gitignore b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..dc4e6353bf3caf74c5953d0bec81c72a3635bf33 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/.gitignore @@ -0,0 +1,9 @@ +/node_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/app.json5 b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..32869cdb9d96f72a7c2fa2ba927ded7e0843c836 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/app.json5 @@ -0,0 +1,11 @@ +{ + "app": { + "bundleName": "com.example.calender", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name", + "distributedNotificationEnabled": true + } +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/resources/base/element/string.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..b9ff703870269e9145d08becf920194549ce2bfe --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "Calender" + } + ] +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/resources/base/media/app_icon.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/AppScope/resources/base/media/app_icon.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/README.md b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/README.md new file mode 100644 index 0000000000000000000000000000000000000000..97b203683800400fa3842e01ae4b10ea9101d1a0 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/README.md @@ -0,0 +1,407 @@ +## 一、项目简介 + +基于ArkUI eTS实现一款能够快速记录下个人旅途行程中的瞬间时刻项目——斓途,顾名思义,斓指多种颜色错杂而繁多耀眼,途指旅途,项目名寓意着旅途行程的过程的事事物物繁多耀眼,项目初衷是为用户提供方便快捷的方式记录下旅途中的精彩瞬间。由于时间不足以搭建自己的后端,所以只简单实现了记录和删除功能,导航栏也留下了未来要实现的功能的位置,待以后有空慢慢完善实现。 + +## 二、功能展示 + +#### 2.1首页 + +![](/figures/ceshi4.gif) + +#### 2.2 查看行程记录 + +![](/figures/ceshi6.gif) + +#### 2.3 查看记录内容 + +![](/figures/ceshi3.gif) + +#### 2.4添加记录 + +![](/figures/ceshi1.gif) + +#### 2.5删除记录 + +![](/figures/ceshi2.gif) + +#### 2.6个人页面(暂无账号功能,所以暂未详细开发) + +![image-20221117121056312](C:\Users\Freeze_three\AppData\Roaming\Typora\typora-user-images\image-20221117121056312.png) + +## 三、功能代码说明 + +### 3.1首页-添加记录 addRecord.ets + +#### 核心代码 + +```typescript + index: number = router.getParams()['index'] //获取首页传递的下标 + controller: TextAreaController = new TextAreaController() + @State spotName: string = ''//地点 + @State text: string = '' //文本内容 + @State rating: number = 1 //评分 + @State indicator: boolean = false + @State currentIndex: number = 0 //步骤条下标 + @State selectedDate: string = getDate() //日期 + @State selectedTime: string = getTime() //时间点 + +Stepper({ index: this.currentIndex }) { + StepperItem() { + Column() { + top() + Column() { + Row() { + Text('地点:').fontSize(24) + TextInput() + .width(120) + .height(30) + .margin({ left: 10 }) + .fontColor('#ff676767') + .onChange((value: string) => { + this.spotName = value + }) + } + + Column() { + Row(){ + Text('日期:').fontSize(24) + Text(this.selectedDate) + .fontSize(20) + .fontColor('#ff676767') + .padding(5) + .margin({left:5,right:5}) + .backgroundColor('#cdf6f5f5') + } + Button("选择日期") + .width(90) + .height(30) + .padding(0) + .margin({top:10}) + .backgroundColor('#409eff') + .onClick(() => { + DatePickerDialog.show({ + start: new Date("2000-1-1"), + onAccept: (value: DatePickerResult) => { + this.selectedDate = `${value.year}-${value.month}-${value.day}` + }, + }) + }) + + + } + .margin({top:30}) + + Column() { + Row(){ + Text('时间点:').fontSize(24).margin({right:20}) + Text(this.selectedTime) + .fontSize(20) + .fontColor('#ff676767') + .padding(5) + .margin({right:20}) + .backgroundColor('#cdf6f5f5') + } + Button("选择时间") + .width(90) + .height(30) + .padding(0) + .margin({top:10}) + .backgroundColor('#409eff') + .onClick(() => { + TimePickerDialog.show({ + useMilitaryTime:true, + onAccept: (value: TimePickerResult) => { + this.selectedTime = formatTime(value.hour,value.minute) + } + }) + }) + } + .margin({top:30}) + + } + .justifyContent(FlexAlign.Center) + .height('90%') + + } + .width('100%') + .padding({ left: 20, right: 20 }) + } + .status(ItemState.Normal) + + StepperItem() { + Column({ space: 10 }) { + top() + Column() { + Row() { + Text('图片:').fontSize(20) + }.width('100%') + + Image($r('app.media.picture')) + .width(64) + .height(64) + .margin({ top: 10 }) + .onClick(() => { + this.tips('抱歉,功能暂未开放') + }) + } + .alignItems(HorizontalAlign.Start) + .width('100%') + + Divider().margin({ top: 10, bottom: 10 }).color(Color.Grey) + Column() { + Row() { + Text('视频:').fontSize(20) + }.width('100%') + + Image($r('app.media.picture')) + .width(64) + .height(64) + .margin({ top: 10 }) + .onClick(() => { + this.tips('抱歉,功能暂未开放') + }) + } + .alignItems(HorizontalAlign.Start) + .width('100%') + + Divider().margin({ top: 10, bottom: 10 }).color(Color.Grey) + Column() { + Row() { + Text('内容:').fontSize(20) + }.width('100%') + + TextArea({ placeholder: '输入内容', controller: this.controller }) + .height(240) + .fontSize(20) + .margin({ top: 10 }) + .onChange((value: string) => { + this.text = value + this.controller.caretPosition(-1) + }) + } + .alignItems(HorizontalAlign.Start) + .width('100%') + + Divider().margin({ top: 10, bottom: 10 }).color(Color.Grey) + Column() { + Row() { + Text('满意程度').fontSize(20) + }.width('100%') + + Rating({ rating: this.rating, indicator: this.indicator }) + .stars(5) + .stepSize(0.5) + .alignSelf(ItemAlign.Start) + .margin({ top: 10,bottom:10 }) + .onChange((value: number) => { + this.rating = value + }) + } + } + .padding({ left: 20, right: 20 }) + } + .nextLabel('下一步') + .status(ItemState.Normal) + } + .onFinish(() => { + let newTravelData:TravelData = {id:0, spotName: this.spotName, travelDate: this.selectedDate, travelTime: this.selectedTime, content: this.text, level: this.rating,img:'',type:this.index} + console.log('type:'+newTravelData.type) + this.TravelTable.insertData(newTravelData,(id)=>{ + newTravelData.id = id; + var innerEvent = { eventId: 10002, priority: emitter.EventPriority.IMMEDIATE } + var eventData = { data: {} } + emitter.emit(innerEvent, eventData); + }) + router.back() + }) + .onChange((prevIndex: number, index: number) => { + this.currentIndex = index; + }) + +``` + +添加记录页面使用了Stepper组件,达到分页问卷的形式让用户填写表单内容,表单内容过多的时候,上下滑动比较不方便,故采用了此组件。 在用户填完问卷最后一步完成后,执行onFinish方法,将用户填的信息作为一个行程记录对象,调用数据库插入方法,将新数据插入数据库中,回调函数是将自增的id赋回给刚刚新建的对象,完成数据库操作后,利用 + +[emmiter]: https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-emitter-0000001333800425 + +将添加新数据的消息通知my_travel组件,使其重新获取数据列表 + +### 3.2这一天-添加记录 + +#### 核心代码 + +```typescript +travel_type:string[] = ['美食', '运动', '风景', '人物', '趣事', '吐槽'] + +Text(`${this.activeDate.year}-${this.activeDate.month}-${this.activeDate.day}`) + .fontSize(16) + Button(){ + Image($r('app.media.add')) + .height(32) + .aspectRatio(1) + .backgroundImageSize(ImageSize.Contain) + } + .type(ButtonType.Circle) + .height(42) + .width(42) + .onClick(()=>{ + TextPickerDialog.show({ + range: this.travel_type, + selected: this.selectType, + onAccept: (value: TextPickerResult) => { + this.selectType = value.index + router.push({url:'pages/addRecord',params:{index:this.selectType}}) + } + }) + }) +``` + +添加表单与首页的是一样的,在进入前需要用户选择行程记录的类型,所以使用了TextPickerDialog组件,供用户选择记录的类型。 + +### 3.3这一天-查看不同日期的行程记录 my_travel.ets + + + +#### 自定义组件--日历 my_Calendar + +日历组件主要使用了Grid和GridItem组件,计算出当年当月的日期后,用一个ForEach渲染出来。 + +##### 主要算法 + +```typescript +//获取当月的日期数组 +function getDays(year:number,month:number):my_date[]{ + let arr:my_date[] = [] + //月份默认是0-11 第三个参数0代表上个月 + const days = new Date(year,month,0).getDate(); + for(let i=1;i<=days;i++){ + const date = new my_date(year,month,i) + arr.push(date) + } + + //算出上个月最后几天放在1号前面,如果1号刚好是周日 就不用 + const first_day = new Date(year,month-1,1).getDay(); + const last_days = new Date(year,month-1,0).getDate(); + for(let i=0;i{ + this.TravelTable.query(date,(result)=>{ + let data:Array = result; + data.sort(sortRule) + this.travel_data = data; + },false) + }) + } + + aboutToAppear(){ + this.getData() + var innerEvent = {eventId:10001} + var callback = (eventData)=>{ + const id:number = eventData.data.id + for(let i=0;i{}) + this.travel_data.splice(i,1); + break; + } + } + } + emitter.on(innerEvent,callback) + var innerEvent2 = {eventId:10002} + var callback2 = (eventData)=>{ + const newData:string = eventData.data.newTravelData + let newTravel:travel_detail = JSON.parse(newData) + //判断当前的日期是否是添加行程选择的日期,是则加入当前显示的数据数组 + if(newTravel.travelDate===`${this.activeDate.year}-${this.activeDate.month}-${this.activeDate.day}`){ + this.travel_data.push(newTravel) + this.travel_data.sort(sortRule) + } + } + emitter.on(innerEvent2,callback2) + + } + +// 监听事件:更改日历日期时,重新获取数据 + changeDate(){ + this.getData() + } + + +``` + +利用生命周期函数aboutToAppear,在页面初次加载时就调用getData方法到数据库中获取当天的行程记录数据,getData根据activeDate选择的日期获取数据库中的行程数据,将其放到travel_data数组中,用于显示。当用户选择日期activeDate改变时,监听执行changeDate方法,重新获取行程记录数据。 在aboutToAppear中,还执行了2个emitter订阅消息,一个是负责接收上一个功能添加记录,添加记录后就触发重新获取数据。还有一个是负责接收下面介绍的删除功能,接收传递的要删除对象的id后,在当前travel_data数组中将其删除,以及数据库中删除。 + + + +### 3.4这一天-删除记录 my_travel.ets + +#### 核心代码 + +```typescript +Button(){ + Image($r('app.media.delete')).width(22).height(22) + } + .width(32) + .height(32) + .padding(0) + .fontSize(12) + .backgroundColor(Color.Red) + .onClick(()=>{ + var innerEvent = {eventId:10001,priority: emitter.EventPriority.IMMEDIATE} + var eventData = {data:{'id':this.item.id}} + emitter.emit(innerEvent,eventData); + }) +``` + +```typescript +var callback = (eventData)=>{ + const id:number = eventData.data.id + for(let i=0;i{}) + this.travel_data.splice(i,1); + break; + } + } + } + emitter.on(innerEvent,callback) +``` + +每个行程记录都是子组件,在子组件进行删除操作同样是要对父组件进行通知,完成数据的更新,所以不如利用emitter,将要删除的id传递到父组件,让父组件来进行删除操作。第二段代码就是接收传递的记录id,然后在数据库执行删除操作,同时,将其在当前显示的数据数组中删除。 + +## 四、项目总结及项目展望 + +这个项目是第一次学习鸿蒙开发知识后做的一个小项目,从一开始的不熟悉,写一下就要查一下文档或者看一下别人的代码规范,到后面能熟悉的使用组件构建页面,尝试根据文档使用一些视频教学中没有的组件或者其他知识,通过这个项目练习提升了自己的鸿蒙开发能力。对于这个项目,时间比较匆忙,没有搭建后端服务,图片,视频功能并没有实现,未来我想通过平时的空余时间,修修补补,以及添砖加瓦,等后面可以加入地图后,还可以优化预先制定游玩行程,在“这一天”的界面可以更加方便快捷的记录。利用用户添加的记录可以延伸到帮助用户快速编写出日志游记等功能,以及文章分享,社区功能等,都有不错的项目前景,是一个很好地旅游记录工具。 + +## 五、项目地址 + + + + + + + diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/build-profile.json5 b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..d7b1117cdb34aab2983ac65026d9e8dcc91332d1 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/build-profile.json5 @@ -0,0 +1,27 @@ +{ + "app": { + "signingConfigs": [], + "compileSdkVersion": 9, + "compatibleSdkVersion": 9, + "products": [ + { + "name": "default", + "signingConfig": "default", + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/.gitignore b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..5a6ba80fa3d9498a23ae8ae7d9518f8743fa8a96 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/.preview +/build +/.cxx \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/build-profile.json5 b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..20c75049f2d45e57d267899b6547c79fb6aa84c1 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/build-profile.json5 @@ -0,0 +1,14 @@ +{ + "apiType": 'stageMode', + "buildOption": { + }, + "targets": [ + { + "name": "default", + "runtimeOS": "HarmonyOS" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/hvigorfile.ts b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..80e4ec5b81689f238c34614b167a0b9e9c83e8d9 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/hvigorfile.ts @@ -0,0 +1,2 @@ +// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. +export { hapTasks } from '@ohos/hvigor-ohos-plugin'; diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/package-lock.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..15bc7145be1490029883067847743ea7134cf545 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "entry", + "version": "1.0.0", + "lockfileVersion": 1 +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/package.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/package.json new file mode 100644 index 0000000000000000000000000000000000000000..c4e988f30f2ec9e3430a4d0c8f05e89fabbc2659 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/package.json @@ -0,0 +1,13 @@ +{ + "name": "entry", + "version": "1.0.0", + "ohos": { + "org": "huawei", + "buildTool": "hvigor", + "directoryLevel": "module" + }, + "description": "example description", + "repository": {}, + "license": "ISC", + "dependencies": {} +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/bean/TravelData.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/bean/TravelData.ets new file mode 100644 index 0000000000000000000000000000000000000000..0dfd97b38c2e1dc864b98402bc502dc4283cd14a --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/bean/TravelData.ets @@ -0,0 +1,10 @@ +export default interface TravelData { + id:number + spotName:string + travelDate:string + travelTime:string + content:string + level:number + img:string + type:number +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/constants/CommonConstants.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/constants/CommonConstants.ets new file mode 100644 index 0000000000000000000000000000000000000000..4b43d76667c66c0d0d87f362496c2097cd54e08b --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/constants/CommonConstants.ets @@ -0,0 +1,23 @@ +export default class CommonConstants{ + /** + * Rdb database config. + */ + static readonly STORE_CONFIG = { name: 'database.db' }; + + /** + * Account table config. + */ + static readonly ACCOUNT_TABLE = { + tableName: 'accountTable', + sqlCreate: 'CREATE TABLE IF NOT EXISTS accountTable(id INTEGER PRIMARY KEY AUTOINCREMENT, spotName STRING, ' + + 'travelDate STRING, travelTime STRING,content STRING, level INTEGER, img STRING, type INTEGER)', + columns: ['id', 'spotName', 'travelDate', 'travelTime', 'content', 'level', 'img', 'type'] + }; + + /** + * Log tag. + */ + static readonly RDB_TAG = '[Debug.Rdb]'; + static readonly TABLE_TAG = '[Debug.AccountTable]'; + static readonly INDEX_TAG = '[Debug.Index]'; +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/database/Rdb.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/database/Rdb.ets new file mode 100644 index 0000000000000000000000000000000000000000..a2073eada2e2dc46f3de33b787cb39bcf01b2caf --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/database/Rdb.ets @@ -0,0 +1,111 @@ +import data_rdb from '@ohos.data.rdb'; +import context from '@ohos.application.context'; +import CommonConstants from '../constants/CommonConstants'; +import { Logger } from '../utils/Logger'; +type Context = context.Context; + + +export default class Rdb { + private rdbStore: any = null; + private tableName: string; + private sqlCreateTable: string; + private columns: Array; + + constructor(tableName: string, sqlCreateTable: string, columns: Array) { + this.tableName = tableName; + this.sqlCreateTable = sqlCreateTable; + this.columns = columns; + } + + getRdbStore(callback) { + if (!callback || typeof callback == 'undefined' || callback == undefined) { + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'getRdbStore() has no callback!'); + return; + } + if (this.rdbStore != null) { + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'The rdbStore exists.'); + callback(); + return + } + var context: Context = getContext(this) as Context; + data_rdb.getRdbStore(context, CommonConstants.STORE_CONFIG, 1, (err, rdb) => { + if (err) { + Logger.error(`${CommonConstants.RDB_TAG}`, 'gerRdbStore() failed, err: ' + err); + return; + } + this.rdbStore = rdb; + this.rdbStore.executeSql(this.sqlCreateTable); + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'getRdbStore() finished.'); + callback(); + }); + } + + insertData(data, callback) { + if (!callback || typeof callback == 'undefined' || callback == undefined) { + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'insertData() has no callback!'); + return; + } + let resFlag: boolean = false; + const valueBucket = data; + this.rdbStore.insert(this.tableName, valueBucket, function (err, ret) { + if (err) { + Logger.error(`${CommonConstants.RDB_TAG}`, 'insertData() failed, err: ' + err); + callback(resFlag); + return; + } + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'insertData() finished: ' + ret); + callback(ret); + }); + } + + deleteData(predicates, callback) { + if (!callback || typeof callback == 'undefined' || callback == undefined) { + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'deleteData() has no callback!'); + return; + } + let resFlag: boolean = false; + this.rdbStore.delete(predicates, function (err, ret) { + if (err) { + Logger.error(`${CommonConstants.RDB_TAG}`, 'deleteData() failed, err: ' + err); + callback(resFlag); + return; + } + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'deleteData() finished: ' + ret); + callback(!resFlag); + }); + } + + updateData(predicates, data, callback) { + if (!callback || typeof callback == 'undefined' || callback == undefined) { + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'updateDate() has no callback!'); + return; + } + let resFlag: boolean = false; + const valueBucket = data; + this.rdbStore.update(valueBucket, predicates, function (err, ret) { + if (err) { + Logger.error(`${CommonConstants.RDB_TAG}`, 'updateData() failed, err: ' + err); + callback(resFlag); + return; + } + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'updateData() finished: ' + ret); + callback(!resFlag); + }); + } + + query(predicates, callback) { + if (!callback || typeof callback == 'undefined' || callback == undefined) { + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'query() has no callback!'); + return; + } + this.rdbStore.query(predicates, this.columns, function (err, resultSet) { + if (err) { + Logger.error(`${CommonConstants.RDB_TAG}`, 'query() failed, err: ' + err); + return; + } + Logger.verbose(`${CommonConstants.RDB_TAG}`, 'query() finished.'); + callback(resultSet); + resultSet.close(); + }); + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/database/tables/TravelTable.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/database/tables/TravelTable.ets new file mode 100644 index 0000000000000000000000000000000000000000..01e3a38b8364332ded15db016c2967955391e48e --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/database/tables/TravelTable.ets @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License,Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import data_rdb from '@ohos.data.rdb'; +import Rdb from '../rdb'; +import TravelData from '../../bean/TravelData'; +import CommonConstants from '../../constants/CommonConstants'; + +export default class TravelTable { + private accountTable = new Rdb(CommonConstants.ACCOUNT_TABLE.tableName, CommonConstants.ACCOUNT_TABLE.sqlCreate, + CommonConstants.ACCOUNT_TABLE.columns); + + constructor(callback: Function = () => {}) { + this.accountTable.getRdbStore(callback); + } + + getRdbStore(callback: Function = () => {}) { + this.accountTable.getRdbStore(callback); + } + + insertData(travel: TravelData, callback: Function) { + const valueBucket = generateBucket(travel); + this.accountTable.insertData(valueBucket, callback); + } + + deleteData(travel: TravelData, callback: Function) { + let predicates = new data_rdb.RdbPredicates(CommonConstants.ACCOUNT_TABLE.tableName); + predicates.equalTo('id', travel.id); + this.accountTable.deleteData(predicates, callback); + } + + updateData(travel: TravelData, callback: Function) { + const valueBucket = generateBucket(travel); + let predicates = new data_rdb.RdbPredicates(CommonConstants.ACCOUNT_TABLE.tableName); + predicates.equalTo('id', travel.id); + this.accountTable.updateData(predicates, valueBucket, callback); + } + + query(travelDate: string, callback: Function, isAll: boolean = true) { + let predicates = new data_rdb.RdbPredicates(CommonConstants.ACCOUNT_TABLE.tableName); + if (!isAll) { + predicates.equalTo('travelDate', travelDate); + } + this.accountTable.query(predicates, function (resultSet) { + let count = resultSet.rowCount; + if (count === 0 || typeof count === 'string') { + console.log(`${CommonConstants.TABLE_TAG}` + 'Query no results!'); + callback([]); + } else { + resultSet.goToFirstRow(); + const result = []; + for (let i = 0; i < count; i++) { + let tmp: TravelData = { id: 0, spotName: '', travelDate: '', travelTime: '', content: '', level: 0,img:'',type:0 }; + tmp.id = resultSet.getDouble(resultSet.getColumnIndex('id')); + tmp.spotName = resultSet.getString(resultSet.getColumnIndex('spotName')); + tmp.travelDate = resultSet.getString(resultSet.getColumnIndex('travelDate')); + tmp.travelTime = resultSet.getString(resultSet.getColumnIndex('travelTime')); + tmp.content = resultSet.getString(resultSet.getColumnIndex('content')); + tmp.level = resultSet.getDouble(resultSet.getColumnIndex('level')); + tmp.img = resultSet.getString(resultSet.getColumnIndex('img')); + tmp.type = resultSet.getDouble(resultSet.getColumnIndex('type')); + result[i] = tmp; + resultSet.goToNextRow(); + } + callback(result); + } + }); + } +} + +function generateBucket(travel: TravelData) { + let obj = {}; + CommonConstants.ACCOUNT_TABLE.columns.forEach((item) => { + if (item != 'id') { + obj[item] = travel[item]; + } + }); + return obj; +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/ConsoleLogger.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/ConsoleLogger.ets new file mode 100644 index 0000000000000000000000000000000000000000..e895856a784004029e33f496257d055218b3fe11 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/ConsoleLogger.ets @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License,Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ILogger } from './ILogger'; + +export class ConsoleLogger implements ILogger { + private appIdentifier: string; + + constructor(appIdentifier: string) { + this.appIdentifier = appIdentifier; + } + + public verbose(tag: string, msg: string): void { + console.log(`[${this.appIdentifier}] [verbose] tag:${tag} msg:${msg}`); + } + + public debug(tag: string, msg: string): void { + console.debug(`[${this.appIdentifier}] [debug] tag:${tag} msg:${msg}`); + } + + public info(tag: string, msg: string): void { + console.info(`[${this.appIdentifier}] [info] tag:${tag} msg:${msg}`); + } + + public warn(tag: string, msg: string): void { + console.warn(`[${this.appIdentifier}] [warn] tag:${tag} msg:${msg}`); + } + + public error(tag: string, msg: string): void { + console.error(`[${this.appIdentifier}] [error] tag:${tag} msg:${msg}`); + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/HiLogger.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/HiLogger.ets new file mode 100644 index 0000000000000000000000000000000000000000..2212aeb8f810b7024ff23f5c38222662a911b866 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/HiLogger.ets @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License,Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import hilog from '@ohos.hilog'; +import { ILogger } from './ILogger'; + +export class HiLogger implements ILogger { + private appIdentifier: string; + private appDomain: number = 0x0001; + + constructor(appIdentifier: string) { + this.appIdentifier = appIdentifier; + } + + public verbose(tag: string, msg: string): void { + hilog.debug(this.appDomain, tag, `[${this.appIdentifier}] [verbose] tag:${tag} msg:${msg}`); + } + + public debug(tag: string, msg: string): void { + hilog.debug(this.appDomain, tag, `[${this.appIdentifier}] [debug] tag:${tag} msg:${msg}`); + } + + public info(tag: string, msg: string): void { + hilog.info(this.appDomain, tag, `[${this.appIdentifier}] [info] tag:${tag} msg:${msg}`); + } + + public warn(tag: string, msg: string): void { + hilog.warn(this.appDomain, tag, `[${this.appIdentifier}] [warn] tag:${tag} msg:${msg}`); + } + + public error(tag: string, msg: string): void { + hilog.error(this.appDomain, tag, `[${this.appIdentifier}] [error] tag:${tag} msg:${msg}`); + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/ILogger.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/ILogger.ets new file mode 100644 index 0000000000000000000000000000000000000000..641294db8ff52954d09fc98e5767c50a6689c372 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/ILogger.ets @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License,Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface ILogger { + verbose(tag: string, msg: string): void; + + debug(tag: string, msg: string): void; + + info(tag: string, msg: string): void; + + warn(tag: string, msg: string): void; + + error(tag: string, msg: string): void; +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/Logger.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/Logger.ets new file mode 100644 index 0000000000000000000000000000000000000000..32821933daeb04887bfcd591a63a58b83efcf07f --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/common/utils/Logger.ets @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License,Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ILogger } from './ILogger'; +import { HiLogger } from './HiLogger'; +import { ConsoleLogger } from './ConsoleLogger'; + +export class Logger implements ILogger { + private static isAppDebugMode: boolean = true; + private static appIdentifier: string = 'RDB'; + + // if true, use a ConsoleLogger, or HiLogger otherwise + private static useConsoleLogger: boolean = true; + + public static verbose(tag: string, msg: string): void { + if (Logger.isAppDebugMode) { + Logger.getInstance().verbose(tag, msg); + } + } + + public static debug(tag: string, msg: string): void { + if (Logger.isAppDebugMode) { + Logger.getInstance().debug(tag, msg); + } + } + + public static info(tag: string, msg: string): void { + if (Logger.isAppDebugMode) { + Logger.getInstance().info(tag, msg); + } + } + + public static warn(tag: string, msg: string): void { + if (Logger.isAppDebugMode) { + Logger.getInstance().warn(tag, msg); + } + } + + public static error(tag: string, msg: string): void { + if (Logger.isAppDebugMode) { + Logger.getInstance().error(tag, msg); + } + } + + private static logger: ILogger; + + private constructor() { + } + + public static getInstance(): Logger { + if (!Logger.logger) { + Logger.logger = Logger.useConsoleLogger + ? new ConsoleLogger(Logger.appIdentifier) + : new HiLogger(Logger.appIdentifier); + } + + return Logger.logger; + } + + public verbose(tag: string, msg: string): void { + Logger.logger.verbose(tag, msg); + } + + public debug(tag: string, msg: string): void { + Logger.debug(tag, msg); + } + + public info(tag: string, msg: string): void { + Logger.info(tag, msg); + } + + public warn(tag: string, msg: string): void { + Logger.warn(tag, msg); + } + + public error(tag: string, msg: string): void { + Logger.error(tag, msg); + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/entryability/EntryAbility.ts b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/entryability/EntryAbility.ts new file mode 100644 index 0000000000000000000000000000000000000000..a548a4a610b5dd2da5ff1fa5173e9d21ccb88d97 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/entryability/EntryAbility.ts @@ -0,0 +1,51 @@ +import hilog from '@ohos.hilog'; +import Ability from '@ohos.application.Ability' +import Window from '@ohos.window' + +export default class EntryAbility extends Ability { + onCreate(want, launchParam) { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); + hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:' + JSON.stringify(launchParam) ?? ''); + } + + onDestroy() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: Window.WindowStage) { + // Main window is created, set main page for this ability + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err, data) => { + if (err.code) { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.ERROR); + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground() { + // Ability has brought to foreground + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground() { + // Ability has back to background + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/model/my_date.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/model/my_date.ets new file mode 100644 index 0000000000000000000000000000000000000000..9d873b12443369881a79ca202eba1175c3f52db0 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/model/my_date.ets @@ -0,0 +1,11 @@ +//自定义日期结构 +export class my_date{ + year:number + month:number + day:number + constructor(year:number,month:number,day:number){ + this.year = year; + this.month = month; + this.day = day; + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/model/travel_detail.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/model/travel_detail.ets new file mode 100644 index 0000000000000000000000000000000000000000..eee0f4860138afdb7fef365da56ada5dc0da4338 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/model/travel_detail.ets @@ -0,0 +1,11 @@ +@Observed +export class travel_detail{ + id:number + spotName:string + travelDate:string + travelTime:string + content:string + level:number + img:string + type:number +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/CheckRecord.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/CheckRecord.ets new file mode 100644 index 0000000000000000000000000000000000000000..714447b35607596ca8478c2d30b1d953fb6dee0f --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/CheckRecord.ets @@ -0,0 +1,47 @@ +import router from '@ohos.router'; +import { travel_detail } from '../model/travel_detail'; + +@Entry +@Component +struct CheckRecord { + travelObj:travel_detail = router.getParams()['data'] + + build() { + Column(){ + Row(){ + Text(this.travelObj.spotName).fontSize(24) + } + .width('100%') + .height(48) + .justifyContent(FlexAlign.Center) + Row(){ + Text('记录时间:').fontSize(18) + Text(this.travelObj.travelDate).fontSize(18).margin({left:10}) + Text(this.travelObj.travelTime).fontSize(18).margin({left:10}) + } + .justifyContent(FlexAlign.Center) + .width('100%') + .margin({top:10}) + Row(){ + Text('满意程度:').fontSize(20).fontWeight(FontWeight.Bold) + Rating({ rating: this.travelObj.level }) + .alignSelf(ItemAlign.Start) + } + .width('100%') + .margin({top:20}) + Row(){ + Column(){ + Text('记录内容:').fontSize(22).fontWeight(FontWeight.Bold) + Text(this.travelObj.content).fontSize(18).margin({top:10}) + } + .width('100%') + .alignItems(HorizontalAlign.Start) + } + .width('100%') + .margin({top:20}) + } + .width('100%') + .height('100%') + .padding({left:10,right:10}) + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Components/my_Calendar.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Components/my_Calendar.ets new file mode 100644 index 0000000000000000000000000000000000000000..9847ecf2292b6da7e6c7ada8636b3aefc33869ae --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Components/my_Calendar.ets @@ -0,0 +1,154 @@ +import {my_date} from '../../model/my_date' + +//获取当月的日期数组 +function getDays(year:number,month:number):my_date[]{ + let arr:my_date[] = [] + //月份默认是0-11 第三个参数0代表上个月 + const days = new Date(year,month,0).getDate(); + for(let i=1;i<=days;i++){ + const date = new my_date(year,month,i) + arr.push(date) + } + + //算出上个月最后几天放在1号前面,如果1号刚好是周日 就不用 + const first_day = new Date(year,month-1,1).getDay(); + const last_days = new Date(year,month-1,0).getDate(); + for(let i=0;i{ + if(this.month-1<1){ + this.year -= 1; + this.month = 12; + }else{ + this.month -= 1; + } + }) + Text(`${this.year}年 ${this.month}月`).fontSize('18fp') + Button('>') + .width(24) + .height(24) + .padding(0) + .margin({right:24}) + .backgroundColor('#409eff') + .onClick(()=>{ + if(this.month+1>12){ + this.year += 1; + this.month = 1; + }else{ + this.month += 1; + } + }) + } + .justifyContent(FlexAlign.SpaceBetween) + .width('100%') + .height(48) + Row(){ + Grid() { + ForEach(this.dayTitle, (title: string) => { + GridItem() { + Text(title) + .fontSize(16) + .fontColor('#fa409eff') + .textAlign(TextAlign.Center) + } + }) + } + .columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr 1fr') + .height(30) + } + Row(){ + Column(){ + Grid(){ + ForEach(getDays(this.year,this.month),(date:my_date)=>{ + if(isToday(date)){ + GridItem() { + Text(date.day.toString()) + .fontSize(16) + .textAlign(TextAlign.Center) + .fontColor(Color.White) + } + .width(30).height(30) + .borderRadius(15) + .backgroundColor('#90409eff') + .onClick(()=>{ + //进行更新日期下的数据的操作 + this.activeDate = date + }) + }else{ + GridItem() { + Text(date.day.toString()) + .fontSize(16) + .textAlign(TextAlign.Center) + .fontColor(isLastOrNextMonth(date,this.month)?'#E5E5EF':Color.Black) + } + .width(30).height(30) + .borderRadius(15) + .border(isActive(this.activeDate,date)?{width:2,style:BorderStyle.Solid,color:'#90409eff'}:{}) + .onClick(()=>{ + //进行更新日期下的数据的操作 + this.activeDate = date + }) + } + + }) + } + .columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr 1fr') + .rowsGap(15) + }.height(230) + + } + + } + } + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Components/my_travel.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Components/my_travel.ets new file mode 100644 index 0000000000000000000000000000000000000000..50d9d59bf7518cc388e342941c1ba6e10a0dca1d --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Components/my_travel.ets @@ -0,0 +1,203 @@ +import {travel_detail} from '../../model/travel_detail' +import {my_date} from '../../model/my_date' + +import router from '@ohos.router'; +import emitter from '@ohos.events.emitter' +import prompt from '@system.prompt' +import TravelTable from '../../common/database/tables/TravelTable'; +import TravelData from '../../common/bean/TravelData'; +@Component +struct travel_item{ + private imgArr:Array = [$r('app.media.food2'),$r('app.media.sport2'),$r('app.media.spot2'),$r('app.media.people2'),$r('app.media.funny2'),$r('app.media.sad2')] + @ObjectLink item:travel_detail; + @State btn_show:boolean = false; + + build(){ + Row(){ + Row(){ + Row(){ + Text(this.item.travelTime).fontSize(16) + } + .height(25) + .borderRadius({topLeft:8,bottomLeft:8}) + .padding(5) + .margin({top:10}) + .backgroundColor('#90409eff') + Divider().color(Color.Grey).vertical(true).strokeWidth(5) + } + .width('17%') + .height('100%') + .padding({left:10}) + .alignItems(VerticalAlign.Top) + .backgroundColor(Color.White) + Row(){ + Row(){ + Image(this.imgArr[this.item.type]) + .width(36) + .height(36) + + Text(this.item.spotName) + .fontSize(18) + .margin({left:10}) + + } + if(this.btn_show){ + Row({space:5}){ + Button(){ + Image($r('app.media.check')).width(24).height(24) + } + .width(32) + .height(32) + .padding(0) + .backgroundColor('#009933') + .onClick(()=>{ + router.push({url:'pages/CheckRecord',params:{data:this.item}}) + }) + + Button(){ + Image($r('app.media.delete')).width(22).height(22) + } + .width(32) + .height(32) + .padding(0) + .fontSize(12) + .backgroundColor(Color.Red) + .onClick(()=>{ + var innerEvent = {eventId:10001,priority: emitter.EventPriority.IMMEDIATE} + var eventData = {data:{'id':this.item.id}} + emitter.emit(innerEvent,eventData); + }) + } + .transition({ type: TransitionType.Insert, translate : {x:100,y:0} }) + .transition({ type: TransitionType.Delete, translate: { x: 150, y: 0.0 } }) + } + } + .justifyContent(FlexAlign.SpaceBetween) + .width('83%') + .height('70%') + .padding({left:15,right:15,top:5,bottom:5}) + .backgroundColor('#fff1f0f0') + .gesture( + PanGesture({direction:PanDirection.Horizontal,distance:5}) + .onActionStart((event)=>{ + animateTo({ duration: 1000 }, () => { + if(event.offsetX<0){ + this.btn_show = true + }else{ + this.btn_show = false + } + }) + }) + ) + } + .width('100%') + .height(100) + } +} + +//对象数组排序规则:按照记录时间从小到大排 +function sortRule(a:travel_detail,b:travel_detail){ + let date_a = a.travelDate.split('-') + let date_b = b.travelDate.split('-') + let time_a = a.travelTime.split(':') + let time_b = b.travelTime.split(':') + return new Date(Number(date_a[0]),Number(date_a[1])-1,Number(date_a[2]),Number(time_a[0]),Number(time_a[1]),0).getTime() - new Date(Number(date_b[0]),Number(date_b[1])-1,Number(date_b[2]),Number(time_b[0]),Number(time_b[1]),0).getTime() +} + + +@Component +export struct my_travel{ + travel_type:string[] = ['美食', '运动', '风景', '人物', '趣事', '吐槽'] + scroller: Scroller = new Scroller() + @Link @Watch('changeDate')activeDate:my_date //选择的日期 + @State travel_data:travel_detail[] = [] //选择日期当天的行程数据 + @State selectType:number = 0 //添加行程时选择的下标 + private TravelTable = new TravelTable(); + +// 根据选择的日期获取当日的记录数据 + getData(){ + const date:string = `${this.activeDate.year}-${this.activeDate.month}-${this.activeDate.day}` + this.TravelTable.getRdbStore(()=>{ + this.TravelTable.query(date,(result)=>{ + let data:Array = result; + data.sort(sortRule) + this.travel_data = data; + },false) + }) + } + + aboutToAppear(){ + this.getData() + var innerEvent = {eventId:10001} + var callback = (eventData)=>{ + const id:number = eventData.data.id + for(let i=0;i{}) + this.travel_data.splice(i,1); + prompt.showToast({message:'删除成功!',duration:2000}) + break; + } + } + } + emitter.on(innerEvent,callback) + var innerEvent2 = {eventId:10002} + var callback2 = (eventData)=>{ + this.getData() + } + emitter.on(innerEvent2,callback2) + + } + +// 监听事件:更改日历日期时,重新获取数据 + changeDate(){ + this.getData() + } + + build(){ + Row(){ + Column(){ + Row(){ + + Text(`${this.activeDate.year}-${this.activeDate.month}-${this.activeDate.day}`) + .fontSize(16) + Button(){ + Image($r('app.media.add')) + .height(32) + .aspectRatio(1) + .backgroundImageSize(ImageSize.Contain) + } + .type(ButtonType.Circle) + .height(42) + .width(42) + .onClick(()=>{ + TextPickerDialog.show({ + range: this.travel_type, + selected: this.selectType, + onAccept: (value: TextPickerResult) => { + this.selectType = value.index + router.push({url:'pages/addRecord',params:{index:this.selectType}}) + } + }) + }) + } + .width('100%') + .padding({left:15,right:15}) + .justifyContent(FlexAlign.SpaceBetween) + Scroll(this.scroller){ + Column(){ + ForEach(this.travel_data,(item)=>{ + travel_item({item:item}) + }) + + + } + } + .width('100%') + .height('45%') + .align(Alignment.Top) + + } + } + } +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Index.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..fd5f096e2361d4b336866be036c6deba7c111c0d --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,187 @@ +import router from '@ohos.router'; +import {RecordPage} from './RecordPage' +import {Personal} from './PersonalPage' + +class MyDataSource implements IDataSource { + private list: Resource[] = [] + private listener: DataChangeListener + + constructor(list: Resource[]) { + this.list = list + } + + totalCount(): number { + return this.list.length + } + + getData(index: number): any { + return this.list[index] + } + + registerDataChangeListener(listener: DataChangeListener): void { + this.listener = listener + } + + unregisterDataChangeListener() { + } +} + + + +@Component +struct Index { + scroller: Scroller = new Scroller() + private swiperController: SwiperController = new SwiperController() + private data: MyDataSource = new MyDataSource([]) + @State submitValue: string = ''; + controller: SearchController = new SearchController(); + + aboutToAppear(): void { + let list = [] + list.push($r('app.media.bg1')) + list.push($r('app.media.bg2')) + list.push($r('app.media.bg3')) + list.push($r('app.media.bg4')) + this.data = new MyDataSource(list) + } + + @Builder + eventCard(name:string,img:Resource,index:number){ + + Column(){ + Image(img) + .width(150).aspectRatio(1) + .borderRadius(12) + .border({width:1,color:Color.Grey,style:BorderStyle.Solid}) + Text(name).fontSize(28) + } + .alignItems(HorizontalAlign.Center) + .borderRadius(20) + .onClick(()=>{ + //跳转到添加行程信息 + router.push({url:'pages/addRecord',params:{index:index}}) + }) + } + + build() { + Column() { + Row() { + Text('主页').fontSize(24).margin({left:20}).onClick(()=>{ + router.push({ + url:'pages/test' + }) + }) + Row(){ + Search({ value: this.submitValue, placeholder: '查询地点', controller: this.controller }) + .searchButton('查询') + .width('70%') + .height(30) + .backgroundColor(Color.White) + .placeholderColor(Color.Grey) + .placeholderFont({ size: 14, weight: 400 }) + .textFont({ size: 14, weight: 400 }) + .onSubmit((value: string) => { + this.submitValue = value; + }) + } + .flexGrow(1) + .justifyContent(FlexAlign.Center) + + + Image($r('app.media.funny')) + .width(30) + .height(30) + .borderRadius(15) + .border({width:1,style:BorderStyle.Solid,color:Color.Grey}) + .margin({right:20}) + } + .justifyContent(FlexAlign.SpaceBetween) + .width('100%') + .height(48) + .margin({top:10}) + + Row() { + Swiper(this.swiperController) { + LazyForEach(this.data, (item: string) => { + Image(item) + .width('90%') + .height(180) + .backgroundImageSize(ImageSize.Cover) + }, item => item) + } + .autoPlay(true) + .duration(1000) + } + Row() { + Text('记录今日') + .fontSize(20) + } + .justifyContent(FlexAlign.Center) + .width('100%') + .height(48) + Divider().color('#E5E5E5') + + Scroll(this.scroller) { + Column({ space: 15 }) { + Row() { + this.eventCard('美食', $r('app.media.food'), 0) + this.eventCard('运动', $r('app.media.sport'), 1) + } + .justifyContent(FlexAlign.SpaceEvenly) + .width('100%') + + Row() { + this.eventCard('风景', $r('app.media.spot'), 2) + this.eventCard('人物', $r('app.media.people'), 3) + } + .justifyContent(FlexAlign.SpaceEvenly) + .width('100%') + + Row() { + this.eventCard('趣事', $r('app.media.funny'), 4) + this.eventCard('吐槽', $r('app.media.sad'), 5) + } + .justifyContent(FlexAlign.SpaceEvenly) + .width('100%') + } + .margin({ top: 12 }) + .width('100%') + } + .height('60%') + .scrollBarWidth(0) + }.width('100%') + } +} + +@Entry +@Component +struct home{ + @State currentIndex:number = 0 + @Builder bottomBarBuilder(name:string,img:Resource,index:number){ + Column(){ + Image(img).width(32).aspectRatio(1).fillColor(this.currentIndex === index ? '#1296db' : Color.Grey) + Text(name).fontSize(16).fontColor(this.currentIndex === index ? '#1296db' : Color.Grey) + }.alignItems(HorizontalAlign.Center).width('100%') + } + build(){ + Tabs({barPosition:BarPosition.End}){ + TabContent(){ + Index() + }.tabBar(this.bottomBarBuilder('主页',$r('app.media.index'),0)) + TabContent(){ + RecordPage() + }.tabBar(this.bottomBarBuilder('这一天',$r('app.media.record'),1)) + TabContent(){ + }.tabBar(this.bottomBarBuilder('文章',$r('app.media.article'),2)) + TabContent(){ + }.tabBar(this.bottomBarBuilder('社区',$r('app.media.community'),3)) + TabContent(){ + Personal() + }.tabBar(this.bottomBarBuilder('个人',$r('app.media.personal'),4)) + } + .onChange((index:number)=>{ + this.currentIndex = index + }) + .scrollable(false) + } +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/PersonalPage.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/PersonalPage.ets new file mode 100644 index 0000000000000000000000000000000000000000..eee6d841eb3d528ae6cb339b72195cb46fcc00df --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/PersonalPage.ets @@ -0,0 +1,99 @@ + +@Component +export struct Personal{ + username:string = '记得打码' + + tips(){ + AlertDialog.show( + { + title:'提示', + message:'抱歉,功能暂未开放', + confirm:{ + value:'确定', + action: () => { + console.info('Button-clicking callback') + } + }, + cancel: () => { + console.info('Closed callbacks') + } + } + ) + } + + build(){ + Column(){ + Row(){ + Text('个人中心').fontSize(24) + } + .width('100%') + .height(48) + .justifyContent(FlexAlign.Center) + .backgroundColor(Color.White) + + Row(){ + Column(){ + Image($r('app.media.funny')) + .width(96) + .aspectRatio(1) + .borderRadius(48) + .border({width:1,style:BorderStyle.Solid,color:'#E5E5E5'}) + Text(`用户名: ${this.username}`).fontSize(20).margin({top:20}) + } + + } + .width('100%') + .height('30%') + .justifyContent(FlexAlign.Center) + .backgroundColor(Color.White) + Column(){ + Row(){ + Row(){ + Image($r('app.media.info')).width(24).height(24) + Text('个人信息').fontSize(20).margin({left:10}) + } + Text('>').fontSize(24).fontColor('#E5E5E5') + } + .width('100%') + .height(48) + .padding({left:20,right:20}) + .justifyContent(FlexAlign.SpaceBetween) + Divider().padding({left:20,right:20}).color('#E5E5E5') + Row(){ + Row(){ + Image($r('app.media.star')).width(24).height(24) + Text('文章收藏').fontSize(20).margin({left:10}) + } + Text('>').fontSize(24).fontColor('#E5E5E5') + } + .width('100%') + .height(48) + .padding({left:20,right:20}) + .justifyContent(FlexAlign.SpaceBetween) + .onClick(()=>{ + this.tips(); + }) + Divider().padding({left:20,right:20}).color('#E5E5E5') + Row(){ + Row(){ + Image($r('app.media.help')).width(24).height(24) + Text('新手指引').fontSize(20).margin({left:10}) + } + Text('>').fontSize(24).fontColor('#E5E5E5') + } + .width('100%') + .height(48) + .padding({left:20,right:20}) + .justifyContent(FlexAlign.SpaceBetween) + .onClick(()=>{ + this.tips(); + }) + } + .margin({top:20}) + .backgroundColor(Color.White) + + } + .height('100%') + .backgroundColor('#E5E5E5') + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/RecordPage.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/RecordPage.ets new file mode 100644 index 0000000000000000000000000000000000000000..3d84afbc979f46472dccbef1073998a31d3d5f8d --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/RecordPage.ets @@ -0,0 +1,19 @@ +import {my_Calendar} from './Components/my_Calendar' +import {my_date} from '../model/my_date' +import {my_travel} from './Components/my_travel' + +@Entry +@Component +export struct RecordPage { + //年份 + @State year:number = new Date().getFullYear() + //月份 + @State month:number = new Date().getMonth()+1 + @State activeDate:my_date = new my_date(this.year,this.month,new Date().getDate()) + build(){ + Column(){ + my_Calendar({year:$year,month:$month,activeDate:$activeDate}) + my_travel({activeDate:$activeDate}) + } + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/addRecord.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/addRecord.ets new file mode 100644 index 0000000000000000000000000000000000000000..6d97e7d8a05dcd04f18a45950f1e331f88bb013b --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/addRecord.ets @@ -0,0 +1,266 @@ +import router from '@ohos.router'; +import emitter from '@ohos.events.emitter'; +import prompt from '@system.prompt' +import TravelTable from '../common/database/tables/TravelTable'; +import TravelData from '../common/bean/TravelData'; + +@Component +struct top { + title: string[] = ['美食', '运动', '风景', '人物', '趣事', '吐槽'] + index: number = router.getParams()['index'] //获取首页传递的下标 + build() { + Row() { + Row() { + Image($r('app.media.back')) + .width(30) + .height(30) + .onClick(() => { + router.back() + }) + }.flexGrow(1) + + Text(`添加${this.title[this.index]}记录`).fontSize(24).flexGrow(13).margin({ right: 20 }) + } + .width('100%') + .height(48) + .justifyContent(FlexAlign.Center) + .alignItems(VerticalAlign.Center) + } +} + +function getDate() { + const today = new Date(); + return `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}` +} + +function getTime() { + const today = new Date(); + return formatTime(today.getHours(), today.getMinutes()) +} + +function formatTime(hour: number, min: number) { + return `${hour > 9 ? hour : '0' + hour}:${min > 9 ? min : '0' + min}` +} + + +@Entry +@Component +struct AddRecord { + index: number = router.getParams()['index'] //获取首页传递的下标 + controller: TextAreaController = new TextAreaController() + @State spotName: string = '' //地点 + @State text: string = '' //文本内容 + @State rating: number = 1 //评分 + @State indicator: boolean = false + @State currentIndex: number = 0 //步骤条下标 + @State selectedDate: string = getDate() //日期 + @State selectedTime: string = getTime() //时间点 + private TravelTable = new TravelTable(); + + tips(msg: string) { + AlertDialog.show( + { + title: '提示', + message: msg, + confirm: { + value: '确定', + action: () => { + console.info('Button-clicking callback') + } + }, + cancel: () => { + console.info('Closed callbacks') + } + } + ) + } + + build() { + Column() { + + Stepper({ index: this.currentIndex }) { + StepperItem() { + Column() { + top() + Column() { + Row() { + Text('地点:').fontSize(24) + TextInput() + .width(120) + .height(30) + .margin({ left: 10 }) + .fontColor('#ff676767') + .onChange((value: string) => { + this.spotName = value + }) + } + + Column() { + Row() { + Text('日期:').fontSize(24) + Text(this.selectedDate) + .fontSize(20) + .fontColor('#ff676767') + .padding(5) + .margin({ left: 5, right: 5 }) + .backgroundColor('#cdf6f5f5') + } + + Button("选择日期") + .width(90) + .height(30) + .padding(0) + .margin({ top: 10 }) + .backgroundColor('#409eff') + .onClick(() => { + DatePickerDialog.show({ + start: new Date("2000-1-1"), + onAccept: (value: DatePickerResult) => { + this.selectedDate = `${value.year}-${value.month+1}-${value.day}` + }, + }) + }) + } + .margin({ top: 30 }) + + Column() { + Row() { + Text('时间点:').fontSize(24).margin({ right: 20 }) + Text(this.selectedTime) + .fontSize(20) + .fontColor('#ff676767') + .padding(5) + .margin({ right: 20 }) + .backgroundColor('#cdf6f5f5') + } + + Button("选择时间") + .width(90) + .height(30) + .padding(0) + .margin({ top: 10 }) + .backgroundColor('#409eff') + .onClick(() => { + TimePickerDialog.show({ + useMilitaryTime: true, + onAccept: (value: TimePickerResult) => { + this.selectedTime = formatTime(value.hour, value.minute) + } + }) + }) + } + .margin({ top: 30 }) + } + .justifyContent(FlexAlign.Center) + .height('90%') + + } + .width('100%') + .padding({ left: 20, right: 20 }) + } + .status(ItemState.Normal) + + StepperItem() { + Column({ space: 10 }) { + top() + Column() { + Row() { + Text('图片:').fontSize(20) + }.width('100%') + + Image($r('app.media.picture')) + .width(64) + .height(64) + .margin({ top: 10 }) + .onClick(() => { + this.tips('抱歉,功能暂未开放') + }) + } + .alignItems(HorizontalAlign.Start) + .width('100%') + + Divider().margin({ top: 10, bottom: 10 }).color(Color.Grey) + Column() { + Row() { + Text('视频:').fontSize(20) + }.width('100%') + + Image($r('app.media.picture')) + .width(64) + .height(64) + .margin({ top: 10 }) + .onClick(() => { + this.tips('抱歉,功能暂未开放') + }) + } + .alignItems(HorizontalAlign.Start) + .width('100%') + + Divider().margin({ top: 10, bottom: 10 }).color(Color.Grey) + Column() { + Row() { + Text('内容:').fontSize(20) + }.width('100%') + + TextArea({ placeholder: '输入内容', controller: this.controller }) + .height(240) + .fontSize(20) + .margin({ top: 10 }) + .onChange((value: string) => { + this.text = value + this.controller.caretPosition(-1) + }) + } + .alignItems(HorizontalAlign.Start) + .width('100%') + + Divider().margin({ top: 10, bottom: 10 }).color(Color.Grey) + Column() { + Row() { + Text('满意程度').fontSize(20) + }.width('100%') + + Rating({ rating: this.rating, indicator: this.indicator }) + .stars(5) + .stepSize(0.5) + .alignSelf(ItemAlign.Start) + .margin({ top: 10, bottom: 10 }) + .onChange((value: number) => { + this.rating = value + }) + } + } + .padding({ left: 20, right: 20 }) + } + .nextLabel('下一步') + .status(ItemState.Normal) + } + .onFinish(() => { + let newTravelData: TravelData = { + id: 0, + spotName: this.spotName, + travelDate: this.selectedDate, + travelTime: this.selectedTime, + content: this.text, + level: this.rating, + img: '', + type: this.index + } + console.log('type:' + newTravelData.type) + this.TravelTable.insertData(newTravelData, (id) => { + newTravelData.id = id; + var innerEvent = { eventId: 10002, priority: emitter.EventPriority.IMMEDIATE } + var eventData = { data: {} } + emitter.emit(innerEvent, eventData); + }) + router.back() + }) + .onChange((prevIndex: number, index: number) => { + this.currentIndex = index; + }) + + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/test.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/test.ets new file mode 100644 index 0000000000000000000000000000000000000000..220a399b88897461f0baa4c2452878b3045ee64b --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/ets/pages/test.ets @@ -0,0 +1,20 @@ +import emitter from '@ohos.events.emitter'; + +function getDate(){ + let date = new Date('2019-9-18 18:20:00') + return date.valueOf() +} + +// xxx.ets +@Entry +@Component +struct test { + + + build() { + Column() { + Text('date值为:' + getDate()).fontSize(40) + + }.width('100%') + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/module.json5 b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..caec4aaedbbc53087b3857a5cae194b77aa84855 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/module.json5 @@ -0,0 +1,41 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntrance": "./ets/entryability/EntryAbility.ts", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.PUBLISH_AGENT_REMINDER" + } + ] + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/element/color.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..3c712962da3c2751c2b9ddb53559afcbd2b54a02 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/element/string.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..f94595515a99e0c828807e243494f57f09251930 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/add.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/add.png new file mode 100644 index 0000000000000000000000000000000000000000..223a7dab3b8cafcfcac82b364739daf476efbc18 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/add.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/article.svg b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/article.svg new file mode 100644 index 0000000000000000000000000000000000000000..2059fdafde2e7c7bebc47d8a6f3a7a7e6ebc3a9b --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/article.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/back.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/back.png new file mode 100644 index 0000000000000000000000000000000000000000..26557a8dfbbfe0cdee6a6d8453932f1d5755c404 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/back.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg1.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg1.png new file mode 100644 index 0000000000000000000000000000000000000000..e00dc82fc01c1d5ebaf5b3800c0864cabe8d69ad Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg1.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg2.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg2.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6344982f2e0c1071bbb69113128c4082a0d1d7 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg2.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg3.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg3.png new file mode 100644 index 0000000000000000000000000000000000000000..3435387aa0c6c526f62eda4936e807a12e6b8b09 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg3.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg4.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg4.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2803b63964bec166b837d9b1f0ce8c05ea1dff Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/bg4.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/check.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/check.png new file mode 100644 index 0000000000000000000000000000000000000000..51703421f1db3f7d87a9881438aae43472156fe2 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/check.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/community.svg b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/community.svg new file mode 100644 index 0000000000000000000000000000000000000000..06d4bce2f7c132894a4ac8b70658e096e96cc249 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/community.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/delete.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..8f3b4d0b8ff4df048352ffa4430925a181ed9483 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/delete.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/food.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/food.png new file mode 100644 index 0000000000000000000000000000000000000000..22d0f1c5146acdbeef74e5b97433c2ea1d70f5f7 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/food.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/food2.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/food2.png new file mode 100644 index 0000000000000000000000000000000000000000..0e47f5ccae73afa5148af5cd9d9dad68c5739ac5 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/food2.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/funny.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/funny.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9c5bb7a8bfd91e71650cfe98697420f8b97bc8 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/funny.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/funny2.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/funny2.png new file mode 100644 index 0000000000000000000000000000000000000000..69a8132a4ed82acc1b975202c6e7aa1010f22d55 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/funny2.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/help.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/help.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdea5f693132bfa0bf24d4a8fe1204750d15cbb Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/help.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/icon.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/icon.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/index.svg b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/index.svg new file mode 100644 index 0000000000000000000000000000000000000000..94ba9a8475f9ae1ebe3da96c0e4dc3930ce95dbc --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/index.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/info.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/info.png new file mode 100644 index 0000000000000000000000000000000000000000..d23c4851e933c2a551c9dc47787ed8df721077d8 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/info.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/people.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/people.png new file mode 100644 index 0000000000000000000000000000000000000000..23225358784acdd10dc2d835e672433b8f1822f5 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/people.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/people2.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/people2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7313f35c6a3293b95bcc0399de95076283a1fd Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/people2.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/personal.svg b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/personal.svg new file mode 100644 index 0000000000000000000000000000000000000000..a1d243114a84095fa865270dc0f64a7edb97b5aa --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/personal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/picture.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..14a823395fdbed63418b92a46eb70a1eacd3baed Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/picture.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/record.svg b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/record.svg new file mode 100644 index 0000000000000000000000000000000000000000..57b8f1b6d3acaa2f8f2cd2bcf9abef9c9ad5c5c7 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/record.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sad.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sad.png new file mode 100644 index 0000000000000000000000000000000000000000..1b049f1d6c2b911d8668f70f4dce911fbe60f2b5 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sad.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sad2.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sad2.png new file mode 100644 index 0000000000000000000000000000000000000000..65650963ea6149419201a836f11c3e66836aa17a Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sad2.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sport.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sport.png new file mode 100644 index 0000000000000000000000000000000000000000..e2fbf316ac0368858ef46c186725e6ec10c6b3f4 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sport.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sport2.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sport2.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce4ca3b148b1e0b6b4333771bedb949548f1aa1 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/sport2.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/spot.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/spot.png new file mode 100644 index 0000000000000000000000000000000000000000..5441468313f18e887d28d66d5242b2d88d348fe3 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/spot.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/spot2.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/spot2.png new file mode 100644 index 0000000000000000000000000000000000000000..319920796dcfdecd6b4473f04fd9a24c0e0bd377 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/spot2.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/star.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/star.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb837fa4ccd1b08a262f0f25f20d0c31d4a4e1f Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/media/star.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/profile/main_pages.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..7076a18c6ac8cffc8e2979d876d41a64e307a860 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,8 @@ +{ + "src": [ + "pages/Index", + "pages/RecordPage", + "pages/addRecord", + "pages/CheckRecord" + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/en_US/element/string.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/en_US/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..f94595515a99e0c828807e243494f57f09251930 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/en_US/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/zh_CN/element/string.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/zh_CN/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..597ecf95e61d7e30367c22fe2f8638008361b044 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "模块描述" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/test/Ability.test.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..460fe8c8c124c821c5451615acc8949f619dbc3f --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,36 @@ +import hilog from '@ohos.hilog'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium' + +export default function abilityTest() { + describe('ActsAbilityTest', function () { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(function () { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(function () { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(function () { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(function () { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain',0, function () { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc' + let b = 'b' + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b) + expect(a).assertEqual(a) + }) + }) +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/test/List.test.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..d766fe249dfc3ada636f27e64d9b64451ce32c93 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,5 @@ +import abilityTest from './Ability.test' + +export default function testsuite() { + abilityTest() +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testability/TestAbility.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testability/TestAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..84765c417cbff3b90c08d4c9accb2ea581ba2df1 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testability/TestAbility.ets @@ -0,0 +1,57 @@ +import hilog from '@ohos.hilog'; +import Ability from '@ohos.application.Ability' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from '@ohos/hypium' +import testsuite from '../test/List.test' +import Window from '@ohos.window' + +export default class TestAbility extends Ability { + onCreate(want, launchParam) { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onCreate'); + hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); + hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:'+ JSON.stringify(launchParam) ?? ''); + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + } + + onDestroy() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onDestroy'); + } + + onWindowStageCreate(windowStage: Window.WindowStage) { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageCreate'); + windowStage.loadContent('testability/pages/Index', (err, data) => { + if (err.code) { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.ERROR); + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', + JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageDestroy'); + } + + onForeground() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onForeground'); + } + + onBackground() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onBackground'); + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testability/pages/Index.ets b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testability/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..954dfe0e29874c9ef11a5ace1673f79e27999864 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testability/pages/Index.ets @@ -0,0 +1,35 @@ +import hilog from '@ohos.hilog'; + +@Entry +@Component +struct Index { + aboutToAppear() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility index aboutToAppear'); + } + @State message: string = 'Hello World' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .width('35%') + .height('5%') + .onClick(()=>{ + }) + } + .width('100%') + } + .height('100%') + } + } \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts new file mode 100644 index 0000000000000000000000000000000000000000..94579b9c1535bc11ee56ee53b48fc90a9977e33a --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,71 @@ +import hilog from '@ohos.hilog'; +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s it', + '-s level', '-s testType', '-s size', '-s timeout', + '-s dryRun' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams = `${targetParams} ${key} ${parameters[key]}` + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', 'addAbilityMonitorCallback : %{public}s', JSON.stringify(err) ?? ''); +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner OnPrepare '); + } + + async onRun() { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun run'); + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.TestAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -d 0 -a TestAbility' + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + var debug = abilityDelegatorArguments.parameters['-D'] + if (debug == 'true') + { + cmd += ' -D' + } + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', 'cmd : %{public}s', cmd); + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); + hilog.info(0x0000, 'testTag', 'executeShellCommand : err : %{public}s', JSON.stringify(err) ?? ''); + hilog.info(0x0000, 'testTag', 'executeShellCommand : data : %{public}s', d.stdResult ?? ''); + hilog.info(0x0000, 'testTag', 'executeShellCommand : data : %{public}s', d.exitCode ?? ''); + }) + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun end'); + } +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/module.json5 b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..46d95d62f1d98834e61853653bc2369cbe5907de --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/module.json5 @@ -0,0 +1,36 @@ +{ + "module": { + "name": "entry_test", + "type": "feature", + "description": "$string:module_test_desc", + "mainElement": "TestAbility", + "deviceTypes": [ + "phone" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:test_pages", + "abilities": [ + { + "name": "TestAbility", + "srcEntrance": "./ets/testability/TestAbility.ets", + "description": "$string:TestAbility_desc", + "icon": "$media:icon", + "label": "$string:TestAbility_label", + "visible": true, + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + } + ] + } + ] + } +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/element/color.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..3c712962da3c2751c2b9ddb53559afcbd2b54a02 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/element/string.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..65d8fa5a7cf54aa3943dcd0214f58d1771bc1f6c --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_test_desc", + "value": "test ability description" + }, + { + "name": "TestAbility_desc", + "value": "the test ability" + }, + { + "name": "TestAbility_label", + "value": "test label" + } + ] +} \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/media/icon.png b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/media/icon.png differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/profile/test_pages.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/profile/test_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..b7e7343cacb32ce982a45e76daad86e435e054fe --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/entry/src/ohosTest/resources/base/profile/test_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "testability/pages/Index" + ] +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi1.gif b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi1.gif new file mode 100644 index 0000000000000000000000000000000000000000..9da1c764a1ec17e4b78809509a35a6c7029eca14 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi1.gif differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi2.gif b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi2.gif new file mode 100644 index 0000000000000000000000000000000000000000..0f0c84c5c90b043df9756ba2b0a3d91c1b8ff85b Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi2.gif differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi3.gif b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi3.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ea0983df877ab5cb4770a47f913235d2907897c Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi3.gif differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi4.gif b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi4.gif new file mode 100644 index 0000000000000000000000000000000000000000..62ddce79d28ea7081821b787251b91c27844ddf6 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi4.gif differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi6.gif b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi6.gif new file mode 100644 index 0000000000000000000000000000000000000000..66072961fea4aa172ffb599e8dd1bc4e3e481357 Binary files /dev/null and b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/figures/ceshi6.gif differ diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/hvigorfile.ts b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..6478186902c0c1ad7c966a929c7d6b7d8ae7a9f3 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/hvigorfile.ts @@ -0,0 +1,2 @@ +// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. +export { appTasks } from '@ohos/hvigor-ohos-plugin'; \ No newline at end of file diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/package-lock.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..6ec28cff08073299e514f4b40f3b1030f5bc5ec5 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/package-lock.json @@ -0,0 +1,1098 @@ +{ + "name": "calender", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ohos/hos-sdkmanager-common": { + "version": "2.0.7", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hos-sdkmanager-common/-/@ohos/hos-sdkmanager-common-2.0.7.tgz", + "integrity": "sha512-1dbZlFPImIatThlZWds8sCe6VMKMWCNqOGhoRoEa8FJACKwlUrTybOjCi+MgR5X+vahQDLtDTvMJoZnfMMig6Q==", + "requires": { + "@ohos/sdkmanager-common": "^2.1.5" + } + }, + "@ohos/hvigor": { + "version": "1.3.1", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor/-/@ohos/hvigor-1.3.1.tgz", + "integrity": "sha512-YxIrzzKOPUrXgAe8isUG5q8CTRsP4TIF4Y4KrCeF+uLhMT2FMsd6LYkVj2X9Ib3+siZA+klIUv1Y+kKXMQ55tg==", + "requires": { + "@ohos/hvigor-base": "1.3.1", + "fs-extra": "10.0.1", + "interpret": "1.4.0", + "liftoff": "4.0.0", + "mute-stdout": "1.0.0", + "pretty-hrtime": "1.0.0", + "typescript": "4.7.4", + "v8flags": "3.2.0", + "yargs": "17.5.1" + } + }, + "@ohos/hvigor-base": { + "version": "1.3.1", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor-base/-/@ohos/hvigor-base-1.3.1.tgz", + "integrity": "sha512-0NBF9DGtrdG5YmEXPOgXokgd/ukIF7EDUqYSwYY0utwUJ08A1ukR+V+dcywrczu2erb80NCWbMyCeZOtrGNPMQ==", + "requires": { + "fs-extra": "10.0.1", + "iconv-lite": "0.6.3", + "json5": "2.2.0", + "lodash": "4.17.21", + "log4js": "6.4.1", + "once": "1.4.0", + "pretty-hrtime": "1.0.0" + } + }, + "@ohos/hvigor-ohos-plugin": { + "version": "1.3.1", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor-ohos-plugin/-/@ohos/hvigor-ohos-plugin-1.3.1.tgz", + "integrity": "sha512-K6Nk2tXNMTJlNf1Ad6nV3+DIQ7iFhBibrelUfHHWqDVlfFUWMxUtpk1Nvs/5RgKIu6O+BJRWJURDgm7mUooAWA==", + "requires": { + "@ohos/hos-sdkmanager-common": "2.0.7", + "@ohos/hvigor-base": "1.3.1", + "@ohos/sdkmanager-common": "2.1.5", + "adm-zip": "0.5.9", + "ajv": "8.10.0", + "deasync": "0.1.28", + "execa": "5.1.1", + "fast-xml-parser": "4.0.3", + "fs-extra": "10.0.1", + "glob": "7.2.0", + "iconv-lite": "0.6.3", + "json5": "2.2.0", + "lodash": "4.17.21", + "pretty-hrtime": "1.0.3", + "resolve-package-path": "4.0.3" + }, + "dependencies": { + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==" + } + } + }, + "@ohos/hypium": { + "version": "1.0.3", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hypium/-/@ohos/hypium-1.0.3.tgz", + "integrity": "sha512-QKh8ngJk1ySbAiKpSTLP5EJIbT8Oja1zV3zwgLD7U9+KX7w2gjNIk3qoP+d13CwpEfaSR3Lxt3exlQLwWSFx3g==" + }, + "@ohos/sdkmanager-common": { + "version": "2.1.5", + "resolved": "https://repo.harmonyos.com/npm/@ohos/sdkmanager-common/-/@ohos/sdkmanager-common-2.1.5.tgz", + "integrity": "sha512-Ka6DncGdEkZ5A9/8aR0oea/PL6yZtPudXTalAX+oXCLIGUxUu400TBcETFZ4fsIePbxmWyOSQW5T1VqUYYIdOg==", + "requires": { + "axios": "0.24.0", + "jszip": "^3.7.0" + } + }, + "adm-zip": { + "version": "0.5.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/adm-zip/-/adm-zip-0.5.9.tgz", + "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==" + }, + "ajv": { + "version": "8.10.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "axios": { + "version": "0.24.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "requires": { + "follow-redirects": "^1.14.4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "date-format": { + "version": "4.0.14", + "resolved": "https://repo.huaweicloud.com/repository/npm/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==" + }, + "deasync": { + "version": "0.1.28", + "resolved": "https://repo.huaweicloud.com/repository/npm/deasync/-/deasync-0.1.28.tgz", + "integrity": "sha512-QqLF6inIDwiATrfROIyQtwOQxjZuek13WRYZ7donU5wJPLoP67MnYxA6QtqdvdBy2mMqv5m3UefBVdJjvevOYg==", + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^1.7.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-xml-parser": { + "version": "4.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-xml-parser/-/fast-xml-parser-4.0.3.tgz", + "integrity": "sha512-xhQbg3a/EYNHwK0cxIG1nZmVkHX/0tWihamn5pU4Mhd9KEVE2ga8ZJiqEUgB2sApElvAATOdMTLjgqIpvYDUkQ==", + "requires": { + "strnum": "^1.0.5" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "findup-sync": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + } + }, + "flagged-respawn": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==" + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "requires": { + "for-in": "^1.0.1" + } + }, + "fs-extra": { + "version": "10.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://repo.huaweicloud.com/repository/npm/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jszip": { + "version": "3.10.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "lie": { + "version": "3.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, + "liftoff": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/liftoff/-/liftoff-4.0.0.tgz", + "integrity": "sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==", + "requires": { + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "object.map": "^1.0.1", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://repo.huaweicloud.com/repository/npm/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "log4js": { + "version": "6.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", + "requires": { + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stdout": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/mute-stdout/-/mute-stdout-1.0.0.tgz", + "integrity": "sha512-MaSQenn0f9oxIjtCufclpV00MuYTiHaXPbdcfPIM+quMqoa8cXywjHHx4LhhIAZlXqPWMdcUpYviajfmHtHRJw==" + }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://repo.huaweicloud.com/repository/npm/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pretty-hrtime": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz", + "integrity": "sha512-CU2l5CYUAptUYq/671ajexQfXuxJFwwg0n243Kdkx8bTjeenedsWgu8TGHPm03vLfNtk3aTXgySKPp3Usykudw==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "requires": { + "resolve": "^1.20.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-package-path": { + "version": "4.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-package-path/-/resolve-package-path-4.0.3.tgz", + "integrity": "sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA==", + "requires": { + "path-root": "^0.1.1" + } + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "streamroller": { + "version": "3.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/streamroller/-/streamroller-3.1.3.tgz", + "integrity": "sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w==", + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } +} diff --git a/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/package.json b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/package.json new file mode 100644 index 0000000000000000000000000000000000000000..dfff304fa19f4925d37a750d3aa886df3b438878 --- /dev/null +++ b/2022_ArkUI_Bootcamp/13380694755-Travel/Travel/package.json @@ -0,0 +1,17 @@ +{ + "name": "calender", + "version": "1.0.0", + "ohos": { + "org": "huawei", + "buildTool": "hvigor", + "directoryLevel": "project" + }, + "description": "example description", + "repository": {}, + "license": "ISC", + "dependencies": { + "@ohos/hypium": "1.0.3", + "@ohos/hvigor": "1.3.1", + "@ohos/hvigor-ohos-plugin": "1.3.1" + } +}