新增拼团活动设置
This commit is contained in:
67
src/api/market/ware.js
Normal file
67
src/api/market/ware.js
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
import request from "@/utils/request";
|
||||||
|
import { Market_BaseUrl } from "@/api/config";
|
||||||
|
const baseURL = Market_BaseUrl + "/admin/ware";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拼团商品-新增
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function addGbWare(data) {
|
||||||
|
return request({
|
||||||
|
url: `${baseURL}/addGbWare`,
|
||||||
|
method: "post",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拼团商品-修改
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function updateGbWareById(data) {
|
||||||
|
return request({
|
||||||
|
url: `${baseURL}/updateGbWareById`,
|
||||||
|
method: "post",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拼团商品-列表
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function getGbWarePage(params) {
|
||||||
|
return request({
|
||||||
|
url: `${baseURL}/getGbWarePage`,
|
||||||
|
method: "get",
|
||||||
|
params,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拼团商品-修改状态
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function editOnlineStatus(data) {
|
||||||
|
return request({
|
||||||
|
url: `${baseURL}/editOnlineStatus`,
|
||||||
|
method: "post",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拼团商品-删除
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function deleteGbWare(id) {
|
||||||
|
return request({
|
||||||
|
url: `${baseURL}/deleteGbWare/${id}`,
|
||||||
|
method: "DELETE"
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,69 +1,76 @@
|
|||||||
<!-- 添加团购商品 -->
|
<!-- 添加团购商品 -->
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-dialog :title="form.id ? '编辑商品' : '添加商品'" width="800px" v-model="visible" @submit.prevent>
|
<el-dialog :title="form.id ? '编辑商品' : '添加商品'" width="800px" v-model="visible" @submit.prevent @closed="resetHandle">
|
||||||
<el-form ref="formRef" :model="form" :rules="rules" label-position="right" label-width="120">
|
<div class="form_warap">
|
||||||
<el-form-item label="可用门店">
|
<el-form ref="formRef" :model="form" :rules="rules" label-position="right" label-width="120">
|
||||||
<el-radio-group v-model="form.useShopType">
|
<el-form-item label="可用门店">
|
||||||
<el-radio label="仅本店" value="only"></el-radio>
|
<el-radio-group v-model="form.useShopType" @change="useShopTypeChange">
|
||||||
<el-radio label="全部门店" value="all"></el-radio>
|
<el-radio label="仅本店" value="only"></el-radio>
|
||||||
<el-radio label="指定门店可用" value="custom"></el-radio>
|
<el-radio label="全部门店" value="all"></el-radio>
|
||||||
</el-radio-group>
|
<el-radio label="指定门店可用" value="custom"></el-radio>
|
||||||
</el-form-item>
|
</el-radio-group>
|
||||||
<el-form-item v-if="form.useShopType == 'custom'" prop="useShops">
|
</el-form-item>
|
||||||
<selectBranchs all v-model="form.useShops" />
|
<el-form-item v-if="form.useShopType == 'custom'" prop="useShops">
|
||||||
</el-form-item>
|
<selectBranchs all v-model="form.useShops" />
|
||||||
<el-form-item label="商品名称" prop="wareName">
|
</el-form-item>
|
||||||
<div class="column">
|
<el-form-item label="商品名称" prop="wareName">
|
||||||
<el-input v-model="form.wareName" placeholder="请输入商品名称" :maxlength="30" style="width: 300px;"></el-input>
|
<div class="column">
|
||||||
<div>
|
<el-input v-model="form.wareName" placeholder="请输入商品名称" :maxlength="30" style="width: 300px;"></el-input>
|
||||||
<el-button link type="primary">导入已有商品信息</el-button>
|
<div>
|
||||||
|
<el-button link type="primary">导入已有商品信息</el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="商品描述">
|
||||||
<el-form-item label="商品描述">
|
<el-input type="textarea" :rows="5" placeholder="请输入商品描述" :maxlength="50" show-password
|
||||||
<el-input type="textarea" :rows="5" placeholder="请输入商品描述" :maxlength="50" show-password
|
v-model="form.wareDetail" style="width: 300px;"></el-input>
|
||||||
v-model="form.wareDetail" style="width: 300px;"></el-input>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="商品图片" prop="wareImgs">
|
||||||
<el-form-item label="商品图片" prop="wareImgs">
|
<MultiImageUpload v-model="wareImgs" @uploadAllSuccess="wareImgsMultiOnSuccess" />
|
||||||
<MultiImageUpload v-model="wareImgs" @uploadAllSuccess="wareImgsMultiOnSuccess" />
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="原价" prop="originalPrice">
|
||||||
<el-form-item label="原价" prop="originalPrice">
|
<el-input v-model="form.originalPrice" placeholder="请输入商品原价" :maxlength="8"
|
||||||
<el-input v-model="form.originalPrice" placeholder="请输入商品原价" :maxlength="8"
|
@input="e => form.originalPrice = filterNumberInput(e)" style="width: 300px;"></el-input>
|
||||||
@input="e => form.originalPrice = filterNumberInput(e)"></el-input>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="拼团价" prop="groupPrice">
|
||||||
<el-form-item label="拼团价" prop="groupPrice">
|
<el-input v-model="form.groupPrice" placeholder="请输入拼团价" :maxlength="8"
|
||||||
<el-input v-model="form.groupPrice" placeholder="请输入拼团价" :maxlength="8"
|
@input="e => form.groupPrice = filterNumberInput(e)" style="width: 300px;"></el-input>
|
||||||
@input="e => form.groupPrice = filterNumberInput(e)"></el-input>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="成团人数" prop="groupPeopleNum">
|
||||||
<el-form-item label="成团人数" prop="groupPeopleNum">
|
<el-input v-model="form.groupPeopleNum" placeholder="当参与人数达到成团人数才能完成拼团" :maxlength="8"
|
||||||
<el-input v-model="form.groupPeopleNum" placeholder="当参与人数达到成团人数才能完成拼团" :maxlength="8"
|
@input="e => form.groupPeopleNum = filterNumberInput(e, 1)" style="width: 300px;"></el-input>
|
||||||
@input="e => form.groupPeopleNum = filterNumberInput(e, 1)"></el-input>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="成团期限" prop="groupTimeoutHour">
|
||||||
<el-form-item label="成团期限" prop="groupTimeoutHour">
|
<el-input v-model="form.groupTimeoutHour" placeholder="最小不低于1小时,最大不超过72小时" :maxlength="8"
|
||||||
<el-input v-model="form.groupTimeoutHour" placeholder="最小不低于1小时,最大不超过72小时" :maxlength="8"
|
@input="e => form.groupTimeoutHour = filterNumberInput(e, 1)" style="width: 300px;"></el-input>
|
||||||
@input="e => form.groupTimeoutHour = filterNumberInput(e, 1)"></el-input>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="限购数量" prop="limitBuyNum">
|
||||||
<el-form-item label="限购数量" prop="limitBuyNum">
|
<div class="center">
|
||||||
<div class="center">
|
<el-switch v-model="limitBuyNumSwitch" @change="limitBuyNumSwitchChange"></el-switch>
|
||||||
<el-switch v-model="limitBuyNumSwitch" @change="limitBuyNumSwitchChange"></el-switch>
|
<div class="ipt" v-if="limitBuyNumSwitch">
|
||||||
<div class="ipt" v-if="limitBuyNumSwitch">
|
<el-input :maxlength="8" v-model="form.limitBuyNum" placeholder="每人最多购买次数"
|
||||||
<el-input :maxlength="8" v-model="form.limitBuyNum" placeholder="每人最多购买次数"
|
@input="e => form.limitBuyNum = filterNumberInput(e, 1)" style="width: 250px;"></el-input>
|
||||||
@input="e => form.limitBuyNum = filterNumberInput(e, 1)"></el-input>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="上架状态">
|
||||||
<el-form-item label="上架状态">
|
<el-switch v-model="form.onlineStatus" :active-value="1" :inactive-value="0"></el-switch>
|
||||||
<el-switch v-model="form.onlineStatus" :active-value="1" :inactive-value="0"></el-switch>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="商品详情">
|
||||||
<el-form-item label="商品详情">
|
<MultiImageUpload v-model="wareCommentImgs" @upload-all-success="wareCommentImgsMultiOnSuccess" />
|
||||||
<MultiImageUpload v-model="wareCommentImgs" @upload-all-success="wareCommentImgsMultiOnSuccess" />
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-form>
|
||||||
</el-form>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog_footer">
|
||||||
<el-button @click="visible = false">取 消</el-button>
|
<div class="btn">
|
||||||
<el-button type="primary" :loading="loading" @click="submitHandle">确 定</el-button>
|
<el-button size="large" @click="visible = false" style="width: 100%;">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="btn">
|
||||||
|
<el-button size="large" type="primary" :loading="loading" @click="submitHandle" style="width: 100%;">确
|
||||||
|
定</el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@@ -73,14 +80,16 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { filterNumberInput } from '@/utils'
|
import { filterNumberInput } from '@/utils'
|
||||||
|
import { addGbWare, updateGbWareById } from '@/api/market/ware'
|
||||||
|
|
||||||
const visible = ref(true)
|
const visible = ref(false)
|
||||||
const limitBuyNumSwitch = ref(false) // 如果limitBuyNum = -10086 就是false,不限购,true为限购
|
const limitBuyNumSwitch = ref(false) // 如果limitBuyNum = -10086 就是false,不限购,true为限购
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const wareImgs = ref([])
|
const wareImgs = ref([])
|
||||||
const wareCommentImgs = ref([])
|
const wareCommentImgs = ref([])
|
||||||
const formRef = ref(null)
|
const formRef = ref(null)
|
||||||
const form = ref({
|
const formObj = {
|
||||||
|
id: '',
|
||||||
useShopType: 'only', // only-仅本店 all全部 /custom 指定
|
useShopType: 'only', // only-仅本店 all全部 /custom 指定
|
||||||
useShops: '', // 可用门店(指定门店时存储门店ID,逗号分隔)
|
useShops: '', // 可用门店(指定门店时存储门店ID,逗号分隔)
|
||||||
wareName: '', // 商品名称
|
wareName: '', // 商品名称
|
||||||
@@ -93,7 +102,8 @@ const form = ref({
|
|||||||
limitBuyNum: '', // 限购数量(每人最多购买次数) -10086
|
limitBuyNum: '', // 限购数量(每人最多购买次数) -10086
|
||||||
onlineStatus: 1, // 上架状态(0下架 1上架)
|
onlineStatus: 1, // 上架状态(0下架 1上架)
|
||||||
wareCommentImgs: '', // 商品详情图片(多个用逗号分隔)
|
wareCommentImgs: '', // 商品详情图片(多个用逗号分隔)
|
||||||
})
|
}
|
||||||
|
const form = ref({ ...formObj })
|
||||||
|
|
||||||
const rules = ref({
|
const rules = ref({
|
||||||
useShops: [
|
useShops: [
|
||||||
@@ -203,26 +213,64 @@ function wareCommentImgsMultiOnSuccess(res) {
|
|||||||
form.value.wareCommentImgs = wareCommentImgs.value.join(',')
|
form.value.wareCommentImgs = wareCommentImgs.value.join(',')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function useShopTypeChange(e) {
|
||||||
|
form.value.useShops = ''
|
||||||
|
}
|
||||||
|
|
||||||
// 提交保存
|
// 提交保存
|
||||||
|
const emits = defineEmits(['success'])
|
||||||
function submitHandle() {
|
function submitHandle() {
|
||||||
console.log('form.value===', form.value);
|
formRef.value.validate(async vaild => {
|
||||||
return
|
|
||||||
formRef.value.vaildate(async vaild => {
|
|
||||||
try {
|
try {
|
||||||
if (vaild) {
|
if (vaild) {
|
||||||
const data = { ...form.value }
|
const data = { ...form.value }
|
||||||
if (form.value.useShopType == 'custom') {
|
if (form.value.useShopType == 'custom') {
|
||||||
data.useShops = form.value.useShops.join(',')
|
data.useShops = form.value.useShops.join(',')
|
||||||
}
|
}
|
||||||
|
loading.value = true
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateGbWareById(data)
|
||||||
|
} else {
|
||||||
|
await addGbWare(data)
|
||||||
|
}
|
||||||
|
ElNotification({
|
||||||
|
title: '注意',
|
||||||
|
message: '保存成功',
|
||||||
|
type: 'success'
|
||||||
|
})
|
||||||
|
emits('success')
|
||||||
|
visible.value = false
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
}
|
}
|
||||||
|
setTimeout(() => {
|
||||||
|
loading.value = false
|
||||||
|
}, 500);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function show() {
|
function resetHandle() {
|
||||||
|
form.value = { ...formObj }
|
||||||
|
}
|
||||||
|
|
||||||
|
function show(obj) {
|
||||||
visible.value = true
|
visible.value = true
|
||||||
|
if (obj && obj.id) {
|
||||||
|
console.log(obj);
|
||||||
|
form.value = { ...obj }
|
||||||
|
if (form.value.wareImgs != '') {
|
||||||
|
wareImgs.value = form.value.wareImgs.split(',')
|
||||||
|
}
|
||||||
|
if (form.value.wareCommentImgs != '') {
|
||||||
|
wareCommentImgs.value = form.value.wareCommentImgs.split(',')
|
||||||
|
}
|
||||||
|
if (form.value.limitBuyNum != -10086) {
|
||||||
|
limitBuyNumSwitch.value = true
|
||||||
|
} else {
|
||||||
|
limitBuyNumSwitch.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
@@ -231,6 +279,11 @@ defineExpose({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.form_warap {
|
||||||
|
height: 60vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.column {
|
.column {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -241,4 +294,13 @@ defineExpose({
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dialog_footer {
|
||||||
|
display: flex;
|
||||||
|
gap: 14px;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -0,0 +1,256 @@
|
|||||||
|
<!-- 拼团订单 -->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="row">
|
||||||
|
<el-form :model="queryForm" inline>
|
||||||
|
<el-form-item label="订单状态">
|
||||||
|
<el-select v-model="queryForm.status" style="width: 150px;">
|
||||||
|
<el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="下单时间">
|
||||||
|
<el-date-picker style="width: 300px" v-model="confirmOrderTimes" type="daterange" range-separator="至"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD"
|
||||||
|
@change="confirmOrderTimesChange"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="核销时间">
|
||||||
|
<el-date-picker style="width: 300px" v-model="checkoutOrderTimes" type="daterange" range-separator="至"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD"
|
||||||
|
@change="checkoutOrderTimesChange"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-input :maxlength="11" v-model="queryForm.phone" placeholder="请输入手机号"
|
||||||
|
@input="e => queryForm.phone = filterNumberInput(e, 1)"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="queryForm.orderNo" placeholder="请输入订单号"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="queryForm.groupNo" placeholder="请输入关联团单号"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" :loading="tableData.loading" @click="searchHandle">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" :loading="tableData.loading" @click="refreshHandle">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="info_wrap">
|
||||||
|
<div class="item">
|
||||||
|
<div class="icon">
|
||||||
|
<img class="img" src="@/assets/fenxiao/3.png">
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<div>总订单数</div>
|
||||||
|
<div>{{ multiplyAndFormat(infoObj.successAmount || 0) }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div class="icon">
|
||||||
|
<img class="img" src="@/assets/fenxiao/4.png">
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<div>已支付金额(元)</div>
|
||||||
|
<div>{{ multiplyAndFormat(infoObj.pendingAmount || 0) }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div class="icon">
|
||||||
|
<img class="img" src="@/assets/fenxiao/5.png">
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<div>已退款金额(元)</div>
|
||||||
|
<div>{{ multiplyAndFormat(infoObj.balanceAmount || 0) }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mt14">
|
||||||
|
<el-table :data="tableData.list" stripe border v-loading="tableData.loading">
|
||||||
|
<el-table-column label="订单号" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="商品" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="购买用户" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="支付金额(元)" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="支付时间" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="下单门店" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="状态" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="团单号" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="成团时间" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="核销码" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="核销时间" prop="orderNo"></el-table-column>
|
||||||
|
<el-table-column label="操作" width="150">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<el-button link type="primary">核销</el-button>
|
||||||
|
<el-button link type="danger">退款</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<div class="row mt14">
|
||||||
|
<el-pagination v-model:current-page="tableData.page" v-model:page-size="tableData.size"
|
||||||
|
:page-sizes="[10, 20, 50, 100, 500]" background layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="tableData.total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
import { filterNumberInput, multiplyAndFormat } from '@/utils'
|
||||||
|
|
||||||
|
const statusList = ref([
|
||||||
|
{
|
||||||
|
label: '待成团',
|
||||||
|
value: 1,
|
||||||
|
type: 'info'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '待核销',
|
||||||
|
value: 2,
|
||||||
|
type: 'primary'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '已核销',
|
||||||
|
value: 3,
|
||||||
|
type: 'success'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '退款中',
|
||||||
|
value: 4,
|
||||||
|
type: 'warning'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '已退款',
|
||||||
|
value: 5,
|
||||||
|
type: 'info'
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
const confirmOrderTimes = ref([])
|
||||||
|
const checkoutOrderTimes = ref([])
|
||||||
|
const queryForm = reactive({
|
||||||
|
status: '',
|
||||||
|
orderStartTime: '',
|
||||||
|
orderEndTime: '',
|
||||||
|
checkoutStartTime: '',
|
||||||
|
checkoutEndTime: '',
|
||||||
|
phone: '',
|
||||||
|
orderNo: '',
|
||||||
|
groupNo: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
// 搜索
|
||||||
|
function searchHandle() {
|
||||||
|
tableData.page = 1
|
||||||
|
getTableData()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重置搜索
|
||||||
|
function refreshHandle() {
|
||||||
|
confirmOrderTimes.value = []
|
||||||
|
checkoutOrderTimes.value = []
|
||||||
|
|
||||||
|
queryForm.status = ''
|
||||||
|
queryForm.orderStartTime = ''
|
||||||
|
queryForm.orderEndTime = ''
|
||||||
|
queryForm.checkoutStartTime = ''
|
||||||
|
queryForm.checkoutEndTime = ''
|
||||||
|
queryForm.phone = ''
|
||||||
|
queryForm.orderNo = ''
|
||||||
|
queryForm.groupNo = ''
|
||||||
|
searchHandle()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下单时间范围
|
||||||
|
function confirmOrderTimesChange(value) {
|
||||||
|
if (value && value.length === 2) {
|
||||||
|
queryForm.orderStartTime = dayjs(value[0]).format('YYYY-MM-DD 00:00:00');
|
||||||
|
queryForm.orderEndTime = dayjs(value[1]).format('YYYY-MM-DD 23:59:59');
|
||||||
|
} else {
|
||||||
|
queryForm.orderStartTime = '';
|
||||||
|
queryForm.orderEndTime = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 核销时间范围
|
||||||
|
function checkoutOrderTimesChange(value) {
|
||||||
|
if (value && value.length === 2) {
|
||||||
|
queryForm.checkoutStartTime = dayjs(value[0]).format('YYYY-MM-DD 00:00:00');
|
||||||
|
queryForm.checkoutEndTime = dayjs(value[1]).format('YYYY-MM-DD 23:59:59');
|
||||||
|
} else {
|
||||||
|
queryForm.checkoutStartTime = '';
|
||||||
|
queryForm.checkoutEndTime = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const infoObj = reactive({})
|
||||||
|
|
||||||
|
const tableData = reactive({
|
||||||
|
page: 1,
|
||||||
|
size: 10,
|
||||||
|
total: 0,
|
||||||
|
list: [],
|
||||||
|
loading: false
|
||||||
|
})
|
||||||
|
|
||||||
|
// 分页大小发生变化
|
||||||
|
function handleSizeChange(e) {
|
||||||
|
tableData.size = e;
|
||||||
|
getTableData();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页发生变化
|
||||||
|
function handleCurrentChange(e) {
|
||||||
|
tableData.page = e;
|
||||||
|
getTableData();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getTableData() {
|
||||||
|
try {
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getTableData()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.row {
|
||||||
|
&.mt14 {
|
||||||
|
margin-top: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info_wrap {
|
||||||
|
display: flex;
|
||||||
|
gap: 48px;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border: 1px solid #D9D9D9;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 0 10px;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
flex: 1;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<el-button type="primary" icon="Plus" @click="addGroupGoodsRef.show()">添加</el-button>
|
<el-button type="primary" icon="Plus" @click="addGroupGoodsRef.show()">添加</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="上架状态">
|
<el-form-item label="上架状态">
|
||||||
<el-select v-model="queryForm.status" style="width: 100px;">
|
<el-select v-model="queryForm.onlineStatus" style="width: 100px;">
|
||||||
<el-option :label="item.label" :value="item.value" v-for="item in statusList" :key="item.value"></el-option>
|
<el-option :label="item.label" :value="item.value" v-for="item in statusList" :key="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
@change="selectTimeChange"></el-date-picker>
|
@change="selectTimeChange"></el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="商品名称">
|
<el-form-item label="商品名称">
|
||||||
<el-input v-model="queryForm.name" placeholder="请输入商品名称"></el-input>
|
<el-input v-model="queryForm.wareName" placeholder="请输入商品名称"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="Search" :loading="tableData.loading" @click="searchHandle">搜索</el-button>
|
<el-button type="primary" icon="Search" :loading="tableData.loading" @click="searchHandle">搜索</el-button>
|
||||||
@@ -27,29 +27,60 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row mt14">
|
<div class="row mt14">
|
||||||
<el-table :data="tableData.list" stripe border v-loading="tableData.loading">
|
<el-table :data="tableData.list" stripe border v-loading="tableData.loading">
|
||||||
<el-table-column label="商品图片"></el-table-column>
|
<el-table-column label="商品图片">
|
||||||
<el-table-column label="商品名称"></el-table-column>
|
|
||||||
<el-table-column label="原价(元)"></el-table-column>
|
|
||||||
<el-table-column label="拼团价(元)"></el-table-column>
|
|
||||||
<el-table-column label="成团期限(小时)"></el-table-column>
|
|
||||||
<el-table-column label="成团人数"></el-table-column>
|
|
||||||
<el-table-column label="上架状态"></el-table-column>
|
|
||||||
<el-table-column label="创建时间"></el-table-column>
|
|
||||||
<el-table-column label="操作">
|
|
||||||
<template v-slot="scope">
|
<template v-slot="scope">
|
||||||
<el-button link type="primary">编辑</el-button>
|
<div class="wareImgs">
|
||||||
<el-button link type="danger">删除</el-button>
|
<el-image :src="scope.row.wareImgs.split(',')[0]" style="width: 100%;height: 100%;" fit="cover"
|
||||||
|
:preview-src-list="scope.row.wareImgs.split(',')" :initial-index="0" preview-teleported></el-image>
|
||||||
|
<div class="num" v-if="scope.row.wareImgs.split(',').length > 1">
|
||||||
|
+{{ scope.row.wareImgs.split(',').length }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="商品名称" prop="wareName"></el-table-column>
|
||||||
|
<el-table-column label="原价(元)" prop="originalPrice"></el-table-column>
|
||||||
|
<el-table-column label="拼团价(元)" prop="groupPrice"></el-table-column>
|
||||||
|
<el-table-column label="成团期限(小时)" prop="groupTimeoutHour"></el-table-column>
|
||||||
|
<el-table-column label="成团人数" prop="groupPeopleNum"></el-table-column>
|
||||||
|
<el-table-column label="上架状态" prop="onlineStatus">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<el-switch v-model="scope.row.onlineStatus" :active-value="1" :inactive-value="0"
|
||||||
|
@change="editOnlineStatusAjax($event, scope.row)"></el-switch>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建时间" prop="createTime"></el-table-column>
|
||||||
|
<el-table-column label="操作" width="150">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<template v-if="scope.row.onlineStatus">
|
||||||
|
<el-button link type="primary" disabled>(下架后编辑/删除)</el-button>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<el-button link type="primary" @click="addGroupGoodsRef.show(scope.row)">编辑</el-button>
|
||||||
|
<el-popconfirm title="确认要删除吗?" @confirm="delHandle(scope.row)">
|
||||||
|
<template #reference>
|
||||||
|
<el-button type="danger" link>删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-popconfirm>
|
||||||
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
<addGroupGoods ref="addGroupGoodsRef" />
|
<div class="row mt14">
|
||||||
|
<el-pagination v-model:current-page="tableData.page" v-model:page-size="tableData.size"
|
||||||
|
:page-sizes="[10, 20, 50, 100, 500]" background layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="tableData.total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
|
||||||
|
</div>
|
||||||
|
<addGroupGoods ref="addGroupGoodsRef" @success="searchHandle" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import dayjs from 'dayjs';
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
import addGroupGoods from './addGroupGoods.vue';
|
import addGroupGoods from './addGroupGoods.vue';
|
||||||
|
import { getGbWarePage, editOnlineStatus, deleteGbWare } from '@/api/market/ware'
|
||||||
|
|
||||||
const addGroupGoodsRef = ref(null)
|
const addGroupGoodsRef = ref(null)
|
||||||
|
|
||||||
@@ -79,23 +110,26 @@ const selectTimeChange = (value) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const queryForm = reactive({
|
const queryForm = reactive({
|
||||||
status: '',
|
onlineStatus: '',
|
||||||
startTime: '',
|
startTime: '',
|
||||||
endTime: '',
|
endTime: '',
|
||||||
name: ''
|
wareName: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
// 搜索
|
// 搜索
|
||||||
function searchHandle() {
|
function searchHandle() {
|
||||||
|
tableData.page = 1
|
||||||
|
getGbWarePageAjax()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重置搜索
|
// 重置搜索
|
||||||
function refreshHandle() {
|
function refreshHandle() {
|
||||||
queryForm.status = ''
|
times.value = []
|
||||||
|
queryForm.onlineStatus = ''
|
||||||
queryForm.startTime = ''
|
queryForm.startTime = ''
|
||||||
queryForm.endTime = ''
|
queryForm.endTime = ''
|
||||||
queryForm.name = ''
|
queryForm.wareName = ''
|
||||||
|
searchHandle()
|
||||||
}
|
}
|
||||||
|
|
||||||
const tableData = reactive({
|
const tableData = reactive({
|
||||||
@@ -105,6 +139,61 @@ const tableData = reactive({
|
|||||||
list: [],
|
list: [],
|
||||||
loading: false
|
loading: false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 分页大小发生变化
|
||||||
|
function handleSizeChange(e) {
|
||||||
|
tableData.size = e;
|
||||||
|
getGbWarePageAjax();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页发生变化
|
||||||
|
function handleCurrentChange(e) {
|
||||||
|
tableData.page = e;
|
||||||
|
getGbWarePageAjax();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拼团商品-列表
|
||||||
|
async function getGbWarePageAjax() {
|
||||||
|
try {
|
||||||
|
tableData.loading = true
|
||||||
|
const res = await getGbWarePage({
|
||||||
|
page: tableData.page,
|
||||||
|
size: tableData.size,
|
||||||
|
...queryForm
|
||||||
|
})
|
||||||
|
tableData.list = res.records
|
||||||
|
tableData.total = res.totalRow
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
setTimeout(() => {
|
||||||
|
tableData.loading = false
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改状态
|
||||||
|
async function editOnlineStatusAjax(e, row) {
|
||||||
|
try {
|
||||||
|
await editOnlineStatus(row)
|
||||||
|
getGbWarePageAjax()
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
async function delHandle(row) {
|
||||||
|
try {
|
||||||
|
await deleteGbWare(row.id)
|
||||||
|
getGbWarePageAjax()
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getGbWarePageAjax()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@@ -113,4 +202,35 @@ const tableData = reactive({
|
|||||||
margin-top: 14px;
|
margin-top: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.wareImgs {
|
||||||
|
position: relative;
|
||||||
|
--size: 80px;
|
||||||
|
width: var(--size);
|
||||||
|
height: var(--size);
|
||||||
|
border: 1px solid #ececec;
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num {
|
||||||
|
padding: 0 4px;
|
||||||
|
height: 16px;
|
||||||
|
font-size: 10px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 10;
|
||||||
|
border-radius: 0 0 0 4px;
|
||||||
|
background-color: rgba(0, 0, 0, 0.6);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -7,7 +7,8 @@
|
|||||||
<tabHeader v-model="tabActiveIndex" :list="tabList" />
|
<tabHeader v-model="tabActiveIndex" :list="tabList" />
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt14">
|
<div class="row mt14">
|
||||||
<groupPage ref="groupPageRef" name="groupPage" key="groupPage" />
|
<groupPage name="groupPage" key="groupPage" v-if="tabActiveIndex == 0" />
|
||||||
|
<groupOrder name="groupOrder" key="groupOrder" v-if="tabActiveIndex == 1" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -16,8 +17,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import groupPage from './components/groupPage.vue'
|
import groupPage from './components/groupPage.vue'
|
||||||
|
import groupOrder from './components/groupOrder.vue'
|
||||||
const groupPageRef = ref(null)
|
|
||||||
|
|
||||||
const tabActiveIndex = ref(0)
|
const tabActiveIndex = ref(0)
|
||||||
const tabList = ref([
|
const tabList = ref([
|
||||||
|
|||||||
Reference in New Issue
Block a user