[vue] 签收后自动切换为已签收按钮

1、如下图,这是一个工单列表分页,对工单进行签收,该条工单数据的isReceive值变为1,签收按钮变为已签收按钮。但现在有个问题,点击签收之后,要手动刷新一下页面才能切换为已签收按钮。

img


img

2、尝试用监听,对isReceive的值进行监听,监听到值发生变化执行查询表单,没有成功。

img

3、想请教一下解决思路,谢谢~

点击签收,做完相应处理后,直接改变row.isReceive不行吗

handleDButtonReceiveclickAction(row) {
  // ...
  row.isReceive = 1
}

点击签收的执行操作里面肯定要写重新获取列表数据呀 因为你已经修改数据了需要更新数据

在签收的点击事件的最底部调用一下你的数据获取函数就好了

两种思路,

1、点击签收调用更新接口,接口返回之后调用获取数据接口,用于更新数据

async handleDButtonReceiveClickAction(row) {
    await this.updata(row);
    this.getData();
}

2、点击签收调用更新接口,接口返回之后手动更改数据

// index 需要你传过来
async handleDButtonReceiveClickAction(row, index) {
    await this.updata(row);
    this.$set(this.data[index], 'isReceive', 1)
}

【以下回答由 GPT 生成】

解决方案:

1. 给签收按钮绑定点击事件

为了实现点击签收按钮后自动将工单的isReceive值变为1,并将按钮切换为已签收按钮,首先需要给签收按钮绑定一个点击事件,通过该事件来触发相应的操作。

<!-- 工单列表项 -->
<template>
  <div>
    <div>{{ workOrder.title }}</div>
    <button @click="handleSign">签收</button>
  </div>
</template>

<script>
export default {
  props: ['workOrder'],
  methods: {
    handleSign() {
      // 在这里执行签收操作
      // 可以调用后端接口将isReceive的值修改为1,并更新工单状态等

      // 在签收成功后,将按钮状态切换为已签收
      this.workOrder.isReceive = 1;
    }
  }
}
</script>

2. 监听isReceive值的变化

为了实时更新按钮的状态,可以使用Vue的watch属性来监听isReceive值的变化,一旦值发生变化,就执行查询表单的操作。

<!-- 工单列表项 -->
<template>
  <div>
    <div>{{ workOrder.title }}</div>
    <button @click="handleSign" v-if="!workOrder.isReceive">签收</button>
    <button v-else>已签收</button>
  </div>
</template>

<script>
export default {
  props: ['workOrder'],
  watch: {
    'workOrder.isReceive': {
      handler: function(newValue, oldValue) {
        if(newValue === 1) {
          // 在这里执行查询表单的操作,刷新工单列表
        }
      },
      deep: true
    }
  },
  methods: {
    handleSign() {
      // 在这里执行签收操作
      // 可以调用后端接口将isReceive的值修改为1,并更新工单状态等

      // 在签收成功后,将按钮状态切换为已签收
      this.workOrder.isReceive = 1;
    }
  }
}
</script>

3. 页面自动刷新

如果以上的方法无法实现自动刷新页面来更新按钮状态,可以考虑使用Vue Router的编程式导航来强制刷新当前页面。

// 工单列表页面
export default {
  methods: {
    // 刷新当前页面
    refreshPage() {
      this.$router.replace('/workorder');
    }
  }
}

通过在点击签收按钮后,调用refreshPage方法来刷新当前页面,以便更新按钮状态。

以上是一种可能的解决方案,希望对你有所帮助。如果有任何问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

点击签收按钮打开签收弹窗,签收弹窗表单数据设置后需要提交,在提交调接口提交数据成功状态里调一下查询列表数据的函数方法,列表接口返回数据应该会包含这个签收状态的