NurseStationOperateUI/src/views/system/goodsCategory/index.vue
2023-01-29 10:45:59 +08:00

547 lines
16 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-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24">
<!-- <div class="head-container">
<el-input
v-model="goodsCategoryName"
placeholder="请输入区域名称"
clearable
size="small"
prefix-icon="el-icon-search"
style="margin-bottom: 20px"
/>
</div> -->
<div class="head-container" style="height: 580px; overflow-y: auto">
<el-tree
:data="deptOptions"
:props="defaultProps"
@node-click="handleNodeClick"
@node-expand="handleNodeClick"
></el-tree>
</div>
</el-col>
<!--用户数据-->
<el-col :span="20" :xs="24">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="100px"
>
<el-form-item label="商品分类名称" prop="goodsCategoryName">
<el-input
v-model="queryParams.goodsCategoryName"
placeholder="请输入商品分类名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品分类编码" prop="goodsCategoryCode">
<el-input
v-model="queryParams.goodsCategoryCode"
placeholder="请输入商品分类编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="显示顺序" prop="sort">
<el-input
v-model="queryParams.sort"
placeholder="请输入显示顺序"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> -->
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @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:goodsCategory:add']"
>新增</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:goodsCategory:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:goodsCategory:remove']"
>删除</el-button
>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:goodsCategory:export']"
>导出</el-button
>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="goodsCategoryList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
:show-overflow-tooltip="true"
label="商品分类名称"
align="center"
prop="goodsCategoryName"
/>
<el-table-column
label="商品分类编码"
align="center"
prop="goodsCategoryCode"
/>
<!-- <el-table-column label="商品分类图片地址" align="center" prop="goodsCategoryPicture" /> -->
<el-table-column
label="分类概述"
align="center"
prop="categoryRemark"
:show-overflow-tooltip="true"
/>
<el-table-column label="显示顺序" align="center" prop="sort" />
<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:goodsCategory:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:goodsCategory:remove']"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<!-- 添加或修改商品分类信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-cascader :props="props"></el-cascader>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item
label="父级分类名称"
prop="parentName"
:required="true"
v-if="form.parentId"
>
<!-- <el-input
v-model="form.parentName"
placeholder="请输入父级分类名称"
maxlength="10"
disabled
/> -->
</el-form-item>
<el-form-item label="商品分类名称" prop="goodsCategoryName">
<el-input
v-model="form.goodsCategoryName"
placeholder="请输入商品分类名称"
maxlength="10"
/>
</el-form-item>
<!-- <el-form-item label="商品分类编码" prop="goodsCategoryCode">
<el-input
v-model="form.goodsCategoryCode"
placeholder="请输入商品分类编码"
maxlength="20"
/>
</el-form-item> -->
<el-form-item label="商品分类图片" prop="goodsCategoryPicture">
<stationAcatar
@imgUrl="imgUrl"
:img="form.goodsCategoryPicture"
:type="'goodsCategoryPicture'"
/>
<!-- <img :src="form.goodsCategoryPicture" alt="" /> -->
</el-form-item>
<el-form-item label="分类概述" prop="categoryRemark">
<el-input
v-model="form.categoryRemark"
placeholder="请输入分类概述"
maxlength="300"
/>
</el-form-item>
<el-form-item label="显示顺序" prop="sort">
<el-input
v-model="form.sort"
maxlength="9"
oninput="value=value.replace(/[^\d]/g,'')"
placeholder="请输入显示顺序"
/>
</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 {
listGoodsCategory,
getGoodsCategory,
delGoodsCategory,
updatePicture,
addGoodsCategory,
updateGoodsCategory,
getStationCategoryList,
} from "@/api/system/goodsCategory";
import stationAcatar from "../stationAvatar/index.vue";
import baseurl from "@/api/baseurl";
let id = 0;
export default {
name: "GoodsCategory",
components: { stationAcatar },
data() {
return {
props: {
lazy: true,
lazyLoad(node, resolve) {
console.log(node)
const { level } = node;
setTimeout(() => {
const nodes = Array.from({ length: level + 1 }).map((item) => ({
value: ++id,
label: `选项${id}`,
leaf: level >= 2,
}));
// 通过调用resolve将子节点数据返回通知组件数据加载完成
resolve(nodes);
}, 1000);
},
},
imgone: "",
baseurl: "",
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 商品分类信息表格数据
goodsCategoryList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
goodsCategoryName: null,
goodsCategoryCode: null,
goodsCategoryPicture: null,
categoryRemark: null,
sort: null,
parentId: 0,
parentName: "",
},
// 表单参数
form: {},
// 表单校验
rules: {
goodsCategoryName: [
{ required: true, message: "商品分类名称不能为空", trigger: "blur" },
],
goodsCategoryCode: [
{ required: true, message: "商品分类编码不能为空", trigger: "blur" },
],
goodsCategoryPicture: [
{ required: true, message: "商品分类图片不能为空", trigger: "blur" },
],
categoryRemark: [
{ required: true, message: "分类概述不能为空", trigger: "blur" },
],
sort: [
{ required: true, message: "显示顺序不能为空", trigger: "blur" },
],
},
// 树选项
deptOptions: undefined,
categoryLevel: null,
defaultProps: {
children: "children",
label: "goodsCategoryName",
},
};
},
watch: {},
created() {
this.baseurl = baseurl;
this.getList();
this.info();
},
methods: {
// 节点单击事件
handleNodeClick(data) {
this.loading = true;
this.queryParams.parentId = data.id;
this.queryParams.parentName = data.goodsCategoryName;
this.categoryLevel = data.categoryLevel;
this.handleQuery();
getStationCategoryList(data.id).then((res) => {
res.data.forEach((e) => {
e.children = [
{
goodsCategoryName: "",
},
];
});
this.loading = false;
data.children = res.data;
});
},
/** 查询商品分类信息列表 */
info() {
this.loading = true;
getStationCategoryList(0).then((res) => {
res.data.forEach((e) => {
e.children = [
{
goodsCategoryName: "",
},
];
});
var obj = [
{
goodsCategoryName: "商品分类名称",
children: res.data,
id: 0,
},
];
this.deptOptions = obj;
this.loading = false;
});
},
getList() {
this.loading = true;
listGoodsCategory(this.queryParams).then((response) => {
this.goodsCategoryList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
console.log(this.form);
var obj = { pictureUrlList: [] };
if (this.imgone != this.form.goodsCategoryPicture) {
obj.pictureUrlList.push(this.form.goodsCategoryPicture);
}
if (obj.pictureUrlList.length > 0) {
updatePicture(obj).then((res) => {});
}
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
goodsCategoryName: null,
goodsCategoryCode: null,
goodsCategoryPicture: null,
categoryRemark: null,
sort: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
parentId: null,
parentName: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
parentId: 0,
};
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加商品分类信息";
console.log(this.queryParams);
// if (this.queryParams.parentId != 0) {
this.form.parentId = this.queryParams.parentId;
// }
this.form.parentName = this.queryParams.parentName;
this.form.categoryLevel = this.categoryLevel;
console.log(this.form);
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
getGoodsCategory(id).then((response) => {
this.form = response.data;
this.imgone = this.form.goodsCategoryPicture;
this.open = true;
this.title = "修改商品分类信息";
console.log(this.form);
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != null) {
updateGoodsCategory(this.form).then((response) => {
var obj = { pictureUrlList: [] };
if (this.imgone != this.form.goodsCategoryPicture) {
obj.pictureUrlList.push(this.imgone);
}
if (obj.pictureUrlList.length > 0) {
updatePicture(obj).then((res) => {});
}
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
this.info();
});
} else {
addGoodsCategory(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
this.info();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
console.log(row);
const ids = row.id || this.ids;
this.$modal
.confirm("是否确认删除?")
.then(function () {
return delGoodsCategory(ids);
})
.then(() => {
var obj = { pictureUrlList: [] };
obj.pictureUrlList.push(row.goodsCategoryPicture);
if (obj.pictureUrlList.length > 0) {
updatePicture(obj).then((res) => {
console.log(res);
});
}
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"system/goodsCategory/export",
{
...this.queryParams,
},
`goodsCategory_${new Date().getTime()}.xlsx`
);
},
imgUrl(imgUrl) {
this.form.goodsCategoryPicture = imgUrl;
},
},
};
</script>