lanan-system-vue/src/views/system/category/index.vue
2024-08-07 16:05:04 +08:00

253 lines
8.6 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">
<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="code">
<el-input v-model="queryParams.code" placeholder="请输入分类字典编码" clearable @keyup.enter.native="handleQuery"/>
</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:category:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">展开/折叠</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-if="refreshTable" v-loading="loading" :data="categoryList" row-key="id" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column prop="name" label="分类字典名称" width="260"></el-table-column>
<el-table-column prop="code" label="分类字典编码" width="260"></el-table-column>
<el-table-column prop="sort" label="排序" width="100"></el-table-column>
<el-table-column prop="remark" label="备注" width="260"></el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:category:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-plus" @click="handleAdd(scope.row)"
v-hasPermi="['system:category:create']">新增</el-button>
<el-button v-if="scope.row.pid !== 0" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)" v-hasPermi="['system:category:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改分类字典对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item label="上级分类字典" prop="pid">
<treeselect v-model="form.pid" :options="categoryOptions" :normalizer="normalizer" placeholder="选择上级分类字典" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="分类字典名称" prop="name">
<el-input v-model="form.name" placeholder="请输入分类字典名称" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="分类字典编码" prop="code">
<el-input v-model="form.code" placeholder="请输入分类字典编码" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="显示排序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</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 { listCategory, getCategory, delCategory, addCategory, updateCategory } from "@/api/system/category";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "SystemCategory",
components: { Treeselect },
data() {
return {
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 表格树数据
categoryList: [],
// 分类字典树选项
categoryOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否展开,默认全部展开
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
// 是否展开
expand: false,
// 查询参数
queryParams: {
name: undefined,
code: undefined
},
// 表单参数
form: {
id: undefined,
pid: undefined,
name: undefined,
code: undefined,
sort:0,
remark: undefined,
},
// 表单校验
rules: {
name: [
{ required: true, message: "分类字典名称不能为空", trigger: "blur" }
],
code: [
{ required: true, message: "分类字典编码不能为空", trigger: "blur" }
],
},
};
},
created() {
this.getList();
},
methods: {
/** 查询分类字典列表 */
getList() {
this.loading = true;
listCategory(this.queryParams).then(response => {
this.categoryList = this.handleTree(response.data, "id","pid","children","0");
this.loading = false;
});
},
/** 转换分类字典数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children
};
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
pid: undefined,
name: undefined,
code: undefined,
sort:0,
remark: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
if (row !== undefined) {
this.form.pid = row.id;
}
this.open = true;
this.title = "添加分类字典";
listCategory().then(response => {
this.categoryOptions = this.handleTree(response.data, "id","pid","children","0");
});
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
getCategory(row.id).then(response => {
this.form = response.data;
if (this.form.pid === "0") { // 无父分类字典时,标记为 undefined避免展示为 Unknown
this.form.pid = undefined;
}
this.open = true;
this.title = "修改分类字典";
});
listCategory(row.id).then(response => {
this.categoryOptions = this.handleTree(response.data, "id","pid","children","0");
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateCategory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addCategory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function() {
return delCategory(row.id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>