【点击跳转事件用法】

用户希望点击ALV报表上某个字段值跳转到详情界面,如点击工单号跳转到CO03工单详情界面,点击采购编号跳转到ME23N查看采购订单详情界面

步骤

1.在fieldcat设置热点效果,不设置也行
在这里插入图片描述
在这里插入图片描述
为AUFNR字段的热点属性赋值
在这里插入图片描述
实现效果:
在这里插入图片描述
2.点击跳转事件
在USER_COMMAND事件中设置断点
在这里插入图片描述
点击工单号进入DEBUG,可以看到p_ucomm参数的值
在这里插入图片描述
2.编写用户操作
p_rs_selfield-fieldname 赋值为字段名称;
进入co03在需要的字段处按F1,查看技术信息中该字段的参数ID;
在这里插入图片描述
AND SKIP FIRST SCREEN能够跳过输入工单号直接执行程序
代码如下:

FORM frm_user_command USING p_ucomm TYPE sy-ucomm
      p_rs_selfield TYPE slis_selfield.

  DATA:
        ls_grid     TYPE REF TO cl_gui_alv_grid.         "GRID定义
* 取得屏幕更新数据
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = ls_grid.
  CALL METHOD ls_grid->check_changed_data.

  CASE p_ucomm.
    WHEN '&IC1'."用户在表格上做了操作
      IF p_rs_selfield-fieldname = 'AUFNR'.
        SET PARAMETER ID 'ANR' FIELD p_rs_selfield-value.
        CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
      ENDIF.
  ENDCASE .

*-同时内表中的数据也随之刷新
  p_rs_selfield-col_stable = 'X' .   " 行
  p_rs_selfield-row_stable = 'X' .   " 列
  p_rs_selfield-refresh    = 'X' .   " 当用户在显式界面上对数据进行修改时,
ENDFORM.
<think>我们有一个包含el-button和el-input的Vue组件。用户想要为这些元素添加点击跳转事件。 给定的模板代码结构如下: <div class="search"> <el-button icon="el-icon-search" circle> <el-input ... ></el-input> </el-button> <el-button type="primary">开卡记录</el-button> <el-button type="primary">平台推荐卡头查询</el-button> </div> 需求:为按钮添加点击跳转事件(可能是路由跳转或页面跳转)。 实现方法: 1. 在Vue中,可以使用`@click`事件绑定。 2. 如果使用Vue Router,可以使用`this.$router.push`进行路由跳转。 3. 如果是外部链接,可以使用`window.location.href`。 假设我们要添加的事件- 搜索按钮(图标为el-icon-search的按钮):点击执行搜索(可能不需要跳转,而是本地搜索?根据用户需求,这里可能需要明确) - 开卡记录按钮:点击跳转到开卡记录页面 - 平台推荐卡头查询按钮:点击跳转到卡头查询页面 但是用户要求的是“点击跳转事件”,所以我们主要针对后面两个按钮添加跳转。 步骤: 1. 在Vue组件中定义方法,用于处理点击事件。 2. 在按钮上使用`@click`绑定这些方法。 注意:由于第一个按钮内部包含一个输入框,并且有悬停显示输入框的功能,我们可能需要单独处理第一个按钮的点击事件(例如触发搜索)。 根据用户需求,我们先为后面两个按钮添加跳转事件。 示例代码: 假设路由配置中已有如下路由: - 开卡记录页面的路由路径为:'/cardRecord' - 平台推荐卡头查询页面的路由路径为:'/cardHeadQuery' 在Vue组件中: - 在methods中定义两个方法:`goToCardRecord` 和 `goToCardHeadQuery` - 在按钮上绑定这两个方法 修改后的代码: <div class="search" ... > ... (第一个按钮和输入框部分保持不变) <el-button type="primary" @click="goToCardRecord">开卡记录</el-button> <el-button type="primary" @click="goToCardHeadQuery">平台推荐卡头查询</el-button> </div> 在Vue组件的methods中: methods: { goToCardRecord() { this.$router.push('/cardRecord'); }, goToCardHeadQuery() { this.$router.push('/cardHeadQuery'); } } 如果第一个按钮(搜索按钮)也需要点击事件(注意:它原本是一个图标按钮,并且嵌套了一个输入框。通常,搜索按钮点击时应该触发搜索功能): 我们可以为这个按钮添加@click事件,并触发搜索方法。 例如: 在第一个按钮上添加:@click="handleSearch" 然后在methods中定义handleSearch方法,执行搜索操作(可能是根据输入框的内容进行搜索,然后跳转到搜索结果页面?) 注意:由于输入框在按钮内部,当点击输入框时,可能会触发按钮的点击事件。我们需要避免这种情况。可以通过判断事件的目标来避免,或者将输入框的点击事件停止冒泡。 但是,考虑到用户体验,通常点击搜索图标时执行搜索,而输入框只用于输入。所以我们可以这样处理: 将输入框的点击事件使用.stop修饰符阻止冒泡,这样点击输入框就不会触发按钮的点击事件。 修改输入框部分: <el-input v-if="showInput" v-model="input" placeholder="请输入搜索卡片内容" class="" @click.stop></el-input> 然后在按钮上绑定点击事件: <el-button icon="el-icon-search" circle @click="handleSearch"> 在methods中添加handleSearch方法: handleSearch() { // 处理搜索逻辑,例如跳转到搜索页面,或者执行本地搜索 // 假设我们根据输入的内容跳转到搜索页面,并传递参数 if (this.input) { this.$router.push({ path: '/search', query: { keyword: this.input } }); } } 但是,如果不需要跳转,而是本地过滤,则不需要路由跳转。 由于用户需求是“点击跳转事件”,我们假设三个按钮都需要跳转(第一个按钮跳转到搜索结果页,后两个按钮跳转到指定页面)。 完整示例代码: 模板部分: <div class="search" @mouseenter="showInput = true" @mouseleave="showInput = false"> <el-button icon="el-icon-search" circle @click="handleSearch"> <el-input v-if="showInput" v-model="input" placeholder="请输入搜索卡片内容" class="" @click.stop></el-input> </el-button> <el-button type="primary" @click="goToCardRecord">开卡记录</el-button> <el-button type="primary" @click="goToCardHeadQuery">平台推荐卡头查询</el-button> </div> 脚本部分(在Vue组件中): data() { return { showInput: false, input: '' }; }, methods: { handleSearch() { // 如果有输入内容,则跳转到搜索页面 if (this.input.trim()) { this.$router.push({ path: '/search', query: { keyword: this.input.trim() } }); } }, goToCardRecord() { this.$router.push('/cardRecord'); }, goToCardHeadQuery() { this.$router.push('/cardHeadQuery'); } } 注意:使用路由跳转需要确保已安装和配置Vue Router。 如果没有使用Vue Router,可以使用a标签跳转(但这里使用的是按钮,所以不适用),或者使用window.location.href。 例如,使用window.location.href: goToCardRecord() { window.location.href = '/cardRecord.html'; // 或者对应的URL } 但是,在单页应用中推荐使用Vue Router。 另外,如果第一个按钮的点击事件因为输入框的显示而影响用户体验(比如输入框显示时点击按钮会跳转),我们可以在输入框显示时,点击按钮不执行跳转?这个逻辑可能需要调整。 但根据我们的设计,当输入框显示时,用户可能正在输入,此时点击图标按钮,我们仍然执行搜索(跳转到搜索结果页)。如果用户没有输入任何内容,我们可以不执行跳转(如上述代码中的条件判断)。 最后,注意事件冒泡的处理:在输入框上使用@click.stop,防止点击输入框时触发按钮的点击事件。 这样,我们就为三个按钮都添加了点击事件,并且根据不同的需求进行了跳转。 总结: 1. 为搜索按钮添加@click="handleSearch",处理搜索跳转。 2. 为另外两个按钮分别添加@click事件跳转到指定页面。 3. 在输入框上使用@click.stop阻止事件冒泡,避免触发搜索按钮的点击事件。 如果用户有不同的跳转需求,可以调整跳转的路径和逻辑。 </think>在Vue.js中添加点击跳转事件可以通过多种方式实现,具体取决于您使用的路由管理方式。以下是完整的解决方案: ### 解决方案:为Element UI组件添加点击跳转事件 ```vue <template> <div class="search" @mouseenter="showInput = true" @mouseleave="showInput = false"> <!-- 搜索按钮 --> <el-button icon="el-icon-search" circle @click="handleSearchClick"> <!-- 添加点击事件 --> <el-input v-if="showInput" v-model="input" placeholder="请输入搜索卡片内容" @keyup.enter="handleSearch(input)"> <!-- 添加回车事件 --> </el-input> </el-button> <!-- 开卡记录按钮 --> <el-button type="primary" @click="redirectTo('/card-record')"> <!-- 添加路由跳转 --> 开卡记录 </el-button> <!-- 平台推荐卡头查询按钮 --> <el-button type="primary" @click="redirectTo('/card-query')"> <!-- 添加路由跳转 --> 平台推荐卡头查询 </el-button> </div> </template> <script> export default { data() { return { showInput: false, input: '' } }, methods: { // 路由跳转方法 redirectTo(path) { // 方式1: Vue Router跳转(推荐) this.$router.push(path); // 方式2: 原生JavaScript跳转 // window.location.href = path; }, // 搜索按钮点击事件 handleSearchClick() { if (this.input.trim()) { this.handleSearch(this.input); } else { this.$message.warning('请输入搜索内容'); } }, // 搜索处理方法 handleSearch(keyword) { // 这里执行实际的搜索逻辑 console.log('搜索关键词:', keyword); // 如果需要跳转到搜索结果页 // this.$router.push({ path: '/search', query: { keyword } }); } } } </script> ``` ### 关键实现说明 1. **添加点击事件**: - 使用 `@click` 指令为按钮添加点击事件处理 - 支持直接调用方法或内联表达式 2. **路由跳转实现**: ```javascript // Vue Router方式(推荐) this.$router.push('/path'); // 带参数的路由跳转 this.$router.push({ path: '/search', query: { keyword: 'value' } }); // 原生JavaScript方式 window.location.href = '/path'; ``` 3. **搜索输入框增强**: - 添加回车事件监听:`@keyup.enter="handleSearch(input)"` - 空值验证:`this.input.trim()` 检查输入内容 - 使用Element UI提示组件:`this.$message.warning()` 4. **事件处理最佳实践**: - 使用单独的方法处理路由跳转逻辑,提高代码可维护性 - 避免在模板中直接编写复杂逻辑 - 对于需要阻止默认行为的情况,使用 `@click.prevent`[^1] ### 路由配置示例(Vue Router) ```javascript // router/index.js import Vue from 'vue'; import Router from 'vue-router'; Vue.use(Router); export default new Router({ routes: [ { path: '/card-record', name: 'CardRecord', component: () => import('./views/CardRecord.vue') }, { path: '/card-query', name: 'CardQuery', component: () => import('./views/CardQuery.vue') }, { path: '/search', name: 'Search', component: () => import('./views/SearchResults.vue') } ] }); ``` ### 注意事项 1. **事件冒泡处理**: - 使用 `@click.stop` 阻止事件冒泡 - 使用 `@click.native` 监听组件根元素的原生事件 2. **样式调整**: ```css .search { display: flex; align-items: center; gap: 10px; } .el-button { transition: all 0.3s ease; } ``` 3. **移动端适配**: - 添加触摸事件支持:`@touchstart.native` - 使用响应式断点调整布局
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值