oil-station/fuintAdmin/src/views/goods/cate/index.vue
DESKTOP-369JRHT\12997 94c0c18e6f 10.31
2024-10-31 15:36:10 +08:00

386 lines
13 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" class="main-search" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="分类名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入分类名称"
clearable
style="width: 240px;"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="所属店铺" prop="store">
<el-select
v-model="queryParams.storeId"
placeholder="所属店铺"
clearable
style="width: 180px"
>
<el-option :key="0" label="公共分类" v-if="!this.$store.getters.storeId" :value="0"/>
<el-option v-for="storeInfo in storeOptions" :key="storeInfo.id" :label="storeInfo.name" :value="storeInfo.id"/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="状态"
clearable
style="width: 240px"
>
<el-option key="A" label="启用" value="A"/>
<el-option key="N" label="禁用" value="N"/>
</el-select>
</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-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['goods:cate:index']"
>新增</el-button>
</el-form-item>
</el-form>
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column label="分类ID" prop="id" width="66"/>
<el-table-column label="所属店铺" align="center">
<template slot-scope="scope">
<span v-if="scope.row.storeName">{{ scope.row.storeName }}</span>
<span v-else>公共所有</span>
</template>
</el-table-column>
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="图片" align="center" width="200">
<template slot-scope="scope">
<img class="list-img" :src="imagePath + scope.row.logo">
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
active-value="A"
inactive-value="N"
@change="handleStatusChange(scope.row)"
></el-switch>
</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"
v-hasPermi="['goods:cate:index']"
v-if="storeId == scope.row.storeId || storeId == 0"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
v-hasPermi="['goods:cate:index']"
v-if="storeId == scope.row.storeId || storeId == 0"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.page"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改对话框 -->
<el-dialog center :close-on-click-modal="false" :title="title" :visible.sync="open" class="common-dialog" width="700px" 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="name">
<el-input v-model="form.name" placeholder="请输入名称" maxlength="200" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="所属店铺" prop="storeId">
<el-select class="input" v-model="form.storeId" clearable placeholder="请选择所属店铺">
<el-option :key="0" label="公共分类" v-if="storeId == 0" :value="0"/>
<el-option
v-for="item in storeOptions"
:key="item.id"
:label="item.name"
:value="item.id"
:disabled="item.status !== 'A'"
></el-option>
</el-select>
<div class="form-tips">提示:未选择则属于公共分类</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="排序" prop="sort">
<el-input-number v-model="form.sort" :min="0"/>
<div class="form-tips">提示:数值越小,排行越靠前</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="9">
<el-form-item label="图片" prop="image">
<el-upload
:action="uploadAction"
list-type="picture-card"
:class="{hide:hideUpload}"
:file-list="uploadFiles"
:auto-upload="true"
:show-file-list="false"
:headers="uploadHeader"
:on-success="handleUploadSuccess">
<img
v-if="this.form.logo"
:src="imagePath + this.form.logo"
class="list-img"
/>
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
</el-col>
<p class="form-tips">提示点击图片修改建议尺寸128 x 128</p>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注信息">
<el-input v-model="form.description" type="textarea" placeholder="请输入内容"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio key="A" label="A" value="A">启用</el-radio>
<el-radio key="N" label="N" value="N">禁用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getToken } from '@/utils/auth'
import { getGoodsCateList, getGoodsCateInfo, saveGoodsCate, updateGoodsCateStatus } from "@/api/goodsCate";
export default {
name: "GoodsCateIndex",
data() {
return {
storeId: this.$store.getters.storeId,
// 遮罩层
loading: true,
// 标题
title: "",
// 选中数组
ids: [],
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 图片根目录
imagePath: "",
// 总条数
total: 0,
// 表格数据
list: [],
// 店铺列表
storeOptions: [],
// 是否显示弹出层
open: false,
// 默认排序
defaultSort: {prop: 'sort', order: 'descending'},
// 表单参数
form: { storeId: this.$store.getters.storeId, id: '', name: '', logo: '', sort: 0, status: "A" },
// 上传地址
uploadAction: process.env.VUE_APP_SERVER_URL + 'backendApi/file/upload',
uploadHeader: { 'Access-Token' : getToken() },
// 隐藏上传
hideUpload: false,
// 上传文件列表
uploadFiles: [],
// 查询参数
queryParams: {
page: 1,
pageSize: 10,
name: '',
status: ''
},
// 表单校验
rules: {
name: [
{ required: true, message: "名称不能为空", trigger: "blur" },
{ min: 2, max: 200, message: '名称长度必须介于2 和 200 之间', trigger: 'blur' }
],
logo: [{ required: true, message: "请上传图片", trigger: "blur" }]
}
};
},
created() {
this.getList();
},
methods: {
// 查询分类列表
getList() {
this.loading = true;
getGoodsCateList(this.queryParams).then( response => {
this.list = response.data.paginationResponse.content;
this.total = response.data.paginationResponse.totalElements;
this.imagePath = response.data.imagePath;
this.storeOptions = response.data.storeList;
this.loading = false;
}
);
},
// 搜索按钮操作
handleQuery() {
this.queryParams.page = 1;
this.getList();
},
// 重置按钮操作
resetQuery() {
this.resetForm("queryForm");
this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order)
this.handleQuery();
},
// 状态修改
handleStatusChange(row) {
let text = row.status == "A" ? "启用" : "禁用";
this.$modal.confirm('确认要' + text + '"' + row.name + '"吗?').then(function() {
return updateGoodsCateStatus(row.id, row.status);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function() {
row.status = row.status === "N" ? "A" : "N";
});
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.multiple = !selection.length
},
// 排序触发事件
handleSortChange(column, prop, order) {
this.queryParams.orderByColumn = column.prop;
this.queryParams.isAsc = column.order;
this.getList();
},
// 新增按钮操作
handleAdd() {
this.reset();
this.open = true;
this.title = "新增商品分类";
},
// 表单重置
reset() {
this.form = {
id: "",
storeId: this.storeId,
name: "",
status: "A",
logo: "",
sort: 0,
description: ""
};
this.uploadFiles = []
this.resetForm("form");
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 提交按钮
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.logo.length < 1) {
this.form.logo = '/static/defaultImage/none.png';
}
if (this.form.id) {
saveGoodsCate(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
saveGoodsCate(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
// 修改按钮操作
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
getGoodsCateInfo(id).then(response => {
this.form = response.data.cateInfo;
this.uploadFiles = [{ url: response.data.imagePath + this.form.logo, status: 'finished'}]
this.open = true;
this.title = "编辑商品分类";
});
},
// 删除按钮操作
handleDelete(row) {
const name = row.name
this.$modal.confirm('是否确认删除"' + name + '"的数据项?').then(function() {
return updateGoodsCateStatus(row.id, 'D');
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
handleUploadSuccess(file) {
this.form.logo = file.data.fileName;
}
}
};
</script>
<style scoped lang="scss">
.common-dialog >>> .el-upload--picture-card {
width: 60px;
height: 50px;
line-height: 60px;
}
</style>