Vuetify v-data-table footer文本适配中文

完成效果如下:

每页显示条数API中提供了items-per-page-text的props,直接修改即可,

后面那个文档中没提,但是可以写成 :pageText="'{0} - {1} 共 {2} 页'"的形式。

完整代码:

<v-data-table items-per-page-text="每页显示条数:" :pageText="'{0} - {1} 共 {2} 页'" >
</v-data-table>

<template> <div class="address-container"> <!-- 功能操作区 --> <div class="action-bar"> <el-button type="primary" round icon="el-icon-plus" @click="add">新增地址</el-button> <el-button type="danger" round icon="el-icon-delete" @click="deleteAllClick">删除全部</el-button> </div> <!-- 表格区域 --> <el-table :data="tableData" v-loading="loading" stripe border class="address-table" height="500" > <el-table-column prop="name" label="收货人" align="center" width="120"></el-table-column> <el-table-column prop="address" label="所在地区" width="180"></el-table-column> <el-table-column prop="addDetail" label="详细地址" min-width="250" show-overflow-tooltip></el-table-column> <el-table-column prop="phone" label="手机号" width="130"></el-table-column> <!-- 操作列 --> <el-table-column fixed="right" label="操作" width="240" align="center"> <template #default="scope"> <el-button size="small" type="primary" @click="editeClick(scope.row)"> 编辑 </el-button> <el-popconfirm title="确定要删除该地址吗?" @confirm="deleteClick(scope.row.id)" style="margin-left: 10px" > <template #reference> <el-button size="small" type="danger">删除</el-button> </template> </el-popconfirm> <el-button size="small" type="success" :disabled="scope.row.status === 1" style="margin-left: 10px" @click="changeStatus(scope.row.id)" > {{ scope.row.status === 1 ? '已选中' : '选择' }} </el-button> </template> </el-table-column> </el-table> <!-- 分页 + 弹窗 --> <div class="pagination-and-dialog"> <!-- 分页 --> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-sizes="[5, 10, 20]" :page-size.sync="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalNumber" background /> <!-- 新增/编辑弹窗 --> <el-dialog title="📍 新增或修改地址" :visible.sync="dialogVisible" width="50%" center> <el-form :model="form" :rules="rules" ref="addressForm" label-width="100px" class="address-form"> <el-form-item label="所在地区" prop="address"> <el-cascader filterable clearable :options="options" v-model="form.address" placeholder="请选择省/市/区" @change="addressChoose" style="width: 100%" /> </el-form-item> <el-form-item label="详细地址" prop="addDetail"> <el-input v-model="form.addDetail" type="textarea" :rows="3" placeholder="请输入街道、门牌号、小区、楼栋等信息" /> </el-form-item> <el-form-item label="收货人" prop="name"> <el-input v-model="form.name" placeholder="请输入真实姓名" maxlength="25" show-word-limit /> </el-form-item> <el-form-item label="手机号" prop="phone"> <el-input v-model="form.phone" placeholder="请输入11位手机号" maxlength="11" /> </el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="save">确 定</el-button> </div> </template> </el-dialog> </div> </div> </template> <script> import request from "@/utils/request"; import { pcaTextArr } from "element-china-area-data"; export default { name: "AddressManage", created() { document.title = "地址管理"; let str = sessionStorage.getItem("user") || "{}"; this.user = JSON.parse(str); this.loadData(); }, data() { return { options: pcaTextArr, loading: true, form: {}, dialogVisible: false, totalNumber: 0, currentPage: 1, pageSize: 5, search: "", tableData: [], user: {}, rules: { address: [{ required: true, message: "请选择所在地区", trigger: "change" }], addDetail: [{ required: true, message: "请填写详细地址", trigger: "blur" }], name: [{ required: true, message: "请输入收货人姓名", trigger: "blur" }], phone: [ { required: true, message: "请输入手机号", trigger: "blur" }, { pattern: /^1[3-9]\d{9}$/, message: "请输入正确的11位手机号", trigger: "blur" } ] } }; }, methods: { loadData() { this.loading = true; request .get("/address", { params: { pageNum: this.currentPage, pageSize: this.pageSize, userId: this.user.id } }) .then(res => { this.tableData = res.data.records; this.totalNumber = res.data.total; this.loading = false; }); }, add() { this.form = {}; this.dialogVisible = true; }, save() { // 校验手机号 if (!/^1[3-9]\d{9}$/.test(this.form.phone)) { this.$message.error("请输入合法的11位手机号"); return; } // 处理地址拼接 if (Array.isArray(this.form.address) && this.form.address.length === 3) { this.form.address = this.form.address.join(" "); } this.form.userId = this.user.id; const req = this.form.id ? request.put("/address", this.form) : request.post("/address", this.form); req.then(res => { if (res.code === "0") { this.$message.success(this.form.id ? "更新成功" : "新增成功"); this.dialogVisible = false; this.loadData(); } else { this.$message.error(res.msg || "操作失败"); } }); }, deleteClick(id) { request.delete("/address", { params: { id } }).then(res => { if (res.code === "0") { this.$message.success("删除成功"); this.loadData(); } else { this.$message.error(res.msg || "删除失败"); } }); }, deleteAllClick() { this.$confirm("此操作将删除所有地址,是否继续?", "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { request.delete("/address/all").then(res => { if (res.code === "0") { this.$message.success("全部删除成功"); this.loadData(); } else { this.$message.error(res.msg || "删除失败"); } }); }).catch(() => { this.$message.info("已取消删除"); }); }, editeClick(row) { this.form = JSON.parse(JSON.stringify(row)); // 将字符串地址转为数组用于 Cascader 显示 if (typeof this.form.address === 'string') { this.form.address = this.form.address.split(' ').filter(Boolean); } this.dialogVisible = true; }, addressChoose(value) { console.log("选中的地区:", value); }, handleSizeChange() { this.loadData(); }, handleCurrentChange() { this.loadData(); }, changeStatus(id) { request.get("/address/update", { params: { id, userId: this.user.id } }).then(() => { this.$message.success("默认地址设置成功"); this.loadData(); }).catch(() => { this.$message.error("设置失败"); }); } } }; </script> <style scoped> /* 整体容器 */ .address-container { width: 900px; margin: 25px auto; padding: 20px; background-color: #ffffff; border-radius: 16px; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); font-family: 'Helvetica Neue', Arial, sans-serif; } /* 操作栏 */ .action-bar { display: flex; gap: 16px; margin-bottom: 24px; } /* 表格美化 */ .address-table ::v-deep(th) { background-color: #f5f7fa; color: #1a1a1a; font-weight: 600; } .address-table ::v-deep(.cell) { text-align: center; } .address-table ::v-deep(tr:hover) { background-color: #f9fafc !important; } /* 分页与弹窗区域 */ .pagination-and-dialog { margin-top: 24px; } /* 弹窗内表单 */ .address-form ::v-deep(.el-form-item__label) { font-weight: 500; color: #333; } /* 对话框底部按钮 */ .dialog-footer { text-align: center; padding: 10px 0; } .dialog-footer .el-button { width: 100px; font-weight: 500; } /* 响应式适配 */ @media (max-width: 920px) { .address-container { width: 100%; margin: 15px; padding: 15px; } .action-bar { flex-direction: column; align-items: flex-start; } .address-table ::v-deep(.el-table-column--selection) { width: 40px !important; } } </style>
10-30
<template> <div style="padding: 10px"> <div style="margin: 10px 0;"> <!-- 功能区域--> <el-button type="primary" round v-on:click="add">新增</el-button> <!-- 搜索区域--> <el-button type="primary" icon="el-icon-search" style="margin-outside: 10px; float: right" @click="goSearch">搜索</el-button> <el-input v-model="search" placeholder="请输入你搜索的用户名" @keydown.enter.native="goSearch" style="width: 20%; float: right" clearable> </el-input> </div> <!-- 表格区域--> <el-table :data="tableData" v-loading="loading" stripe border style="width: 99%"> <el-table-column prop="id" label="ID" sortable> </el-table-column> <el-table-column prop="username" label="用户名"> </el-table-column> <el-table-column label="用户类型"> <!-- 这里应该是使用template 和default标签把那个整个data数据取出来,然后scope就是整个数据,每一行数据就是scope.row,tableData=scope--> <template #default="scope"> <span v-if="scope.row.role === 2" style="color: #098486">普通用户</span> <span v-if="scope.row.role === 1" style="color: red">管理员</span> </template> </el-table-column> <el-table-column prop="nickName" label="昵称"> </el-table-column> <el-table-column prop="age" label="年龄"> </el-table-column> <el-table-column prop="sex" label="性别"> </el-table-column> <el-table-column width="120px" label="头像"> <template #default="scope"> <el-image style="width: 90px; height: 90px" :src="scope.row.avatar" :preview-src-list="[scope.row.avatar]"> </el-image> </template> </el-table-column> <!-- 操作区域--> <el-table-column fixed="right" label="操作" align = "center"> <template #default="scope"> <!-- 这里scope.row传入直接是传入一行的数据对象,可以使用row.username取出用户名的--> <el-button v-on:click="editeClick(scope.row)" type="primary" size="small">编辑</el-button> <el-popconfirm title="这是一段内容确定删除吗?" @confirm="deleteClick(scope.row.id)" style="margin-left: 10px"> <template #reference> <el-button type="danger" size="small">删除</el-button> </template> </el-popconfirm> </template> </el-table-column> </el-table> <!-- 页码区域以及弹出表单--> <div style="margin: 20px 0"> <!-- 页码区域,在Vue2里面是不支持v-model:prop="data"的,所以我们要用v-bind:prop.sync="data"实现双向绑定--> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-sizes="[5,10,20]" :page-size.sync="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalNumber"> </el-pagination> <!-- 添加用户的表单--> <el-dialog title="新增/修改用户" :visible.sync="dialogVisible" width="30%"> <!-- 输入表单--> <el-form v-bind:model="form" label-width="120px"> <el-form-item label="用户名:"> <el-input v-model="form.username" style="width: 80%"></el-input> </el-form-item> <el-form-item label="密码:"> <el-input v-model="form.password" style="width: 80%" type="password"></el-input> </el-form-item> <el-form-item label="昵称:"> <el-input v-model="form.nickName" style="width: 80%"></el-input> </el-form-item> <el-form-item label="年龄:"> <el-input v-model="form.age" style="width: 80%"></el-input> </el-form-item> <!-- 绑定字符串不用:label,绑定数字就要用:label才行--> <el-form-item label="性别:"> <el-radio v-model="form.sex" label="男">男</el-radio> <el-radio v-model="form.sex" label="女">女</el-radio> </el-form-item> </el-form> <!-- 下面的按钮--> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="save">确 定</el-button> </span> </el-dialog> </div> </div> </template> <script> // @ is an alias to /src import request from "@/utils/request"; export default { name: 'HomeView', components: {}, created() { document.title = '用户管理'; this.loadData(); }, methods: { // 搜索功能 goSearch:function (){ this.loadData(); }, // 加载表格数据,Get请求,Get请求不能直接传对象,只有Post可以直接传对象进去 loadData() { this.loading = true request.get("/user", { params: { pageNum: this.currentPage, pageSize: this.pageSize, search: this.search } }).then(res => { console.log(res); this.tableData = res.data.records; this.totalNumber = res.data.total; this.loading = false; }) }, // 打开表单栏 add() { // 先清空表单 this.form = {}; // 再打开表单 this.dialogVisible = true; }, // 点击表单的确定按钮,保存数据到后台,Post请求和Put请求 save() { this.$message({ type: "info", message: "马上保存/修改" }) if (this.form.id) { // 有ID就更新 request.put("/user",this.form).then(res =>{ console.log(res); if (res.code === '0'){ this.$message({ type: "success", message: "更新成功" }) }else { this.$message({ type: "error", message: res.msg }) } }) }else { // 没有就新增 // 这里不用添加/api,在request.js中我们已经添加了baseurl为api了,然后在vue.config.js中会被拦截 request.post("/user", this.form).then(res => { console.log(res); if (res.code === '0'){ this.$message({ type: "success", message: "新增成功" }) }else { this.$message({ type: "error", message: res.msg }) } }); } // alert("保存/修改成功"); 需要检查之后再看是否成功 // 更新tableData的数据 this.loadData(); this.dialogVisible = false; }, // 修改行数据 editeClick(row) { // 将数据深拷贝过来,避免浅拷贝的修改问题 this.form = JSON.parse(JSON.stringify(row)); this.dialogVisible = true; }, // 删除数据 deleteClick(id) { request.delete('/user', { params: { id : id } }).then(res=>{ if (res.code === '0') { this.$message({ type: "warning", message: "删除成功", }) }else { this.$message({ type: "error", message: res.msg, }) } }); // 更新数据 this.loadData(); }, // 表单每页大小的改变,因为有了双向绑定,直接更新一下数据就好了 handleSizeChange() { this.loadData(); }, // 改变当前页码 handleCurrentChange: function () { this.loadData(); } }, data() { return { loading: true, //新建一个表单,用来储存新增用户和修改用户的数据 form: { }, // 增加框是否可见 dialogVisible: false, // 总数据数 totalNumber: 400, // 当前页码 currentPage: 1, // 一页多少个 pageSize: 5, // 输入框的数据 search: '', // 表格的数据 tableData: [] } } } </script>
10-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyt363045841

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值