Commit 5425978f by caoyanzhi

update: 奥莱抵金券

parent 1af095c4
......@@ -32,6 +32,7 @@
"vue-qr": "^1.3.8",
"vue-router": "^3.3.4",
"vue-ueditor-wrap": "^1.3.4",
"vue-virtual-scroller": "^1.0.10",
"vue2-editor": "^2.5.0",
"vuedraggable": "^2.24.0",
"vuex": "^3.5.1"
......
......@@ -40946,7 +40946,7 @@
transform: translate3d(-50%, -50%, 0) scale(0.8); }
.el-color-picker__mask {
height: 38px;
width: 38px;
width: 60px;
border-radius: 4px;
position: absolute;
top: 1px;
......@@ -194,3 +194,5 @@ export const listConsumeCouponDetail = params => requests(PREFIX + '/list-consum
//是否是奥莱
export const isAolai = params => requests(PREFIX + '/is-aolai', params);
export const getStoreList = params => requests('/api-plug/get-store-widget-store', params);
......@@ -9,12 +9,14 @@ import sendPreview from './partials/send-preview';
import { formatDateTimeByType, deepClone, getTimesByReq } from '@/utils/index.js';
import xxSysp_mix from '@/mixins/selector.js'; // 商品选择器方法
import { listEntepriseWeimobShop, listEntepriseWeimobCoupon } from '@/service/api/commonApi.js';
import { getCardDetail, saveUpdateCard, copyCardDetailService, getCardManualSetting, getCategoryList, getPropertyList, getLatestReptileTime, getPropertyValueList, getWeimobCouponBindCount, getCardEffectiveMode } from '@/service/api/cardApi.js';
import { getCardDetail, saveUpdateCard, copyCardDetailService, getCardManualSetting, getCategoryList, getPropertyList, getLatestReptileTime, getPropertyValueList, getWeimobCouponBindCount, getCardEffectiveMode, getStoreList } from '@/service/api/cardApi.js';
import dmGoodsInput from '@/components/goods-input/index.vue';
import { getLinkResourceStatus } from '@/service/api/ecmApi.js';
import { RecycleScroller } from 'vue-virtual-scroller';
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css';
const initForm = {
auditingStatus: '',
cardType: 0, // 1.卡券类型: 抵金券: 0; 折扣券: 1; 兑换券: 2
cardType: 3, // 1.卡券类型: 抵金券: 0; 折扣券: 1; 兑换券: 2
cardName: '', // 2.卡券名称
cardApplyChannel: [], // 卡券适用渠道
channelTip: '',
......@@ -73,6 +75,9 @@ const initForm = {
wmCouponFlag: 0,
useCardCodePrefix: 0, //code类型随机生时 前缀复选框的值
cardCodePrefix: '', // code类型随机生成 前缀值
costValueProportionFlag: 1, // 卡券成本比例 1:开 0:关
costValueType: 1, // 成本费用 0:固定成本 1:门店成本
costValueProportion: undefined, // 成本比例
only: true // 默认优惠不共享 true
};
const sale_limit = { fee: 0, goods: '', flag: false, type: 0 }; //最低消费
......@@ -146,6 +151,9 @@ export default {
};
const that = this;
return {
originStoreList: [],
searchStore: '',
sortType: undefined,
isEffective: false,
requestProject: 'marketing',
gicCouponType: '', // gic定义的卡券类型(0:普通卡券, 1:e待洗, 2:好办卡券, 3:微盟外部券, 4:通用外部券
......@@ -178,6 +186,7 @@ export default {
// giveImage: { required: true, message: '请上传转赠封面', trigger: 'change' },
// bannerImage: { required: true, message: '请上传转赠页面首图', trigger: 'change' },
bannerJumpUrl: { validator: validBannerJumpUrl, trigger: 'change' },
costValueProportion: { required: true, message: '请输入成本比例', trigger: 'blur' },
cardCodePrefix: { validator: validCardCodePrefix, trigger: 'change' }
},
startDayOptions: [],
......@@ -371,6 +380,7 @@ export default {
}
},
components: {
RecycleScroller,
'dm-upload-img': dmUploadImg,
'dm-goods-input': dmGoodsInput,
'dm-send-preview': sendPreview,
......@@ -381,6 +391,9 @@ export default {
storeParams() {
return !this.isAdd ? { creatorId: this.creatorId } : {};
},
storeList() {
return this.originStoreList.filter(el => el.storeName.indexOf(this.searchStore) >= 0 || el.storeCode.indexOf(this.searchStore) >= 0);
},
cardValidity() {
if (this.form.cardApplyChannel.includes('WMmicroMall') && JSON.stringify(this.nowWmShopData) !== '{}') {
return true;
......@@ -401,7 +414,47 @@ export default {
return false;
}
},
// 固定成本
// 输入成本比例,显示成本金额 done
// 保存时设置成本金额字段
// 门店成本
// 根据门店选择器获取门店列表 done
// 输入成本比例,显示成本金额 done
// 搜索门店 done
// 排序 done
// 导入门店
// 导入门店后与现有门店列表数据合并
// 保存时设置成本金额字段
methods: {
onStoreChange(id) {
getStoreList({ key: id, pageSize: 99999, currentPage: 1 }).then(res => {
const { result, errorCode } = res || {};
if (errorCode == 0 && Array.isArray(result.result)) {
this.originStoreList = result.result.map(el => {
const { storeId, storeCode, storeName } = el;
return { storeId, storeCode, storeName, costValueProportion: undefined, costValue: 0 };
});
}
});
},
onSortStore(sortType) {
this.sortType = sortType;
if (sortType == 0) {
// 从小到大
this.originStoreList.sort((a, b) => {
const left = a.costValueProportion == undefined ? 0 : a.costValueProportion;
const right = b.costValueProportion == undefined ? 0 : b.costValueProportion;
return left - right;
});
} else if (sortType == 1) {
// 从大到小
this.originStoreList.sort((a, b) => {
const left = a.costValueProportion == undefined ? 0 : a.costValueProportion;
const right = b.costValueProportion == undefined ? 0 : b.costValueProportion;
return right - left;
});
}
},
getLinkResourceStatus(v) {
let result = JSON.parse(v);
const params = {
......
......@@ -78,7 +78,68 @@
<!-- 抵金券 -->
<el-form-item prop="cardDenomination" label="减免金额" v-if="form.cardType === 0 || form.cardType == 3"> <el-input-number controls-position="right" :disabled="isEdit || isInfo" v-model="form.cardDenomination" class="200" :precison="0" :min="0" :max="10000000"></el-input-number><span class="fz12 gray">请输入大于0的整数</span> </el-form-item>
<el-form-item v-if="form.cardType == 3" label="卡券成本比例"></el-form-item>
<el-form-item v-if="form.cardType == 3" label="卡券成本比例">
<el-switch v-model="form.costValueProportionFlag" :active-value="1" :inactive-value="0" :disabled="isEdit || isInfo"></el-switch>
<div class="cost-box" v-if="form.costValueProportionFlag == 1">
<div class="cost-box-type">
<span class="cost-box-type-label">成本费用</span>
<el-radio-group v-model="form.costValueType" :disabled="isEdit || isInfo">
<el-radio :label="0" border>固定成本</el-radio>
<el-radio :label="1" border>门店成本</el-radio>
</el-radio-group>
</div>
<div v-if="form.costValueType == 0" class="fixed-cost">
<el-form-item label="成本比例" prop="costValueProportion" label-width="175px"><el-input-number v-model="form.costValueProportion" :disabled="isEdit || isInfo" :min="0" :max="100" :precision="0" :controls="false" style="margin-right: 10px; width: 130px" placeholder="请输入成本比例"></el-input-number>%</el-form-item>
<el-form-item label="成本金额" label-width="100px"><el-input :value="typeof form.costValueProportion == 'number' && typeof form.cardDenomination == 'number' ? (form.costValueProportion * form.cardDenomination) / 100 : 0" disabled style="margin-right: 10px; width:120px"></el-input></el-form-item>
</div>
<div v-if="form.costValueType == 1" class="store-fixed-cost">
<div class="store-cost-title">
<div class="store-cost-title-text">设置门店成本</div>
<div class="store-cost-selector">
<span>适用门店:</span>
<el-tooltip placement="top" content="仅支持选择账号管理门店权限内门店">
<i class="iconfont icon-QuestionCircleOutlined" style="margin-right: 10px"></i>
</el-tooltip>
<dm-store-selector :options="[5]" scenes="" scenesVal="" @store-change="onStoreChange"></dm-store-selector>
</div>
</div>
<div class="store-cost-search">
<el-input v-model="searchStore" placeholder="请输入门店名称/code" prefix-icon="el-icon-search" clearable style="width: 260px"></el-input>
<el-button v-if="!isEdit && !isInfo" type="primary" style="border: none"><i class="iconfont icon-shangc"></i> 成本批量导入</el-button>
</div>
<div class="store-list">
<div class="store-row store-header">
<div class="store-cell store-header-cell" style="width: 197px">门店信息</div>
<div class="store-cell store-header-cell" style="width: 284px">
成本比例
<span class="sort-handle">
<i :class="['sort-icon ascending', { ascend: sortType == 0 }]" @click="onSortStore(0)"></i>
<i :class="['sort-icon descending', { descend: sortType == 1 }]" @click="onSortStore(1)"></i>
</span>
</div>
<div class="store-cell store-header-cell" style="width: 135px">
成本金额
<!-- <span class="sort-handle">
<i :class="['sort-icon ascending', { ascend: sortType == 0 }]" @click="onSortStore(0)"></i>
<i :class="['sort-icon descending', { descend: sortType == 1 }]" @click="onSortStore(1)"></i>
</span> -->
</div>
</div>
<recycle-scroller :items="storeList" key-field="storeId" :style="{ height: storeList.length > 6 ? '287px' : 'auto' }" :itemSize="48" v-slot="{ item }">
<div class="store-row">
<div class="store-cell" style="width: 197px">
<div class="store-name">{{ item.storeName }}</div>
<div class="store-code">code:{{ item.storeCode }}</div>
</div>
<div class="store-cell" style="width: 284px"><el-input-number v-model="item.costValueProportion" :disabled="isEdit || isInfo" :min="0" :max="100" :precision="0" :controls="false" style="margin-right: 10px; width: 130px" placeholder="请输入成本比例"></el-input-number>%</div>
<div class="store-cell" style="width: 135px">{{ typeof item.costValueProportion == 'number' && typeof form.cardDenomination == 'number' ? (item.costValueProportion * form.cardDenomination) / 100 : 0 }} 元</div>
</div>
</recycle-scroller>
<el-table v-if="!Array.isArray(storeList) || storeList.length == 0" :data="[]"></el-table>
</div>
</div>
</div>
</el-form-item>
<!-- 折扣券 -->
<el-form-item prop="cardDenomination" label="折扣额度" v-if="form.cardType === 1"> <el-input-number controls-position="right" :disabled="isEdit || isInfo" v-model="form.cardDenomination" class="200" :precision="1" :step="0.1" :max="9.9" :min="0"></el-input-number><span class="fz12 gray">请填写1-9.9之间的数字</span></el-form-item>
......@@ -431,6 +492,150 @@ export default cardForm;
display: none;
}
}
.cost-box {
margin-top: 10px;
width: 701px;
background: #f5f7fa;
.cost-box-type {
padding: 20px 16px;
border-bottom: 1px solid #ebecf0;
/deep/ .el-radio.is-bordered {
padding: 8px 20px 8px 10px;
margin-right: 20px;
background: #fff;
& + .el-radio.is-bordered {
margin-left: 0;
}
&:last-child {
margin-right: 0;
}
.el-radio__input {
height: 17px;
}
}
.cost-box-type-label {
margin-right: 25px;
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: 20px;
}
}
.fixed-cost {
display: flex;
justify-content: flex-start;
align-items: center;
padding: 26px 0 34px;
}
.store-fixed-cost {
padding: 17px 20px 20px 17px;
.store-cost-title {
display: flex;
justify-content: space-between;
align-items: center;
.store-cost-title-text {
font-size: 14px;
font-weight: 800;
color: #303133;
line-height: 20px;
}
.store-cost-selector {
display: flex;
justify-content: flex-start;
align-items: center;
/deep/ .dm-store-selector {
.el-select:first-child {
margin-right: 0 !important;
}
.dm-new-store__reference {
margin-left: 10px;
margin-right: -1px;
.dm-new-store__inputtag {
margin-top: -1px;
box-sizing: border-box;
}
}
}
}
}
.store-cost-search {
display: flex;
justify-content: space-between;
align-items: center;
margin: 20px 0;
}
}
.store-list {
border-bottom: 1px solid #e4e7ed;
.store-row {
display: flex;
justify-content: flex-start;
align-items: center;
border-bottom: 1px solid #e4e7ed;
.store-cell {
padding-top: 8px;
padding-bottom: 8px;
padding-left: 16px;
}
}
.store-header {
background: #ebecf0;
.store-header-cell {
padding-top: 7px;
padding-bottom: 7px;
font-size: 14px;
font-weight: 500;
color: #303133;
line-height: 22px;
.sort-handle {
display: inline-flex;
flex-direction: column;
align-items: center;
height: 34px;
width: 24px;
vertical-align: middle;
cursor: pointer;
overflow: initial;
position: relative;
.sort-icon {
width: 0;
height: 0;
border: 5px solid transparent;
position: absolute;
left: 7px;
&.ascending {
border-bottom-color: #c0c4cc;
top: 5px;
&.ascend {
border-bottom-color: #042f3f;
}
}
&.descending {
border-top-color: #c0c4cc;
bottom: 7px;
&.descend {
border-top-color: #042f3f;
}
}
}
}
}
}
.store-name {
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: normal;
}
.store-code {
margin-top: -3px;
font-size: 12px;
font-weight: 400;
color: #909399;
line-height: normal;
}
}
}
.link-status {
margin-left: 20px;
color: #f5222d;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment