ABAP WDA

一、20181217-20181226笔记

selection_options和alv 

二、相关服务

1、

事务码:SICF

默认SERVICE,执行。

Service:
default_host/sap/option/*
default_host/sap/public/bc/*
default_host/sap/bc/wdvd
default_host/sap/bc/webdynpro/*

2

在应用WEBDYNPRO之前,首先要将你的APPLICATION SERVER中的FQDN配置好,也就是说您的WS必须是

Full Qualified Domain Name,如:hostname.companyname.com这种形式,任何以IP地址或者机器名称为命名

URL地址都不能正常访问WEBDYNPRO,因此在开始开发WEBDYNPRO之前,首先我们要和BASIS确认服务器是

Full Qualified Domain NameFQDN

三、界面、元素介绍

 

1.ELEMENTS:

   

Context上下文的参数

 

添加元素

添加单个元素

按上下文添加

展示文本

删除

 

 

BUTTON  按钮

     

      TRAY              可折叠块

INPUT_FIELD     (文本输入框)

LABEL           (说明文本)

TABLE            表控制

VIEW_CONTAINER_UIELEMENT 视图组建控制器(一般用来放ALVSELECT_OPTIONS或其他组建)

2.APPLICATION STRUC

https://i-blog.csdnimg.cn/blog_migrate/b60b50396872e1b15218bbb6eb1700cb.png

 

3.架构说明

一般的程序框架如图:

1)组建控制器是定义的全局的组建,与视图相似,组建控制器是一个程序对外的部分,是整个程序最开始执行的环节 ,也是控制多个视图间数据交互的纽带,一般考虑到程序的扩展性会优先使用组件控制器,然后关联各视图。

2)组建接口是用来引入一些外部组建接口的。引入的组建接口可添加到相应的视图窗口中使用

3)视图是一个DYNPRO程序显示的部分,可有多个视图,视图见可跳转,每个视图中需要显示的字段结构表等信息需要单独定义在该视图的节点中(CONTEXT)注意:组建控制器中也可以添加节点,作为全局节点属性,如果将它与某视图中的节点进行MAPPING,则可以再视图结束后,程序没结束的时候保存节点属性。一般界面跳转如此做

4)窗口与视图相似,只是每个程序每次显示只能有一个单独的窗口,可定义多个窗口,窗口间跳转,与视图跳转相似,都是在Inbound Plugs(入站)和Outbound Plugs(出站)里做对应的绑定。

5)应用程序,单独的执行程序。

4.普通样例展示

https://i-blog.csdnimg.cn/blog_migrate/2432afc65038b916f9c634c9caf8c926.png

 

5.样例布局展示

https://i-blog.csdnimg.cn/blog_migrate/f74e44d77bbac4491a9294abe4037c5f.png

6.布局说明

一般是以TRAY为折叠区域划分设计屏幕,(此处为两个,1是查询条件,2是查询结果)

在某个区域中,可用GROUP来分组。(看个人习惯)

区域的Layout一般选择MatrixLayout (MatrixHeadData 行开头 MatrixData 紧接着 HEAD,没有新的HEAD,会一直往后排。新的HEAD,另起一行)

常用属性:

enabled        是否灰显,EDITABLE

readOnly     只显示

suggestValues  这个是值建议,就像淘宝输入 手机 会有手机壳,手机膜。。。

value               绑定的VALUE

visible             可见

width              占的宽度,或者比例 一般200250150TRAY 一般95%之类

EVENTS          事件,每种ELEMENT对应事件不同,有field的输入,按钮的事件。。。

cellDesign        单元格格式

colSpan           字段占列数,比如文本框,我们可以设置占5格等(前提是容器TRAY,CONTAINERCOL设置的够)

hAlign             格式

以上是些常用的属性。

 

7.视图的整体介绍

https://i-blog.csdnimg.cn/blog_migrate/2e8cd42b6c9278fcce13e72bb3a7c25f.png

Properties:VIEW的属性,一般引入一些控件,alvselect-option

Layout:视图布局,显示的样式,字段排版

Inbound Plugs:转入的连接(内向链接),一般视图跳转需要带些参数什么的,需要在这里定义plugs和参数相关信息

Outbound Plugs:转出的连接(外向链接),对Inbound对应,传出的连接和参数

Context:节点。视图使用的表,结构,全部放在这里。一般0-1/1-1/0-n三种。前两种相当于工作区,结构,后一种是内表。1-1时需要勾选Initialization Lead Selection

Attributes:视图属性,可在本视图的各方法中使用

Action一般是对应ELEMENT对应的EVENT产生的

Methods:方法

 

 

四、SELECT_OPTIONS

1、引入组件

WDR_SELECT_OPTIONS

2、组件加入视图

3、在layout中添加按钮和ViewContainerUIElement

只写ID即可

在视图的Attributes页签中,添加组件对象GD_HANDLE   typr ref to IF_WD_SELECT_OPTIONS.

 

 

 

初始化代码:

method WDDOINIT .
  DATA:LO_CP_USAGE  TYPE REF TO IF_WD_COMPONENT_USAGE,
       LO_SELECT_OP TYPE REF TO IWCI_WDR_SELECT_OPTIONS,
       LT_RANGE     TYPE REF TO DATA.

  "get the component usage
  LO_CP_USAGE WD_THIS->WD_CPUSE_SELECT_OPTION( ).
  IF LO_CP_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL.
    LO_CP_USAGE->CREATE_COMPONENT( ).
  ENDIF.
  "get the select option usage
  "选择屏幕的引用
  LO_SELECT_OP WD_THIS->WD_CPIFC_SELECT_OPTION( ).

  "init the select option
  "修改SELECT_OPTIONS
  WD_THIS->GD_HANDLE LO_SELECT_OP->INIT_SELECTION_SCREEN( ).
  "设置全局信息
  WD_THIS->GD_HANDLE->SET_GLOBAL_OPTIONS(
                                        I_DISPLAY_BTN_CANCEL ABAP_FALSE
                                        I_DISPLAY_BTN_CHECK 
ABAP_FALSE
                                        I_DISPLAY_BTN_RESET 
ABAP_TRUE
                                        I_DISPLAY_BTN_EXECUTE 
ABAP_FALSE ).
  "CREATE ONE RANGE TABLE
*  LT_RANGE = WD_THIS->GGD_HANDLE->CREATE_RANGE_TABLE(  ).
DEFINE ADD_SELECT_OPTIONS.

  CALL METHOD WD_THIS->GD_HANDLE->CREATE_RANGE_TABLE
    
EXPORTING
      I_TYPENAME     &1
    RECEIVING
      RT_RANGE_TABLE 
LT_RANGE.   "RANGE_TABLE
  CALL METHOD WD_THIS->GD_HANDLE->ADD_SELECTION_FIELD
    
EXPORTING
      I_ID          &2     "ID
*     I_WITHIN_BLOCK        = MC_ID_MAIN_BLOCK
      I_DESCRIPTION &3    "描述
*     I_IS_AUTO_DESCRIPTION = ABAP_TRUE
      IT_RESULT     LT_RANGE.   "RANGE_TABLE
*     I_OBLIGATORY  = ABAP_FALSE  "必输
*     I_COMPLEX_RESTRICTIONS       =
*     I_USE_COMPLEX_RESTRICTION    = ABAP_FALSE
*     I_NO_COMPLEX_RESTRICTIONS    = ABAP_FALSE
*     I_VALUE_HELP_TYPE     = IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_NONE
*     I_VALUE_HELP_ID       =
*     I_VALUE_HELP_MODE     =
*     I_VALUE_HELP_STRUCTURE       =
*     I_VALUE_HELP_STRUCTURE_FIELD =
*     I_HELP_REQUEST_HANDLER       =
*     I_LOWER_CASE  =
*     I_MEMORY_ID   =
*     I_NO_EXTENSION        = ABAP_FALSE
*     I_NO_INTERVALS        = ABAP_FALSE
*     I_AS_CHECKBOX = ABAP_FALSE
*     I_AS_DROPDOWN = ABAP_FALSE
*     IT_VALUE_SET  =
*     I_READ_ONLY   = ABAP_FALSE
*     I_DONT_CARE_VALUE     =
*     I_EXPLANATION =
*     I_TOOLTIP     =
*     I_IS_NULLABLE = ABAP_TRUE
*     I_FORMAT_PROPERTIES   =
*     I_SUGGEST_VALUES      =
*     I_SUGGEST_FILTER_METHOD      =
    .
END-OF-DEFINITION.

ADD_SELECT_OPTIONS 'VBELN' 'S_VBELN' '订单号'.
ADD_SELECT_OPTIONS 'POSNR' 'S_POSNR' '订单行项目'.
endmethod.

 

查询按钮(SEARCH事件)代码:

method ONACTIONSEARCH .
  "字段搜索条件
  DATA lo_nd_search TYPE REF TO if_wd_context_node.
  DATA lo_el_search TYPE REF TO if_wd_context_element.
  DATA ls_search TYPE wd_this->element_search.
  "展示TABLE
  DATA lo_nd_item TYPE REF TO if_wd_context_node.
  DATA lt_item TYPE wd_this->Elements_item.
  "SELECT OPTIONS条件
  DATA:RT_RANGE TYPE REF TO DATA.
  FIELD-SYMBOLS:<FS_VBELN> TYPE TABLE,
                <FS_POSNR> TYPE TABLE.
*
*
*
*
  "得到字段搜索条件的填入值
  lo_nd_search wd_context->get_child_nodename wd_this->wdctx_search ).
  lo_el_search lo_nd_search->get_element(  ).
  IF lo_el_search IS INITIAL.
  ENDIF.
  lo_el_search->get_static_attributes(
    IMPORTING
      static_attributes ls_search ).

  "获取TABLE内容
  lo_nd_item wd_context->get_child_nodename wd_this->wdctx_item ).
  SELECT
    *
    
FROM LIPS
    
INTO CORRESPONDING FIELDS OF TABLE lt_item
    
WHERE VBELN ls_search-VBELN
    
AND POSNR ls_search-POSNR.

  "获取SELECT OPTIONS条件的填入值
  DEFINE GET_RANGE.
  RT_RANGE WD_THIS->GD_HANDLE->GET_RANGE_TABLE_OF_SEL_FIELDI_ID &1 )."此处ID对应上面INIT中的ID
  ASSIGN RT_RANGE->TO &2.
  END-OF-DEFINITION.
  GET_RANGE 'S_VBELN' <FS_VBELN>.
  GET_RANGE 'S_POSNR' <FS_POSNR>.
  
  
"获取TABLE内容
  SELECT
    *
    
FROM LIPS
    
INTO CORRESPONDING FIELDS OF TABLE lt_item
    
WHERE VBELN IN <FS_VBELN>
    
AND POSNR IN <FS_POSNR>.

  "绑定table传入网页
  "将以获取查询信息的内表lt_item绑到NODE中
  lo_nd_item->bind_tablenew_items lt_item SET_INITIAL_ELEMENTS ABAP_TRUE ).
  "重要,默认是ABAP_TRUE,表示表格每次传值都会刷新ALV框体,
  "如果为ABAP_FALSE,则表示每次查询的内容都会往框体里追加
endmethod.

 

清空按钮(CLEAR事件)代码:

method ONACTIONCLEAR .
  "字段搜索条件
  DATA lo_nd_search TYPE REF TO if_wd_context_node.
  DATA lo_el_search TYPE REF TO if_wd_context_element.
  DATA ls_search TYPE wd_this->element_search.
  "设置字段搜索条件的填入值
  lo_nd_search wd_context->get_child_nodename wd_this->wdctx_search ).
  lo_el_search lo_nd_search->get_element(  ).
  IF lo_el_search IS INITIAL.
  ENDIF.

  CLEAR ls_search.
  lo_el_search->SET_static_attributes( ).
endmethod.

 

4、嵌入SELECT OPTIONS视图

5、效果:

 

五、ALV组件的使用

1、引入组件

SALV_WD_TABLE

2、视图引入组件中集成的ALV对象

视图method页签中新建方法

WDDOMODIFYVIEW里加上 CALL METHOD ME->INIT_ALV.

或(WD_THIS->INIT_ALV)

不然不调用INIT_ALV( )方法

https://i-blog.csdnimg.cn/blog_migrate/4711bb99d02fb159504efeb86a32adaf.png

INIT_ALV方法加入到WDDOMODIFYVIEW

INIT_ALV( ).

INIT_ALV添加初始化代码:

METHOD INIT_ALV .

  DATALR_SALV_WD_TABLE_USAGE TYPE REF TO IF_WD_COMPONENT_USAGE."①重要的下面要用
  DATALR_SALV_WD_TABLE TYPE REF TO IWCI_SALV_WD_TABLE.         "②重要的下面要用
  DATALR_CONFIG TYPE REF TO CL_SALV_WD_CONFIG_TABLE."③重要的下面要用
  DATALR_TABLE_SETTINGS TYPE REF TO IF_SALV_WD_TABLE_SETTINGS.
  DATALR_COLUMN_SETTINGS TYPE REF TO IF_SALV_WD_COLUMN_SETTINGS,
        LR_COLUMN          TYPE REF TO CL_SALV_WD_COLUMN,
        LT_COLUMNS         TYPE SALV_WD_T_COLUMN_REF,
        LS_COLUMN          TYPE SALV_WD_S_COLUMN_REF,
        LR_COLUMN_HEADER   TYPE REF TO CL_SALV_WD_COLUMN_HEADER.
  DATAlr_function TYPE REF TO cl_salv_wd_function_std,
        lt_functions TYPE salv_wd_t_function_std_ref,
        ls_function  TYPE salv_wd_s_function_std_ref.

  "实例LAV组件
  LR_SALV_WD_TABLE_USAGE WD_THIS->WD_CPUSE_ALV( ).    "①重要的 将ALV组件实例化
  IF LR_SALV_WD_TABLE_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL.
    LR_SALV_WD_TABLE_USAGE->CREATE_COMPONENT( ).
  ENDIF.

"获取参考模型
  LR_SALV_WD_TABLE WD_THIS->WD_CPIFC_ALV( ).        "②重要的 将引用的ALV组件实例 复制
  "给参数
  LR_CONFIG LR_SALV_WD_TABLE->GET_MODEL( ).     "③重要的  获取控制器的get_model方法,实现定制



  "设置ui元素
  LR_COLUMN_SETTINGS ?= LR_CONFIG.
  LT_COLUMNS LR_COLUMN_SETTINGS->GET_COLUMNS( ).

  "ALV table 设置是否可以输入
  LR_TABLE_SETTINGS ?= LR_CONFIG.
  LR_TABLE_SETTINGS->SET_READ_ONLYABAP_FALSE ).

  "设置ALV按钮
  LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~SET_ENABLEDABAP_TRUE ).
  LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~SET_VISIBLECL_WD_TOOLBAR=>E_VISIBLE-VISIBLE ).
  LT_FUNCTIONS LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~GET_FUNCTIONS_STD( )."标准功能"GET_FUNCTIONS  "用户自定义功能
  LOOP AT LT_FUNCTIONS INTO LS_FUNCTION.
    lr_function LS_FUNCTION-R_FUNCTION.
    CASE LS_FUNCTION-ID.
      WHEN  'SALV_WD_INPUT_DELETE'.
        "隐藏按钮
        lr_function->set_visiblecl_wd_uielement=>e_visible-none ).
    ENDCASE.
  ENDLOOP.
  "设置ALV按钮排除
*  LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_PDF' ).
*  LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_VIEW_LOAD' ).
*  LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_INPUT_APPEND_ROW' ).
*  LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_INPUT_INSERT_ROW' ).
*  LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_INPUT_DELETE' ).
*  LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_INPUT_CHECK' ).

  "ALV TABLE 可显示行设置
  LR_CONFIG->IF_SALV_WD_TABLE_SETTINGS~SET_VISIBLE_ROW_COUNT'15' ).

  "选择模式(黄条)
  LR_CONFIG->IF_SALV_WD_TABLE_SETTINGS~SET_SELECTION_MODECL_WD_TABLE=>E_SELECTION_MODE-SINGLE_NO_LEAD ).

*  "获得单独字段
*  LR_COLUMN = LR_COLUMN_SETTINGS->GET_COLUMN( 'POSNR' ).

  LOOP AT LT_COLUMNS INTO LS_COLUMN.
    LR_COLUMN LS_COLUMN-R_COLUMN.
    CASE LS_COLUMN-ID.
*      WHEN 'VBELN'.
*        LS_COLUMN-R_COLUMN->DELETE_HEADER( ).
*        LR_COLUMN_HEADER = LS_COLUMN-R_COLUMN->CREATE_HEADER( ).
*        LR_COLUMN_HEADER->SET_TEXT( '交货单子' ).
**        LS_COLUMN-R_COLUMN->SET_POSITION( 1 ).
*      WHEN 'POSNR'.
*        LS_COLUMN-R_COLUMN->DELETE_HEADER( ).
*        LR_COLUMN_HEADER = LS_COLUMN-R_COLUMN->CREATE_HEADER( ).
*        LR_COLUMN_HEADER->SET_TEXT( '单子行项目' ).
**        LS_COLUMN-R_COLUMN->SET_POSITION( 1 ).
      WHEN 'ERNAM'.
        "此处使用INPUT_FIELD 是为了展示前面设置的可编辑属性(默认都是text,不可编辑,所以有要编辑的列,需要这里设置一下)
        DATALR_INPUT_FIELD TYPE REF TO CL_SALV_WD_UIE_INPUT_FIELD.
        CREATE OBJECT LR_INPUT_FIELD
          
EXPORTING
            VALUE_FIELDNAME 'ERNAM'."此ID要与COLUMN对应,或者用GET_COLUMNS,然后循环处理列属性
        LR_COLUMN->SET_CELL_EDITORLR_INPUT_FIELD ).
*      WHEN OTHERS.
*        LR_COLUMN = LS_COLUMN-R_COLUMN.
*        "隐藏字段
*        LR_COLUMN->SET_VISIBLE( CL_WD_UIELEMENT=>E_VISIBLE-NONE ).
**        LR_COLUMN->SET_VISIBLE( '01' ).
    ENDCASE.
  ENDLOOP.

  "用宏来设置字段
  DEFINE SET_COLUMN.
    LR_COLUMN LR_COLUMN_SETTINGS->GET_COLUMN&1 ).
    LR_COLUMN->DELETE_HEADER( ).
    LR_COLUMN_HEADER LR_COLUMN->CREATE_HEADER( ).
    LR_COLUMN_HEADER->SET_TEXT&2 ).
    LS_COLUMN-R_COLUMN->SET_POSITION&3 ).
    "是否显示的字段
    LR_COLUMN->SET_VISIBLE&4 ).
    "VISIBILITY  '99'
    "VISIBILITY_BLANK  '00'
    "VISIBILITY_NONE  '01'
    "VISIBILITY_VISIBLE  '02'
  END-OF-DEFINITION.

  "用宏来隐藏字段
  DEFINE SET_COLUMN_NONE.
    LR_COLUMN LR_COLUMN_SETTINGS->GET_COLUMN&1 ).
    "排除不显示的字段
    LR_COLUMN->SET_VISIBLE'01' ).
    "VISIBILITY  '99'
    "VISIBILITY_BLANK  '00'
    "VISIBILITY_NONE  '01'
    "VISIBILITY_VISIBLE  '02'
  END-OF-DEFINITION.

  SET_COLUMN_NONE 'LGORT'.
  SET_COLUMN_NONE 'CHARG'.
  SET_COLUMN_NONE 'LICHN'.
  SET_COLUMN_NONE 'KDMAT'.
  SET_COLUMN_NONE 'PRODH'.
  SET_COLUMN_NONE 'LFIMG'.
  SET_COLUMN_NONE 'MEINS'.
  SET_COLUMN_NONE 'VRKME'.
  SET_COLUMN_NONE 'UMVKZ'.
  SET_COLUMN_NONE 'UMVKN'.
  SET_COLUMN_NONE 'NTGEW'.
  SET_COLUMN_NONE 'BRGEW'.
  SET_COLUMN_NONE 'GEWEI'.
  SET_COLUMN_NONE 'VOLUM'.
  SET_COLUMN_NONE 'VOLEH'.
  SET_COLUMN_NONE 'VKGRP'.
  SET_COLUMN_NONE 'SPART'.

*  LR_TABLE_SETTINGS->SET_VISIBLE_ROW_COUNT( '10' )."设置可见行
*  LR_TABLE_SETTINGS->SET_ROW_SELECTABLE( ABAP_TRUE )."设置行选择
*  LR_TABLE_SETTINGS->SET_WIDTH( '50%' )."设置ALV宽度
*  LR_TABLE_SETTINGS->SET_EDIT_MODE( IF_SALV_WD_C_TABLE_SETTINGS=>EDIT_MODE )."设置编辑模式
**  LR_TABLE_SETTINGS->SET_EDIT_MODE( IF_SALV_WD_C_TABLE_SETTINGS=>EDIT_MODE_STANDARD )."设置不可编辑模式
*  LR_TABLE_SETTINGS->SET_READ_ONLY( ABAP_FALSE )."设置ALV整体不可编辑
*  LR_TABLE_SETTINGS->SET_SCROLLABLE_COL_COUNT( '10' )."设置滚动条
*  LR_TABLE_SETTINGS->SET_ENABLED( ABAP_TRUE ) ."可处理的
*  LR_TABLE_SETTINGS->SET_EMPTY_TABLE_TEXT( 'Empty' ) ."设置空表时显示的文本
*  LR_TABLE_SETTINGS->SET_FIXED_TABLE_LAYOUT( ABAP_FALSE ).  "使列宽可自动调节
*  LR_TABLE_SETTINGS->SET_DISPLAY_EMPTY_ROWS( ABAP_FALSE ).  "不展示空表
ENDMETHOD.

 

讲节点参数传入ALV组件

用向导‘魔法棒’添加代码

 

删减无用代码:

 

 

 

 

3、控制器中创建组件、全局节点(之前在视图中创建,现在ALV需要绑定数据)

创建组件

可按结构或按下图

可复制MAIN中已创建的

4、在ALV组件中绑定数据到ALV

https://i-blog.csdnimg.cn/blog_migrate/a85c33b2d3a547b73096deb01357fd1b.png

绑定成功后,DATA变成双向箭头

在视图中,绑定ITEM节点到COMPONENTCONTROLLER的节点,同上

(注,如果ALV数据只在单个VIEW里使用可以在VIEW中,将ITEM节点绑定到ALVDATA节点)

5、ALV控制器创建,并在窗口中添加

为了程序效果,这里会将原有的TABLE保留,并将ALV放到TABLE下面

LAYOUT中创建ViewContainerUIElement容器,放在TABLE后面

 

 

 

激活测试

六、字段,表等visiable,enable,read_only控制

今天主要讲一下布局控制:(visiable,enable,read_only)

visiable:可见性,控制字段,组件,分组等是否现实在界面上。一般按条件来控制隐藏的可以在CONTEXT NODE里定义个属性,类型WDY_BOOLEAN

              然后再根据条件赋值X:可见  :不可见                  visiable使用的较少)

enable:功能性,控制字段,组件,分组等是否功能有效,字段灰色显示。一般用在全局的属性上,例如保存后,全局灰显。定义同上

read_only:最常见属性,控制字段是否可编辑。可控制字段,分组,表等等。。。一般的显示状态和编辑状态切换通过此属性来控制

                 (相对于displayOnlydisplayAsText之类的基本不用,read_only却常用)

(行可编辑,单元格可编辑,可在ITEM中加入READ_ONLY字段,控制对应字段的可编辑,然后在赋值时根据情况来给值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值