|
|
<template> <div class="addGroupBuy"> <!-- 新增用户 --> <div class="addGroupBuyBox"> <el-form ref="ruleForm" class="formBox" :model="addForm" label-width="150px" :rules="groupBuyRules" :disabled="visitDetail"> <div class="flexBox"> <el-form-item label="活动名称" prop="groupName"> <el-input v-model="addForm.groupName" maxlength="15" placeholder="请输入活动名称" oninput="value=value.replace(/\s+/g, '')" /> </el-form-item> </div> <div class="flexBox"> <el-form-item label="备注"> <el-input v-model="addForm.remark" maxlength="200" placeholder="请输入备注" /> </el-form-item> </div> <el-form-item class="timeDataBox" label="拼团使用时间"> <div class="dateBox"> <el-form-item> <el-date-picker v-model="dateInfo" type="datetimerange" :range-separator="$t('common.betweentime')" :start-placeholder="$t('common.startdate')" :end-placeholder="$t('common.enddate')" value-format="yyyy-MM-dd HH:mm:ss" /> </el-form-item> </div> </el-form-item> <el-form-item class="inputW" label="成团人数" prop="person"> <el-input v-model="addForm.person" maxlength="9" oninput="value=value.replace(/[^\d]/g,'')" />人 </el-form-item> <el-form-item class="inputW" label="成团有效时间" prop="effectiveTime"> <el-input v-model="addForm.effectiveTime" maxlength="9" oninput="value=value.replace(/[^\d]/g,'')" />小时 </el-form-item> <el-form-item class="boxWidth" label="商品限购" prop="proQuota"> <el-radio v-model="addForm.ifLimit" label="1">不限购</el-radio> <el-radio v-model="addForm.ifLimit" label="2">限购</el-radio> <el-input v-model="addForm.limitNumber" maxlength="9" :disabled="addForm.ifLimit === '1'" oninput="value=value.replace(/[^\d]/g,'')" />件/人 </el-form-item> <el-form-item class="boxWidth" label="活动预热" prop="preheat"> <el-radio v-model="addForm.ifEnable" label="1">停用</el-radio> <el-radio v-model="addForm.ifEnable" label="2">启用</el-radio> <el-input v-model="addForm.enableTime" maxlength="9" :disabled="addForm.ifEnable === '1'" oninput="value=value.replace(/[^\d]/g,'')" />小时前 </el-form-item> <el-form-item label="优惠券叠加" prop="overlying"> <el-radio v-model="addForm.ifAdd" label="1">叠加</el-radio> <el-radio v-model="addForm.ifAdd" label="0">不叠加</el-radio> </el-form-item> <el-form-item class="applyType" label="活动商品" prop="commodity"> <span class="selectBtn" @click="chooseProduct"><span v-if="!visitDetail">{{$t('common.choose')}}</span><span v-else>查看商品</span><i v-if="addForm.details.length !== 0" class="selectNum">{{ addForm.details.length }}</i></span> </el-form-item> </el-form> </div> <span slot="footer" class="dialog-footer"> <el-button v-show="!visitDetail" type="primary" @click="addGroupBuyFn('ruleForm')">{{ $t('common.save') }}</el-button> <el-button v-if="visitDetail" type="primary" @click="goToGroupBuy">{{ $t('common.cancel') }}</el-button> <el-button v-else @click="goToGroupBuy">{{ $t('common.cancel') }}</el-button> </span> <!-- 新建分组弹框 --> <el-dialog :title="visitDetail ? '查看商品' : '选择商品'" :visible.sync="isVisible" width="80%" top="50px" class="group-dialog" :close-on-click-modal="false" :modal-append-to-body="false" :modal="false" > <!-- 表格 --> <div class="tableBox"> <div style="margin-bottom: 15px"> <el-input v-model="prodSearch" :placeholder="$t('product.productname_hint')" style="width: 360px"/> <el-button type="primary" style="margin-left: 8px" @click="searchProd">{{$t('common.query')}}</el-button> </div> <el-table ref="multipleTable" :data="tableData" border :header-cell-style="{ background: '#EEF3FF', color: '#333333' }" tooltip-effect="dark" style="width: 100%" :row-key="getRowKeys" max-height="600" @selection-change="handleSelectionChange" > <el-table-column v-if="!visitDetail" type="selection" :reserve-selection="true" width="55" /> <el-table-column label="商品信息" width="200" align="center"> <template slot-scope="scope"> <img height="80" width="80" :src="scope.row.image " alt srcset> </template> </el-table-column> <el-table-column prop="productName" label="" /> <el-table-column prop="originalPrice" label="原价(元)" width="120" /> <el-table-column prop="value" label="规格" width="120" /> <el-table-column prop="workPrice" label="拼团价(元)" width="153"> <template slot-scope="scope"> <el-input-number v-model="scope.row.workPrice" :disabled="visitDetail" size="small" :controls="false" :max="10000000" :min="0.01" :precision="2" @change="changeInput(scope.row)" /> <!-- <el-input v-model="scope.row.workPrice" size="small" type="number" oninput="value=value.replace(/-/, '')" /> --> </template> </el-table-column> <el-table-column prop="stockNumber" label="库存" width="120" show-overflow-tooltip /> <el-table-column prop="shopName" label="所属店铺" show-overflow-tooltip /> <!-- <el-table-column width="80" :label="$t('common.operate')" show-overflow-tooltip>--> <!-- <template slot-scope="scope">--> <!-- <div class="btnList">--> <!-- <el-popconfirm title="确定删除此券?" @onConfirm="delGroupBuyFn(scope.row)">--> <!-- <el-button slot="reference" class="delCls" type="text">{{ $t('common.delete') }}</el-button>--> <!-- </el-popconfirm>--> <!-- </div>--> <!-- </template>--> <!-- </el-table-column>--> </el-table> <div class="fenye"> <el-pagination :current-page="proOption.page" :page-sizes="[10, 20, 50, 100]" :page-size="proOption.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> </div> <div class="footBtnBox"> <span slot="footer"> <el-button v-if="!visitDetail" type="primary" @click="saveIdList">{{ $t('common.sure') }}</el-button> <el-button @click="closeSelect">{{ $t('common.cancel') }}</el-button> </span> </div> </div> </el-dialog> </div></template>
<script>import { addGroupBuy, getGroupButPro, groupUpdate, groupDetail } from '@/api/marketing'
function InitGroupForm() { this.details = [] // 商品明细数据
this.effectiveTime = null // 成团有效时间几(小时)
this.enableTime = null // 预热几小时前
this.endTime = '' // 活动结束时间
this.groupName = '' // 活动名称
this.ifAdd = '1' // 优惠券是否叠加 1-是 0-否
this.ifEnable = '1' // 活动预热 1-停用 2-启用
this.ifLimit = '1' // 商品限购 1-不限购 2-限购
this.limitNumber = null // 限购几件/人
this.person = null // 成团人数
this.remark = '' // 备注
this.startTime = '' // 活动开始时间
}export default { name: 'AddGroupBuy', props: { groupId: { type: Number, default: 0 }, visitDetail: { type: Boolean, default: false } }, data() { return { // 新增
getRowKeys(row) { return row.skuId }, addForm: new InitGroupForm(), proOption: { page: 1, pageSize: 10 }, details: [], dateInfo: [], // 时间数组
total: 0, tableData: [], shopGroupWorkId: '', // 拼团ID
groupBuyRules: { groupName: [ { required: true, message: '请输入活动名称', trigger: 'blur' } ], person: [{ required: true, message: '请输入成团人数', trigger: 'blur' }], effectiveTime: [{ required: true, message: '请输入成团有效时间', trigger: 'blur' }] }, multipleSelection: [], roleList: [], isVisible: false, // 选择商品弹窗
inputGroupTableData: [], prodSearch: undefined } }, watch: { groupId: { handler(nVal, oVal) { this.shopGroupWorkId = nVal if (!nVal) { this.addForm = new InitGroupForm() this.dateInfo = [] this.inputGroupTableData = [] } else { this.addForm = new InitGroupForm() this.getGroupBuyInfo() } } } }, mounted() { this.getProList() this.shopGroupWorkId = this.groupId if (this.shopGroupWorkId) { this.getGroupBuyInfo() } }, methods: { changeInput(data) { const index = this.inputGroupTableData.findIndex(item => item.skuId === data.skuId) if (index === -1) { this.inputGroupTableData.push(data) } else { this.inputGroupTableData[index].workPrice = data.workPrice } }, reset() { this.proOption.page = 1 if (this.shopGroupWorkId === 0) { this.addForm = new InitGroupForm() this.dateInfo = [] this.inputGroupTableData = [] } if (this.$refs.multipleTable) { this.$refs.multipleTable.clearSelection() } }, addGroupBuyFn(ruleForm) { this.$refs[ruleForm].validate(valid => { if (valid) { if (this.dateInfo.length === 0) { this.$message.warning('请选择用券时间开始和结束日期') return false } if (this.addForm.ifLimit === '2' && this.addForm.limitNumber === null) { this.$message.warning('请填写活动限购件数') return false } if (this.addForm.ifEnable === ' 2' && this.addForm.enableTime === null) { this.$message.warning('请填写活动预热前多少小时') return false } if (this.addForm.person < 2 || this.addForm.person > 10) { this.$message.warning('拼团人数只能在2~10人之间 !') return false } this.addForm.startTime = this.dateInfo[0] this.addForm.endTime = this.dateInfo[1] if (this.shopGroupWorkId) { groupUpdate(this.addForm).then(res => { if (res.code === '') { this.$message.success(this.$t('common.editsuccessful')) this.$emit('reset') } else { this.$message.error(res.message) } }) } else { addGroupBuy(this.addForm).then(res => { if (res.code === '') { this.$message.success(this.$t('common.addsuccessful')) this.$emit('reset') } else { this.$message.error(res.message) } }) } } else { console.log('error submit!!') return false } }) }, handleSizeChange(val) { this.proOption.pageSize = val this.getProList() }, handleCurrentChange(val) { this.proOption.page = val this.getProList() }, // 选择商品
chooseProduct(type) { this.isVisible = true if (this.visitDetail) { this.proOption.activityId = this.shopGroupWorkId } else { this.proOption.activityId = null } this.getProList() }, getProList() { getGroupButPro(this.proOption).then(res => { if (res.code === '') { const dataList = res.data.list if (this.inputGroupTableData.length > 0) { dataList.forEach(item => { const index = this.inputGroupTableData.findIndex(cItem => cItem.skuId === item.skuId) if (index !== -1) { item.workPrice = this.inputGroupTableData[index].workPrice } }) } this.tableData = dataList this.total = res.data.total // 点击编辑时回显表格勾选
/* if (this.$refs.multipleTable) { for (let i = 0; i < this.tableData.length; i++) { for (let j = 0; j < this.addForm.details.length; j++) { if (this.tableData[i].productId === this.addForm.details[j].productId && this.tableData[i].skuId === this.addForm.details[j].skuId) { this.$refs.multipleTable.toggleRowSelection(this.tableData[i]); } } } } */ } }) }, // 选中商品
handleSelectionChange(val) { this.multipleSelection = val }, // 保存选择商品ID
saveIdList() { try { const idList = [] this.multipleSelection.forEach(item => { console.log(item) if (!item.workPrice) { this.$message.warning('请输入价格') throw new Error() } idList.push({ price: item.workPrice, productId: item.productId, skuId: item.skuId }) }) this.addForm.details = idList this.isVisible = false } catch (e) { console.log(e) } }, // 取消选择
closeSelect() { this.isVisible = false }, // 跳转秒杀列表
goToGroupBuy() { this.$emit('reset') }, async getGroupBuyInfo() { const res = await groupDetail({ shopGroupWorkId: this.shopGroupWorkId }) this.addForm.groupBuyContent = res.data.groupBuyContent this.addForm.groupName = res.data.groupName this.addForm.person = res.data.person this.addForm.effectiveDay = res.data.effectiveDay this.addForm.effectiveTime = res.data.effectiveTime this.addForm.startTime = res.data.startTime this.addForm.endTime = res.data.endTime this.addForm.enableTime = res.data.enableTime this.addForm.frequency = res.data.frequency this.addForm.ifAdd = res.data.ifAdd.toString() this.addForm.ifEnable = res.data.ifEnable.toString() this.addForm.ifLimit = res.data.ifLimit.toString() this.addForm.number = res.data.number this.addForm.limitNumber = res.data.limitNumber this.addForm.remark = res.data.remark this.addForm.shopGroupWorkId = res.data.shopGroupWorkId console.log(res, 'res') console.log(res.data.products, 'res.data.products') const idList = res.data.products idList.forEach(i => { this.addForm.details.push({ price: i.workPrice || i.originalPrice, productId: i.productId, skuId: i.skuId }) }) this.dateInfo = [this.addForm.startTime, this.addForm.endTime] }, searchProd() { this.proOption.page = 1 this.proOption.pageSize = 10 this.proOption.searchContent = this.prodSearch this.getProList() } }}</script><style lang='scss' scoped>//@import url(); 引入公共css类
@import url("../../../styles/elDialog.scss");.addGroupBuy { background: #FFFFFF; .formBox { margin-top: 20px; .flexBox { display: flex; } .applyType { span { width: 100px; height: 30px; line-height: 30px; background: #66b1ff; color: #FFFFFF; text-align: center; display: inline-block; font-size: 14px; margin-right: 30px; border-radius: 4px; cursor: pointer; position: relative; i { position: absolute; right: -10px; top: -10px; width: 25px; height: 25px; line-height: 25px; background: #FFFFFF; border-radius: 50%; border: 1px solid #66b1ff; text-align: center; color: #409EFF; font-style: normal; font-size: 12px; } } } } .footBtnBox { width: 100%; display: flex; justify-content: center; margin-top: 50px; } .dateBox { display: flex; align-items: center; .description { width: 59px; text-align: center; display: block; font-size: 14px; color: #999999; } }}</style><style scoped>.flexBox /deep/ .el-input { width: 500px;}.inputW /deep/ .el-input { width: 100px; margin: 0 8px 0 0;}.inputW /deep/ .el-input .el-input__inner { text-align: center;}.inputW /deep/ .el-form-item__error { padding-left: 0;}.inputW /deep/ .el-checkbox { margin-left: 20px;}.inputW /deep/ .el-radio { margin-left: 30px;}.boxWidth /deep/ .el-input { width: 100px; margin-right: 15px;}.boxWidth /deep/ .el-input .el-input__inner { text-align: center;}.addGroupBuy .timeDataBox /deep/ .el-form-item__content { display: flex; align-items: center;}
input::-webkit-outer-spin-button,input::-webkit-inner-spin-button { -webkit-appearance: none;}input[type="number"]{ -moz-appearance: textfield;}</style>
|