sunlupeng 1 year ago
parent
commit
cea666a7a7

+ 46 - 3
src/views/activityManage/activityList.vue

@@ -107,6 +107,24 @@
                     </template>
                 </el-input>
                 </el-form-item>
+                <el-form-item label="关联兑换卷" prop="relationCoupon">
+                    <el-radio-group v-model="dataForm.relationCoupon">
+                        <el-radio :label="'0'">否</el-radio>
+                        <el-radio :label="'1'">是</el-radio>
+                    </el-radio-group>
+                </el-form-item>
+                <el-form-item v-if="dataForm.relationCoupon=='1'"  label="兑换券" prop="couponIds">
+                    <el-select v-model="dataForm.couponIds" clearable multiple collapse-tags placeholder="请选择兑换券" class="filter-item" style="width: 300px">
+                        <el-option :key="item.id" v-for="item in couponsList" :label="item.couponName" :value="item.id">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item v-if="dataForm.type=='3'" label="抽奖次数" prop="prizeNum">
+                    <el-input-number :min="1" :precision="0" :step="1" v-model="dataForm.prizeNum"></el-input-number>
+                </el-form-item>
+                <el-form-item label="活动连接">
+                    <el-input v-model="dataForm.activityUrl" style="width: 350px"></el-input>
+                </el-form-item>
                 <el-form-item label="参与人">
                     <el-select v-model="dataForm.participants" multiple filterable placeholder="请选择" style="width: 350px">
                         <el-option :key="item.loginId" v-for="item in participantsList" :label="item.userName" :value="item.loginId">
@@ -152,7 +170,7 @@
 <script>
 import { createItem, updateItem, activityList, activityState } from "@/api/activityManage";
 import Crontab from '@/components/Crontab'
-import { allUserList,dataTypeList } from "@/api/public";
+import { allUserList,dataTypeList,couponsList } from "@/api/public";
 import waves from "@/directive/waves"; // 水波纹指令
 import Tinymce from '@/components/Tinymce'
 
@@ -161,6 +179,7 @@ export default {
     directives: { waves },
     data() {
         return {
+            couponsList:[],
              // 是否显示Cron表达式弹出层
             openCronStart: false,
             openCronEnd: false,
@@ -192,6 +211,9 @@ export default {
                 activityUrl: '',
                 startCron: '',
                 endCron: '',
+                relationCoupon:'0',
+                couponIds:[],
+                prizeNum:'',
                 participants: [],
                 content: '',
                 images: [],
@@ -220,18 +242,33 @@ export default {
                 ],
                 endCron: [
                     { required: true, message: "cron执行表达式不能为空", trigger: "blur" }
-                ]
+                ],
+                relationCoupon: [
+                    { required: true, message: "请选择是否关联兑换卷", trigger: "blur" }
+                ],
+                couponIds: [
+                    { required: true, message: "请关联兑换券", trigger: "blur" }
+                ],
+                prizeNum: [
+                    { required: true, message: "请设置抽奖次数", trigger: "blur" }
+                ],
             },
             fileImgUrl: this.upLoadUrl,
             typeList:[],
         }
     },
     created() {
+        this.getCouponsList();
         this.getTypeList();
         this.getAllUserList(); 
         this.getList();
     },
     methods: {
+        getCouponsList() {
+            couponsList({}).then(response => {
+                this.couponsList = response.data.data;
+            }).catch(() => { });
+        },
         getTypeList(){
             dataTypeList({dictType:'act_type'}).then(response => {
                 this.typeList = response.data.data;
@@ -328,7 +365,10 @@ export default {
                 activityUrl: '',
                 startCron: '',
                 endCron: '',
-                participants: undefined,
+                relationCoupon:'0',
+                couponIds:[],
+                prizeNum:'',
+                participants: [],
                 content: '',
                 images: [],
             };
@@ -365,6 +405,9 @@ export default {
         },
         handleUpdate(row) {
             this.dataForm = Object.assign({}, row);
+            if(this.dataForm.couponIds==null){
+                this.dataForm.couponIds = [];
+            }
             let content = this.dataForm.content;
             if (this.dataForm.imgUrl) {
                 let images = this.dataForm.imgUrl.split(",");

+ 16 - 10
src/views/couponsManage/couponsList.vue

@@ -17,7 +17,7 @@
       </el-date-picker>
       <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查找</el-button>
       <el-button class="filter-item" type="primary" @click="handleCreate" icon="el-icon-edit">添加</el-button>
-      <el-button class="filter-item" type="warning" icon="el-icon-delete" @click="delAll">批量删除</el-button>
+      <!-- <el-button class="filter-item" type="warning" icon="el-icon-delete" @click="delAll">批量删除</el-button> -->
     </div>
 
     <!-- 查询结果 -->
@@ -75,8 +75,8 @@
                         </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item v-if="dataForm.useType=='1'" label="商品" prop="skuId">
-          <el-select v-model="dataForm.skuId" clearable multiple collapse-tags placeholder="请选择商品" class="filter-item" style="width: 300px">
+        <el-form-item v-if="dataForm.useType=='1'" label="商品" prop="skuIds">
+          <el-select v-model="dataForm.skuIds" clearable multiple collapse-tags placeholder="请选择商品" class="filter-item" style="width: 300px">
             <el-option :key="item.skuId" v-for="item in goodsList" :label="item.name" :value="item.skuId">
             </el-option>
           </el-select>
@@ -93,12 +93,12 @@
           </el-date-picker>
         </el-form-item>
         <el-form-item label="数量" prop="num">
-          <el-input-number :precision="0" :step="1" v-model="dataForm.num"></el-input-number>
+          <el-input-number :min="1" :precision="0" :step="1" v-model="dataForm.num"></el-input-number>
         </el-form-item>
         <el-form-item label="状态">
           <el-radio-group v-model="dataForm.status">
-            <el-radio :label="'0'">正常</el-radio>
-            <el-radio :label="'1'">停用</el-radio>
+            <el-radio :label="'0'">关闭</el-radio>
+            <el-radio :label="'1'">开启</el-radio>
           </el-radio-group>
         </el-form-item>
         <!-- <el-form-item label="备注">
@@ -177,7 +177,7 @@ export default {
         couponType: undefined,
         useType:undefined,
         categorys:[],
-        skuId: [],
+        skuIds: [],
         enableEndTime: undefined,
         num: undefined,
         status: '1',
@@ -196,7 +196,7 @@ export default {
         couponType: [{ required: true, message: "请选择类型", trigger: "blur" }],
         useType: [{ required: true, message: "请选择使用类型", trigger: "blur" }],
         categorys: [{ required: true, message: "请选择分类", trigger: "blur" }],
-        skuId: [{ required: true, message: "请选择商品", trigger: "blur" }],
+        skuIds: [{ required: true, message: "请选择商品", trigger: "blur" }],
         enableEndTime: [{ required: true, message: "请选择截止日期", trigger: "blur" }],
         num: [{ required: true, message: "数量不能为空", trigger: "blur" }],
       },
@@ -230,7 +230,7 @@ export default {
         couponType: undefined,
         useType:undefined,
         categorys:[],
-        skuId: [],
+        skuIds: [],
         enableEndTime: undefined,
         num: undefined,
         status: '1',
@@ -294,6 +294,12 @@ export default {
 
     handleUpdate(row) {
       this.dataForm = Object.assign({}, row);
+      if(this.dataForm.categorys==null){
+        this.dataForm.categorys=[];
+      }
+      if(this.dataForm.skuIds==null){
+        this.dataForm.skuIds=[];
+      }
       this.dialogStatus = 'update'
       this.dialogFormVisible = true
       this.$nextTick(() => {
@@ -326,7 +332,7 @@ export default {
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
-        deleteitem({ dictIds: row.dictId }).then(response => {
+        deleteitem({ couponId: row.id,status:-1 }).then(response => {
           this.$notify({
             title: '成功',
             message: '删除成功',

+ 698 - 0
src/views/giftManage/giftList copy.vue

@@ -0,0 +1,698 @@
+<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.name"></el-input>
+            <el-input clearable class="filter-item" style="width: 200px;" placeholder="礼品编号"
+                v-model="listQuery.seq"></el-input>
+            <el-select v-model="listQuery.status" clearable placeholder="状态" style="top: -4px;width: 200px;">
+                <el-option :key="item.type" v-for="item in goodsStatusList" :label="item.name" :value="item.type">
+                </el-option>
+            </el-select>
+            <el-select v-model="listQuery.productAttribute" clearable placeholder="商品属性" class="filter-item" style="width: 200px">
+                        <el-option :key="item.dictValue" v-for="item in productAttributeList" :label="item.dictLabel"
+                            :value="item.dictValue">
+                        </el-option>
+                    </el-select>
+            <el-select v-model="listQuery.deliveryType" clearable placeholder="兑换方式" class="filter-item" style="width: 200px">
+                        <el-option :key="item.type" v-for="item in deliveryTypeList" :label="item.name" :value="item.type">
+                        </el-option>
+            </el-select>
+            <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查找</el-button>
+            <el-button class="filter-item" type="primary" @click="handleCreate" icon="el-icon-edit">添加</el-button>
+
+        </div>
+
+        <!-- 查询结果 -->
+        <el-table size="small" :data="list" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit
+            highlight-current-row>
+            <el-table-column type="index" label="序号" header-align="center" align="center">
+            </el-table-column>
+
+            <el-table-column align="center" min-width="200px" label="礼品名称" prop="name">
+            </el-table-column>
+
+            <el-table-column align="center" min-width="120px" label="礼品编号" prop="seq">
+            </el-table-column>
+
+            <el-table-column align="center" min-width="80px" label="礼品属性" prop="productAttributeName">
+            </el-table-column>
+            <el-table-column align="center" min-width="100px" label="库存量" prop="actualStock">
+            </el-table-column>
+            <el-table-column align="center" min-width="100px" label="可兑换库存量" prop="stock">
+            </el-table-column>
+            <el-table-column align="center" min-width="150px" label="兑换方式" prop="deliveryTypeName">
+            </el-table-column>
+            <el-table-column align="center" min-width="100px" label="礼品所在地" prop="location">
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="礼品状态">
+                <template slot-scope="props">
+                    <span v-if="props.row.status == 1">上架</span>
+                    <span v-if="props.row.status == 0">下架</span>
+                </template>
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="兑换记录">
+                <template slot-scope="props">
+                    <span @click="handleView(props.row)" style="color:green;cursor: pointer;">查看</span>
+                </template>
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="福利名称" prop="title">
+            </el-table-column>
+            <el-table-column align="center" label="操作" width="350px" class-name="small-padding fixed-width">
+                <template slot-scope="scope">
+                    <el-button type="primary" size="small" @click="handleUpdate(scope.row)">编辑</el-button>
+                    <el-button v-if="scope.row.status == 0" type="success" size="small"
+                        @click="changeGoodsState(scope.row.skuId, 1)">上架</el-button>
+                    <el-button v-if="scope.row.status == 1" type="warning" size="small"
+                        @click="changeGoodsState(scope.row.skuId, 0)">下架</el-button>
+                    <el-button type="primary" size="small" @click="handleRelated(scope.row)">关联福利</el-button>
+                    <el-button type="danger" size="mini" @click="handleDelete(scope.row.skuId, -1)">删除</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="兑换记录" :visible.sync="dialogListVisible" width="70%">
+            <div class="filter-container">
+                <el-select filterable v-model="itemListQuery.deptId" clearable placeholder="部门" style="top: -4px;width: 200px;">
+                    <el-option :key="item.deptId" v-for="item in depTypeList" :label="item.deptName" :value="item.deptId">
+                    </el-option>
+                </el-select>
+                <el-input clearable class="filter-item" style="width: 200px;" placeholder="员工名称"
+                    v-model="itemListQuery.purchaserName"></el-input>
+                <el-button class="filter-item" type="primary" v-waves icon="el-icon-search"
+                    @click="itemHandleFilter">查找</el-button>
+                <el-button class="filter-item" type="primary" v-waves icon="el-icon-download">导出</el-button>
+
+            </div>
+            <!-- 查询结果 -->
+            <el-table size="small" :data="itemList" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit
+                highlight-current-row>
+                <el-table-column type="index" label="序号" header-align="center" align="center">
+                </el-table-column>
+                <el-table-column align="center" width="200px" label="部门" prop="deptName">
+                </el-table-column>
+                <el-table-column align="center" label="员工姓名" prop="purchaser">
+                </el-table-column>
+                <el-table-column align="center" label="兑换方式" prop="deliveryTypeName">
+                </el-table-column>
+                <el-table-column align="center" label="兑换数量" prop="skuCount">
+                </el-table-column>
+                <el-table-column align="center" label="联系人" prop="contact">
+                </el-table-column>
+                <el-table-column align="center" width="120px" label="联系方式" prop="contactPhone">
+                </el-table-column>
+                <el-table-column align="center" width="200px" label="地址" prop="contactAddr">
+                </el-table-column>
+                <el-table-column align="center" width="200px" label="邮箱" prop="contactEmail">
+                </el-table-column>
+                <el-table-column align="center" width="150px" label="兑换时间" prop="createTime">
+                </el-table-column>
+            </el-table>
+
+            <!-- 分页 -->
+            <div class="pagination-container">
+                <el-pagination background @size-change="itemHandleSizeChange" @current-change="itemHandleCurrentChange"
+                    :current-page="itemListQuery.page" :page-sizes="[10, 20, 30, 50]" :page-size="itemListQuery.limit"
+                    layout="total, sizes, prev, pager, next, jumper" :total="itemTotal">
+                </el-pagination>
+            </div>
+        </el-dialog>
+        <!-- 添加或修改对话框 -->
+        <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='width:700px;margin-left:50px;'>
+                <el-form-item label="礼品编号" prop="seq">
+                    <el-input disabled placeholder="添加成功后自动生成" readonly v-model="dataForm.seq"></el-input>
+                </el-form-item>
+                <el-form-item label="礼品名称" prop="name">
+                    <el-input v-model="dataForm.name"></el-input>
+                </el-form-item>
+
+               
+
+                <el-form-item label="礼品属性" prop="productAttribute">
+                    <el-select v-model="dataForm.productAttribute" filterable placeholder="请选择" style="width: 350px"
+                        value-key="value" @change="changeProductAttribute">
+                        <el-option :key="item.dictValue" v-for="item in productAttributeList" :label="item.dictLabel"
+                            :value="item.dictValue">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="兑换方式" prop="deliveryType">
+                    <el-select v-model="dataForm.deliveryType" filterable placeholder="请选择" style="width: 350px">
+                        <el-option :key="item.type" v-for="item in deliveryTypeList" :label="item.name" :value="item.type">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item v-if="dataForm.deliveryType==0" label="礼品所在地" prop="location">
+                    <el-select v-model="dataForm.location" filterable placeholder="请选择" style="width: 350px">
+                        <el-option :key="item.dictLabel" v-for="item in locationList" :label="item.dictLabel" :value="item.dictLabel">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item style="width: 800px" label="礼品图片" prop="imgUrl">
+                    <el-upload :action="fileImgUrl" list-type="picture-card" :file-list="dataForm.images"
+                            :on-success="handleGallerySucess" :on-exceed="handleExceed" :before-upload="uploadBannerImg"
+                            :on-remove="handleRemove">
+                            <i class="el-icon-plus"></i>
+                        </el-upload>
+                </el-form-item>
+                <el-form-item label="库存量" prop="actualStock">
+                    <el-input-number :precision="0" :step="1" v-model="dataForm.actualStock"></el-input-number>
+                </el-form-item>
+                <el-form-item
+                    style="width: 800px"
+                    label="礼品说明"
+                    prop="comment"
+                    >
+                <tinymce v-model="dataForm.comment" ref="tinymce"></tinymce>
+                </el-form-item>
+            </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>
+
+         <!-- 关联福利操作 -->
+        <el-dialog :close-on-click-modal="false" title="关联福利" :visible.sync="dialogRelatedVisible" width="40%">
+            <div class="filter-container">
+                <el-select clearable v-model="welfareId" style="width: 100%;" placeholder="请选择">
+                    <el-option v-for="item in options" :key="item.id" :label="item.title" :value="item.id">
+                    </el-option>
+                </el-select>
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="dialogRelatedVisible = false">取消</el-button>
+                <el-button type="primary" @click="handleRelatedWelfare">确定</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+  
+<style>
+.demo-table-expand {
+    font-size: 0;
+}
+
+.demo-table-expand label {
+    width: 200px;
+    color: #99a9bf;
+}
+
+.demo-table-expand .el-form-item {
+    margin-right: 0;
+    margin-bottom: 0;
+}
+</style>
+  
+<script>
+import { createItem, updateItem, giftList, giftState, exchangeHistory, relatedWelfare, welfareList } from "@/api/giftManage";
+import { depTypeList,dataTypeList } from "@/api/public";
+import waves from "@/directive/waves"; // 水波纹指令
+import Tinymce from '@/components/Tinymce'
+
+export default {
+    name: 'giftList',
+    components: { Tinymce },
+    directives: { waves },
+    data() {
+        return {
+            welfareId:'',
+            skuId:'',
+            options: [],
+            locationList:[],
+            productAttributeList: [],
+            deliveryTypeList: [
+            {
+                    type: 0,
+                    name: '办公室领取'
+                },
+                {
+                    type: 1,
+                    name: '快递'
+                },
+                {
+                    type: 2,
+                    name: '卷码兑换'
+                },
+                {
+                    type: 3,
+                    name: '线下组织'
+                },
+               
+            ],
+            goodsStatusList: [
+                {
+                    type: 1,
+                    name: '上架'
+                },
+                {
+                    type: 0,
+                    name: '下架'
+                },
+            ],
+            depTypeList: [],
+            list: [],
+            itemList: [
+                
+            ],
+            total: 0,
+            itemTotal: 0,
+            listLoading: false,
+            downloadLoading: false,
+            listQuery: {
+                page: 1,
+                limit: 10,
+                name: '',
+                seq: '',
+                status: '',
+                productAttribute:'',
+                deliveryType:'',
+            },
+            itemListQuery: {
+                page: 1,
+                limit: 10,
+                deptId: '',
+                purchaserName: '',
+            },
+            dataForm: {
+                comment: undefined,
+                name: undefined,
+                seq: undefined,
+                productAttribute: undefined,
+                imgUrl: undefined,
+                integral: undefined,
+                actualStock: undefined,
+                deliveryType: undefined,
+                location: undefined,
+                images: [],
+            },
+            dialogFormVisible: false,
+            dialogStatus: '',
+            textMap: {
+                update: "编辑",
+                create: "创建",
+            },
+            rules: {
+                name: [{ required: true, message: "请填写礼品名称", trigger: "blur" }],
+                imgUrl: [{ required: true, message: "请上传礼品图片", trigger: "blur" }],
+                productAttribute: [{ required: true, message: "请选择礼品属性", trigger: "blur" }],
+                integral: [{ required: true, message: "请填写礼品积分", trigger: "blur" }],
+                actualStock: [{ required: true, message: "请设置库存量", trigger: "blur" }],
+                deliveryType: [{ required: true, message: "请选择兑换方式", trigger: "blur" }],
+                location: [{ required: true, message: "请选择礼品所在地", trigger: "blur" }],
+                comment: [{ required: true, message: "说明不能为空", trigger: "blur" }],
+            },
+            dialogListVisible: false,
+            dialogRelatedVisible:false,
+            fileImgUrl: this.upLoadUrl,
+        }
+    },
+    created() {
+        this.getProductAttributeList();
+        this.getDataTypeList(); 
+        this.getDepTypeList(); 
+        this.getList();
+    },
+    methods: {
+        getDataTypeList() {
+            dataTypeList({dictType:'mall_sku_location'}).then(response => {
+                this.locationList = response.data.data;
+            }).catch(() => {});
+        },
+        getProductAttributeList(){
+            dataTypeList({dictType:'mall_sku_attribute'}).then(response => {
+                this.productAttributeList = response.data.data;
+            }).catch(() => {});
+        },
+        getWelfareList(){
+            welfareList({status:1}).then(response => {
+                this.options = response.data.data;
+            }).catch(() => {});
+        },
+        changeProductAttribute(val) {
+            this.dataForm.deliveryType = undefined;
+            this.dataForm.location = undefined;
+            this.deliveryTypeList = [
+                {
+                    type: 0,
+                    name: '办公室领取'
+                },
+                {
+                    type: 1,
+                    name: '快递'
+                },
+                {
+                    type: 2,
+                    name: '卷码兑换'
+                },
+                {
+                    type: 3,
+                    name: '线下组织'
+                },
+               
+            ];
+            if (val == 1) {
+                this.deliveryTypeList = [
+                    {
+                        type: 1,
+                        name: '快递'
+                    },
+                    {
+                        type: 0,
+                        name: '办公室领取'
+                    },
+                ]
+            } 
+            if (val == 2 || val == 3)  {
+                this.deliveryTypeList = [
+                    {
+                        type: 2,
+                        name: '卷码兑换'
+                    },
+                ]
+            }
+            if (val == 5)  {
+                this.deliveryTypeList = [
+                    {
+                        type: 3,
+                        name: '线下组织'
+                    },
+                ]
+            }
+        },
+        handleRemove(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(",");
+            }
+        },
+        uploadBannerImg(file) {
+            const isJPGs = file.type === "image/jpeg";
+            console.log(isJPGs);
+        },
+        handleExceed(files, fileList) {
+            this.$message.warning(
+                `当前限制选择 5 个文件,本次选择了 ${files.length} 个文件!,共选择了 ${files.length + fileList.length
+                } 个文件`
+            );
+        },
+        handleGallerySucess(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 = {
+                comment: undefined,
+                name: undefined,
+                seq: undefined,
+                productAttribute: undefined,
+                imgUrl: undefined,
+                integral: undefined,
+                actualStock: undefined,
+                deliveryType: undefined,
+                location: undefined,
+                images: [],
+            };
+        },
+        handleCreate() {
+            this.resetForm();
+
+            this.dialogFormVisible = true;
+            this.dialogStatus = "create";
+
+            this.$nextTick(() => {
+                this.$refs.tinymce.setContent("");
+                this.$refs["dataForm"].clearValidate();
+            });
+        },
+        createData() {
+            
+            this.$refs["dataForm"].validate((valid) => {
+                if (valid) {
+                    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);
+            this.dataForm.productAttribute = row.productAttribute.toString();
+            let comment = this.dataForm.comment;
+            let val = row.productAttribute;
+            this.deliveryTypeList = [
+                {
+                    type: 0,
+                    name: '办公室领取'
+                },
+                {
+                    type: 1,
+                    name: '快递'
+                },
+                {
+                    type: 2,
+                    name: '卷码兑换'
+                },
+                {
+                    type: 3,
+                    name: '线下组织'
+                },
+               
+            ];
+            if (val == 1) {
+                this.deliveryTypeList = [
+                    {
+                        type: 1,
+                        name: '快递'
+                    },
+                    {
+                        type: 0,
+                        name: '办公室领取'
+                    },
+                ]
+            } 
+            if (val == 2 || val == 3)  {
+                this.deliveryTypeList = [
+                    {
+                        type: 2,
+                        name: '卷码兑换'
+                    },
+                ]
+            }
+            if (val == 5)  {
+                this.deliveryTypeList = [
+                    {
+                        type: 3,
+                        name: '线下组织'
+                    },
+                ]
+            }
+            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 } },
+                    });
+                }
+            }
+            this.dialogStatus = 'update'
+            this.dialogFormVisible = true
+            this.$nextTick(() => {
+                this.$refs.tinymce.setContent(comment);
+                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()
+                        })
+
+                }
+
+            })
+        },
+        handleRelated(row) {
+            this.welfareId = '';
+            this.skuId = row.skuId;
+            this.getWelfareList();
+            this.dialogRelatedVisible = true
+        },
+        handleRelatedWelfare(){
+            relatedWelfare({ skuId: this.skuId, welfareId: this.welfareId }).then(response => {
+                this.dialogRelatedVisible = false;
+                this.$notify({
+                    title: '成功',
+                    message: '福利关联成功',
+                    type: 'success',
+                    duration: 2000
+                })
+                this.getList()
+            })
+        },
+        changeGoodsState(id, index) {
+            giftState({ skuId: id, status: index }).then(response => {
+                this.$notify({
+                    title: '成功',
+                    message: '礼品状态修改成功',
+                    type: 'success',
+                    duration: 2000
+                })
+                this.getList()
+            })
+        },
+        handleDelete(id, index) {
+            this.$confirm('确认删除吗?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                giftState({ skuId: id, status: index }).then(response => {
+                    this.$notify({
+                        title: '成功',
+                        message: '删除成功',
+                        type: 'success',
+                        duration: 2000
+                    })
+                    this.getList();
+                })
+            }).catch(() => {})
+        },
+        getDepTypeList() {
+            depTypeList().then(response => {
+                this.depTypeList = response.data.data;
+            }).catch(() => {});
+        },
+        getList() {
+            this.listLoading = true
+            giftList(this.listQuery).then(response => {
+                this.list = response.data.data.items
+                this.total = response.data.data.total
+                this.listLoading = false
+            }).catch(() => {})
+        },
+        getItemList() {
+            this.listLoading = true
+            exchangeHistory(this.itemListQuery).then(response => {
+                this.itemList = response.data.data.items
+                this.itemLotal = response.data.data.total
+                this.listLoading = false
+            }).catch(() => {})
+        },
+
+        handleFilter() {
+            this.listQuery.page = 1
+            this.getList()
+        },
+        handleSizeChange(val) {
+            this.listQuery.limit = val
+            this.getList()
+        },
+        handleCurrentChange(val) {
+            this.listQuery.page = val
+            this.getList()
+        },
+
+        itemHandleFilter() {
+            this.itemListQuery.page = 1
+            this.getItemList()
+        },
+        itemHandleSizeChange(val) {
+            this.itemListQuery.limit = val
+            this.getItemList()
+        },
+        itemHandleCurrentChange(val) {
+            this.itemListQuery.page = val
+            this.getItemList()
+        },
+
+        handleView(row) {
+            this.itemListQuery.id = row.id;
+            this.getItemList()
+            this.dialogListVisible = true
+        },
+    }
+}
+</script>
+<style>
+.ad-avatar-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+}
+
+.ad-avatar-uploader .el-upload:hover {
+    border-color: #409EFF;
+}
+
+.ad-avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 178px;
+    height: 178px;
+    line-height: 178px;
+    text-align: center;
+}
+
+.ad-avatar {
+    display: block;
+}
+</style>
+  

+ 176 - 240
src/views/giftManage/giftList.vue

@@ -3,11 +3,11 @@
 
         <!-- 查询和其他操作 -->
         <div class="filter-container">
-            <el-input clearable class="filter-item" style="width: 200px;" placeholder="品名称"
+            <el-input clearable class="filter-item" style="width: 200px;" placeholder="品名称"
                 v-model="listQuery.name"></el-input>
-            <el-input clearable class="filter-item" style="width: 200px;" placeholder="品编号"
+            <el-input clearable class="filter-item" style="width: 200px;" placeholder="品编号"
                 v-model="listQuery.seq"></el-input>
-            <el-select v-model="listQuery.status" clearable placeholder="状态" style="top: -4px;width: 200px;">
+            <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>
@@ -16,10 +16,6 @@
                             :value="item.dictValue">
                         </el-option>
                     </el-select>
-            <el-select v-model="listQuery.deliveryType" clearable placeholder="兑换方式" class="filter-item" style="width: 200px">
-                        <el-option :key="item.type" v-for="item in deliveryTypeList" :label="item.name" :value="item.type">
-                        </el-option>
-            </el-select>
             <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查找</el-button>
             <el-button class="filter-item" type="primary" @click="handleCreate" icon="el-icon-edit">添加</el-button>
 
@@ -31,23 +27,25 @@
             <el-table-column type="index" label="序号" header-align="center" align="center">
             </el-table-column>
 
-            <el-table-column align="center" min-width="200px" label="品名称" prop="name">
+            <el-table-column align="center" min-width="200px" label="品名称" prop="name">
             </el-table-column>
 
-            <el-table-column align="center" min-width="120px" label="品编号" prop="seq">
+            <el-table-column align="center" min-width="120px" label="品编号" prop="seq">
             </el-table-column>
 
-            <el-table-column align="center" min-width="80px" label="品属性" prop="productAttributeName">
+            <el-table-column align="center" min-width="80px" label="品属性" prop="productAttributeName">
             </el-table-column>
-            <el-table-column align="center" min-width="100px" label="库存量" prop="actualStock">
+            <el-table-column align="center" min-width="80px" label="积分" prop="price">
             </el-table-column>
-            <el-table-column align="center" min-width="100px" label="可兑换库存量" prop="stock">
+            <el-table-column align="center" min-width="80px" label="参考价格" prop="hisPrice">
             </el-table-column>
-            <el-table-column align="center" min-width="150px" label="兑换方式" prop="deliveryTypeName">
+            <el-table-column align="center" min-width="100px" label="库存量" prop="actualStock">
             </el-table-column>
-            <el-table-column align="center" min-width="100px" label="礼品所在地" prop="location">
+            <el-table-column align="center" min-width="100px" label="可兑换库存量" prop="stock">
             </el-table-column>
-            <el-table-column align="center" min-width="80px" label="礼品状态">
+            <!-- <el-table-column align="center" min-width="100px" label="商品所在地" prop="location">
+            </el-table-column> -->
+            <el-table-column align="center" min-width="80px" label="商品状态">
                 <template slot-scope="props">
                     <span v-if="props.row.status == 1">上架</span>
                     <span v-if="props.row.status == 0">下架</span>
@@ -58,17 +56,15 @@
                     <span @click="handleView(props.row)" style="color:green;cursor: pointer;">查看</span>
                 </template>
             </el-table-column>
-            <el-table-column align="center" min-width="80px" label="福利名称" prop="title">
-            </el-table-column>
-            <el-table-column align="center" label="操作" width="350px" class-name="small-padding fixed-width">
+            <!-- fixed="right" -->
+            <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 v-if="scope.row.status == 0" type="success" size="small"
                         @click="changeGoodsState(scope.row.skuId, 1)">上架</el-button>
                     <el-button v-if="scope.row.status == 1" type="warning" size="small"
                         @click="changeGoodsState(scope.row.skuId, 0)">下架</el-button>
-                    <el-button type="primary" size="small" @click="handleRelated(scope.row)">关联福利</el-button>
-                    <el-button type="danger" size="mini" @click="handleDelete(scope.row.skuId, -1)">删除</el-button>
+                    <el-button type="danger" size="small" @click="handleDelete(scope.row.skuId, -1)">删除</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -82,30 +78,28 @@
         </div>
 
         <!-- 员工积分记录列表 -->
-        <el-dialog :close-on-click-modal="false" title="兑换记录" :visible.sync="dialogListVisible" width="70%">
+        <el-dialog :close-on-click-modal="false" title="兑换记录" :visible.sync="dialogListVisible" width="70%" style="overflow: auto;">
             <div class="filter-container">
                 <el-select filterable v-model="itemListQuery.deptId" clearable placeholder="部门" style="top: -4px;width: 200px;">
                     <el-option :key="item.deptId" v-for="item in depTypeList" :label="item.deptName" :value="item.deptId">
                     </el-option>
                 </el-select>
                 <el-input clearable class="filter-item" style="width: 200px;" placeholder="员工名称"
-                    v-model="itemListQuery.purchaserName"></el-input>
+                    v-model="itemListQuery.userName"></el-input>
                 <el-button class="filter-item" type="primary" v-waves icon="el-icon-search"
                     @click="itemHandleFilter">查找</el-button>
-                <el-button class="filter-item" type="primary" v-waves icon="el-icon-download">导出</el-button>
+                <el-button class="filter-item" type="primary" @click="handleDownLoad" v-waves icon="el-icon-download">导出</el-button>
 
             </div>
             <!-- 查询结果 -->
             <el-table size="small" :data="itemList" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit
-                highlight-current-row>
-                <el-table-column type="index" label="序号" header-align="center" align="center">
+            highlight-current-row>
+            <el-table-column type="index" label="序号" header-align="center" align="center">
                 </el-table-column>
                 <el-table-column align="center" width="200px" label="部门" prop="deptName">
                 </el-table-column>
                 <el-table-column align="center" label="员工姓名" prop="purchaser">
                 </el-table-column>
-                <el-table-column align="center" label="兑换方式" prop="deliveryTypeName">
-                </el-table-column>
                 <el-table-column align="center" label="兑换数量" prop="skuCount">
                 </el-table-column>
                 <el-table-column align="center" label="联系人" prop="contact">
@@ -114,12 +108,11 @@
                 </el-table-column>
                 <el-table-column align="center" width="200px" label="地址" prop="contactAddr">
                 </el-table-column>
-                <el-table-column align="center" width="200px" label="邮箱" prop="contactEmail">
-                </el-table-column>
+                <!-- <el-table-column align="center" width="200px" label="邮箱" prop="contactEmail">
+                </el-table-column> -->
                 <el-table-column align="center" width="150px" label="兑换时间" prop="createTime">
                 </el-table-column>
-            </el-table>
-
+        </el-table>
             <!-- 分页 -->
             <div class="pagination-container">
                 <el-pagination background @size-change="itemHandleSizeChange" @current-change="itemHandleCurrentChange"
@@ -130,17 +123,17 @@
         </el-dialog>
         <!-- 添加或修改对话框 -->
         <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='width:700px;margin-left:50px;'>
-                <el-form-item label="品编号" prop="seq">
+            <el-form :rules="rules" ref="dataForm" :model="dataForm" status-icon label-position="left" label-width="100px" style='width:700px; margin-left:50px;'>
+                <el-form-item label="品编号" prop="seq">
                     <el-input disabled placeholder="添加成功后自动生成" readonly v-model="dataForm.seq"></el-input>
                 </el-form-item>
-                <el-form-item label="品名称" prop="name">
+                <el-form-item label="品名称" prop="name">
                     <el-input v-model="dataForm.name"></el-input>
                 </el-form-item>
 
-               
+                
 
-                <el-form-item label="品属性" prop="productAttribute">
+                <el-form-item label="品属性" prop="productAttribute">
                     <el-select v-model="dataForm.productAttribute" filterable placeholder="请选择" style="width: 350px"
                         value-key="value" @change="changeProductAttribute">
                         <el-option :key="item.dictValue" v-for="item in productAttributeList" :label="item.dictLabel"
@@ -148,35 +141,56 @@
                         </el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="兑换方式" prop="deliveryType">
-                    <el-select v-model="dataForm.deliveryType" filterable placeholder="请选择" style="width: 350px">
-                        <el-option :key="item.type" v-for="item in deliveryTypeList" :label="item.name" :value="item.type">
+                <el-form-item label="兑换方式" prop="deliveryTypes">
+                    <el-select v-model="dataForm.deliveryTypes" multiple filterable placeholder="请选择" style="width: 350px">
+                        <el-option :key="item.dictValue" v-for="item in deliveryTypeList" :label="item.dictLabel" :value="item.dictValue">
                         </el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item v-if="dataForm.deliveryType==0" label="礼品所在地" prop="location">
-                    <el-select v-model="dataForm.location" filterable placeholder="请选择" style="width: 350px">
-                        <el-option :key="item.dictLabel" v-for="item in locationList" :label="item.dictLabel" :value="item.dictLabel">
-                        </el-option>
-                    </el-select>
+                <el-form-item v-if="dataForm.deliveryTypes.includes('1')" label="快递方式">
+                    <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 :action="fileImgUrl" list-type="picture-card" :file-list="dataForm.images"
+                <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="handleGallerySucess" :on-exceed="handleExceed" :before-upload="uploadBannerImg"
                             :on-remove="handleRemove">
                             <i class="el-icon-plus"></i>
                         </el-upload>
                 </el-form-item>
+                <el-form-item style="width: 800px" label="商品副图" prop="imgIds">
+                    <el-upload :action="fileImgUrl" list-type="picture-card" :file-list="dataForm.imgUrls"
+                            :on-success="handleAvatarSuccess"
+                            :on-remove="handleRemoveImgs">
+                            <i class="el-icon-plus"></i>
+                        </el-upload>
+                </el-form-item>
+
+                <el-form-item label="积分" prop="price">
+                    <el-input v-model="dataForm.price"></el-input>
+                </el-form-item>
+                <el-form-item label="参考价格" prop="hisPrice">
+                    <el-input v-model="dataForm.hisPrice"></el-input>
+                </el-form-item>
                 <el-form-item label="库存量" prop="actualStock">
                     <el-input-number :precision="0" :step="1" v-model="dataForm.actualStock"></el-input-number>
                 </el-form-item>
                 <el-form-item
                     style="width: 800px"
-                    label="礼品说明"
+                    label="品说明"
                     prop="comment"
                     >
                 <tinymce v-model="dataForm.comment" ref="tinymce"></tinymce>
                 </el-form-item>
+                <el-form-item
+                    style="width: 800px"
+                    label="商品介绍"
+                    prop="skuDesc"
+                    >
+                <skuDesc v-model="dataForm.skuDesc" ref="skuDesc"></skuDesc>
+                </el-form-item>
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button @click="dialogFormVisible = false">取消</el-button>
@@ -185,19 +199,6 @@
             </div>
         </el-dialog>
 
-         <!-- 关联福利操作 -->
-        <el-dialog :close-on-click-modal="false" title="关联福利" :visible.sync="dialogRelatedVisible" width="40%">
-            <div class="filter-container">
-                <el-select clearable v-model="welfareId" style="width: 100%;" placeholder="请选择">
-                    <el-option v-for="item in options" :key="item.id" :label="item.title" :value="item.id">
-                    </el-option>
-                </el-select>
-            </div>
-            <div slot="footer" class="dialog-footer">
-                <el-button @click="dialogRelatedVisible = false">取消</el-button>
-                <el-button type="primary" @click="handleRelatedWelfare">确定</el-button>
-            </div>
-        </el-dialog>
     </div>
 </template>
   
@@ -218,41 +219,21 @@
 </style>
   
 <script>
-import { createItem, updateItem, giftList, giftState, exchangeHistory, relatedWelfare, welfareList } from "@/api/giftManage";
+import { createItem, updateItem, goodsList, goodsState, exchangeHistory } from "@/api/goodsManage";
 import { depTypeList,dataTypeList } from "@/api/public";
 import waves from "@/directive/waves"; // 水波纹指令
-import Tinymce from '@/components/Tinymce'
+import Tinymce from '@/components/Tinymce';
+import SkuDesc from '@/components/SkuDesc'
 
 export default {
-    name: 'giftList',
-    components: { Tinymce },
+    name: 'goodsList',
+    components: { Tinymce,SkuDesc },
     directives: { waves },
     data() {
         return {
-            welfareId:'',
-            skuId:'',
-            options: [],
             locationList:[],
             productAttributeList: [],
-            deliveryTypeList: [
-            {
-                    type: 0,
-                    name: '办公室领取'
-                },
-                {
-                    type: 1,
-                    name: '快递'
-                },
-                {
-                    type: 2,
-                    name: '卷码兑换'
-                },
-                {
-                    type: 3,
-                    name: '线下组织'
-                },
-               
-            ],
+            deliveryTypeList: [],
             goodsStatusList: [
                 {
                     type: 1,
@@ -265,39 +246,43 @@ export default {
             ],
             depTypeList: [],
             list: [],
-            itemList: [
-                
-            ],
+            itemList: [],
             total: 0,
             itemTotal: 0,
             listLoading: false,
             downloadLoading: false,
             listQuery: {
+                skuType:1,
                 page: 1,
                 limit: 10,
                 name: '',
                 seq: '',
                 status: '',
                 productAttribute:'',
-                deliveryType:'',
             },
             itemListQuery: {
+                skuType:1,
                 page: 1,
                 limit: 10,
+                skuId:'',
                 deptId: '',
-                purchaserName: '',
+                userName: '',
             },
             dataForm: {
-                comment: undefined,
+                skuType:1,
                 name: undefined,
                 seq: undefined,
                 productAttribute: undefined,
                 imgUrl: undefined,
-                integral: undefined,
+                price: undefined,
+                hisPrice:undefined,
                 actualStock: undefined,
-                deliveryType: undefined,
-                location: undefined,
+                deliveryTypes: [],
+                freightType:'0',
+                // location: undefined,
                 images: [],
+                imgIds: '',
+                imgUrls:[],
             },
             dialogFormVisible: false,
             dialogStatus: '',
@@ -306,17 +291,19 @@ export default {
                 create: "创建",
             },
             rules: {
-                name: [{ required: true, message: "请填写礼品名称", trigger: "blur" }],
-                imgUrl: [{ required: true, message: "请上传礼品图片", trigger: "blur" }],
-                productAttribute: [{ required: true, message: "请选择礼品属性", trigger: "blur" }],
-                integral: [{ required: true, message: "请填写礼品积分", trigger: "blur" }],
+                name: [{ required: true, message: "请填写商品名称", trigger: "blur" }],
+                imgUrl: [{ required: true, message: "请上传商品图片", trigger: "blur" }],
+                imgIds: [{ required: true, message: "请上传商品副图", trigger: "blur" }],
+                productAttribute: [{ required: true, message: "请选择商品属性", trigger: "blur" }],
+                price: [{ required: true, message: "请填写商品积分", trigger: "blur" }],
+                hisPrice: [{ required: true, message: "请填写商品参考价格", trigger: "blur" }],
                 actualStock: [{ required: true, message: "请设置库存量", trigger: "blur" }],
-                deliveryType: [{ required: true, message: "请选择兑换方式", trigger: "blur" }],
-                location: [{ required: true, message: "请选择礼品所在地", trigger: "blur" }],
+                deliveryTypes: [{ required: true, message: "请选择兑换方式", trigger: "blur" }],
+                // location: [{ required: true, message: "请选择商品所在地", trigger: "blur" }],
                 comment: [{ required: true, message: "说明不能为空", trigger: "blur" }],
+                skuDesc: [{ required: true, message: "商品介绍不能为空", trigger: "blur" }],
             },
             dialogListVisible: false,
-            dialogRelatedVisible:false,
             fileImgUrl: this.upLoadUrl,
         }
     },
@@ -327,71 +314,19 @@ export default {
         this.getList();
     },
     methods: {
-        getDataTypeList() {
-            dataTypeList({dictType:'mall_sku_location'}).then(response => {
-                this.locationList = response.data.data;
-            }).catch(() => {});
+        getDeliveryTypeList(val){
+            dataTypeList({dictType:val}).then(response => {
+                this.deliveryTypeList = response.data.data;
+            });
         },
-        getProductAttributeList(){
-            dataTypeList({dictType:'mall_sku_attribute'}).then(response => {
-                this.productAttributeList = response.data.data;
-            }).catch(() => {});
-        },
-        getWelfareList(){
-            welfareList({status:1}).then(response => {
-                this.options = response.data.data;
-            }).catch(() => {});
+        handleDownLoad(){
+            window.location.href = process.env.BASE_API + '/mall-sku/exportSkuLog?skuId=' + this.itemListQuery.skuId + '&deptId=' + this.itemListQuery.deptId + '&userName=' + this.itemListQuery.userName;
         },
         changeProductAttribute(val) {
-            this.dataForm.deliveryType = undefined;
-            this.dataForm.location = undefined;
-            this.deliveryTypeList = [
-                {
-                    type: 0,
-                    name: '办公室领取'
-                },
-                {
-                    type: 1,
-                    name: '快递'
-                },
-                {
-                    type: 2,
-                    name: '卷码兑换'
-                },
-                {
-                    type: 3,
-                    name: '线下组织'
-                },
-               
-            ];
-            if (val == 1) {
-                this.deliveryTypeList = [
-                    {
-                        type: 1,
-                        name: '快递'
-                    },
-                    {
-                        type: 0,
-                        name: '办公室领取'
-                    },
-                ]
-            } 
-            if (val == 2 || val == 3)  {
-                this.deliveryTypeList = [
-                    {
-                        type: 2,
-                        name: '卷码兑换'
-                    },
-                ]
-            }
-            if (val == 5)  {
-                this.deliveryTypeList = [
-                    {
-                        type: 3,
-                        name: '线下组织'
-                    },
-                ]
-            }
+            debugger
+            this.dataForm.deliveryTypes = [];
+            // this.dataForm.location = undefined;
+            this.getDeliveryTypeList(val);
         },
         handleRemove(file, fileList) {
             console.log(file, fileList);
@@ -403,13 +338,41 @@ export default {
                 this.dataForm.imgUrl = images.join(",");
             }
         },
+        handleAvatarSuccess(res, file, fileList) {
+            console.log(file, fileList);
+            console.log("------", "==========");
+            console.log("res = ", res);
+
+            let fileIds = [];
+            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;
+                fileIds.push(id);
+                }
+            }
+            this.dataForm.imgIds = fileIds.join(",");
+        },
+        handleRemoveImgs(file, fileList) {
+            console.log(file, fileList);
+            let fileIds = [];
+            for (let i in fileList) {
+                let id = fileList[i].response.data.id;
+                fileIds.push(id);
+            }
+            this.dataForm.imgIds = fileIds.join(",");
+        },
         uploadBannerImg(file) {
             const isJPGs = file.type === "image/jpeg";
             console.log(isJPGs);
         },
         handleExceed(files, fileList) {
             this.$message.warning(
-                `当前限制选择 5 个文件,本次选择了 ${files.length} 个文件!,共选择了 ${files.length + fileList.length
+                `当前限制选择 1 个文件,本次选择了 ${files.length} 个文件!,共选择了 ${files.length + fileList.length
                 } 个文件`
             );
         },
@@ -433,16 +396,22 @@ export default {
         },
         resetForm() {
             this.dataForm = {
+                skuType:1,
                 comment: undefined,
+                skuDesc: undefined,
                 name: undefined,
                 seq: undefined,
                 productAttribute: undefined,
                 imgUrl: undefined,
-                integral: undefined,
+                price: undefined,
+                hisPrice:undefined,
                 actualStock: undefined,
-                deliveryType: undefined,
-                location: undefined,
+                deliveryTypes: [],
+                freightType:'0',
+                // location: undefined,
                 images: [],
+                imgIds: '',
+                imgUrls:[],
             };
         },
         handleCreate() {
@@ -453,6 +422,7 @@ export default {
 
             this.$nextTick(() => {
                 this.$refs.tinymce.setContent("");
+                this.$refs.skuDesc.setContent("");
                 this.$refs["dataForm"].clearValidate();
             });
         },
@@ -460,6 +430,7 @@ export default {
             
             this.$refs["dataForm"].validate((valid) => {
                 if (valid) {
+                    console.log(this.dataForm);
                     createItem(this.dataForm)
                             .then((response) => {
                                 this.getList();
@@ -480,54 +451,9 @@ export default {
             this.dataForm = Object.assign({}, row);
             this.dataForm.productAttribute = row.productAttribute.toString();
             let comment = this.dataForm.comment;
+            let skuDesc = this.dataForm.skuDesc?this.dataForm.skuDesc:'';
             let val = row.productAttribute;
-            this.deliveryTypeList = [
-                {
-                    type: 0,
-                    name: '办公室领取'
-                },
-                {
-                    type: 1,
-                    name: '快递'
-                },
-                {
-                    type: 2,
-                    name: '卷码兑换'
-                },
-                {
-                    type: 3,
-                    name: '线下组织'
-                },
-               
-            ];
-            if (val == 1) {
-                this.deliveryTypeList = [
-                    {
-                        type: 1,
-                        name: '快递'
-                    },
-                    {
-                        type: 0,
-                        name: '办公室领取'
-                    },
-                ]
-            } 
-            if (val == 2 || val == 3)  {
-                this.deliveryTypeList = [
-                    {
-                        type: 2,
-                        name: '卷码兑换'
-                    },
-                ]
-            }
-            if (val == 5)  {
-                this.deliveryTypeList = [
-                    {
-                        type: 3,
-                        name: '线下组织'
-                    },
-                ]
-            }
+            this.getDeliveryTypeList(val);
             if (this.dataForm.imgUrl) {
                 let images = this.dataForm.imgUrl.split(",");
                 this.dataForm.images = [];
@@ -542,10 +468,25 @@ export default {
                     });
                 }
             }
+            if (this.dataForm.imgs) {
+                let imgs = this.dataForm.imgs;
+                this.dataForm.imgUrls = [];
+                for (let i in imgs) {
+                    let url = imgs[i].url;
+                    let name = "image_" + i;
+
+                    this.dataForm.imgUrls.push({
+                        name: name,
+                        url: url,
+                        response: { error: "0", data: imgs[i] },
+                    });
+                }
+            }
             this.dialogStatus = 'update'
             this.dialogFormVisible = true
             this.$nextTick(() => {
                 this.$refs.tinymce.setContent(comment);
+                this.$refs.skuDesc.setContent(skuDesc);
                 this.$refs['dataForm'].clearValidate()
             })
         },
@@ -567,29 +508,11 @@ export default {
 
             })
         },
-        handleRelated(row) {
-            this.welfareId = '';
-            this.skuId = row.skuId;
-            this.getWelfareList();
-            this.dialogRelatedVisible = true
-        },
-        handleRelatedWelfare(){
-            relatedWelfare({ skuId: this.skuId, welfareId: this.welfareId }).then(response => {
-                this.dialogRelatedVisible = false;
-                this.$notify({
-                    title: '成功',
-                    message: '福利关联成功',
-                    type: 'success',
-                    duration: 2000
-                })
-                this.getList()
-            })
-        },
         changeGoodsState(id, index) {
-            giftState({ skuId: id, status: index }).then(response => {
+            goodsState({ skuType:1, skuId: id, status: index }).then(response => {
                 this.$notify({
                     title: '成功',
-                    message: '品状态修改成功',
+                    message: '商品状态修改成功',
                     type: 'success',
                     duration: 2000
                 })
@@ -602,7 +525,7 @@ export default {
                 cancelButtonText: '取消',
                 type: 'warning'
             }).then(() => {
-                giftState({ skuId: id, status: index }).then(response => {
+                goodsState({ skuType:1, skuId: id, status: index }).then(response => {
                     this.$notify({
                         title: '成功',
                         message: '删除成功',
@@ -611,7 +534,20 @@ export default {
                     })
                     this.getList();
                 })
-            }).catch(() => {})
+            }).catch(() => {
+
+            })
+
+        },
+        getDataTypeList() {
+            dataTypeList({dictType:'mall_sku_location'}).then(response => {
+                this.locationList = response.data.data;
+            }).catch(() => {});
+        },
+        getProductAttributeList(){
+            dataTypeList({dictType:'mall_sku_attribute'}).then(response => {
+                this.productAttributeList = response.data.data;
+            }).catch(() => {});
         },
         getDepTypeList() {
             depTypeList().then(response => {
@@ -620,7 +556,7 @@ export default {
         },
         getList() {
             this.listLoading = true
-            giftList(this.listQuery).then(response => {
+            goodsList(this.listQuery).then(response => {
                 this.list = response.data.data.items
                 this.total = response.data.data.total
                 this.listLoading = false
@@ -662,8 +598,8 @@ export default {
         },
 
         handleView(row) {
-            this.itemListQuery.id = row.id;
-            this.getItemList()
+            this.itemListQuery.skuId = row.skuId;
+            this.getItemList();
             this.dialogListVisible = true
         },
     }

+ 6 - 2
src/views/goodsManage/goodsList.vue

@@ -252,6 +252,7 @@ export default {
             listLoading: false,
             downloadLoading: false,
             listQuery: {
+                skuType:0,
                 page: 1,
                 limit: 10,
                 name: '',
@@ -260,6 +261,7 @@ export default {
                 productAttribute:'',
             },
             itemListQuery: {
+                skuType:0,
                 page: 1,
                 limit: 10,
                 skuId:'',
@@ -267,6 +269,7 @@ export default {
                 userName: '',
             },
             dataForm: {
+                skuType:0,
                 name: undefined,
                 seq: undefined,
                 productAttribute: undefined,
@@ -392,6 +395,7 @@ export default {
         },
         resetForm() {
             this.dataForm = {
+                skuType:0,
                 comment: undefined,
                 skuDesc: undefined,
                 name: undefined,
@@ -503,7 +507,7 @@ export default {
             })
         },
         changeGoodsState(id, index) {
-            goodsState({ skuId: id, status: index }).then(response => {
+            goodsState({ skuType:0,skuId: id, status: index }).then(response => {
                 this.$notify({
                     title: '成功',
                     message: '商品状态修改成功',
@@ -519,7 +523,7 @@ export default {
                 cancelButtonText: '取消',
                 type: 'warning'
             }).then(() => {
-                goodsState({ skuId: id, status: index }).then(response => {
+                goodsState({skuType:0, skuId: id, status: index }).then(response => {
                     this.$notify({
                         title: '成功',
                         message: '删除成功',

+ 71 - 12
src/views/raffleManage/raffleDataList.vue

@@ -21,7 +21,7 @@
             </el-table-column>
             <el-table-column align="center" min-width="150px" label="奖品名称" prop="prizeName">
             </el-table-column>
-            <el-table-column align="center" min-width="150px" label="关联兑换券">
+            <el-table-column align="center" min-width="150px" label="商品券">
                 <template slot-scope="scope">
                     <span v-if="scope.row.couponVo">{{ scope.row.couponVo.couponName }}</span>
                     <span v-else>无</span>
@@ -81,7 +81,13 @@
                     </el-option>
                 </el-select>
             </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="handleGallerySucess" :on-exceed="handleExceed" :before-upload="uploadBannerImg"
+                            :on-remove="handleRemove">
+                            <i class="el-icon-plus"></i>
+                        </el-upload>
+                </el-form-item>
             <el-form-item v-if="dataForm.prizeType=='20'" label="奖励积分" prop="integral">
                 <el-input-number style="width: 300px" :precision="0" :step="1" v-model="dataForm.integral"></el-input-number>
             </el-form-item>
@@ -91,9 +97,6 @@
             <el-form-item  label="奖品数量" prop="prizeActualStock">
                 <el-input-number style="width: 300px" :precision="0" :step="1" v-model="dataForm.prizeActualStock"></el-input-number>
             </el-form-item>
-            <el-form-item  label="剩余数量" prop="prizeStock">
-                <el-input-number style="width: 300px" :precision="0" :step="1" v-model="dataForm.prizeStock"></el-input-number>
-            </el-form-item>
             <el-form-item  label="状态">
                 <el-radio-group v-model="dataForm.status">
                     <el-radio :label="'0'">正常</el-radio>
@@ -170,11 +173,13 @@ export default {
                 prizeType: undefined,
                 couponId:undefined,
                 prizeName: undefined,
+                imgUrl: undefined,
                 integral: undefined,
                 prizeWeight: undefined,
                 prizeActualStock: undefined,
                 prizeStock: undefined,
                 status: '0',
+                images: [],
             },
             dialogFormVisible: false,
             dialogStatus: '',
@@ -182,16 +187,17 @@ export default {
                 update: "编辑",
                 create: "创建",
             },
-            imageUrl: undefined,
             rules: {
                 prizeType: [{ required: true, message: "请选择奖品类型", trigger: "blur" }],
                 couponId: [{ required: true, message: "请选择兑换卷", trigger: "blur" }],
                 prizeName: [{ required: true, message: "奖品名称不能为空", trigger: "blur" }],
+                imgUrl: [{ required: true, message: "请上传奖品图片", trigger: "blur" }],
                 integral: [{ required: true, message: "奖励积分不能为空", trigger: "blur" }],
                 prizeWeight: [{ required: true, message: "奖品权重不能为空", trigger: "blur" }],
                 prizeActualStock: [{ required: true, message: "奖品数量不能为空", trigger: "blur" }],
                 prizeStock: [{ required: true, message: "剩余数量不能为空", trigger: "blur" }],
             },
+            fileImgUrl: this.upLoadUrl,
         }
     },
     created() {
@@ -201,6 +207,45 @@ export default {
         this.getCouponsList();
     },
     methods: {
+        handleRemove(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.images = images;
+            this.dataForm.imgUrl = images.join(",");
+        },
+        uploadBannerImg(file) {
+            const isJPGs = file.type === "image/jpeg";
+            console.log(isJPGs);
+        },
+        handleExceed(files, fileList) {
+            this.$message.warning(
+                `当前限制选择 1 个文件,本次选择了 ${files.length} 个文件!,共选择了 ${files.length + fileList.length
+                } 个文件`
+            );
+        },
+        handleGallerySucess(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.images = images;
+            this.dataForm.imgUrl = images.join(",");
+        },
         getCouponsList() {
             couponsList({}).then(response => {
                 this.couponsList = response.data.data;
@@ -228,11 +273,13 @@ export default {
                 prizeType: undefined,
                 couponId:undefined,
                 prizeName: undefined,
+                imgUrl: undefined,
                 integral: undefined,
                 prizeWeight: undefined,
                 prizeActualStock: undefined,
                 prizeStock: undefined,
                 status: '0',
+                images: [],
             };
         },
         handleCreate() {
@@ -249,9 +296,7 @@ export default {
                 if (valid) {
                     dataAdd(this.dataForm)
                         .then(() => {
-                            this.getList();
                             this.dialogFormVisible = false;
-
                             this.$notify({
                                 title: "成功",
                                 message: "创建成功",
@@ -293,6 +338,20 @@ export default {
 
         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 } },
+                    });
+                }
+            }
             this.dialogStatus = 'update'
             this.dialogFormVisible = true
             this.$nextTick(() => {
@@ -325,7 +384,7 @@ export default {
                 cancelButtonText: '取消',
                 type: 'warning'
             }).then(() => {
-                dataRemove({ dictCodes:row.dictCode}).then(response => {
+                dataRemove({ prizeIds:row.id}).then(response => {
                     this.$notify({
                         title: '成功',
                         message: '删除成功',
@@ -351,10 +410,10 @@ export default {
 
                     if (length > 0) {
                         for (let i = 0; i < length; i++) {
-                            this.delarr.push(this.multipleSelection[i].dictCode);
+                            this.delarr.push(this.multipleSelection[i].id);
                         }
-                        const  dictCodes = this.delarr.join(",");
-                        dataRemove({  dictCodes:  dictCodes })
+                        const  ids = this.delarr.join(",");
+                        dataRemove({  prizeIds:  ids })
                             .then(() => {
                                 this.$notify({
                                     title: "成功",