Files
gzh-admin/src/views/system/info/index.vue
2026-01-14 18:05:43 +08:00

277 lines
9.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户id" prop="id">
<el-input v-model="queryParams.id" placeholder="请输入用户id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户openid" prop="openid" :label-width="'90px'">
<el-input v-model="queryParams.openid" placeholder="请输入用户openid" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入用户名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="ctime">
<el-date-picker v-model="queryParams.ctime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="用户权限" prop="role">
<el-select v-model="queryParams.role" placeholder="请选择用户权限" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.USER_INFO_ROLE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:info:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:info:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="用户id" align="center" prop="id" />
<el-table-column label="用户openid" align="center" prop="openid" />
<el-table-column label="用户名" align="center" prop="name" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建时间" align="center" prop="ctime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.ctime) }}</span>
</template>
</el-table-column>
<el-table-column label="用户权限" align="center" prop="role">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.USER_INFO_ROLE" :value="scope.row.role" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:info:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:info:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<!-- 添加隐藏的id输入框确保id字段始终被提交 -->
<el-form-item prop="id" v-if="form.id" style="display: none;">
<el-input v-model="form.id" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="用户权限" prop="role">
<el-select v-model="form.role" placeholder="请选择用户权限">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.USER_INFO_ROLE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createInfo, updateInfo, deleteInfo, getInfo, getInfoPage, exportInfoExcel } from "@/api/system/info";
import { DICT_TYPE } from "@/utils/dict";
import DictTag from "@/components/DictTag";
export default {
name: "Info",
components: {
DictTag
},
data() {
return {
DICT_TYPE,
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 用户信息列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 用于修改操作的id
currentId: null,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
id: null,
openid: null,
name: null,
remark: null,
ctime: [],
role: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
role: [{ required: true, message: "用户权限不能为空", trigger: "change" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getInfoPage(this.queryParams).then(response => {
console.log(response.data.list);
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
this.currentId = null; // 重置currentId
},
/** 表单重置 */
reset() {
this.form = {
remark: undefined,
role: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加用户信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.currentId = row.id;
console.log('点击修改时的row.id:', this.currentId);
getInfo(this.currentId).then(response => {
console.log('API返回的数据:', response.data);
// 确保form对象包含所有必要字段
this.form = {
remark: '',
role: undefined,
...response.data
};
this.open = true;
this.title = "修改用户信息";
});
},
/** 提交按钮 */
submitForm() {
// 先进行表单验证
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 判断是新增还是修改操作
const isUpdate = !!this.currentId;
// 准备提交数据
const submitData = { ...this.form };
// 如果是修改操作确保id存在且是数字类型
if (isUpdate) {
// 使用currentId而不是form.id并确保是数字类型
submitData.id = parseInt(this.currentId);
}
// 执行请求
const requestPromise = isUpdate ? updateInfo(submitData) : createInfo(submitData);
requestPromise.then(response => {
this.$modal.msgSuccess(isUpdate ? "修改成功" : "新增成功");
this.open = false;
this.currentId = null; // 重置currentId
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除用户信息编号为"' + id + '"的数据项?').then(function() {
return deleteInfo(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有用户信息数据项?').then(() => {
this.exportLoading = true;
return exportInfoExcel(params);
}).then(response => {
this.$download.excel(response, '用户信息.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>
<style scoped>
/* 确保用户openid表单项的label宽度为90px */
:deep(.openid-form-item .el-form-item__label) {
width: 90px !important;
}
</style>