sunlupeng 8 months ago
parent
commit
3d54d44060

+ 1 - 1
src/api/goodsManage.js

@@ -20,7 +20,7 @@ export function updateItem(query) {
 export function goodsList(query) {
   return request({
     url: '/product/page',
-    method: 'post',
+    method: 'get',
     params:query
   })
 }

+ 619 - 0
src/views/basicSetting/supplier.vue

@@ -0,0 +1,619 @@
+categoryOptions<template>
+    <div class="app-container calendar-list-container">
+
+        <!-- 查询和其他操作 -->
+        <div class="filter-container">
+            <el-input clearable class="filter-item" style="width: 200px;" placeholder="商品名称"
+                v-model="listQuery.productName"></el-input>
+            <el-input clearable class="filter-item" style="width: 200px;" placeholder="商品简称"
+                v-model="listQuery.productShortForm"></el-input>
+
+            <treeselect class="filter-item" default-expand-all v-model="listQuery.categoryId" :options="categoryOptions"
+                :normalizer="normalizer" placeholder="商品类别" style="width: 200px" />
+            <el-select class="filter-item" style="width: 200px" v-model="listQuery.brandId" filterable placeholder="品牌">
+                <el-option v-for="item in brandOptions" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+            </el-select>
+            <el-select v-model="listQuery.status" clearable placeholder="状态" class="filter-item" style="width: 200px;">
+                <el-option :key="item.type" v-for="item in goodsStatusList" :label="item.name" :value="item.type">
+                </el-option>
+            </el-select>
+
+            <el-button class="filter-item" type="primary" v-waves icon="el-icon-search"
+                @click="handleQuery">查找</el-button>
+                <el-button class="filter-item" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+            <el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-plus">添加</el-button>
+            <el-button class="filter-item" :loading="downloadLoading" v-waves icon="el-icon-download" @click="handleDownload">导出</el-button>
+        </div>
+
+        <!-- 查询结果 -->
+        <el-table size="small" :data="list" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit
+            highlight-current-row>
+            <el-table-column align="center" min-width="120px" label="商品编号" prop="productCode">
+            </el-table-column>
+            <el-table-column align="center" min-width="200px" label="商品名称" prop="productName">
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="商品简称" prop="productShortForm">
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="商品类别" prop="categoryName">
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="品牌" prop="brandName">
+            </el-table-column>
+            <el-table-column align="center" min-width="100px" label="主图" prop="imgUrl">
+                <template slot-scope="scope">
+                    <img class="good-img" :src="scope.row.imgUrl ? scope.row.imgUrl : require('@/assets/avatar.gif')">
+                </template>
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="状态">
+                <template slot-scope="props">
+                    <span v-if="props.row.status == 0" style="color: #67C23A;font-weight: bold;">启用</span>
+                    <span v-if="props.row.status == 1" style="color: #E6A23C;font-weight: bold;">停用</span>
+                </template>
+            </el-table-column>
+            <el-table-column align="center" label="操作" width="240px" class-name="small-padding fixed-width">
+                <template slot-scope="scope">
+                    <el-button type="primary" size="small" @click="handleUpdate(scope.row)">编辑</el-button>
+                    <el-button type="danger" size="small" @click="handleDelete(scope.row.productCode)">删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+
+        <!-- 分页 -->
+        <div class="pagination-container">
+            <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                :current-page="listQuery.page" :page-sizes="[10, 20, 30, 50]" :page-size="listQuery.limit"
+                layout="total, sizes, prev, pager, next, jumper" :total="total">
+            </el-pagination>
+        </div>
+        <!-- 添加或修改对话框 -->
+        <el-dialog :close-on-click-modal="false" :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible"
+            width="70%">
+            <el-form :rules="rules" ref="dataForm" :model="dataForm" status-icon label-position="left"
+                label-width="100px" style='margin: 0 50px;'>
+                <el-tabs v-model="activeName" @tab-click="handleClick">
+                    <el-tab-pane label="基本信息" name="first">
+                        <el-form-item label="商品名称" prop="productName">
+                            <el-input v-model="dataForm.productName" placeholder="请输入商品名称"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商品编号" prop="productCode">
+                            <el-input placeholder="请输入商品编号" v-model="dataForm.productCode"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商品简介" prop="productShortForm">
+                            <el-input v-model="dataForm.productShortForm" placeholder="请输入商品简介"></el-input>
+                        </el-form-item>
+
+
+                        <el-form-item label="商品类别" prop="categoryId">
+                            <treeselect default-expand-all v-model="dataForm.categoryId" :options="categoryOptions"
+                                :normalizer="normalizer" placeholder="请选择商品类别" />
+                        </el-form-item>
+
+                        <el-form-item label="品牌" prop="brandId">
+                            <el-select style="width: 100%" v-model="dataForm.brandId" filterable placeholder="品牌">
+                                <el-option v-for="item in brandOptions" :key="item.value" :label="item.label" :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="零售价(元)" prop="price">
+                            <el-input v-model="dataForm.price" placeholder="请输入零售价"></el-input>
+                        </el-form-item>
+                        <el-form-item label="销售价(元)" prop="salePrice">
+                            <el-input v-model="dataForm.salePrice" placeholder="请输入销售价"></el-input>
+                        </el-form-item>
+                        <el-form-item label="成本价(元)" prop="costPrice">
+                            <el-input v-model="dataForm.costPrice" placeholder="请输入成本价"></el-input>
+                        </el-form-item>
+                        <el-form-item label="重量(g)" prop="weight">
+                            <el-input v-model="dataForm.weight" placeholder="请输入重量"></el-input>
+                        </el-form-item>
+                        <el-form-item label="状态" prop="freightType">
+                            <el-radio-group v-model="dataForm.freightType">
+                                <el-radio :label="'0'">启用</el-radio>
+                                <el-radio :label="'1'">停用</el-radio>
+                            </el-radio-group>
+                        </el-form-item>
+                        <el-form-item style="width: 800px" label="商品图片" prop="imgUrl">
+                            <el-upload :limit="1" :action="fileImgUrl" list-type="picture-card"
+                                :file-list="dataForm.images" :on-success="handleImgSucess" :on-exceed="handleExceed"
+                                :before-upload="beforeUploadImg" :on-remove="handleRemoveImg">
+                                <i class="el-icon-plus"></i>
+                            </el-upload>
+                        </el-form-item>
+
+                    </el-tab-pane>
+                    <el-tab-pane label="茶叶属性" name="second">
+                        <el-form-item label="茶叶品牌">
+                            <el-select v-model="dataForm.teaTypeId" filterable placeholder="请选择" style="width: 100%">
+                                <el-option :key="item.dictLabel" v-for="item in tes_type" :label="item.dictLabel"
+                                    :value="item.dictLabel">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="茶叶级别">
+                            <el-select v-model="dataForm.teaLevel" filterable placeholder="请选择" style="width: 100%">
+                                <el-option :key="item.dictLabel" v-for="item in tes_level" :label="item.dictLabel"
+                                    :value="item.dictLabel">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="茶叶系列">
+                            <el-select v-model="dataForm.teaSeries" filterable placeholder="请选择" style="width: 100%">
+                                <el-option :key="item.dictLabel" v-for="item in tes_series" :label="item.dictLabel"
+                                    :value="item.dictLabel">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="包装形式">
+                            <el-select v-model="dataForm.teaPackageFormat" filterable placeholder="请选择"
+                                style="width: 100%">
+                                <el-option :key="item.dictLabel" v-for="item in tes_package_format" :label="item.dictLabel"
+                                    :value="item.dictLabel">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="产地">
+                            <el-input v-model="dataForm.teaOrigin" placeholder="请输入产地"></el-input>
+                        </el-form-item>
+                        <el-form-item label="采摘季节">
+                            <el-radio-group v-model="dataForm.teaGetSeason">
+                                <el-radio v-for="item in tes_get_season" :key="item.dictLabel" :label="item.dictLabel"></el-radio>
+                            </el-radio-group>
+                        </el-form-item>
+                        <el-form-item label="保质期">
+                            <el-input placeholder="数值" v-model="dataForm.teaSellbyDate" class="input-with-select">
+                                <el-select style="width: 80px;" v-model="dataForm.selectType" slot="prepend"
+                                    placeholder="请选择">
+                                    <el-option label="年" value="1"></el-option>
+                                    <el-option label="月" value="2"></el-option>
+                                    <el-option label="日" value="3"></el-option>
+                                </el-select>
+                            </el-input>
+                        </el-form-item>
+                        <el-form-item label="生产日期">
+                            <el-date-picker style="width: 100%;" v-model="dataForm.date" type="date"
+                                placeholder="选择日期"></el-date-picker>
+                        </el-form-item>
+                        <el-form-item label="陈华年份">
+                            <el-input v-model="dataForm.teaAgingYear" placeholder="输入陈华年份"></el-input>
+                        </el-form-item>
+                        <el-form-item label="溯源信息" prop="teaFileUrl">
+                            <el-upload :limit="1" :action="fileImgUrl" :file-list="dataForm.files" :on-success="handleFileSuccess"
+                                :before-upload="beforeUploadFile" :on-remove="handleRemoveFile">
+                                <el-button size="small" type="primary">点击上传</el-button>
+                            </el-upload>
+                        </el-form-item>
+                        <el-form-item label="存储要求">
+                            <el-checkbox-group v-model="dataForm.teaStorageRequire">
+                                <el-checkbox label="避光" name="type"></el-checkbox>
+                                <el-checkbox label="防潮" name="type"></el-checkbox>
+                                <el-checkbox label="通风" name="type"></el-checkbox>
+                                <el-checkbox label="冷藏" name="type"></el-checkbox>
+                            </el-checkbox-group>
+                        </el-form-item>
+                    </el-tab-pane>
+                </el-tabs>
+
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="dialogFormVisible = false">取消</el-button>
+                <el-button v-if="dialogStatus == 'create'" type="primary" @click="createData">确定</el-button>
+                <el-button v-else type="primary" @click="updateData">确定</el-button>
+            </div>
+        </el-dialog>
+
+    </div>
+</template>
+<script>
+import { createItem, updateItem, goodsList, removeItem } from "@/api/goodsManage";
+import { listDept } from "@/api/goodsTypeList";
+import { listBrand } from '@/api/brand';
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { dataTypeList } from "@/api/public";
+import waves from "@/directive/waves"; // 水波纹指令
+
+export default {
+    name: 'goodsList',
+    components: { Treeselect },
+    directives: { waves },
+    data() {
+        return {
+            downloadLoading: false,
+            tes_type:[],
+            tes_level:[],
+            tes_series:[],
+            tes_package_format:[],
+            tes_get_season:[],
+            // 树选项
+            categoryOptions: [],
+            activeName: 'first',
+            brandOptions: [],
+            goodsStatusList: [
+                {
+                    type: 0,
+                    name: '启用'
+                },
+                {
+                    type: 1,
+                    name: '停用'
+                },
+            ],
+            list: [],
+            total: 0,
+            listLoading: false,
+            listQuery: {
+                page: 1,
+                limit: 10,
+                productName: '',
+                productShortForm: '',
+                categoryId: '',
+                brandId: '',
+                status: '',
+            },
+            listBrandQuery: {
+                limit: 1000,
+                sort: '+id'
+            },
+            dataForm: {
+                productName: undefined,
+                productCode: undefined,
+                productShortForm: undefined,
+                categoryId: undefined,
+                brandId: undefined,
+                price: undefined,
+                salePrice: undefined,
+                costPrice: undefined,
+                weight: undefined,
+                freightType: '0',
+                imgUrl: undefined,
+                teaTypeId: undefined,
+                teaLevel: undefined,
+                teaSeries: undefined,
+                teaPackageFormat: undefined,
+                teaOrigin: undefined,
+                teaGetSeason: undefined,
+                teaSellbyDate: undefined,
+                selectType: undefined,
+                date: undefined,
+                teaAgingYear: undefined,
+                teaFileUrl: undefined,
+                files: [],
+                teaStorageRequire: undefined,
+            },
+            dialogFormVisible: false,
+            dialogStatus: '',
+            textMap: {
+                update: "编辑",
+                create: "创建",
+            },
+            rules: {
+                productName: [{ required: true, message: "请填写商品名称", trigger: "blur" }],
+                productCode: [{ required: true, message: "请填写商品编号", trigger: "blur" }],
+                categoryId: [{ required: true, message: "请选择商品类别", trigger: "blur" }],
+                price: [{ required: true, message: "请填写零售价", trigger: "blur" }],
+                salePrice: [{ required: true, message: "请填写销售价", trigger: "blur" }],
+                costPrice: [{ required: true, message: "请填写成本价", trigger: "blur" }],
+                weight: [{ required: true, message: "请填写重量", trigger: "blur" }],
+                freightType: [{ required: true, message: "请选择状态", trigger: "blur" }],
+            },
+            dialogListVisible: false,
+            fileImgUrl: this.upLoadUrl,
+        }
+    },
+    created() {
+        this.getListCategory();
+        this.getBrandList();
+        this.getDictType();
+        this.getList();
+    },
+    methods: {
+        handleDownLoad(){
+            window.location.href = process.env.BASE_API + '/product/export/category?productName=' + this.listQuery.productName + '&productShortForm=' + this.listQuery.productShortForm;
+        },
+        getListCategory() {
+            listDept().then(response => {
+                this.categoryOptions = this.handleTree(response.data.data, "id");
+            });
+        },
+        /** 转换证书数据结构 */
+        normalizer(node) {
+            if (node.children && !node.children.length) {
+                delete node.children;
+            }
+            return {
+                id: node.id,
+                label: node.categoryName,
+                children: node.children
+            };
+        },
+        handleClick(tab, event) {
+            console.log(tab, event);
+        },
+        getDictType(){
+            //茶叶品牌tes_type
+            dataTypeList({ dictType: 'tes_type' }).then(response => {
+                this.tes_type = response.data.data;
+            });
+            //茶叶级别tes_level
+            dataTypeList({ dictType: 'tes_level' }).then(response => {
+                this.tes_level = response.data.data;
+            });
+            //茶叶系列tes_series
+            dataTypeList({ dictType: 'tes_series' }).then(response => {
+                this.tes_series = response.data.data;
+            });
+            //包装形式tes_package_format
+            dataTypeList({ dictType: 'tes_package_format' }).then(response => {
+                this.tes_package_format = response.data.data;
+            });
+            //采摘季节tes_get_season
+            dataTypeList({ dictType: 'tes_get_season' }).then(response => {
+                this.tes_get_season = response.data.data;
+            });
+        },
+        handleRemoveFile(file, fileList) {
+            console.log(file, fileList);
+            let teaFileUrl = [];
+            for (let i in fileList) {
+                let id = fileList[i].response.data.id;
+                teaFileUrl.push(id);
+            }
+            this.dataForm.teaFileUrl = teaFileUrl.join(",");
+        },
+        beforeUploadFile(file) {
+            console.log(file);
+            const size = file.size / 1024 / 1024;
+            console.log(size);
+            if (size > 10) {
+                this.$message.error("文件大小不能超过10MB!");
+                return false;
+            }
+        },
+        handleFileSuccess(res, file, fileList) {
+            console.log(file, fileList);
+            console.log("------", "==========");
+            console.log("res = ", res);
+
+            let teaFileUrl = [];
+            for (let i in fileList) {
+                let response = fileList[i].response;
+                if (response.errno && response.errno != "0") {
+                this.$message.error("该文件上传失败,已被移除,请重新上传!");
+                // 上传失败移除该 file 对象
+                fileList.splice(i, 1);
+                } else {
+                let id = fileList[i].response.data.id;
+                teaFileUrl.push(id);
+                }
+            }
+            this.dataForm.teaFileUrl = teaFileUrl.join(",");
+        },
+        handleRemoveImg(file, fileList) {
+            console.log(file, fileList);
+            let images = [];
+            for (let i in fileList) {
+                let response = fileList[i].response;
+                let url = response.data.url;
+                images.push(url);
+                this.dataForm.imgUrl = images.join(",");
+            }
+        },
+        beforeUploadImg(file) {
+            const isJPGs = file.type === "image/jpeg";
+            console.log(isJPGs);
+        },
+        handleExceed(files, fileList) {
+            this.$message.warning(
+                `当前限制选择 1 个文件,本次选择了 ${files.length} 个文件!,共选择了 ${files.length + fileList.length
+                } 个文件`
+            );
+        },
+        handleImgSucess(res, file, fileList) {
+            this.dataForm.imgUrl = ""; // 清空画廊图片数组
+
+            let images = [];
+            for (let i in fileList) {
+                let response = fileList[i].response;
+                if (response.errno && response.errno != "0") {
+                    this.$message.error("该图片上传失败,已被移除,请重新上传!");
+                    // 上传失败移除该 file 对象
+                    fileList.splice(i, 1);
+                } else {
+                    let url = response.data.url;
+                    images.push(url);
+                }
+            }
+
+            this.dataForm.imgUrl = images.join(",");
+        },
+        resetForm() {
+            this.dataForm = {
+                productName: undefined,
+                productCode: undefined,
+                productShortForm: undefined,
+                categoryId: undefined,
+                brandId: undefined,
+                price: undefined,
+                salePrice: undefined,
+                costPrice: undefined,
+                weight: undefined,
+                freightType: '0',
+                imgUrl: undefined,
+                images: [],
+                teaTypeId: undefined,
+                teaLevel: undefined,
+                teaSeries: undefined,
+                teaPackageFormat: undefined,
+                teaOrigin: undefined,
+                teaGetSeason: undefined,
+                teaSellbyDate: undefined,
+                selectType: undefined,
+                date: undefined,
+                teaAgingYear: undefined,
+                teaFileUrl: undefined,
+                files: [],
+                teaStorageRequire: undefined,
+            };
+        },
+        handleAdd() {
+            this.resetForm();
+
+            this.dialogFormVisible = true;
+            this.dialogStatus = "create";
+
+            this.$nextTick(() => {
+                this.$refs["dataForm"].clearValidate();
+            });
+        },
+        createData() {
+            this.$refs["dataForm"].validate((valid) => {
+                if (valid) {
+                    console.log(this.dataForm);
+                    createItem(this.dataForm)
+                        .then((response) => {
+                            this.getList();
+                            this.dialogFormVisible = false;
+                            this.$notify({
+                                title: "成功",
+                                message: "创建成功",
+                                type: "success",
+                                duration: 2000,
+                            });
+                            this.reload();
+                        })
+                        .catch(() => { });
+                }
+            });
+        },
+        handleUpdate(row) {
+            this.dataForm = Object.assign({}, row);
+            if (this.dataForm.imgUrl) {
+                let images = this.dataForm.imgUrl.split(",");
+                this.dataForm.images = [];
+                for (let i in images) {
+                    let url = images[i];
+                    let name = "image_" + i;
+
+                    this.dataForm.images.push({
+                        name: name,
+                        url: url,
+                        response: { error: "0", data: { url: url } },
+                    });
+                }
+            }
+            if (this.dataForm.teaFileUrl) {
+                let files = this.dataForm.teaFileUrl;
+                this.dataForm.files = [];
+                for (let i in files) {
+                    let url = files[i].url;
+                    let name = files[i].oldName;
+                    let id = files[i].id;
+
+                    this.dataForm.files.push({
+                        name: name,
+                        url: url,
+                        response: { error: "0", data: { url: url,id:id } },
+                    });
+                }
+            }
+            this.dialogStatus = 'update'
+            this.dialogFormVisible = true
+            this.$nextTick(() => {
+                this.$refs['dataForm'].clearValidate()
+            })
+        },
+        updateData() {
+            this.$refs['dataForm'].validate((valid) => {
+                if (valid) {
+                    updateItem(this.dataForm).then(() => {
+                        this.dialogFormVisible = false
+                        this.$notify({
+                            title: '成功',
+                            message: '更新成功',
+                            type: 'success',
+                            duration: 2000
+                        })
+                        this.getList()
+                    })
+
+                }
+
+            })
+        },
+        handleDelete(productCode) {
+            this.$confirm('确认删除吗?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                removeItem({ productCode: productCode }).then(response => {
+                    this.$notify({
+                        title: '成功',
+                        message: '删除成功',
+                        type: 'success',
+                        duration: 2000
+                    })
+                    this.getList();
+                })
+            }).catch(() => {
+
+            })
+
+        },
+        getBrandList() {
+            // 获取品牌信息
+            listBrand(this.listBrandQuery).then(response => {
+                this.brandOptions = response.data.data.items.map((item) => {
+                    return { value: item.id, label: item.name }
+                });
+            }).catch(() => {
+                this.brandOptions = [];
+            })
+        },
+        getList() {
+            this.listLoading = true
+            goodsList(this.listQuery).then(response => {
+                this.list = response.data.data.items
+                this.total = response.data.data.total
+                this.listLoading = false
+            }).catch(() => { })
+        },
+
+        handleQuery() {
+            this.listQuery.page = 1
+            this.getList()
+        },
+        /** 重置按钮操作 */
+        resetQuery() {
+            this.listQuery = {
+                page: 1,
+                limit: 10,
+                productName: '',
+                productShortForm: '',
+                categoryId: '',
+                brandId: '',
+                status: '',
+            };
+            this.handleQuery();
+        },
+        handleSizeChange(val) {
+            this.listQuery.limit = val
+            this.getList()
+        },
+        handleCurrentChange(val) {
+            this.listQuery.page = val
+            this.getList()
+        },
+    }
+}
+</script>
+<style>
+.good-img {
+    width: 50px;
+    height: 50px;
+}
+
+.input-with-select .el-input-group__prepend {
+    background-color: #fff;
+}
+</style>

+ 81 - 55
src/views/goodsManage/goodsList.vue

@@ -23,7 +23,7 @@ categoryOptions<template>
                 @click="handleQuery">查找</el-button>
                 <el-button class="filter-item" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
             <el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-plus">添加</el-button>
-            <el-button class="filter-item" :loading="downloadLoading" v-waves icon="el-icon-download" @click="handleDownload">导出</el-button>
+            <el-button class="filter-item" v-waves icon="el-icon-download" @click="handleDownLoad">导出</el-button>
         </div>
 
         <!-- 查询结果 -->
@@ -104,7 +104,8 @@ categoryOptions<template>
                             <el-input v-model="dataForm.costPrice" placeholder="请输入成本价"></el-input>
                         </el-form-item>
                         <el-form-item label="重量(g)" prop="weight">
-                            <el-input v-model="dataForm.weight" placeholder="请输入重量"></el-input>
+                            <!-- <el-input v-model="dataForm.weight" placeholder="请输入重量" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"></el-input> -->
+                            <el-input-number v-model="dataForm.weight" :min="1" label="请输入重量"></el-input-number>
                         </el-form-item>
                         <el-form-item label="状态" prop="freightType">
                             <el-radio-group v-model="dataForm.freightType">
@@ -122,23 +123,23 @@ categoryOptions<template>
 
                     </el-tab-pane>
                     <el-tab-pane label="茶叶属性" name="second">
-                        <el-form-item label="茶叶品牌">
+                        <!-- <el-form-item label="茶叶品牌">
                             <el-select v-model="dataForm.teaTypeId" filterable placeholder="请选择" style="width: 100%">
-                                <el-option :key="item.dictLabel" v-for="item in tes_type" :label="item.dictLabel"
+                                <el-option :key="item.dictLabel" v-for="item in tea_type" :label="item.dictLabel"
                                     :value="item.dictLabel">
                                 </el-option>
                             </el-select>
-                        </el-form-item>
+                        </el-form-item> -->
                         <el-form-item label="茶叶级别">
                             <el-select v-model="dataForm.teaLevel" filterable placeholder="请选择" style="width: 100%">
-                                <el-option :key="item.dictLabel" v-for="item in tes_level" :label="item.dictLabel"
+                                <el-option :key="item.dictLabel" v-for="item in tea_level" :label="item.dictLabel"
                                     :value="item.dictLabel">
                                 </el-option>
                             </el-select>
                         </el-form-item>
                         <el-form-item label="茶叶系列">
                             <el-select v-model="dataForm.teaSeries" filterable placeholder="请选择" style="width: 100%">
-                                <el-option :key="item.dictLabel" v-for="item in tes_series" :label="item.dictLabel"
+                                <el-option :key="item.dictLabel" v-for="item in tea_series" :label="item.dictLabel"
                                     :value="item.dictLabel">
                                 </el-option>
                             </el-select>
@@ -146,7 +147,7 @@ categoryOptions<template>
                         <el-form-item label="包装形式">
                             <el-select v-model="dataForm.teaPackageFormat" filterable placeholder="请选择"
                                 style="width: 100%">
-                                <el-option :key="item.dictLabel" v-for="item in tes_package_format" :label="item.dictLabel"
+                                <el-option :key="item.dictLabel" v-for="item in tea_package_format" :label="item.dictLabel"
                                     :value="item.dictLabel">
                                 </el-option>
                             </el-select>
@@ -156,21 +157,21 @@ categoryOptions<template>
                         </el-form-item>
                         <el-form-item label="采摘季节">
                             <el-radio-group v-model="dataForm.teaGetSeason">
-                                <el-radio v-for="item in tes_get_season" :key="item.dictLabel" :label="item.dictLabel"></el-radio>
+                                <el-radio v-for="item in tea_get_season" :key="item.dictLabel" :label="item.dictLabel"></el-radio>
                             </el-radio-group>
                         </el-form-item>
                         <el-form-item label="保质期">
-                            <el-input placeholder="数值" v-model="dataForm.teaSellbyDate" class="input-with-select">
-                                <el-select style="width: 80px;" v-model="dataForm.selectType" slot="prepend"
+                            <el-input placeholder="数值" v-model="dataForm.tea_guarantee_number" class="input-with-select">
+                                <el-select style="width: 80px;" v-model="dataForm.tea_guarantee_unit" slot="prepend"
                                     placeholder="请选择">
-                                    <el-option label="年" value="1"></el-option>
-                                    <el-option label="月" value="2"></el-option>
-                                    <el-option label="日" value="3"></el-option>
+                                    <el-option label="年" value=""></el-option>
+                                    <el-option label="月" value=""></el-option>
+                                    <el-option label="日" value=""></el-option>
                                 </el-select>
                             </el-input>
                         </el-form-item>
                         <el-form-item label="生产日期">
-                            <el-date-picker style="width: 100%;" v-model="dataForm.date" type="date"
+                            <el-date-picker style="width: 100%;" v-model="dataForm.product_date" type="date"
                                 placeholder="选择日期"></el-date-picker>
                         </el-form-item>
                         <el-form-item label="陈华年份">
@@ -184,10 +185,7 @@ categoryOptions<template>
                         </el-form-item>
                         <el-form-item label="存储要求">
                             <el-checkbox-group v-model="dataForm.teaStorageRequire">
-                                <el-checkbox label="避光" name="type"></el-checkbox>
-                                <el-checkbox label="防潮" name="type"></el-checkbox>
-                                <el-checkbox label="通风" name="type"></el-checkbox>
-                                <el-checkbox label="冷藏" name="type"></el-checkbox>
+                                <el-checkbox v-for="item in tea_storage_require" :key="item.dictLabel" :label="item.dictLabel" name="type"></el-checkbox>
                             </el-checkbox-group>
                         </el-form-item>
                     </el-tab-pane>
@@ -218,12 +216,12 @@ export default {
     directives: { waves },
     data() {
         return {
-            downloadLoading: false,
-            tes_type:[],
-            tes_level:[],
-            tes_series:[],
-            tes_package_format:[],
-            tes_get_season:[],
+            tea_type:[],
+            tea_level:[],
+            tea_series:[],
+            tea_package_format:[],
+            tea_get_season:[],
+            tea_storage_require:[],
             // 树选项
             categoryOptions: [],
             activeName: 'first',
@@ -246,7 +244,7 @@ export default {
                 limit: 10,
                 productName: '',
                 productShortForm: '',
-                categoryId: '',
+                categoryId: undefined,
                 brandId: '',
                 status: '',
             },
@@ -263,7 +261,7 @@ export default {
                 price: undefined,
                 salePrice: undefined,
                 costPrice: undefined,
-                weight: undefined,
+                weight: 1,
                 freightType: '0',
                 imgUrl: undefined,
                 teaTypeId: undefined,
@@ -272,13 +270,13 @@ export default {
                 teaPackageFormat: undefined,
                 teaOrigin: undefined,
                 teaGetSeason: undefined,
-                teaSellbyDate: undefined,
-                selectType: undefined,
-                date: undefined,
+                tea_guarantee_number: undefined,
+                tea_guarantee_unit: '年',
+                product_date: undefined,
                 teaAgingYear: undefined,
                 teaFileUrl: undefined,
                 files: [],
-                teaStorageRequire: undefined,
+                teaStorageRequire: [],
             },
             dialogFormVisible: false,
             dialogStatus: '',
@@ -290,10 +288,34 @@ export default {
                 productName: [{ required: true, message: "请填写商品名称", trigger: "blur" }],
                 productCode: [{ required: true, message: "请填写商品编号", trigger: "blur" }],
                 categoryId: [{ required: true, message: "请选择商品类别", trigger: "blur" }],
-                price: [{ required: true, message: "请填写零售价", trigger: "blur" }],
-                salePrice: [{ required: true, message: "请填写销售价", trigger: "blur" }],
-                costPrice: [{ required: true, message: "请填写成本价", trigger: "blur" }],
-                weight: [{ required: true, message: "请填写重量", trigger: "blur" }],
+                price: [
+                    { required: true, message: "请填写零售价", trigger: "blur" },
+                    {
+                        pattern: /^(([1-9]{1}\d{0,9})|(0{1}))(\.\d{1,2})?$/,
+                        message: "请输入合法的金额数字,最多两位小数",
+                        trigger: "blur"
+                    }
+                ],
+                salePrice: [
+                    { required: true, message: "请填写销售价", trigger: "blur" },
+                    {
+                        pattern: /^(([1-9]{1}\d{0,9})|(0{1}))(\.\d{1,2})?$/,
+                        message: "请输入合法的金额数字,最多两位小数",
+                        trigger: "blur"
+                    }
+                ],
+                costPrice: [
+                    { required: true, message: "请填写成本价", trigger: "blur" },
+                    {
+                        pattern: /^(([1-9]{1}\d{0,9})|(0{1}))(\.\d{1,2})?$/,
+                        message: "请输入合法的金额数字,最多两位小数",
+                        trigger: "blur"
+                    }
+                ],
+                weight: [
+                    { required: true, message: "请填写重量", trigger: "blur" },
+
+                ],
                 freightType: [{ required: true, message: "请选择状态", trigger: "blur" }],
             },
             dialogListVisible: false,
@@ -330,25 +352,29 @@ export default {
             console.log(tab, event);
         },
         getDictType(){
-            //茶叶品牌tes_type
-            dataTypeList({ dictType: 'tes_type' }).then(response => {
-                this.tes_type = response.data.data;
+            //茶叶品牌tea_type
+            dataTypeList({ dictType: 'tea_type' }).then(response => {
+                this.tea_type = response.data.data;
+            });
+            //茶叶级别tea_level
+            dataTypeList({ dictType: 'tea_level' }).then(response => {
+                this.tea_level = response.data.data;
             });
-            //茶叶级别tes_level
-            dataTypeList({ dictType: 'tes_level' }).then(response => {
-                this.tes_level = response.data.data;
+            //茶叶系列tea_series
+            dataTypeList({ dictType: 'tea_series' }).then(response => {
+                this.tea_series = response.data.data;
             });
-            //茶叶系列tes_series
-            dataTypeList({ dictType: 'tes_series' }).then(response => {
-                this.tes_series = response.data.data;
+            //包装形式tea_package_format
+            dataTypeList({ dictType: 'tea_package_format' }).then(response => {
+                this.tea_package_format = response.data.data;
             });
-            //包装形式tes_package_format
-            dataTypeList({ dictType: 'tes_package_format' }).then(response => {
-                this.tes_package_format = response.data.data;
+            //采摘季节tea_get_season
+            dataTypeList({ dictType: 'tea_get_season' }).then(response => {
+                this.tea_get_season = response.data.data;
             });
-            //采摘季节tes_get_season
-            dataTypeList({ dictType: 'tes_get_season' }).then(response => {
-                this.tes_get_season = response.data.data;
+            //存储要求tea_storage_require
+            dataTypeList({ dictType: 'tea_storage_require' }).then(response => {
+                this.tea_storage_require = response.data.data;
             });
         },
         handleRemoveFile(file, fileList) {
@@ -436,7 +462,7 @@ export default {
                 price: undefined,
                 salePrice: undefined,
                 costPrice: undefined,
-                weight: undefined,
+                weight: 1,
                 freightType: '0',
                 imgUrl: undefined,
                 images: [],
@@ -446,13 +472,13 @@ export default {
                 teaPackageFormat: undefined,
                 teaOrigin: undefined,
                 teaGetSeason: undefined,
-                teaSellbyDate: undefined,
-                selectType: undefined,
-                date: undefined,
+                tea_guarantee_number: undefined,
+                tea_guarantee_unit: '年',
+                product_date: undefined,
                 teaAgingYear: undefined,
                 teaFileUrl: undefined,
                 files: [],
-                teaStorageRequire: undefined,
+                teaStorageRequire: [],
             };
         },
         handleAdd() {

+ 1 - 1
src/views/goodsManage/goodsTypeList.vue

@@ -239,7 +239,7 @@
         getDept({id:row.id}).then(response => {
           let data = response.data.data;
           this.form = data;
-          if (data.categoryParentId) {
+          if (data.parentId) {
             this.isShowParent = true;
           }
           this.open = true;