方舟 - 比特日记
方舟
复制成功
1
2
3
1cookie 4kb
2localStorage 本地存储数据,5MB
3sessionStorage 会话级别存储,关闭浏览器消失
cookie 4kb
localStorage 本地存储数据,5MB
sessionStorage 会话级别存储,关闭浏览器消失
用户首选项
复制成功
1
2
1文本形式,一般存储配置,一次性加载到内存
2存储系统字体、系统主题,不适合存储大量数据
文本形式,一般存储配置,一次性加载到内存
存储系统字体、系统主题,不适合存储大量数据
键值型数据库
复制成功
关系型数据库
复制成功
1
2
1行、列形式存储,适合存储大量数据
2可以进行增删改查,SQLite
行、列形式存储,适合存储大量数据
可以进行增删改查,SQLite
复制成功
1
2
3
4
5
6
7
1integer 整型
2real 浮点型
3text 文本
4boolean 布尔值
5blob 二进制文件
6date 日期
7datetime 日期时间
integer 整型
real 浮点型
text 文本
boolean 布尔值
blob 二进制文件
date 日期
datetime 日期时间
建表
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
1import { relationalStore } from "@kit.ArkData"
2
3class CardDBUtils {
4 private rdbStore: relationalStore.RdbStore | null = null
5
6 /**
7 * 初始化数据库
8 *
9 * @param context
10 * @param tableName
11 */
12 initCardDB(context: Context, tableName: string) {
13 // 初始化配置
14 const STORE_CONFIG: relationalStore.StoreConfig = {
15 name: 'GoodMall.db', // 数据库名
16 securityLevel: relationalStore.SecurityLevel.S1, // 数据库安全级别
17 //encrypt: false, // 数据库是否加密
18 //customDir:'customDir/subCustomDir'
19 }
20
21 // 建表SQL
22 const SQL_CREATE_TABLE = `create table if not exists ${tableName} (
23 id integer primary key autoincrement,
24 good_id text not null,
25 good_name text not null,
26 good_count integer
27 )`
28
29 // 初始化数据库, 异步
30 relationalStore.getRdbStore(context, STORE_CONFIG, (err, store) => {
31 if (err) {
32 console.log(`get rdb failed, ${err.code}, ${err.message}`)
33 return
34 } else {
35 console.log(`get rdb success`)
36 this.rdbStore = store
37
38 // 创建数据表
39 store.executeSql(SQL_CREATE_TABLE, (err) => {
40 if (err) {
41 console.log(`create table ${tableName} failed, ${err.code}, ${err.message}`)
42 } else {
43 console.log(`create table ${tableName} success`)
44 }
45 })
46 }
47 })
48 }
49
50 insertCardDB(tableName: string) {
51
52 }
53
54 /**
55 *
56 * @param tableName
57 * @param column 投影列
58 */
59 queryCardDB(tableName: string, column: Array<String>) {
60
61 }
62}
63
64const cardDBUtils = new CardDBUtils()
65
66export { cardDBUtils }
import { relationalStore } from "@kit.ArkData"
class CardDBUtils {
private rdbStore: relationalStore.RdbStore | null = null
/**
* 初始化数据库
*
* @param context
* @param tableName
*/
initCardDB(context: Context, tableName: string) {
// 初始化配置
const STORE_CONFIG: relationalStore.StoreConfig = {
name: 'GoodMall.db', // 数据库名
securityLevel: relationalStore.SecurityLevel.S1, // 数据库安全级别
//encrypt: false, // 数据库是否加密
//customDir:'customDir/subCustomDir'
}
// 建表SQL
const SQL_CREATE_TABLE = `create table if not exists ${tableName} (
id integer primary key autoincrement,
good_id text not null,
good_name text not null,
good_count integer
)`
// 初始化数据库, 异步
relationalStore.getRdbStore(context, STORE_CONFIG, (err, store) => {
if (err) {
console.log(`get rdb failed, ${err.code}, ${err.message}`)
return
} else {
console.log(`get rdb success`)
this.rdbStore = store
// 创建数据表
store.executeSql(SQL_CREATE_TABLE, (err) => {
if (err) {
console.log(`create table ${tableName} failed, ${err.code}, ${err.message}`)
} else {
console.log(`create table ${tableName} success`)
}
})
}
})
}
insertCardDB(tableName: string) {
}
/**
*
* @param tableName
* @param column 投影列
*/
queryCardDB(tableName: string, column: Array<String>) {
}
}
const cardDBUtils = new CardDBUtils()
export { cardDBUtils }
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
2import { hilog } from '@kit.PerformanceAnalysisKit';
3import { window } from '@kit.ArkUI';
4import { cardDBUtils } from '../utils/CardDBUtils';
5
6const DOMAIN = 0x0000;
7
8export default class EntryAbility extends UIAbility {
9 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
10 this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
11 hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
12 }
13
14 onDestroy(): void {
15 hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
16 }
17
18 onWindowStageCreate(windowStage: window.WindowStage): void {
19 // 加载数据库
20 cardDBUtils.initCardDB(this.context, 'goodcard')
21....
import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import { cardDBUtils } from '../utils/CardDBUtils';
const DOMAIN = 0x0000;
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// 加载数据库
cardDBUtils.initCardDB(this.context, 'goodcard')
....
复制成功
1
2
1get rdb success
2create table goodcard success
get rdb success
create table goodcard success
新增
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
1import { router } from '@kit.ArkUI';
2import { findDataByGetApi, findDataByPostApi } from '../apis/ProductApi';
3import { ParamsType } from '../utils/ParamsType';
4import { Evaluate, GoodDetail } from '../viewModel/GoodDetailModel';
5import { ProductDataModel } from '../viewModel/HomeModel';
6import { JSON } from '@kit.ArkTS';
7import { BreakPointConstants } from '../constants/BreakPointConstants';
8import { BreakPointSystem } from '../utils/BreakPointSystem';
9import { relationalStore } from '@kit.ArkData';
10import { cardDBUtils } from '../utils/CardDBUtils';
11
12@Extend(Button)
13function titleButton() {
14 .backgroundColor('rgba(0,0,0,0.1)')
15 .width(30)
16 .height(30)
17 .borderRadius(50)
18}
19
20@Entry({ routeName: 'detail' })
21@Component
22struct Page03_Detail {
23 @State message: string = 'Detail Page';
24 @State gid: string = 'aa'
25 @State evaluate: Evaluate = { 'userId': '1', 'desc': '评论' }
26 @StorageProp(BreakPointConstants.CURRENT_BREAKPOINT) currentBreakPoint: string = 'sm'
27 @State goodDetail: GoodDetail = {
28 id: '1',
29 add_time: '',
30 cat_id: '',
31 cat_one_id: '',
32 cat_two_id: '',
33 cat_three_id: '',
34 good_id: '1234',
35 good_small_logo: ['app.media.bird', 'app.media.animal', 'app.media.bird', 'app.media.animal'],
36 good_big_logo: 'app.media.bird',
37 good_name: '宠物电视',
38 good_number: '',
39 good_price: '1000',
40 good_weight: '',
41 hot_number: '',
42 is_promote: '',
43 upd_time: '',
44 evaluate: [this.evaluate]
45 }
46 @State swiperIndex: number = 0
47 private breakPointSystem = new BreakPointSystem()
48
49 // 挂载完成后获取数据
50 aboutToAppear(): void {
51 const params = router.getParams()
52 console.log(JSON.stringify(params))
53 // 断言告诉编辑器, 明确知道params对象数据类型
54 this.gid = (params as ParamsType<string>).value
55 this.fetchDetailData(this.gid)
56 this.breakPointSystem.register()
57 console.log(this.currentBreakPoint)
58 }
59
60 addCard = () => {
61 const valueBucketDetail: relationalStore.ValuesBucket = {
62 'good_id': this.goodDetail.good_id,
63 'good_name': this.goodDetail.good_name,
64 'good_big_logo': this.goodDetail.good_big_logo,
65 'good_code': this.goodDetail.good_id,
66 'good_price': Number(this.goodDetail.good_price),
67 'good_count': 1,
68 'good_checked': 0
69 }
70
71 cardDBUtils.insertCardDB('goodcard', valueBucketDetail)
72 console.log('add card data success')
73 }
74 fetchDetailData = async (id: string) => {
75 const param: ProductDataModel = new ProductDataModel()
76 param.cat_id = '1'
77 await findDataByPostApi<ProductDataModel, ProductDataModel>(6, param).then(res => {
78 console.log('111')
79 console.log(JSON.stringify(res))
80 console.log('222')
81 })
82 }
83
84 @Builder
85 bottomMenu() {
86 GridRow({
87 columns: { sm: 9, md: 10, lg: 12 }
88 }) {
89 GridCol({
90 span: { sm: 2, md: 3, lg: 3 }
91 }) {
92 this.imageAndText($r('app.media.startIcon'), '首页')
93 }
94 .width('100%')
95 .height('100%')
96
97 GridCol({
98 span: { sm: 2, md: 3, lg: 3 }
99 }) {
100 this.imageAndText($r('app.media.startIcon'), '购物车')
101 }
102 .width('100%')
103 .height('100%')
104
105 GridCol({
106 span: { sm: 5, md: 4, lg: 6 }
107 }) {
108 Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
109 Column() {
110 Text('加入购物车')
111 .fontSize(14)
112 .fontColor(Color.White)
113 .onClick(this.addCard)
114 }
115 .alignItems(HorizontalAlign.Center)
116 .justifyContent(FlexAlign.Center)
117 .width('50%')
118 .height('100%')
119 .backgroundColor(Color.Green)
120
121 Column() {
122 Text('立即购买')
123 .fontSize(14)
124 .fontColor(Color.White)
125 }
126 .alignItems(HorizontalAlign.Center)
127 .justifyContent(FlexAlign.Center)
128 .width('50%')
129 .height('100%')
130 .backgroundColor(Color.Orange)
131 }
132 .width('100%')
133 .height(50)
134 .backgroundColor('#f5f5f5')
135 .margin({
136 top: 5
137 })
138 }
139 .width('100%')
140 .height('100%')
141 .backgroundColor(Color.Orange)
142 }
143 }
144
145 @Builder
146 imageAndText(imageSrc: Resource, text: string) {
147 Column() {
148 Image(imageSrc)
149 .width(22)
150 Text(text)
151 .fontSize(12)
152 .fontColor('#99000000')
153 .margin({
154 top: 4
155 })
156 }
157 .justifyContent(FlexAlign.Center)
158 .alignItems(HorizontalAlign.Center)
159 .width('100%')
160 .height('100%')
161 }
162
163 @Builder
164 customSwiper(payload: string[]) {
165 Column() {
166 Stack({ alignContent: Alignment.BottomEnd }) {
167 // 轮播图组件
168 Swiper() {
169 ForEach(payload, (item: string, index: number) => {
170 Flex({ justifyContent: FlexAlign.Center }) {
171 Image($r(item))
172 .height('100%')
173 .objectFit(ImageFit.Cover)
174 }
175 }, (item: string) => item)
176 }
177 .indicator(false)
178 .width('100%')
179 .height('100%')
180 .onChange((index: number) => {
181 this.swiperIndex = index
182 })
183
184 // 构建指示器
185 Text(`${this.swiperIndex + 1}/${payload.length}`)
186 .fontSize(12)
187 .fontColor(Color.White)
188 .textAlign(TextAlign.Center)
189 .width(35)
190 .lineHeight(18)
191 .backgroundColor('#66000000')
192 .borderRadius(9)
193 .margin({
194 right: 16,
195 bottom: 16
196 })
197 }
198 .height(334)
199 .width('100%')
200 }
201 .height(this.currentBreakPoint == BreakPointConstants.BREAKPOINT_LG ? '100%' : 334)
202 .backgroundColor(Color.White)
203 }
204
205 @Styles
206 boxCommonStyles(){
207 .backgroundColor(Color.White)
208 .borderRadius(16)
209 .padding({
210 left: 12,
211 right: 12,
212 top: 16,
213 bottom: 16
214 })
215 .margin({
216 top: 12
217 })
218 .width('100%')
219 }
220
221 @Builder
222 titleBar(detail: GoodDetail) {
223 Flex({ direction: FlexDirection.Column }) {
224 Text(`¥${this.goodDetail.good_price}`)
225 .fontSize(20)
226 .fontColor(Color.Brown)
227 Text(detail.good_name)
228 .fontSize(16)
229 .fontColor(Color.Black)
230 Row() {
231 // 添加3个小图标
232 }
233 }
234 .height(100)
235 .boxCommonStyles()
236 }
237
238 @Builder
239 ChooseTypeBar() {
240 Flex() {
241
242 }
243 .boxCommonStyles()
244 .height(50)
245 }
246
247 @Builder
248 ServiceBar() {
249 Flex() {
250
251 }
252 .boxCommonStyles()
253 .height(130)
254 }
255
256 @Builder
257 UserEvaluateBar() {
258 Flex() {
259 Text('评论')
260 }
261 .boxCommonStyles()
262 .height(120)
263 }
264
265 build() {
266 Stack({ alignContent: Alignment.TopStart }) {
267 // 内容区域
268 Flex({ direction: FlexDirection.Column }) {
269 Scroll() {
270 GridRow({
271 columns: { sm: 4, md: 8, lg: 12 },
272 gutter: 12
273 }) {
274 // 存放轮播图
275 GridCol({
276 span: { sm: 4, md: 8, lg: 5 }
277 }) {
278 this.customSwiper(this.goodDetail.good_small_logo)
279 }
280
281 GridCol({
282 span: { sm: 4, md: 8, lg: 7 }
283 }) {
284 Column() {
285 // 价格和标题
286 this.titleBar(this.goodDetail)
287 // 规则模块
288 this.ChooseTypeBar()
289 // 服务模块
290 this.ServiceBar()
291 // 评论模块
292 this.UserEvaluateBar()
293 // 商品展示图
294
295 }
296 .width('100%')
297 .padding({ left: 10, right: 10 })
298 }
299 }
300 }
301 .width('100%')
302 .flexGrow(1)
303
304 // 底部导航
305 GridRow({
306 columns: { sm: 4, md: 8, lg: 12 },
307 gutter: 12
308 }) {
309 GridCol({
310 span: { sm: 4, md: 6, lg: 6 },
311 offset: { md: 1, lg: 3 }
312 }) {
313 // 页面局部设计
314 this.bottomMenu();
315 }
316 }
317 .width('100%')
318 .height(this.currentBreakPoint == BreakPointConstants.BREAKPOINT_LG ? 70 : 60)
319 .backgroundColor(Color.Pink)
320 }
321
322 // 返回按钮
323 Flex({ justifyContent: FlexAlign.SpaceBetween }) {
324 // 返回按钮
325 Button() {
326 Image($r('app.media.startIcon'))
327 .width(28)
328 }
329 .titleButton()
330 .onClick((event: ClickEvent) => {
331 router.back()
332 })
333
334 // 分享按钮
335 Button() {
336 Image($r('app.media.startIcon'))
337 .width(28)
338 }
339 .titleButton()
340 .onClick((event: ClickEvent) => {
341
342 })
343 }
344 .margin({
345 top: 20,
346 left: 20,
347 right: 20
348 })
349 }
350 .backgroundColor('#f1f3f5')
351 .width('100%')
352 }
353}
import { router } from '@kit.ArkUI';
import { findDataByGetApi, findDataByPostApi } from '../apis/ProductApi';
import { ParamsType } from '../utils/ParamsType';
import { Evaluate, GoodDetail } from '../viewModel/GoodDetailModel';
import { ProductDataModel } from '../viewModel/HomeModel';
import { JSON } from '@kit.ArkTS';
import { BreakPointConstants } from '../constants/BreakPointConstants';
import { BreakPointSystem } from '../utils/BreakPointSystem';
import { relationalStore } from '@kit.ArkData';
import { cardDBUtils } from '../utils/CardDBUtils';
@Extend(Button)
function titleButton() {
.backgroundColor('rgba(0,0,0,0.1)')
.width(30)
.height(30)
.borderRadius(50)
}
@Entry({ routeName: 'detail' })
@Component
struct Page03_Detail {
@State message: string = 'Detail Page';
@State gid: string = 'aa'
@State evaluate: Evaluate = { 'userId': '1', 'desc': '评论' }
@StorageProp(BreakPointConstants.CURRENT_BREAKPOINT) currentBreakPoint: string = 'sm'
@State goodDetail: GoodDetail = {
id: '1',
add_time: '',
cat_id: '',
cat_one_id: '',
cat_two_id: '',
cat_three_id: '',
good_id: '1234',
good_small_logo: ['app.media.bird', 'app.media.animal', 'app.media.bird', 'app.media.animal'],
good_big_logo: 'app.media.bird',
good_name: '宠物电视',
good_number: '',
good_price: '1000',
good_weight: '',
hot_number: '',
is_promote: '',
upd_time: '',
evaluate: [this.evaluate]
}
@State swiperIndex: number = 0
private breakPointSystem = new BreakPointSystem()
// 挂载完成后获取数据
aboutToAppear(): void {
const params = router.getParams()
console.log(JSON.stringify(params))
// 断言告诉编辑器, 明确知道params对象数据类型
this.gid = (params as ParamsType<string>).value
this.fetchDetailData(this.gid)
this.breakPointSystem.register()
console.log(this.currentBreakPoint)
}
addCard = () => {
const valueBucketDetail: relationalStore.ValuesBucket = {
'good_id': this.goodDetail.good_id,
'good_name': this.goodDetail.good_name,
'good_big_logo': this.goodDetail.good_big_logo,
'good_code': this.goodDetail.good_id,
'good_price': Number(this.goodDetail.good_price),
'good_count': 1,
'good_checked': 0
}
cardDBUtils.insertCardDB('goodcard', valueBucketDetail)
console.log('add card data success')
}
fetchDetailData = async (id: string) => {
const param: ProductDataModel = new ProductDataModel()
param.cat_id = '1'
await findDataByPostApi<ProductDataModel, ProductDataModel>(6, param).then(res => {
console.log('111')
console.log(JSON.stringify(res))
console.log('222')
})
}
@Builder
bottomMenu() {
GridRow({
columns: { sm: 9, md: 10, lg: 12 }
}) {
GridCol({
span: { sm: 2, md: 3, lg: 3 }
}) {
this.imageAndText($r('app.media.startIcon'), '首页')
}
.width('100%')
.height('100%')
GridCol({
span: { sm: 2, md: 3, lg: 3 }
}) {
this.imageAndText($r('app.media.startIcon'), '购物车')
}
.width('100%')
.height('100%')
GridCol({
span: { sm: 5, md: 4, lg: 6 }
}) {
Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
Column() {
Text('加入购物车')
.fontSize(14)
.fontColor(Color.White)
.onClick(this.addCard)
}
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
.width('50%')
.height('100%')
.backgroundColor(Color.Green)
Column() {
Text('立即购买')
.fontSize(14)
.fontColor(Color.White)
}
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
.width('50%')
.height('100%')
.backgroundColor(Color.Orange)
}
.width('100%')
.height(50)
.backgroundColor('#f5f5f5')
.margin({
top: 5
})
}
.width('100%')
.height('100%')
.backgroundColor(Color.Orange)
}
}
@Builder
imageAndText(imageSrc: Resource, text: string) {
Column() {
Image(imageSrc)
.width(22)
Text(text)
.fontSize(12)
.fontColor('#99000000')
.margin({
top: 4
})
}
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
.width('100%')
.height('100%')
}
@Builder
customSwiper(payload: string[]) {
Column() {
Stack({ alignContent: Alignment.BottomEnd }) {
// 轮播图组件
Swiper() {
ForEach(payload, (item: string, index: number) => {
Flex({ justifyContent: FlexAlign.Center }) {
Image($r(item))
.height('100%')
.objectFit(ImageFit.Cover)
}
}, (item: string) => item)
}
.indicator(false)
.width('100%')
.height('100%')
.onChange((index: number) => {
this.swiperIndex = index
})
// 构建指示器
Text(`${this.swiperIndex + 1}/${payload.length}`)
.fontSize(12)
.fontColor(Color.White)
.textAlign(TextAlign.Center)
.width(35)
.lineHeight(18)
.backgroundColor('#66000000')
.borderRadius(9)
.margin({
right: 16,
bottom: 16
})
}
.height(334)
.width('100%')
}
.height(this.currentBreakPoint == BreakPointConstants.BREAKPOINT_LG ? '100%' : 334)
.backgroundColor(Color.White)
}
@Styles
boxCommonStyles(){
.backgroundColor(Color.White)
.borderRadius(16)
.padding({
left: 12,
right: 12,
top: 16,
bottom: 16
})
.margin({
top: 12
})
.width('100%')
}
@Builder
titleBar(detail: GoodDetail) {
Flex({ direction: FlexDirection.Column }) {
Text(`¥${this.goodDetail.good_price}`)
.fontSize(20)
.fontColor(Color.Brown)
Text(detail.good_name)
.fontSize(16)
.fontColor(Color.Black)
Row() {
// 添加3个小图标
}
}
.height(100)
.boxCommonStyles()
}
@Builder
ChooseTypeBar() {
Flex() {
}
.boxCommonStyles()
.height(50)
}
@Builder
ServiceBar() {
Flex() {
}
.boxCommonStyles()
.height(130)
}
@Builder
UserEvaluateBar() {
Flex() {
Text('评论')
}
.boxCommonStyles()
.height(120)
}
build() {
Stack({ alignContent: Alignment.TopStart }) {
// 内容区域
Flex({ direction: FlexDirection.Column }) {
Scroll() {
GridRow({
columns: { sm: 4, md: 8, lg: 12 },
gutter: 12
}) {
// 存放轮播图
GridCol({
span: { sm: 4, md: 8, lg: 5 }
}) {
this.customSwiper(this.goodDetail.good_small_logo)
}
GridCol({
span: { sm: 4, md: 8, lg: 7 }
}) {
Column() {
// 价格和标题
this.titleBar(this.goodDetail)
// 规则模块
this.ChooseTypeBar()
// 服务模块
this.ServiceBar()
// 评论模块
this.UserEvaluateBar()
// 商品展示图
}
.width('100%')
.padding({ left: 10, right: 10 })
}
}
}
.width('100%')
.flexGrow(1)
// 底部导航
GridRow({
columns: { sm: 4, md: 8, lg: 12 },
gutter: 12
}) {
GridCol({
span: { sm: 4, md: 6, lg: 6 },
offset: { md: 1, lg: 3 }
}) {
// 页面局部设计
this.bottomMenu();
}
}
.width('100%')
.height(this.currentBreakPoint == BreakPointConstants.BREAKPOINT_LG ? 70 : 60)
.backgroundColor(Color.Pink)
}
// 返回按钮
Flex({ justifyContent: FlexAlign.SpaceBetween }) {
// 返回按钮
Button() {
Image($r('app.media.startIcon'))
.width(28)
}
.titleButton()
.onClick((event: ClickEvent) => {
router.back()
})
// 分享按钮
Button() {
Image($r('app.media.startIcon'))
.width(28)
}
.titleButton()
.onClick((event: ClickEvent) => {
})
}
.margin({
top: 20,
left: 20,
right: 20
})
}
.backgroundColor('#f1f3f5')
.width('100%')
}
}
复制成功
1
2
1add card data success
2insert goodcard data success, rowId:[3]
add card data success
insert goodcard data success, rowId:[3]
删除
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1import { cardDBUtils } from '../utils/CardDBUtils'
2
3@Entry
4@Component
5struct Page03_DeteleTest {
6 @State myId: number = 0
7
8 build() {
9 Column() {
10 TextInput({
11 placeholder: '请输入删除id',
12 text: $$this.myId
13 })
14
15 Button('删除').onClick((event: ClickEvent) => {
16 cardDBUtils.deleteById('goodcard', this.myId)
17 })
18 }
19 }
20}
import { cardDBUtils } from '../utils/CardDBUtils'
@Entry
@Component
struct Page03_DeteleTest {
@State myId: number = 0
build() {
Column() {
TextInput({
placeholder: '请输入删除id',
text: $$this.myId
})
Button('删除').onClick((event: ClickEvent) => {
cardDBUtils.deleteById('goodcard', this.myId)
})
}
}
}
复制成功
1
1delete data success, rows:[1]
delete data success, rows:[1]
修改
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
1import { relationalStore } from "@kit.ArkData"
2import { BusinessError } from "@kit.BasicServicesKit"
3
4class CardDBUtils {
5 private rdbStore: relationalStore.RdbStore | null = null
6
7 /**
8 * 初始化数据库
9 *
10 * @param context
11 * @param tableName
12 */
13 initCardDB(context: Context, tableName: string) {
14 // 初始化配置
15 const STORE_CONFIG: relationalStore.StoreConfig = {
16 name: 'GoodMall.db', // 数据库名
17 securityLevel: relationalStore.SecurityLevel.S1, // 数据库安全级别
18 //encrypt: false, // 数据库是否加密
19 //customDir:'customDir/subCustomDir'
20 }
21
22 // 建表SQL
23 const SQL_CREATE_TABLE = `create table if not exists ${tableName} (
24 id integer primary key autoincrement,
25 good_id text not null,
26 good_name text not null,
27 good_big_logo text,
28 good_code text,
29 good_price real,
30 good_count integer,
31 good_checked integer
32 )`
33
34 // 初始化数据库, 异步
35 relationalStore.getRdbStore(context, STORE_CONFIG, (err, store) => {
36 if (err) {
37 console.log(`get rdb failed, ${err.code}, ${err.message}`)
38 return
39 } else {
40 console.log(`get rdb success`)
41 this.rdbStore = store
42
43 // 创建数据表
44 store.executeSql(SQL_CREATE_TABLE, (err) => {
45 if (err) {
46 console.log(`create table ${tableName} failed, ${err.code}, ${err.message}`)
47 } else {
48 console.log(`create table ${tableName} success`)
49 }
50 })
51 }
52 })
53 }
54
55 insertCardDB(tableName: string, value: relationalStore.ValuesBucket) {
56 if (this.rdbStore != null) {
57 this.rdbStore.insert(tableName, value, (err: BusinessError, rowId: number) => {
58 if (err) {
59 console.log(`insert ${tableName} data failed, ${err.name}-${err.message}`)
60 return
61 } else {
62 console.log(`insert ${tableName} data success, rowId:[${rowId}]`)
63 }
64 })
65 }
66 }
67
68 deleteById(tableName: string, id: number) {
69 // 获取操作对象
70 let predicates = new relationalStore.RdbPredicates(tableName)
71 // 筛选条件, 选中数据
72 predicates.equalTo('id', id)
73 if (this.rdbStore != null) {
74 this.rdbStore.delete(predicates, (err: BusinessError, rows: number) => {
75 if (err) {
76 console.log(`delete data failed, ${err.name}-${err.message}`)
77 return
78 } else {
79 console.log(`delete data success, rows:[${rows}]`)
80 }
81 })
82 }
83 }
84
85 updateById(tableName: string, id: number, value: relationalStore.ValuesBucket) {
86 let predicates = new relationalStore.RdbPredicates(tableName)
87 // 筛选条件, 选中数据
88 predicates.equalTo('id', id)
89 if (this.rdbStore != null) {
90 this.rdbStore.update(value, predicates, (err: BusinessError, rows: number) => {
91 if (err) {
92 console.log(`update data failed, ${err.name}-${err.message}`)
93 return
94 } else {
95 console.log(`update data success, rows:[${rows}]`)
96 }
97 })
98 }
99 }
100
101 /**
102 *
103 * @param tableName
104 * @param column 投影列
105 */
106 queryCardDB(tableName: string, column: Array<String>) {
107
108 }
109}
110
111const cardDBUtils = new CardDBUtils()
112
113export { cardDBUtils }
import { relationalStore } from "@kit.ArkData"
import { BusinessError } from "@kit.BasicServicesKit"
class CardDBUtils {
private rdbStore: relationalStore.RdbStore | null = null
/**
* 初始化数据库
*
* @param context
* @param tableName
*/
initCardDB(context: Context, tableName: string) {
// 初始化配置
const STORE_CONFIG: relationalStore.StoreConfig = {
name: 'GoodMall.db', // 数据库名
securityLevel: relationalStore.SecurityLevel.S1, // 数据库安全级别
//encrypt: false, // 数据库是否加密
//customDir:'customDir/subCustomDir'
}
// 建表SQL
const SQL_CREATE_TABLE = `create table if not exists ${tableName} (
id integer primary key autoincrement,
good_id text not null,
good_name text not null,
good_big_logo text,
good_code text,
good_price real,
good_count integer,
good_checked integer
)`
// 初始化数据库, 异步
relationalStore.getRdbStore(context, STORE_CONFIG, (err, store) => {
if (err) {
console.log(`get rdb failed, ${err.code}, ${err.message}`)
return
} else {
console.log(`get rdb success`)
this.rdbStore = store
// 创建数据表
store.executeSql(SQL_CREATE_TABLE, (err) => {
if (err) {
console.log(`create table ${tableName} failed, ${err.code}, ${err.message}`)
} else {
console.log(`create table ${tableName} success`)
}
})
}
})
}
insertCardDB(tableName: string, value: relationalStore.ValuesBucket) {
if (this.rdbStore != null) {
this.rdbStore.insert(tableName, value, (err: BusinessError, rowId: number) => {
if (err) {
console.log(`insert ${tableName} data failed, ${err.name}-${err.message}`)
return
} else {
console.log(`insert ${tableName} data success, rowId:[${rowId}]`)
}
})
}
}
deleteById(tableName: string, id: number) {
// 获取操作对象
let predicates = new relationalStore.RdbPredicates(tableName)
// 筛选条件, 选中数据
predicates.equalTo('id', id)
if (this.rdbStore != null) {
this.rdbStore.delete(predicates, (err: BusinessError, rows: number) => {
if (err) {
console.log(`delete data failed, ${err.name}-${err.message}`)
return
} else {
console.log(`delete data success, rows:[${rows}]`)
}
})
}
}
updateById(tableName: string, id: number, value: relationalStore.ValuesBucket) {
let predicates = new relationalStore.RdbPredicates(tableName)
// 筛选条件, 选中数据
predicates.equalTo('id', id)
if (this.rdbStore != null) {
this.rdbStore.update(value, predicates, (err: BusinessError, rows: number) => {
if (err) {
console.log(`update data failed, ${err.name}-${err.message}`)
return
} else {
console.log(`update data success, rows:[${rows}]`)
}
})
}
}
/**
*
* @param tableName
* @param column 投影列
*/
queryCardDB(tableName: string, column: Array<String>) {
}
}
const cardDBUtils = new CardDBUtils()
export { cardDBUtils }
复制成功
1
1update data success, rows:[0]
update data success, rows:[0]
查询
await异步查询无效果,按钮点击查询有效果
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
1 queryCardDB(tableName: string, column: Array<string>, id?: string) {
2 let predicates = new relationalStore.RdbPredicates(tableName)
3 // 筛选条件, 选中数据
4 if (id) {
5 predicates.equalTo('id', id)
6 }
7 let cards: CardModel[] = []
8
9 if (this.rdbStore != null) {
10 this.rdbStore.query(predicates, column, (err, resultSet) => {
11 if (err) {
12 console.log(`query data failed, ${err.name}-${err.message}`)
13 return
14 } else {
15 console.log(`query data success`)
16 }
17 // 判断数据集能否遍历
18 while (resultSet.goToNextRow()) {
19 let id = resultSet.getLong(resultSet.getColumnIndex('id'))
20 let good_name = resultSet.getString(resultSet.getColumnIndex('good_name'))
21 let good_big_logo = resultSet.getString(resultSet.getColumnIndex('good_big_logo'))
22 let good_count = resultSet.getLong(resultSet.getColumnIndex('good_count'))
23 let good_code = resultSet.getString(resultSet.getColumnIndex('good_code'))
24 let good_id = resultSet.getString(resultSet.getColumnIndex('good_id'))
25 let good_checked = resultSet.getLong(resultSet.getColumnIndex('good_checked'))
26 let good_price = resultSet.getDouble(resultSet.getColumnIndex('good_price'))
27
28 const cardModel: CardModel = new CardModel()
29 cardModel.id = id
30 cardModel.good_name = good_name
31 cardModel.good_big_logo = good_big_logo
32 cardModel.good_count = good_count
33 cardModel.good_code = good_code
34 cardModel.good_id = good_id
35 cardModel.good_checked = good_checked
36 cardModel.good_price = good_price
37
38 cards.push(cardModel)
39 }
40 console.log(JSON.stringify(cards))
41 // 释放内存结果集
42 resultSet.close()
43 })
44 }
45 return cards
46 }
47
48 /**
49 *
50 * @param tableName
51 * @param column 投影列
52 */
53 async queryCardDB2(tableName: string, column: Array<string>, id?: string) {
54 let predicates = new relationalStore.RdbPredicates(tableName)
55 // 筛选条件, 选中数据
56 if (id) {
57 predicates.equalTo('id', id)
58 }
59 let cards: CardModel[] = []
60 // 查询数据得到一个结果集
61 const resultSet = await (this.rdbStore as relationalStore.RdbStore).query(predicates, column)
62
63 // 判断数据集能否遍历
64 while (resultSet.goToNextRow()) {
65 let id = resultSet.getLong(resultSet.getColumnIndex('id'))
66 let good_name = resultSet.getString(resultSet.getColumnIndex('good_name'))
67 let good_big_logo = resultSet.getString(resultSet.getColumnIndex('good_big_logo'))
68 let good_count = resultSet.getLong(resultSet.getColumnIndex('good_count'))
69 let good_code = resultSet.getString(resultSet.getColumnIndex('good_code'))
70 let good_id = resultSet.getString(resultSet.getColumnIndex('good_id'))
71 let good_checked = resultSet.getLong(resultSet.getColumnIndex('good_checked'))
72 let good_price = resultSet.getDouble(resultSet.getColumnIndex('good_price'))
73
74 const cardModel: CardModel = new CardModel()
75 cardModel.id = id
76 cardModel.good_name = good_name
77 cardModel.good_big_logo = good_big_logo
78 cardModel.good_count = good_count
79 cardModel.good_code = good_code
80 cardModel.good_id = good_id
81 cardModel.good_checked = good_checked
82 cardModel.good_price = good_price
83
84 cards.push(cardModel)
85 }
86 console.log(JSON.stringify(cards))
87 // 释放内存结果集
88 resultSet.close()
89 return cards
90 }
queryCardDB(tableName: string, column: Array<string>, id?: string) {
let predicates = new relationalStore.RdbPredicates(tableName)
// 筛选条件, 选中数据
if (id) {
predicates.equalTo('id', id)
}
let cards: CardModel[] = []
if (this.rdbStore != null) {
this.rdbStore.query(predicates, column, (err, resultSet) => {
if (err) {
console.log(`query data failed, ${err.name}-${err.message}`)
return
} else {
console.log(`query data success`)
}
// 判断数据集能否遍历
while (resultSet.goToNextRow()) {
let id = resultSet.getLong(resultSet.getColumnIndex('id'))
let good_name = resultSet.getString(resultSet.getColumnIndex('good_name'))
let good_big_logo = resultSet.getString(resultSet.getColumnIndex('good_big_logo'))
let good_count = resultSet.getLong(resultSet.getColumnIndex('good_count'))
let good_code = resultSet.getString(resultSet.getColumnIndex('good_code'))
let good_id = resultSet.getString(resultSet.getColumnIndex('good_id'))
let good_checked = resultSet.getLong(resultSet.getColumnIndex('good_checked'))
let good_price = resultSet.getDouble(resultSet.getColumnIndex('good_price'))
const cardModel: CardModel = new CardModel()
cardModel.id = id
cardModel.good_name = good_name
cardModel.good_big_logo = good_big_logo
cardModel.good_count = good_count
cardModel.good_code = good_code
cardModel.good_id = good_id
cardModel.good_checked = good_checked
cardModel.good_price = good_price
cards.push(cardModel)
}
console.log(JSON.stringify(cards))
// 释放内存结果集
resultSet.close()
})
}
return cards
}
/**
*
* @param tableName
* @param column 投影列
*/
async queryCardDB2(tableName: string, column: Array<string>, id?: string) {
let predicates = new relationalStore.RdbPredicates(tableName)
// 筛选条件, 选中数据
if (id) {
predicates.equalTo('id', id)
}
let cards: CardModel[] = []
// 查询数据得到一个结果集
const resultSet = await (this.rdbStore as relationalStore.RdbStore).query(predicates, column)
// 判断数据集能否遍历
while (resultSet.goToNextRow()) {
let id = resultSet.getLong(resultSet.getColumnIndex('id'))
let good_name = resultSet.getString(resultSet.getColumnIndex('good_name'))
let good_big_logo = resultSet.getString(resultSet.getColumnIndex('good_big_logo'))
let good_count = resultSet.getLong(resultSet.getColumnIndex('good_count'))
let good_code = resultSet.getString(resultSet.getColumnIndex('good_code'))
let good_id = resultSet.getString(resultSet.getColumnIndex('good_id'))
let good_checked = resultSet.getLong(resultSet.getColumnIndex('good_checked'))
let good_price = resultSet.getDouble(resultSet.getColumnIndex('good_price'))
const cardModel: CardModel = new CardModel()
cardModel.id = id
cardModel.good_name = good_name
cardModel.good_big_logo = good_big_logo
cardModel.good_count = good_count
cardModel.good_code = good_code
cardModel.good_id = good_id
cardModel.good_checked = good_checked
cardModel.good_price = good_price
cards.push(cardModel)
}
console.log(JSON.stringify(cards))
// 释放内存结果集
resultSet.close()
return cards
}
复制成功
1
1[{"id":1,"good_name":"宠物电视","good_big_logo":"app.media.bird","good_count":1,"good_code":"1234","good_id":"1234","good_checked":0,"good_price":1000}]
[{"id":1,"good_name":"宠物电视","good_big_logo":"app.media.bird","good_count":1,"good_code":"1234","good_id":"1234","good_checked":0,"good_price":1000}]
Copyright ©2010-2022 比特日记 All Rights Reserved.
Powered By 可尔物语
浙ICP备11005866号-12