Files
menchuang/frontend/src/views/AfterSaleView.vue
T
HHY f77fccd4ba fix: 修复多页面 page_size 参数错误
- 样板库接口 page_size 上限 le=200 → le=1000
  (订单新建对话框与 AI 炫图请求 254 条触发校验失败)
- el-select 清空后 status 空串归一化
  (订单/合同/量尺/售后筛选不再发送 status=)
- 复测 page_size=254 返回 254 条完整数据
2026-09-20 13:47:24 -07:00

97 lines
3.8 KiB
Vue

<template>
<el-card>
<div class="toolbar">
<el-select v-model="status" placeholder="全部状态" clearable style="width:140px" @change="load">
<el-option :value="0" label="待处理" /><el-option :value="1" label="处理中" /><el-option :value="2" label="已完成" />
</el-select>
<el-button type="primary" @click="load">查询</el-button>
<div style="flex:1" />
<el-button type="primary" plain @click="openCreate">提交售后</el-button>
</div>
<el-table :data="rows" v-loading="loading" stripe>
<el-table-column prop="id" label="ID" width="70" />
<el-table-column prop="title" label="标题" min-width="120" />
<el-table-column prop="description" label="问题描述" min-width="200" show-overflow-tooltip />
<el-table-column prop="order_no" label="关联订单" width="150" />
<el-table-column label="状态" width="90">
<template #default="{ row }">
<el-tag size="small" :type="(['warning', 'primary', 'success'] as const)[row.status]">
{{ ['待处理', '处理中', '已完成'][row.status] }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="created_at" label="提交时间" width="170" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-if="row.status !== 2" size="small" @click="advance(row)">
{{ row.status === 0 ? '开始处理' : '完成' }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination style="margin-top:12px; justify-content:flex-end" background layout="total, prev, pager, next"
:total="total" :page-size="page_size" v-model:current-page="page" @current-change="load" />
<el-dialog v-model="createVisible" title="提交售后" width="520px">
<el-form :model="form" label-width="80px">
<el-form-item label="标题"><el-input v-model="form.title" /></el-form-item>
<el-form-item label="问题描述"><el-input v-model="form.description" type="textarea" :rows="3" /></el-form-item>
<el-form-item label="关联订单"><el-input v-model="form.order_no" placeholder="订单号(可选)" /></el-form-item>
</el-form>
<template #footer>
<el-button @click="createVisible = false">取消</el-button>
<el-button type="primary" @click="save">提交</el-button>
</template>
</el-dialog>
</el-card>
</template>
<script setup lang="ts">
import { onMounted, reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
import { api } from '../api'
const rows = ref<any[]>([])
const total = ref(0)
const page = ref(1)
const page_size = 15
const status = ref<number | undefined>()
const loading = ref(false)
const createVisible = ref(false)
const form = reactive({ title: '', description: '', order_no: '' })
async function load() {
loading.value = true
try {
const qs = `page=${page.value}&page_size=${page_size}${status.value !== undefined && status.value !== '' ? `&status=${status.value}` : ''}`
const d = await api<any>('get', `/api/after_sales?${qs}`)
rows.value = d.data
total.value = d.total
} finally { loading.value = false }
}
function openCreate() {
Object.assign(form, { title: '', description: '', order_no: '' })
createVisible.value = true
}
async function save() {
if (!form.description.trim()) return ElMessage.warning('问题描述必填')
await api('post', '/api/after_sales', form)
ElMessage.success('已提交')
createVisible.value = false
load()
}
async function advance(row: any) {
const next = row.status === 0 ? 1 : 2
await api('put', `/api/after_sales/${row.id}`, { status: next })
ElMessage.success('状态已更新')
load()
}
onMounted(load)
</script>
<style scoped>
.toolbar { display: flex; gap: 10px; margin-bottom: 12px; }
</style>