You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel结合Vue.js更新AccessoryRequest状态字段的问题求助

第一步:调整Vue的data定义

给Vue实例新增两个响应式变量,分别存储目标请求ID和选中的状态值:

data() {
    return {
        dialog: false,
        lines: [],
        // 新增两个字段
        accessoryRequestId: null,
        selectedStatus: 'Pending' // 默认值和下拉框首选项保持一致
    }
},

第二步:修改getdetails方法,给新增变量赋值

你提到接口返回的lines数组里包含accessory_request_id,同一请求下所有明细的request_id一致,请求成功后直接取值即可:

getdetails: function(id) {
    let self = this;
    this.lines = [];
    // 先重置变量避免旧值干扰
    this.accessoryRequestId = null;
    this.selectedStatus = 'Pending';
    axios.get('/accessory/' + id)
    .then(response => {
        this.dialog = true;
        self.lines = response.data;
        // 赋值请求ID
        if(self.lines.length > 0) {
            self.accessoryRequestId = self.lines[0].accessory_request_id;
        }
        console.log(self.lines)
    })
    .catch(function (error) {
        alert('Error');
    });
},

第三步:调整模态框内的表单元素

首先修复原有触发bug:表格里的Details按钮的data-target="#details"需要改成data-target="#modal-1",和你实际定义的modal id对应,否则点击不会弹出框。
然后修改表单内容加上双向绑定:

<form ref="form" @submit.stop.prevent="handleSubmit">   
    @csrf
    <!-- 隐藏输入框绑定accessoryRequestId -->
    <input type="hidden" v-model="accessoryRequestId" name="id"/>
    <!-- 下拉框绑定selectedStatus -->
    <select class="form-control" name="status" v-model="selectedStatus">
        <option value="Pending">Pending</option>    
        <option value="Ordered">Ordered</option>    
        <option value="Received">Received</option>    
    </select>

    <br><br>
    <table class="table table-bordered">
        <tr>
            <td>Vendor</td>
            <td>Description</td>
            <td>QTY</td>
        </tr>
        <tr v-for="line in lines" :key="line.id">
            <td>@{{line.name}}</td>
            <td>@{{line.description}}</td>
            <td>@{{line.qty}}</td>
        </tr>
    </table>
</form>

第四步:修改handleSubmit方法,提交参数给后端

原有post请求没有携带任何参数,需要把ID和选中的状态传递给后端接口:

handleSubmit() {
    axios.post('/accessory/status-change/', {
        id: this.accessoryRequestId,
        status: this.selectedStatus
    })
    .then(response => {
        location.href = '/accessory';
    })
    .catch(function (error) {
        alert('Error');
    }); 
}

可选优化&异常处理

如果提交时出现419 CSRF错误,在页面<head>标签中加入:

<meta name="csrf-token" content="{{ csrf_token() }}">

然后在Vue的created钩子中加入全局axios配置:

created() 
{
    axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content;
}

后端控制器也可以加上参数校验,避免非法请求:

public function status_change(Request $request)
{
    $request->validate([
        'id' => 'required|exists:accessory_requests,id',
        'status' => 'required|in:Pending,Ordered,Received'
    ]);
    $accessory_request = AccessoryRequest::findorfail($request->id);
    $accessory_request->status = $request->input('status');
    $accessory_request->save();
    return ['message' => 'Status Updated'];
}

内容的提问来源于stack exchange,提问作者Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:06:04