人民日报-init:
模块: entry:入口模块 wdKit:工具类模块 wdConstant:全局常量模块,包括枚举值 wdComponent:基础组件模块 wdNetwork:网络模块
Showing
118 changed files
with
6796 additions
and
0 deletions
PeopleDaily_Harmony/.gitignore
0 → 100644
PeopleDaily_Harmony/AppScope/app.json5
0 → 100644
| 1 | +{ | ||
| 2 | + "string": [ | ||
| 3 | + { | ||
| 4 | + "name": "app_name", | ||
| 5 | + "value": "People's Daily" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "name": "app_desc", | ||
| 9 | + "value": "The People's Daily is an organ newspaper of the Central Committee of the CPC." | ||
| 10 | + }, | ||
| 11 | + { | ||
| 12 | + "name": "app_vendor", | ||
| 13 | + "value": "Wonder Tek" | ||
| 14 | + }, | ||
| 15 | + { | ||
| 16 | + "name": "load_net_data_loading", | ||
| 17 | + "value": "loading..." | ||
| 18 | + }, | ||
| 19 | + { | ||
| 20 | + "name": "load_net_data_failed", | ||
| 21 | + "value": "load net data failed" | ||
| 22 | + }, | ||
| 23 | + { | ||
| 24 | + "name": "load_net_data_none", | ||
| 25 | + "value": "no data" | ||
| 26 | + } | ||
| 27 | + ] | ||
| 28 | +} |
21.1 KB
| 1 | +{ | ||
| 2 | + "string": [ | ||
| 3 | + { | ||
| 4 | + "name": "app_name", | ||
| 5 | + "value": "人民日报" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "name": "app_desc", | ||
| 9 | + "value": "人民日报是中国共产党中央委员会机关报" | ||
| 10 | + }, | ||
| 11 | + { | ||
| 12 | + "name": "app_vendor", | ||
| 13 | + "value": "网达" | ||
| 14 | + }, | ||
| 15 | + { | ||
| 16 | + "name": "load_net_data_loading", | ||
| 17 | + "value": "加载中..." | ||
| 18 | + }, | ||
| 19 | + { | ||
| 20 | + "name": "load_net_data_failed", | ||
| 21 | + "value": "加载网络数据失败" | ||
| 22 | + }, | ||
| 23 | + { | ||
| 24 | + "name": "load_net_data_none", | ||
| 25 | + "value": "很抱歉,未能找到相关内容" | ||
| 26 | + } | ||
| 27 | + ] | ||
| 28 | +} |
PeopleDaily_Harmony/build-profile.json5
0 → 100644
| 1 | +{ | ||
| 2 | + "app": { | ||
| 3 | + "signingConfigs": [ | ||
| 4 | + { | ||
| 5 | + "name": "default", | ||
| 6 | + "type": "HarmonyOS", | ||
| 7 | + "material": { | ||
| 8 | + "certpath": "C:\\Users\\PC\\.ohos\\config\\auto_debug_PeopleDaily_Harmony_com.wondertek.daily_70086000309521319.cer", | ||
| 9 | + "storePassword": "0000001ABBB4B3A70A2A7E171D3468CC9AB106807B092C8862455C201E82C1FCDEA1A52B3EC568DC298B", | ||
| 10 | + "keyAlias": "debugKey", | ||
| 11 | + "keyPassword": "0000001AB7E69A7BECBCDBDFA55535E64932F5C9485CF9199F6CE3978C196EDDD7E66759C3F6BEE770DE", | ||
| 12 | + "profile": "C:\\Users\\PC\\.ohos\\config\\auto_debug_PeopleDaily_Harmony_com.wondertek.daily_70086000309521319.p7b", | ||
| 13 | + "signAlg": "SHA256withECDSA", | ||
| 14 | + "storeFile": "C:\\Users\\PC\\.ohos\\config\\auto_debug_PeopleDaily_Harmony_com.wondertek.daily_70086000309521319.p12" | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + ], | ||
| 18 | + "compileSdkVersion": 9, | ||
| 19 | + "compatibleSdkVersion": 9, | ||
| 20 | + "products": [ | ||
| 21 | + { | ||
| 22 | + "name": "default", | ||
| 23 | + "signingConfig": "default", | ||
| 24 | + } | ||
| 25 | + ] | ||
| 26 | + }, | ||
| 27 | + "modules": [ | ||
| 28 | + { | ||
| 29 | + "name": "entry", | ||
| 30 | + "srcPath": "./entry", | ||
| 31 | + "targets": [ | ||
| 32 | + { | ||
| 33 | + "name": "default", | ||
| 34 | + "applyToProducts": [ | ||
| 35 | + "default" | ||
| 36 | + ] | ||
| 37 | + } | ||
| 38 | + ] | ||
| 39 | + }, | ||
| 40 | + { | ||
| 41 | + "name": "wdKit", | ||
| 42 | + "srcPath": "./wdKit", | ||
| 43 | + "targets": [ | ||
| 44 | + { | ||
| 45 | + "name": "default", | ||
| 46 | + "applyToProducts": [ | ||
| 47 | + "default" | ||
| 48 | + ] | ||
| 49 | + } | ||
| 50 | + ] | ||
| 51 | + }, | ||
| 52 | + { | ||
| 53 | + "name": "wdConstant", | ||
| 54 | + "srcPath": "./wdConstant", | ||
| 55 | + "targets": [ | ||
| 56 | + { | ||
| 57 | + "name": "default", | ||
| 58 | + "applyToProducts": [ | ||
| 59 | + "default" | ||
| 60 | + ] | ||
| 61 | + } | ||
| 62 | + ] | ||
| 63 | + }, | ||
| 64 | + { | ||
| 65 | + "name": "wdNetwork", | ||
| 66 | + "srcPath": "./wdNetwork", | ||
| 67 | + "targets": [ | ||
| 68 | + { | ||
| 69 | + "name": "default", | ||
| 70 | + "applyToProducts": [ | ||
| 71 | + "default" | ||
| 72 | + ] | ||
| 73 | + } | ||
| 74 | + ] | ||
| 75 | + }, | ||
| 76 | + { | ||
| 77 | + "name": "wdComponent", | ||
| 78 | + "srcPath": "./wdComponent", | ||
| 79 | + "targets": [ | ||
| 80 | + { | ||
| 81 | + "name": "default", | ||
| 82 | + "applyToProducts": [ | ||
| 83 | + "default" | ||
| 84 | + ] | ||
| 85 | + } | ||
| 86 | + ] | ||
| 87 | + } | ||
| 88 | + ] | ||
| 89 | +} |
PeopleDaily_Harmony/entry/.gitignore
0 → 100644
PeopleDaily_Harmony/entry/hvigorfile.ts
0 → 100644
PeopleDaily_Harmony/entry/oh-package.json5
0 → 100644
| 1 | +{ | ||
| 2 | + "license": "", | ||
| 3 | + "devDependencies": {}, | ||
| 4 | + "author": "", | ||
| 5 | + "name": "entry", | ||
| 6 | + "description": "Please describe the basic information.", | ||
| 7 | + "main": "", | ||
| 8 | + "version": "1.0.0", | ||
| 9 | + "dependencies": { | ||
| 10 | + "wdKit": "file:../wdKit", | ||
| 11 | + "wdConstant": "file:../wdConstant", | ||
| 12 | + "wdNetwork": "file:../wdNetwork", | ||
| 13 | + "wdComponent": "file:../wdComponent" | ||
| 14 | + } | ||
| 15 | +} |
| 1 | +import UIAbility from '@ohos.app.ability.UIAbility'; | ||
| 2 | +import hilog from '@ohos.hilog'; | ||
| 3 | +import window from '@ohos.window'; | ||
| 4 | + | ||
| 5 | +export default class EntryAbility extends UIAbility { | ||
| 6 | + onCreate(want, launchParam) { | ||
| 7 | + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); | ||
| 8 | + } | ||
| 9 | + | ||
| 10 | + onDestroy() { | ||
| 11 | + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); | ||
| 12 | + } | ||
| 13 | + | ||
| 14 | + onWindowStageCreate(windowStage: window.WindowStage) { | ||
| 15 | + // Main window is created, set main page for this ability | ||
| 16 | + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); | ||
| 17 | + | ||
| 18 | + windowStage.loadContent('pages/MainPage', (err, data) => { | ||
| 19 | + if (err.code) { | ||
| 20 | + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); | ||
| 21 | + return; | ||
| 22 | + } | ||
| 23 | + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); | ||
| 24 | + }); | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + onWindowStageDestroy() { | ||
| 28 | + // Main window is destroyed, release UI related resources | ||
| 29 | + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + onForeground() { | ||
| 33 | + // Ability has brought to foreground | ||
| 34 | + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + onBackground() { | ||
| 38 | + // Ability has back to background | ||
| 39 | + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); | ||
| 40 | + } | ||
| 41 | +} |
| 1 | +import { Logger } from 'wdKit'; | ||
| 2 | +import { CompStyle } from 'wdConstant'; | ||
| 3 | +import { ResponseDTO, WDHttp } from 'wdNetwork'; | ||
| 4 | +import http from '@ohos.net.http'; | ||
| 5 | + | ||
| 6 | +const TAG = 'Index'; | ||
| 7 | + | ||
| 8 | +@Entry | ||
| 9 | +@Component | ||
| 10 | +struct Index { | ||
| 11 | + @State message: string = 'Hello World' | ||
| 12 | + | ||
| 13 | + fetchData(url: string): Promise<string> { | ||
| 14 | + return new Promise<string>((success, error) => { | ||
| 15 | + Logger.info(TAG, `getNavData start`); | ||
| 16 | + WDHttp.get<string>(url).then((resDTO: string) => { | ||
| 17 | + if (!resDTO) { | ||
| 18 | + Logger.error(TAG, 'getNavData then navResDTO is empty'); | ||
| 19 | + error('resDTO is empty'); | ||
| 20 | + return | ||
| 21 | + } | ||
| 22 | + success(resDTO); | ||
| 23 | + }).catch((err: Error) => { | ||
| 24 | + Logger.error(TAG, `fetchNavigationDataApi catch, error.name : ${err.name}, error.message:${err.message}`); | ||
| 25 | + error(err); | ||
| 26 | + }) | ||
| 27 | + }) | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + aboutToAppear() { | ||
| 31 | + Logger.info(TAG, `aboutToAppear ${CompStyle.Label_03}`); | ||
| 32 | + this.message = CompStyle.Label_03 | ||
| 33 | + // let url = 'https://app-sc.miguvideo.com/app-management/v1/staticcache/settings-type/miguvideo/GLOBAL2' | ||
| 34 | + let url = 'https://app-sc.miguvideo.com/app-management/v4/staticcache/navigation-list/miguvideo/android/02' | ||
| 35 | + this.fetchData(url).then((navResDTO: string) => { | ||
| 36 | + Logger.info(TAG, "fetchData then,navResDTO:" + navResDTO); | ||
| 37 | + }) | ||
| 38 | + .catch((err: Error) => { | ||
| 39 | + Logger.error(TAG, `fetchData catch, error.name : ${err.name}, error.message:${err.message}`); | ||
| 40 | + }) | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + build() { | ||
| 44 | + Row() { | ||
| 45 | + Column() { | ||
| 46 | + Text(this.message) | ||
| 47 | + .fontSize(50) | ||
| 48 | + .fontWeight(FontWeight.Bold) | ||
| 49 | + } | ||
| 50 | + .width('100%') | ||
| 51 | + } | ||
| 52 | + .height('100%') | ||
| 53 | + } | ||
| 54 | +} |
| 1 | +import { BottomNavigationComponent} from 'wdComponent'; | ||
| 2 | + | ||
| 3 | +import { Logger } from 'wdKit'; | ||
| 4 | + | ||
| 5 | +const TAG = 'Index'; | ||
| 6 | + | ||
| 7 | +@Entry | ||
| 8 | +@Component | ||
| 9 | +struct MainPage { | ||
| 10 | + aboutToAppear() { | ||
| 11 | + Logger.info(TAG, `aboutToAppear `); | ||
| 12 | + } | ||
| 13 | + | ||
| 14 | + aboutToDisappear() { | ||
| 15 | + Logger.info(TAG, 'aboutToDisappear'); | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + onPageShow() { | ||
| 19 | + Logger.info(TAG, 'onPageShow'); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + onPageHide() { | ||
| 23 | + Logger.info(TAG, 'onPageHide'); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + onBackPress() { | ||
| 27 | + Logger.info(TAG, 'onBackPress'); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + build() { | ||
| 31 | + Column() { | ||
| 32 | + BottomNavigationComponent() | ||
| 33 | + } | ||
| 34 | + } | ||
| 35 | +} |
| 1 | +{ | ||
| 2 | + "module": { | ||
| 3 | + "name": "entry", | ||
| 4 | + "type": "entry", | ||
| 5 | + "description": "$string:module_desc", | ||
| 6 | + "mainElement": "EntryAbility", | ||
| 7 | + "deviceTypes": [ | ||
| 8 | + "phone", | ||
| 9 | + "tablet" | ||
| 10 | + ], | ||
| 11 | + "deliveryWithInstall": true, | ||
| 12 | + "installationFree": false, | ||
| 13 | + "pages": "$profile:main_pages", | ||
| 14 | + "abilities": [ | ||
| 15 | + { | ||
| 16 | + "name": "EntryAbility", | ||
| 17 | + "srcEntry": "./ets/entryability/EntryAbility.ts", | ||
| 18 | + "description": "$string:EntryAbility_desc", | ||
| 19 | + "icon": "$media:app_icon", | ||
| 20 | + "label": "$string:EntryAbility_label", | ||
| 21 | + "startWindowIcon": "$media:app_icon", | ||
| 22 | + "startWindowBackground": "$color:start_window_background", | ||
| 23 | + "exported": true, | ||
| 24 | + "skills": [ | ||
| 25 | + { | ||
| 26 | + "entities": [ | ||
| 27 | + "entity.system.home" | ||
| 28 | + ], | ||
| 29 | + "actions": [ | ||
| 30 | + "action.system.home" | ||
| 31 | + ] | ||
| 32 | + } | ||
| 33 | + ] | ||
| 34 | + } | ||
| 35 | + ] | ||
| 36 | + } | ||
| 37 | +} |
| 1 | +{ | ||
| 2 | + "code": "0", | ||
| 3 | + "data": { | ||
| 4 | + "backgroundColor": "#FFFFFF", | ||
| 5 | + "bottomNavList": [ | ||
| 6 | + { | ||
| 7 | + "backgroundUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231214/image/display/2e1d5f235d1a44cfb9fc120e8596c56b.png", | ||
| 8 | + "channelChooseActionUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231227/vod/display/7c92f5b2a08b4a65aa9da13e66d5ad4a.pag", | ||
| 9 | + "channelChooseCColor": "#666666", | ||
| 10 | + "channelChooseColor": "#222222", | ||
| 11 | + "channelMoreColor": "#666666", | ||
| 12 | + "extraData": "{\"haveSearch\":\"1\",\"haveTopNav\":\"1\",\"leftIconurl\":\"\",\"rightIconUrl\":\"\"}", | ||
| 13 | + "homePageColor": "#FFFFF", | ||
| 14 | + "icon": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231220/image/display/0dc20f38da09405ea0ab675d700bc2ce.png", | ||
| 15 | + "iconC": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231220/image/display/e162a5d3401045f298c237f1c795c015.gif", | ||
| 16 | + "id": 201, | ||
| 17 | + "immersiveIconCUrl": "", | ||
| 18 | + "immersiveIconUrl": "", | ||
| 19 | + "immersiveNameCColor": "#FFFFFF", | ||
| 20 | + "immersiveNameColor": "#FFFFFF", | ||
| 21 | + "logoUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231229/image/display/51d568f9af05421f9754a2c08906dc42.png", | ||
| 22 | + "morningAndEveningUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231214/image/display/0f37cc0c86194c969d2143f85c056c9c.png", | ||
| 23 | + "name": "新闻", | ||
| 24 | + "nameCColor": "#ED2800", | ||
| 25 | + "nameColor": "#999999", | ||
| 26 | + "nightIconCUrl": "", | ||
| 27 | + "nightIconUrl": "", | ||
| 28 | + "nightNameCColor": "", | ||
| 29 | + "nightNameColor": "", | ||
| 30 | + "noticeColor": "#FFFFFF", | ||
| 31 | + "pageId": null, | ||
| 32 | + "pageType": null, | ||
| 33 | + "searchBothColor": "#666666", | ||
| 34 | + "searchUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231214/image/display/2f2a9b3af5334eac8d7c3b6007240b83.png", | ||
| 35 | + "sortValue": 1, | ||
| 36 | + "statusBarColor": 1, | ||
| 37 | + "topNavChannelList": [ | ||
| 38 | + { | ||
| 39 | + "channelId": 2002, | ||
| 40 | + "channelStyle": 2, | ||
| 41 | + "channelType": 1, | ||
| 42 | + "defaultPermitted": 1, | ||
| 43 | + "delPermitted": 0, | ||
| 44 | + "fontCColor": "#FFFFFF", | ||
| 45 | + "fontColor": "#F9AB99", | ||
| 46 | + "headlinesOn": 0, | ||
| 47 | + "homeChannel": "0", | ||
| 48 | + "iconCUrl": "", | ||
| 49 | + "iconCUrlSize": "", | ||
| 50 | + "iconUrl": "", | ||
| 51 | + "iconUrlSize": "", | ||
| 52 | + "localChannel": "0", | ||
| 53 | + "moreChannel": "0", | ||
| 54 | + "movePermitted": 0, | ||
| 55 | + "myChannel": "0", | ||
| 56 | + "name": "热点", | ||
| 57 | + "num": 1, | ||
| 58 | + "pageId": 20012, | ||
| 59 | + "pageType": "", | ||
| 60 | + "underlineCColor": "" | ||
| 61 | + }, | ||
| 62 | + { | ||
| 63 | + "channelId": 2001, | ||
| 64 | + "channelStyle": 2, | ||
| 65 | + "channelType": 1, | ||
| 66 | + "defaultPermitted": 1, | ||
| 67 | + "delPermitted": 0, | ||
| 68 | + "fontCColor": "#FFFFFF", | ||
| 69 | + "fontColor": "#F9AB99", | ||
| 70 | + "headlinesOn": 0, | ||
| 71 | + "homeChannel": "0", | ||
| 72 | + "iconCUrl": "", | ||
| 73 | + "iconCUrlSize": "", | ||
| 74 | + "iconUrl": "", | ||
| 75 | + "iconUrlSize": "", | ||
| 76 | + "localChannel": "0", | ||
| 77 | + "moreChannel": "0", | ||
| 78 | + "movePermitted": 0, | ||
| 79 | + "myChannel": "0", | ||
| 80 | + "name": "推荐", | ||
| 81 | + "num": 2, | ||
| 82 | + "pageId": 20011, | ||
| 83 | + "pageType": "", | ||
| 84 | + "underlineCColor": "" | ||
| 85 | + }, | ||
| 86 | + { | ||
| 87 | + "channelId": 2009, | ||
| 88 | + "channelStyle": 2, | ||
| 89 | + "channelType": 1, | ||
| 90 | + "defaultPermitted": 0, | ||
| 91 | + "delPermitted": 1, | ||
| 92 | + "fontCColor": "#FFFFFF", | ||
| 93 | + "fontColor": "#F9AB99", | ||
| 94 | + "headlinesOn": 0, | ||
| 95 | + "homeChannel": "0", | ||
| 96 | + "iconCUrl": "", | ||
| 97 | + "iconCUrlSize": "", | ||
| 98 | + "iconUrl": "", | ||
| 99 | + "iconUrlSize": "", | ||
| 100 | + "localChannel": "0", | ||
| 101 | + "moreChannel": "0", | ||
| 102 | + "movePermitted": 1, | ||
| 103 | + "myChannel": "0", | ||
| 104 | + "name": "社会", | ||
| 105 | + "num": 3, | ||
| 106 | + "pageId": 20019, | ||
| 107 | + "pageType": "", | ||
| 108 | + "underlineCColor": "" | ||
| 109 | + }, | ||
| 110 | + { | ||
| 111 | + "channelId": 2066, | ||
| 112 | + "channelStyle": 3, | ||
| 113 | + "channelType": 1, | ||
| 114 | + "defaultPermitted": 0, | ||
| 115 | + "delPermitted": 1, | ||
| 116 | + "fontCColor": "#FFFFFF", | ||
| 117 | + "fontColor": "#F9AB99", | ||
| 118 | + "headlinesOn": 0, | ||
| 119 | + "homeChannel": "0", | ||
| 120 | + "iconCUrl": "", | ||
| 121 | + "iconCUrlSize": "", | ||
| 122 | + "iconUrl": "", | ||
| 123 | + "iconUrlSize": "", | ||
| 124 | + "localChannel": "0", | ||
| 125 | + "moreChannel": "0", | ||
| 126 | + "movePermitted": 1, | ||
| 127 | + "myChannel": "0", | ||
| 128 | + "name": "播报", | ||
| 129 | + "num": 4, | ||
| 130 | + "pageId": 21003, | ||
| 131 | + "pageType": "", | ||
| 132 | + "underlineCColor": "" | ||
| 133 | + }, | ||
| 134 | + { | ||
| 135 | + "channelId": 2012, | ||
| 136 | + "channelStyle": 2, | ||
| 137 | + "channelType": 1, | ||
| 138 | + "defaultPermitted": 0, | ||
| 139 | + "delPermitted": 1, | ||
| 140 | + "fontCColor": "#FFFFFF", | ||
| 141 | + "fontColor": "#F9AB99", | ||
| 142 | + "headlinesOn": 0, | ||
| 143 | + "homeChannel": "0", | ||
| 144 | + "iconCUrl": "", | ||
| 145 | + "iconCUrlSize": "", | ||
| 146 | + "iconUrl": "", | ||
| 147 | + "iconUrlSize": "", | ||
| 148 | + "localChannel": "0", | ||
| 149 | + "moreChannel": "0", | ||
| 150 | + "movePermitted": 0, | ||
| 151 | + "myChannel": "0", | ||
| 152 | + "name": "文化", | ||
| 153 | + "num": 5, | ||
| 154 | + "pageId": 20022, | ||
| 155 | + "pageType": "", | ||
| 156 | + "underlineCColor": "" | ||
| 157 | + }, | ||
| 158 | + { | ||
| 159 | + "channelId": 2007, | ||
| 160 | + "channelStyle": 2, | ||
| 161 | + "channelType": 1, | ||
| 162 | + "defaultPermitted": 0, | ||
| 163 | + "delPermitted": 1, | ||
| 164 | + "fontCColor": "#FFFFFF", | ||
| 165 | + "fontColor": "#F9AB99", | ||
| 166 | + "headlinesOn": 0, | ||
| 167 | + "homeChannel": "0", | ||
| 168 | + "iconCUrl": "", | ||
| 169 | + "iconCUrlSize": "", | ||
| 170 | + "iconUrl": "", | ||
| 171 | + "iconUrlSize": "", | ||
| 172 | + "localChannel": "0", | ||
| 173 | + "moreChannel": "0", | ||
| 174 | + "movePermitted": 1, | ||
| 175 | + "myChannel": "0", | ||
| 176 | + "name": "镜头", | ||
| 177 | + "num": 6, | ||
| 178 | + "pageId": 20017, | ||
| 179 | + "pageType": "", | ||
| 180 | + "underlineCColor": "" | ||
| 181 | + }, | ||
| 182 | + { | ||
| 183 | + "channelId": 2006, | ||
| 184 | + "channelStyle": 3, | ||
| 185 | + "channelType": 1, | ||
| 186 | + "defaultPermitted": 0, | ||
| 187 | + "delPermitted": 1, | ||
| 188 | + "fontCColor": "#FFFFFF", | ||
| 189 | + "fontColor": "#F9AB99", | ||
| 190 | + "headlinesOn": 0, | ||
| 191 | + "homeChannel": "0", | ||
| 192 | + "iconCUrl": "", | ||
| 193 | + "iconCUrlSize": "", | ||
| 194 | + "iconUrl": "", | ||
| 195 | + "iconUrlSize": "", | ||
| 196 | + "localChannel": "0", | ||
| 197 | + "moreChannel": "0", | ||
| 198 | + "movePermitted": 1, | ||
| 199 | + "myChannel": "0", | ||
| 200 | + "name": "版面", | ||
| 201 | + "num": 7, | ||
| 202 | + "pageId": 20016, | ||
| 203 | + "pageType": "", | ||
| 204 | + "underlineCColor": "" | ||
| 205 | + }, | ||
| 206 | + { | ||
| 207 | + "channelId": 2015, | ||
| 208 | + "channelStyle": 2, | ||
| 209 | + "channelType": 1, | ||
| 210 | + "defaultPermitted": 0, | ||
| 211 | + "delPermitted": 1, | ||
| 212 | + "fontCColor": "#FFFFFF", | ||
| 213 | + "fontColor": "#F9AB99", | ||
| 214 | + "headlinesOn": 0, | ||
| 215 | + "homeChannel": "0", | ||
| 216 | + "iconCUrl": "", | ||
| 217 | + "iconCUrlSize": "210*60", | ||
| 218 | + "iconUrl": "", | ||
| 219 | + "iconUrlSize": "210*60", | ||
| 220 | + "localChannel": "0", | ||
| 221 | + "moreChannel": "0", | ||
| 222 | + "movePermitted": 1, | ||
| 223 | + "myChannel": "0", | ||
| 224 | + "name": "科技", | ||
| 225 | + "num": 8, | ||
| 226 | + "pageId": 20025, | ||
| 227 | + "pageType": "", | ||
| 228 | + "underlineCColor": "" | ||
| 229 | + }, | ||
| 230 | + { | ||
| 231 | + "channelId": 2063, | ||
| 232 | + "channelStyle": 2, | ||
| 233 | + "channelType": 1, | ||
| 234 | + "defaultPermitted": 0, | ||
| 235 | + "delPermitted": 0, | ||
| 236 | + "fontCColor": "#FFFFFF", | ||
| 237 | + "fontColor": "#F9AB99", | ||
| 238 | + "headlinesOn": 0, | ||
| 239 | + "homeChannel": "0", | ||
| 240 | + "iconCUrl": "", | ||
| 241 | + "iconCUrlSize": "", | ||
| 242 | + "iconUrl": "", | ||
| 243 | + "iconUrlSize": "", | ||
| 244 | + "localChannel": "0", | ||
| 245 | + "moreChannel": "0", | ||
| 246 | + "movePermitted": 1, | ||
| 247 | + "myChannel": "0", | ||
| 248 | + "name": "两会", | ||
| 249 | + "num": 9, | ||
| 250 | + "pageId": 21000, | ||
| 251 | + "pageType": "", | ||
| 252 | + "underlineCColor": "" | ||
| 253 | + }, | ||
| 254 | + { | ||
| 255 | + "channelId": 2064, | ||
| 256 | + "channelStyle": 2, | ||
| 257 | + "channelType": 1, | ||
| 258 | + "defaultPermitted": 0, | ||
| 259 | + "delPermitted": 1, | ||
| 260 | + "fontCColor": "#FFFFFF", | ||
| 261 | + "fontColor": "#F9AB99", | ||
| 262 | + "headlinesOn": 0, | ||
| 263 | + "homeChannel": "0", | ||
| 264 | + "iconCUrl": "", | ||
| 265 | + "iconCUrlSize": "", | ||
| 266 | + "iconUrl": "", | ||
| 267 | + "iconUrlSize": "", | ||
| 268 | + "localChannel": "0", | ||
| 269 | + "moreChannel": "0", | ||
| 270 | + "movePermitted": 1, | ||
| 271 | + "myChannel": "0", | ||
| 272 | + "name": "二十大", | ||
| 273 | + "num": 10, | ||
| 274 | + "pageId": 21001, | ||
| 275 | + "pageType": "", | ||
| 276 | + "underlineCColor": "" | ||
| 277 | + }, | ||
| 278 | + { | ||
| 279 | + "channelId": 2003, | ||
| 280 | + "channelStyle": 2, | ||
| 281 | + "channelType": 1, | ||
| 282 | + "defaultPermitted": 0, | ||
| 283 | + "delPermitted": 1, | ||
| 284 | + "fontCColor": "#FFFFFF", | ||
| 285 | + "fontColor": "#F9AB99", | ||
| 286 | + "headlinesOn": 0, | ||
| 287 | + "homeChannel": "0", | ||
| 288 | + "iconCUrl": "", | ||
| 289 | + "iconCUrlSize": "", | ||
| 290 | + "iconUrl": "", | ||
| 291 | + "iconUrlSize": "", | ||
| 292 | + "localChannel": "0", | ||
| 293 | + "moreChannel": "0", | ||
| 294 | + "movePermitted": 1, | ||
| 295 | + "myChannel": "0", | ||
| 296 | + "name": "锐评", | ||
| 297 | + "num": 11, | ||
| 298 | + "pageId": 20013, | ||
| 299 | + "pageType": "", | ||
| 300 | + "underlineCColor": "" | ||
| 301 | + }, | ||
| 302 | + { | ||
| 303 | + "channelId": 2011, | ||
| 304 | + "channelStyle": 2, | ||
| 305 | + "channelType": 1, | ||
| 306 | + "defaultPermitted": 0, | ||
| 307 | + "delPermitted": 1, | ||
| 308 | + "fontCColor": "#FFFFFF", | ||
| 309 | + "fontColor": "#F9AB99", | ||
| 310 | + "headlinesOn": 0, | ||
| 311 | + "homeChannel": "0", | ||
| 312 | + "iconCUrl": "", | ||
| 313 | + "iconCUrlSize": "", | ||
| 314 | + "iconUrl": "", | ||
| 315 | + "iconUrlSize": "", | ||
| 316 | + "localChannel": "0", | ||
| 317 | + "moreChannel": "0", | ||
| 318 | + "movePermitted": 1, | ||
| 319 | + "myChannel": "0", | ||
| 320 | + "name": "体育", | ||
| 321 | + "num": 12, | ||
| 322 | + "pageId": 20021, | ||
| 323 | + "pageType": "", | ||
| 324 | + "underlineCColor": "" | ||
| 325 | + }, | ||
| 326 | + { | ||
| 327 | + "channelId": 2005, | ||
| 328 | + "channelStyle": 2, | ||
| 329 | + "channelType": 1, | ||
| 330 | + "defaultPermitted": 0, | ||
| 331 | + "delPermitted": 1, | ||
| 332 | + "fontCColor": "#FFFFFF", | ||
| 333 | + "fontColor": "#F9AB99", | ||
| 334 | + "headlinesOn": 0, | ||
| 335 | + "homeChannel": "0", | ||
| 336 | + "iconCUrl": "", | ||
| 337 | + "iconCUrlSize": "", | ||
| 338 | + "iconUrl": "", | ||
| 339 | + "iconUrlSize": "", | ||
| 340 | + "localChannel": "0", | ||
| 341 | + "moreChannel": "0", | ||
| 342 | + "movePermitted": 1, | ||
| 343 | + "myChannel": "0", | ||
| 344 | + "name": "文件", | ||
| 345 | + "num": 14, | ||
| 346 | + "pageId": 20015, | ||
| 347 | + "pageType": "", | ||
| 348 | + "underlineCColor": "" | ||
| 349 | + }, | ||
| 350 | + { | ||
| 351 | + "channelId": 2065, | ||
| 352 | + "channelStyle": 2, | ||
| 353 | + "channelType": 1, | ||
| 354 | + "defaultPermitted": 0, | ||
| 355 | + "delPermitted": 1, | ||
| 356 | + "fontCColor": "#FFFFFF", | ||
| 357 | + "fontColor": "#F9AB99", | ||
| 358 | + "headlinesOn": 0, | ||
| 359 | + "homeChannel": "0", | ||
| 360 | + "iconCUrl": "", | ||
| 361 | + "iconCUrlSize": "", | ||
| 362 | + "iconUrl": "", | ||
| 363 | + "iconUrlSize": "", | ||
| 364 | + "localChannel": "0", | ||
| 365 | + "moreChannel": "0", | ||
| 366 | + "movePermitted": 1, | ||
| 367 | + "myChannel": "0", | ||
| 368 | + "name": "三农", | ||
| 369 | + "num": 15, | ||
| 370 | + "pageId": 21002, | ||
| 371 | + "pageType": "", | ||
| 372 | + "underlineCColor": "" | ||
| 373 | + }, | ||
| 374 | + { | ||
| 375 | + "channelId": 2016, | ||
| 376 | + "channelStyle": 2, | ||
| 377 | + "channelType": 1, | ||
| 378 | + "defaultPermitted": 0, | ||
| 379 | + "delPermitted": 1, | ||
| 380 | + "fontCColor": "#FFFFFF", | ||
| 381 | + "fontColor": "#F9AB99", | ||
| 382 | + "headlinesOn": 0, | ||
| 383 | + "homeChannel": "0", | ||
| 384 | + "iconCUrl": "", | ||
| 385 | + "iconCUrlSize": "", | ||
| 386 | + "iconUrl": "", | ||
| 387 | + "iconUrlSize": "", | ||
| 388 | + "localChannel": "0", | ||
| 389 | + "moreChannel": "0", | ||
| 390 | + "movePermitted": 1, | ||
| 391 | + "myChannel": "0", | ||
| 392 | + "name": "乡村振兴", | ||
| 393 | + "num": 16, | ||
| 394 | + "pageId": 20026, | ||
| 395 | + "pageType": "", | ||
| 396 | + "underlineCColor": "" | ||
| 397 | + }, | ||
| 398 | + { | ||
| 399 | + "channelId": 2010, | ||
| 400 | + "channelStyle": 2, | ||
| 401 | + "channelType": 1, | ||
| 402 | + "defaultPermitted": 0, | ||
| 403 | + "delPermitted": 1, | ||
| 404 | + "fontCColor": "#FFFFFF", | ||
| 405 | + "fontColor": "#F9AB99", | ||
| 406 | + "headlinesOn": 0, | ||
| 407 | + "homeChannel": "0", | ||
| 408 | + "iconCUrl": "", | ||
| 409 | + "iconCUrlSize": "", | ||
| 410 | + "iconUrl": "", | ||
| 411 | + "iconUrlSize": "", | ||
| 412 | + "localChannel": "0", | ||
| 413 | + "moreChannel": "0", | ||
| 414 | + "movePermitted": 1, | ||
| 415 | + "myChannel": "0", | ||
| 416 | + "name": "财经", | ||
| 417 | + "num": 18, | ||
| 418 | + "pageId": 20020, | ||
| 419 | + "pageType": "", | ||
| 420 | + "underlineCColor": "" | ||
| 421 | + }, | ||
| 422 | + { | ||
| 423 | + "channelId": 2013, | ||
| 424 | + "channelStyle": 2, | ||
| 425 | + "channelType": 1, | ||
| 426 | + "defaultPermitted": 0, | ||
| 427 | + "delPermitted": 1, | ||
| 428 | + "fontCColor": "#FFFFFF", | ||
| 429 | + "fontColor": "#F9AB99", | ||
| 430 | + "headlinesOn": 0, | ||
| 431 | + "homeChannel": "0", | ||
| 432 | + "iconCUrl": "", | ||
| 433 | + "iconCUrlSize": "", | ||
| 434 | + "iconUrl": "", | ||
| 435 | + "iconUrlSize": "", | ||
| 436 | + "localChannel": "0", | ||
| 437 | + "moreChannel": "0", | ||
| 438 | + "movePermitted": 1, | ||
| 439 | + "myChannel": "0", | ||
| 440 | + "name": "教育", | ||
| 441 | + "num": 19, | ||
| 442 | + "pageId": 20023, | ||
| 443 | + "pageType": "", | ||
| 444 | + "underlineCColor": "" | ||
| 445 | + }, | ||
| 446 | + { | ||
| 447 | + "channelId": 2017, | ||
| 448 | + "channelStyle": 2, | ||
| 449 | + "channelType": 1, | ||
| 450 | + "defaultPermitted": 0, | ||
| 451 | + "delPermitted": 1, | ||
| 452 | + "fontCColor": "#FFFFFF", | ||
| 453 | + "fontColor": "#F9AB99", | ||
| 454 | + "headlinesOn": 0, | ||
| 455 | + "homeChannel": "0", | ||
| 456 | + "iconCUrl": "", | ||
| 457 | + "iconCUrlSize": "", | ||
| 458 | + "iconUrl": "", | ||
| 459 | + "iconUrlSize": "", | ||
| 460 | + "localChannel": "0", | ||
| 461 | + "moreChannel": "0", | ||
| 462 | + "movePermitted": 1, | ||
| 463 | + "myChannel": "0", | ||
| 464 | + "name": "健康", | ||
| 465 | + "num": 20, | ||
| 466 | + "pageId": 20027, | ||
| 467 | + "pageType": "", | ||
| 468 | + "underlineCColor": "" | ||
| 469 | + }, | ||
| 470 | + { | ||
| 471 | + "channelId": 2014, | ||
| 472 | + "channelStyle": 2, | ||
| 473 | + "channelType": 1, | ||
| 474 | + "defaultPermitted": 0, | ||
| 475 | + "delPermitted": 1, | ||
| 476 | + "fontCColor": "#FFFFFF", | ||
| 477 | + "fontColor": "#F9AB99", | ||
| 478 | + "headlinesOn": 0, | ||
| 479 | + "homeChannel": "0", | ||
| 480 | + "iconCUrl": "", | ||
| 481 | + "iconCUrlSize": "", | ||
| 482 | + "iconUrl": "", | ||
| 483 | + "iconUrlSize": "", | ||
| 484 | + "localChannel": "0", | ||
| 485 | + "moreChannel": "0", | ||
| 486 | + "movePermitted": 1, | ||
| 487 | + "myChannel": "0", | ||
| 488 | + "name": "军事", | ||
| 489 | + "num": 21, | ||
| 490 | + "pageId": 20024, | ||
| 491 | + "pageType": "", | ||
| 492 | + "underlineCColor": "" | ||
| 493 | + }, | ||
| 494 | + { | ||
| 495 | + "channelId": 2018, | ||
| 496 | + "channelStyle": 2, | ||
| 497 | + "channelType": 1, | ||
| 498 | + "defaultPermitted": 0, | ||
| 499 | + "delPermitted": 1, | ||
| 500 | + "fontCColor": "#FFFFFF", | ||
| 501 | + "fontColor": "#F9AB99", | ||
| 502 | + "headlinesOn": 0, | ||
| 503 | + "homeChannel": "0", | ||
| 504 | + "iconCUrl": "", | ||
| 505 | + "iconCUrlSize": "", | ||
| 506 | + "iconUrl": "", | ||
| 507 | + "iconUrlSize": "", | ||
| 508 | + "localChannel": "0", | ||
| 509 | + "moreChannel": "0", | ||
| 510 | + "movePermitted": 1, | ||
| 511 | + "myChannel": "0", | ||
| 512 | + "name": "汽车", | ||
| 513 | + "num": 22, | ||
| 514 | + "pageId": 20028, | ||
| 515 | + "pageType": "", | ||
| 516 | + "underlineCColor": "" | ||
| 517 | + }, | ||
| 518 | + { | ||
| 519 | + "channelId": 2019, | ||
| 520 | + "channelStyle": 2, | ||
| 521 | + "channelType": 1, | ||
| 522 | + "defaultPermitted": 0, | ||
| 523 | + "delPermitted": 1, | ||
| 524 | + "fontCColor": "#FFFFFF", | ||
| 525 | + "fontColor": "#F9AB99", | ||
| 526 | + "headlinesOn": 0, | ||
| 527 | + "homeChannel": "0", | ||
| 528 | + "iconCUrl": "", | ||
| 529 | + "iconCUrlSize": "", | ||
| 530 | + "iconUrl": "", | ||
| 531 | + "iconUrlSize": "", | ||
| 532 | + "localChannel": "0", | ||
| 533 | + "moreChannel": "0", | ||
| 534 | + "movePermitted": 1, | ||
| 535 | + "myChannel": "0", | ||
| 536 | + "name": "房产", | ||
| 537 | + "num": 23, | ||
| 538 | + "pageId": 20029, | ||
| 539 | + "pageType": "", | ||
| 540 | + "underlineCColor": "" | ||
| 541 | + }, | ||
| 542 | + { | ||
| 543 | + "channelId": 2027, | ||
| 544 | + "channelStyle": 2, | ||
| 545 | + "channelType": 2, | ||
| 546 | + "defaultPermitted": 0, | ||
| 547 | + "delPermitted": 1, | ||
| 548 | + "fontCColor": "#FFFFFF", | ||
| 549 | + "fontColor": "#F9AB99", | ||
| 550 | + "headlinesOn": 0, | ||
| 551 | + "homeChannel": "0", | ||
| 552 | + "iconCUrl": "", | ||
| 553 | + "iconCUrlSize": "", | ||
| 554 | + "iconUrl": "", | ||
| 555 | + "iconUrlSize": "", | ||
| 556 | + "localChannel": "0", | ||
| 557 | + "moreChannel": "0", | ||
| 558 | + "movePermitted": 1, | ||
| 559 | + "myChannel": "0", | ||
| 560 | + "name": "北京", | ||
| 561 | + "num": 24, | ||
| 562 | + "pageId": 20037, | ||
| 563 | + "pageType": "", | ||
| 564 | + "underlineCColor": "" | ||
| 565 | + }, | ||
| 566 | + { | ||
| 567 | + "channelId": 2029, | ||
| 568 | + "channelStyle": 2, | ||
| 569 | + "channelType": 2, | ||
| 570 | + "defaultPermitted": 0, | ||
| 571 | + "delPermitted": 1, | ||
| 572 | + "fontCColor": "#FFFFFF", | ||
| 573 | + "fontColor": "#F9AB99", | ||
| 574 | + "headlinesOn": 0, | ||
| 575 | + "homeChannel": "0", | ||
| 576 | + "iconCUrl": "", | ||
| 577 | + "iconCUrlSize": "", | ||
| 578 | + "iconUrl": "", | ||
| 579 | + "iconUrlSize": "", | ||
| 580 | + "localChannel": "0", | ||
| 581 | + "moreChannel": "0", | ||
| 582 | + "movePermitted": 1, | ||
| 583 | + "myChannel": "0", | ||
| 584 | + "name": "天津", | ||
| 585 | + "num": 25, | ||
| 586 | + "pageId": 20039, | ||
| 587 | + "pageType": "", | ||
| 588 | + "underlineCColor": "" | ||
| 589 | + }, | ||
| 590 | + { | ||
| 591 | + "channelId": 2030, | ||
| 592 | + "channelStyle": 2, | ||
| 593 | + "channelType": 2, | ||
| 594 | + "defaultPermitted": 0, | ||
| 595 | + "delPermitted": 1, | ||
| 596 | + "fontCColor": "#FFFFFF", | ||
| 597 | + "fontColor": "#F9AB99", | ||
| 598 | + "headlinesOn": 0, | ||
| 599 | + "homeChannel": "0", | ||
| 600 | + "iconCUrl": "", | ||
| 601 | + "iconCUrlSize": "", | ||
| 602 | + "iconUrl": "", | ||
| 603 | + "iconUrlSize": "", | ||
| 604 | + "localChannel": "0", | ||
| 605 | + "moreChannel": "0", | ||
| 606 | + "movePermitted": 1, | ||
| 607 | + "myChannel": "0", | ||
| 608 | + "name": "河北", | ||
| 609 | + "num": 26, | ||
| 610 | + "pageId": 20040, | ||
| 611 | + "pageType": "", | ||
| 612 | + "underlineCColor": "" | ||
| 613 | + }, | ||
| 614 | + { | ||
| 615 | + "channelId": 2031, | ||
| 616 | + "channelStyle": 2, | ||
| 617 | + "channelType": 2, | ||
| 618 | + "defaultPermitted": 0, | ||
| 619 | + "delPermitted": 1, | ||
| 620 | + "fontCColor": "#FFFFFF", | ||
| 621 | + "fontColor": "#F9AB99", | ||
| 622 | + "headlinesOn": 0, | ||
| 623 | + "homeChannel": "0", | ||
| 624 | + "iconCUrl": "", | ||
| 625 | + "iconCUrlSize": "", | ||
| 626 | + "iconUrl": "", | ||
| 627 | + "iconUrlSize": "", | ||
| 628 | + "localChannel": "0", | ||
| 629 | + "moreChannel": "0", | ||
| 630 | + "movePermitted": 1, | ||
| 631 | + "myChannel": "0", | ||
| 632 | + "name": "山西", | ||
| 633 | + "num": 27, | ||
| 634 | + "pageId": 20041, | ||
| 635 | + "pageType": "", | ||
| 636 | + "underlineCColor": "" | ||
| 637 | + }, | ||
| 638 | + { | ||
| 639 | + "channelId": 2032, | ||
| 640 | + "channelStyle": 2, | ||
| 641 | + "channelType": 2, | ||
| 642 | + "defaultPermitted": 0, | ||
| 643 | + "delPermitted": 1, | ||
| 644 | + "fontCColor": "#FFFFFF", | ||
| 645 | + "fontColor": "#F9AB99", | ||
| 646 | + "headlinesOn": 0, | ||
| 647 | + "homeChannel": "0", | ||
| 648 | + "iconCUrl": "", | ||
| 649 | + "iconCUrlSize": "", | ||
| 650 | + "iconUrl": "", | ||
| 651 | + "iconUrlSize": "", | ||
| 652 | + "localChannel": "0", | ||
| 653 | + "moreChannel": "0", | ||
| 654 | + "movePermitted": 1, | ||
| 655 | + "myChannel": "0", | ||
| 656 | + "name": "内蒙古", | ||
| 657 | + "num": 28, | ||
| 658 | + "pageId": 20042, | ||
| 659 | + "pageType": "", | ||
| 660 | + "underlineCColor": "" | ||
| 661 | + }, | ||
| 662 | + { | ||
| 663 | + "channelId": 2033, | ||
| 664 | + "channelStyle": 2, | ||
| 665 | + "channelType": 2, | ||
| 666 | + "defaultPermitted": 0, | ||
| 667 | + "delPermitted": 1, | ||
| 668 | + "fontCColor": "#FFFFFF", | ||
| 669 | + "fontColor": "#F9AB99", | ||
| 670 | + "headlinesOn": 0, | ||
| 671 | + "homeChannel": "0", | ||
| 672 | + "iconCUrl": "", | ||
| 673 | + "iconCUrlSize": "", | ||
| 674 | + "iconUrl": "", | ||
| 675 | + "iconUrlSize": "", | ||
| 676 | + "localChannel": "0", | ||
| 677 | + "moreChannel": "0", | ||
| 678 | + "movePermitted": 1, | ||
| 679 | + "myChannel": "0", | ||
| 680 | + "name": "辽宁", | ||
| 681 | + "num": 29, | ||
| 682 | + "pageId": 20043, | ||
| 683 | + "pageType": "", | ||
| 684 | + "underlineCColor": "" | ||
| 685 | + }, | ||
| 686 | + { | ||
| 687 | + "channelId": 2034, | ||
| 688 | + "channelStyle": 2, | ||
| 689 | + "channelType": 2, | ||
| 690 | + "defaultPermitted": 0, | ||
| 691 | + "delPermitted": 1, | ||
| 692 | + "fontCColor": "#FFFFFF", | ||
| 693 | + "fontColor": "#F9AB99", | ||
| 694 | + "headlinesOn": 0, | ||
| 695 | + "homeChannel": "0", | ||
| 696 | + "iconCUrl": "", | ||
| 697 | + "iconCUrlSize": "", | ||
| 698 | + "iconUrl": "", | ||
| 699 | + "iconUrlSize": "", | ||
| 700 | + "localChannel": "0", | ||
| 701 | + "moreChannel": "0", | ||
| 702 | + "movePermitted": 1, | ||
| 703 | + "myChannel": "0", | ||
| 704 | + "name": "吉林", | ||
| 705 | + "num": 30, | ||
| 706 | + "pageId": 20044, | ||
| 707 | + "pageType": "", | ||
| 708 | + "underlineCColor": "" | ||
| 709 | + }, | ||
| 710 | + { | ||
| 711 | + "channelId": 2035, | ||
| 712 | + "channelStyle": 2, | ||
| 713 | + "channelType": 2, | ||
| 714 | + "defaultPermitted": 0, | ||
| 715 | + "delPermitted": 1, | ||
| 716 | + "fontCColor": "#FFFFFF", | ||
| 717 | + "fontColor": "#F9AB99", | ||
| 718 | + "headlinesOn": 0, | ||
| 719 | + "homeChannel": "0", | ||
| 720 | + "iconCUrl": "", | ||
| 721 | + "iconCUrlSize": "", | ||
| 722 | + "iconUrl": "", | ||
| 723 | + "iconUrlSize": "", | ||
| 724 | + "localChannel": "0", | ||
| 725 | + "moreChannel": "0", | ||
| 726 | + "movePermitted": 1, | ||
| 727 | + "myChannel": "0", | ||
| 728 | + "name": "黑龙江", | ||
| 729 | + "num": 31, | ||
| 730 | + "pageId": 20045, | ||
| 731 | + "pageType": "", | ||
| 732 | + "underlineCColor": "" | ||
| 733 | + }, | ||
| 734 | + { | ||
| 735 | + "channelId": 2028, | ||
| 736 | + "channelStyle": 2, | ||
| 737 | + "channelType": 2, | ||
| 738 | + "defaultPermitted": 0, | ||
| 739 | + "delPermitted": 1, | ||
| 740 | + "fontCColor": "#FFFFFF", | ||
| 741 | + "fontColor": "#F9AB99", | ||
| 742 | + "headlinesOn": 0, | ||
| 743 | + "homeChannel": "0", | ||
| 744 | + "iconCUrl": "", | ||
| 745 | + "iconCUrlSize": "", | ||
| 746 | + "iconUrl": "", | ||
| 747 | + "iconUrlSize": "", | ||
| 748 | + "localChannel": "0", | ||
| 749 | + "moreChannel": "0", | ||
| 750 | + "movePermitted": 1, | ||
| 751 | + "myChannel": "0", | ||
| 752 | + "name": "上海", | ||
| 753 | + "num": 32, | ||
| 754 | + "pageId": 20038, | ||
| 755 | + "pageType": "", | ||
| 756 | + "underlineCColor": "" | ||
| 757 | + }, | ||
| 758 | + { | ||
| 759 | + "channelId": 2036, | ||
| 760 | + "channelStyle": 2, | ||
| 761 | + "channelType": 2, | ||
| 762 | + "defaultPermitted": 0, | ||
| 763 | + "delPermitted": 1, | ||
| 764 | + "fontCColor": "#FFFFFF", | ||
| 765 | + "fontColor": "#F9AB99", | ||
| 766 | + "headlinesOn": 0, | ||
| 767 | + "homeChannel": "0", | ||
| 768 | + "iconCUrl": "", | ||
| 769 | + "iconCUrlSize": "", | ||
| 770 | + "iconUrl": "", | ||
| 771 | + "iconUrlSize": "", | ||
| 772 | + "localChannel": "0", | ||
| 773 | + "moreChannel": "0", | ||
| 774 | + "movePermitted": 1, | ||
| 775 | + "myChannel": "0", | ||
| 776 | + "name": "江苏", | ||
| 777 | + "num": 33, | ||
| 778 | + "pageId": 20046, | ||
| 779 | + "pageType": "", | ||
| 780 | + "underlineCColor": "" | ||
| 781 | + }, | ||
| 782 | + { | ||
| 783 | + "channelId": 2037, | ||
| 784 | + "channelStyle": 2, | ||
| 785 | + "channelType": 2, | ||
| 786 | + "defaultPermitted": 0, | ||
| 787 | + "delPermitted": 1, | ||
| 788 | + "fontCColor": "#FFFFFF", | ||
| 789 | + "fontColor": "#F9AB99", | ||
| 790 | + "headlinesOn": 0, | ||
| 791 | + "homeChannel": "0", | ||
| 792 | + "iconCUrl": "", | ||
| 793 | + "iconCUrlSize": "", | ||
| 794 | + "iconUrl": "", | ||
| 795 | + "iconUrlSize": "", | ||
| 796 | + "localChannel": "0", | ||
| 797 | + "moreChannel": "0", | ||
| 798 | + "movePermitted": 1, | ||
| 799 | + "myChannel": "0", | ||
| 800 | + "name": "浙江", | ||
| 801 | + "num": 34, | ||
| 802 | + "pageId": 20047, | ||
| 803 | + "pageType": "", | ||
| 804 | + "underlineCColor": "" | ||
| 805 | + }, | ||
| 806 | + { | ||
| 807 | + "channelId": 2038, | ||
| 808 | + "channelStyle": 2, | ||
| 809 | + "channelType": 2, | ||
| 810 | + "defaultPermitted": 0, | ||
| 811 | + "delPermitted": 1, | ||
| 812 | + "fontCColor": "#FFFFFF", | ||
| 813 | + "fontColor": "#F9AB99", | ||
| 814 | + "headlinesOn": 0, | ||
| 815 | + "homeChannel": "0", | ||
| 816 | + "iconCUrl": "", | ||
| 817 | + "iconCUrlSize": "", | ||
| 818 | + "iconUrl": "", | ||
| 819 | + "iconUrlSize": "", | ||
| 820 | + "localChannel": "0", | ||
| 821 | + "moreChannel": "0", | ||
| 822 | + "movePermitted": 1, | ||
| 823 | + "myChannel": "0", | ||
| 824 | + "name": "安徽", | ||
| 825 | + "num": 35, | ||
| 826 | + "pageId": 20048, | ||
| 827 | + "pageType": "", | ||
| 828 | + "underlineCColor": "" | ||
| 829 | + }, | ||
| 830 | + { | ||
| 831 | + "channelId": 2039, | ||
| 832 | + "channelStyle": 2, | ||
| 833 | + "channelType": 2, | ||
| 834 | + "defaultPermitted": 0, | ||
| 835 | + "delPermitted": 1, | ||
| 836 | + "fontCColor": "#FFFFFF", | ||
| 837 | + "fontColor": "#F9AB99", | ||
| 838 | + "headlinesOn": 0, | ||
| 839 | + "homeChannel": "0", | ||
| 840 | + "iconCUrl": "", | ||
| 841 | + "iconCUrlSize": "", | ||
| 842 | + "iconUrl": "", | ||
| 843 | + "iconUrlSize": "", | ||
| 844 | + "localChannel": "0", | ||
| 845 | + "moreChannel": "0", | ||
| 846 | + "movePermitted": 1, | ||
| 847 | + "myChannel": "0", | ||
| 848 | + "name": "福建", | ||
| 849 | + "num": 36, | ||
| 850 | + "pageId": 20049, | ||
| 851 | + "pageType": "", | ||
| 852 | + "underlineCColor": "" | ||
| 853 | + }, | ||
| 854 | + { | ||
| 855 | + "channelId": 2040, | ||
| 856 | + "channelStyle": 2, | ||
| 857 | + "channelType": 2, | ||
| 858 | + "defaultPermitted": 0, | ||
| 859 | + "delPermitted": 1, | ||
| 860 | + "fontCColor": "#FFFFFF", | ||
| 861 | + "fontColor": "#F9AB99", | ||
| 862 | + "headlinesOn": 0, | ||
| 863 | + "homeChannel": "0", | ||
| 864 | + "iconCUrl": "", | ||
| 865 | + "iconCUrlSize": "", | ||
| 866 | + "iconUrl": "", | ||
| 867 | + "iconUrlSize": "", | ||
| 868 | + "localChannel": "0", | ||
| 869 | + "moreChannel": "0", | ||
| 870 | + "movePermitted": 1, | ||
| 871 | + "myChannel": "0", | ||
| 872 | + "name": "江西", | ||
| 873 | + "num": 37, | ||
| 874 | + "pageId": 20050, | ||
| 875 | + "pageType": "", | ||
| 876 | + "underlineCColor": "" | ||
| 877 | + }, | ||
| 878 | + { | ||
| 879 | + "channelId": 2041, | ||
| 880 | + "channelStyle": 2, | ||
| 881 | + "channelType": 2, | ||
| 882 | + "defaultPermitted": 0, | ||
| 883 | + "delPermitted": 1, | ||
| 884 | + "fontCColor": "#FFFFFF", | ||
| 885 | + "fontColor": "#F9AB99", | ||
| 886 | + "headlinesOn": 0, | ||
| 887 | + "homeChannel": "0", | ||
| 888 | + "iconCUrl": "", | ||
| 889 | + "iconCUrlSize": "", | ||
| 890 | + "iconUrl": "", | ||
| 891 | + "iconUrlSize": "", | ||
| 892 | + "localChannel": "0", | ||
| 893 | + "moreChannel": "0", | ||
| 894 | + "movePermitted": 1, | ||
| 895 | + "myChannel": "0", | ||
| 896 | + "name": "山东", | ||
| 897 | + "num": 38, | ||
| 898 | + "pageId": 20051, | ||
| 899 | + "pageType": "", | ||
| 900 | + "underlineCColor": "" | ||
| 901 | + }, | ||
| 902 | + { | ||
| 903 | + "channelId": 2042, | ||
| 904 | + "channelStyle": 2, | ||
| 905 | + "channelType": 2, | ||
| 906 | + "defaultPermitted": 0, | ||
| 907 | + "delPermitted": 1, | ||
| 908 | + "fontCColor": "#FFFFFF", | ||
| 909 | + "fontColor": "#F9AB99", | ||
| 910 | + "headlinesOn": 0, | ||
| 911 | + "homeChannel": "0", | ||
| 912 | + "iconCUrl": "", | ||
| 913 | + "iconCUrlSize": "", | ||
| 914 | + "iconUrl": "", | ||
| 915 | + "iconUrlSize": "", | ||
| 916 | + "localChannel": "0", | ||
| 917 | + "moreChannel": "0", | ||
| 918 | + "movePermitted": 1, | ||
| 919 | + "myChannel": "0", | ||
| 920 | + "name": "河南", | ||
| 921 | + "num": 39, | ||
| 922 | + "pageId": 20052, | ||
| 923 | + "pageType": "", | ||
| 924 | + "underlineCColor": "" | ||
| 925 | + }, | ||
| 926 | + { | ||
| 927 | + "channelId": 2043, | ||
| 928 | + "channelStyle": 2, | ||
| 929 | + "channelType": 2, | ||
| 930 | + "defaultPermitted": 0, | ||
| 931 | + "delPermitted": 1, | ||
| 932 | + "fontCColor": "#FFFFFF", | ||
| 933 | + "fontColor": "#F9AB99", | ||
| 934 | + "headlinesOn": 0, | ||
| 935 | + "homeChannel": "0", | ||
| 936 | + "iconCUrl": "", | ||
| 937 | + "iconCUrlSize": "", | ||
| 938 | + "iconUrl": "", | ||
| 939 | + "iconUrlSize": "", | ||
| 940 | + "localChannel": "0", | ||
| 941 | + "moreChannel": "0", | ||
| 942 | + "movePermitted": 1, | ||
| 943 | + "myChannel": "0", | ||
| 944 | + "name": "湖北", | ||
| 945 | + "num": 40, | ||
| 946 | + "pageId": 20053, | ||
| 947 | + "pageType": "", | ||
| 948 | + "underlineCColor": "" | ||
| 949 | + }, | ||
| 950 | + { | ||
| 951 | + "channelId": 2044, | ||
| 952 | + "channelStyle": 2, | ||
| 953 | + "channelType": 2, | ||
| 954 | + "defaultPermitted": 0, | ||
| 955 | + "delPermitted": 1, | ||
| 956 | + "fontCColor": "#FFFFFF", | ||
| 957 | + "fontColor": "#F9AB99", | ||
| 958 | + "headlinesOn": 0, | ||
| 959 | + "homeChannel": "0", | ||
| 960 | + "iconCUrl": "", | ||
| 961 | + "iconCUrlSize": "", | ||
| 962 | + "iconUrl": "", | ||
| 963 | + "iconUrlSize": "", | ||
| 964 | + "localChannel": "0", | ||
| 965 | + "moreChannel": "0", | ||
| 966 | + "movePermitted": 1, | ||
| 967 | + "myChannel": "0", | ||
| 968 | + "name": "湖南", | ||
| 969 | + "num": 41, | ||
| 970 | + "pageId": 20054, | ||
| 971 | + "pageType": "", | ||
| 972 | + "underlineCColor": "" | ||
| 973 | + }, | ||
| 974 | + { | ||
| 975 | + "channelId": 2045, | ||
| 976 | + "channelStyle": 2, | ||
| 977 | + "channelType": 2, | ||
| 978 | + "defaultPermitted": 0, | ||
| 979 | + "delPermitted": 1, | ||
| 980 | + "fontCColor": "#FFFFFF", | ||
| 981 | + "fontColor": "#F9AB99", | ||
| 982 | + "headlinesOn": 0, | ||
| 983 | + "homeChannel": "0", | ||
| 984 | + "iconCUrl": "", | ||
| 985 | + "iconCUrlSize": "", | ||
| 986 | + "iconUrl": "", | ||
| 987 | + "iconUrlSize": "", | ||
| 988 | + "localChannel": "0", | ||
| 989 | + "moreChannel": "0", | ||
| 990 | + "movePermitted": 1, | ||
| 991 | + "myChannel": "0", | ||
| 992 | + "name": "广东", | ||
| 993 | + "num": 42, | ||
| 994 | + "pageId": 20055, | ||
| 995 | + "pageType": "", | ||
| 996 | + "underlineCColor": "" | ||
| 997 | + }, | ||
| 998 | + { | ||
| 999 | + "channelId": 2046, | ||
| 1000 | + "channelStyle": 2, | ||
| 1001 | + "channelType": 2, | ||
| 1002 | + "defaultPermitted": 0, | ||
| 1003 | + "delPermitted": 1, | ||
| 1004 | + "fontCColor": "#FFFFFF", | ||
| 1005 | + "fontColor": "#F9AB99", | ||
| 1006 | + "headlinesOn": 0, | ||
| 1007 | + "homeChannel": "0", | ||
| 1008 | + "iconCUrl": "", | ||
| 1009 | + "iconCUrlSize": "", | ||
| 1010 | + "iconUrl": "", | ||
| 1011 | + "iconUrlSize": "", | ||
| 1012 | + "localChannel": "0", | ||
| 1013 | + "moreChannel": "0", | ||
| 1014 | + "movePermitted": 1, | ||
| 1015 | + "myChannel": "0", | ||
| 1016 | + "name": "广西", | ||
| 1017 | + "num": 43, | ||
| 1018 | + "pageId": 20056, | ||
| 1019 | + "pageType": "", | ||
| 1020 | + "underlineCColor": "" | ||
| 1021 | + }, | ||
| 1022 | + { | ||
| 1023 | + "channelId": 2047, | ||
| 1024 | + "channelStyle": 2, | ||
| 1025 | + "channelType": 2, | ||
| 1026 | + "defaultPermitted": 0, | ||
| 1027 | + "delPermitted": 1, | ||
| 1028 | + "fontCColor": "#FFFFFF", | ||
| 1029 | + "fontColor": "#F9AB99", | ||
| 1030 | + "headlinesOn": 0, | ||
| 1031 | + "homeChannel": "0", | ||
| 1032 | + "iconCUrl": "", | ||
| 1033 | + "iconCUrlSize": "", | ||
| 1034 | + "iconUrl": "", | ||
| 1035 | + "iconUrlSize": "", | ||
| 1036 | + "localChannel": "0", | ||
| 1037 | + "moreChannel": "0", | ||
| 1038 | + "movePermitted": 1, | ||
| 1039 | + "myChannel": "0", | ||
| 1040 | + "name": "海南", | ||
| 1041 | + "num": 44, | ||
| 1042 | + "pageId": 20057, | ||
| 1043 | + "pageType": "", | ||
| 1044 | + "underlineCColor": "" | ||
| 1045 | + }, | ||
| 1046 | + { | ||
| 1047 | + "channelId": 2048, | ||
| 1048 | + "channelStyle": 2, | ||
| 1049 | + "channelType": 2, | ||
| 1050 | + "defaultPermitted": 0, | ||
| 1051 | + "delPermitted": 1, | ||
| 1052 | + "fontCColor": "#FFFFFF", | ||
| 1053 | + "fontColor": "#F9AB99", | ||
| 1054 | + "headlinesOn": 0, | ||
| 1055 | + "homeChannel": "0", | ||
| 1056 | + "iconCUrl": "", | ||
| 1057 | + "iconCUrlSize": "", | ||
| 1058 | + "iconUrl": "", | ||
| 1059 | + "iconUrlSize": "", | ||
| 1060 | + "localChannel": "0", | ||
| 1061 | + "moreChannel": "0", | ||
| 1062 | + "movePermitted": 1, | ||
| 1063 | + "myChannel": "0", | ||
| 1064 | + "name": "重庆", | ||
| 1065 | + "num": 45, | ||
| 1066 | + "pageId": 20058, | ||
| 1067 | + "pageType": "", | ||
| 1068 | + "underlineCColor": "" | ||
| 1069 | + }, | ||
| 1070 | + { | ||
| 1071 | + "channelId": 2049, | ||
| 1072 | + "channelStyle": 2, | ||
| 1073 | + "channelType": 2, | ||
| 1074 | + "defaultPermitted": 0, | ||
| 1075 | + "delPermitted": 1, | ||
| 1076 | + "fontCColor": "#FFFFFF", | ||
| 1077 | + "fontColor": "#F9AB99", | ||
| 1078 | + "headlinesOn": 0, | ||
| 1079 | + "homeChannel": "0", | ||
| 1080 | + "iconCUrl": "", | ||
| 1081 | + "iconCUrlSize": "", | ||
| 1082 | + "iconUrl": "", | ||
| 1083 | + "iconUrlSize": "", | ||
| 1084 | + "localChannel": "0", | ||
| 1085 | + "moreChannel": "0", | ||
| 1086 | + "movePermitted": 1, | ||
| 1087 | + "myChannel": "0", | ||
| 1088 | + "name": "四川", | ||
| 1089 | + "num": 46, | ||
| 1090 | + "pageId": 20059, | ||
| 1091 | + "pageType": "", | ||
| 1092 | + "underlineCColor": "" | ||
| 1093 | + }, | ||
| 1094 | + { | ||
| 1095 | + "channelId": 2050, | ||
| 1096 | + "channelStyle": 2, | ||
| 1097 | + "channelType": 2, | ||
| 1098 | + "defaultPermitted": 0, | ||
| 1099 | + "delPermitted": 1, | ||
| 1100 | + "fontCColor": "#FFFFFF", | ||
| 1101 | + "fontColor": "#F9AB99", | ||
| 1102 | + "headlinesOn": 0, | ||
| 1103 | + "homeChannel": "0", | ||
| 1104 | + "iconCUrl": "", | ||
| 1105 | + "iconCUrlSize": "", | ||
| 1106 | + "iconUrl": "", | ||
| 1107 | + "iconUrlSize": "", | ||
| 1108 | + "localChannel": "0", | ||
| 1109 | + "moreChannel": "0", | ||
| 1110 | + "movePermitted": 1, | ||
| 1111 | + "myChannel": "0", | ||
| 1112 | + "name": "贵州", | ||
| 1113 | + "num": 47, | ||
| 1114 | + "pageId": 20060, | ||
| 1115 | + "pageType": "", | ||
| 1116 | + "underlineCColor": "" | ||
| 1117 | + }, | ||
| 1118 | + { | ||
| 1119 | + "channelId": 2051, | ||
| 1120 | + "channelStyle": 2, | ||
| 1121 | + "channelType": 2, | ||
| 1122 | + "defaultPermitted": 0, | ||
| 1123 | + "delPermitted": 1, | ||
| 1124 | + "fontCColor": "#FFFFFF", | ||
| 1125 | + "fontColor": "#F9AB99", | ||
| 1126 | + "headlinesOn": 0, | ||
| 1127 | + "homeChannel": "0", | ||
| 1128 | + "iconCUrl": "", | ||
| 1129 | + "iconCUrlSize": "", | ||
| 1130 | + "iconUrl": "", | ||
| 1131 | + "iconUrlSize": "", | ||
| 1132 | + "localChannel": "0", | ||
| 1133 | + "moreChannel": "0", | ||
| 1134 | + "movePermitted": 1, | ||
| 1135 | + "myChannel": "0", | ||
| 1136 | + "name": "云南", | ||
| 1137 | + "num": 48, | ||
| 1138 | + "pageId": 20061, | ||
| 1139 | + "pageType": "", | ||
| 1140 | + "underlineCColor": "" | ||
| 1141 | + }, | ||
| 1142 | + { | ||
| 1143 | + "channelId": 2052, | ||
| 1144 | + "channelStyle": 2, | ||
| 1145 | + "channelType": 2, | ||
| 1146 | + "defaultPermitted": 0, | ||
| 1147 | + "delPermitted": 1, | ||
| 1148 | + "fontCColor": "#FFFFFF", | ||
| 1149 | + "fontColor": "#F9AB99", | ||
| 1150 | + "headlinesOn": 0, | ||
| 1151 | + "homeChannel": "0", | ||
| 1152 | + "iconCUrl": "", | ||
| 1153 | + "iconCUrlSize": "", | ||
| 1154 | + "iconUrl": "", | ||
| 1155 | + "iconUrlSize": "", | ||
| 1156 | + "localChannel": "0", | ||
| 1157 | + "moreChannel": "0", | ||
| 1158 | + "movePermitted": 1, | ||
| 1159 | + "myChannel": "0", | ||
| 1160 | + "name": "西藏", | ||
| 1161 | + "num": 49, | ||
| 1162 | + "pageId": 20062, | ||
| 1163 | + "pageType": "", | ||
| 1164 | + "underlineCColor": "" | ||
| 1165 | + }, | ||
| 1166 | + { | ||
| 1167 | + "channelId": 2053, | ||
| 1168 | + "channelStyle": 2, | ||
| 1169 | + "channelType": 2, | ||
| 1170 | + "defaultPermitted": 0, | ||
| 1171 | + "delPermitted": 1, | ||
| 1172 | + "fontCColor": "#FFFFFF", | ||
| 1173 | + "fontColor": "#F9AB99", | ||
| 1174 | + "headlinesOn": 0, | ||
| 1175 | + "homeChannel": "0", | ||
| 1176 | + "iconCUrl": "", | ||
| 1177 | + "iconCUrlSize": "", | ||
| 1178 | + "iconUrl": "", | ||
| 1179 | + "iconUrlSize": "", | ||
| 1180 | + "localChannel": "0", | ||
| 1181 | + "moreChannel": "0", | ||
| 1182 | + "movePermitted": 1, | ||
| 1183 | + "myChannel": "0", | ||
| 1184 | + "name": "陕西", | ||
| 1185 | + "num": 50, | ||
| 1186 | + "pageId": 20063, | ||
| 1187 | + "pageType": "", | ||
| 1188 | + "underlineCColor": "" | ||
| 1189 | + }, | ||
| 1190 | + { | ||
| 1191 | + "channelId": 2054, | ||
| 1192 | + "channelStyle": 2, | ||
| 1193 | + "channelType": 2, | ||
| 1194 | + "defaultPermitted": 0, | ||
| 1195 | + "delPermitted": 1, | ||
| 1196 | + "fontCColor": "#FFFFFF", | ||
| 1197 | + "fontColor": "#F9AB99", | ||
| 1198 | + "headlinesOn": 0, | ||
| 1199 | + "homeChannel": "0", | ||
| 1200 | + "iconCUrl": "", | ||
| 1201 | + "iconCUrlSize": "", | ||
| 1202 | + "iconUrl": "", | ||
| 1203 | + "iconUrlSize": "", | ||
| 1204 | + "localChannel": "0", | ||
| 1205 | + "moreChannel": "0", | ||
| 1206 | + "movePermitted": 1, | ||
| 1207 | + "myChannel": "0", | ||
| 1208 | + "name": "甘肃", | ||
| 1209 | + "num": 51, | ||
| 1210 | + "pageId": 20064, | ||
| 1211 | + "pageType": "", | ||
| 1212 | + "underlineCColor": "" | ||
| 1213 | + }, | ||
| 1214 | + { | ||
| 1215 | + "channelId": 2055, | ||
| 1216 | + "channelStyle": 2, | ||
| 1217 | + "channelType": 2, | ||
| 1218 | + "defaultPermitted": 0, | ||
| 1219 | + "delPermitted": 1, | ||
| 1220 | + "fontCColor": "#FFFFFF", | ||
| 1221 | + "fontColor": "#F9AB99", | ||
| 1222 | + "headlinesOn": 0, | ||
| 1223 | + "homeChannel": "0", | ||
| 1224 | + "iconCUrl": "", | ||
| 1225 | + "iconCUrlSize": "", | ||
| 1226 | + "iconUrl": "", | ||
| 1227 | + "iconUrlSize": "", | ||
| 1228 | + "localChannel": "0", | ||
| 1229 | + "moreChannel": "0", | ||
| 1230 | + "movePermitted": 1, | ||
| 1231 | + "myChannel": "0", | ||
| 1232 | + "name": "青海", | ||
| 1233 | + "num": 52, | ||
| 1234 | + "pageId": 20065, | ||
| 1235 | + "pageType": "", | ||
| 1236 | + "underlineCColor": "" | ||
| 1237 | + }, | ||
| 1238 | + { | ||
| 1239 | + "channelId": 2056, | ||
| 1240 | + "channelStyle": 2, | ||
| 1241 | + "channelType": 2, | ||
| 1242 | + "defaultPermitted": 0, | ||
| 1243 | + "delPermitted": 1, | ||
| 1244 | + "fontCColor": "#FFFFFF", | ||
| 1245 | + "fontColor": "#F9AB99", | ||
| 1246 | + "headlinesOn": 0, | ||
| 1247 | + "homeChannel": "0", | ||
| 1248 | + "iconCUrl": "", | ||
| 1249 | + "iconCUrlSize": "", | ||
| 1250 | + "iconUrl": "", | ||
| 1251 | + "iconUrlSize": "", | ||
| 1252 | + "localChannel": "0", | ||
| 1253 | + "moreChannel": "0", | ||
| 1254 | + "movePermitted": 1, | ||
| 1255 | + "myChannel": "0", | ||
| 1256 | + "name": "宁夏", | ||
| 1257 | + "num": 53, | ||
| 1258 | + "pageId": 20066, | ||
| 1259 | + "pageType": "", | ||
| 1260 | + "underlineCColor": "" | ||
| 1261 | + }, | ||
| 1262 | + { | ||
| 1263 | + "channelId": 2057, | ||
| 1264 | + "channelStyle": 2, | ||
| 1265 | + "channelType": 2, | ||
| 1266 | + "defaultPermitted": 0, | ||
| 1267 | + "delPermitted": 1, | ||
| 1268 | + "fontCColor": "#FFFFFF", | ||
| 1269 | + "fontColor": "#F9AB99", | ||
| 1270 | + "headlinesOn": 0, | ||
| 1271 | + "homeChannel": "0", | ||
| 1272 | + "iconCUrl": "", | ||
| 1273 | + "iconCUrlSize": "", | ||
| 1274 | + "iconUrl": "", | ||
| 1275 | + "iconUrlSize": "", | ||
| 1276 | + "localChannel": "0", | ||
| 1277 | + "moreChannel": "0", | ||
| 1278 | + "movePermitted": 1, | ||
| 1279 | + "myChannel": "0", | ||
| 1280 | + "name": "新疆", | ||
| 1281 | + "num": 54, | ||
| 1282 | + "pageId": 20067, | ||
| 1283 | + "pageType": "", | ||
| 1284 | + "underlineCColor": "" | ||
| 1285 | + }, | ||
| 1286 | + { | ||
| 1287 | + "channelId": 2020, | ||
| 1288 | + "channelStyle": 2, | ||
| 1289 | + "channelType": 1, | ||
| 1290 | + "defaultPermitted": 0, | ||
| 1291 | + "delPermitted": 1, | ||
| 1292 | + "fontCColor": "#FFFFFF", | ||
| 1293 | + "fontColor": "#F9AB99", | ||
| 1294 | + "headlinesOn": 0, | ||
| 1295 | + "homeChannel": "0", | ||
| 1296 | + "iconCUrl": "", | ||
| 1297 | + "iconCUrlSize": "", | ||
| 1298 | + "iconUrl": "", | ||
| 1299 | + "iconUrlSize": "", | ||
| 1300 | + "localChannel": "0", | ||
| 1301 | + "moreChannel": "0", | ||
| 1302 | + "movePermitted": 1, | ||
| 1303 | + "myChannel": "0", | ||
| 1304 | + "name": "国际", | ||
| 1305 | + "num": 57, | ||
| 1306 | + "pageId": 20030, | ||
| 1307 | + "pageType": "", | ||
| 1308 | + "underlineCColor": "" | ||
| 1309 | + }, | ||
| 1310 | + { | ||
| 1311 | + "channelId": 2021, | ||
| 1312 | + "channelStyle": 2, | ||
| 1313 | + "channelType": 1, | ||
| 1314 | + "defaultPermitted": 0, | ||
| 1315 | + "delPermitted": 1, | ||
| 1316 | + "fontCColor": "#FFFFFF", | ||
| 1317 | + "fontColor": "#F9AB99", | ||
| 1318 | + "headlinesOn": 0, | ||
| 1319 | + "homeChannel": "0", | ||
| 1320 | + "iconCUrl": "", | ||
| 1321 | + "iconCUrlSize": "", | ||
| 1322 | + "iconUrl": "", | ||
| 1323 | + "iconUrlSize": "", | ||
| 1324 | + "localChannel": "0", | ||
| 1325 | + "moreChannel": "0", | ||
| 1326 | + "movePermitted": 1, | ||
| 1327 | + "myChannel": "0", | ||
| 1328 | + "name": "法治", | ||
| 1329 | + "num": 58, | ||
| 1330 | + "pageId": 20031, | ||
| 1331 | + "pageType": "", | ||
| 1332 | + "underlineCColor": "" | ||
| 1333 | + }, | ||
| 1334 | + { | ||
| 1335 | + "channelId": 2022, | ||
| 1336 | + "channelStyle": 2, | ||
| 1337 | + "channelType": 1, | ||
| 1338 | + "defaultPermitted": 0, | ||
| 1339 | + "delPermitted": 1, | ||
| 1340 | + "fontCColor": "#FFFFFF", | ||
| 1341 | + "fontColor": "#F9AB99", | ||
| 1342 | + "headlinesOn": 0, | ||
| 1343 | + "homeChannel": "0", | ||
| 1344 | + "iconCUrl": "", | ||
| 1345 | + "iconCUrlSize": "", | ||
| 1346 | + "iconUrl": "", | ||
| 1347 | + "iconUrlSize": "", | ||
| 1348 | + "localChannel": "0", | ||
| 1349 | + "moreChannel": "0", | ||
| 1350 | + "movePermitted": 1, | ||
| 1351 | + "myChannel": "0", | ||
| 1352 | + "name": "生活", | ||
| 1353 | + "num": 59, | ||
| 1354 | + "pageId": 20032, | ||
| 1355 | + "pageType": "", | ||
| 1356 | + "underlineCColor": "" | ||
| 1357 | + }, | ||
| 1358 | + { | ||
| 1359 | + "channelId": 2092, | ||
| 1360 | + "channelStyle": 2, | ||
| 1361 | + "channelType": 1, | ||
| 1362 | + "defaultPermitted": 0, | ||
| 1363 | + "delPermitted": 0, | ||
| 1364 | + "fontCColor": "#FFFFFF", | ||
| 1365 | + "fontColor": "#F9AB99", | ||
| 1366 | + "headlinesOn": 0, | ||
| 1367 | + "homeChannel": "0", | ||
| 1368 | + "iconCUrl": "", | ||
| 1369 | + "iconCUrlSize": "", | ||
| 1370 | + "iconUrl": "", | ||
| 1371 | + "iconUrlSize": "", | ||
| 1372 | + "localChannel": "0", | ||
| 1373 | + "moreChannel": "0", | ||
| 1374 | + "movePermitted": 1, | ||
| 1375 | + "myChannel": "0", | ||
| 1376 | + "name": "设计", | ||
| 1377 | + "num": 68, | ||
| 1378 | + "pageId": 21063, | ||
| 1379 | + "pageType": "", | ||
| 1380 | + "underlineCColor": "" | ||
| 1381 | + }, | ||
| 1382 | + { | ||
| 1383 | + "channelId": 2098, | ||
| 1384 | + "channelStyle": 2, | ||
| 1385 | + "channelType": 1, | ||
| 1386 | + "defaultPermitted": 0, | ||
| 1387 | + "delPermitted": 0, | ||
| 1388 | + "fontCColor": "#FFFFFF", | ||
| 1389 | + "fontColor": "#F9AB99", | ||
| 1390 | + "headlinesOn": 0, | ||
| 1391 | + "homeChannel": "0", | ||
| 1392 | + "iconCUrl": "", | ||
| 1393 | + "iconCUrlSize": "", | ||
| 1394 | + "iconUrl": "", | ||
| 1395 | + "iconUrlSize": "", | ||
| 1396 | + "localChannel": "0", | ||
| 1397 | + "moreChannel": "0", | ||
| 1398 | + "movePermitted": 0, | ||
| 1399 | + "myChannel": "0", | ||
| 1400 | + "name": "设计组件", | ||
| 1401 | + "num": 72, | ||
| 1402 | + "pageId": 21299, | ||
| 1403 | + "pageType": "", | ||
| 1404 | + "underlineCColor": "" | ||
| 1405 | + }, | ||
| 1406 | + { | ||
| 1407 | + "channelId": 2099, | ||
| 1408 | + "channelStyle": 2, | ||
| 1409 | + "channelType": 1, | ||
| 1410 | + "defaultPermitted": 0, | ||
| 1411 | + "delPermitted": 0, | ||
| 1412 | + "fontCColor": "", | ||
| 1413 | + "fontColor": "", | ||
| 1414 | + "headlinesOn": 0, | ||
| 1415 | + "homeChannel": "0", | ||
| 1416 | + "iconCUrl": "", | ||
| 1417 | + "iconCUrlSize": "", | ||
| 1418 | + "iconUrl": "", | ||
| 1419 | + "iconUrlSize": "", | ||
| 1420 | + "localChannel": "0", | ||
| 1421 | + "moreChannel": "0", | ||
| 1422 | + "movePermitted": 1, | ||
| 1423 | + "myChannel": "0", | ||
| 1424 | + "name": "设计号", | ||
| 1425 | + "num": 73, | ||
| 1426 | + "pageId": 21736, | ||
| 1427 | + "pageType": "", | ||
| 1428 | + "underlineCColor": "" | ||
| 1429 | + } | ||
| 1430 | + ], | ||
| 1431 | + "topStyle": "11", | ||
| 1432 | + "type": "1" | ||
| 1433 | + }, | ||
| 1434 | + { | ||
| 1435 | + "backgroundUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231214/image/display/2e1d5f235d1a44cfb9fc120e8596c56b.png", | ||
| 1436 | + "channelChooseActionUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231227/vod/display/3835f09a973443cb824af179e30e87ed.pag", | ||
| 1437 | + "channelChooseCColor": "#666666", | ||
| 1438 | + "channelChooseColor": "#222222", | ||
| 1439 | + "channelMoreColor": "", | ||
| 1440 | + "extraData": "{\"haveSearch\":\"0\",\"haveTopNav\":\"1\",\"leftIconurl\":\"\",\"rightIconUrl\":\"\"}", | ||
| 1441 | + "homePageColor": "#FFFFFF", | ||
| 1442 | + "icon": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231220/image/display/460f61a48c6a4993af442d54aedb682b.png", | ||
| 1443 | + "iconC": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231220/image/display/9aa759f72ccb4848b3ded2dee9502c25.gif", | ||
| 1444 | + "id": 202, | ||
| 1445 | + "immersiveIconCUrl": "", | ||
| 1446 | + "immersiveIconUrl": "", | ||
| 1447 | + "immersiveNameCColor": "#FFFFFF", | ||
| 1448 | + "immersiveNameColor": "#FFFFFF", | ||
| 1449 | + "logoUrl": "", | ||
| 1450 | + "morningAndEveningUrl": "", | ||
| 1451 | + "name": "人民号", | ||
| 1452 | + "nameCColor": "#ED2800", | ||
| 1453 | + "nameColor": "#999999", | ||
| 1454 | + "nightIconCUrl": "", | ||
| 1455 | + "nightIconUrl": "", | ||
| 1456 | + "nightNameCColor": "", | ||
| 1457 | + "nightNameColor": "", | ||
| 1458 | + "noticeColor": "#FFFFFF", | ||
| 1459 | + "pageId": null, | ||
| 1460 | + "pageType": null, | ||
| 1461 | + "searchBothColor": "#222222", | ||
| 1462 | + "searchUrl": "", | ||
| 1463 | + "sortValue": 2, | ||
| 1464 | + "statusBarColor": 1, | ||
| 1465 | + "topNavChannelList": [ | ||
| 1466 | + { | ||
| 1467 | + "channelId": 2058, | ||
| 1468 | + "channelStyle": 3, | ||
| 1469 | + "channelType": 1, | ||
| 1470 | + "defaultPermitted": 0, | ||
| 1471 | + "delPermitted": 1, | ||
| 1472 | + "fontCColor": "#FFFFFF", | ||
| 1473 | + "fontColor": "#F9AB99", | ||
| 1474 | + "headlinesOn": 0, | ||
| 1475 | + "homeChannel": "0", | ||
| 1476 | + "iconCUrl": "", | ||
| 1477 | + "iconCUrlSize": "", | ||
| 1478 | + "iconUrl": "", | ||
| 1479 | + "iconUrlSize": "", | ||
| 1480 | + "localChannel": "0", | ||
| 1481 | + "moreChannel": "0", | ||
| 1482 | + "movePermitted": 1, | ||
| 1483 | + "myChannel": "0", | ||
| 1484 | + "name": "推荐", | ||
| 1485 | + "num": 1, | ||
| 1486 | + "pageId": 20068, | ||
| 1487 | + "pageType": "", | ||
| 1488 | + "underlineCColor": "" | ||
| 1489 | + }, | ||
| 1490 | + { | ||
| 1491 | + "channelId": 2059, | ||
| 1492 | + "channelStyle": 3, | ||
| 1493 | + "channelType": 3, | ||
| 1494 | + "defaultPermitted": 0, | ||
| 1495 | + "delPermitted": 1, | ||
| 1496 | + "fontCColor": "#FFFFFF", | ||
| 1497 | + "fontColor": "#F9AB99", | ||
| 1498 | + "headlinesOn": 0, | ||
| 1499 | + "homeChannel": "0", | ||
| 1500 | + "iconCUrl": "", | ||
| 1501 | + "iconCUrlSize": "", | ||
| 1502 | + "iconUrl": "", | ||
| 1503 | + "iconUrlSize": "", | ||
| 1504 | + "localChannel": "0", | ||
| 1505 | + "moreChannel": "0", | ||
| 1506 | + "movePermitted": 1, | ||
| 1507 | + "myChannel": "0", | ||
| 1508 | + "name": "关注", | ||
| 1509 | + "num": 2, | ||
| 1510 | + "pageId": 20069, | ||
| 1511 | + "pageType": "", | ||
| 1512 | + "underlineCColor": "" | ||
| 1513 | + }, | ||
| 1514 | + { | ||
| 1515 | + "channelId": 2073, | ||
| 1516 | + "channelStyle": 3, | ||
| 1517 | + "channelType": 1, | ||
| 1518 | + "defaultPermitted": 0, | ||
| 1519 | + "delPermitted": 1, | ||
| 1520 | + "fontCColor": "#FFFFFF", | ||
| 1521 | + "fontColor": "#F9AB99", | ||
| 1522 | + "headlinesOn": 0, | ||
| 1523 | + "homeChannel": "0", | ||
| 1524 | + "iconCUrl": "", | ||
| 1525 | + "iconCUrlSize": "", | ||
| 1526 | + "iconUrl": "", | ||
| 1527 | + "iconUrlSize": "", | ||
| 1528 | + "localChannel": "0", | ||
| 1529 | + "moreChannel": "0", | ||
| 1530 | + "movePermitted": 1, | ||
| 1531 | + "myChannel": "0", | ||
| 1532 | + "name": "活动", | ||
| 1533 | + "num": 3, | ||
| 1534 | + "pageId": 21010, | ||
| 1535 | + "pageType": "", | ||
| 1536 | + "underlineCColor": "" | ||
| 1537 | + } | ||
| 1538 | + ], | ||
| 1539 | + "topStyle": "12", | ||
| 1540 | + "type": "1" | ||
| 1541 | + }, | ||
| 1542 | + { | ||
| 1543 | + "backgroundUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231214/image/display/2e1d5f235d1a44cfb9fc120e8596c56b.png", | ||
| 1544 | + "channelChooseActionUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231221/vod/display/65c6eb2ca91849c582d057adc9e76d46.pag", | ||
| 1545 | + "channelChooseCColor": "#666666", | ||
| 1546 | + "channelChooseColor": "#222222", | ||
| 1547 | + "channelMoreColor": "", | ||
| 1548 | + "extraData": "{\"haveSearch\":\"1\",\"haveTopNav\":\"1\",\"leftIconurl\":\"\",\"rightIconUrl\":\"\"}", | ||
| 1549 | + "homePageColor": "#FFFFFF", | ||
| 1550 | + "icon": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231221/image/display/bf77561966654001a538857ebef8a15c.png", | ||
| 1551 | + "iconC": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231224/image/display/1a42d5b8183a4eb1a044ddd64223c687.png", | ||
| 1552 | + "id": 203, | ||
| 1553 | + "immersiveIconCUrl": "", | ||
| 1554 | + "immersiveIconUrl": "", | ||
| 1555 | + "immersiveNameCColor": "#FFFFFF", | ||
| 1556 | + "immersiveNameColor": "#FFFFFF", | ||
| 1557 | + "logoUrl": "", | ||
| 1558 | + "morningAndEveningUrl": "", | ||
| 1559 | + "name": "视频", | ||
| 1560 | + "nameCColor": "#ED2800", | ||
| 1561 | + "nameColor": "#999999", | ||
| 1562 | + "nightIconCUrl": "", | ||
| 1563 | + "nightIconUrl": "", | ||
| 1564 | + "nightNameCColor": "", | ||
| 1565 | + "nightNameColor": "", | ||
| 1566 | + "noticeColor": "#FFFFFF", | ||
| 1567 | + "pageId": null, | ||
| 1568 | + "pageType": null, | ||
| 1569 | + "searchBothColor": "#222222", | ||
| 1570 | + "searchUrl": "", | ||
| 1571 | + "sortValue": 3, | ||
| 1572 | + "statusBarColor": 1, | ||
| 1573 | + "topNavChannelList": [ | ||
| 1574 | + { | ||
| 1575 | + "channelId": 2060, | ||
| 1576 | + "channelStyle": 1, | ||
| 1577 | + "channelType": 1, | ||
| 1578 | + "defaultPermitted": 0, | ||
| 1579 | + "delPermitted": 1, | ||
| 1580 | + "fontCColor": "#FFFFFF", | ||
| 1581 | + "fontColor": "#F9AB99", | ||
| 1582 | + "headlinesOn": 0, | ||
| 1583 | + "homeChannel": "0", | ||
| 1584 | + "iconCUrl": "", | ||
| 1585 | + "iconCUrlSize": "", | ||
| 1586 | + "iconUrl": "", | ||
| 1587 | + "iconUrlSize": "", | ||
| 1588 | + "localChannel": "0", | ||
| 1589 | + "moreChannel": "0", | ||
| 1590 | + "movePermitted": 1, | ||
| 1591 | + "myChannel": "0", | ||
| 1592 | + "name": "视频", | ||
| 1593 | + "num": 1, | ||
| 1594 | + "pageId": 20070, | ||
| 1595 | + "pageType": "", | ||
| 1596 | + "underlineCColor": "" | ||
| 1597 | + }, | ||
| 1598 | + { | ||
| 1599 | + "channelId": 2061, | ||
| 1600 | + "channelStyle": 3, | ||
| 1601 | + "channelType": 1, | ||
| 1602 | + "defaultPermitted": 0, | ||
| 1603 | + "delPermitted": 1, | ||
| 1604 | + "fontCColor": "#FFFFFF", | ||
| 1605 | + "fontColor": "#F9AB99", | ||
| 1606 | + "headlinesOn": 0, | ||
| 1607 | + "homeChannel": "0", | ||
| 1608 | + "iconCUrl": "", | ||
| 1609 | + "iconCUrlSize": "", | ||
| 1610 | + "iconUrl": "", | ||
| 1611 | + "iconUrlSize": "", | ||
| 1612 | + "localChannel": "0", | ||
| 1613 | + "moreChannel": "0", | ||
| 1614 | + "movePermitted": 1, | ||
| 1615 | + "myChannel": "0", | ||
| 1616 | + "name": "直播", | ||
| 1617 | + "num": 2, | ||
| 1618 | + "pageId": 20071, | ||
| 1619 | + "pageType": "", | ||
| 1620 | + "underlineCColor": "" | ||
| 1621 | + } | ||
| 1622 | + ], | ||
| 1623 | + "topStyle": "13", | ||
| 1624 | + "type": "1" | ||
| 1625 | + }, | ||
| 1626 | + { | ||
| 1627 | + "backgroundUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231214/image/display/2e1d5f235d1a44cfb9fc120e8596c56b.png", | ||
| 1628 | + "channelChooseActionUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231221/vod/display/65c6eb2ca91849c582d057adc9e76d46.pag", | ||
| 1629 | + "channelChooseCColor": "#666666", | ||
| 1630 | + "channelChooseColor": "#222222", | ||
| 1631 | + "channelMoreColor": "", | ||
| 1632 | + "extraData": "{\"haveSearch\":\"1\",\"haveTopNav\":\"1\",\"leftIconurl\":\"\",\"rightIconUrl\":\"\"}", | ||
| 1633 | + "homePageColor": "#FFFFFF", | ||
| 1634 | + "icon": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231220/image/display/5a6cf95f7b9e489390ec73faf458b58a.png", | ||
| 1635 | + "iconC": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231220/image/display/1b075ed30a6b43d2ae319e5d892c66e4.gif", | ||
| 1636 | + "id": 204, | ||
| 1637 | + "immersiveIconCUrl": "", | ||
| 1638 | + "immersiveIconUrl": "", | ||
| 1639 | + "immersiveNameCColor": "#FFFFFF", | ||
| 1640 | + "immersiveNameColor": "#FFFFFF", | ||
| 1641 | + "logoUrl": "", | ||
| 1642 | + "morningAndEveningUrl": "", | ||
| 1643 | + "name": "服务", | ||
| 1644 | + "nameCColor": "#ED2800", | ||
| 1645 | + "nameColor": "#999999", | ||
| 1646 | + "nightIconCUrl": "", | ||
| 1647 | + "nightIconUrl": "", | ||
| 1648 | + "nightNameCColor": "", | ||
| 1649 | + "nightNameColor": "", | ||
| 1650 | + "noticeColor": "#FFFFFF", | ||
| 1651 | + "pageId": null, | ||
| 1652 | + "pageType": null, | ||
| 1653 | + "searchBothColor": "#222222", | ||
| 1654 | + "searchUrl": "", | ||
| 1655 | + "sortValue": 4, | ||
| 1656 | + "statusBarColor": 1, | ||
| 1657 | + "topNavChannelList": [ | ||
| 1658 | + { | ||
| 1659 | + "channelId": 2062, | ||
| 1660 | + "channelStyle": 3, | ||
| 1661 | + "channelType": 1, | ||
| 1662 | + "defaultPermitted": 0, | ||
| 1663 | + "delPermitted": 1, | ||
| 1664 | + "fontCColor": "#FFFFFF", | ||
| 1665 | + "fontColor": "#F9AB99", | ||
| 1666 | + "headlinesOn": 0, | ||
| 1667 | + "homeChannel": "0", | ||
| 1668 | + "iconCUrl": "", | ||
| 1669 | + "iconCUrlSize": "", | ||
| 1670 | + "iconUrl": "", | ||
| 1671 | + "iconUrlSize": "", | ||
| 1672 | + "localChannel": "0", | ||
| 1673 | + "moreChannel": "0", | ||
| 1674 | + "movePermitted": 1, | ||
| 1675 | + "myChannel": "0", | ||
| 1676 | + "name": "服务", | ||
| 1677 | + "num": 1, | ||
| 1678 | + "pageId": 20072, | ||
| 1679 | + "pageType": "", | ||
| 1680 | + "underlineCColor": "" | ||
| 1681 | + } | ||
| 1682 | + ], | ||
| 1683 | + "topStyle": "14", | ||
| 1684 | + "type": "1" | ||
| 1685 | + }, | ||
| 1686 | + { | ||
| 1687 | + "backgroundUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231214/image/display/3e1f4fe85b0445b6a0be24f3759d0ff6.png", | ||
| 1688 | + "channelChooseActionUrl": "", | ||
| 1689 | + "channelChooseCColor": "#FFFFFF", | ||
| 1690 | + "channelChooseColor": "#FFFFFF", | ||
| 1691 | + "channelMoreColor": "", | ||
| 1692 | + "extraData": "{\"haveSearch\":\"0\",\"haveTopNav\":\"0\"}", | ||
| 1693 | + "homePageColor": "#222222", | ||
| 1694 | + "icon": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231220/image/display/f55f0ac25b764809bc8285c284adb147.png", | ||
| 1695 | + "iconC": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231220/image/display/3b5cff54d2a546f5b523a8aa8c33352e.gif", | ||
| 1696 | + "id": 205, | ||
| 1697 | + "immersiveIconCUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/inen-20230403/image/display/9f22b579db15497797e8204b1ec12d14.png", | ||
| 1698 | + "immersiveIconUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/inen-20230403/image/display/5be23055a4dc4d869be2139e9deb7a55.png", | ||
| 1699 | + "immersiveNameCColor": "#FFFFFF", | ||
| 1700 | + "immersiveNameColor": "#FFFFFF", | ||
| 1701 | + "logoUrl": "", | ||
| 1702 | + "morningAndEveningUrl": "", | ||
| 1703 | + "name": "我的", | ||
| 1704 | + "nameCColor": "#ED2800", | ||
| 1705 | + "nameColor": "#999999", | ||
| 1706 | + "nightIconCUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/inen-20230403/image/display/9d584ddcfdf74e3ea8e445d102127b97.png", | ||
| 1707 | + "nightIconUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/inen-20230403/image/display/1f79063b6ecb493c95703e45529d3a5f.png", | ||
| 1708 | + "nightNameCColor": "#DA1C1C", | ||
| 1709 | + "nightNameColor": "#6A6B75", | ||
| 1710 | + "noticeColor": "#ED2800", | ||
| 1711 | + "pageId": null, | ||
| 1712 | + "pageType": null, | ||
| 1713 | + "searchBothColor": "#FFFFFF", | ||
| 1714 | + "searchUrl": "", | ||
| 1715 | + "sortValue": 5, | ||
| 1716 | + "statusBarColor": 1, | ||
| 1717 | + "topNavChannelList": [], | ||
| 1718 | + "topStyle": "", | ||
| 1719 | + "type": "2" | ||
| 1720 | + } | ||
| 1721 | + ], | ||
| 1722 | + "greyBottomNav": { | ||
| 1723 | + "bottomNavList": [], | ||
| 1724 | + "greyUserList": [] | ||
| 1725 | + }, | ||
| 1726 | + "immersiveBackgroundColor": "", | ||
| 1727 | + "nightBackgroundColor": "" | ||
| 1728 | + }, | ||
| 1729 | + "message": "Success", | ||
| 1730 | + "meta": { | ||
| 1731 | + "md5": "e2942dbcd76710d1bac0d98f9a0a9d0a" | ||
| 1732 | + }, | ||
| 1733 | + "requestId": "", | ||
| 1734 | + "success": true, | ||
| 1735 | + "timestamp": 1704765430031 | ||
| 1736 | +} |
| 1 | +{ | ||
| 2 | + "code": "0", | ||
| 3 | + "data": { | ||
| 4 | + "compAdList": [ | ||
| 5 | + | ||
| 6 | + ], | ||
| 7 | + "compList": [ | ||
| 8 | + { | ||
| 9 | + "backgroundColor": "", | ||
| 10 | + "backgroundImgUrl": "", | ||
| 11 | + "cityCode": "", | ||
| 12 | + "compStyle": "Carousel_Layout-01", | ||
| 13 | + "compType": "CAROUSEL_LAYOUT", | ||
| 14 | + "dataSourceRequest": [ | ||
| 15 | + | ||
| 16 | + ], | ||
| 17 | + "districtCode": "", | ||
| 18 | + "extraData": "", | ||
| 19 | + "hasAdInfo": 0, | ||
| 20 | + "id": 31, | ||
| 21 | + "imgSize": "", | ||
| 22 | + "innerUrl": "", | ||
| 23 | + "linkUrl": "", | ||
| 24 | + "meddleDataList": [ | ||
| 25 | + | ||
| 26 | + ], | ||
| 27 | + "name": "为你推荐feed", | ||
| 28 | + "objectId": "", | ||
| 29 | + "objectTitle": "", | ||
| 30 | + "objectType": null, | ||
| 31 | + "operDataList": [ | ||
| 32 | + { | ||
| 33 | + "cityCode": "", | ||
| 34 | + "coverSize": "1920*1080", | ||
| 35 | + "coverType": 1, | ||
| 36 | + "coverUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231208/image/display/d4496925a1264a749975ae9b01a4ef46.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 37 | + "description": "畅通国内大循环,2023年中国经济高质量发展", | ||
| 38 | + "districtCode": "", | ||
| 39 | + "endTime": "", | ||
| 40 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231208/image/display/d4496925a1264a749975ae9b01a4ef46.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 41 | + "heatValue": "", | ||
| 42 | + "innerUrl": "", | ||
| 43 | + "landscape": 1, | ||
| 44 | + "lengthTime": null, | ||
| 45 | + "linkUrl": "", | ||
| 46 | + "openLikes": 0, | ||
| 47 | + "openUrl": "http://livewatch-prod.aikan.pdnews.cn/tr_lud/5404912f99bf4703ab070752b507cc64_origin.m3u8?auth_key=1705628416-0-0-c7f5854d6cbe801578009bfa44757f0d", | ||
| 48 | + "pageId": "", | ||
| 49 | + "playUrls": [ | ||
| 50 | + | ||
| 51 | + ], | ||
| 52 | + "programAuth": "2004557", | ||
| 53 | + "programId": "20000003744", | ||
| 54 | + "programName": "", | ||
| 55 | + "programSource": 5, | ||
| 56 | + "programType": 2, | ||
| 57 | + "provinceCode": "", | ||
| 58 | + "rankingList": [ | ||
| 59 | + | ||
| 60 | + ], | ||
| 61 | + "showTitleEd": "", | ||
| 62 | + "showTitleIng": "", | ||
| 63 | + "showTitleNo": "", | ||
| 64 | + "sortValue": null, | ||
| 65 | + "startTime": "2023-12-19 09:00:00", | ||
| 66 | + "subType": "", | ||
| 67 | + "subtitle": "", | ||
| 68 | + "title": "畅通国内大循环,2023年中国经济高质量发展", | ||
| 69 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231219/image/live/41e6079d95ff459a9adcf1a16ae0b004.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 70 | + }, | ||
| 71 | + { | ||
| 72 | + "cityCode": "", | ||
| 73 | + "coverSize": "1920*1080", | ||
| 74 | + "coverType": 1, | ||
| 75 | + "coverUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20240104/image/display/c4a9b526e0994d1bbd3ac8450f5cfc6c.jpg?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 76 | + "description": "内容榜单", | ||
| 77 | + "districtCode": "", | ||
| 78 | + "endTime": "", | ||
| 79 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20240104/image/display/c4a9b526e0994d1bbd3ac8450f5cfc6c.jpg?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 80 | + "heatValue": "", | ||
| 81 | + "innerUrl": "", | ||
| 82 | + "landscape": 1, | ||
| 83 | + "lengthTime": null, | ||
| 84 | + "linkUrl": "", | ||
| 85 | + "openLikes": 0, | ||
| 86 | + "openUrl": "", | ||
| 87 | + "pageId": "", | ||
| 88 | + "playUrls": [ | ||
| 89 | + | ||
| 90 | + ], | ||
| 91 | + "programAuth": "2004557", | ||
| 92 | + "programId": "20000003614", | ||
| 93 | + "programName": "", | ||
| 94 | + "programSource": 5, | ||
| 95 | + "programType": 2, | ||
| 96 | + "provinceCode": "", | ||
| 97 | + "rankingList": [ | ||
| 98 | + | ||
| 99 | + ], | ||
| 100 | + "showTitleEd": "", | ||
| 101 | + "showTitleIng": "", | ||
| 102 | + "showTitleNo": "", | ||
| 103 | + "sortValue": null, | ||
| 104 | + "startTime": "2023-12-07 09:00:00", | ||
| 105 | + "subType": "", | ||
| 106 | + "subtitle": "", | ||
| 107 | + "title": "内容榜单", | ||
| 108 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231206/image/live/bbe6d821e92b48919d90c7dadfd1f05a.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 109 | + }, | ||
| 110 | + { | ||
| 111 | + "cityCode": "", | ||
| 112 | + "coverSize": "", | ||
| 113 | + "coverType": 1, | ||
| 114 | + "coverUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20240108/image/display/c7790c3c880b4b8a88082f4d224487b8.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 115 | + "description": "贴错门牌致业主装修了隔壁,开发商承担装修费", | ||
| 116 | + "districtCode": "", | ||
| 117 | + "endTime": "", | ||
| 118 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20240108/image/display/c7790c3c880b4b8a88082f4d224487b8.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 119 | + "heatValue": "", | ||
| 120 | + "innerUrl": "", | ||
| 121 | + "landscape": 1, | ||
| 122 | + "lengthTime": null, | ||
| 123 | + "linkUrl": "", | ||
| 124 | + "openLikes": 0, | ||
| 125 | + "openUrl": "", | ||
| 126 | + "pageId": "", | ||
| 127 | + "playUrls": [ | ||
| 128 | + | ||
| 129 | + ], | ||
| 130 | + "programAuth": "2004557", | ||
| 131 | + "programId": "20000003394", | ||
| 132 | + "programName": "", | ||
| 133 | + "programSource": 5, | ||
| 134 | + "programType": 2, | ||
| 135 | + "provinceCode": "", | ||
| 136 | + "rankingList": [ | ||
| 137 | + | ||
| 138 | + ], | ||
| 139 | + "showTitleEd": "", | ||
| 140 | + "showTitleIng": "", | ||
| 141 | + "showTitleNo": "", | ||
| 142 | + "sortValue": null, | ||
| 143 | + "startTime": "2023-11-12 13:50:48", | ||
| 144 | + "subType": "", | ||
| 145 | + "subtitle": "", | ||
| 146 | + "title": "贴错门牌致业主装修了隔壁,开发商承担装修费", | ||
| 147 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231109/image/live/102e6eb9356b4ef19405b04c1f6ff875.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 148 | + } | ||
| 149 | + ], | ||
| 150 | + "pageId": null, | ||
| 151 | + "posterSize": "", | ||
| 152 | + "posterUrl": "", | ||
| 153 | + "provinceCode": "", | ||
| 154 | + "sortValue": 2, | ||
| 155 | + "subType": "" | ||
| 156 | + }, | ||
| 157 | + { | ||
| 158 | + "backgroundColor": "", | ||
| 159 | + "backgroundImgUrl": "", | ||
| 160 | + "cityCode": "", | ||
| 161 | + "compStyle": "Label-03", | ||
| 162 | + "compType": "LABEL", | ||
| 163 | + "dataSourceRequest": [ | ||
| 164 | + | ||
| 165 | + ], | ||
| 166 | + "districtCode": "", | ||
| 167 | + "extraData": "{\"titleIconUrl\":\"\",\"title\":\"今日推荐\"}", | ||
| 168 | + "hasAdInfo": 0, | ||
| 169 | + "id": 11, | ||
| 170 | + "imgSize": "", | ||
| 171 | + "innerUrl": "", | ||
| 172 | + "linkUrl": "", | ||
| 173 | + "meddleDataList": [ | ||
| 174 | + | ||
| 175 | + ], | ||
| 176 | + "name": "今日推荐", | ||
| 177 | + "objectId": "", | ||
| 178 | + "objectTitle": "", | ||
| 179 | + "objectType": null, | ||
| 180 | + "operDataList": [ | ||
| 181 | + | ||
| 182 | + ], | ||
| 183 | + "pageId": null, | ||
| 184 | + "posterSize": "", | ||
| 185 | + "posterUrl": "", | ||
| 186 | + "provinceCode": "", | ||
| 187 | + "sortValue": 5, | ||
| 188 | + "subType": "" | ||
| 189 | + }, | ||
| 190 | + { | ||
| 191 | + "backgroundColor": "", | ||
| 192 | + "backgroundImgUrl": "", | ||
| 193 | + "cityCode": "", | ||
| 194 | + "compStyle": "Grid_Layout-01", | ||
| 195 | + "compType": "GRID_LAYOUT", | ||
| 196 | + "dataSourceRequest": [ | ||
| 197 | + | ||
| 198 | + ], | ||
| 199 | + "districtCode": "", | ||
| 200 | + "extraData": "", | ||
| 201 | + "hasAdInfo": 0, | ||
| 202 | + "id": 7080, | ||
| 203 | + "imgSize": "", | ||
| 204 | + "innerUrl": "", | ||
| 205 | + "linkUrl": "", | ||
| 206 | + "meddleDataList": [ | ||
| 207 | + | ||
| 208 | + ], | ||
| 209 | + "name": "横宫格", | ||
| 210 | + "objectId": "", | ||
| 211 | + "objectTitle": "", | ||
| 212 | + "objectType": null, | ||
| 213 | + "operDataList": [ | ||
| 214 | + { | ||
| 215 | + "cityCode": "", | ||
| 216 | + "coverSize": "3840*2160", | ||
| 217 | + "coverType": 1, | ||
| 218 | + "coverUrl": "", | ||
| 219 | + "description": "", | ||
| 220 | + "districtCode": "", | ||
| 221 | + "endTime": "", | ||
| 222 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231218/image/display/62bdbbb35dbd45689e00790c81f04c4b.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 223 | + "heatValue": "", | ||
| 224 | + "innerUrl": "", | ||
| 225 | + "landscape": 1, | ||
| 226 | + "lengthTime": 88, | ||
| 227 | + "linkUrl": "", | ||
| 228 | + "openLikes": 1, | ||
| 229 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/113138d566d146b483c3a3713527d376_opt.mp4", | ||
| 230 | + "pageId": "", | ||
| 231 | + "playUrls": [ | ||
| 232 | + { | ||
| 233 | + "clarity": 1, | ||
| 234 | + "duration": 88, | ||
| 235 | + "landscape": 1, | ||
| 236 | + "resolutionHeight": 720, | ||
| 237 | + "resolutionWidth": 1280, | ||
| 238 | + "type": 1, | ||
| 239 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/7fe1345d9c7244359106c2e7de3b8f7a_opt.mp4" | ||
| 240 | + }, | ||
| 241 | + { | ||
| 242 | + "clarity": 1, | ||
| 243 | + "duration": 88, | ||
| 244 | + "landscape": 1, | ||
| 245 | + "resolutionHeight": 720, | ||
| 246 | + "resolutionWidth": 1280, | ||
| 247 | + "type": 1, | ||
| 248 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/113138d566d146b483c3a3713527d376_opt.mp4" | ||
| 249 | + } | ||
| 250 | + ], | ||
| 251 | + "programAuth": "4265498", | ||
| 252 | + "programId": "30001364983", | ||
| 253 | + "programName": "每日一曲《李香兰》", | ||
| 254 | + "programSource": 4, | ||
| 255 | + "programType": 1, | ||
| 256 | + "provinceCode": "", | ||
| 257 | + "rankingList": [ | ||
| 258 | + | ||
| 259 | + ], | ||
| 260 | + "showTitleEd": "", | ||
| 261 | + "showTitleIng": "", | ||
| 262 | + "showTitleNo": "", | ||
| 263 | + "sortValue": null, | ||
| 264 | + "startTime": "", | ||
| 265 | + "subType": "", | ||
| 266 | + "subtitle": "", | ||
| 267 | + "title": "每日一曲《李香兰》", | ||
| 268 | + "vImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231218/image/display/62bdbbb35dbd45689e00790c81f04c4b.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg" | ||
| 269 | + }, | ||
| 270 | + { | ||
| 271 | + "cityCode": "", | ||
| 272 | + "coverSize": "3840*2160", | ||
| 273 | + "coverType": 1, | ||
| 274 | + "coverUrl": "", | ||
| 275 | + "description": "", | ||
| 276 | + "districtCode": "", | ||
| 277 | + "endTime": "", | ||
| 278 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231218/image/display/f79bbaa5a33b4bd88176071c4f797ff6.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 279 | + "heatValue": "", | ||
| 280 | + "innerUrl": "", | ||
| 281 | + "landscape": 1, | ||
| 282 | + "lengthTime": 88, | ||
| 283 | + "linkUrl": "", | ||
| 284 | + "openLikes": 1, | ||
| 285 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/113138d566d146b483c3a3713527d376_opt.mp4", | ||
| 286 | + "pageId": "", | ||
| 287 | + "playUrls": [ | ||
| 288 | + { | ||
| 289 | + "clarity": 1, | ||
| 290 | + "duration": 88, | ||
| 291 | + "landscape": 1, | ||
| 292 | + "resolutionHeight": 720, | ||
| 293 | + "resolutionWidth": 1280, | ||
| 294 | + "type": 1, | ||
| 295 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/7fe1345d9c7244359106c2e7de3b8f7a_opt.mp4" | ||
| 296 | + }, | ||
| 297 | + { | ||
| 298 | + "clarity": 1, | ||
| 299 | + "duration": 88, | ||
| 300 | + "landscape": 1, | ||
| 301 | + "resolutionHeight": 720, | ||
| 302 | + "resolutionWidth": 1280, | ||
| 303 | + "type": 1, | ||
| 304 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/113138d566d146b483c3a3713527d376_opt.mp4" | ||
| 305 | + } | ||
| 306 | + ], | ||
| 307 | + "programAuth": "4265498", | ||
| 308 | + "programId": "30001364983", | ||
| 309 | + "programName": "如约而至!中越两党总书记实现第三轮互访", | ||
| 310 | + "programSource": 4, | ||
| 311 | + "programType": 1, | ||
| 312 | + "provinceCode": "", | ||
| 313 | + "rankingList": [ | ||
| 314 | + | ||
| 315 | + ], | ||
| 316 | + "showTitleEd": "", | ||
| 317 | + "showTitleIng": "", | ||
| 318 | + "showTitleNo": "", | ||
| 319 | + "sortValue": null, | ||
| 320 | + "startTime": "", | ||
| 321 | + "subType": "", | ||
| 322 | + "subtitle": "", | ||
| 323 | + "title": "如约而至!中越两党总书记实现第三轮互访", | ||
| 324 | + "vImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231218/image/display/f79bbaa5a33b4bd88176071c4f797ff6.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg" | ||
| 325 | + }, | ||
| 326 | + { | ||
| 327 | + "cityCode": "", | ||
| 328 | + "coverSize": "3840*2160", | ||
| 329 | + "coverType": 1, | ||
| 330 | + "coverUrl": "", | ||
| 331 | + "description": "", | ||
| 332 | + "districtCode": "", | ||
| 333 | + "endTime": "", | ||
| 334 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231218/image/display/2c1d917009584ce2bb4a35cbb3a860a0.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 335 | + "heatValue": "", | ||
| 336 | + "innerUrl": "", | ||
| 337 | + "landscape": 1, | ||
| 338 | + "lengthTime": 88, | ||
| 339 | + "linkUrl": "", | ||
| 340 | + "openLikes": 1, | ||
| 341 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/113138d566d146b483c3a3713527d376_opt.mp4", | ||
| 342 | + "pageId": "", | ||
| 343 | + "playUrls": [ | ||
| 344 | + { | ||
| 345 | + "clarity": 1, | ||
| 346 | + "duration": 88, | ||
| 347 | + "landscape": 1, | ||
| 348 | + "resolutionHeight": 720, | ||
| 349 | + "resolutionWidth": 1280, | ||
| 350 | + "type": 1, | ||
| 351 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/7fe1345d9c7244359106c2e7de3b8f7a_opt.mp4" | ||
| 352 | + }, | ||
| 353 | + { | ||
| 354 | + "clarity": 1, | ||
| 355 | + "duration": 88, | ||
| 356 | + "landscape": 1, | ||
| 357 | + "resolutionHeight": 720, | ||
| 358 | + "resolutionWidth": 1280, | ||
| 359 | + "type": 1, | ||
| 360 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/113138d566d146b483c3a3713527d376_opt.mp4" | ||
| 361 | + } | ||
| 362 | + ], | ||
| 363 | + "programAuth": "4265498", | ||
| 364 | + "programId": "30001364983", | ||
| 365 | + "programName": "人间烟火,温暖着所有怀有希望的晚归人。", | ||
| 366 | + "programSource": 4, | ||
| 367 | + "programType": 1, | ||
| 368 | + "provinceCode": "", | ||
| 369 | + "rankingList": [ | ||
| 370 | + | ||
| 371 | + ], | ||
| 372 | + "showTitleEd": "", | ||
| 373 | + "showTitleIng": "", | ||
| 374 | + "showTitleNo": "", | ||
| 375 | + "sortValue": null, | ||
| 376 | + "startTime": "", | ||
| 377 | + "subType": "", | ||
| 378 | + "subtitle": "", | ||
| 379 | + "title": "人间烟火,温暖着所有怀有希望的晚归人。", | ||
| 380 | + "vImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231218/image/display/2c1d917009584ce2bb4a35cbb3a860a0.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg" | ||
| 381 | + }, | ||
| 382 | + { | ||
| 383 | + "cityCode": "", | ||
| 384 | + "coverSize": "3840*2160", | ||
| 385 | + "coverType": 1, | ||
| 386 | + "coverUrl": "", | ||
| 387 | + "description": "", | ||
| 388 | + "districtCode": "", | ||
| 389 | + "endTime": "", | ||
| 390 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231222/image/display/117dc516ca5c42d5843c0d32050c9fc6.jpeg?x-oss-process=image/resize,w_240/quality,q_90/format,jpg", | ||
| 391 | + "heatValue": "", | ||
| 392 | + "innerUrl": "", | ||
| 393 | + "landscape": 1, | ||
| 394 | + "lengthTime": 88, | ||
| 395 | + "linkUrl": "", | ||
| 396 | + "openLikes": 1, | ||
| 397 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/113138d566d146b483c3a3713527d376_opt.mp4", | ||
| 398 | + "pageId": "", | ||
| 399 | + "playUrls": [ | ||
| 400 | + { | ||
| 401 | + "clarity": 1, | ||
| 402 | + "duration": 88, | ||
| 403 | + "landscape": 1, | ||
| 404 | + "resolutionHeight": 720, | ||
| 405 | + "resolutionWidth": 1280, | ||
| 406 | + "type": 1, | ||
| 407 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/7fe1345d9c7244359106c2e7de3b8f7a_opt.mp4" | ||
| 408 | + }, | ||
| 409 | + { | ||
| 410 | + "clarity": 1, | ||
| 411 | + "duration": 88, | ||
| 412 | + "landscape": 1, | ||
| 413 | + "resolutionHeight": 720, | ||
| 414 | + "resolutionWidth": 1280, | ||
| 415 | + "type": 1, | ||
| 416 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/sjbj-20231209/vod/content/output/113138d566d146b483c3a3713527d376_opt.mp4" | ||
| 417 | + } | ||
| 418 | + ], | ||
| 419 | + "programAuth": "4265498", | ||
| 420 | + "programId": "30001364983", | ||
| 421 | + "programName": "时政微观察丨推进乡村全面振兴是“三农”工作总抓手", | ||
| 422 | + "programSource": 4, | ||
| 423 | + "programType": 1, | ||
| 424 | + "provinceCode": "", | ||
| 425 | + "rankingList": [ | ||
| 426 | + | ||
| 427 | + ], | ||
| 428 | + "showTitleEd": "", | ||
| 429 | + "showTitleIng": "", | ||
| 430 | + "showTitleNo": "", | ||
| 431 | + "sortValue": null, | ||
| 432 | + "startTime": "", | ||
| 433 | + "subType": "", | ||
| 434 | + "subtitle": "", | ||
| 435 | + "title": "时政微观察丨推进乡村全面振兴是“三农”工作总抓手", | ||
| 436 | + "vImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231222/image/display/117dc516ca5c42d5843c0d32050c9fc6.jpeg?x-oss-process=image/resize,w_240/quality,q_90/format,jpg" | ||
| 437 | + } | ||
| 438 | + ], | ||
| 439 | + "pageId": null, | ||
| 440 | + "posterSize": "", | ||
| 441 | + "posterUrl": "", | ||
| 442 | + "provinceCode": "", | ||
| 443 | + "sortValue": 4, | ||
| 444 | + "subType": "" | ||
| 445 | + }, | ||
| 446 | + { | ||
| 447 | + "backgroundColor": "", | ||
| 448 | + "backgroundImgUrl": "", | ||
| 449 | + "cityCode": "", | ||
| 450 | + "compStyle": "Single_Column-01", | ||
| 451 | + "compType": "SINGLE_COLUMN", | ||
| 452 | + "dataSourceRequest": [ | ||
| 453 | + | ||
| 454 | + ], | ||
| 455 | + "districtCode": "", | ||
| 456 | + "extraData": "", | ||
| 457 | + "hasAdInfo": 0, | ||
| 458 | + "id": 6772, | ||
| 459 | + "imgSize": "", | ||
| 460 | + "innerUrl": "", | ||
| 461 | + "linkUrl": "", | ||
| 462 | + "meddleDataList": [ | ||
| 463 | + | ||
| 464 | + ], | ||
| 465 | + "name": "测试", | ||
| 466 | + "objectId": "", | ||
| 467 | + "objectTitle": "", | ||
| 468 | + "objectType": null, | ||
| 469 | + "operDataList": [ | ||
| 470 | + { | ||
| 471 | + "cityCode": "620100", | ||
| 472 | + "coverSize": "", | ||
| 473 | + "coverType": 1, | ||
| 474 | + "coverUrl": "", | ||
| 475 | + "description": "", | ||
| 476 | + "districtCode": "540102", | ||
| 477 | + "endTime": "", | ||
| 478 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231228/image/display/90a2db4077d44a1f887f068fc659d977.jpeg?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 479 | + "heatValue": "", | ||
| 480 | + "innerUrl": "", | ||
| 481 | + "landscape": 1, | ||
| 482 | + "lengthTime": 91, | ||
| 483 | + "linkUrl": "", | ||
| 484 | + "openLikes": 1, | ||
| 485 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/2577/vod/content/20231109/a5108cd087.mp4", | ||
| 486 | + "pageId": "", | ||
| 487 | + "playUrls": [ | ||
| 488 | + { | ||
| 489 | + "clarity": 3, | ||
| 490 | + "duration": 91, | ||
| 491 | + "landscape": 1, | ||
| 492 | + "resolutionHeight": 1080, | ||
| 493 | + "resolutionWidth": 1920, | ||
| 494 | + "type": 1, | ||
| 495 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/2577/vod/content/20231109/a5108cd087.mp4" | ||
| 496 | + } | ||
| 497 | + ], | ||
| 498 | + "programAuth": "4255335", | ||
| 499 | + "programId": "30001335003", | ||
| 500 | + "programName": "美方再次宣布对台售武,外交部答澎湃:将对参与企业采取反制措施", | ||
| 501 | + "programSource": 4, | ||
| 502 | + "programType": 1, | ||
| 503 | + "provinceCode": "620000", | ||
| 504 | + "rankingList": [ | ||
| 505 | + | ||
| 506 | + ], | ||
| 507 | + "showTitleEd": "", | ||
| 508 | + "showTitleIng": "", | ||
| 509 | + "showTitleNo": "", | ||
| 510 | + "sortValue": null, | ||
| 511 | + "startTime": "", | ||
| 512 | + "subType": "", | ||
| 513 | + "subtitle": "", | ||
| 514 | + "title": "美方再次宣布对台售武,外交部答澎湃:将对参与企业采取反制措施", | ||
| 515 | + "vImageUrl": "" | ||
| 516 | + }, | ||
| 517 | + { | ||
| 518 | + "cityCode": "620100", | ||
| 519 | + "coverSize": "", | ||
| 520 | + "coverType": 1, | ||
| 521 | + "coverUrl": "", | ||
| 522 | + "description": "", | ||
| 523 | + "districtCode": "540102", | ||
| 524 | + "endTime": "", | ||
| 525 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20240108/image/display/b832ff05a97542c69bcea69fcf5d7204.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 526 | + "heatValue": "", | ||
| 527 | + "innerUrl": "", | ||
| 528 | + "landscape": 1, | ||
| 529 | + "lengthTime": 91, | ||
| 530 | + "linkUrl": "", | ||
| 531 | + "openLikes": 1, | ||
| 532 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/2577/vod/content/20231109/a5108cd087.mp4", | ||
| 533 | + "pageId": "", | ||
| 534 | + "playUrls": [ | ||
| 535 | + { | ||
| 536 | + "clarity": 3, | ||
| 537 | + "duration": 91, | ||
| 538 | + "landscape": 1, | ||
| 539 | + "resolutionHeight": 1080, | ||
| 540 | + "resolutionWidth": 1920, | ||
| 541 | + "type": 1, | ||
| 542 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/2577/vod/content/20231109/a5108cd087.mp4" | ||
| 543 | + } | ||
| 544 | + ], | ||
| 545 | + "programAuth": "4255335", | ||
| 546 | + "programId": "30001335003", | ||
| 547 | + "programName": "2023年12月暴雪突袭", | ||
| 548 | + "programSource": 4, | ||
| 549 | + "programType": 1, | ||
| 550 | + "provinceCode": "620000", | ||
| 551 | + "rankingList": [ | ||
| 552 | + | ||
| 553 | + ], | ||
| 554 | + "showTitleEd": "", | ||
| 555 | + "showTitleIng": "", | ||
| 556 | + "showTitleNo": "", | ||
| 557 | + "sortValue": null, | ||
| 558 | + "startTime": "", | ||
| 559 | + "subType": "", | ||
| 560 | + "subtitle": "", | ||
| 561 | + "title": "2023年12月暴雪突袭", | ||
| 562 | + "vImageUrl": "" | ||
| 563 | + }, | ||
| 564 | + { | ||
| 565 | + "cityCode": "620100", | ||
| 566 | + "coverSize": "", | ||
| 567 | + "coverType": 1, | ||
| 568 | + "coverUrl": "", | ||
| 569 | + "description": "", | ||
| 570 | + "districtCode": "540102", | ||
| 571 | + "endTime": "", | ||
| 572 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231106/image/display/5890a13a259a4dd0b283284dafb38843.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg", | ||
| 573 | + "heatValue": "", | ||
| 574 | + "innerUrl": "", | ||
| 575 | + "landscape": 1, | ||
| 576 | + "lengthTime": 91, | ||
| 577 | + "linkUrl": "", | ||
| 578 | + "openLikes": 1, | ||
| 579 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/2577/vod/content/20231109/a5108cd087.mp4", | ||
| 580 | + "pageId": "", | ||
| 581 | + "playUrls": [ | ||
| 582 | + { | ||
| 583 | + "clarity": 3, | ||
| 584 | + "duration": 91, | ||
| 585 | + "landscape": 1, | ||
| 586 | + "resolutionHeight": 1080, | ||
| 587 | + "resolutionWidth": 1920, | ||
| 588 | + "type": 1, | ||
| 589 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/2577/vod/content/20231109/a5108cd087.mp4" | ||
| 590 | + } | ||
| 591 | + ], | ||
| 592 | + "programAuth": "4255335", | ||
| 593 | + "programId": "30001335003", | ||
| 594 | + "programName": "山东青州:花卉种植助增收,花卉种植助增收", | ||
| 595 | + "programSource": 4, | ||
| 596 | + "programType": 1, | ||
| 597 | + "provinceCode": "620000", | ||
| 598 | + "rankingList": [ | ||
| 599 | + | ||
| 600 | + ], | ||
| 601 | + "showTitleEd": "", | ||
| 602 | + "showTitleIng": "", | ||
| 603 | + "showTitleNo": "", | ||
| 604 | + "sortValue": null, | ||
| 605 | + "startTime": "", | ||
| 606 | + "subType": "", | ||
| 607 | + "subtitle": "", | ||
| 608 | + "title": "山东青州:花卉种植助增收,花卉种植助增收", | ||
| 609 | + "vImageUrl": "" | ||
| 610 | + }, | ||
| 611 | + { | ||
| 612 | + "cityCode": "620100", | ||
| 613 | + "coverSize": "", | ||
| 614 | + "coverType": 1, | ||
| 615 | + "coverUrl": "", | ||
| 616 | + "description": "", | ||
| 617 | + "districtCode": "540102", | ||
| 618 | + "endTime": "", | ||
| 619 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/f60b/image/content/20231109/cce56a2cc7.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 620 | + "heatValue": "", | ||
| 621 | + "innerUrl": "", | ||
| 622 | + "landscape": 1, | ||
| 623 | + "lengthTime": 91, | ||
| 624 | + "linkUrl": "", | ||
| 625 | + "openLikes": 1, | ||
| 626 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/2577/vod/content/20231109/a5108cd087.mp4", | ||
| 627 | + "pageId": "", | ||
| 628 | + "playUrls": [ | ||
| 629 | + { | ||
| 630 | + "clarity": 3, | ||
| 631 | + "duration": 91, | ||
| 632 | + "landscape": 1, | ||
| 633 | + "resolutionHeight": 1080, | ||
| 634 | + "resolutionWidth": 1920, | ||
| 635 | + "type": 1, | ||
| 636 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/2577/vod/content/20231109/a5108cd087.mp4" | ||
| 637 | + } | ||
| 638 | + ], | ||
| 639 | + "programAuth": "4255335", | ||
| 640 | + "programId": "30001335003", | ||
| 641 | + "programName": "“追梦”女孩足球节兰州站顺利开幕", | ||
| 642 | + "programSource": 4, | ||
| 643 | + "programType": 1, | ||
| 644 | + "provinceCode": "620000", | ||
| 645 | + "rankingList": [ | ||
| 646 | + | ||
| 647 | + ], | ||
| 648 | + "showTitleEd": "", | ||
| 649 | + "showTitleIng": "", | ||
| 650 | + "showTitleNo": "", | ||
| 651 | + "sortValue": null, | ||
| 652 | + "startTime": "", | ||
| 653 | + "subType": "", | ||
| 654 | + "subtitle": "", | ||
| 655 | + "title": "“追梦”女孩足球节兰州站顺利开幕", | ||
| 656 | + "vImageUrl": "" | ||
| 657 | + }, | ||
| 658 | + { | ||
| 659 | + "cityCode": "110100", | ||
| 660 | + "coverSize": "1524*857", | ||
| 661 | + "coverType": 1, | ||
| 662 | + "coverUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231113/image/live/16187cd251844430b42a8fc604065652.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 663 | + "description": "霜降,是秋季的最后一个节气,意味着冬天即将开始。《月令七十二候集解》记载:“九月中,气肃而凝,露结为霜矣。”此时节,树叶经过秋霜洗礼,有的变成深红色,有的变成金黄色,呈现出一幅幅绝美的“大地画卷”。登山赏叶,漫步乡野,徜徉海岸,尽享多彩美景不负秋日好时光", | ||
| 664 | + "districtCode": "不限", | ||
| 665 | + "endTime": "", | ||
| 666 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231113/image/live/16187cd251844430b42a8fc604065652.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 667 | + "heatValue": "", | ||
| 668 | + "innerUrl": "", | ||
| 669 | + "landscape": 1, | ||
| 670 | + "lengthTime": null, | ||
| 671 | + "linkUrl": "", | ||
| 672 | + "openLikes": 0, | ||
| 673 | + "openUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231113/vod/live/51c30859550d4ebeba50e09e18186b92.mp4", | ||
| 674 | + "pageId": "", | ||
| 675 | + "playUrls": [ | ||
| 676 | + | ||
| 677 | + ], | ||
| 678 | + "programAuth": "2004545", | ||
| 679 | + "programId": "20000092968", | ||
| 680 | + "programName": "", | ||
| 681 | + "programSource": 5, | ||
| 682 | + "programType": 2, | ||
| 683 | + "provinceCode": "110000", | ||
| 684 | + "rankingList": [ | ||
| 685 | + | ||
| 686 | + ], | ||
| 687 | + "showTitleEd": "", | ||
| 688 | + "showTitleIng": "", | ||
| 689 | + "showTitleNo": "", | ||
| 690 | + "sortValue": null, | ||
| 691 | + "startTime": "2023-11-21 16:59:42", | ||
| 692 | + "subType": "", | ||
| 693 | + "subtitle": "", | ||
| 694 | + "title": "1120回归推流直播1", | ||
| 695 | + "vImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231113/image/live/4ccdec179fea44bba19a4304ab6af756.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 696 | + }, | ||
| 697 | + { | ||
| 698 | + "cityCode": "", | ||
| 699 | + "coverSize": "869*489", | ||
| 700 | + "coverType": 1, | ||
| 701 | + "coverUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231013/image/live/61c783d70c924f019052f56592a78eb7.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 702 | + "description": "", | ||
| 703 | + "districtCode": "", | ||
| 704 | + "endTime": "", | ||
| 705 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231013/image/live/61c783d70c924f019052f56592a78eb7.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 706 | + "heatValue": "", | ||
| 707 | + "innerUrl": "", | ||
| 708 | + "landscape": 1, | ||
| 709 | + "lengthTime": null, | ||
| 710 | + "linkUrl": "", | ||
| 711 | + "openLikes": 0, | ||
| 712 | + "openUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/live/record/tr_lud/0ea32bdda95548f0a3d25a94fbad03f5_lud/123003.m3u8", | ||
| 713 | + "pageId": "", | ||
| 714 | + "playUrls": [ | ||
| 715 | + | ||
| 716 | + ], | ||
| 717 | + "programAuth": "4251160", | ||
| 718 | + "programId": "20000092995", | ||
| 719 | + "programName": "", | ||
| 720 | + "programSource": 5, | ||
| 721 | + "programType": 2, | ||
| 722 | + "provinceCode": "", | ||
| 723 | + "rankingList": [ | ||
| 724 | + | ||
| 725 | + ], | ||
| 726 | + "showTitleEd": "", | ||
| 727 | + "showTitleIng": "", | ||
| 728 | + "showTitleNo": "", | ||
| 729 | + "sortValue": null, | ||
| 730 | + "startTime": "2023-11-21 23:59:59", | ||
| 731 | + "subType": "", | ||
| 732 | + "subtitle": "", | ||
| 733 | + "title": "贵州黔南州翁安县建中镇", | ||
| 734 | + "vImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231013/image/live/9f91b916c74c4ef6bd0c0b46aaf3fea4.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 735 | + }, | ||
| 736 | + { | ||
| 737 | + "cityCode": "110100", | ||
| 738 | + "coverSize": "", | ||
| 739 | + "coverType": 1, | ||
| 740 | + "coverUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231113/image/live/7bd6c3b52bdb4b68970e97810e2bb2b3.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 741 | + "description": "霜降,是秋季的最后一个节气,意味着冬天即将开始。《月令七十二候集解》记载:“九月中,气肃而凝,露结为霜矣。”此时节,树叶经过秋霜洗礼,有的变成深红色,有的变成金黄色,呈现出一幅幅绝美的“大地画卷”。登山赏叶,漫步乡野,徜徉海岸,尽享多彩美景不负秋日好时光", | ||
| 742 | + "districtCode": "不限", | ||
| 743 | + "endTime": "", | ||
| 744 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231113/image/live/7bd6c3b52bdb4b68970e97810e2bb2b3.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 745 | + "heatValue": "", | ||
| 746 | + "innerUrl": "", | ||
| 747 | + "landscape": 1, | ||
| 748 | + "lengthTime": null, | ||
| 749 | + "linkUrl": "", | ||
| 750 | + "openLikes": 0, | ||
| 751 | + "openUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/live/record/tr_lud/1d86a015ac5a480ea58b7f63e06a1d1f_lud/122895.m3u8", | ||
| 752 | + "pageId": "", | ||
| 753 | + "playUrls": [ | ||
| 754 | + | ||
| 755 | + ], | ||
| 756 | + "programAuth": "2004545", | ||
| 757 | + "programId": "20000092888", | ||
| 758 | + "programName": "", | ||
| 759 | + "programSource": 5, | ||
| 760 | + "programType": 2, | ||
| 761 | + "provinceCode": "110000", | ||
| 762 | + "rankingList": [ | ||
| 763 | + | ||
| 764 | + ], | ||
| 765 | + "showTitleEd": "", | ||
| 766 | + "showTitleIng": "", | ||
| 767 | + "showTitleNo": "", | ||
| 768 | + "sortValue": null, | ||
| 769 | + "startTime": "2023-11-14 17:34:17", | ||
| 770 | + "subType": "", | ||
| 771 | + "subtitle": "", | ||
| 772 | + "title": "1113回归露凝为霜 秋色深深", | ||
| 773 | + "vImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231113/image/live/bb7b4de5986a400a90cf1a8530e6335a.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 774 | + }, | ||
| 775 | + { | ||
| 776 | + "cityCode": "", | ||
| 777 | + "coverSize": "1920*1080", | ||
| 778 | + "coverType": 1, | ||
| 779 | + "coverUrl": "", | ||
| 780 | + "description": "", | ||
| 781 | + "districtCode": "", | ||
| 782 | + "endTime": "", | ||
| 783 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/c4b3/image/content/20231121/c7899f3074.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 784 | + "heatValue": "", | ||
| 785 | + "innerUrl": "", | ||
| 786 | + "landscape": 1, | ||
| 787 | + "lengthTime": 65, | ||
| 788 | + "linkUrl": "", | ||
| 789 | + "openLikes": 1, | ||
| 790 | + "openUrl": "https://uatjdcdnout.aikan.pdnews.cn/a940/vod/content/20231121/85056be2e6.mp4", | ||
| 791 | + "pageId": "", | ||
| 792 | + "playUrls": [ | ||
| 793 | + { | ||
| 794 | + "clarity": 3, | ||
| 795 | + "duration": 65, | ||
| 796 | + "landscape": 1, | ||
| 797 | + "resolutionHeight": 1080, | ||
| 798 | + "resolutionWidth": 1920, | ||
| 799 | + "type": 1, | ||
| 800 | + "url": "https://uatjdcdnout.aikan.pdnews.cn/a940/vod/content/20231121/85056be2e6.mp4" | ||
| 801 | + } | ||
| 802 | + ], | ||
| 803 | + "programAuth": "4255737", | ||
| 804 | + "programId": "30001353022", | ||
| 805 | + "programName": "吉林省发布“十佳返乡入乡创业就业带头人”及“十大劳务品牌”", | ||
| 806 | + "programSource": 4, | ||
| 807 | + "programType": 1, | ||
| 808 | + "provinceCode": "", | ||
| 809 | + "rankingList": [ | ||
| 810 | + | ||
| 811 | + ], | ||
| 812 | + "showTitleEd": "", | ||
| 813 | + "showTitleIng": "", | ||
| 814 | + "showTitleNo": "", | ||
| 815 | + "sortValue": null, | ||
| 816 | + "startTime": "", | ||
| 817 | + "subType": "", | ||
| 818 | + "subtitle": "", | ||
| 819 | + "title": "吉林省发布“十佳返乡入乡创业就业带头人”及“十大劳务品牌”", | ||
| 820 | + "vImageUrl": "" | ||
| 821 | + } | ||
| 822 | + ], | ||
| 823 | + "pageId": null, | ||
| 824 | + "posterSize": "", | ||
| 825 | + "posterUrl": "", | ||
| 826 | + "provinceCode": "", | ||
| 827 | + "sortValue": 2, | ||
| 828 | + "subType": "" | ||
| 829 | + }, | ||
| 830 | + { | ||
| 831 | + "backgroundColor": "", | ||
| 832 | + "backgroundImgUrl": "", | ||
| 833 | + "cityCode": "", | ||
| 834 | + "compStyle": "Single_Column-02", | ||
| 835 | + "compType": "SINGLE_COLUMN", | ||
| 836 | + "dataSourceRequest": [ | ||
| 837 | + | ||
| 838 | + ], | ||
| 839 | + "districtCode": "", | ||
| 840 | + "extraData": "", | ||
| 841 | + "hasAdInfo": 0, | ||
| 842 | + "id": 12, | ||
| 843 | + "imgSize": "", | ||
| 844 | + "innerUrl": "", | ||
| 845 | + "linkUrl": "", | ||
| 846 | + "meddleDataList": [ | ||
| 847 | + | ||
| 848 | + ], | ||
| 849 | + "name": "为你推荐feed", | ||
| 850 | + "objectId": "", | ||
| 851 | + "objectTitle": "", | ||
| 852 | + "objectType": null, | ||
| 853 | + "operDataList": [ | ||
| 854 | + { | ||
| 855 | + "cityCode": "", | ||
| 856 | + "coverSize": "1920*1080", | ||
| 857 | + "coverType": 1, | ||
| 858 | + "coverUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231221/image/display/552162a3774f4ecf9a809142959e318c.png?x-oss-process=image/resize,w_240/quality,q_90/format,jpg", | ||
| 859 | + "description": "陕西被叫做“地质明珠”的小众景区,不仅风景优美,而且全年免费", | ||
| 860 | + "districtCode": "", | ||
| 861 | + "endTime": "", | ||
| 862 | + "hImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231221/image/display/552162a3774f4ecf9a809142959e318c.png?x-oss-process=image/resize,w_240/quality,q_90/format,jpg", | ||
| 863 | + "heatValue": "", | ||
| 864 | + "innerUrl": "", | ||
| 865 | + "landscape": 1, | ||
| 866 | + "lengthTime": null, | ||
| 867 | + "linkUrl": "", | ||
| 868 | + "openLikes": 0, | ||
| 869 | + "openUrl": "https://cdnjdphoto.aikan.pdnews.cn/live/record/tr_lud/e77d054073f543ffbc8f296d4975189f_lud/5362.m3u8", | ||
| 870 | + "pageId": "", | ||
| 871 | + "playUrls": [ | ||
| 872 | + | ||
| 873 | + ], | ||
| 874 | + "programAuth": "2004557", | ||
| 875 | + "programId": "20000003739", | ||
| 876 | + "programName": "", | ||
| 877 | + "programSource": 5, | ||
| 878 | + "programType": 2, | ||
| 879 | + "provinceCode": "", | ||
| 880 | + "rankingList": [ | ||
| 881 | + | ||
| 882 | + ], | ||
| 883 | + "showTitleEd": "", | ||
| 884 | + "showTitleIng": "", | ||
| 885 | + "showTitleNo": "", | ||
| 886 | + "sortValue": null, | ||
| 887 | + "startTime": "2023-12-19 12:00:00", | ||
| 888 | + "subType": "", | ||
| 889 | + "subtitle": "", | ||
| 890 | + "title": "陕西被叫做“地质明珠”的小众景区,不仅风景优美,而且全年免费", | ||
| 891 | + "vImageUrl": "https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20231221/image/display/552162a3774f4ecf9a809142959e318c.png?x-oss-process=image/resize,w_240/quality,q_90/format,jpg" | ||
| 892 | + }, | ||
| 893 | + { | ||
| 894 | + "cityCode": "", | ||
| 895 | + "coverSize": "2271*1278", | ||
| 896 | + "coverType": 1, | ||
| 897 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/f9b81f10f9d0430194f690a845c6912c.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 898 | + "description": "“弦韵乌审,暖才于心”,通过马头琴管弦乐、原生态组合曲、传统民歌合唱、马头琴独奏等多种艺术表现形式,充分展现马头琴音乐的悠扬之美、力量之美,为高校师生带来一场别开生面的音乐盛宴。", | ||
| 899 | + "districtCode": "", | ||
| 900 | + "endTime": "", | ||
| 901 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/f9b81f10f9d0430194f690a845c6912c.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 902 | + "heatValue": "", | ||
| 903 | + "innerUrl": "", | ||
| 904 | + "landscape": 1, | ||
| 905 | + "lengthTime": null, | ||
| 906 | + "linkUrl": "", | ||
| 907 | + "openLikes": 0, | ||
| 908 | + "openUrl": "", | ||
| 909 | + "pageId": "", | ||
| 910 | + "playUrls": [ | ||
| 911 | + | ||
| 912 | + ], | ||
| 913 | + "programAuth": "2004557", | ||
| 914 | + "programId": "20000003702", | ||
| 915 | + "programName": "", | ||
| 916 | + "programSource": 5, | ||
| 917 | + "programType": 2, | ||
| 918 | + "provinceCode": "", | ||
| 919 | + "rankingList": [ | ||
| 920 | + | ||
| 921 | + ], | ||
| 922 | + "showTitleEd": "", | ||
| 923 | + "showTitleIng": "", | ||
| 924 | + "showTitleNo": "", | ||
| 925 | + "sortValue": null, | ||
| 926 | + "startTime": "", | ||
| 927 | + "subType": "", | ||
| 928 | + "subtitle": "", | ||
| 929 | + "title": "“弦韵乌审,暖才于心”中国•乌审马头琴交响乐团走进高校", | ||
| 930 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/d0326a10b7504a34964aff0962d5ad7d.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 931 | + }, | ||
| 932 | + { | ||
| 933 | + "cityCode": "", | ||
| 934 | + "coverSize": "600*338", | ||
| 935 | + "coverType": 1, | ||
| 936 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/4f67db4b26f34ac5853cb2f25b55d1d4.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 937 | + "description": "国务院新闻办公室于2023年12月18日(星期一)下午3时举行国务院政策例行吹风会,请商务部副部长盛秋平和海关总署、市场监管总局、金融监管总局有关负责人介绍加快内外贸一体化发展有关情况,并答记者问。", | ||
| 938 | + "districtCode": "", | ||
| 939 | + "endTime": "", | ||
| 940 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/4f67db4b26f34ac5853cb2f25b55d1d4.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 941 | + "heatValue": "", | ||
| 942 | + "innerUrl": "", | ||
| 943 | + "landscape": 1, | ||
| 944 | + "lengthTime": null, | ||
| 945 | + "linkUrl": "", | ||
| 946 | + "openLikes": 0, | ||
| 947 | + "openUrl": "", | ||
| 948 | + "pageId": "", | ||
| 949 | + "playUrls": [ | ||
| 950 | + | ||
| 951 | + ], | ||
| 952 | + "programAuth": "2004557", | ||
| 953 | + "programId": "20000003737", | ||
| 954 | + "programName": "", | ||
| 955 | + "programSource": 5, | ||
| 956 | + "programType": 2, | ||
| 957 | + "provinceCode": "", | ||
| 958 | + "rankingList": [ | ||
| 959 | + | ||
| 960 | + ], | ||
| 961 | + "showTitleEd": "", | ||
| 962 | + "showTitleIng": "", | ||
| 963 | + "showTitleNo": "", | ||
| 964 | + "sortValue": null, | ||
| 965 | + "startTime": "2023-12-18 15:09:00", | ||
| 966 | + "subType": "", | ||
| 967 | + "subtitle": "", | ||
| 968 | + "title": "国新办发布会|介绍加快内外贸一体化发展有关情况", | ||
| 969 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/3160f19a3247405ea7151604fd87f0e7.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 970 | + }, | ||
| 971 | + { | ||
| 972 | + "cityCode": "", | ||
| 973 | + "coverSize": "1600*900", | ||
| 974 | + "coverType": 1, | ||
| 975 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/038c195d6dd84a47bb7962bd2e897c87.jpeg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 976 | + "description": "云上看呆萌“滚滚”的日常,一起来看国宝大熊猫的精彩生活、搞笑瞬间和治愈时刻。", | ||
| 977 | + "districtCode": "", | ||
| 978 | + "endTime": "", | ||
| 979 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/038c195d6dd84a47bb7962bd2e897c87.jpeg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 980 | + "heatValue": "", | ||
| 981 | + "innerUrl": "", | ||
| 982 | + "landscape": 1, | ||
| 983 | + "lengthTime": null, | ||
| 984 | + "linkUrl": "", | ||
| 985 | + "openLikes": 0, | ||
| 986 | + "openUrl": "", | ||
| 987 | + "pageId": "", | ||
| 988 | + "playUrls": [ | ||
| 989 | + | ||
| 990 | + ], | ||
| 991 | + "programAuth": "2004557", | ||
| 992 | + "programId": "20000003715", | ||
| 993 | + "programName": "", | ||
| 994 | + "programSource": 5, | ||
| 995 | + "programType": 2, | ||
| 996 | + "provinceCode": "", | ||
| 997 | + "rankingList": [ | ||
| 998 | + | ||
| 999 | + ], | ||
| 1000 | + "showTitleEd": "", | ||
| 1001 | + "showTitleIng": "", | ||
| 1002 | + "showTitleNo": "", | ||
| 1003 | + "sortValue": null, | ||
| 1004 | + "startTime": "2023-12-18 10:38:00", | ||
| 1005 | + "subType": "", | ||
| 1006 | + "subtitle": "", | ||
| 1007 | + "title": "云逛奇妙动物园:国宝大熊猫的欢乐日常", | ||
| 1008 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/b60fbd785822476daca4af0c8da4ce9a.jpeg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 1009 | + }, | ||
| 1010 | + { | ||
| 1011 | + "cityCode": "", | ||
| 1012 | + "coverSize": "942*530", | ||
| 1013 | + "coverType": 1, | ||
| 1014 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/047cc7d270114b8da8ad1b98522741a7.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1015 | + "description": "“老伴你帮我看看血压器是不是坏掉了,怎么两只手测量不一样呀?”高血压是一种常见的心血管疾病,如果血压没有得到有效控制,会增加心脑血管疾病的风险。正确测量血压对于掌握健康状况至关重要。本次直播,复旦大学附属华山医院护理部护师须倩雯将详细介绍正确的测量血压的步骤、测量前的准备工作,以及常见的测量误区。", | ||
| 1016 | + "districtCode": "", | ||
| 1017 | + "endTime": "", | ||
| 1018 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/047cc7d270114b8da8ad1b98522741a7.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1019 | + "heatValue": "", | ||
| 1020 | + "innerUrl": "", | ||
| 1021 | + "landscape": 1, | ||
| 1022 | + "lengthTime": null, | ||
| 1023 | + "linkUrl": "", | ||
| 1024 | + "openLikes": 0, | ||
| 1025 | + "openUrl": "https://cdnjdphoto.aikan.pdnews.cn/live/record/tr_lud/634c575b859d49f7bcf65bb318c84e86_lud/5346.m3u8", | ||
| 1026 | + "pageId": "", | ||
| 1027 | + "playUrls": [ | ||
| 1028 | + | ||
| 1029 | + ], | ||
| 1030 | + "programAuth": "2004557", | ||
| 1031 | + "programId": "20000003723", | ||
| 1032 | + "programName": "", | ||
| 1033 | + "programSource": 5, | ||
| 1034 | + "programType": 2, | ||
| 1035 | + "provinceCode": "", | ||
| 1036 | + "rankingList": [ | ||
| 1037 | + | ||
| 1038 | + ], | ||
| 1039 | + "showTitleEd": "", | ||
| 1040 | + "showTitleIng": "", | ||
| 1041 | + "showTitleNo": "", | ||
| 1042 | + "sortValue": null, | ||
| 1043 | + "startTime": "2023-12-18 12:00:38", | ||
| 1044 | + "subType": "", | ||
| 1045 | + "subtitle": "", | ||
| 1046 | + "title": "医点就通 | 如何正确测量血压,你做对了吗?", | ||
| 1047 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/ce56e30873a64eb78659959519238d0a.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 1048 | + }, | ||
| 1049 | + { | ||
| 1050 | + "cityCode": "", | ||
| 1051 | + "coverSize": "1920*1080", | ||
| 1052 | + "coverType": 1, | ||
| 1053 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231217/image/live/6f884c0982114592808ee3d7c25fb4d1.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1054 | + "description": "乡村篮球菁英友谊赛将于12月17-18日在海南琼海举办。届时,村BA总决赛MVP李衍均、得分王吴中庆、栏板王、助攻王马鹏,沙溪跑车刘炜祺、山东飞人申守法,宁夏三营杨家三兄弟等村BA顶流将悉数登场;村BA功勋教练赵仁斌、姬晓现场指导;更有中国篮球名宿、96黄金一代球员巩晓彬,北京篮球名宿“玉面少侠”焦健,现身赛场,为乡村篮球代言。三分大战、技巧大战、扣篮大战也将精彩上演。", | ||
| 1055 | + "districtCode": "", | ||
| 1056 | + "endTime": "", | ||
| 1057 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231217/image/live/6f884c0982114592808ee3d7c25fb4d1.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1058 | + "heatValue": "", | ||
| 1059 | + "innerUrl": "", | ||
| 1060 | + "landscape": 1, | ||
| 1061 | + "lengthTime": null, | ||
| 1062 | + "linkUrl": "", | ||
| 1063 | + "openLikes": 0, | ||
| 1064 | + "openUrl": "", | ||
| 1065 | + "pageId": "", | ||
| 1066 | + "playUrls": [ | ||
| 1067 | + | ||
| 1068 | + ], | ||
| 1069 | + "programAuth": "2004557", | ||
| 1070 | + "programId": "20000003734", | ||
| 1071 | + "programName": "", | ||
| 1072 | + "programSource": 5, | ||
| 1073 | + "programType": 2, | ||
| 1074 | + "provinceCode": "", | ||
| 1075 | + "rankingList": [ | ||
| 1076 | + | ||
| 1077 | + ], | ||
| 1078 | + "showTitleEd": "", | ||
| 1079 | + "showTitleIng": "", | ||
| 1080 | + "showTitleNo": "", | ||
| 1081 | + "sortValue": null, | ||
| 1082 | + "startTime": "2023-12-17 19:07:00", | ||
| 1083 | + "subType": "", | ||
| 1084 | + "subtitle": "", | ||
| 1085 | + "title": "上视界 看村赛|星耀村BA 激情菁英赛", | ||
| 1086 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231217/image/live/405bb1303e2640d3931780122da0c9e3.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 1087 | + }, | ||
| 1088 | + { | ||
| 1089 | + "cityCode": "", | ||
| 1090 | + "coverSize": "1280*720", | ||
| 1091 | + "coverType": 1, | ||
| 1092 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231214/image/live/0a1f327943984c02abfd335dbca80d03.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1093 | + "description": "为深入贯彻党的二十大精神,落实《全面加强和改进新时代学生心理健康工作专项行动计划(2023-2025)和江苏省教育厅“润心”行动工作要求,健全社会心理服务体系体制机制的建设,提升社会公众心理健康意识和素养,充分发挥以乐润心,以心育德的重要功能。南京审计大学心理健康教育教学部与浦口区社会心理健康服务指导中心联合举办“以乐润心 因爱同行”音乐会。", | ||
| 1094 | + "districtCode": "", | ||
| 1095 | + "endTime": "", | ||
| 1096 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231214/image/live/0a1f327943984c02abfd335dbca80d03.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1097 | + "heatValue": "", | ||
| 1098 | + "innerUrl": "", | ||
| 1099 | + "landscape": 1, | ||
| 1100 | + "lengthTime": null, | ||
| 1101 | + "linkUrl": "", | ||
| 1102 | + "openLikes": 0, | ||
| 1103 | + "openUrl": "", | ||
| 1104 | + "pageId": "", | ||
| 1105 | + "playUrls": [ | ||
| 1106 | + | ||
| 1107 | + ], | ||
| 1108 | + "programAuth": "2004557", | ||
| 1109 | + "programId": "20000003662", | ||
| 1110 | + "programName": "", | ||
| 1111 | + "programSource": 5, | ||
| 1112 | + "programType": 2, | ||
| 1113 | + "provinceCode": "", | ||
| 1114 | + "rankingList": [ | ||
| 1115 | + | ||
| 1116 | + ], | ||
| 1117 | + "showTitleEd": "", | ||
| 1118 | + "showTitleIng": "", | ||
| 1119 | + "showTitleNo": "", | ||
| 1120 | + "sortValue": null, | ||
| 1121 | + "startTime": "2023-12-17 19:03:18", | ||
| 1122 | + "subType": "", | ||
| 1123 | + "subtitle": "", | ||
| 1124 | + "title": "《以乐润心 音爱同行 ——新年音乐会》", | ||
| 1125 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231214/image/live/66d2363592d5462b89972f558a97debe.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 1126 | + }, | ||
| 1127 | + { | ||
| 1128 | + "cityCode": "", | ||
| 1129 | + "coverSize": "942*530", | ||
| 1130 | + "coverType": 1, | ||
| 1131 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231217/image/live/f59c2e841a9042819c052f142d2e6fa6.jpeg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1132 | + "description": "“音为梦响 乐动华章”哈工大第二十五届校园十大歌手大赛决赛,27首歌曲唱响冬日的哈工大,邀你共同见证本届十大歌手的荣耀时刻。", | ||
| 1133 | + "districtCode": "", | ||
| 1134 | + "endTime": "", | ||
| 1135 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231217/image/live/f59c2e841a9042819c052f142d2e6fa6.jpeg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1136 | + "heatValue": "", | ||
| 1137 | + "innerUrl": "", | ||
| 1138 | + "landscape": 1, | ||
| 1139 | + "lengthTime": null, | ||
| 1140 | + "linkUrl": "", | ||
| 1141 | + "openLikes": 0, | ||
| 1142 | + "openUrl": "", | ||
| 1143 | + "pageId": "", | ||
| 1144 | + "playUrls": [ | ||
| 1145 | + | ||
| 1146 | + ], | ||
| 1147 | + "programAuth": "2004557", | ||
| 1148 | + "programId": "20000003730", | ||
| 1149 | + "programName": "", | ||
| 1150 | + "programSource": 5, | ||
| 1151 | + "programType": 2, | ||
| 1152 | + "provinceCode": "", | ||
| 1153 | + "rankingList": [ | ||
| 1154 | + | ||
| 1155 | + ], | ||
| 1156 | + "showTitleEd": "", | ||
| 1157 | + "showTitleIng": "", | ||
| 1158 | + "showTitleNo": "", | ||
| 1159 | + "sortValue": null, | ||
| 1160 | + "startTime": "2023-12-17 18:56:00", | ||
| 1161 | + "subType": "", | ||
| 1162 | + "subtitle": "", | ||
| 1163 | + "title": "“音为梦响 乐动华章”哈工大第二十五届校园十大歌手大赛决赛", | ||
| 1164 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231217/image/live/2cae8628c9e64aa8850b48c28f7aeb73.jpeg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 1165 | + }, | ||
| 1166 | + { | ||
| 1167 | + "cityCode": "", | ||
| 1168 | + "coverSize": "1920*1080", | ||
| 1169 | + "coverType": 1, | ||
| 1170 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/4d307ca9d99e41cfb617404d669ef9be.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1171 | + "description": "纺织在我国有着几千年的历史,作为传统产业具有重要地位。经过多年积累,我国逐步从纺织业大国成长为全球纺织业强国。从一根纤维到最后的成衣,国内已经形成了全球最完备的纺织产业链。纺织行业是国民经济与社会发展的支柱产业,是解决民生与美化生活的基础产业,是国际合作与融合发展的优势产业,正朝着“科技、时尚、绿色”方向不断发展。", | ||
| 1172 | + "districtCode": "", | ||
| 1173 | + "endTime": "", | ||
| 1174 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/4d307ca9d99e41cfb617404d669ef9be.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1175 | + "heatValue": "", | ||
| 1176 | + "innerUrl": "", | ||
| 1177 | + "landscape": 1, | ||
| 1178 | + "lengthTime": null, | ||
| 1179 | + "linkUrl": "", | ||
| 1180 | + "openLikes": 0, | ||
| 1181 | + "openUrl": "https://cdnjdphoto.aikan.pdnews.cn/live/record/tr_lud/f9ec8eda59174f4b8dc4d074ca8fd43d_lud/5327.m3u8", | ||
| 1182 | + "pageId": "", | ||
| 1183 | + "playUrls": [ | ||
| 1184 | + | ||
| 1185 | + ], | ||
| 1186 | + "programAuth": "2004557", | ||
| 1187 | + "programId": "20000003710", | ||
| 1188 | + "programName": "", | ||
| 1189 | + "programSource": 5, | ||
| 1190 | + "programType": 2, | ||
| 1191 | + "provinceCode": "", | ||
| 1192 | + "rankingList": [ | ||
| 1193 | + | ||
| 1194 | + ], | ||
| 1195 | + "showTitleEd": "", | ||
| 1196 | + "showTitleIng": "", | ||
| 1197 | + "showTitleNo": "", | ||
| 1198 | + "sortValue": null, | ||
| 1199 | + "startTime": "2023-12-17 19:00:00", | ||
| 1200 | + "subType": "", | ||
| 1201 | + "subtitle": "", | ||
| 1202 | + "title": "我的青春主场|教育部公益直播课:纺织行业发展趋势和职业机会", | ||
| 1203 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231215/image/live/69f282dc5c524c60958728cea05c25cd.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 1204 | + }, | ||
| 1205 | + { | ||
| 1206 | + "cityCode": "", | ||
| 1207 | + "coverSize": "942*530", | ||
| 1208 | + "coverType": 1, | ||
| 1209 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/3d6ce5810ded4e319e04ad92e0bb20bd.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1210 | + "description": "近期一股强寒潮将从新疆开始自西向东、自北向南影响我国。深圳气温将出现断崖式下降,周末“小冰人”登场,急冻模式开启,17日最低气温降至10℃左右。深圳广电集团第一现场将与新疆、西藏、广西派驻记者连线,展示南北气温差异;同时,记者将登上深圳梧桐山测量山顶最低气温;气象局、医院、供电部门也作出相关提醒及防寒准备措施。", | ||
| 1211 | + "districtCode": "", | ||
| 1212 | + "endTime": "", | ||
| 1213 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/3d6ce5810ded4e319e04ad92e0bb20bd.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1214 | + "heatValue": "", | ||
| 1215 | + "innerUrl": "", | ||
| 1216 | + "landscape": 1, | ||
| 1217 | + "lengthTime": null, | ||
| 1218 | + "linkUrl": "", | ||
| 1219 | + "openLikes": 0, | ||
| 1220 | + "openUrl": "", | ||
| 1221 | + "pageId": "", | ||
| 1222 | + "playUrls": [ | ||
| 1223 | + | ||
| 1224 | + ], | ||
| 1225 | + "programAuth": "2004557", | ||
| 1226 | + "programId": "20000003726", | ||
| 1227 | + "programName": "", | ||
| 1228 | + "programSource": 5, | ||
| 1229 | + "programType": 2, | ||
| 1230 | + "provinceCode": "", | ||
| 1231 | + "rankingList": [ | ||
| 1232 | + | ||
| 1233 | + ], | ||
| 1234 | + "showTitleEd": "", | ||
| 1235 | + "showTitleIng": "", | ||
| 1236 | + "showTitleNo": "", | ||
| 1237 | + "sortValue": null, | ||
| 1238 | + "startTime": "2023-12-17 08:06:38", | ||
| 1239 | + "subType": "", | ||
| 1240 | + "subtitle": "", | ||
| 1241 | + "title": "今年最强寒潮来袭 深圳或开启急冻模式", | ||
| 1242 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/50b224ea12ec4c6f93563959ed4405dd.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg" | ||
| 1243 | + } | ||
| 1244 | + ], | ||
| 1245 | + "pageId": null, | ||
| 1246 | + "posterSize": "", | ||
| 1247 | + "posterUrl": "", | ||
| 1248 | + "provinceCode": "", | ||
| 1249 | + "sortValue": 6, | ||
| 1250 | + "subType": "" | ||
| 1251 | + }, | ||
| 1252 | + { | ||
| 1253 | + "backgroundColor": "", | ||
| 1254 | + "backgroundImgUrl": "", | ||
| 1255 | + "cityCode": "", | ||
| 1256 | + "compStyle": "Masonry_Layout-01", | ||
| 1257 | + "compType": "MASONRY_LAYOUT", | ||
| 1258 | + "dataSourceRequest": [ | ||
| 1259 | + | ||
| 1260 | + ], | ||
| 1261 | + "districtCode": "", | ||
| 1262 | + "extraData": "", | ||
| 1263 | + "hasAdInfo": 0, | ||
| 1264 | + "id": 12, | ||
| 1265 | + "imgSize": "", | ||
| 1266 | + "innerUrl": "", | ||
| 1267 | + "linkUrl": "", | ||
| 1268 | + "meddleDataList": [ | ||
| 1269 | + | ||
| 1270 | + ], | ||
| 1271 | + "name": "为你推荐feed", | ||
| 1272 | + "objectId": "", | ||
| 1273 | + "objectTitle": "", | ||
| 1274 | + "objectType": null, | ||
| 1275 | + "operDataList": [ | ||
| 1276 | + { | ||
| 1277 | + "cityCode": "", | ||
| 1278 | + "coverSize": "1920*1080", | ||
| 1279 | + "coverType": 1, | ||
| 1280 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/20f07cb26ccc41ed8c5ca9ffd88ff5e3.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1281 | + "description": "随着生活水平的提高和女性乳腺疾病宣传的深入,很多女性朋友不再是“发现疾病后才去就医”,而是越来越重视乳腺的定期检查,而钼靶检查也因为其简便快速等优点被多数人选择。本次直播,复旦大学附属华山医院放射科技师王益芳将针对患者常问的相关问题进行解答。", | ||
| 1282 | + "districtCode": "", | ||
| 1283 | + "endTime": "", | ||
| 1284 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/20f07cb26ccc41ed8c5ca9ffd88ff5e3.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1285 | + "heatValue": "", | ||
| 1286 | + "innerUrl": "", | ||
| 1287 | + "landscape": 1, | ||
| 1288 | + "lengthTime": null, | ||
| 1289 | + "linkUrl": "", | ||
| 1290 | + "openLikes": 0, | ||
| 1291 | + "openUrl": "https://cdnjdphoto.aikan.pdnews.cn/live/record/tr_lud/e77d054073f543ffbc8f296d4975189f_lud/5362.m3u8", | ||
| 1292 | + "pageId": "", | ||
| 1293 | + "playUrls": [ | ||
| 1294 | + | ||
| 1295 | + ], | ||
| 1296 | + "programAuth": "2004557", | ||
| 1297 | + "programId": "20000003739", | ||
| 1298 | + "programName": "", | ||
| 1299 | + "programSource": 5, | ||
| 1300 | + "programType": 2, | ||
| 1301 | + "provinceCode": "", | ||
| 1302 | + "rankingList": [ | ||
| 1303 | + | ||
| 1304 | + ], | ||
| 1305 | + "showTitleEd": "", | ||
| 1306 | + "showTitleIng": "", | ||
| 1307 | + "showTitleNo": "", | ||
| 1308 | + "sortValue": null, | ||
| 1309 | + "startTime": "2023-12-19 12:00:00", | ||
| 1310 | + "subType": "", | ||
| 1311 | + "subtitle": "", | ||
| 1312 | + "title": "医点就通 | 关爱女性健康,聊聊乳腺钼靶检查", | ||
| 1313 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/a51c97be4472435f919b9d347a69442d.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1314 | + "screenType":"1" | ||
| 1315 | + }, | ||
| 1316 | + { | ||
| 1317 | + "cityCode": "", | ||
| 1318 | + "coverSize": "600*338", | ||
| 1319 | + "coverType": 1, | ||
| 1320 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/4f67db4b26f34ac5853cb2f25b55d1d4.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1321 | + "description": "国务院新闻办公室于2023年12月18日(星期一)下午3时举行国务院政策例行吹风会,请商务部副部长盛秋平和海关总署、市场监管总局、金融监管总局有关负责人介绍加快内外贸一体化发展有关情况,并答记者问。", | ||
| 1322 | + "districtCode": "", | ||
| 1323 | + "endTime": "", | ||
| 1324 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/4f67db4b26f34ac5853cb2f25b55d1d4.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1325 | + "heatValue": "", | ||
| 1326 | + "innerUrl": "", | ||
| 1327 | + "landscape": 1, | ||
| 1328 | + "lengthTime": null, | ||
| 1329 | + "linkUrl": "", | ||
| 1330 | + "openLikes": 0, | ||
| 1331 | + "openUrl": "", | ||
| 1332 | + "pageId": "", | ||
| 1333 | + "playUrls": [ | ||
| 1334 | + | ||
| 1335 | + ], | ||
| 1336 | + "programAuth": "2004557", | ||
| 1337 | + "programId": "20000003737", | ||
| 1338 | + "programName": "", | ||
| 1339 | + "programSource": 5, | ||
| 1340 | + "programType": 2, | ||
| 1341 | + "provinceCode": "", | ||
| 1342 | + "rankingList": [ | ||
| 1343 | + | ||
| 1344 | + ], | ||
| 1345 | + "showTitleEd": "", | ||
| 1346 | + "showTitleIng": "", | ||
| 1347 | + "showTitleNo": "", | ||
| 1348 | + "sortValue": null, | ||
| 1349 | + "startTime": "2023-12-18 15:09:00", | ||
| 1350 | + "subType": "", | ||
| 1351 | + "subtitle": "", | ||
| 1352 | + "title": "国新办发布会|介绍加快内外贸一体化发展有关情况", | ||
| 1353 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231218/image/live/3160f19a3247405ea7151604fd87f0e7.jpg?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1354 | + "screenType":"2" | ||
| 1355 | + }, | ||
| 1356 | + { | ||
| 1357 | + "cityCode": "", | ||
| 1358 | + "coverSize": "942*530", | ||
| 1359 | + "coverType": 1, | ||
| 1360 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/047cc7d270114b8da8ad1b98522741a7.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1361 | + "description": "“老伴你帮我看看血压器是不是坏掉了,怎么两只手测量不一样呀?”高血压是一种常见的心血管疾病,如果血压没有得到有效控制,会增加心脑血管疾病的风险。正确测量血压对于掌握健康状况至关重要。本次直播,复旦大学附属华山医院护理部护师须倩雯将详细介绍正确的测量血压的步骤、测量前的准备工作,以及常见的测量误区。", | ||
| 1362 | + "districtCode": "", | ||
| 1363 | + "endTime": "", | ||
| 1364 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/047cc7d270114b8da8ad1b98522741a7.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1365 | + "heatValue": "", | ||
| 1366 | + "innerUrl": "", | ||
| 1367 | + "landscape": 1, | ||
| 1368 | + "lengthTime": null, | ||
| 1369 | + "linkUrl": "", | ||
| 1370 | + "openLikes": 0, | ||
| 1371 | + "openUrl": "https://cdnjdphoto.aikan.pdnews.cn/live/record/tr_lud/634c575b859d49f7bcf65bb318c84e86_lud/5346.m3u8", | ||
| 1372 | + "pageId": "", | ||
| 1373 | + "playUrls": [ | ||
| 1374 | + | ||
| 1375 | + ], | ||
| 1376 | + "programAuth": "2004557", | ||
| 1377 | + "programId": "20000003723", | ||
| 1378 | + "programName": "", | ||
| 1379 | + "programSource": 5, | ||
| 1380 | + "programType": 2, | ||
| 1381 | + "provinceCode": "", | ||
| 1382 | + "rankingList": [ | ||
| 1383 | + | ||
| 1384 | + ], | ||
| 1385 | + "showTitleEd": "", | ||
| 1386 | + "showTitleIng": "", | ||
| 1387 | + "showTitleNo": "", | ||
| 1388 | + "sortValue": null, | ||
| 1389 | + "startTime": "2023-12-18 12:00:38", | ||
| 1390 | + "subType": "", | ||
| 1391 | + "subtitle": "", | ||
| 1392 | + "title": "医点就通 | 如何正确测量血压,你做对了吗?", | ||
| 1393 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231216/image/live/ce56e30873a64eb78659959519238d0a.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1394 | + "screenType":"1" | ||
| 1395 | + }, | ||
| 1396 | + { | ||
| 1397 | + "cityCode": "", | ||
| 1398 | + "coverSize": "1280*720", | ||
| 1399 | + "coverType": 1, | ||
| 1400 | + "coverUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231214/image/live/0a1f327943984c02abfd335dbca80d03.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1401 | + "description": "为深入贯彻党的二十大精神,落实《全面加强和改进新时代学生心理健康工作专项行动计划(2023-2025)和江苏省教育厅“润心”行动工作要求,健全社会心理服务体系体制机制的建设,提升社会公众心理健康意识和素养,充分发挥以乐润心,以心育德的重要功能。南京审计大学心理健康教育教学部与浦口区社会心理健康服务指导中心联合举办“以乐润心 因爱同行”音乐会。", | ||
| 1402 | + "districtCode": "", | ||
| 1403 | + "endTime": "", | ||
| 1404 | + "hImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231214/image/live/0a1f327943984c02abfd335dbca80d03.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1405 | + "heatValue": "", | ||
| 1406 | + "innerUrl": "", | ||
| 1407 | + "landscape": 1, | ||
| 1408 | + "lengthTime": null, | ||
| 1409 | + "linkUrl": "", | ||
| 1410 | + "openLikes": 0, | ||
| 1411 | + "openUrl": "", | ||
| 1412 | + "pageId": "", | ||
| 1413 | + "playUrls": [ | ||
| 1414 | + | ||
| 1415 | + ], | ||
| 1416 | + "programAuth": "2004557", | ||
| 1417 | + "programId": "20000003662", | ||
| 1418 | + "programName": "", | ||
| 1419 | + "programSource": 5, | ||
| 1420 | + "programType": 2, | ||
| 1421 | + "provinceCode": "", | ||
| 1422 | + "rankingList": [ | ||
| 1423 | + | ||
| 1424 | + ], | ||
| 1425 | + "showTitleEd": "", | ||
| 1426 | + "showTitleIng": "", | ||
| 1427 | + "showTitleNo": "", | ||
| 1428 | + "sortValue": null, | ||
| 1429 | + "startTime": "2023-12-17 19:03:18", | ||
| 1430 | + "subType": "", | ||
| 1431 | + "subtitle": "", | ||
| 1432 | + "title": "《以乐润心 音爱同行 ——新年音乐会》", | ||
| 1433 | + "vImageUrl": "https://cdnjdphoto.aikan.pdnews.cn/sjbj-20231214/image/live/66d2363592d5462b89972f558a97debe.png?x-oss-process=image/resize,l_850/auto-orient,1/quality,q_95/format,jpg", | ||
| 1434 | + "screenType":"2" | ||
| 1435 | + } | ||
| 1436 | + ], | ||
| 1437 | + "pageId": null, | ||
| 1438 | + "posterSize": "", | ||
| 1439 | + "posterUrl": "", | ||
| 1440 | + "provinceCode": "", | ||
| 1441 | + "sortValue": 6, | ||
| 1442 | + "subType": "" | ||
| 1443 | + } | ||
| 1444 | + ], | ||
| 1445 | + "id": 5, | ||
| 1446 | + "name": "今日热点", | ||
| 1447 | + "pageId": "2" | ||
| 1448 | + }, | ||
| 1449 | + "message": "Success", | ||
| 1450 | + "meta": { | ||
| 1451 | + "md5": "yZstaJZxCm+YdypyQpuQyA==" | ||
| 1452 | + }, | ||
| 1453 | + "requestId": "", | ||
| 1454 | + "success": true, | ||
| 1455 | + "timestamp": 1702881464711 | ||
| 1456 | +} |
This diff could not be displayed because it is too large.
| 1 | +import hilog from '@ohos.hilog'; | ||
| 2 | +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium' | ||
| 3 | + | ||
| 4 | +export default function abilityTest() { | ||
| 5 | + describe('ActsAbilityTest', function () { | ||
| 6 | + // Defines a test suite. Two parameters are supported: test suite name and test suite function. | ||
| 7 | + beforeAll(function () { | ||
| 8 | + // Presets an action, which is performed only once before all test cases of the test suite start. | ||
| 9 | + // This API supports only one parameter: preset action function. | ||
| 10 | + }) | ||
| 11 | + beforeEach(function () { | ||
| 12 | + // Presets an action, which is performed before each unit test case starts. | ||
| 13 | + // The number of execution times is the same as the number of test cases defined by **it**. | ||
| 14 | + // This API supports only one parameter: preset action function. | ||
| 15 | + }) | ||
| 16 | + afterEach(function () { | ||
| 17 | + // Presets a clear action, which is performed after each unit test case ends. | ||
| 18 | + // The number of execution times is the same as the number of test cases defined by **it**. | ||
| 19 | + // This API supports only one parameter: clear action function. | ||
| 20 | + }) | ||
| 21 | + afterAll(function () { | ||
| 22 | + // Presets a clear action, which is performed after all test cases of the test suite end. | ||
| 23 | + // This API supports only one parameter: clear action function. | ||
| 24 | + }) | ||
| 25 | + it('assertContain',0, function () { | ||
| 26 | + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. | ||
| 27 | + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); | ||
| 28 | + let a = 'abc' | ||
| 29 | + let b = 'b' | ||
| 30 | + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. | ||
| 31 | + expect(a).assertContain(b) | ||
| 32 | + expect(a).assertEqual(a) | ||
| 33 | + }) | ||
| 34 | + }) | ||
| 35 | +} |
| 1 | +import UIAbility from '@ohos.app.ability.UIAbility'; | ||
| 2 | +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; | ||
| 3 | +import hilog from '@ohos.hilog'; | ||
| 4 | +import { Hypium } from '@ohos/hypium'; | ||
| 5 | +import testsuite from '../test/List.test'; | ||
| 6 | +import window from '@ohos.window'; | ||
| 7 | + | ||
| 8 | +export default class TestAbility extends UIAbility { | ||
| 9 | + onCreate(want, launchParam) { | ||
| 10 | + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onCreate'); | ||
| 11 | + hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); | ||
| 12 | + hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:'+ JSON.stringify(launchParam) ?? ''); | ||
| 13 | + var abilityDelegator: any | ||
| 14 | + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() | ||
| 15 | + var abilityDelegatorArguments: any | ||
| 16 | + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() | ||
| 17 | + hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); | ||
| 18 | + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + onDestroy() { | ||
| 22 | + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onDestroy'); | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + onWindowStageCreate(windowStage: window.WindowStage) { | ||
| 26 | + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageCreate'); | ||
| 27 | + windowStage.loadContent('testability/pages/Index', (err, data) => { | ||
| 28 | + if (err.code) { | ||
| 29 | + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); | ||
| 30 | + return; | ||
| 31 | + } | ||
| 32 | + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', | ||
| 33 | + JSON.stringify(data) ?? ''); | ||
| 34 | + }); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + onWindowStageDestroy() { | ||
| 38 | + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageDestroy'); | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + onForeground() { | ||
| 42 | + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onForeground'); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + onBackground() { | ||
| 46 | + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onBackground'); | ||
| 47 | + } | ||
| 48 | +} |
| 1 | +import hilog from '@ohos.hilog'; | ||
| 2 | + | ||
| 3 | +@Entry | ||
| 4 | +@Component | ||
| 5 | +struct Index { | ||
| 6 | + aboutToAppear() { | ||
| 7 | + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility index aboutToAppear'); | ||
| 8 | + } | ||
| 9 | + @State message: string = 'Hello World' | ||
| 10 | + build() { | ||
| 11 | + Row() { | ||
| 12 | + Column() { | ||
| 13 | + Text(this.message) | ||
| 14 | + .fontSize(50) | ||
| 15 | + .fontWeight(FontWeight.Bold) | ||
| 16 | + Button() { | ||
| 17 | + Text('next page') | ||
| 18 | + .fontSize(20) | ||
| 19 | + .fontWeight(FontWeight.Bold) | ||
| 20 | + }.type(ButtonType.Capsule) | ||
| 21 | + .margin({ | ||
| 22 | + top: 20 | ||
| 23 | + }) | ||
| 24 | + .backgroundColor('#0D9FFB') | ||
| 25 | + .width('35%') | ||
| 26 | + .height('5%') | ||
| 27 | + .onClick(()=>{ | ||
| 28 | + }) | ||
| 29 | + } | ||
| 30 | + .width('100%') | ||
| 31 | + } | ||
| 32 | + .height('100%') | ||
| 33 | + } | ||
| 34 | + } |
| 1 | +import hilog from '@ohos.hilog'; | ||
| 2 | +import TestRunner from '@ohos.application.testRunner'; | ||
| 3 | +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; | ||
| 4 | + | ||
| 5 | +var abilityDelegator = undefined | ||
| 6 | +var abilityDelegatorArguments = undefined | ||
| 7 | + | ||
| 8 | +async function onAbilityCreateCallback() { | ||
| 9 | + hilog.info(0x0000, 'testTag', '%{public}s', 'onAbilityCreateCallback'); | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +async function addAbilityMonitorCallback(err: any) { | ||
| 13 | + hilog.info(0x0000, 'testTag', 'addAbilityMonitorCallback : %{public}s', JSON.stringify(err) ?? ''); | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +export default class OpenHarmonyTestRunner implements TestRunner { | ||
| 17 | + constructor() { | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + onPrepare() { | ||
| 21 | + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner OnPrepare '); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + async onRun() { | ||
| 25 | + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun run'); | ||
| 26 | + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() | ||
| 27 | + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() | ||
| 28 | + var testAbilityName = abilityDelegatorArguments.bundleName + '.TestAbility' | ||
| 29 | + let lMonitor = { | ||
| 30 | + abilityName: testAbilityName, | ||
| 31 | + onAbilityCreate: onAbilityCreateCallback, | ||
| 32 | + }; | ||
| 33 | + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) | ||
| 34 | + var cmd = 'aa start -d 0 -a TestAbility' + ' -b ' + abilityDelegatorArguments.bundleName | ||
| 35 | + var debug = abilityDelegatorArguments.parameters['-D'] | ||
| 36 | + if (debug == 'true') | ||
| 37 | + { | ||
| 38 | + cmd += ' -D' | ||
| 39 | + } | ||
| 40 | + hilog.info(0x0000, 'testTag', 'cmd : %{public}s', cmd); | ||
| 41 | + abilityDelegator.executeShellCommand(cmd, | ||
| 42 | + (err: any, d: any) => { | ||
| 43 | + hilog.info(0x0000, 'testTag', 'executeShellCommand : err : %{public}s', JSON.stringify(err) ?? ''); | ||
| 44 | + hilog.info(0x0000, 'testTag', 'executeShellCommand : data : %{public}s', d.stdResult ?? ''); | ||
| 45 | + hilog.info(0x0000, 'testTag', 'executeShellCommand : data : %{public}s', d.exitCode ?? ''); | ||
| 46 | + }) | ||
| 47 | + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun end'); | ||
| 48 | + } | ||
| 49 | +} |
| 1 | +{ | ||
| 2 | + "module": { | ||
| 3 | + "name": "entry_test", | ||
| 4 | + "type": "feature", | ||
| 5 | + "description": "$string:module_test_desc", | ||
| 6 | + "mainElement": "TestAbility", | ||
| 7 | + "deviceTypes": [ | ||
| 8 | + "phone", | ||
| 9 | + "tablet" | ||
| 10 | + ], | ||
| 11 | + "deliveryWithInstall": true, | ||
| 12 | + "installationFree": false, | ||
| 13 | + "pages": "$profile:test_pages", | ||
| 14 | + "abilities": [ | ||
| 15 | + { | ||
| 16 | + "name": "TestAbility", | ||
| 17 | + "srcEntry": "./ets/testability/TestAbility.ets", | ||
| 18 | + "description": "$string:TestAbility_desc", | ||
| 19 | + "icon": "$media:icon", | ||
| 20 | + "label": "$string:TestAbility_label", | ||
| 21 | + "exported": true, | ||
| 22 | + "startWindowIcon": "$media:icon", | ||
| 23 | + "startWindowBackground": "$color:start_window_background", | ||
| 24 | + "skills": [ | ||
| 25 | + { | ||
| 26 | + "actions": [ | ||
| 27 | + "action.system.home" | ||
| 28 | + ], | ||
| 29 | + "entities": [ | ||
| 30 | + "entity.system.home" | ||
| 31 | + ] | ||
| 32 | + } | ||
| 33 | + ] | ||
| 34 | + } | ||
| 35 | + ] | ||
| 36 | + } | ||
| 37 | +} |
6.63 KB
PeopleDaily_Harmony/hvigor/hvigor-wrapper.js
0 → 100644
This diff could not be displayed because it is too large.
PeopleDaily_Harmony/hvigorfile.ts
0 → 100644
PeopleDaily_Harmony/hvigorw
0 → 100644
| 1 | +#!/bin/bash | ||
| 2 | + | ||
| 3 | +# ---------------------------------------------------------------------------- | ||
| 4 | +# Hvigor startup script, version 1.0.0 | ||
| 5 | +# | ||
| 6 | +# Required ENV vars: | ||
| 7 | +# ------------------ | ||
| 8 | +# NODE_HOME - location of a Node home dir | ||
| 9 | +# or | ||
| 10 | +# Add /usr/local/nodejs/bin to the PATH environment variable | ||
| 11 | +# ---------------------------------------------------------------------------- | ||
| 12 | + | ||
| 13 | +HVIGOR_APP_HOME=$(dirname $(readlink -f $0)) | ||
| 14 | +HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js | ||
| 15 | +warn() { | ||
| 16 | + echo "" | ||
| 17 | + echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m" | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +error() { | ||
| 21 | + echo "" | ||
| 22 | + echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m" | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +fail() { | ||
| 26 | + error "$@" | ||
| 27 | + exit 1 | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +# Determine node to start hvigor wrapper script | ||
| 31 | +if [ -n "${NODE_HOME}" ];then | ||
| 32 | + EXECUTABLE_NODE="${NODE_HOME}/bin/node" | ||
| 33 | + if [ ! -x "$EXECUTABLE_NODE" ];then | ||
| 34 | + fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed" | ||
| 35 | + fi | ||
| 36 | +else | ||
| 37 | + EXECUTABLE_NODE="node" | ||
| 38 | + which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path" | ||
| 39 | +fi | ||
| 40 | + | ||
| 41 | +# Check hvigor wrapper script | ||
| 42 | +if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then | ||
| 43 | + fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}" | ||
| 44 | +fi | ||
| 45 | + | ||
| 46 | +# start hvigor-wrapper script | ||
| 47 | +exec "${EXECUTABLE_NODE}" \ | ||
| 48 | + "${HVIGOR_WRAPPER_SCRIPT}" "$@" |
PeopleDaily_Harmony/hvigorw.bat
0 → 100644
| 1 | +@if "%DEBUG%" == "" @echo off | ||
| 2 | +@rem ########################################################################## | ||
| 3 | +@rem | ||
| 4 | +@rem Hvigor startup script for Windows | ||
| 5 | +@rem | ||
| 6 | +@rem ########################################################################## | ||
| 7 | + | ||
| 8 | +@rem Set local scope for the variables with windows NT shell | ||
| 9 | +if "%OS%"=="Windows_NT" setlocal | ||
| 10 | + | ||
| 11 | +set DIRNAME=%~dp0 | ||
| 12 | +if "%DIRNAME%" == "" set DIRNAME=. | ||
| 13 | +set APP_BASE_NAME=%~n0 | ||
| 14 | +set APP_HOME=%DIRNAME% | ||
| 15 | + | ||
| 16 | +@rem Resolve any "." and ".." in APP_HOME to make it shorter. | ||
| 17 | +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi | ||
| 18 | + | ||
| 19 | +set WRAPPER_MODULE_PATH=%APP_HOME%\hvigor\hvigor-wrapper.js | ||
| 20 | +set NODE_EXE=node.exe | ||
| 21 | + | ||
| 22 | +goto start | ||
| 23 | + | ||
| 24 | +:start | ||
| 25 | +@rem Find node.exe | ||
| 26 | +if defined NODE_HOME goto findNodeFromNodeHome | ||
| 27 | + | ||
| 28 | +%NODE_EXE% --version >NUL 2>&1 | ||
| 29 | +if "%ERRORLEVEL%" == "0" goto execute | ||
| 30 | + | ||
| 31 | +echo. | ||
| 32 | +echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. | ||
| 33 | +echo. | ||
| 34 | +echo Please set the NODE_HOME variable in your environment to match the | ||
| 35 | +echo location of your NodeJs installation. | ||
| 36 | + | ||
| 37 | +goto fail | ||
| 38 | + | ||
| 39 | +:findNodeFromNodeHome | ||
| 40 | +set NODE_HOME=%NODE_HOME:"=% | ||
| 41 | +set NODE_EXE_PATH=%NODE_HOME%/%NODE_EXE% | ||
| 42 | + | ||
| 43 | +if exist "%NODE_EXE_PATH%" goto execute | ||
| 44 | +echo. | ||
| 45 | +echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. | ||
| 46 | +echo. | ||
| 47 | +echo Please set the NODE_HOME variable in your environment to match the | ||
| 48 | +echo location of your NodeJs installation. | ||
| 49 | + | ||
| 50 | +goto fail | ||
| 51 | + | ||
| 52 | +:execute | ||
| 53 | +@rem Execute hvigor | ||
| 54 | +"%NODE_EXE%" %WRAPPER_MODULE_PATH% %* | ||
| 55 | + | ||
| 56 | +if "%ERRORLEVEL%" == "0" goto hvigorwEnd | ||
| 57 | + | ||
| 58 | +:fail | ||
| 59 | +exit /b 1 | ||
| 60 | + | ||
| 61 | +:hvigorwEnd | ||
| 62 | +if "%OS%" == "Windows_NT" endlocal | ||
| 63 | + | ||
| 64 | +:end |
PeopleDaily_Harmony/oh-package-lock.json5
0 → 100644
| 1 | +{ | ||
| 2 | + "lockfileVersion": 1, | ||
| 3 | + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", | ||
| 4 | + "specifiers": { | ||
| 5 | + "@ohos/hypium@1.0.6": "@ohos/hypium@1.0.6" | ||
| 6 | + }, | ||
| 7 | + "packages": { | ||
| 8 | + "@ohos/hypium@1.0.6": { | ||
| 9 | + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hypium/-/hypium-1.0.6.tgz", | ||
| 10 | + "integrity": "sha512-bb3DWeWhYrFqj9mPFV3yZQpkm36kbcK+YYaeY9g292QKSjOdmhEIQR2ULPvyMsgSR4usOBf5nnYrDmaCCXirgQ==" | ||
| 11 | + } | ||
| 12 | + } | ||
| 13 | +} |
PeopleDaily_Harmony/oh-package.json5
0 → 100644
PeopleDaily_Harmony/wdComponent/.gitignore
0 → 100644
| 1 | + | ||
| 2 | +export { PageViewModel } from "./viewmodel/PageViewModel" | ||
| 3 | + | ||
| 4 | +export { EmptyComponent } from "./components/EmptyComponent" | ||
| 5 | + | ||
| 6 | +export { ErrorComponent } from "./components/ErrorComponent" | ||
| 7 | + | ||
| 8 | +export { LoadingComponent } from "./components/LoadingComponent" | ||
| 9 | + | ||
| 10 | +export { PageComponent } from "./components/PageComponent" | ||
| 11 | + | ||
| 12 | +export { BottomNavigationComponent } from "./components/BottomNavigationComponent" | ||
| 13 | + | ||
| 14 | +export { TopNavigationComponent } from "./components/TopNavigationComponent" | ||
| 15 | + | ||
| 16 | +export { LabelComponent } from "./components/LabelComponent" |
| 1 | +import { BottomNavi, CommonConstants } from 'wdConstant'; | ||
| 2 | +import { LazyDataSource, Logger } from 'wdKit'; | ||
| 3 | +import { TopNavigationComponent } from './TopNavigationComponent'; | ||
| 4 | +import { PageComponent } from './PageComponent'; | ||
| 5 | +import { BottomNavDTO } from '../repository/bean/BottomNavDTO'; | ||
| 6 | +import { PageViewModel } from '../Index'; | ||
| 7 | + | ||
| 8 | +const TAG = 'BottomNavigationComponent'; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 底部页签导航栏/底导 | ||
| 12 | + */ | ||
| 13 | +@Component | ||
| 14 | +export struct BottomNavigationComponent { | ||
| 15 | + // 底导/顶导全部数据 | ||
| 16 | + @State @Watch('onBottomNavigationDataUpdated') bottomNavList: BottomNavDTO[] = [] | ||
| 17 | + // 底导当前选中/焦点下标 | ||
| 18 | + @Provide currentNavIndex: number = BottomNavi.NEWS; | ||
| 19 | + // 底导TabsController | ||
| 20 | + private navController: TabsController = new TabsController(); | ||
| 21 | + readonly ASPECT_RATIO_1_1: number = 1 / 1; // 底导图片宽高比 | ||
| 22 | + /** | ||
| 23 | + * Component opacity value: 1. | ||
| 24 | + */ | ||
| 25 | + readonly FULL_OPACITY: number = 1; | ||
| 26 | + /** | ||
| 27 | + * Component opacity value: 0.6. | ||
| 28 | + */ | ||
| 29 | + readonly SIXTY_OPACITY: number = 0.6; | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + async aboutToAppear() { | ||
| 33 | + Logger.info(TAG, `aboutToAppear currentNavIndex: ${this.currentNavIndex}`); | ||
| 34 | + let bottomNav = await PageViewModel.getBottomNavData(getContext(this)) | ||
| 35 | + if (bottomNav) { | ||
| 36 | + Logger.info(TAG, `aboutToAppear, bottomNav.length: ${bottomNav.length}`); | ||
| 37 | + this.bottomNavList = bottomNav | ||
| 38 | + } | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + aboutToDisappear() { | ||
| 42 | + Logger.info(TAG, `aboutToDisappear, this.currentNavIndex: ${this.currentNavIndex}`); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + build() { | ||
| 46 | + Tabs({ barPosition: BarPosition.End, index: this.currentNavIndex, controller: this.navController }) { | ||
| 47 | + ForEach(this.bottomNavList, (navItem: BottomNavDTO, index: number) => { | ||
| 48 | + TabContent() { | ||
| 49 | + Column() { | ||
| 50 | + if (navItem.topNavChannelList && navItem.topNavChannelList.length == 0 && navItem.name == '我的') { | ||
| 51 | + PageComponent({ compList: new LazyDataSource() }) // todo:我的页面组件数据列表 | ||
| 52 | + } else { | ||
| 53 | + TopNavigationComponent({ topNavList: navItem.topNavChannelList }) | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | + .tabBar(this.tabBarBuilder(navItem, index)) | ||
| 58 | + }); | ||
| 59 | + } | ||
| 60 | + .barHeight($r('app.float.bottom_navigation_barHeight')) | ||
| 61 | + .barMode(BarMode.Fixed) | ||
| 62 | + .onChange((index: number) => { | ||
| 63 | + Logger.info(TAG, `onChange, index: ${index}`); | ||
| 64 | + this.currentNavIndex = index; | ||
| 65 | + // this.onBottomNavigationIndexChange() | ||
| 66 | + }) | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @Builder | ||
| 70 | + tabBarBuilder(navItem: BottomNavDTO, index: number) { | ||
| 71 | + Stack({ alignContent: Alignment.Bottom }) { | ||
| 72 | + Image(this.currentNavIndex === index ? navItem.iconC : navItem.icon) | ||
| 73 | + .height(CommonConstants.FULL_PARENT) | ||
| 74 | + .padding({ bottom: 15, left: 10, right: 10, top: 2 }) | ||
| 75 | + .aspectRatio(this.ASPECT_RATIO_1_1) | ||
| 76 | + | ||
| 77 | + Text(navItem.name) | ||
| 78 | + .margin({ bottom: $r('app.float.bottom_navigation_margin_bottom') }) | ||
| 79 | + .fontWeight(this.currentNavIndex === index ? FontWeight.Bold : FontWeight.Normal) | ||
| 80 | + .textAlign(TextAlign.Center) | ||
| 81 | + .fontSize($r('app.float.font_size_10')) | ||
| 82 | + .fontColor(this.currentNavIndex === index ? Color.Red : Color.Gray) | ||
| 83 | + .opacity(this.currentNavIndex === index ? this.FULL_OPACITY : this.SIXTY_OPACITY) | ||
| 84 | + } | ||
| 85 | + .height($r('app.float.bottom_navigation_barHeight')) | ||
| 86 | + .hoverEffect(HoverEffect.Highlight) | ||
| 87 | + // .justifyContent(FlexAlign.Center) | ||
| 88 | + // .onClick(() => { | ||
| 89 | + // Logger.info(TAG, `onClick, index: ${index}`); | ||
| 90 | + // this.currentNavIndex = index ?? 0; | ||
| 91 | + // this.navController.changeIndex(this.currentNavIndex); | ||
| 92 | + // }) | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + // 底导切换函数 | ||
| 96 | + onBottomNavigationIndexChange() { | ||
| 97 | + Logger.info(TAG, `onBottomNavigationIndexChange this.currentNavIndex: ${this.currentNavIndex}`); | ||
| 98 | + // 请求顶导数据(参数): | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + onBottomNavigationDataUpdated() { | ||
| 102 | + // Logger.info(TAG, `onBottomNavigationDataUpdated currentNavIndex: ${this.currentNavIndex},length:${this.bottomNavItemList.length}`); | ||
| 103 | + this.onBottomNavigationIndexChange() | ||
| 104 | + } | ||
| 105 | +} |
| 1 | +import { CommonConstants } from 'wdConstant'; | ||
| 2 | +import { Logger } from 'wdKit'; | ||
| 3 | + | ||
| 4 | +const TAG = 'EmptyComponent'; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * 空数据/无数据 | ||
| 8 | + */ | ||
| 9 | +@Component | ||
| 10 | +export struct EmptyComponent { | ||
| 11 | + // private emptySize: SizeOptions = {}; | ||
| 12 | + @State emptyWidth: string | number = CommonConstants.FULL_PARENT; | ||
| 13 | + @State emptyHeight: string | number = CommonConstants.FULL_PARENT; | ||
| 14 | + /** | ||
| 15 | + * The empty image width percentage setting. | ||
| 16 | + */ | ||
| 17 | + readonly EMPTY_IMAGE_WIDTH: string = '50%'; | ||
| 18 | + /** | ||
| 19 | + * The empty image height percentage setting. | ||
| 20 | + */ | ||
| 21 | + readonly EMPTY_IMAGE_HEIGHT: string = '30%'; | ||
| 22 | + /** | ||
| 23 | + * The empty data text component margin top. | ||
| 24 | + */ | ||
| 25 | + readonly EMPTY_TIP_TEXT_MARGIN_TOP: string = '2%'; | ||
| 26 | + /** | ||
| 27 | + * The empty data text opacity. | ||
| 28 | + */ | ||
| 29 | + readonly TEXT_OPACITY: number = 0.4; | ||
| 30 | + | ||
| 31 | + build() { | ||
| 32 | + this.noProgrammeData(); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * 无数据,空白view组件 | ||
| 37 | + */ | ||
| 38 | + @Builder | ||
| 39 | + noProgrammeData() { | ||
| 40 | + Column() { | ||
| 41 | + // Image($r('app.media.icon_no_content')) | ||
| 42 | + // .width(this.EMPTY_IMAGE_WIDTH) | ||
| 43 | + // .height(this.EMPTY_IMAGE_HEIGHT) | ||
| 44 | + // .objectFit(ImageFit.Contain) | ||
| 45 | + // // .border({ width: 1, color: Color.Red, radius: 6 }) | ||
| 46 | + | ||
| 47 | + Text(this.buildNoDataTip()) | ||
| 48 | + .fontSize($r('app.float.normal_text_size')) | ||
| 49 | + .fontColor('#B2B2B2') | ||
| 50 | + .fontWeight(FontWeight.Normal) | ||
| 51 | + .opacity(this.TEXT_OPACITY) | ||
| 52 | + .margin({ top: this.EMPTY_TIP_TEXT_MARGIN_TOP }) | ||
| 53 | + .onClick((event: ClickEvent) => { | ||
| 54 | + Logger.info(TAG, `noProgrammeData onClick event?.source: ${event.source}`); | ||
| 55 | + }) | ||
| 56 | + } | ||
| 57 | + .justifyContent(FlexAlign.Center) | ||
| 58 | + .width(this.emptyWidth) | ||
| 59 | + .height(this.emptyHeight) | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + buildNoDataTip(): Resource | string { | ||
| 63 | + Logger.info(TAG, "buildNoDataTip"); | ||
| 64 | + return $r('app.string.load_net_data_none') | ||
| 65 | + } | ||
| 66 | +} |
| 1 | +import { CommonConstants } from 'wdConstant'; | ||
| 2 | +import { Logger } from 'wdKit'; | ||
| 3 | + | ||
| 4 | +const TAG = 'ErrorComponent'; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * failed失败/出错页面 | ||
| 8 | + */ | ||
| 9 | +@Component | ||
| 10 | +export struct ErrorComponent { | ||
| 11 | + // private emptySize: SizeOptions = {}; | ||
| 12 | + @State emptyWidth: string | number = CommonConstants.FULL_PARENT; | ||
| 13 | + @State emptyHeight: string | number = CommonConstants.FULL_PARENT; | ||
| 14 | + /** | ||
| 15 | + * The empty image width percentage setting. | ||
| 16 | + */ | ||
| 17 | + readonly EMPTY_IMAGE_WIDTH: string = '50%'; | ||
| 18 | + /** | ||
| 19 | + * The empty image height percentage setting. | ||
| 20 | + */ | ||
| 21 | + readonly EMPTY_IMAGE_HEIGHT: string = '30%'; | ||
| 22 | + /** | ||
| 23 | + * The empty data text component margin top. | ||
| 24 | + */ | ||
| 25 | + readonly EMPTY_TIP_TEXT_MARGIN_TOP: string = '2%'; | ||
| 26 | + /** | ||
| 27 | + * The empty data text opacity. | ||
| 28 | + */ | ||
| 29 | + readonly TEXT_OPACITY: number = 0.4; | ||
| 30 | + | ||
| 31 | + build() { | ||
| 32 | + this.errorView(); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * 失败view | ||
| 37 | + */ | ||
| 38 | + @Builder | ||
| 39 | + errorView() { | ||
| 40 | + Column() { | ||
| 41 | + // Image($r('app.media.ic_no_data')) | ||
| 42 | + // .width(this.EMPTY_IMAGE_WIDTH) | ||
| 43 | + // .height(this.EMPTY_IMAGE_HEIGHT) | ||
| 44 | + // .objectFit(ImageFit.Contain) | ||
| 45 | + // // .border({ width: 1, color: Color.Red, radius: 6 }) | ||
| 46 | + | ||
| 47 | + Text(this.buildFailedTip()) | ||
| 48 | + .fontSize($r('app.float.normal_text_size')) | ||
| 49 | + .fontColor(Color.Black) | ||
| 50 | + .fontWeight(FontWeight.Normal) | ||
| 51 | + .opacity(this.TEXT_OPACITY) | ||
| 52 | + .margin({ top: this.EMPTY_TIP_TEXT_MARGIN_TOP }) | ||
| 53 | + .onClick((event: ClickEvent) => { | ||
| 54 | + Logger.info(TAG, `errorView onClick event.source: ${event.source}`); | ||
| 55 | + }) | ||
| 56 | + } | ||
| 57 | + .justifyContent(FlexAlign.Center) | ||
| 58 | + .width(this.emptyWidth) | ||
| 59 | + .height(this.emptyHeight) | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + buildFailedTip(): Resource | string { | ||
| 63 | + Logger.info(TAG, "buildFailedTip"); | ||
| 64 | + return $r('app.string.load_net_data_failed') | ||
| 65 | + } | ||
| 66 | +} |
| 1 | +import { CommonConstants } from 'wdConstant'; | ||
| 2 | +import { CompDTO } from '../repository/bean/CompDTO'; | ||
| 3 | +import { CompUtils } from '../utils/CompUtils'; | ||
| 4 | + | ||
| 5 | +const TAG = 'LabelComponent'; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * 标题/标签组件(暂时仅展示主标题,不展示子标题) | ||
| 9 | + * Label-03 | ||
| 10 | + * 重磅推荐/精选/电视剧/电影/综艺/短剧/更多>/ | ||
| 11 | + */ | ||
| 12 | +@Entry | ||
| 13 | +@Component | ||
| 14 | +export struct LabelComponent { | ||
| 15 | + @State compDTO: CompDTO = {} as CompDTO | ||
| 16 | + | ||
| 17 | + build() { | ||
| 18 | + Row() { | ||
| 19 | + Text(CompUtils.getLabelTitle(this.compDTO.extraData)) | ||
| 20 | + .width(CommonConstants.FULL_PARENT) | ||
| 21 | + .padding({ | ||
| 22 | + left: $r('app.float.main_margin'), | ||
| 23 | + right: $r('app.float.main_margin'), | ||
| 24 | + top: $r('app.float.label_margin_top'), | ||
| 25 | + bottom: $r('app.float.label_margin_bottom') | ||
| 26 | + }) | ||
| 27 | + .fontSize($r('app.float.normal_text_size')) | ||
| 28 | + .fontWeight(FontWeight.Bold) | ||
| 29 | + .maxLines(1)// .backgroundColor(Color.Yellow) | ||
| 30 | + .textOverflow({ overflow: TextOverflow.Ellipsis }) // 超出的部分显示省略号。 | ||
| 31 | + } | ||
| 32 | + .width(CommonConstants.FULL_PARENT) | ||
| 33 | + .justifyContent(FlexAlign.Start) | ||
| 34 | + } | ||
| 35 | +} |
| 1 | +import { CommonConstants } from 'wdConstant'; | ||
| 2 | +import { Logger } from 'wdKit'; | ||
| 3 | + | ||
| 4 | +const TAG = 'LoadingComponent'; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * Loading/网络数据加载中 | ||
| 8 | + */ | ||
| 9 | +@Component | ||
| 10 | +export struct LoadingComponent { | ||
| 11 | + @State emptyWidth: string | number = CommonConstants.FULL_PARENT; | ||
| 12 | + @State emptyHeight: string | number = CommonConstants.FULL_PARENT; | ||
| 13 | + /** | ||
| 14 | + * The empty image width percentage setting. | ||
| 15 | + */ | ||
| 16 | + readonly EMPTY_IMAGE_WIDTH: string = '50%'; | ||
| 17 | + /** | ||
| 18 | + * The empty image height percentage setting. | ||
| 19 | + */ | ||
| 20 | + readonly EMPTY_IMAGE_HEIGHT: string = '30%'; | ||
| 21 | + /** | ||
| 22 | + * The empty data text component margin top. | ||
| 23 | + */ | ||
| 24 | + readonly EMPTY_TIP_TEXT_MARGIN_TOP: string = '2%'; | ||
| 25 | + /** | ||
| 26 | + * The empty data text opacity. | ||
| 27 | + */ | ||
| 28 | + readonly TEXT_OPACITY: number = 0.4; | ||
| 29 | + | ||
| 30 | + build() { | ||
| 31 | + this.loadingView(); | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + /** | ||
| 35 | + * loading | ||
| 36 | + */ | ||
| 37 | + @Builder | ||
| 38 | + loadingView() { | ||
| 39 | + Column() { | ||
| 40 | + // Image($r('app.media.ic_no_data')) | ||
| 41 | + // .width(this.EMPTY_IMAGE_WIDTH) | ||
| 42 | + // .height(this.EMPTY_IMAGE_HEIGHT) | ||
| 43 | + // .objectFit(ImageFit.Contain) | ||
| 44 | + // .border({ width: 1, color: Color.Red, radius: 6 }) | ||
| 45 | + | ||
| 46 | + Text(this.buildLoadingTip()) | ||
| 47 | + .fontSize($r('app.float.normal_text_size')) | ||
| 48 | + .fontColor(Color.Black) | ||
| 49 | + .fontWeight(FontWeight.Normal) | ||
| 50 | + .opacity(this.TEXT_OPACITY) | ||
| 51 | + .margin({ top: this.EMPTY_TIP_TEXT_MARGIN_TOP }) | ||
| 52 | + .onClick((event: ClickEvent) => { | ||
| 53 | + Logger.info(TAG, `loadingView onClick event.source: ${event.source}`); | ||
| 54 | + }) | ||
| 55 | + } | ||
| 56 | + .justifyContent(FlexAlign.Center) | ||
| 57 | + .width(this.emptyWidth) | ||
| 58 | + .height(this.emptyHeight) | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + buildLoadingTip(): Resource | string { | ||
| 62 | + Logger.info(TAG, "buildLoadingTip"); | ||
| 63 | + return $r('app.string.load_net_data_loading') | ||
| 64 | + } | ||
| 65 | +} |
| 1 | +import { CommonConstants, CompStyle, ViewType } from 'wdConstant'; | ||
| 2 | +import { LazyDataSource, Logger } from 'wdKit'; | ||
| 3 | +import { CompDTO } from '../repository/bean/CompDTO'; | ||
| 4 | +import { PageViewModel } from '../viewmodel/PageViewModel'; | ||
| 5 | +import { EmptyComponent } from './EmptyComponent'; | ||
| 6 | +import { ErrorComponent } from './ErrorComponent'; | ||
| 7 | +import { LabelComponent } from './LabelComponent'; | ||
| 8 | +import { LoadingComponent } from './LoadingComponent'; | ||
| 9 | + | ||
| 10 | +const TAG = 'PageComponent'; | ||
| 11 | + | ||
| 12 | +@Component | ||
| 13 | +export struct PageComponent { | ||
| 14 | + @State viewType: number = ViewType.LOADED; | ||
| 15 | + // Group数据及子组件数据 | ||
| 16 | + @State compList: LazyDataSource<CompDTO> = new LazyDataSource(); | ||
| 17 | + @State currentTopNavSelectedIndex: number = 0; | ||
| 18 | + | ||
| 19 | + build() { | ||
| 20 | + if (this.viewType == ViewType.LOADING) { | ||
| 21 | + LoadingComponent() | ||
| 22 | + } else if (this.viewType == ViewType.ERROR) { | ||
| 23 | + ErrorComponent() | ||
| 24 | + } else if (this.viewType == ViewType.EMPTY) { | ||
| 25 | + EmptyComponent() | ||
| 26 | + } else { | ||
| 27 | + List() { | ||
| 28 | + LazyForEach(this.compList, (compDTO: CompDTO, compIndex: number) => { | ||
| 29 | + ListItem() { | ||
| 30 | + Column() { | ||
| 31 | + this.componentBuilder(compDTO, compIndex) | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | + }) | ||
| 35 | + } | ||
| 36 | + .cachedCount(5) | ||
| 37 | + .height(CommonConstants.FULL_PARENT) | ||
| 38 | + } | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @Builder | ||
| 42 | + componentBuilder(compDTO: CompDTO, compIndex: number) { | ||
| 43 | + if (compDTO.compStyle === CompStyle.Label_03) { | ||
| 44 | + LabelComponent({ compDTO: compDTO }) | ||
| 45 | + } else { | ||
| 46 | + // todo:组件未实现 / Component Not Implemented | ||
| 47 | + Text(compDTO.compStyle) | ||
| 48 | + .width(CommonConstants.FULL_PARENT) | ||
| 49 | + .padding(10) | ||
| 50 | + // .backgroundColor(Color.Brown) // 展示本页未实现的compStyle | ||
| 51 | + } | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + async aboutToAppear() { | ||
| 55 | + Logger.info(TAG, `aboutToAppear, this.pageId: ${this.viewType} this.currentTopNavSelectedIndex: ${this.currentTopNavSelectedIndex}`); | ||
| 56 | + if (this.currentTopNavSelectedIndex === 1) { // 顶导tab的第0个item是【热点】,第1个item是【推荐】 | ||
| 57 | + this.compList.replaceAll() | ||
| 58 | + let pageDto = await PageViewModel.getPageData2(getContext(this)) | ||
| 59 | + if (pageDto && pageDto.compList) { | ||
| 60 | + this.compList.push(...pageDto.compList) | ||
| 61 | + } | ||
| 62 | + } else { | ||
| 63 | + let pageDto = await PageViewModel.getPageData1(getContext(this)) | ||
| 64 | + if (pageDto && pageDto.compList) { | ||
| 65 | + this.compList.push(...pageDto.compList) | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | +} | ||
| 70 | + |
| 1 | +import { LazyDataSource, Logger } from 'wdKit'; | ||
| 2 | +import { CompDTO } from '../repository/bean/CompDTO'; | ||
| 3 | +import { TopNavDTO } from '../repository/bean/TopNavDTO'; | ||
| 4 | +import { PageComponent } from './PageComponent'; | ||
| 5 | + | ||
| 6 | +const TAG = 'TopNavigationComponent'; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 顶部页签导航栏/顶导 | ||
| 10 | + */ | ||
| 11 | +@Component | ||
| 12 | +export struct TopNavigationComponent { | ||
| 13 | + // 顶导当前选中/焦点下标 | ||
| 14 | + @State currentTopNavSelectedIndex: number = 0; | ||
| 15 | + // 顶导数据 | ||
| 16 | + @State @Watch('onTopNavigationDataUpdated') topNavList: TopNavDTO[] = [] | ||
| 17 | + @State compList: LazyDataSource<CompDTO> = new LazyDataSource(); | ||
| 18 | + readonly MAX_LINE: number = 1; | ||
| 19 | + | ||
| 20 | + build() { | ||
| 21 | + Tabs() { | ||
| 22 | + ForEach(this.topNavList, (navItem: TopNavDTO, index: number) => { | ||
| 23 | + TabContent() { | ||
| 24 | + PageComponent({ currentTopNavSelectedIndex: index }) | ||
| 25 | + } | ||
| 26 | + .tabBar(this.tabBarBuilder(navItem, index)) | ||
| 27 | + }, (navItem: TopNavDTO) => JSON.stringify(navItem)); | ||
| 28 | + } | ||
| 29 | + .barHeight($r('app.float.top_tab_bar_height')) | ||
| 30 | + .barMode(BarMode.Scrollable) | ||
| 31 | + .vertical(false) | ||
| 32 | + .onChange((index: number) => { | ||
| 33 | + Logger.info(TAG, `onChange index : ${index}`); | ||
| 34 | + this.currentTopNavSelectedIndex = index; | ||
| 35 | + }) | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + @Builder | ||
| 39 | + tabBarBuilder(item: TopNavDTO, index: number) { | ||
| 40 | + Column() { | ||
| 41 | + Text(item.name) | ||
| 42 | + .fontSize(this.currentTopNavSelectedIndex === index ? $r('app.float.selected_text_size') : $r('app.float.normal_text_size')) | ||
| 43 | + .fontWeight(this.currentTopNavSelectedIndex === index ? FontWeight.Bold : FontWeight.Normal) | ||
| 44 | + .fontColor(Color.Black) | ||
| 45 | + .padding({ top: $r('app.float.top_tab_item_padding_top') }) | ||
| 46 | + .maxLines(this.MAX_LINE) | ||
| 47 | + Divider() | ||
| 48 | + .width(16) | ||
| 49 | + .strokeWidth(2) // 分割线粗细度。 | ||
| 50 | + .padding({ top: 2 }) | ||
| 51 | + .color(Color.Red) | ||
| 52 | + .opacity(this.currentTopNavSelectedIndex === index ? 1 : 0) | ||
| 53 | + } | ||
| 54 | + .hoverEffect(HoverEffect.Highlight) | ||
| 55 | + .constraintSize({ | ||
| 56 | + minWidth: $r('app.float.top_tab_item_min_width'), | ||
| 57 | + maxWidth: $r('app.float.top_tab_item_max_width') | ||
| 58 | + }) | ||
| 59 | + // .backgroundColor(Color.Black) | ||
| 60 | + .padding({ | ||
| 61 | + left: $r('app.float.top_tab_item_padding_horizontal'), | ||
| 62 | + right: $r('app.float.top_tab_item_padding_horizontal'), | ||
| 63 | + bottom: $r('app.float.top_tab_item_padding_bottom') | ||
| 64 | + }) | ||
| 65 | + .id(`col_tabBar${index}`) | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + aboutToAppear() { | ||
| 69 | + Logger.info(TAG, `aboutToAppear this.topNavList : ${JSON.stringify(this.topNavList)}`); | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + onTopNavigationDataUpdated() { | ||
| 73 | + Logger.info(TAG, `onTopNavigationDataUpdated currentTopNavIndex: ${this.currentTopNavSelectedIndex},topNavList.length:${this.topNavList.length}`); | ||
| 74 | + } | ||
| 75 | +} |
| 1 | +import { ResponseDTO, WDHttp } from 'wdNetwork'; | ||
| 2 | +import { NavigationBodyDTO } from './bean/NavigationBodyDTO'; | ||
| 3 | +import { PageDTO } from './bean/PageDTO'; | ||
| 4 | + | ||
| 5 | +export class PageRepository { | ||
| 6 | + | ||
| 7 | + static fetchNavigationDataApi(url: string) { | ||
| 8 | + return WDHttp.get<ResponseDTO<NavigationBodyDTO>>(url) | ||
| 9 | + }; | ||
| 10 | + | ||
| 11 | + static fetchPageData(url: string) { | ||
| 12 | + return WDHttp.get<ResponseDTO<PageDTO>>(url) | ||
| 13 | + }; | ||
| 14 | +} |
| 1 | +import { TopNavDTO } from './TopNavDTO'; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 底导(包含顶导列表)数据 | ||
| 5 | + */ | ||
| 6 | +export interface BottomNavDTO { | ||
| 7 | + backgroundUrl: string; | ||
| 8 | + channelChooseActionUrl: string; | ||
| 9 | + channelChooseCColor: string; | ||
| 10 | + channelChooseColor: string; | ||
| 11 | + channelMoreColor: string; | ||
| 12 | + extraData: string; | ||
| 13 | + homePageColor: string; | ||
| 14 | + icon: string; | ||
| 15 | + iconC: string; | ||
| 16 | + id: number; | ||
| 17 | + immersiveIconCUrl: string; | ||
| 18 | + immersiveIconUrl: string; | ||
| 19 | + immersiveNameCColor: string; | ||
| 20 | + immersiveNameColor: string; | ||
| 21 | + logoUrl: string; | ||
| 22 | + morningAndEveningUrl: string; | ||
| 23 | + name: string; | ||
| 24 | + nameCColor: string; | ||
| 25 | + nameColor: string; | ||
| 26 | + nightIconCUrl: string; | ||
| 27 | + nightIconUrl: string; | ||
| 28 | + nightNameCColor: string; | ||
| 29 | + nightNameColor: string; | ||
| 30 | + noticeColor: string; | ||
| 31 | + pageId?: string; | ||
| 32 | + pageType?: string; | ||
| 33 | + searchBothColor: string; | ||
| 34 | + searchUrl: string; | ||
| 35 | + sortValue: number; | ||
| 36 | + statusBarColor: number; | ||
| 37 | + topNavChannelList: TopNavDTO[]; | ||
| 38 | + topStyle: string; | ||
| 39 | + type: string; | ||
| 40 | +} |
| 1 | +import { ContentDTO } from './ContentDTO'; | ||
| 2 | + | ||
| 3 | +export interface CompDTO { | ||
| 4 | + backgroundColor: string; | ||
| 5 | + backgroundImgUrl: string; | ||
| 6 | + cityCode: string; | ||
| 7 | + compStyle: string; | ||
| 8 | + compType: string; | ||
| 9 | + // dataSourceRequest: any[]; | ||
| 10 | + districtCode: string; | ||
| 11 | + extraData?: string; | ||
| 12 | + hasAdInfo: number; | ||
| 13 | + id: number; | ||
| 14 | + imgSize: string; | ||
| 15 | + innerUrl: string; | ||
| 16 | + linkUrl: string; | ||
| 17 | + // meddleDataList: any[]; | ||
| 18 | + name: string; | ||
| 19 | + objectId: string; // 跳转页面id? | ||
| 20 | + objectTitle: string; // comp标题 | ||
| 21 | + // objectType?: any; // 跳转类型,枚举: | ||
| 22 | + operDataList: ContentDTO[]; // 运营数据列表【正常运营配置的强运营数据,部分推荐场景的配置(自动源兜底数据)】 | ||
| 23 | + // pageId?: any; | ||
| 24 | + posterSize: string; | ||
| 25 | + posterUrl: string; | ||
| 26 | + provinceCode: string; | ||
| 27 | + sortValue: number; | ||
| 28 | + subType: string; | ||
| 29 | +} |
| 1 | +export interface ContentDTO { | ||
| 2 | + cityCode: string; | ||
| 3 | + coverSize: string; | ||
| 4 | + coverType: number; | ||
| 5 | + coverUrl: string; | ||
| 6 | + description: string; | ||
| 7 | + districtCode: string; | ||
| 8 | + endTime: string; | ||
| 9 | + hImageUrl: string; | ||
| 10 | + heatValue: string; | ||
| 11 | + innerUrl: string; | ||
| 12 | + landscape: number; | ||
| 13 | + // lengthTime?: any; | ||
| 14 | + linkUrl: string; | ||
| 15 | + openLikes: number; | ||
| 16 | + openUrl: string; | ||
| 17 | + pageId: string; | ||
| 18 | + // playUrls: any[]; | ||
| 19 | + programAuth: string; | ||
| 20 | + programId: string; | ||
| 21 | + programName: string; | ||
| 22 | + programSource: number; | ||
| 23 | + programType: number; | ||
| 24 | + provinceCode: string; | ||
| 25 | + // rankingList: any[]; | ||
| 26 | + showTitleEd: string; | ||
| 27 | + showTitleIng: string; | ||
| 28 | + showTitleNo: string; | ||
| 29 | + // sortValue?: any; | ||
| 30 | + startTime: string; | ||
| 31 | + subType: string; | ||
| 32 | + subtitle: string; | ||
| 33 | + title: string; | ||
| 34 | + vImageUrl: string; | ||
| 35 | + screenType: string; | ||
| 36 | +} |
| 1 | +import { ItemDTO } from './ItemDTO'; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 绑定到组件comp/view的数据Bean | ||
| 5 | + */ | ||
| 6 | +@Observed | ||
| 7 | +// export abstract class ItemBean<DTO> implements Mapper<DTO> { | ||
| 8 | +export abstract class ItemBean { | ||
| 9 | + action?: Action; // 事件行为 | ||
| 10 | + actionId?: string; // 点击事件id | ||
| 11 | + pics?: Pic | ||
| 12 | + // h5pics?: Pic; | ||
| 13 | + landscapeCover?: string; // 横向低分辨封面图片 | ||
| 14 | + portraitCover?: string; // 竖向低分辨封面图片 | ||
| 15 | + highLandscapeCover?: string; // 横向高分辨封面图片 | ||
| 16 | + highPortraitCover?: string; // 竖向高分辨封面图片 | ||
| 17 | + lowResolutionV34?: string; // 低清竖图(3:4比例), 取图逻辑 3:4低清竖图-->3:4高清竖图-->低分辨率竖图-->高分辨率竖图 | ||
| 18 | + highResolutionV34?: string; // 高清竖图(3:4比例), 取图逻辑 3:4高清竖图-->3:4低清竖图-->高分辨率竖图-->低分辨率竖图 | ||
| 19 | + /** | ||
| 20 | + * 是否被曝光 | ||
| 21 | + */ | ||
| 22 | + exposed: boolean; | ||
| 23 | + /** | ||
| 24 | + * 曝光位置 | ||
| 25 | + */ | ||
| 26 | + position: string; | ||
| 27 | + | ||
| 28 | + constructor(dto?: ItemDTO) { | ||
| 29 | + if (dto) { | ||
| 30 | + this.action = dto.action | ||
| 31 | + this.actionId = dto.actionId | ||
| 32 | + this.pics = dto.pics | ||
| 33 | + // this.h5pics = dto.h5pics | ||
| 34 | + | ||
| 35 | + this.landscapeCover = !dto.pics ? "" : !dto.pics.lowResolutionH ? dto.pics.highResolutionH : dto.pics.lowResolutionH; | ||
| 36 | + this.portraitCover = !dto.pics ? "" : !dto.pics.lowResolutionV ? dto.pics.highResolutionV : dto.pics.lowResolutionV; | ||
| 37 | + this.highLandscapeCover = !dto.pics ? "" : !dto.pics.highResolutionH ? dto.pics.lowResolutionH : dto.pics.highResolutionH; | ||
| 38 | + this.highPortraitCover = !dto.pics ? "" : !dto.pics.highResolutionV ? dto.pics.lowResolutionV : dto.pics.highResolutionV; | ||
| 39 | + | ||
| 40 | + this.lowResolutionV34 = !dto.pics ? "" : (!dto.pics.lowResolutionV34 ? dto.pics.lowResolutionV34 : (!dto.pics.highResolutionV34 ? dto.pics.highResolutionV34 : this.portraitCover)); | ||
| 41 | + this.highResolutionV34 = !dto.pics ? "" : (!dto.pics.highResolutionV34 ? dto.pics.highResolutionV34 : (!dto.pics.lowResolutionV34 ? dto.pics.lowResolutionV34 : this.highPortraitCover)); | ||
| 42 | + } | ||
| 43 | + this.exposed = false | ||
| 44 | + this.position = "0" | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + public setAction(action: Action): void { | ||
| 48 | + this.action = action | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public getAction(): Action { | ||
| 52 | + return this.action ?? {} as Action | ||
| 53 | + } | ||
| 54 | +} |
| 1 | +import { BottomNavDTO } from './BottomNavDTO'; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 导航Body数据 | ||
| 5 | + */ | ||
| 6 | +export interface NavigationBodyDTO { | ||
| 7 | + backgroundColor: string; | ||
| 8 | + bottomNavList: BottomNavDTO[]; | ||
| 9 | + // greyBottomNav: GreyBottomNav; | ||
| 10 | + immersiveBackgroundColor: string; | ||
| 11 | + nightBackgroundColor: string; | ||
| 12 | +} |
| 1 | +import { ExtraDTO } from './extra/ExtraDTO'; | ||
| 2 | + | ||
| 3 | +// Params定义-----------根据不同Type类型可定制指定参数 | ||
| 4 | +export interface Params { | ||
| 5 | + // 跳转目标页面ID | ||
| 6 | + pageID: string; | ||
| 7 | + path?: string; // 需要跳转/刷新的内部路径,这个路径可以是pageID,也可是compID | ||
| 8 | + url?: string; // 需要跳转到的URL地址/H5打开链接 | ||
| 9 | + extra?: ExtraDTO; // 跳转时额外需要带的参数:map<String,String> 即仅有一层的json | ||
| 10 | +} |
| 1 | +/** | ||
| 2 | + * 顶导 | ||
| 3 | + */ | ||
| 4 | +export interface TopNavDTO { | ||
| 5 | + channelId: number; | ||
| 6 | + channelStyle: number; | ||
| 7 | + channelType: number; | ||
| 8 | + defaultPermitted: number; | ||
| 9 | + delPermitted: number; | ||
| 10 | + fontCColor: string; | ||
| 11 | + fontColor: string; | ||
| 12 | + headlinesOn: number; | ||
| 13 | + homeChannel: string; | ||
| 14 | + iconCUrl: string; | ||
| 15 | + iconCUrlSize: string; | ||
| 16 | + iconUrl: string; | ||
| 17 | + iconUrlSize: string; | ||
| 18 | + localChannel: string; | ||
| 19 | + moreChannel: string; | ||
| 20 | + movePermitted: number; | ||
| 21 | + myChannel: string; | ||
| 22 | + name: string; | ||
| 23 | + num: number; | ||
| 24 | + pageId: number; | ||
| 25 | + pageType: string; | ||
| 26 | + underlineCColor: string; | ||
| 27 | +} |
| 1 | +import { ItemBean } from '../../ItemBean'; | ||
| 2 | +import { LabelDTO } from './LabelDTO'; | ||
| 3 | + | ||
| 4 | +@Observed | ||
| 5 | +export class LabelBean extends ItemBean { | ||
| 6 | + titleIconUrl?: string; | ||
| 7 | + title: string; | ||
| 8 | + | ||
| 9 | + constructor(dto: LabelDTO) { | ||
| 10 | + super(dto); | ||
| 11 | + this.titleIconUrl = dto.titleIconUrl; | ||
| 12 | + this.title = dto.title; | ||
| 13 | + } | ||
| 14 | +} |
| 1 | +import { Logger } from 'wdKit'; | ||
| 2 | +import { LabelDTO } from '../repository/bean/extra/LabelDTO'; | ||
| 3 | + | ||
| 4 | +const TAG: string = 'CompCornerUtil'; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * 与组件布局(边距/间距/圆角半径)相关的数字 | ||
| 8 | + */ | ||
| 9 | +export class CompUtils { | ||
| 10 | + /** | ||
| 11 | + * The max lines. | ||
| 12 | + */ | ||
| 13 | + public static readonly MAX_LINES_1: number = 1; | ||
| 14 | + public static readonly MAX_LINES_2: number = 2; | ||
| 15 | + public static readonly MAX_LINES_3: number = 3; | ||
| 16 | + | ||
| 17 | + /** | ||
| 18 | + * 获取Label标题 | ||
| 19 | + * | ||
| 20 | + * @param component 组件bean | ||
| 21 | + * @return Label标题 | ||
| 22 | + */ | ||
| 23 | + static getLabelTitle(extraData?: string): string { | ||
| 24 | + if (!extraData) { | ||
| 25 | + return "" | ||
| 26 | + } | ||
| 27 | + let labelDTO = JSON.parse(extraData) as LabelDTO | ||
| 28 | + if (!labelDTO) { | ||
| 29 | + Logger.info(TAG, 'getLabelTitle, labels is null'); | ||
| 30 | + return "" | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + return labelDTO.title ?? ""; | ||
| 35 | + } | ||
| 36 | +} |
| 1 | +import { Logger, ResourcesUtils } from 'wdKit'; | ||
| 2 | +import { ResponseDTO, } from 'wdNetwork'; | ||
| 3 | +import { PageRepository } from '../repository/PageRepository'; | ||
| 4 | +import http from '@ohos.net.http'; | ||
| 5 | +import { NavigationBodyDTO } from '../repository/bean/NavigationBodyDTO'; | ||
| 6 | +import { BottomNavDTO } from '../repository/bean/BottomNavDTO'; | ||
| 7 | +import { PageDTO } from '../repository/bean/PageDTO'; | ||
| 8 | + | ||
| 9 | +const TAG = 'PageViewModel'; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * 处理返回后的数据 | ||
| 13 | + */ | ||
| 14 | +export class PageViewModel { | ||
| 15 | + /** | ||
| 16 | + * get Nav Data from Resource . | ||
| 17 | + * | ||
| 18 | + * @return BottomNavBean[] Nav Data List | ||
| 19 | + */ | ||
| 20 | + static async getBottomNavData(context: Context): Promise<BottomNavDTO[]> { | ||
| 21 | + Logger.info(TAG, `getBottomNavData start`); | ||
| 22 | + let compRes: ResponseDTO<NavigationBodyDTO> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<NavigationBodyDTO>>(context, 'bottom_nav.json'); | ||
| 23 | + if (!compRes || !compRes.data || !compRes.data.bottomNavList) { | ||
| 24 | + Logger.info(TAG, `getBottomNavData compRes bottomNavList is empty`); | ||
| 25 | + return [] | ||
| 26 | + } | ||
| 27 | + Logger.info(TAG, `getBottomNavData getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`); | ||
| 28 | + return compRes.data.bottomNavList | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + static getNavData(url: string): Promise<NavigationBodyDTO> { | ||
| 32 | + return new Promise<NavigationBodyDTO>((success, error) => { | ||
| 33 | + Logger.info(TAG, `getNavData start`); | ||
| 34 | + PageRepository.fetchNavigationDataApi(url).then((navResDTO: ResponseDTO<NavigationBodyDTO>) => { | ||
| 35 | + if (!navResDTO) { | ||
| 36 | + Logger.error(TAG, 'getNavData then navResDTO is empty'); | ||
| 37 | + error('navResDTO is empty'); | ||
| 38 | + return | ||
| 39 | + } | ||
| 40 | + if (navResDTO.code != http.ResponseCode.OK) { | ||
| 41 | + Logger.error(TAG, `getNavData then code:${navResDTO.code}, message:${navResDTO.message}`); | ||
| 42 | + error('navResDTO Response Code is failure'); | ||
| 43 | + return | ||
| 44 | + } | ||
| 45 | + if (!navResDTO.data?.bottomNavList) { | ||
| 46 | + error('navResDTO list is empty'); | ||
| 47 | + return | ||
| 48 | + } | ||
| 49 | + // let navResStr = JSON.stringify(navResDTO); | ||
| 50 | + Logger.info(TAG, "getNavData then,navResDTO.timeStamp:" + navResDTO.timestamp); | ||
| 51 | + let navigationBean = navResDTO.data | ||
| 52 | + success(navigationBean); | ||
| 53 | + }).catch((err: Error) => { | ||
| 54 | + Logger.error(TAG, `fetchNavigationDataApi catch, error.name : ${err.name}, error.message:${err.message}`); | ||
| 55 | + error(err); | ||
| 56 | + }) | ||
| 57 | + }) | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + /** | ||
| 61 | + * Get PageDTO data. | ||
| 62 | + * | ||
| 63 | + * @return {GroupDTO} compRes.data | ||
| 64 | + */ | ||
| 65 | + static async getPageData1(context: Context): Promise<PageDTO> { | ||
| 66 | + let compRes: ResponseDTO<PageDTO> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<PageDTO>>(context, 'comp_list0.json'); | ||
| 67 | + if (!compRes || !compRes.data) { | ||
| 68 | + Logger.info(TAG, `getCompList compRes is empty`); | ||
| 69 | + return {} as PageDTO | ||
| 70 | + } | ||
| 71 | + Logger.info(TAG, `getCompList getResourcesJson compRes : ${JSON.stringify(compRes)}`); | ||
| 72 | + return compRes.data | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + /** | ||
| 76 | + * Get Group data. | ||
| 77 | + * | ||
| 78 | + * @return {GroupDTO} compRes.data | ||
| 79 | + */ | ||
| 80 | + static async getPageData2(context: Context): Promise<PageDTO> { | ||
| 81 | + let compRes: ResponseDTO<PageDTO> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<PageDTO>>(context, 'comp_list2.json'); | ||
| 82 | + if (!compRes || !compRes.data) { | ||
| 83 | + Logger.info(TAG, `getCompList compRes is empty`); | ||
| 84 | + return {} as PageDTO | ||
| 85 | + } | ||
| 86 | + Logger.info(TAG, `getCompList getResourcesJson compRes : ${JSON.stringify(compRes)}`); | ||
| 87 | + return compRes.data | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + | ||
| 91 | + static getPageData(url: string): Promise<PageDTO> { | ||
| 92 | + return new Promise<PageDTO>((success, error) => { | ||
| 93 | + PageRepository.fetchPageData(url).then((resDTO: ResponseDTO<PageDTO>) => { | ||
| 94 | + if (!resDTO) { | ||
| 95 | + Logger.error(TAG, 'getPageData then resDTO is empty'); | ||
| 96 | + error("page data is empty"); | ||
| 97 | + return | ||
| 98 | + } | ||
| 99 | + if (resDTO.code != http.ResponseCode.OK || !resDTO.data) { | ||
| 100 | + Logger.error(TAG, `getPageData then code:${resDTO.code}, message:${resDTO.message}`); | ||
| 101 | + error(`get page data error code:${resDTO.code}, message:${resDTO.message}`); | ||
| 102 | + return | ||
| 103 | + } | ||
| 104 | + Logger.info(TAG, "getPageData then,resDTO.timeStamp:" + resDTO.timestamp); | ||
| 105 | + success(resDTO.data); | ||
| 106 | + }).catch((err: Error) => { | ||
| 107 | + Logger.error(TAG, `getPageData catch, error.name : ${err.name}, error.message:${err.message}`); | ||
| 108 | + error(err); | ||
| 109 | + }) | ||
| 110 | + }) | ||
| 111 | + } | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | + | ||
| 115 | + | ||
| 116 | +let pageViewModel = new PageViewModel(); | ||
| 117 | + | ||
| 118 | +export default pageViewModel as PageViewModel; |
| 1 | +{ | ||
| 2 | + "color": [ | ||
| 3 | + { | ||
| 4 | + "name": "white", | ||
| 5 | + "value": "#FFFFFF" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "name": "color_333333", | ||
| 9 | + "value": "#333333" | ||
| 10 | + }, | ||
| 11 | + { | ||
| 12 | + "name": "color_666666", | ||
| 13 | + "value": "#666666" | ||
| 14 | + }, | ||
| 15 | + { | ||
| 16 | + "name": "color_999999", | ||
| 17 | + "value": "#999999" | ||
| 18 | + }, | ||
| 19 | + { | ||
| 20 | + "name": "color_FE4B05", | ||
| 21 | + "value": "#FE4B05" | ||
| 22 | + } | ||
| 23 | + ] | ||
| 24 | +} |
| 1 | +{ | ||
| 2 | + "float": [ | ||
| 3 | + { | ||
| 4 | + "name": "font_size_10", | ||
| 5 | + "value": "10fp" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "name": "font_size_11", | ||
| 9 | + "value": "11fp" | ||
| 10 | + }, | ||
| 11 | + { | ||
| 12 | + "name": "font_size_12", | ||
| 13 | + "value": "11fp" | ||
| 14 | + }, | ||
| 15 | + { | ||
| 16 | + "name": "font_size_14", | ||
| 17 | + "value": "14fp" | ||
| 18 | + }, | ||
| 19 | + { | ||
| 20 | + "name": "font_size_16", | ||
| 21 | + "value": "16fp" | ||
| 22 | + }, | ||
| 23 | + { | ||
| 24 | + "name": "normal_text_size", | ||
| 25 | + "value": "16fp" | ||
| 26 | + }, | ||
| 27 | + { | ||
| 28 | + "name": "selected_text_size", | ||
| 29 | + "value": "18fp" | ||
| 30 | + }, | ||
| 31 | + { | ||
| 32 | + "name": "font_size_24", | ||
| 33 | + "value": "24fp" | ||
| 34 | + }, | ||
| 35 | + | ||
| 36 | + { | ||
| 37 | + "name": "main_margin", | ||
| 38 | + "value": "14vp" | ||
| 39 | + }, | ||
| 40 | + { | ||
| 41 | + "name": "margin_8", | ||
| 42 | + "value": "8vp" | ||
| 43 | + }, | ||
| 44 | + { | ||
| 45 | + "name": "label_margin_top", | ||
| 46 | + "value": "10vp" | ||
| 47 | + }, | ||
| 48 | + { | ||
| 49 | + "name": "margin_bottom_16", | ||
| 50 | + "value": "16vp" | ||
| 51 | + }, | ||
| 52 | + { | ||
| 53 | + "name": "label_margin_bottom", | ||
| 54 | + "value": "8vp" | ||
| 55 | + }, | ||
| 56 | + { | ||
| 57 | + "name": "single_row_03_item_width", | ||
| 58 | + "value": "158vp" | ||
| 59 | + }, | ||
| 60 | + { | ||
| 61 | + "name": "single_row_03_item_height", | ||
| 62 | + "value": "160vp" | ||
| 63 | + }, | ||
| 64 | + { | ||
| 65 | + "name": "single_row_03_img_height", | ||
| 66 | + "value": "88vp" | ||
| 67 | + }, | ||
| 68 | + { | ||
| 69 | + "name": "image_border_radius", | ||
| 70 | + "value": "8vp" | ||
| 71 | + }, | ||
| 72 | + { | ||
| 73 | + "name": "border_radius_6", | ||
| 74 | + "value": "6vp" | ||
| 75 | + }, | ||
| 76 | + { | ||
| 77 | + "name": "bottom_navigation_margin_bottom", | ||
| 78 | + "value": "4vp" | ||
| 79 | + }, | ||
| 80 | + { | ||
| 81 | + "name": "bottom_navigation_barHeight", | ||
| 82 | + "value": "50vp" | ||
| 83 | + }, | ||
| 84 | + { | ||
| 85 | + "name": "top_tab_bar_height", | ||
| 86 | + "value": "40vp" | ||
| 87 | + }, | ||
| 88 | + { | ||
| 89 | + "name": "top_tab_item_max_width", | ||
| 90 | + "value": "300vp" | ||
| 91 | + }, | ||
| 92 | + { | ||
| 93 | + "name": "top_tab_item_min_width", | ||
| 94 | + "value": "20vp" | ||
| 95 | + }, | ||
| 96 | + { | ||
| 97 | + "name": "top_tab_item_padding_horizontal", | ||
| 98 | + "value": "7vp" | ||
| 99 | + }, | ||
| 100 | + { | ||
| 101 | + "name": "top_tab_item_padding_bottom", | ||
| 102 | + "value": "5vp" | ||
| 103 | + }, | ||
| 104 | + { | ||
| 105 | + "name": "top_tab_item_padding_top", | ||
| 106 | + "value": "2vp" | ||
| 107 | + } | ||
| 108 | + ] | ||
| 109 | +} |
6.63 KB
11.1 KB
PeopleDaily_Harmony/wdConstant/.gitignore
0 → 100644
PeopleDaily_Harmony/wdConstant/hvigorfile.ts
0 → 100644
| 1 | +export { CommonConstants } from './constants/CommonConstants'; | ||
| 2 | + | ||
| 3 | +export { ConfigConstants } from './constants/ConfigConstants'; | ||
| 4 | + | ||
| 5 | +// enum | ||
| 6 | +export { BottomNavi } from './enum/BottomNavi'; | ||
| 7 | + | ||
| 8 | +export { CompStyle } from './enum/CompStyle'; | ||
| 9 | + | ||
| 10 | +export { CompType } from './enum/CompType'; | ||
| 11 | + | ||
| 12 | +export { NetDataStatusType } from './enum/NetDataStatusType'; | ||
| 13 | + | ||
| 14 | +export { ViewType } from './enum/ViewType'; | ||
| 15 | + | ||
| 16 | +export { DurationEnum } from './enum/DurationEnum'; |
| 1 | +/** | ||
| 2 | + * The constant of Common. | ||
| 3 | + */ | ||
| 4 | +export class CommonConstants { | ||
| 5 | + // offset | ||
| 6 | + static readonly ZERO: number = 0; | ||
| 7 | + static readonly NO_INDEX: number = -1; | ||
| 8 | + static readonly NO_LENGTH: number = 0; | ||
| 9 | + | ||
| 10 | + /** | ||
| 11 | + * 布局相关. | ||
| 12 | + */ | ||
| 13 | + static readonly FULL_PARENT: string = '100%'; | ||
| 14 | + static readonly FULL_WIDTH: string = '100%'; | ||
| 15 | + static readonly FULL_HEIGHT: string = '100%'; | ||
| 16 | + | ||
| 17 | + /** | ||
| 18 | + * Component opacity value: 1. | ||
| 19 | + */ | ||
| 20 | + static readonly FULL_OPACITY: number = 1; | ||
| 21 | +} | ||
| 22 | +; | ||
| 23 | + |
| 1 | +/** | ||
| 2 | + * Config Constants. | ||
| 3 | + */ | ||
| 4 | +export class ConfigConstants { | ||
| 5 | + /** | ||
| 6 | + * 应用id/appId | ||
| 7 | + * | ||
| 8 | + */ | ||
| 9 | + static readonly appId: string = ""; | ||
| 10 | + /** | ||
| 11 | + * 终端id/terminalId | ||
| 12 | + * | ||
| 13 | + */ | ||
| 14 | + static readonly terminalId: string = "android"; | ||
| 15 | + /** | ||
| 16 | + * 36_渠道编码(sappType) | ||
| 17 | + * | ||
| 18 | + */ | ||
| 19 | + // static readonly appType: string = "2"; // wap | ||
| 20 | + static readonly appType: string = "3"; // 手机客户端App(安卓) | ||
| 21 | + | ||
| 22 | + static readonly clientType: string = ""; | ||
| 23 | + /** | ||
| 24 | + * SourceID | ||
| 25 | + * | ||
| 26 | + */ | ||
| 27 | + static readonly sourceId: string = ""; | ||
| 28 | + /** | ||
| 29 | + * 产品渠道应用对照关系: | ||
| 30 | + */ | ||
| 31 | + static readonly appCode: string = ""; | ||
| 32 | + /** | ||
| 33 | + * 基线代码和客户端应用版本号规范 | ||
| 34 | + */ | ||
| 35 | + static readonly ptvCode: string = ""; | ||
| 36 | + /** | ||
| 37 | + * 省份code/province(02->上海) | ||
| 38 | + */ | ||
| 39 | + static readonly province: string = "02"; | ||
| 40 | + /** | ||
| 41 | + * 正在播放的节目ID | ||
| 42 | + */ | ||
| 43 | + static playingContentId?: string = undefined | ||
| 44 | + /** | ||
| 45 | + * 设备Id/deviceId | ||
| 46 | + * 设备Id或者能标识请求端的唯一标识 | ||
| 47 | + */ | ||
| 48 | + static readonly DEVICE_ID: string = "5bfed7be-0497-487f-990b-991e5b828a6e"; | ||
| 49 | + /** | ||
| 50 | + * base url VOD | ||
| 51 | + */ | ||
| 52 | + static readonly BASE_URL_VOD: string = ""; | ||
| 53 | + /** | ||
| 54 | + * base url Live | ||
| 55 | + */ | ||
| 56 | + static readonly BASE_URL_LIVE: string = ""; | ||
| 57 | + /** | ||
| 58 | + * 获取用户信息的服务器 | ||
| 59 | + */ | ||
| 60 | + static readonly BASE_URL: string = ""; | ||
| 61 | + /** | ||
| 62 | + * 内容列表路径 | ||
| 63 | + */ | ||
| 64 | + static readonly CONTENT_LIST_PATH: string = "/display/v4/static"; | ||
| 65 | + /** | ||
| 66 | + * 电视台(直播)列表路径 | ||
| 67 | + */ | ||
| 68 | + static readonly LIVE_TV_PATH: string = "/live/v2/tv-data"; | ||
| 69 | + /** | ||
| 70 | + * 临时的详情URL | ||
| 71 | + */ | ||
| 72 | + static readonly DETAIL_URL = "https://pd-people-uat.pdnews.cn/h/contentTop/110?hiddenTopNavigation=true" | ||
| 73 | +} |
| 1 | +/** | ||
| 2 | + * 常见图片宽/高比 | ||
| 3 | + */ | ||
| 4 | +export const enum AspectRatioEnum { | ||
| 5 | + // 常见纵向比例 | ||
| 6 | + ASPECT_RATIO_2_3 = 2 / 3, | ||
| 7 | + ASPECT_RATIO_3_4 = 3 / 4, | ||
| 8 | + ASPECT_RATIO_4_5 = 4 / 5, | ||
| 9 | + ASPECT_RATIO_5_7 = 5 / 7, | ||
| 10 | + ASPECT_RATIO_9_16 = 9 / 16, | ||
| 11 | + ASPECT_RATIO_10_16 = 10 / 16, | ||
| 12 | + ASPECT_RATIO_9_21 = 9 / 21, | ||
| 13 | + | ||
| 14 | + // 正方形 | ||
| 15 | + ASPECT_RATIO_1_1 = 1 / 1, | ||
| 16 | + | ||
| 17 | + // 常见横向比例 | ||
| 18 | + ASPECT_RATIO_7_5 = 7 / 5, | ||
| 19 | + ASPECT_RATIO_5_4 = 5 / 4, | ||
| 20 | + ASPECT_RATIO_4_3 = 4 / 3, | ||
| 21 | + ASPECT_RATIO_3_2 = 3 / 2, | ||
| 22 | + ASPECT_RATIO_16_10 = 16 / 10, | ||
| 23 | + ASPECT_RATIO_16_9 = 16 / 9, | ||
| 24 | + ASPECT_RATIO_21_9 = 21 / 9, | ||
| 25 | + | ||
| 26 | + // 其他常见比例 | ||
| 27 | + ASPECT_RATIO_2_1 = 2 / 1, // banner图宽高比 | ||
| 28 | + ASPECT_RATIO_1_2 = 1 / 2, | ||
| 29 | + ASPECT_RATIO_75_45 = 75 / 45, // 角标宽高比 | ||
| 30 | +} |
| 1 | +/** | ||
| 2 | + * 组件Style/展示样式 | ||
| 3 | + */ | ||
| 4 | +export const enum CompStyle { | ||
| 5 | + Label_03 = 'Label-03', // 标题卡:icon+文字 | ||
| 6 | + Carousel_Layout_01 = 'Carousel_Layout-01', // 通用轮播卡:视频、直播、活动、专题、榜单、外链 | ||
| 7 | + Carousel_Layout_02 = 'Carousel_Layout-02', // 直播轮播卡:直播 | ||
| 8 | + Single_Row_01 = 'Single_Row-01', // 三格方形小卡(排名):专题、活动 | ||
| 9 | + Single_Row_02 = 'Single_Row-02', // 通用横划卡:视频、直播、专题 | ||
| 10 | + Single_Row_03 = 'Single_Row-03', // 直播横划卡:直播 | ||
| 11 | + Single_Row_04 = 'Single_Row-04', // 三格方形小卡:专题、活动 | ||
| 12 | + Single_Row_05 = 'Single_Row-05', // 专题横划卡:视频、直播、专题、活动、榜单、外链 | ||
| 13 | + Single_Column_01 = 'Single_Column-01', // 大卡横屏视频:视频、直播 | ||
| 14 | + Single_Column_02 = 'Single_Column-02', // 活动卡:活动 | ||
| 15 | + Single_Column_03 = 'Single_Column-03', // 地域榜单:榜单 | ||
| 16 | + Single_Column_04 = 'Single_Column-04', // 大卡横屏(带背景):视频、直播 | ||
| 17 | + Single_Column_05 = 'Single_Column-05', // 海报图卡:/ | ||
| 18 | + Single_Column_06 = 'Single_Column-06', // 留言板卡:/ | ||
| 19 | + Grid_Layout_01 = 'Grid_Layout-01', // 横屏宫格卡:视频、直播 | ||
| 20 | + Grid_Layout_02 = 'Grid_Layout-02', // 竖屏宫格卡:视频、直播、榜单 | ||
| 21 | + Masonry_Layout_01 = 'Masonry_Layout-01', // 双列瀑布流/瀑布流卡:视频、直播、专题、活动 | ||
| 22 | +} |
| 1 | +/** | ||
| 2 | + * 组件Type/展示类型 | ||
| 3 | + */ | ||
| 4 | +export const enum CompType { | ||
| 5 | + LABEL = 'LABEL', // 标题组件 | ||
| 6 | + CAROUSEL_LAYOUT = 'CAROUSEL_LAYOUT', // 轮播组件,即Banner/焦点图 | ||
| 7 | + SINGLE_ROW = 'SINGLE_ROW', // 单行组件 | ||
| 8 | + SINGLE_COLUMN = 'SINGLE_COLUMN', // 单列组件 | ||
| 9 | + GRID_LAYOUT = 'GRID_LAYOUT', // 网格组件 | ||
| 10 | + MASONRY_LAYOUT = 'MASONRY_LAYOUT', // 瀑布流组件 | ||
| 11 | +} |
| 1 | +/** | ||
| 2 | + * 时间跨度/延时枚举常量值 | ||
| 3 | + */ | ||
| 4 | +export const enum DurationEnum { | ||
| 5 | + DURATION_MS_50 = 50, // 50毫秒 | ||
| 6 | + DURATION_MS_100 = 100, // 50毫秒 | ||
| 7 | + DURATION_MS_1000 = 1000, // 1秒/1000ms | ||
| 8 | + DURATION_MS_1500 = 1500, // 1.5秒 | ||
| 9 | + DURATION_1 = 1000, // 1秒 | ||
| 10 | + DURATION_2 = 2000, // 2秒 | ||
| 11 | + DURATION_3 = 3000, // 3秒 | ||
| 12 | + DURATION_4 = 4000, // 4秒 | ||
| 13 | +} |
| 1 | +/** | ||
| 2 | + * view展示种类 | ||
| 3 | + */ | ||
| 4 | +export const enum ViewType { | ||
| 5 | + // 已初始化,但尚未发出请求 | ||
| 6 | + INITIAL = 0, | ||
| 7 | + // 加载中:已发出请求,但请求尚未返回; | ||
| 8 | + LOADING, | ||
| 9 | + // 数据加载失败(重试)/failure | ||
| 10 | + ERROR, | ||
| 11 | + // 结果为空/无数据/空view | ||
| 12 | + EMPTY, | ||
| 13 | + // 已加载结束/非失败/非空/可以是仅一页数据,即楼层数据列表PAGE_GROUP_LIST/ | ||
| 14 | + LOADED, | ||
| 15 | + // 已加载的是tab导航数据(可嵌套page的楼层列表) | ||
| 16 | + NAV_BAR | ||
| 17 | +} |
PeopleDaily_Harmony/wdKit/.gitignore
0 → 100644
PeopleDaily_Harmony/wdKit/hvigorfile.ts
0 → 100644
PeopleDaily_Harmony/wdKit/oh-package.json5
0 → 100644
| 1 | +export { Logger } from "./utils/Logger" | ||
| 2 | + | ||
| 3 | +export { ResourcesUtils } from './utils/ResourcesUtils' | ||
| 4 | + | ||
| 5 | +export { StringUtils } from './utils/StringUtils' | ||
| 6 | + | ||
| 7 | +export { CollectionUtils } from './utils/CollectionUtils'; | ||
| 8 | + | ||
| 9 | +export { BasicDataSource } from './utils/BasicDataSource'; | ||
| 10 | + | ||
| 11 | +export { LazyDataSource } from './utils/LazyDataSource' | ||
| 12 | + |
| 1 | +/** | ||
| 2 | + * IDataSource处理数据侦听器的基本实现 | ||
| 3 | + */ | ||
| 4 | +export abstract class BasicDataSource<T> implements IDataSource { | ||
| 5 | + private listeners: DataChangeListener[] = []; | ||
| 6 | + | ||
| 7 | + constructor() { | ||
| 8 | + } | ||
| 9 | + | ||
| 10 | + // 获取数据总个数 | ||
| 11 | + public abstract totalCount(): number; | ||
| 12 | + | ||
| 13 | + // 获取索引对应的Item数据 | ||
| 14 | + public abstract getData(index: number): T | undefined; | ||
| 15 | + | ||
| 16 | + // 注册改变数据的控制器 | ||
| 17 | + public registerDataChangeListener(listener: DataChangeListener): void { | ||
| 18 | + if (this.listeners.indexOf(listener) < 0) { | ||
| 19 | + console.info('add DataChangeListener'); | ||
| 20 | + this.listeners.push(listener); | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + // 注销改变数据的控制器 | ||
| 25 | + public unregisterDataChangeListener(listener: DataChangeListener): void { | ||
| 26 | + const pos = this.listeners.indexOf(listener); | ||
| 27 | + if (pos >= 0) { | ||
| 28 | + console.info('remove DataChangeListener'); | ||
| 29 | + this.listeners.splice(pos, 1); | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + // 通知控制器数据重新加载数据 | ||
| 34 | + public notifyDataReload(): void { | ||
| 35 | + this.listeners.forEach(listener => { | ||
| 36 | + listener.onDataReloaded(); | ||
| 37 | + }) | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + // 通知控制器数据增加 | ||
| 41 | + public notifyDataAdd(index: number): void { | ||
| 42 | + this.listeners.forEach(listener => { | ||
| 43 | + listener.onDataAdd(index); | ||
| 44 | + }) | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + // 通知控制器数据位置变化 | ||
| 48 | + public notifyDataMove(from: number, to: number): void { | ||
| 49 | + this.listeners.forEach(listener => { | ||
| 50 | + listener.onDataMove(from, to); | ||
| 51 | + }) | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + // 通知控制器数据删除 | ||
| 55 | + public notifyDataDelete(index: number): void { | ||
| 56 | + this.listeners.forEach(listener => { | ||
| 57 | + listener.onDataDelete(index); | ||
| 58 | + }) | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + // 通知控制器数据变化 | ||
| 62 | + public notifyDataChange(index: number): void { | ||
| 63 | + this.listeners.forEach(listener => { | ||
| 64 | + listener.onDataChange(index); | ||
| 65 | + }) | ||
| 66 | + } | ||
| 67 | +} |
| 1 | +import LinkList from '@ohos.util.List'; | ||
| 2 | +import HashMap from '@ohos.util.HashMap'; | ||
| 3 | + | ||
| 4 | +/** | ||
| 5 | + * CollectionUtils class. | ||
| 6 | + */ | ||
| 7 | + | ||
| 8 | +export class CollectionUtils { | ||
| 9 | + /** | ||
| 10 | + * The Array utils tag. | ||
| 11 | + */ | ||
| 12 | + private static readonly TAG: string = 'CollectionUtils'; | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * Check collection is empty or not. | ||
| 16 | + * @param collection any[] | ||
| 17 | + * @returns {boolean} true(empty) | ||
| 18 | + */ | ||
| 19 | + static isEmpty(collection?: any[]): boolean { | ||
| 20 | + return !collection || collection.length === 0; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + // static isEmptyList<T>(list1?: LinkList<T>): boolean { | ||
| 24 | + // return !list1 || list1.length === 0; | ||
| 25 | + // } | ||
| 26 | + // | ||
| 27 | + // static isEmptyHashMap(obj?: HashMap<any, any>): boolean { | ||
| 28 | + // if (!obj) { | ||
| 29 | + // return true; | ||
| 30 | + // } | ||
| 31 | + // return obj.isEmpty(); | ||
| 32 | + // } | ||
| 33 | + // | ||
| 34 | + // static isEmptyMap(obj?: Map<any, any>): boolean { | ||
| 35 | + // if (!obj) { | ||
| 36 | + // return true; | ||
| 37 | + // } | ||
| 38 | + // return Object.keys(obj).length === 0 && obj.constructor === Object; | ||
| 39 | + // } | ||
| 40 | + // | ||
| 41 | + // static isEmptyRecord(obj?: Record<string, string>): boolean { | ||
| 42 | + // if (!obj) { | ||
| 43 | + // return true; | ||
| 44 | + // } | ||
| 45 | + // return Object.keys(obj).length === 0 && obj.constructor === Object; | ||
| 46 | + // } | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * Check collection is empty or not. | ||
| 50 | + * @param collection any[] | ||
| 51 | + * @returns {boolean} true(not empty) | ||
| 52 | + */ | ||
| 53 | + static isNotEmpty(collection?: any[]): boolean { | ||
| 54 | + if (!collection) { | ||
| 55 | + return false | ||
| 56 | + } | ||
| 57 | + return collection.length > 0; | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + static getLength(collection?: any[]): number { | ||
| 61 | + return CollectionUtils.isEmpty(collection) ? 0 : collection.length; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + static getElement(collection?: any[], index?: number): any { | ||
| 65 | + if (CollectionUtils.isEmpty(collection) || index === undefined) { | ||
| 66 | + return null; | ||
| 67 | + } | ||
| 68 | + return index >= 0 && index < collection.length ? collection[index] : null; | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + static isArray(value: any): boolean { | ||
| 72 | + if (typeof Array.isArray === 'function') { | ||
| 73 | + return Array.isArray(value); | ||
| 74 | + } else { | ||
| 75 | + return Object.prototype.toString.call(value) === '[object Array]'; | ||
| 76 | + } | ||
| 77 | + } | ||
| 78 | +} | ||
| 79 | + |
| 1 | +/** | ||
| 2 | + * 日期/时间工具 | ||
| 3 | + */ | ||
| 4 | +// let myDate = new Date(); | ||
| 5 | +// myDate.getTime() // 获取以毫秒为单位的时间值。 | ||
| 6 | +// myDate.getFullYear(); // 获取完整的年份(4位,1970-????) | ||
| 7 | +// myDate.getMonth(); // 获取myDate月份(0-11,0代表1月) | ||
| 8 | +// myDate.getDate(); // 获取myDate日期(1-31) | ||
| 9 | +// myDate.getDay(); // 获取myDate星期X(0-6,0代表星期天) | ||
| 10 | +// myDate.getTime(); // 获取myDate时间(从1970.1.1开始的毫秒数) | ||
| 11 | +// myDate.getHours(); // 获取myDate小时数(0-23) | ||
| 12 | +// myDate.getMinutes(); // 获取myDate分钟数(0-59) | ||
| 13 | +// myDate.getSeconds(); // 获取myDate秒数(0-59) | ||
| 14 | +// myDate.getMilliseconds(); // 获取myDate毫秒数(0-999) | ||
| 15 | +// myDate.toLocaleDateString(); // 获取当前日期:使用当前或指定的区域设置将日期转换为字符串。 | ||
| 16 | +// myDate.toLocaleTimeString(); // 获取当前时间:使用当前或指定的区域设置将时间转换为字符串。 | ||
| 17 | +// myDate.toLocaleString(); // 获取日期与时间:使用当前或指定的区域设置将日期和时间转换为字符串 | ||
| 18 | + | ||
| 19 | +// 日期时间的年月日时分秒以及毫秒的各个字段 | ||
| 20 | +export class Opt { | ||
| 21 | + year: string = ''; // 年 小写y | ||
| 22 | + month: string = ''; // 月 大写M | ||
| 23 | + day: string = ''; // 日 小写d | ||
| 24 | + hour: string = ''; // 时 大写H(24小时制) | ||
| 25 | + // hh: string = ''; // 时 小写H(12小时制) | ||
| 26 | + minute: string = ''; // 分 小写m | ||
| 27 | + second: string = ''; // 秒 小写s | ||
| 28 | + millisecond: string = ''; // 毫秒 大写S | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +export class DateTimeUtils { | ||
| 32 | + // 日期+时间格式 | ||
| 33 | + static readonly PATTERN_DATE_TIME_DEFAULT: string = 'yyyyMMddHHmmss'; // 年月日时分秒 | ||
| 34 | + static readonly PATTERN_DATE_TIME_HYPHEN: string = 'yyyy-MM-dd HH:mm:ss'; // 日期中包含连字符/中划线(HYPHEN),时间是以冒号(Colon)分割 | ||
| 35 | + static readonly PATTERN_DATE_TIME_HYPHEN_MS: string = 'yyyy-MM-dd HH:mm:ss.SSS'; // 日期中包含连字符/中划线(HYPHEN),时间是以冒号(Colon)分割 | ||
| 36 | + static readonly PATTERN_DATE_TIME_SLASH: string = 'yyyy/MM/dd HH:mm:ss'; // 日期中包含正斜杠(forward slash '/') | ||
| 37 | + static readonly PATTERN_DATE_TIME_BACK_SLASH: string = 'yyyy\\MM\\dd HH:mm:ss'; // 日期中包含反斜杠(back slash '\') | ||
| 38 | + static readonly PATTERN_DATE_TIME_DOT: string = 'yyyy.MM.dd HH:mm:ss'; // 日期中包含英文小圆点(DOT '.') | ||
| 39 | + static readonly PATTERN_DATE_TIME_CN: string = 'yyyy年MM月dd日 HH:mm:ss'; // 日期中包含包含中文年月日 | ||
| 40 | + static readonly PATTERN_DATE_TIME_MS: string = 'yyyyMMddHHmmssSSS'; // 时间中包含毫秒 | ||
| 41 | + static readonly PATTERN_DATE_TIME_WITHOUT_SECOND: string = 'yyyyMMddHHmm'; // 时间中不包含秒 | ||
| 42 | + static readonly PATTERN_DATE_TIME_SIMPLIFY: string = 'MM/dd HH:mm'; // 精简的日期+时间(不包含年份和秒), 月/日 时:分 | ||
| 43 | + | ||
| 44 | + // 仅日期格式(不包含时间) | ||
| 45 | + static readonly PATTERN_DATE_DEFAULT: string = 'yyyyMMdd'; // 年月日 | ||
| 46 | + static readonly PATTERN_DATE_HYPHEN: string = 'yyyy-MM-dd'; // 日期中包含连字符/中划线(HYPHEN) | ||
| 47 | + static readonly PATTERN_DATE_SLASH: string = 'yyyy/MM/dd'; // 日期中包含正斜杠(forward slash '/') | ||
| 48 | + static readonly PATTERN_DATE_BACK_SLASH: string = 'yyyy\\MM\\dd'; // 日期中包含反斜杠(back slash '\') | ||
| 49 | + static readonly PATTERN_DATE_DOT: string = 'yyyy.MM.dd'; // 日期中包含英文小圆点(DOT '.') | ||
| 50 | + static readonly PATTERN_DATE_CN: string = 'yyyy年MM月dd日'; // 日期中包含包含中文年月日 | ||
| 51 | + static readonly PATTERN_DATE_SLASH_WITHOUT_YEAR: string = 'MM/dd'; // 日期中不包含年份 | ||
| 52 | + static readonly PATTERN_DATE_CN_WITHOUT_YEAR: string = 'MM月dd日'; // 日期中不包含年份,且month与day是中文 | ||
| 53 | + | ||
| 54 | + // 仅时间格式(不包含日期) | ||
| 55 | + static readonly PATTERN_TIME_DEFAULT: string = 'HHmmss'; // 时分秒 | ||
| 56 | + static readonly PATTERN_TIME_COLON: string = 'HH:mm:ss'; // 时间是以冒号(Colon)分割 | ||
| 57 | + static readonly PATTERN_TIME_MS: string = 'HHmmssSSS'; // 时间中包含毫秒 | ||
| 58 | + static readonly PATTERN_TIME_COLON_DOT_MS: string = 'HH:mm:ss.SSS'; // 时间是以冒号(Colon)与点号(DOT)分割,且包含毫秒 | ||
| 59 | + static readonly PATTERN_TIME_WITHOUT_SECOND: string = 'HHmm'; // 时间中不包含秒 | ||
| 60 | + static readonly PATTERN_TIME_COLON_WITHOUT_SECOND: string = 'HH:mm'; // 时间是以冒号(Colon)分割,且不包含秒 | ||
| 61 | + static readonly PATTERN_TIME_COLON_WITHOUT_HOUR: string = 'mm:ss'; // 时间是以冒号(Colon)分割,且不包含小时(分钟长度至少2位,可能是3位) | ||
| 62 | + | ||
| 63 | + static readonly RADIX: number = 60; // 时分秒的进制 | ||
| 64 | + static readonly MILLISECOND_PER_SECOND: number = 1000; // 1000毫秒每秒,秒与毫秒之间的转换进制 | ||
| 65 | + | ||
| 66 | + // 周x | ||
| 67 | + static readonly weeks1: string[] = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; | ||
| 68 | + // 星期X | ||
| 69 | + static readonly weeks2: string[] = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']; | ||
| 70 | + | ||
| 71 | + static readonly today: string = '今天'; | ||
| 72 | + static readonly yesterday: string = '昨天'; | ||
| 73 | + static readonly tomorrow: string = '明天'; | ||
| 74 | + | ||
| 75 | + /** | ||
| 76 | + * 获取当前日期:年月日 | ||
| 77 | + * 返回格式,默认如:yyyyMMdd,20230926 | ||
| 78 | + */ | ||
| 79 | + static getCurDate(format = DateTimeUtils.PATTERN_DATE_DEFAULT): string { | ||
| 80 | + const DATETIME = new Date() | ||
| 81 | + return DateTimeUtils.formatDate(DATETIME.getTime(), format) | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + /** | ||
| 85 | + * 获取当前时间:时分秒 | ||
| 86 | + * 返回格式,默认如:HHmmss,230559 | ||
| 87 | + */ | ||
| 88 | + static getCurTime(format = DateTimeUtils.PATTERN_TIME_DEFAULT): string { | ||
| 89 | + const DATETIME = new Date() | ||
| 90 | + return DateTimeUtils.formatDate(DATETIME.getTime(), format) | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + /** | ||
| 94 | + * 日期不足两位前面补充0 | ||
| 95 | + * @param value-数据值 | ||
| 96 | + */ | ||
| 97 | + static fill(value: number): string { | ||
| 98 | + return (value > 9 ? '' : '0') + value | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + /** | ||
| 102 | + * 获取两个时间点的时间差 | ||
| 103 | + * @param milliseconds1 | ||
| 104 | + * @param milliseconds2 | ||
| 105 | + * @returns Duration | ||
| 106 | + */ | ||
| 107 | + static getDuration(milliseconds1: number, milliseconds2: number): number { | ||
| 108 | + let date1 = new Date(milliseconds1) | ||
| 109 | + let date2 = new Date(milliseconds2) | ||
| 110 | + let timeDiff = Math.abs(date2.getTime() - date1.getTime()); | ||
| 111 | + return timeDiff; | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + | ||
| 115 | + /** | ||
| 116 | + * 格式化Duration时间 | ||
| 117 | + * @param duration 毫秒 | ||
| 118 | + * @returns 返回格式化后的Duration时间 | ||
| 119 | + */ | ||
| 120 | + static getFormattedDuration(duration: number): string { | ||
| 121 | + // 也可以直接先除以1000转换为秒后再计算 // duration = duration/1000 | ||
| 122 | + // Math.floor 用于向下取整 | ||
| 123 | + let hour = Math.floor(duration / (1000 * 60 * 60)) | ||
| 124 | + // 用总毫秒数duration减去hour所对应的毫秒数差,再除以每分钟所占用的毫秒数 | ||
| 125 | + let minute = Math.floor((duration - hour * (1000 * 60 * 60)) / (1000 * 60)); | ||
| 126 | + // let second = Math.floor((duration - hour * (1000 * 60 * 60) - minute * (60 * 1000)) / 1000) | ||
| 127 | + let second = Math.floor(duration / 1000) % 60; // 先除以1000,转换为秒;再对整分钟取余 | ||
| 128 | + if (hour > 0) { | ||
| 129 | + return `${DateTimeUtils.fill(hour)}:${DateTimeUtils.fill(minute)}:${DateTimeUtils.fill(second)}` | ||
| 130 | + } | ||
| 131 | + return `${DateTimeUtils.fill(minute)}:${DateTimeUtils.fill(second)}` | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + /** | ||
| 135 | + * 格式化显示倒计时 | ||
| 136 | + * @param milliseconds 时间戳 毫秒 | ||
| 137 | + * @returns 返回格式化后的Duration时间 | ||
| 138 | + */ | ||
| 139 | + static getDurationToNow(milliseconds: number): string { | ||
| 140 | + let nowDateTime = new Date(); | ||
| 141 | + let duration = milliseconds - nowDateTime.getTime(); | ||
| 142 | + if (duration < 0) { | ||
| 143 | + duration = 0; | ||
| 144 | + } | ||
| 145 | + return DateTimeUtils.getFormattedDuration(duration) | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + /** | ||
| 149 | + * 根据日期/时间字符串反序列化对应的时间戳 | ||
| 150 | + * @param dateTimeString string 日期+时间字符串 | ||
| 151 | + * 列举字符串格式,如: | ||
| 152 | + * 20231129,yyyyMMdd | ||
| 153 | + * 20231126230559 yyyyMMddHHmmss | ||
| 154 | + * 20231126230559729 yyyyMMddHHmmssSSS | ||
| 155 | + * 2023-11-26 23:05:59.729, yyyy-MM-dd HH:mm:ss.SSS(先移除所有中划线和冒号及空格等非数字字符) | ||
| 156 | + * @returns 转换后的时间戳:milliseconds 毫秒 | ||
| 157 | + */ | ||
| 158 | + static parseDate(dateTimeString?: string): number { | ||
| 159 | + if (!dateTimeString) { | ||
| 160 | + return 0 | ||
| 161 | + } | ||
| 162 | + // 移除连字符/中划线(Hyphen/Strike)/移除冒号(Colon)/移除空白字符(包括空格、制表符、换行符等)/移除正斜杠(forward slash '/')/移除反斜杠(back slash '\') | ||
| 163 | + // let regExp = new RegExp('(\d)(?=(\d{3})+\.)/g') | ||
| 164 | + let regExpHyphen: RegExp = new RegExp('-', 'g'); | ||
| 165 | + let regExpSlash: RegExp = new RegExp('/', 'g'); | ||
| 166 | + let regExpBackSlash: RegExp = new RegExp(/\\/, 'g'); | ||
| 167 | + let regExpColon: RegExp = new RegExp(':', 'g'); | ||
| 168 | + let regExpBlank: RegExp = new RegExp('\s', 'g'); | ||
| 169 | + dateTimeString = dateTimeString.replace(regExpHyphen, '') | ||
| 170 | + .replace(regExpSlash, '') | ||
| 171 | + .replace(regExpBackSlash, '') | ||
| 172 | + .replace(regExpColon, '') | ||
| 173 | + .replace(regExpBlank, ''); | ||
| 174 | + if (dateTimeString.length < 8 || dateTimeString.length > 17) { | ||
| 175 | + return 0 | ||
| 176 | + } | ||
| 177 | + console.log("dateTimeString:" + dateTimeString) | ||
| 178 | + // substring(startIndex: number, endIndex?: number): string: | ||
| 179 | + // 返回从startIndex开始到endIndex(不包括)之间的子字符串。 | ||
| 180 | + // 如果省略endIndex,则返回从startIndex到字符串末尾的子字符串。 | ||
| 181 | + let year: number = Number.parseInt(dateTimeString.substring(0, 4)); | ||
| 182 | + console.log("year:" + year) | ||
| 183 | + let month: number = Number.parseInt(dateTimeString.substring(4, 6)) - 1; | ||
| 184 | + console.log("month:" + month) | ||
| 185 | + let day: number = Number.parseInt(dateTimeString.substring(6, 8)); | ||
| 186 | + console.log("day:" + day) | ||
| 187 | + if (dateTimeString.length < 10) { | ||
| 188 | + return new Date(year, month, day).getTime(); | ||
| 189 | + } | ||
| 190 | + let hours: number = Number.parseInt(dateTimeString.substring(8, 10)); | ||
| 191 | + console.log("hours:" + hours) | ||
| 192 | + if (dateTimeString.length < 12) { | ||
| 193 | + return new Date(year, month, day, hours).getTime(); | ||
| 194 | + } | ||
| 195 | + let min: number = Number.parseInt(dateTimeString.substring(10, 12)); | ||
| 196 | + console.log("min:" + min) | ||
| 197 | + if (dateTimeString.length < 14) { | ||
| 198 | + return new Date(year, month, day, hours, min).getTime(); | ||
| 199 | + } | ||
| 200 | + let sec: number = Number.parseInt(dateTimeString.substring(12, 14)); | ||
| 201 | + console.log("sec:" + sec) | ||
| 202 | + if (dateTimeString.length < 17) { | ||
| 203 | + return new Date(year, month, day, hours, min, sec).getTime(); | ||
| 204 | + } | ||
| 205 | + let ms: number = Number.parseInt(dateTimeString.substring(14, 17)); | ||
| 206 | + console.log("ms:" + ms) | ||
| 207 | + return new Date(year, month, day, hours, min, sec, ms).getTime(); | ||
| 208 | + } | ||
| 209 | + | ||
| 210 | + /** | ||
| 211 | + * 把整数时间戳格式化为指定格式的日期+时间字符串 | ||
| 212 | + * @param timestamp:毫秒 | ||
| 213 | + * @param format 指定要格式化的pattern | ||
| 214 | + * @returns 格式化后的字符串 | ||
| 215 | + */ | ||
| 216 | + static formatDate(timestamp: number, format = DateTimeUtils.PATTERN_DATE_HYPHEN): string { | ||
| 217 | + let res = ""; | ||
| 218 | + try { | ||
| 219 | + const date = new Date(timestamp); | ||
| 220 | + const opt: Opt = { | ||
| 221 | + year: date.getFullYear().toString(), // 年 小写y | ||
| 222 | + month: (date.getMonth() + 1).toString(), // 月 大写M | ||
| 223 | + day: date.getDate().toString(), // 日 小写d | ||
| 224 | + hour: date.getHours().toString(), // 时 大写H(24小时制) | ||
| 225 | + minute: date.getMinutes().toString(), // 分 小写m | ||
| 226 | + second: date.getSeconds().toString(), // 秒 小写s | ||
| 227 | + millisecond: date.getMilliseconds().toString() // 毫秒 大写S | ||
| 228 | + }; | ||
| 229 | + const regKeys: string[] = ['y+', 'M+', 'd+', 'H+', 'm+', 's+', 'S+']; | ||
| 230 | + for (let i = 0; i < regKeys.length; i++) { | ||
| 231 | + const regKey = regKeys[i]; | ||
| 232 | + const reg = new RegExp(regKey); | ||
| 233 | + let ret = reg.exec(format); // 使用 RegExp 的 match 或 exec 方法在目标字符串中查找匹配项 | ||
| 234 | + if (ret) { | ||
| 235 | + switch (regKey) { | ||
| 236 | + case 'y+': | ||
| 237 | + format = format.replace(reg, ret[0].length <= opt.year.length ? opt.year : opt.year.padStart(ret[0].length, "0")); | ||
| 238 | + break; | ||
| 239 | + case 'M+': | ||
| 240 | + format = format.replace(reg, ret[0].length < opt.month.length ? opt.month : opt.month.padStart(ret[0].length, "0")); | ||
| 241 | + break; | ||
| 242 | + case 'd+': | ||
| 243 | + format = format.replace(reg, ret[0].length < opt.day.length ? opt.day : opt.day.padStart(ret[0].length, "0")); | ||
| 244 | + break; | ||
| 245 | + case 'H+': | ||
| 246 | + format = format.replace(reg, ret[0].length < opt.hour.length ? opt.hour : opt.hour.padStart(ret[0].length, "0")); | ||
| 247 | + break; | ||
| 248 | + case 'm+': | ||
| 249 | + format = format.replace(reg, ret[0].length < opt.minute.length ? opt.minute : opt.minute.padStart(ret[0].length, "0")); | ||
| 250 | + break; | ||
| 251 | + case 's+': | ||
| 252 | + format = format.replace(reg, ret[0].length < opt.second.length ? opt.second : opt.second.padStart(ret[0].length, "0")); | ||
| 253 | + break; | ||
| 254 | + case 'S+': | ||
| 255 | + format = format.replace(reg, ret[0].length < opt.millisecond.length ? opt.millisecond : opt.millisecond.padStart(ret[0].length, "0")); | ||
| 256 | + break; | ||
| 257 | + } | ||
| 258 | + } | ||
| 259 | + } | ||
| 260 | + res = format; | ||
| 261 | + } catch (error) { | ||
| 262 | + console.error(`ERROR formatDate error: ${error}.`); | ||
| 263 | + } | ||
| 264 | + return res; | ||
| 265 | + } | ||
| 266 | + | ||
| 267 | + /** | ||
| 268 | + * 构造星期X/周X | ||
| 269 | + * @param timestamp | ||
| 270 | + * @returns | ||
| 271 | + */ | ||
| 272 | + static buildDay(timestamp: number, weeks = this.weeks1): string { | ||
| 273 | + try { | ||
| 274 | + const date = new Date(timestamp); | ||
| 275 | + let day = date.getDay() | ||
| 276 | + let week = weeks[day]; | ||
| 277 | + return week | ||
| 278 | + } catch (error) { | ||
| 279 | + console.error(`ERROR formatDate error: ${error}.`); | ||
| 280 | + } | ||
| 281 | + } | ||
| 282 | + | ||
| 283 | + static startOfDay(argument: number): Date { | ||
| 284 | + const _date = new Date(argument); | ||
| 285 | + _date.setHours(0, 0, 0, 0); | ||
| 286 | + return _date; | ||
| 287 | + } | ||
| 288 | + | ||
| 289 | + static isSameDay(dateLeft: number, dateRight: number): boolean { | ||
| 290 | + const dateLeftStartOfDay = this.startOfDay(dateLeft); | ||
| 291 | + const dateRightStartOfDay = this.startOfDay(dateRight); | ||
| 292 | + return +dateLeftStartOfDay === +dateRightStartOfDay; | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + static addDays(argument: number, amount: number): Date { | ||
| 296 | + const _date = new Date(argument); | ||
| 297 | + if (amount == 0) { | ||
| 298 | + return _date; | ||
| 299 | + } | ||
| 300 | + _date.setDate(_date.getDate() + amount); | ||
| 301 | + return _date; | ||
| 302 | + } | ||
| 303 | + | ||
| 304 | + static subDays(date: number, amount: number): Date { | ||
| 305 | + return this.addDays(date, -amount); | ||
| 306 | + } | ||
| 307 | + | ||
| 308 | + static isToday(date: number,): boolean { | ||
| 309 | + return this.isSameDay(date, Date.now()); | ||
| 310 | + } | ||
| 311 | + | ||
| 312 | + static isYesterday(date: number): boolean { | ||
| 313 | + return this.isSameDay(date, this.subDays(Date.now(), 1).getTime()); | ||
| 314 | + } | ||
| 315 | + | ||
| 316 | + static isTomorrow(date: number): boolean { | ||
| 317 | + return this.isSameDay(date, this.addDays(Date.now(), 1).getTime()); | ||
| 318 | + } | ||
| 319 | +} | ||
| 320 | + | ||
| 321 | +// const dateTimeUtils = new DateTimeUtils() |
| 1 | +import util from '@ohos.util'; | ||
| 2 | +import deviceInfo from '@ohos.deviceInfo'; | ||
| 3 | +import { SPHelper } from './SPHelper'; | ||
| 4 | + | ||
| 5 | +const TAG = 'DeviceUtil'; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * 与(硬件)设备相关(不可改变或不可升级)属性或操作 | ||
| 9 | + */ | ||
| 10 | +export class DeviceUtil { | ||
| 11 | + static async clientId() { | ||
| 12 | + let uuid = await SPHelper.default.get("clientId", ''); | ||
| 13 | + if (uuid == '') { | ||
| 14 | + uuid = util.generateRandomUUID(); | ||
| 15 | + await SPHelper.default.save("clientId", uuid); | ||
| 16 | + } | ||
| 17 | + return uuid.toString(); | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + /** | ||
| 21 | + * 返回设备厂家名称 | ||
| 22 | + * HUAWEI | ||
| 23 | + * @returns | ||
| 24 | + */ | ||
| 25 | + static getManufacture(): string { | ||
| 26 | + return deviceInfo.manufacture; | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * 返回设备品牌名称 | ||
| 31 | + * HUAWEI MATE 40 PRO | ||
| 32 | + * @returns | ||
| 33 | + */ | ||
| 34 | + static getBrand(): string { | ||
| 35 | + return deviceInfo.brand; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 返回认证型号 | ||
| 40 | + * LIO-AL00 | ||
| 41 | + * @returns | ||
| 42 | + */ | ||
| 43 | + static getProductModel(): string { | ||
| 44 | + return deviceInfo.productModel; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + /** | ||
| 48 | + * 返回产品版本 | ||
| 49 | + * OpenHarmony-3.2.6.5(Beta2) | ||
| 50 | + * @returns | ||
| 51 | + */ | ||
| 52 | + static getDisplayVersion(): string { | ||
| 53 | + return deviceInfo.productModel; | ||
| 54 | + } | ||
| 55 | +} |
| 1 | +import { BasicDataSource } from './BasicDataSource'; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 实现/BasicDataSource抽象类,用于懒数据加载 | ||
| 5 | + */ | ||
| 6 | +export class LazyDataSource<T> extends BasicDataSource<T> { | ||
| 7 | + // private dataArray: Array<T> = new Array(); | ||
| 8 | + // private dataArray: Array<string> = new Array("0", "1", "2"); | ||
| 9 | + // private dataArray: string[] = ["0", "1", "2"]; | ||
| 10 | + private dataArray: T[] = []; | ||
| 11 | + | ||
| 12 | + constructor() { | ||
| 13 | + super(); | ||
| 14 | + // for (let i = 0; i < 100; i++) { | ||
| 15 | + // this.dataArray.push(i) | ||
| 16 | + // } | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + // 获取数据总个数 | ||
| 20 | + public totalCount(): number { | ||
| 21 | + return this.dataArray.length; | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + // 获取索引对应的Item数据 | ||
| 25 | + public getData(index: number): T { | ||
| 26 | + return this.dataArray[index]; | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + // 获取索引对应的Item数据 | ||
| 30 | + public get(index: number): T { | ||
| 31 | + return this.getData(index); | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + // 获取所有数据 | ||
| 35 | + public getDataArray(): T[] { | ||
| 36 | + return this.dataArray; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + // 增加/插入1个Item/数据,若index为undefined,则在数据尾部增加1个元素;否则,在指定索引(可为负/或大于数组长度)位置插入1个元素 | ||
| 40 | + public addItem(data: T, index?: number): void { | ||
| 41 | + if (index == undefined) { | ||
| 42 | + // 将新元素添加到数组的末尾 | ||
| 43 | + this.dataArray.push(data); | ||
| 44 | + // this.dataArray.splice(this.dataArray.length, 0, data) | ||
| 45 | + this.notifyDataAdd(this.dataArray.length - 1); | ||
| 46 | + } else { | ||
| 47 | + // 从数组中的index位置开始删除0个元素,并在同一位置插入((1个或多个))新元素,返回已删除的元素。 | ||
| 48 | + // 当index大于等于数组长度时,不删除任何数据,且data加在数组末尾 | ||
| 49 | + // 当index为负数时,其代表从数组后向前的索引位置 | ||
| 50 | + this.dataArray.splice(index, 0, data); | ||
| 51 | + this.notifyDataAdd(index); | ||
| 52 | + } | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + // 在数据尾部增加1到多个元素 | ||
| 56 | + public push(...data: T[]): void { | ||
| 57 | + this.dataArray.push(...data) | ||
| 58 | + for (let index = this.dataArray.length - data.length; index < this.dataArray.length; index++) { | ||
| 59 | + this.notifyDataAdd(index); | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + // 增加一个同类型的LazyDataSource | ||
| 64 | + public pushDataSource(data: LazyDataSource<T>): void { | ||
| 65 | + this.push(...data.dataArray) | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + // 在数据尾部增加1个元素 | ||
| 69 | + public addLastItem(data: T): void { | ||
| 70 | + this.addItem(data) | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + // 在数据开头插入1个元素 | ||
| 74 | + public addFirstItem(data: T): void { | ||
| 75 | + // 在数组的开头插入(1个或多个)新元素 | ||
| 76 | + // this.dataArray.unshift(data) | ||
| 77 | + // this.notifyDataAdd(0); | ||
| 78 | + this.addItem(data, 0) | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + // 在第2个元素位置,插入1个元素 | ||
| 82 | + public add2ndItem(data: T): void { | ||
| 83 | + this.addItem(data, 1) | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + // 在第3个元素位置,插入1个元素 | ||
| 87 | + public add3rdItem(data: T): void { | ||
| 88 | + this.addItem(data, 2) | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + // 在第4个元素位置,插入1个元素 | ||
| 92 | + public add4thItem(data: T): void { | ||
| 93 | + this.addItem(data, 3) | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + // 把from位置的item移动到to位置(暂不支持from/to为负数或大于等于数组长度) | ||
| 97 | + public moveItem(from: number, to: number): void { | ||
| 98 | + // 当from/to大于/等于数组长度时; | ||
| 99 | + if (from >= this.dataArray.length) { | ||
| 100 | + from = this.dataArray.length - 1; | ||
| 101 | + } | ||
| 102 | + if (to >= this.dataArray.length) { | ||
| 103 | + to = this.dataArray.length - 1; | ||
| 104 | + } | ||
| 105 | + // 当from/to为负时; | ||
| 106 | + let remainderFrom = from % this.dataArray.length | ||
| 107 | + if (remainderFrom < 0) { | ||
| 108 | + from = remainderFrom + this.dataArray.length | ||
| 109 | + } | ||
| 110 | + let remainderTo = to % this.dataArray.length | ||
| 111 | + if (remainderTo < 0) { | ||
| 112 | + to = remainderTo + this.dataArray.length | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + // 1.把from位置元素提出暂存 | ||
| 116 | + let tempFrom: T = this.dataArray[from]; | ||
| 117 | + // 2.把to位置元素覆盖from位置元素, | ||
| 118 | + let tempTo: T = this.dataArray[to]; | ||
| 119 | + this.updateItem(tempTo, from) | ||
| 120 | + // 3.把暂存的from位置元素覆盖to位置元素 | ||
| 121 | + this.updateItem(tempFrom, to) | ||
| 122 | + this.notifyDataMove(from, to); | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + // 删除index指定索引位置的元素 | ||
| 126 | + public deleteItem(index?: number): void { | ||
| 127 | + if (index == undefined) { | ||
| 128 | + // 删除数组的最后1个元素(倒数第1个元素) | ||
| 129 | + // this.dataArray.pop() | ||
| 130 | + this.dataArray.splice(-1, 1) | ||
| 131 | + this.notifyDataDelete(this.dataArray.length); | ||
| 132 | + } else { | ||
| 133 | + // 从数组中的index位置开始,删除1个元素 | ||
| 134 | + // 当index大于等于数组长度时,不删除任何数据 | ||
| 135 | + // 当index为负数时,其代表从数组后向前的索引位置 | ||
| 136 | + this.dataArray.splice(index, 1); | ||
| 137 | + this.notifyDataDelete(index); | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + // 删除最后1个元素 | ||
| 142 | + public pop(): void { | ||
| 143 | + this.deleteItem() | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + // 删除最后1个元素 | ||
| 147 | + public deleteLastItem(): void { | ||
| 148 | + this.deleteItem() | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + // 删除第1个元素 | ||
| 152 | + public deleteFirstItem(): void { | ||
| 153 | + this.deleteItem(0) | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + // 删除第1个元素 | ||
| 157 | + public delete1stItem(): void { | ||
| 158 | + this.deleteItem(0) | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + // 删除第2个元素 | ||
| 162 | + public delete2ndItem(): void { | ||
| 163 | + this.deleteItem(1) | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + // 删除第3个元素 | ||
| 167 | + public delete3rdItem(): void { | ||
| 168 | + this.deleteItem(2) | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + // 删除第4个元素 | ||
| 172 | + public delete4thItem(): void { | ||
| 173 | + this.deleteItem(3) | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + // 修改/更新index指定索引位置的元素 | ||
| 177 | + public updateItem(data: T, index?: number): void { | ||
| 178 | + if (index == undefined || index >= this.dataArray.length) { | ||
| 179 | + // 当不传index或index大于等于数组长度时,修改/更新数组的最后1个元素 | ||
| 180 | + this.dataArray.splice(this.dataArray.length - 1, 1, data); | ||
| 181 | + this.notifyDataChange(this.dataArray.length); | ||
| 182 | + } else { | ||
| 183 | + // 从数组中的index位置开始,删除1个元素 | ||
| 184 | + // 当index为负数时,其代表从数组后向前的索引位置 | ||
| 185 | + this.dataArray.splice(index, 1, data); | ||
| 186 | + this.notifyDataChange(index); | ||
| 187 | + } | ||
| 188 | + } | ||
| 189 | + | ||
| 190 | + // 修改/更新最后1个元素 | ||
| 191 | + public updateLastItem(data: T): void { | ||
| 192 | + this.updateItem(data) | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + // 修改/更新第1个元素 | ||
| 196 | + public updateFirstItem(data: T): void { | ||
| 197 | + this.updateItem(data, 0) | ||
| 198 | + } | ||
| 199 | + | ||
| 200 | + // 修改/更新第1个元素 | ||
| 201 | + public update2ndItem(data: T): void { | ||
| 202 | + this.updateItem(data, 0) | ||
| 203 | + } | ||
| 204 | + | ||
| 205 | + // 修改/更新第2个元素 | ||
| 206 | + public update1stItem(data: T): void { | ||
| 207 | + this.updateItem(data, 1) | ||
| 208 | + } | ||
| 209 | + | ||
| 210 | + // 修改/更新第3个元素 | ||
| 211 | + public update3rdItem(data: T): void { | ||
| 212 | + this.updateItem(data, 2) | ||
| 213 | + } | ||
| 214 | + | ||
| 215 | + // 修改/更新第4个元素 | ||
| 216 | + public update4thItem(data: T): void { | ||
| 217 | + this.updateItem(data, 3) | ||
| 218 | + } | ||
| 219 | + | ||
| 220 | + // 清空数组 | ||
| 221 | + public clear(): void { | ||
| 222 | + this.replaceAll() | ||
| 223 | + } | ||
| 224 | + | ||
| 225 | + // 把数据全部删除,再添加全部新元素 | ||
| 226 | + public replaceAll(...data: T[]): void { | ||
| 227 | + // 从数组中的0位置开始删除dataArray.length个元素,并在同一位置插入((1个或多个))新元素,返回已删除的元素。 | ||
| 228 | + this.dataArray.splice(0, this.dataArray.length, ...data); | ||
| 229 | + this.notifyDataReload() | ||
| 230 | + } | ||
| 231 | + | ||
| 232 | + // 获取指定元素的下标 | ||
| 233 | + public getIndexOf(element: T): number { | ||
| 234 | + for (let index = 0; index < this.dataArray.length; index++) { | ||
| 235 | + if (this.dataArray[index] == element) { | ||
| 236 | + return index | ||
| 237 | + } | ||
| 238 | + } | ||
| 239 | + return -1 | ||
| 240 | + } | ||
| 241 | + | ||
| 242 | + isEmpty(): boolean { | ||
| 243 | + return this.dataArray.length == 0 | ||
| 244 | + } | ||
| 245 | + | ||
| 246 | + isNotEmpty(): boolean { | ||
| 247 | + return this.dataArray.length > 0 | ||
| 248 | + } | ||
| 249 | + | ||
| 250 | + sort(comparator: (firstValue: T, secondValue: T) => number): void { | ||
| 251 | + this.dataArray.sort(comparator) | ||
| 252 | + } | ||
| 253 | +} |
| 1 | +import hilog from '@ohos.hilog'; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * Log level define | ||
| 5 | + * | ||
| 6 | + * @syscap SystemCapability.HiviewDFX.HiLog | ||
| 7 | + */ | ||
| 8 | +enum LogLevel { | ||
| 9 | + DEBUG = 3, | ||
| 10 | + INFO = 4, | ||
| 11 | + WARN = 5, | ||
| 12 | + ERROR = 6, | ||
| 13 | + FATAL = 7 | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * Common log for all features. | ||
| 18 | + * | ||
| 19 | + * @param {string} prefix Identifies the log tag. | ||
| 20 | + */ | ||
| 21 | +export class Logger { | ||
| 22 | + private static domain: number = 0xFF00; | ||
| 23 | + private static prefix: string = 'PeopleDailyApp'; | ||
| 24 | + private static format: string = `%{public}s, %{public}s`; | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * constructor. | ||
| 28 | + * | ||
| 29 | + * @param Prefix Identifies the log tag. | ||
| 30 | + * @param domain Domain Indicates the service domain, which is a hexadecimal integer ranging from 0x0 to 0xFFFFF. | ||
| 31 | + */ | ||
| 32 | + constructor(prefix: string = Logger.prefix, domain: number = Logger.domain) { | ||
| 33 | + Logger.prefix = prefix; | ||
| 34 | + Logger.domain = domain; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + static debug(...args: string[]) { | ||
| 38 | + hilog.debug(Logger.domain, Logger.prefix, Logger.format, args); | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + static info(...args: string[]) { | ||
| 42 | + hilog.info(Logger.domain, Logger.prefix, Logger.format, args); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + static warn(...args: string[]) { | ||
| 46 | + hilog.warn(Logger.domain, Logger.prefix, Logger.format, args); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + static error(...args: string[]) { | ||
| 50 | + hilog.error(Logger.domain, Logger.prefix, Logger.format, args); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + static fatal(...args: string[]) { | ||
| 54 | + hilog.fatal(Logger.domain, Logger.prefix, Logger.format, args); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + static isLoggable(level: LogLevel) { | ||
| 58 | + hilog.isLoggable(Logger.domain, Logger.prefix, level); | ||
| 59 | + } | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +export default new Logger() |
| 1 | +import buffer from '@ohos.buffer'; | ||
| 2 | +import { Logger } from './Logger'; | ||
| 3 | + | ||
| 4 | +const TAG = "ResourcesUtils"; | ||
| 5 | + | ||
| 6 | +// 默认针对entry/src/main/resources/rawfile目录下的文件: | ||
| 7 | +const JSON_FILE_NAME = "agconnect-services.json"; | ||
| 8 | + | ||
| 9 | +export class ResourcesUtils { | ||
| 10 | + /** | ||
| 11 | + * 获取资源字符串内容 | ||
| 12 | + * @param context | ||
| 13 | + * @param filename 仅文件名(不包含路径,文件在src\main\resources\rawfile下),如:"agconnect-services.json",test.xml, | ||
| 14 | + * @returns text 字符串 | ||
| 15 | + */ | ||
| 16 | + static getResourcesText(context: Context, filename: string): Promise<string> { | ||
| 17 | + return new Promise((success, error) => { | ||
| 18 | + Logger.info(TAG, "ResourcesUtils getResourcesText filename:" + filename); | ||
| 19 | + context.resourceManager.getRawFileContent(filename).then((content: Uint8Array) => { | ||
| 20 | + if (!content) { | ||
| 21 | + Logger.warn(TAG, 'getResourcesText then content is empty'); | ||
| 22 | + error("file is empty"); | ||
| 23 | + return | ||
| 24 | + } | ||
| 25 | + try { | ||
| 26 | + let text = buffer.from(content).toString("utf8"); | ||
| 27 | + if (text) { | ||
| 28 | + Logger.info(TAG, "getResourcesText then text:" + text); | ||
| 29 | + success(text); | ||
| 30 | + } else { | ||
| 31 | + Logger.warn(TAG, "getResourcesText then text is empty"); | ||
| 32 | + error("resources file text is empty"); | ||
| 33 | + } | ||
| 34 | + } catch (err) { | ||
| 35 | + // 转换异常 | ||
| 36 | + Logger.error(TAG, `getResourcesText catch err.: ${err}`); | ||
| 37 | + } | ||
| 38 | + }).catch((err: Error) => { | ||
| 39 | + Logger.error(TAG, `getResourcesText getRawFileContent catch, error.name : ${err.name}, error.message:${err.message}`); | ||
| 40 | + error(err); | ||
| 41 | + }) | ||
| 42 | + }) | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * 获取资源文件并转为JSON | ||
| 47 | + * | ||
| 48 | + * @param appContext 上下文 | ||
| 49 | + * @param filename 仅文件名(不包含路径,文件在src\main\resources\rawfile下),如:"agconnect-services.json" | ||
| 50 | + * SubscribeListData.json | ||
| 51 | + * @returns JSON Object | ||
| 52 | + * | ||
| 53 | + * 调用方式: | ||
| 54 | + * let compRes: MGHttp.ResponseDTO<BodyComponent> = await ResourcesUtils.getResourcesJson<MGHttp.ResponseDTO<BodyComponent>>(context, 'model/componentList.json'); | ||
| 55 | + */ | ||
| 56 | + static getResourcesJson<R>(context:Context, filename: string): Promise<R> { | ||
| 57 | + Logger.info(TAG, `getResourcesJson filename: ${filename}`); | ||
| 58 | + return new Promise<R>((resolve, reject) => { | ||
| 59 | + ResourcesUtils.getResourcesText(context, filename) | ||
| 60 | + .then((text: string) => { | ||
| 61 | + try { | ||
| 62 | + // let config: R = JSON.parse(text) | ||
| 63 | + let config:R = JSON.parse(text) as R; | ||
| 64 | + if (config) { | ||
| 65 | + Logger.info(TAG, "getResourcesJson parse JSON file success."); | ||
| 66 | + // Logger.info(TAG, `getResourcesJson config : ${JSON.stringify(config)}`); | ||
| 67 | + resolve(config); | ||
| 68 | + } else { | ||
| 69 | + reject("getResourcesJson parse JSON file result is empty"); | ||
| 70 | + } | ||
| 71 | + } catch (err) { | ||
| 72 | + // json解析异常 | ||
| 73 | + Logger.error(TAG, `getResourcesJson catch parse failed.: ${err}`); | ||
| 74 | + reject(err) | ||
| 75 | + } | ||
| 76 | + }) | ||
| 77 | + .catch((error:Error) => { | ||
| 78 | + reject(error) | ||
| 79 | + }) | ||
| 80 | + }) | ||
| 81 | + } | ||
| 82 | +} |
| 1 | +import data_preferences from '@ohos.data.preferences'; | ||
| 2 | + | ||
| 3 | +/* | ||
| 4 | +// SPHelper.default.get("key1", "defValue1").then((value1) => { | ||
| 5 | +// this.message = value1.toString(); | ||
| 6 | +// }) | ||
| 7 | + | ||
| 8 | +// let value2: string = await SPHelper.default.get("key2", "defValue2"); | ||
| 9 | +// this.message = result; | ||
| 10 | +* | ||
| 11 | +* 单例模式 | ||
| 12 | + */ | ||
| 13 | +export class SPHelper { | ||
| 14 | + private static context: Context; | ||
| 15 | + private static spFilename: string = '__SPHelper'; | ||
| 16 | + | ||
| 17 | + static init(context: Context) { | ||
| 18 | + SPHelper.context = context; | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + static setSpFilename(spFilename: string) { | ||
| 22 | + SPHelper.spFilename = spFilename; | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + // 静态属性 | ||
| 26 | + static default: SPHelper = new SPHelper(); | ||
| 27 | + | ||
| 28 | + // 私有构造函数 | ||
| 29 | + private constructor() { | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + private async getVideoPreferences(): Promise<data_preferences.Preferences> { | ||
| 33 | + let preferences: data_preferences.Preferences = await data_preferences.getPreferences(SPHelper.context, SPHelper.spFilename); | ||
| 34 | + return preferences; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + | ||
| 38 | + async save(key: string, value: data_preferences.ValueType) { | ||
| 39 | + const preferences: data_preferences.Preferences = await this.getVideoPreferences(); | ||
| 40 | + await preferences.put(key, value) | ||
| 41 | + await preferences.flush() | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + | ||
| 45 | + async get(key: string, defValue: data_preferences.ValueType): Promise<data_preferences.ValueType> { | ||
| 46 | + const preferences: data_preferences.Preferences = await this.getVideoPreferences(); | ||
| 47 | + return await preferences.get(key, defValue); | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + async has(key: string): Promise<boolean> { | ||
| 51 | + const preferences: data_preferences.Preferences = await this.getVideoPreferences(); | ||
| 52 | + return await preferences.has(key); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + | ||
| 56 | + async delete(key: string) { | ||
| 57 | + const preferences: data_preferences.Preferences = await this.getVideoPreferences(); | ||
| 58 | + preferences.delete(key).then(async () => { | ||
| 59 | + await preferences.flush(); | ||
| 60 | + }).catch((err: Error) => { | ||
| 61 | + // Logger.error(TAG, 'Failed to delete the key. Cause: ' + err); | ||
| 62 | + }); | ||
| 63 | + } | ||
| 64 | +} |
| 1 | +/** | ||
| 2 | + * StringUtils class. | ||
| 3 | + */ | ||
| 4 | +export class StringUtils { | ||
| 5 | + /** | ||
| 6 | + * The String utils tag. | ||
| 7 | + */ | ||
| 8 | + private static readonly TAG: string = 'StringUtils'; | ||
| 9 | + // 评分-整数或浮点数 | ||
| 10 | + private static readonly SCORE_REG_EXP = RegExp(/^(\d+)(\.\d+)?$/); | ||
| 11 | + | ||
| 12 | + /** | ||
| 13 | + * Check string is empty. | ||
| 14 | + * | ||
| 15 | + * @param {object} any | ||
| 16 | + * @return {boolean} true(empty) | ||
| 17 | + */ | ||
| 18 | + static isEmpty(...params: any): boolean { | ||
| 19 | + if (params.length === 0) { | ||
| 20 | + return true; | ||
| 21 | + } | ||
| 22 | + for (const param of params) { | ||
| 23 | + if (!param) { // param === undefined || param === null || param === ''; | ||
| 24 | + return true; | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | + return false; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * Check obj is not empty. | ||
| 32 | + * | ||
| 33 | + * @param {object} obj | ||
| 34 | + * @return {boolean} true(not empty) | ||
| 35 | + */ | ||
| 36 | + static isNotEmpty(obj: any): boolean { | ||
| 37 | + // return (obj && obj !== ''); | ||
| 38 | + // 或 | ||
| 39 | + return (obj !== undefined && obj !== null && obj !== ''); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + | ||
| 43 | + static parseNumber(input: string): number { | ||
| 44 | + // let input: string = '135' // 135 | ||
| 45 | + // let input: string = '135T' // NaN | ||
| 46 | + // let input: string = 'ytr' // NaN | ||
| 47 | + // let input: string = '' // 0 | ||
| 48 | + // let input: string = null // 0 | ||
| 49 | + // let input: string = undefined // NaN | ||
| 50 | + const parsedInt = Number(input) | ||
| 51 | + if (!isNaN(parsedInt)) { | ||
| 52 | + return parsedInt | ||
| 53 | + } else { | ||
| 54 | + return 0 | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + static isScore(text: string): boolean { | ||
| 59 | + return StringUtils.SCORE_REG_EXP.test(text); | ||
| 60 | + } | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +// export default new StringUtils(); |
PeopleDaily_Harmony/wdNetwork/.gitignore
0 → 100644
PeopleDaily_Harmony/wdNetwork/hvigorfile.ts
0 → 100644
| 1 | +{ | ||
| 2 | + "lockfileVersion": 1, | ||
| 3 | + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", | ||
| 4 | + "specifiers": { | ||
| 5 | + "@ohos/axios@^2.1.1": "@ohos/axios@2.1.1" | ||
| 6 | + }, | ||
| 7 | + "packages": { | ||
| 8 | + "@ohos/axios@2.1.1": { | ||
| 9 | + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/axios/-/axios-2.1.1.har", | ||
| 10 | + "integrity": "sha512-EQax257+eKKT0Rx7h6N6xvmKbDRWDjCCWOP2vyyktySFwvjtypXuXmQKEvRjmAalR6cqf8mbfhWmpg0bD9OQ3w==" | ||
| 11 | + } | ||
| 12 | + } | ||
| 13 | +} |
| 1 | +import type { AxiosError, AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from '@ohos/axios'; | ||
| 2 | +import axios, { HttpStatusCode } from '@ohos/axios'; | ||
| 3 | + | ||
| 4 | +// import type ResponseDTO from '../models/ResponseDTO'; | ||
| 5 | + | ||
| 6 | +// const key = 'xxxxyyyyzzz' | ||
| 7 | + | ||
| 8 | +// const apiBaseUrl = 'http://127.0.0.1:5566' | ||
| 9 | +// const apiBaseUrl = "https://display-sc.miguvideo.com/display/v3/static"; | ||
| 10 | +// console.log("apiBaseUrl:" + apiBaseUrl); | ||
| 11 | +// axios.defaults.baseURL = apiBaseUrl | ||
| 12 | + | ||
| 13 | +// 使跨域请求带上cookie等用户认证凭据 | ||
| 14 | +// axios.defaults.withCredentials = true; | ||
| 15 | + | ||
| 16 | +// 实例化axios | ||
| 17 | +const instance: AxiosInstance = axios.create({ | ||
| 18 | + // axios请求基础URL(包括端口号) | ||
| 19 | + // baseURL: apiBaseUrl, | ||
| 20 | + // 单位毫秒 | ||
| 21 | + timeout: 15000, | ||
| 22 | + // 跨域请求时,携带cookie等用户认证凭据 | ||
| 23 | + // withCredentials: true | ||
| 24 | +}); | ||
| 25 | + | ||
| 26 | +// 添加请求拦截器 | ||
| 27 | +instance.interceptors.request.use( | ||
| 28 | + (config: InternalAxiosRequestConfig) => { | ||
| 29 | + // 在发送请求之前 | ||
| 30 | + if (!config.headers["Content-Type"]) { | ||
| 31 | + config.headers["Content-Type"] = "application/json;charset=utf-8"; | ||
| 32 | + } | ||
| 33 | + // 公共请求参数 | ||
| 34 | + // config.params.key = key | ||
| 35 | + return config; | ||
| 36 | + }, | ||
| 37 | + (error: AxiosError) => { | ||
| 38 | + // 请求错误 | ||
| 39 | + console.log(`全局请求失败拦截,message:${error.message}`) | ||
| 40 | + return Promise.reject(error); | ||
| 41 | + } | ||
| 42 | +); | ||
| 43 | + | ||
| 44 | +// // GET /api/success | ||
| 45 | +// { | ||
| 46 | +// "code": 0, | ||
| 47 | +// "message": "请求成功", | ||
| 48 | +// "data": { | ||
| 49 | +// "name": "管理员" | ||
| 50 | +// } | ||
| 51 | +// } | ||
| 52 | +// // GET /api/fail | ||
| 53 | +// { | ||
| 54 | +// "code": -1, | ||
| 55 | +// "message": "请求失败:XXX错误!", | ||
| 56 | +// "data": null | ||
| 57 | +// } | ||
| 58 | + | ||
| 59 | +// 添加响应拦截器 | ||
| 60 | +instance.interceptors.response.use( | ||
| 61 | + // 响应拦截器response类型就是Axios.request<T = any, R = AxiosResponse<T>, D = any>中的泛型R | ||
| 62 | + // 泛型 T 就是服务器返回数据的类型 | ||
| 63 | + // 泛型 R 就是这个泛型 T 数据经过 axios 包装一层得到的 response 对象的类型,而 request 方法的返回值是一个 Promise,其值就是成功态的 R,也就是 response对象。 | ||
| 64 | + (response: AxiosResponse) => { | ||
| 65 | + // response为AxiosResponse类型,含有config\data\headers\request\status\statusText属 | ||
| 66 | + // console.dir(response) | ||
| 67 | + // 正常响应,可对响应数据做通用处理 | ||
| 68 | + // 2xx 范围内的状态码都会触发该函数。 | ||
| 69 | + if (response.status === HttpStatusCode.Ok) { | ||
| 70 | + // 直接返回response,当然你也可以只返回response.data | ||
| 71 | + // return response; | ||
| 72 | + // 也可以先解析服务器返回的状态码,可判断code处理通用逻辑 | ||
| 73 | + // const { code, message, data } = response.data | ||
| 74 | + // if (code === 0) { | ||
| 75 | + // // 将组件用的数据返回 | ||
| 76 | + // return data | ||
| 77 | + // } else { | ||
| 78 | + // // 处理业务错误。 | ||
| 79 | + // console.log(`处理业务,message:${message}`) | ||
| 80 | + // return Promise.reject(new Error(message)) | ||
| 81 | + // } | ||
| 82 | + // const data: ResponseBean<any> = response.data | ||
| 83 | + // 改造返回的数据,即将AxiosResponse的data返回,服务端返回的数据 | ||
| 84 | + return response.data; | ||
| 85 | + } else { | ||
| 86 | + return Promise.reject(response); | ||
| 87 | + } | ||
| 88 | + }, | ||
| 89 | + (error: AxiosError) => { | ||
| 90 | + // 异常响应 | ||
| 91 | + // console.log('全局响应失败拦截') | ||
| 92 | + // console.log(error.request) | ||
| 93 | + // console.log(error.response) | ||
| 94 | + // 这里用来处理http常见错误,进行全局提示 | ||
| 95 | + let message = buildErrorMsg(error.response?.status); | ||
| 96 | + // 错误消息可以使用全局弹框展示出来 | ||
| 97 | + console.log(`httpStatus:${error.response?.status}-${message},请检查网络或联系管理员!`) | ||
| 98 | + return Promise.reject(error); | ||
| 99 | + } | ||
| 100 | +); | ||
| 101 | + | ||
| 102 | +export default instance; | ||
| 103 | + | ||
| 104 | +function buildErrorMsg(httpStatus: number):string { | ||
| 105 | + let message = ""; | ||
| 106 | + switch (httpStatus) { | ||
| 107 | + case HttpStatusCode.BadRequest: | ||
| 108 | + message = "请求错误(400)"; | ||
| 109 | + break; | ||
| 110 | + case HttpStatusCode.Unauthorized: | ||
| 111 | + message = "未授权(或token 失效),请重新登录(401)"; | ||
| 112 | + // 可以触发退出的 action | ||
| 113 | + // 可以做清空storage并跳转到登录页的操作 | ||
| 114 | + break; | ||
| 115 | + case HttpStatusCode.Forbidden: | ||
| 116 | + message = "拒绝访问(403)"; | ||
| 117 | + break; | ||
| 118 | + case HttpStatusCode.NotFound: | ||
| 119 | + message = "请求出错(404)"; | ||
| 120 | + // 请求地址错误 | ||
| 121 | + break; | ||
| 122 | + case HttpStatusCode.RequestTimeout: | ||
| 123 | + message = "请求超时(408)"; | ||
| 124 | + break; | ||
| 125 | + case HttpStatusCode.InternalServerError: | ||
| 126 | + message = "服务器错误(500)"; | ||
| 127 | + // 服务器故障 | ||
| 128 | + break; | ||
| 129 | + case HttpStatusCode.NotImplemented: | ||
| 130 | + message = "服务未实现(501)"; | ||
| 131 | + break; | ||
| 132 | + case HttpStatusCode.BadGateway: | ||
| 133 | + message = "网络错误(502)"; | ||
| 134 | + break; | ||
| 135 | + case HttpStatusCode.ServiceUnavailable: | ||
| 136 | + message = "服务不可用(503)"; | ||
| 137 | + break; | ||
| 138 | + case HttpStatusCode.GatewayTimeout: | ||
| 139 | + message = "网络超时(504)"; | ||
| 140 | + break; | ||
| 141 | + case HttpStatusCode.HttpVersionNotSupported: | ||
| 142 | + message = "HTTP版本不受支持(505)"; | ||
| 143 | + break; | ||
| 144 | + default: | ||
| 145 | + // 网络连接故障 | ||
| 146 | + message = `连接出错(${httpStatus})!`; | ||
| 147 | + } | ||
| 148 | + return message; | ||
| 149 | +} |
| 1 | +import type { AxiosError, AxiosRequestConfig} from '@ohos/axios'; | ||
| 2 | +import service from './AxiosRequest'; | ||
| 3 | + | ||
| 4 | +export class HttpRequest { | ||
| 5 | + // 加入泛型限定,返回数据类型为T, | ||
| 6 | + static request<T = any>(config: AxiosRequestConfig): Promise<T> { | ||
| 7 | + return new Promise<T>((resolve, reject) => { | ||
| 8 | + service.request<any, T>(config) | ||
| 9 | + .then((res:T) => { | ||
| 10 | + resolve(res) | ||
| 11 | + }) | ||
| 12 | + .catch((err:AxiosError) => { | ||
| 13 | + reject(err) | ||
| 14 | + }) | ||
| 15 | + }) | ||
| 16 | + // return service.request<any, T>(config) | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + static get<T = any>(url: string, config?: AxiosRequestConfig): Promise<T> { | ||
| 20 | + return service.get(url, config) | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + static delete<T = any>(url: string, config?: AxiosRequestConfig): Promise<T> { | ||
| 24 | + return service.delete(url, config) | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + static post<T = any>(url: string, data?: object, config?: AxiosRequestConfig): Promise<T> { | ||
| 28 | + return service.post(url, data, config) | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + static put<T = any>(url: string, data?: object, config?: AxiosRequestConfig): Promise<T> { | ||
| 32 | + return service.put(url, data, config) | ||
| 33 | + } | ||
| 34 | +} |
| 1 | +{ | ||
| 2 | + "module": { | ||
| 3 | + "name": "wdNetwork", | ||
| 4 | + "type": "shared", | ||
| 5 | + "description": "$string:shared_desc", | ||
| 6 | + "deviceTypes": [ | ||
| 7 | + "phone", | ||
| 8 | + "tablet" | ||
| 9 | + ], | ||
| 10 | + "deliveryWithInstall": true, | ||
| 11 | + "requestPermissions": [ | ||
| 12 | + { | ||
| 13 | + "name": "ohos.permission.INTERNET" | ||
| 14 | + } | ||
| 15 | + ] | ||
| 16 | + } | ||
| 17 | +} |
-
Please register or login to post a comment