@@ -0,0 +1,424 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
|
||||
<style>
|
||||
#activityDetail {
|
||||
background: #fff;
|
||||
padding: 0 20px 60px;
|
||||
font-size: 14px;
|
||||
font-family: Source Han Sans SC;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.el-form-item__label {
|
||||
color: #666;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.el-table td,
|
||||
.el-table th {
|
||||
padding: 12px 0;
|
||||
}
|
||||
|
||||
.dialog-submit {
|
||||
width: 88px;
|
||||
height: 36px;
|
||||
background: #F3EFFB;
|
||||
border: 1px solid #7536d0;
|
||||
color: #7536d0;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
border-radius: 20px;
|
||||
text-align: center;
|
||||
line-height: 36px;
|
||||
}
|
||||
|
||||
.dialog-submit-gray {
|
||||
color: #999;
|
||||
border: 1px solid #999;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.table-good-status {
|
||||
color: #7536D0;
|
||||
margin-right: 14px;
|
||||
}
|
||||
|
||||
.table-good-status-1 {
|
||||
color: #21D7AE;
|
||||
}
|
||||
|
||||
.table-good-status-delete {
|
||||
color: #F54747;
|
||||
}
|
||||
|
||||
.switch-flex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.switch-tip {
|
||||
margin: 0 16px;
|
||||
}
|
||||
|
||||
.el-icon-question {
|
||||
font-size: 24px;
|
||||
color: #d5d5d5;
|
||||
|
||||
}
|
||||
|
||||
.popover-item {
|
||||
line-height: 42px;
|
||||
position: relative;
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.activity-type {
|
||||
flex-wrap: wrap;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.activity-type-item {
|
||||
width: 114px;
|
||||
height: 40px;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #E6E6E6;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #444444;
|
||||
margin: 0 24px 30px 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.activity-type-item:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.activity-type-item-active {
|
||||
background: rgba(110, 61, 200, 0.2);
|
||||
border: 1px solid #6E3DC8;
|
||||
color: #6E3DC8;
|
||||
}
|
||||
|
||||
.activity-type-icon {
|
||||
margin-right: 14px;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.activity-type-name {
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.discount-item {
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
|
||||
.discount-input {
|
||||
width: 200px;
|
||||
margin: 0 20px 0 0;
|
||||
}
|
||||
|
||||
.discount-input span {
|
||||
flex-shrink: 0;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.discount-close-icon {
|
||||
cursor: pointer;
|
||||
color: #FE7C76;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.table-goods-image {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
margin-right: 15px;
|
||||
flex-shrink: 0;
|
||||
border: 1px solid #e6e6e6;
|
||||
}
|
||||
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
|
||||
<div id="activityDetail" v-cloak>
|
||||
<div class="activity-type display-flex">
|
||||
<div v-if="(activityForm.type==aitem.type && optType!='add') || optType=='add'" class="activity-type-item"
|
||||
:class="activityForm.type==aitem.type?'activity-type-item-active':''"
|
||||
v-for="(aitem,aindex) in activityTypeList" @click="initForm(aitem.type)">
|
||||
<img class="activity-type-icon" :src="'/assets/addons/shopro/img/activity/'+aitem.icon+'.png'">
|
||||
<div class="activity-type-name">{{aitem.label}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-form ref="activityForm" :model="activityForm" label-width="130px" :rules="rules">
|
||||
<div class="activityForm-auto">
|
||||
<el-form-item label="活动名称:" prop="title">
|
||||
<el-input v-model="activityForm.title" placeholder="请输入活动名称" maxlength="10" :disabled="isDisabled"
|
||||
size="medium">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="活动时间:" prop="dateTime">
|
||||
<el-date-picker
|
||||
v-if="optType=='add' || optType=='view' || (optType=='edit' && Config.activity.status=='nostart')"
|
||||
v-model="activityForm.dateTime" type="datetimerange" size="medium" start-placeholder="开始日期"
|
||||
end-placeholder="结束日期" :disabled="isDisabled && someIsDisabled" value-format="yyyy-MM-dd HH:mm:ss"
|
||||
format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
<div class="display-flex" v-else>
|
||||
<el-date-picker v-model="activityForm.dateTime[0]" type="datetime">
|
||||
</el-date-picker>
|
||||
<div style="flex-shrink: 0;">---</div>
|
||||
<el-date-picker v-model="activityForm.dateTime[1]" :picker-options="pickerOptions" type="datetime"
|
||||
placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="适用人群:">
|
||||
<el-radio-group v-model="activityForm.temp_user_type" :disabled="isDisabled">
|
||||
<el-radio label="all">全部用户</el-radio>
|
||||
<el-radio label="new_user">新人专享</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<template v-if="activityForm.temp_user_type=='new_user'">
|
||||
<el-form-item label="订单数限制:">
|
||||
<el-input v-positive-integer type='number' v-model.number="activityForm.temp_new_user_order_count"
|
||||
placeholder="允许的最大已支付/完成订单数,默认0为首单新用户" :disabled="isDisabled" size="medium">
|
||||
<template slot="append">笔及以下</template>
|
||||
</el-input>
|
||||
<div style="font-size: 12px; color: #999; line-height: 20px;">
|
||||
用户历史已支付/已完成订单数 ≤ 该数值方可享受优惠(填 0 表示仅限未下单的首单新用户)
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="注册天数限制:">
|
||||
<el-input v-positive-integer type='number' v-model.number="activityForm.temp_new_user_register_days"
|
||||
placeholder="注册多少天以内算新人,0或留空表示不限" :disabled="isDisabled" size="medium">
|
||||
<template slot="append">天以内</template>
|
||||
</el-input>
|
||||
<div style="font-size: 12px; color: #999; line-height: 20px;">
|
||||
用户注册时间在该天数以内方可参与(0 或留空表示不限制注册天数)
|
||||
</div>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-if="activityForm.type=='groupon'">
|
||||
<el-form-item label="成团人数:" prop="temp_team_num">
|
||||
<el-input v-positive-integer type='number' v-model.number="activityForm.temp_team_num"
|
||||
placeholder="请输入成团人的数量" :disabled="isDisabled" size="medium">
|
||||
<template slot="append">人</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<div class="switch-flex">
|
||||
<el-form-item label="单独购买:">
|
||||
<el-switch v-model="activityForm.temp_is_alone" active-color="#7536D0" inactive-color="#e9ebef"
|
||||
:disabled="isDisabled" active-value="1" inactive-value="0">
|
||||
</el-switch>
|
||||
<span class="switch-tip">允许</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="虚拟成团:">
|
||||
<el-switch v-model="activityForm.temp_is_fictitious" active-color="#7536D0"
|
||||
inactive-color="#e9ebef" :disabled="isDisabled" active-value="1" inactive-value="0">
|
||||
</el-switch>
|
||||
<span class="switch-tip">允许</span>
|
||||
<el-popover class="popover-item" width="240" trigger="hover"
|
||||
content="开启虚拟成团后,在拼团有效期内人数不够的团,系统会虚拟用户凑满人数,使拼团成功。虚拟的用户不生成订单,只需对真实买家发货。(请在资料管理中添加足够数量的虚拟用户,否则虚拟成团不会成功)">
|
||||
<i slot="reference" class="el-icon-question"></i>
|
||||
</el-popover>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<el-form-item label="参团卡显示:">
|
||||
<el-switch v-model="activityForm.temp_team_card" active-color="#7536D0" inactive-color="#e9ebef"
|
||||
:disabled="isDisabled" active-value="1" inactive-value="0">
|
||||
</el-switch>
|
||||
<span class="switch-tip">允许</span>
|
||||
<el-popover class="popover-item" width="240" trigger="hover"
|
||||
content="开启参团卡显示后,商品详情页显示未成团的团列表,买家可以直接选择一个参团。">
|
||||
<i slot="reference" class="el-icon-question"></i>
|
||||
</el-popover>
|
||||
</el-form-item>
|
||||
<el-form-item label="最多虚拟人数:" v-if="activityForm.temp_is_fictitious=='1'">
|
||||
<el-input type='number' v-model.number="activityForm.temp_fictitious_num"
|
||||
placeholder="单团最多虚拟人数的名额限制,不填时,不限制名额" :disabled="isDisabled" size="medium">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="组团有效时间:">
|
||||
<el-input type='number' v-model.number="activityForm.temp_valid_time" placeholder="申请组团的有效时间,默认不限制"
|
||||
:disabled="isDisabled" size="medium">
|
||||
<template slot="append">小时</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-if="activityForm.type=='groupon' || activityForm.type=='seckill' || activityForm.type=='timer' || activityForm.type=='robbuy' || activityForm.type=='promote'">
|
||||
<el-form-item label="每人限购件数:" v-if="activityForm.type=='groupon' || activityForm.type=='seckill' || activityForm.type=='timer' || activityForm.type=='promote'">
|
||||
<el-input v-positive-integer type='number' v-model.number="activityForm.temp_limit_buy"
|
||||
placeholder="请输入限购件数" :disabled="isDisabled" size="medium">
|
||||
<template slot="append">件</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="activityForm.type == 'robbuy'" label="抢购名额:">
|
||||
<el-input v-positive-integer type='number' v-model.number="activityForm.num"
|
||||
placeholder="请输入抢购名额" :disabled="isDisabled" size="medium">
|
||||
<template slot="append">名</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单关闭时间:">
|
||||
<el-input v-model="activityForm.temp_order_auto_close" placeholder="未支付订单,订单将自动关闭并退出活动"
|
||||
:disabled="isDisabled" size="medium">
|
||||
<template slot="append">分钟</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="activityForm.type=='groupon' || activityForm.type=='seckill' || activityForm.type=='timer'" label="活动下架时间:">
|
||||
<el-input v-model="activityForm.temp_activity_auto_close" placeholder="活动结束后,将自动进入历史活动"
|
||||
:disabled="isDisabled" size="medium">
|
||||
<template slot="append">分钟</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<div v-show="activityForm.type=='full_reduce' || activityForm.type=='full_discount'">
|
||||
<el-form-item label="优惠类型:" prop="temp_type">
|
||||
<el-radio-group v-model="activityForm.temp_type" :disabled="isDisabled">
|
||||
<el-radio label="money">消费金额</el-radio>
|
||||
<el-radio label="num">购买件数</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="优惠条件" prop="temp_discounts">
|
||||
<div>
|
||||
<div class="discount-item display-flex" v-for="(ditem,dindex) in activityForm.temp_discounts">
|
||||
<div class="discount-input display-flex">
|
||||
<span>消费满</span>
|
||||
<el-input type='number' v-model="ditem.full" :disabled="isDisabled" size="medium">
|
||||
<template slot="append">{{activityForm.temp_type=='money'?'元':'件'}}</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="discount-input display-flex">
|
||||
<span>{{activityForm.type=='full_reduce'?'优惠金额':'折扣'}}</span>
|
||||
<el-input type='number' v-model="ditem.discount" :disabled="isDisabled" size="medium">
|
||||
<template slot="append">{{activityForm.type=='full_reduce'?'元':'折'}}</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<template v-if="!isDisabled">
|
||||
<i class="el-icon-circle-close discount-close-icon"
|
||||
@click="discountsDelete(dindex)"></i>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<el-button v-if="activityForm.temp_discounts && activityForm.temp_discounts.length<5" type="primary"
|
||||
size="medium" :disabled="isDisabled" @click="discountsAdd">
|
||||
编辑优惠条件
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<template v-if="activityForm.type=='free_shipping'">
|
||||
<el-form-item label="优惠类型:">
|
||||
<el-radio-group v-model="activityForm.temp_type" :disabled="isDisabled"
|
||||
@change="changeFreeShippingType">
|
||||
<el-radio label="money">消费金额</el-radio>
|
||||
<el-radio label="num">购买件数</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<template v-if="activityForm.temp_type=='money'">
|
||||
<el-form-item label="消费金额:" prop="temp_full_num">
|
||||
<el-input type='number' v-model.number="activityForm.temp_full_num" placeholder="请输入消费金额"
|
||||
:disabled="isDisabled" size="medium">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-if="activityForm.temp_type=='num'">
|
||||
<el-form-item label="购买件数:" prop="temp_full_num">
|
||||
<el-input type='number' v-model.number="activityForm.temp_full_num" placeholder="请输入购买件数"
|
||||
:disabled="isDisabled" size="medium">
|
||||
<template slot="append">件</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item label="活动不支持区域:">
|
||||
<div class="ellipsis-item">{{activityForm.temp_area_text}}</div>
|
||||
<el-button v-if="optType=='add'" type="primary" size="medium" :disabled="isDisabled"
|
||||
@click="areaSelect">
|
||||
选择不支持区域
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item label="活动说明:">
|
||||
<div class="display-flex" style="align-items: center;line-height: 34px;position: relative;">
|
||||
<el-input v-model="activityForm.richtext_title" :disabled="isDisabled" placeholder="请选择活动说明"
|
||||
size="medium">
|
||||
</el-input>
|
||||
<el-button style="position: absolute;right: 0;" type="primary" :disabled="isDisabled"
|
||||
@click="richtextSelect" size="medium">
|
||||
选择活动说明
|
||||
</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="投放区域:">
|
||||
<el-checkbox-group v-model="activityForm.show">
|
||||
<el-checkbox v-for="(item, index) of showList" :label="item.value" :key="item.id">{{item.name}}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="活动商品:" prop="selectedGoodsType=='some'?'goods_list':''">
|
||||
<template
|
||||
v-if="activityForm.type=='full_reduce' || activityForm.type=='full_discount' || activityForm.type=='free_shipping'">
|
||||
<el-radio-group v-model="selectedGoodsType" :disabled="isDisabled" @change="changeGoodsType">
|
||||
<el-radio label="all">全部商品</el-radio>
|
||||
<el-radio label="some">部分商品</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
<div v-if="selectedGoodsType=='some'">
|
||||
<el-button type="primary" :disabled="isDisabled" @click="goodsSelect">
|
||||
商品选择
|
||||
</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-bottom: 20px;" v-if="selectedGoodsType=='some'">
|
||||
<el-table :data="activityForm.goods_list" style="width: 100%" v-if="activityForm.goods_list.length>0">
|
||||
<el-table-column label="商品信息" width="320" align="left">
|
||||
<template slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div class="table-goods-image">
|
||||
<el-image v-if="scope.row.image" :src="Fast.api.cdnurl(scope.row.image)"
|
||||
fit="cover">
|
||||
<div slot="error" class="image-slot">
|
||||
<i class="el-icon-picture-outline"></i>
|
||||
</div>
|
||||
</el-image>
|
||||
</div>
|
||||
<span class="ellipsis-item-2">{{scope.row.title}}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<template v-if="activityForm.type=='seckill' || activityForm.type=='timer' || activityForm.type=='groupon' || activityForm.type=='robbuy' || activityForm.type=='promote'">
|
||||
<span v-if="optType=='add' || optType=='edit'" class="table-good-status cursor-pointer"
|
||||
:class="scope.row.opt?'table-good-status-1':''"
|
||||
@click="activitySku(scope.row.id,scope.$index,encodeURI(scope.row.actSkuPrice))">
|
||||
{{scope.row.opt=== 0 ? "设置" : "修改"}}
|
||||
</span>
|
||||
<span v-if="optType=='view'" class="table-good-status cursor-pointer"
|
||||
@click="activitySku(scope.row.id,scope.$index,encodeURI(scope.row.actSkuPrice))">
|
||||
查看详情
|
||||
</span>
|
||||
</template>
|
||||
<!-- <template v-if="optType=='add' || (optType=='edit' && Config.activity.status=='nostart')">-->
|
||||
<template v-if="optType=='add' || optType=='edit'">
|
||||
<span class="table-good-status-delete cursor-pointer"
|
||||
@click="goodsDelete(scope.$index)">
|
||||
移除
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<div class="shopro-submit-container">
|
||||
<el-button type="primary" :disabled="optType=='view'" @click="submitForm('activityForm')">确定</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,274 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
|
||||
<style>
|
||||
|
||||
.shopro-reset-button {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
#activityIndex {
|
||||
background: #fff;
|
||||
padding: 0 20px 30px;
|
||||
font-size: 14px;
|
||||
font-family: Source Han Sans SC;
|
||||
font-weight: 500;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.activity-title {
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.activity-tips {
|
||||
padding: 16px;
|
||||
border-radius: 5px;
|
||||
background-color: #F1EBFA;
|
||||
position: relative;
|
||||
margin-bottom: 20px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.activity-tips-close {
|
||||
color: #7536D0;
|
||||
position: absolute;
|
||||
top: 16px;
|
||||
right: 16px;
|
||||
}
|
||||
|
||||
.activity-screen {
|
||||
flex-wrap: wrap;
|
||||
align-items: flex-end;
|
||||
}
|
||||
|
||||
.activity-screen-condition {
|
||||
flex: 1;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.activity-screen-button {
|
||||
flex-shrink: 0;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.activity-screen-condition-item {
|
||||
margin: 0 28px 20px 0;
|
||||
}
|
||||
|
||||
.activity-screen-condition-label {
|
||||
margin-right: 14px;
|
||||
flex-shrink: 0;
|
||||
font-size: 12px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.activity-screen-condition-content {
|
||||
width: 176px;
|
||||
}
|
||||
|
||||
.activity-screen-condition-content-time {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
.activity-table-button-left {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.activity-table-button-right {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.activity-table-container {
|
||||
margin-top: 14px;
|
||||
}
|
||||
|
||||
.activity-table-goods-image {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
border: 1px solid #e6e6e6;
|
||||
}
|
||||
|
||||
.table-operation {
|
||||
cursor: pointer;
|
||||
color: #7536D0;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
.table-operation-delete {
|
||||
color: #F54747;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.table-operation:hover {
|
||||
color: #7536D0;
|
||||
}
|
||||
|
||||
.table-operation-delete:hover {
|
||||
color: #F54747;
|
||||
}
|
||||
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
|
||||
<div id="activityIndex" v-cloak>
|
||||
<div class="activity-title">营销活动</div>
|
||||
<div class="activity-tips" v-if="tipCloseFlag">
|
||||
<p><strong>活动说明</strong></p>
|
||||
<p>
|
||||
1、为确保活动的可靠性,请务必配置 Redis
|
||||
<!-- <a class="tip-a" href="https://doc.fastadmin.net/shopro" target="_blank">查看文档</a>-->
|
||||
</p>
|
||||
<p>2、活动订单自动关闭时间 是为当前活动订单专门设置的超时未支付自动关闭时间,如果未设置,将使用系统订单自动关闭时间</p>
|
||||
<p>3、活动自动关闭时间 是当前活动结束后多长时间自动关闭,关闭的活动请在历史活动查看</p>
|
||||
<p>4、每人限购 不设置或者设置为 0 将不限制购买数量</p>
|
||||
<i class="el-icon-close activity-tips-close" @click="activityTipsClose"></i>
|
||||
</div>
|
||||
<div class="activity-screen display-flex">
|
||||
<div class="activity-screen-condition display-flex">
|
||||
<div class="activity-screen-condition-item display-flex">
|
||||
<div class="activity-screen-condition-label">
|
||||
活动名称
|
||||
</div>
|
||||
<div class="activity-screen-condition-content">
|
||||
<el-input size="small" v-model="searchForm.title" placeholder="请输入活动名称"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="activity-screen-condition-item display-flex">
|
||||
<div class="activity-screen-condition-label">
|
||||
活动类型
|
||||
</div>
|
||||
<div class="activity-screen-condition-content">
|
||||
<el-select class="select-item" size="small" v-model="searchForm.type" placeholder="请选择">
|
||||
<el-option v-for="item in activityOptions" :key="item.type" :label="item.name"
|
||||
:value="item.type">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="activity-screen-condition-item display-flex">
|
||||
<div class="activity-screen-condition-label">
|
||||
活动状态
|
||||
</div>
|
||||
<div class="activity-screen-condition-content">
|
||||
<el-select class="select-item" size="small" v-model="searchForm.status" placeholder="请选择">
|
||||
<el-option v-for="item in statusOptins" :key="item.type" :label="item.name"
|
||||
:value="item.type">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="activity-screen-condition-item display-flex">
|
||||
<div class="activity-screen-condition-label">
|
||||
活动时间
|
||||
</div>
|
||||
<div class="activity-screen-condition-content activity-screen-condition-content-time">
|
||||
<el-date-picker v-model="searchForm.activitytime" type="datetimerange" size="small"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss"
|
||||
format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="activity-screen-button display-flex">
|
||||
<div class="shopro-button shopro-reset-button" @click="screenEmpty">重置</div>
|
||||
<div class="shopro-button shopro-screen-button" @click="getActivityData(0,10)">筛选</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="activity-table-button display-flex">
|
||||
<div class="activity-table-button-left display-flex">
|
||||
<div class="shopro-button shopro-refresh-button" @click="getActivityData()"><i class="el-icon-refresh"></i></div>
|
||||
<div class="shopro-add-button" @click="activityAdd">
|
||||
<i class="el-icon-plus margin-right-5"></i>新建活动
|
||||
</div>
|
||||
</div>
|
||||
<div class="activity-table-button-right">
|
||||
<div class="recycle-btn" @click="activityRecyclebin">历史活动</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="activity-table-container">
|
||||
<el-table :data="activityData" style="width: 100%" border>
|
||||
<el-table-column prop="id" label="ID" width="80">
|
||||
</el-table-column>
|
||||
<el-table-column prop="title" label="活动名称" width="160">
|
||||
</el-table-column>
|
||||
<el-table-column prop="goods_ids" label="商品组" min-width="200">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.goods.length>0" class="display-flex shopro-container-scrollbar" style="overflow: auto;">
|
||||
<div v-for="(ite,gindex) in scope.row.goods">
|
||||
<el-popover placement="bottom" trigger="hover" width="240">
|
||||
<div class="popover-container">
|
||||
<div class="display-flex" style="align-items: flex-start;">
|
||||
<div class="display-flex">
|
||||
<div class="popover-tip">商品ID</div>:
|
||||
</div>
|
||||
<div>{{ite.id}}</div>
|
||||
</div>
|
||||
<div class="display-flex" style="align-items: flex-start;">
|
||||
<div class="display-flex" style="flex-shrink: 0;">
|
||||
<div class="popover-tip">商品标题</div>:
|
||||
</div>
|
||||
<div>{{ite.title}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="activity-table-goods-image" slot="reference"
|
||||
:style="{marginRight:gindex!=scope.row.goods.length-1?'6px':''}">
|
||||
<el-image :src="Fast.api.cdnurl(ite.image)" fit="contain">
|
||||
<div slot="error" class="image-slot">
|
||||
<i class="el-icon-picture-outline"></i>
|
||||
</div>
|
||||
</el-image>
|
||||
</div>
|
||||
</el-popover>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else style="line-height: 36px;">全部商品</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="type_text" label="类型" width="180">
|
||||
<template slot-scope="scope">
|
||||
<div class="display-flex" style="align-items: center;">
|
||||
<span>{{scope.row.type_text}}</span>
|
||||
<el-tag size="mini" type="danger" v-if="(scope.row.rules && scope.row.rules.user_type=='new_user') || (scope.row.rule_arr && scope.row.rule_arr.user_type=='new_user')" style="margin-left: 5px;">新人专享</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="num" label="抢购名额" width="160">
|
||||
</el-table-column>
|
||||
<el-table-column prop="status_text" label="状态" width="160">
|
||||
</el-table-column>
|
||||
<el-table-column prop="starttime_text" label="开始时间" width="200">
|
||||
</el-table-column>
|
||||
<el-table-column prop="endtime_text" label="结束时间" width="200">
|
||||
</el-table-column>
|
||||
<el-table-column prop="createtime" label="创建时间" width="200">
|
||||
<template slot-scope="scope">
|
||||
<span>{{moment(scope.row.createtime*1000).format('YYYY-MM-DD HH:mm:ss')}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="richtext_id" label="活动说明" width="80">
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="140">
|
||||
<template slot-scope="scope">
|
||||
<span class="table-operation" @click="activityView(scope.row)">查看
|
||||
</span>
|
||||
<span v-if="scope.row.status=='nostart' || scope.row.status=='ing'" class="table-operation"
|
||||
@click="activityEdit(scope.row)">编辑</span>
|
||||
<span class="table-operation table-operation-delete" @click="activityDelete(scope.row)">删除</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="shopro-pagination-container">
|
||||
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
|
||||
:page-sizes="[10, 20, 30, 40]" :page-size="limit" layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="totalPage">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,25 @@
|
||||
<style>
|
||||
.fixed-table-toolbar .search{
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh')}
|
||||
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,20 @@
|
||||
<div class="panel panel-default panel-intro">
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh')}
|
||||
{if request()->get('multiple') == 'true'}
|
||||
<a class="btn btn-danger btn-choose-multi"><i class="fa fa-check"></i> {:__('Choose')}</a>
|
||||
{/if}
|
||||
</div>
|
||||
<table id="table" class="table table-bordered table-hover" width="100%">
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,94 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
|
||||
<style>
|
||||
#skuPrice {
|
||||
padding: 0 20px 60px;
|
||||
}
|
||||
.table-box {
|
||||
/* border: 1px solid #E6E6E6; */
|
||||
margin: 20px 0;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.table-box .table {
|
||||
table-layout: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.table-box .table td,
|
||||
.table-box .table th {
|
||||
white-space: nowrap;
|
||||
min-width: 80px;
|
||||
line-height: 32px;
|
||||
}
|
||||
.table-input{
|
||||
width: 100px;
|
||||
}
|
||||
.table-status {
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
}
|
||||
.table-status-down {
|
||||
color: #3498db;
|
||||
}
|
||||
.table-status-up {
|
||||
color: #ED3C30;
|
||||
}
|
||||
</style>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
|
||||
<div id="skuPrice" v-cloak>
|
||||
<div class="table-box">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th v-for="(item, i) in skuList" :key="i">
|
||||
{{item.name}}
|
||||
</th>
|
||||
<th width="80">库存</th>
|
||||
<th width="80">价格</th>
|
||||
<th width="80">活动销量</th>
|
||||
<th width="80">活动库存</th>
|
||||
<th width="80">活动价格</th>
|
||||
<th width="80">操作1</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item, i) in skuPrice" :key="i">
|
||||
<td v-for="(v, j) in item.goods_sku_text" :key="j">
|
||||
{{v}}
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input class="table-input" type="number" v-model="item.stock" disabled size="small"></el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input class="table-input" type="number" v-model="item.price" disabled size="small"></el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input class="table-input" type="number" v-model="item.sales" disabled size="small"></el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input v-positive-integer v-if="actSkuPrice[i].status=='up'" class="table-input" type="number"
|
||||
v-model="actSkuPrice[i].stock" :disabled="type=='view' || activity_status=='end'" size="small" @input="activityStock(i,'stock')">
|
||||
</el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input v-enter-number v-if="actSkuPrice[i].status=='up'" class="table-input" type="number"
|
||||
v-model="actSkuPrice[i].price" :disabled="type=='view' || activity_status=='ing' || activity_status=='end'" size="small"
|
||||
@input="activityStock(i,'price')">
|
||||
</el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<span v-if="type=='add' || (type=='edit' && activity_status=='nostart')" class="table-status" :class="actSkuPrice[i].status=='up'?'table-status-up':'table-status-down'" @click="changeStatus(i)">
|
||||
{{actSkuPrice[i].status=='up'?'取消':'参与'}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="shopro-submit-container">
|
||||
<el-button type="primary" @click="submitForm()">确定</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,94 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
|
||||
<style>
|
||||
#skuPrice {
|
||||
padding: 0 20px 60px;
|
||||
}
|
||||
.table-box {
|
||||
/* border: 1px solid #E6E6E6; */
|
||||
margin: 20px 0;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.table-box .table {
|
||||
table-layout: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.table-box .table td,
|
||||
.table-box .table th {
|
||||
white-space: nowrap;
|
||||
min-width: 80px;
|
||||
line-height: 32px;
|
||||
}
|
||||
.table-input{
|
||||
width: 100px;
|
||||
}
|
||||
.table-status {
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
}
|
||||
.table-status-down {
|
||||
color: #3498db;
|
||||
}
|
||||
.table-status-up {
|
||||
color: #ED3C30;
|
||||
}
|
||||
</style>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
|
||||
<div id="skuPrice" v-cloak>
|
||||
<div class="table-box">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th v-if="skuList.length" v-for="(item, i) in skuList" :key="i">
|
||||
{{item.name}}
|
||||
</th>
|
||||
<th width="80">库存</th>
|
||||
<th width="80">价格</th>
|
||||
<th width="80">活动销量</th>
|
||||
<th width="80">活动库存</th>
|
||||
<th width="80">活动价格</th>
|
||||
<th width="80">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item, i) in skuPrice" :key="i">
|
||||
<td v-if="skuList.length" v-for="(v, j) in item.goods_sku_text" :key="j">
|
||||
{{v}}
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input class="table-input" type="number" v-model="item.stock" disabled size="small"></el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input class="table-input" type="number" v-model="item.price" disabled size="small"></el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input class="table-input" type="number" v-model="item.sales" disabled size="small"></el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input v-positive-integer v-if="actSkuPrice[i].status=='up'" class="table-input" type="number"
|
||||
v-model="actSkuPrice[i].stock" :disabled="type=='view'" size="small" @input="activityStock(i,'stock')">
|
||||
</el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<el-input v-enter-number v-if="actSkuPrice[i].status=='up'" class="table-input" type="number"
|
||||
v-model="actSkuPrice[i].price" :disabled="type=='view'" size="small"
|
||||
@input="activityStock(i,'price')">
|
||||
</el-input>
|
||||
</td>
|
||||
<td width="80">
|
||||
<span class="table-status" :class="actSkuPrice[i].status=='up'?'table-status-up':'table-status-down'" @click="changeStatus(i)">
|
||||
{{actSkuPrice[i].status=='up'?'取消':'参与'}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="shopro-submit-container">
|
||||
<el-button type="primary" @click="submitForm()">确定</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,46 @@
|
||||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-activity_id" data-rule="required" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Sku_price_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-sku_price_id" data-rule="required" data-source="sku/price/index" class="form-control selectpage" name="row[sku_price_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-goods_id" data-rule="required" data-source="goods/index" class="form-control selectpage" name="row[goods_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Stock')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-stock" data-rule="required" class="form-control" name="row[stock]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Sales')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-sales" data-rule="required" class="form-control" name="row[sales]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Price')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-price" class="form-control" step="0.01" name="row[price]" type="number">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,46 @@
|
||||
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-activity_id" data-rule="required" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="{$row.activity_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Sku_price_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-sku_price_id" data-rule="required" data-source="sku/price/index" class="form-control selectpage" name="row[sku_price_id]" type="text" value="{$row.sku_price_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-goods_id" data-rule="required" data-source="goods/index" class="form-control selectpage" name="row[goods_id]" type="text" value="{$row.goods_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Stock')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-stock" data-rule="required" class="form-control" name="row[stock]" type="number" value="{$row.stock|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Sales')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-sales" data-rule="required" class="form-control" name="row[sales]" type="number" value="{$row.sales|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Price')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-price" class="form-control" step="0.01" name="row[price]" type="number" value="{$row.price|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,35 @@
|
||||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
|
||||
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('shopro/activity/activity_sku_price/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('shopro/activity/activity_sku_price/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
|
||||
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('shopro/activity/activity_sku_price/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
|
||||
<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('shopro/activity/activity_sku_price/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload"></i> {:__('Import')}</a>
|
||||
|
||||
<div class="dropdown btn-group {:$auth->check('shopro/activity/activity_sku_price/multi')?'':'hide'}">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('shopro/activity/activity_sku_price/recyclebin')?'':'hide'}" href="shopro/activity/activity_sku_price/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
|
||||
data-operate-edit="{:$auth->check('shopro/activity/activity_sku_price/edit')}"
|
||||
data-operate-del="{:$auth->check('shopro/activity/activity_sku_price/del')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,25 @@
|
||||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh')}
|
||||
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('shopro/activity/activity_sku_price/restore')?'':'hide'}" href="javascript:;" data-url="shopro/activity/activity_sku_price/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
|
||||
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('shopro/activity/activity_sku_price/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/activity/activity_sku_price/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
|
||||
<a class="btn btn-success btn-restoreall {:$auth->check('shopro/activity/activity_sku_price/restore')?'':'hide'}" href="javascript:;" data-url="shopro/activity/activity_sku_price/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
|
||||
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/activity/activity_sku_price/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/activity/activity_sku_price/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover"
|
||||
data-operate-restore="{:$auth->check('shopro/activity/activity_sku_price/restore')}"
|
||||
data-operate-destroy="{:$auth->check('shopro/activity/activity_sku_price/destroy')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,52 @@
|
||||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-goods_id" data-rule="required" data-source="goods/index" class="form-control selectpage" name="row[goods_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-activity_id" data-rule="required" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Num')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-num" data-rule="required" class="form-control" name="row[num]" type="number">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Current_num')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-current_num" data-rule="required" class="form-control" name="row[current_num]" type="number">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="invalid"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,206 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<style>
|
||||
[v-cloak] {
|
||||
display: none
|
||||
}
|
||||
|
||||
#groupon-detail {
|
||||
font-size: 14px;
|
||||
font-family: Source Han Sans SC;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.groupon-good {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.good-item {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.good-item-img {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.ellipsis-item {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.good-num {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.team-img {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 50%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.refresh-btn {
|
||||
font-size: 16px;
|
||||
color: #999;
|
||||
position: absolute;
|
||||
left: 86px;
|
||||
top: 22px;
|
||||
}
|
||||
|
||||
.btn-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.teamed-btn {
|
||||
width: 110px;
|
||||
height: 30px;
|
||||
border: 1px solid #7943D2;
|
||||
border-radius: 4px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
color: #7943D2;
|
||||
margin-right: 30px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dismiss-btn {
|
||||
width: 100px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
border: 1px solid #F57272;
|
||||
border-radius: 4px;
|
||||
color: #F57272;
|
||||
cursor: pointer;
|
||||
}
|
||||
.fictitious-define{
|
||||
color: #7943D2;
|
||||
cursor: pointer;
|
||||
}
|
||||
.fictitious-cancel{
|
||||
color: #F57272;
|
||||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.el-table_2_column_5,
|
||||
.el-table_1_column_1,
|
||||
.el-table_1_column_5 {
|
||||
border-left: 1px solid #eee;
|
||||
}
|
||||
|
||||
.el-table_2_column_9,
|
||||
.el-table_1_column_2,
|
||||
.el-table_1_column_3,
|
||||
.el-table_1_column_4 {
|
||||
border-right: 1px solid #eee;
|
||||
}
|
||||
|
||||
.el-table .el-table_1_column_3.is-leaf,.el-table_1_column_2.is-leaf {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.cell {
|
||||
text-align: center;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.el-table_1_column_1 .cell {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.el-table th {
|
||||
border-top: 1px solid #eee;
|
||||
background: #F9F9F9;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.el-table th.is-leaf {
|
||||
font-size: 12px;
|
||||
}
|
||||
.el-table th.is-leaf .cell{
|
||||
font-weight: 500;
|
||||
}
|
||||
.flex-1{
|
||||
flex: 1;
|
||||
}
|
||||
</style>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/clipboard.min.js"></script>
|
||||
<div id="groupon-detail" v-cloak>
|
||||
<div class="groupon-good">
|
||||
<el-table :data="grouponGoodsData" style="width: 100%">
|
||||
<el-table-column label="拼团商品">
|
||||
<template slot-scope="scope">
|
||||
<div class="good-item" v-if="scope.row.goods_title">
|
||||
<img class="good-item-img" :src="Fast.api.cdnurl(scope.row.goods_image)">
|
||||
<div class="flex-1">
|
||||
<div class="ellipsis-item">{{scope.row.goods_title}}</div>
|
||||
<div class="good-num">数量:{{scope.row.current_num}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>未找到商品或该商品已删除</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createtime" label="开团时间" width="160">
|
||||
<template slot-scope="scope">
|
||||
<span>{{moment(scope.row.createtime*1000).format("YYYY-MM-DD HH:mm:ss")}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="num" label="成团人数" width="88">
|
||||
</el-table-column>
|
||||
<el-table-column prop="status_text" label="状态" width="86">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="groupon-team">
|
||||
<el-table :data="grouponTeamList" style="width: 100%">
|
||||
<el-table-column prop="is_leader" label="身份" width="100">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.is_leader">团长</span>
|
||||
<span v-if="!scope.row.is_leader">团员</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="avatar" label="头像" width="110">
|
||||
<template slot-scope="scope">
|
||||
<img class="team-img" v-if="scope.row.user_avatar" :src="Fast.api.cdnurl(scope.row.user_avatar)">
|
||||
<i v-if="scope.row.is_define" class="el-icon-refresh refresh-btn"
|
||||
@click="refreshTeamer(scope.$index)"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="user_nickname" label="昵称" width="218">
|
||||
</el-table-column>
|
||||
<el-table-column prop="createtime" label="参团时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{moment(scope.row.createtime*1000).format("YYYY-MM-DD HH:mm:ss")}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.is_define" class="fictitious-define"
|
||||
@click="defineTeamer(scope.$index,scope.row)">确定</span>
|
||||
<span v-if="scope.row.is_define" class="fictitious-cancel"
|
||||
@click="cancelTeamer(scope.$index)">取消</span>
|
||||
<span v-if="!scope.row.is_define && scope.row.is_fictitious">虚拟</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="btn-box" v-if="(grouponGoodsData[0]?grouponGoodsData[0].num:null) > is_define_grouponTeamListLeng && (grouponGoodsData[0]?grouponGoodsData[0].status:null)=='ing'">
|
||||
<div class="teamed-btn" @click="refreshTeamer(null)">添加虚拟人数</div>
|
||||
<div class="dismiss-btn" @click="dismissTeam">解散&拼团</div>
|
||||
</div>
|
||||
<!-- <div class="btn-box">
|
||||
<div class="teamed-btn" @click="refreshTeamer(null)">添加虚拟人数</div>
|
||||
<div class="dismiss-btn" @click="dismissTeam">解散&拼团</div>
|
||||
</div> -->
|
||||
</div>
|
||||
@@ -0,0 +1,52 @@
|
||||
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-goods_id" data-rule="required" data-source="goods/index" class="form-control selectpage" name="row[goods_id]" type="text" value="{$row.goods_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-activity_id" data-rule="required" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="{$row.activity_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Num')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-num" data-rule="required" class="form-control" name="row[num]" type="number" value="{$row.num|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Current_num')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-current_num" data-rule="required" class="form-control" name="row[current_num]" type="number" value="{$row.current_num|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,464 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<style>
|
||||
#groupon-index {
|
||||
background: #fff;
|
||||
padding: 0 20px 30px;
|
||||
font-size: 14px;
|
||||
font-family: Source Han Sans SC;
|
||||
font-weight: 500;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
label {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.display-flex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.cursor-pointer {
|
||||
cursor: pointer;
|
||||
color: #7536d0;
|
||||
}
|
||||
|
||||
.groupon-title {
|
||||
height: 50px;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.groupon-titles {
|
||||
font-weight: 600;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.groupon-search {
|
||||
width: 236px;
|
||||
}
|
||||
|
||||
.select-con {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.select-item {
|
||||
margin-right: 14px;
|
||||
}
|
||||
|
||||
.el-input {
|
||||
width: 236px;
|
||||
}
|
||||
|
||||
.el-select .el-input__inner {
|
||||
width: 152px;
|
||||
}
|
||||
|
||||
.el-radio-button__orig-radio:checked+.el-radio-button__inner {
|
||||
background-color: #7536d0;
|
||||
border-color: #7536d0;
|
||||
-webkit-box-shadow: -1px 0 0 0 #7536d0;
|
||||
box-shadow: -1px 0 0 0 #7536d0;
|
||||
}
|
||||
|
||||
.el-radio-button__inner:hover {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* table */
|
||||
|
||||
.el-table,
|
||||
.el-table thead {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.el-table,
|
||||
.el-table thead .cell {
|
||||
font-weight: 500;
|
||||
|
||||
}
|
||||
|
||||
.el-table th {
|
||||
background: #F9F9F9;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.el-table th {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.el-table_1_column_8.is-leaf,
|
||||
.el-table_1_column_8,
|
||||
.el-table_2_column_12.is-leaf,
|
||||
.el-table_2_column_12,
|
||||
.el-table_3_column_17.is-leaf,
|
||||
.el-table_3_column_17 {
|
||||
border-right: 1px solid #EBEEF5 !important;
|
||||
}
|
||||
|
||||
.cell {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.el-select .el-input {
|
||||
width: 152px;
|
||||
}
|
||||
|
||||
.team-img {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-right: 14px;
|
||||
}
|
||||
|
||||
.goods-title {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 294px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.teamer-avatar {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 50%;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.teamer-avatar-num {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
background: #A17BDF;
|
||||
border-radius: 50%;
|
||||
font-size: 14px;
|
||||
line-height: 34px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-pager li.active,
|
||||
.el-pager li:hover {
|
||||
color: #7536d0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#groupon-detail {
|
||||
font-size: 14px;
|
||||
font-family: Source Han Sans SC;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.groupon-good {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.good-item {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.good-item-img {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.goods-title-ellipsis {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 320px;
|
||||
}
|
||||
|
||||
.good-num {
|
||||
color: #999;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.team-img {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 50%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.refresh-btn {
|
||||
font-size: 14px;
|
||||
color: #999;
|
||||
position: absolute;
|
||||
left: 86px;
|
||||
top: 22px;
|
||||
}
|
||||
|
||||
.btn-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.teamed-btn {
|
||||
width: 110px;
|
||||
height: 30px;
|
||||
border: 1px solid #7943D2;
|
||||
border-radius: 4px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
color: #7943D2;
|
||||
margin-right: 30px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dismiss-btn {
|
||||
width: 100px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
border: 1px solid #F57272;
|
||||
border-radius: 4px;
|
||||
color: #F57272;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.fictitious-define {
|
||||
color: #7943D2;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.fictitious-cancel {
|
||||
color: #F57272;
|
||||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.el-table th {
|
||||
background: #F9F9F9;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.dialogDetail .el-table td {
|
||||
border-right: none
|
||||
}
|
||||
|
||||
.dialogDetail .el-dialog {
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
/* el-dialog */
|
||||
|
||||
.el-radio-button__inner {
|
||||
font-size: 12px;
|
||||
padding: 9px 20px;
|
||||
;
|
||||
}
|
||||
|
||||
.el-input__inner {
|
||||
font-size: 12px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
.el-input__icon {
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
.margin-right-5 {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.el-dialog__title {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.el-dialog .el-input__inner {
|
||||
height: 34px;
|
||||
line-height: 34px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.el-form-item__label,
|
||||
.el-radio__label,
|
||||
.el-form-item__content,
|
||||
.el-select-dropdown__item,
|
||||
.el-table,
|
||||
.el-dialog__body {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.el-table__fixed-right::before,
|
||||
.el-table__fixed::before {
|
||||
height: 0 !important;
|
||||
}
|
||||
|
||||
.page-container {
|
||||
justify-content: flex-end;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
|
||||
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
|
||||
<div id="groupon-index" v-cloak>
|
||||
<div class="groupon-title display-flex">
|
||||
<div class="groupon-titles">拼团列表</div>
|
||||
<div class="groupon-search">
|
||||
<el-input placeholder="请输入关键字" suffix-icon="el-icon-search" v-model="searchKey"
|
||||
@keyup.enter.native="callSearch(event)">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="groupon-con">
|
||||
<div class="select-con">
|
||||
<div class="display-flex">
|
||||
<el-select class="select-item" v-model="grouponName" placeholder="请选择" @change="selectChange">
|
||||
<el-option v-for="item in grouponOptions" :key="item.value" :label="item.label" :value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-radio-group v-model="statusType">
|
||||
<el-radio-button label="all">全部</el-radio-button>
|
||||
<el-radio-button label="ing">拼团中</el-radio-button>
|
||||
<el-radio-button label="finish">已成团</el-radio-button>
|
||||
<el-radio-button label="invalid">解散&退款</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<el-table :data="grouponData" border style="width: 100%" ref="grouponData">
|
||||
<el-table-column prop="id" label="ID" width="80">
|
||||
</el-table-column>
|
||||
<el-table-column label="拼团商品信息" width="400">
|
||||
<template slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<img class="team-img" :src="Fast.api.cdnurl(scope.row.goods_image)">
|
||||
<div class="goods-title">{{scope.row.goods_title}}</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createtime" label="开团时间" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{moment(scope.row.createtime*1000).format("YYYY-MM-DD HH:mm:ss")}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="user_nickname" label="团长" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.user_nickname}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="user_avatar" label="参团人" width="420">
|
||||
<template slot-scope="scope">
|
||||
<div class="display-flex" style="justify-content: center;">
|
||||
<img v-for="i in scope.row.arr" class="teamer-avatar" :src="Fast.api.cdnurl(i.user_avatar)">
|
||||
<!-- <div v-if="scope.row.arr" class="teamer-avatar-num">10</div> -->
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="countDown" label="组团有效时间" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.status=='ing'" style="color: #FF4732;">{{scope.row.countDown}}</span>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status_text" label="拼团状态" width="115">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="操作" min-width="100" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<span class="cursor-pointer" @click="goDetail(scope.row.id,scope.row)">查看详情</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-container display-flex">
|
||||
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
|
||||
:page-sizes="[10, 20, 30, 40]" :page-size="10" layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="totalPage">
|
||||
</el-pagination>
|
||||
</div>
|
||||
<div class="dialogDetail">
|
||||
<el-dialog title="拼团详情" :visible.sync="dialogTeamDetail" width="800" :before-close="handleTeamDetailClose">
|
||||
<div>
|
||||
<div class="groupon-good">
|
||||
<el-table :data="grouponGoodsData" style="width: 100%" border>
|
||||
<el-table-column label="拼团商品">
|
||||
<template slot-scope="scope">
|
||||
<div class="good-item">
|
||||
<img class="good-item-img" :src="Fast.api.cdnurl(scope.row.goods_image)">
|
||||
<div>
|
||||
<div class="goods-title-ellipsis">{{scope.row.goods_title}}</div>
|
||||
<div class="good-num">数量:{{scope.row.current_num}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createtime" label="开团时间" width="160">
|
||||
<template slot-scope="scope">
|
||||
<span>{{moment(scope.row.createtime*1000).format("YYYY-MM-DD HH:mm:ss")}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="num" label="成团人数" width="88">
|
||||
</el-table-column>
|
||||
<el-table-column prop="status_text" label="状态" width="86">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="groupon-team">
|
||||
<el-table :data="grouponTeamList" style="width: 100%" border>
|
||||
<el-table-column prop="is_leader" label="身份" width="100">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.is_leader">团长</span>
|
||||
<span v-if="!scope.row.is_leader">团员</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="avatar" label="头像" width="110">
|
||||
<template slot-scope="scope">
|
||||
<img class="team-img" v-if="scope.row.user_avatar"
|
||||
:src="Fast.api.cdnurl(scope.row.user_avatar)">
|
||||
<i v-if="scope.row.is_define" class="el-icon-refresh refresh-btn"
|
||||
@click="refreshTeamer(scope.$index)"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="user_nickname" label="昵称" width="218">
|
||||
</el-table-column>
|
||||
<el-table-column prop="createtime" label="参团时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{moment(scope.row.createtime*1000).format("YYYY-MM-DD HH:mm:ss")}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.is_define" class="fictitious-define"
|
||||
@click="defineTeamer(scope.$index,scope.row)">确定</span>
|
||||
<span v-if="scope.row.is_define" class="fictitious-cancel"
|
||||
@click="cancelTeamer(scope.$index)">取消</span>
|
||||
<span v-if="!scope.row.is_define && scope.row.is_fictitious">虚拟</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="btn-box"
|
||||
v-if="(grouponGoodsData[0]?grouponGoodsData[0].num:null) > is_define_grouponTeamListLeng && (grouponGoodsData[0]?grouponGoodsData[0].status:null)=='ing'">
|
||||
<div class="teamed-btn" @click="refreshTeamer(null)">添加虚拟人数</div>
|
||||
<div class="dismiss-btn" @click="dismissTeam">解散&拼团</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
|
||||
</span> -->
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,169 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/element-ui-2.15.14/css/index.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/css/vvv.css">
|
||||
<style>
|
||||
.el-form-item__label {
|
||||
width: 120px !important;
|
||||
}
|
||||
|
||||
.el-tag + .el-tag {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.button-new-tag {
|
||||
margin-left: 10px;
|
||||
height: 32px;
|
||||
line-height: 30px;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.input-new-tag {
|
||||
width: 90px;
|
||||
margin-left: 10px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.el-form-item__error {
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.search-select .el-input--suffix .el-input__inner {
|
||||
width: 130px;
|
||||
}
|
||||
|
||||
.level-bg {
|
||||
color: #fff;
|
||||
padding: 10px;
|
||||
width: 100px;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
border-radius: 4px;
|
||||
}
|
||||
</style>
|
||||
<div id="vue" v-cloak>
|
||||
<div class="screen-container">
|
||||
<div class="screen-container-show">
|
||||
<el-button style="margin-top: 14px;" size="small" @click="refreshPage" icon="el-icon-refresh" circle
|
||||
type="primary"></el-button>
|
||||
<div class="screen-container-left display-flex">
|
||||
<div class="datetime">
|
||||
<el-date-picker
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
v-model="search.startTime"
|
||||
type="datetime"
|
||||
placeholder="选择起始时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="datetime">
|
||||
<el-date-picker
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
v-model="search.endTime"
|
||||
type="datetime"
|
||||
placeholder="选择结束时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-select screen-container-right display-flex keyword">
|
||||
<el-select v-model="search.aid" @clear="handleClearSelect('aid')" clearable placeholder="活动列表">
|
||||
<el-option
|
||||
v-for="item in activityList"
|
||||
:key="item.id"
|
||||
:label="item.title"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="search-select screen-container-right display-flex keyword">
|
||||
<el-select v-model="search.isRob" @clear="handleClearSelect('isRob')" clearable placeholder="抢购资格">
|
||||
<el-option
|
||||
v-for="item in isRobOpt"
|
||||
:key="item.id"
|
||||
:label="item.value"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="search-select screen-container-right display-flex keyword v-key">
|
||||
<el-input @clear="handleClearSearchInp" clearable v-model="search.keyword" placeholder="请输入您要搜索的内容">
|
||||
<el-select v-model="search.type" slot="prepend" placeholder="请选择">
|
||||
<el-option v-for="(item, index) in searchOpt" :label="item.value"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-button slot="append" @click="searchData" icon="el-icon-search"></el-button>
|
||||
</el-input>
|
||||
</div>
|
||||
<!-- <div class="search-select screen-container-right display-flex keyword">-->
|
||||
<!-- <el-button @click="openAddDialog('add', '')" size="small" type="primary" plain icon="el-icon-plus">添加-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button @click="del" size="small" type="danger" plain icon="el-icon-delete">删除-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="vue-table background-white color-666">
|
||||
<el-table :data="tableData" border highlight-current-row v-loading="listLoading"
|
||||
@sort-change="sortChange" :element-loading-text="loadingText"
|
||||
@selection-change="handleSelectionChange" style="width: 100%">
|
||||
<el-table-column prop="is_ok" width="170" label="抢购名额" show-overflow-tooltip
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
<el-switch
|
||||
@change="handleRobStatus(scope.row)"
|
||||
active-text="获得"
|
||||
inactive-text="未获得"
|
||||
:inactive-value="2"
|
||||
:active-value="1"
|
||||
v-model="scope.row.is_rob"
|
||||
>
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="title" width="200" label="活动标题" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column prop="goods_title" width="220" label="商品标题" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column prop="image" width="80" label="商品图" show-overflow-tooltip
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
<img :src="scope.row.image" style="border-radius: 10px;width: 48px;height: 48px;padding: 5px">
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="activity_price" width="100" label="抢购价格" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column prop="nickname" width="150" label="微信昵称" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column prop="avatar" label="头像" show-overflow-tooltip
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
<img :src="scope.row.avatar" style="border-radius: 10px;width: 48px;height: 48px;padding: 5px">
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="mobile" width="150" label="手机号码" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column prop="create_time" width="160" :formatter="dateFormat" label="预约时间" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
</el-table>
|
||||
<div class="layout-pagination">
|
||||
<el-pagination
|
||||
background
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
:current-page="currentPage"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="totalCount">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="__CDN__/assets/element-ui-2.15.14/js/vue.js"></script>
|
||||
<script src="__CDN__/assets/element-ui-2.15.14/js/index.js"></script>
|
||||
<script src="__CDN__/assets/tool/libs/moment.js"></script>
|
||||
<script src="__CDN__/assets/js/jquery-2.1.1.min.js"></script>
|
||||
在新工单中引用
屏蔽一个用户