|
|
@@ -1,346 +1,20 @@
|
|
|
-import { BasicType, BookItem, DiaLogSheetControl, YTHeader, yTRouter } from 'basic'
|
|
|
-import { AddressComp } from '../../components/AddressComp'
|
|
|
-import { AddressItemComp } from '../../components/AddressItemComp'
|
|
|
-import { buttonComp } from '../../components/BuilderIndex'
|
|
|
-import { Address } from '../../model/Address'
|
|
|
-import { AddressAddPageState, OrderStatus } from '../../model/EnumState'
|
|
|
-import { OrderDetailModel } from '../../model/RouterModel'
|
|
|
-import { CustomTextStyle } from '../../style/CustomTextStyle'
|
|
|
-import { OrderDetailViewModel } from '../viewModel/OrderDetailViewModel'
|
|
|
-
|
|
|
-/**
|
|
|
- * 订单详情 - 订单校验页面
|
|
|
- */
|
|
|
+// 订单详情页面
|
|
|
@ComponentV2
|
|
|
struct OrderDetailPage {
|
|
|
- @Param @Require vm: OrderDetailViewModel
|
|
|
-
|
|
|
- // 打开选择地址弹窗
|
|
|
- openAddressDialog() {
|
|
|
- let control: DiaLogSheetControl = new DiaLogSheetControl(this.getUIContext(), false, false)
|
|
|
- yTRouter.router2BottomDialog({
|
|
|
- control: control,
|
|
|
- builder: () => { this.AddressSelection(control, this.vm.address.id!) },
|
|
|
- }, (info) => {
|
|
|
- let ans: Address = info.result as Address
|
|
|
-
|
|
|
- this.vm.address = ans
|
|
|
-
|
|
|
- console.log(`ans = ${JSON.stringify(ans)}`)
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- // 前往地址添加页
|
|
|
- gotoAddAddressPage() {
|
|
|
- yTRouter.router2IncreaseAddressPage(AddressAddPageState.ADD_AND_USE, (info) => {
|
|
|
- let ans = info.result as Address
|
|
|
- this.vm.address = ans
|
|
|
- console.log(`ans = ${JSON.stringify(ans)}`)
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- aboutToAppear(): void {
|
|
|
-
|
|
|
- }
|
|
|
+ // @Local vm: OrderDetailPageViewModel = new OrderDetailPageViewModel();
|
|
|
|
|
|
build() {
|
|
|
NavDestination() {
|
|
|
Column() {
|
|
|
- YTHeader({ defaultStyle: {title:'订单详情'}, bgc: Color.White })
|
|
|
-
|
|
|
- Column(){
|
|
|
- List({space: 16}){
|
|
|
- ListItem()
|
|
|
-
|
|
|
- if(this.vm.orderStatus == OrderStatus.UNCONFIRMED) {
|
|
|
- /** 地址栏 */
|
|
|
- this.AddressBuilder()
|
|
|
-
|
|
|
- /** 租借的图书 */
|
|
|
- this.OrderListBuilder()
|
|
|
-
|
|
|
- /** 订单信息 */
|
|
|
- this.OrderInfoBuilder()
|
|
|
-
|
|
|
- /** 支付方式 */
|
|
|
- this.PayMethodBuilder()
|
|
|
-
|
|
|
- /** 备注 */
|
|
|
- this.RemarkBuilder()
|
|
|
- } else {
|
|
|
- /** 订单状态信息 */
|
|
|
- this.OrderStatusBuilder()
|
|
|
-
|
|
|
- /** 订单信息 */
|
|
|
- this.OrderPayBuilder()
|
|
|
- }
|
|
|
|
|
|
- ListItem()
|
|
|
- }.width('100%').height('100%')
|
|
|
- .scrollBar(BarState.Off)
|
|
|
- .padding({left: 15, right: 15})
|
|
|
- }.width('100%').layoutWeight(1)
|
|
|
-
|
|
|
- Row(){
|
|
|
- if(this.vm.orderStatus == OrderStatus.UNCONFIRMED) {
|
|
|
- Text(){
|
|
|
- Span('应付:')
|
|
|
- Span(`¥${this.vm.totalPrice.toFixed(2)}`).fontColor('#FFFF0000').fontSize(20)
|
|
|
- }
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 400, color: '#FF000000' }))
|
|
|
-
|
|
|
- buttonComp('提交订单', 143, 10, new CustomTextStyle({size: 18}), () => {
|
|
|
- this.vm.submitOrder()
|
|
|
- })
|
|
|
- } else {
|
|
|
- buttonComp('联系客服', 143, 10, new CustomTextStyle({size: 18}), () => {
|
|
|
- this.vm.gotoCustomerService()
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
- .width('100%')
|
|
|
- .backgroundColor(Color.White)
|
|
|
- .alignItems(VerticalAlign.Center)
|
|
|
- .justifyContent(FlexAlign.SpaceBetween)
|
|
|
- .shadow({radius: 5, offsetY: 5})
|
|
|
- .padding({bottom: this.vm.safeBottom, top: 10, left: 15, right: 15})
|
|
|
}
|
|
|
- .width('100%')
|
|
|
- .height('100%')
|
|
|
- .backgroundColor('#F7F9FA')
|
|
|
}
|
|
|
.hideTitleBar(true)
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /** 地址栏 */
|
|
|
- @Builder
|
|
|
- AddressBuilder() {
|
|
|
- ListItem(){
|
|
|
- // todo 订单地址校验
|
|
|
- if(this.vm.address?.phone) {
|
|
|
- AddressItemComp({type: 0, address: this.vm.address, click: () => { this.openAddressDialog() }})
|
|
|
- } else {
|
|
|
- Row(){
|
|
|
- Text('+ 添加收件人信息')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 16, weight: 500 }))
|
|
|
- }.width('100%')
|
|
|
- .borderRadius(8)
|
|
|
- .border({width: 2})
|
|
|
- .padding({top: 30, bottom: 30})
|
|
|
- .justifyContent(FlexAlign.Center)
|
|
|
- .onClick(() => { this.gotoAddAddressPage() })
|
|
|
- }
|
|
|
- }
|
|
|
- .backgroundColor(Color.White)
|
|
|
- }
|
|
|
-
|
|
|
- /** 订单状态信息 */
|
|
|
- @Builder
|
|
|
- OrderStatusBuilder() {
|
|
|
- ListItem(){
|
|
|
- Column({space: 5}){
|
|
|
- Text('待支付')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 16, weight: 500, color: '#FF000000' }))
|
|
|
-
|
|
|
- Text('图书正在检测消毒,尽快发货~')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 400, color: '#FF444444' }))
|
|
|
- }.width('100%')
|
|
|
- .alignItems(HorizontalAlign.Start)
|
|
|
- .padding({left: 16, right: 16, top: 18, bottom: 18})
|
|
|
- }
|
|
|
- .borderRadius(8)
|
|
|
- .border({width: 2})
|
|
|
- .backgroundColor(Color.White)
|
|
|
- }
|
|
|
-
|
|
|
- /** 租借图书列表 */
|
|
|
- @Builder
|
|
|
- OrderListBuilder() {
|
|
|
- ListItem(){
|
|
|
- Column({space: 10}){
|
|
|
- Row({space: 10}){
|
|
|
- Text('租借图书')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 16, weight: 500, color: '#FF000000' }))
|
|
|
-
|
|
|
- Text(`共${this.vm.bookList.length}件`)
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 12, weight: 500, color: '#80000000' }))
|
|
|
- }
|
|
|
-
|
|
|
- List({space: 15}){
|
|
|
- ForEach(this.vm.bookList, (item: BookItem, index) => {
|
|
|
- ListItem(){
|
|
|
- Image(item.coverUrl)
|
|
|
- .width(63)
|
|
|
- .height(81)
|
|
|
- .borderRadius(6)
|
|
|
- .backgroundColor('#FFFECF2F')
|
|
|
- .alt($r('[basic].media.png_defaultBook'))
|
|
|
- }
|
|
|
- })
|
|
|
- }.width("100%").height(81)
|
|
|
- .scrollBar(BarState.Off)
|
|
|
- .listDirection(Axis.Horizontal)
|
|
|
- }
|
|
|
- .width('100%')
|
|
|
- .alignItems(HorizontalAlign.Start)
|
|
|
- .padding({left: 16, right: 16, top: 9, bottom: 9})
|
|
|
- }
|
|
|
- .borderRadius(8)
|
|
|
- .border({width: 2})
|
|
|
- .backgroundColor(Color.White)
|
|
|
- }
|
|
|
-
|
|
|
- /** 订单信息栏 */
|
|
|
- @Builder
|
|
|
- OrderInfoBuilder(needSubtotal: boolean = true) {
|
|
|
- ListItem(){
|
|
|
- Column({space: 16}){
|
|
|
- ForEach(this.vm.forEach, (item: BasicType, index) => {
|
|
|
- Row(){
|
|
|
- Text(item.text)
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 500, color: '#FF666666' }))
|
|
|
-
|
|
|
- Text(item.message)
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 400, color: '#FF333333' }))
|
|
|
- }.width('100%').justifyContent(FlexAlign.SpaceBetween)
|
|
|
- })
|
|
|
-
|
|
|
-
|
|
|
- if(needSubtotal){
|
|
|
- Divider().height(1).width('100%').backgroundColor('#FF666666')
|
|
|
-
|
|
|
- Row(){
|
|
|
- Text('小计')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 500, color: '#FF666666' }))
|
|
|
-
|
|
|
- Text(`¥${this.vm.totalPrice.toFixed(2)}`)
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 400, color: '#FF333333' }))
|
|
|
- }.width('100%').justifyContent(FlexAlign.SpaceBetween)
|
|
|
- }
|
|
|
- }
|
|
|
- .padding({left: 16, right: 16, top: 13, bottom: 13})
|
|
|
- }
|
|
|
- .borderRadius(8)
|
|
|
- .border({width: 2})
|
|
|
- .backgroundColor(Color.White)
|
|
|
- }
|
|
|
-
|
|
|
- /** 支付方法栏 */
|
|
|
- @Builder
|
|
|
- PayMethodBuilder() {
|
|
|
- ListItem(){
|
|
|
- Column({space: 16}){
|
|
|
- Text('支付方式')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 16, weight: 500, color: '#000000' }))
|
|
|
-
|
|
|
- Divider().height(1).width('100%').backgroundColor('#FF666666')
|
|
|
-
|
|
|
- Column({space: 16}){
|
|
|
- ForEach(this.vm.payWayList, (item: BasicType, index) => {
|
|
|
- Row(){
|
|
|
- Row({space: 5}){
|
|
|
- Image(item.src)
|
|
|
- .width(20)
|
|
|
- .aspectRatio(1)
|
|
|
-
|
|
|
- Text(item.text)
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 500, color: '#666666' }))
|
|
|
- }
|
|
|
-
|
|
|
- Row(){
|
|
|
- if(this.vm.payWay == index){
|
|
|
- Image($r('[basic].media.icon_selectSvg'))
|
|
|
- .fillColor(item.color)
|
|
|
- }
|
|
|
- }
|
|
|
- .width(14)
|
|
|
- .aspectRatio(1)
|
|
|
- .borderRadius(14)
|
|
|
- .border({width: this.vm.payWay == index ? 0 : 1})
|
|
|
- }
|
|
|
- .width('100%')
|
|
|
- .justifyContent(FlexAlign.SpaceBetween)
|
|
|
- .onClick(() => { this.vm.changePayWay(index) })
|
|
|
- })
|
|
|
- }.width('100%')
|
|
|
- }
|
|
|
- .justifyContent(FlexAlign.Start)
|
|
|
- .alignItems(HorizontalAlign.Start)
|
|
|
- .padding({left: 16, right: 16, top: 9, bottom: 9})
|
|
|
- }
|
|
|
- .borderRadius(8)
|
|
|
- .border({width: 2})
|
|
|
- .backgroundColor(Color.White)
|
|
|
- }
|
|
|
-
|
|
|
- /** 备注栏 */
|
|
|
- @Builder
|
|
|
- RemarkBuilder() {
|
|
|
- ListItem(){
|
|
|
- Row({space: 20}){
|
|
|
- Text('备注')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 500, color: '#FF666666' }))
|
|
|
-
|
|
|
- TextInput({placeholder: '请输入您的留言', text: $$this.vm.remark})
|
|
|
- .padding(0)
|
|
|
- .borderRadius(0)
|
|
|
- .layoutWeight(1)
|
|
|
- .border({width: 0})
|
|
|
- .textAlign(TextAlign.End)
|
|
|
- .backgroundColor(Color.Transparent)
|
|
|
- }.width('100%').justifyContent(FlexAlign.SpaceBetween)
|
|
|
- .padding(16)
|
|
|
- }
|
|
|
- .borderRadius(8)
|
|
|
- .border({width: 2})
|
|
|
- .backgroundColor(Color.White)
|
|
|
- }
|
|
|
-
|
|
|
- // 订单实付
|
|
|
- @Builder
|
|
|
- OrderPayBuilder() {
|
|
|
- ListItem(){
|
|
|
- Column({space: 15}){
|
|
|
- Row(){
|
|
|
- Text('租借时间')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 400, color: '#FF444444' }))
|
|
|
-
|
|
|
- Text('2024-01-05至20225-01-04')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 14, weight: 400, color: '#FF444444' }))
|
|
|
- }.width('100%')
|
|
|
- .justifyContent(FlexAlign.SpaceBetween)
|
|
|
-
|
|
|
- Row(){
|
|
|
- Text('实付')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 16, weight: 500, color: '#FF000000' }))
|
|
|
-
|
|
|
- Text('¥219.80')
|
|
|
- .attributeModifier(new CustomTextStyle({ size: 16, weight: 500, color: '#FF000000' }))
|
|
|
- }.width('100%')
|
|
|
- .justifyContent(FlexAlign.SpaceBetween)
|
|
|
-
|
|
|
- Image($r('[basic].media.ic_public_arrow_left'))
|
|
|
- .rotate({angle: 270})
|
|
|
- .fillColor('#ff585757')
|
|
|
- .width(24).aspectRatio(1)
|
|
|
- }.width('100%')
|
|
|
- .alignItems(HorizontalAlign.Center)
|
|
|
- .padding({left: 19, top: 12, right: 19, bottom: 12})
|
|
|
- }
|
|
|
- .borderRadius(8)
|
|
|
- .border({width: 2})
|
|
|
- .backgroundColor(Color.White)
|
|
|
- }
|
|
|
-
|
|
|
- /** 地址选择弹窗 */
|
|
|
- @Builder
|
|
|
- AddressSelection(control: DiaLogSheetControl, addressId: string) {
|
|
|
- AddressComp({control: control, addressId: addressId})
|
|
|
+ // .padding({ top: this.vm.safeTop })
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Builder
|
|
|
-function OrderDetailBuilder(_: string, param: OrderDetailModel) {
|
|
|
- OrderDetailPage({ vm: new OrderDetailViewModel(param)})
|
|
|
-}
|
|
|
+function OrderDetailPageBuilder() {
|
|
|
+ OrderDetailPage()
|
|
|
+}
|