Commit 4bc1a7e5 authored by 徐光星's avatar 徐光星

Merge branch 'feat/1212' into 'master'

双12秒杀上线

See merge request !97
parents 9b4975b4 4fb00351
<template>
<div class="VerticalAdGoodsSelectorContainer">
<Input
v-model="data.ids"
type="textarea"
:autosize="{minRows: 3,maxRows: 10}"
placeholder="请输入skuNo,每个skuNo使用英文逗号隔开"
@on-blur="changeIds"
/>
<div class="goodsItem" v-for="(item, index) in data.data" :key="index">
<div class="title">
商品{{index + 1}}
</div>
<Form @submit.native.prevent ref="formCustom" :model="item" :label-width="90" label-position="left">
<FormItem label="sku_no" prop="skuNo">
<Input v-model="item.skuNo" disabled />
</FormItem>
<FormItem label="商品名称" prop="skuName">
<Input v-model="item.skuName" />
</FormItem>
<FormItem label="商品图片" prop="skuUrl">
<Upload v-model="item.skuUrl"></Upload>
</FormItem>
<FormItem label="商品横幅文案" prop="subTitle">
<Input v-model="item.subTitle" />
</FormItem>
</Form>
<Button type="error" long @click="del(index, item.skuNo)" class="deleteGood">删除</Button>
</div>
</div>
</template>
<script>
import operationApi from '@api/operation.api';
import Upload from '@editor/component/DynamicForm/component/Upload/index.vue';
export default {
props: {
value: {
type: Object,
default: () => {}
}
},
watch: {
value: {
handler(val) {
this.data = val;
}
},
data: {
deep: true,
handler(val) {
this.$emit('input', val);
}
}
},
components: {
Upload
},
data() {
return {
data: {}
}
},
created() {
this.data = JSON.parse(JSON.stringify(this.value));
},
methods: {
init() {
const data = this.value;
if (!data.ids) data.ids = '';
if (!data.data) data.data = [];
this.data = data;
},
async getGoods(params) {
let prevDataArr = this.data && this.data.data ? JSON.parse(JSON.stringify(this.data.data)) : [];
let skuToInfoMaps = {};
for (let i = 0; i < prevDataArr.length; i++) {
skuToInfoMaps[prevDataArr[i].skuNo] = prevDataArr[i];
}
const res = await operationApi.getGoods(params);
try {
let goodsList = res.skus || [];
let arr = [];
if (goodsList.length) {
for (let i = 0; i < goodsList.length; i++) {
let item = {};
item.skuName = goodsList[i].skuName;
item.salePrice = goodsList[i].salePrice;
item.skuNo = goodsList[i].skuNo;
item.skuUrl = goodsList[i].skuUrl;
item.status = goodsList[i].status;
if (skuToInfoMaps[goodsList[i].skuNo]) {
item = Object.assign({}, skuToInfoMaps[goodsList[i].skuNo])
};
arr.push(item);
}
this.$set(this.data, 'data', arr);
} else {
this.$set(this.data, 'data', []);
}
} catch (err) {
console.log(err);
this.$set(this.data, 'data', []);
}
// setTimeout(() => {
// this.$emit('adjust')
// }, 1000)
},
changeIds() {
const ids = this.data && this.data.ids ? this.data.ids.trim() : '';
this.data.ids = ids;
const skus = ids ? ids.split(',') : [];
if (skus.length) {
if (skus.length > 30) {
this.$toast('最多填入30个商品');
return;
}
this.getGoods({
skus: Array.from(new Set(skus))
});
} else {
this.$set(this.data, 'data', []);
}
},
del(index, skuNo) {
this.data.data.splice(index, 1)
const ids = this.data.ids ? this.data.ids.split(',') : [];
const idx = ids.indexOf(skuNo);
if (idx > -1 && ids.length) ids.splice(idx, 1);
this.data.ids = ids.join();
if (this.data.data.length == 0) this.data.ids = '';
}
}
}
</script>
<style scoped lang="less">
.goodsItem{
border: 1px solid #dddee1;
border-radius: 4px;
margin-top: 10px;
padding: 5px;
.title{
width: 100%;
height: 30px;
font-weight: bold;
}
}
</style>
<template>
<div class="seckillActivityContainer">
<Select v-model="activityInfoId" filterable>
<Option v-for="item in list" :value="item.id" :key="item.id">{{ `id ${item.id} - ${item.title}` }}</Option>
</Select>
<!-- <Button type="primary" @click="save">保存</Button> -->
</div>
</template>
<script>
import operationApi from '@api/operation.api';
export default {
props: {
value: {
type: String,
default: ''
}
},
watch: {
activityInfoId(val) {
this.$emit('input', val);
}
},
components: {
},
data() {
return {
list: [],
activityInfoId: ''
}
},
created() {
this.activityInfoId = this.value;
this.getActivityList();
console.log(this.value)
},
methods: {
async getActivityList() {
const res = await operationApi.getActivityList({
templateType: 1,
crowdType: [1],
userType:[]
});
for (let i = 0; i < res.length; i++) {
res[i].id = res[i].id.toString();
}
this.list = res;
}
}
}
</script>
<style scoped lang="less">
</style>
......@@ -7,6 +7,7 @@ import Upload from './component/Upload/index.vue';
import ColorSelector from './component/ColorSelector/index.vue';
import DiscountGoodsSelector from './component/DiscountGoodsSelector/index.vue';
import SnapUpActivitySelector from './component/SnapUpActivitySelector/index.vue';
import SeckillSelector from './component/SeckillSelector/index.vue';
import VerticalAdStyleSelector from './component/VerticalAdStyleSelector/index.vue';
import CategoryTypeSelector from './component/CategoryTypeSelector/index.vue';
import CategorySelector from './component/CategorySelector/index.vue';
......@@ -18,6 +19,7 @@ import DiscountGoodsSelectorV2 from './component/DiscountGoodsSelectorV2/index.v
import GoodsChannelTypeSelector from './component/GoodsChannelTypeSelector/index.vue';
import GoodsPromotionTypeSelector from './component/GoodsPromotionTypeSelector/index.vue';
import GoodsResourceSelector from './component/GoodsResourceSelector/index.vue';
import GoodsCubeSelector from './component/GoodsCubeSelector/index.vue';
import BaseSelect from './component/BaseSelect/index.vue';
import ComponentSelect from './component/ComponentSelect/index.vue';
import FormList from './component/FormList/index.vue';
......@@ -56,7 +58,9 @@ const allComponentsMap = getAllScheme();
GoodsChannelTypeSelector,
GoodsPromotionTypeSelector,
FontWeightSelector,
GoodsResourceSelector
GoodsResourceSelector,
GoodsCubeSelector,
SeckillSelector
}, name: 'DynamicForm' })
export default class DynamicForm extends Mixins(ContextMenuMixin, DynamicFormMixin) {
@State(state => state.editor.curEleIndex) curEleIndex;
......
......@@ -16,6 +16,9 @@ export default class GoodsTabsMixin extends Vue {
get hasSnapUpCom() {
return this.pageData.elements.some(item => item.name === 'cs-snap-up');
}
get hasSeckillCom() {
return this.pageData.elements.some(item => item.name === 'cs-seckill');
}
get hasGoodsNavCom() {
return this.pageData.elements.some(item => item.name === 'cs-goods-tabs');
}
......
......@@ -273,6 +273,14 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
return;
}
}
if (el.data.name === 'cs-seckill') {
if (this.hasSeckillCom) {
this.$Notice.warning({
title: '秒杀组件目前只支持添加一个'
});
return;
}
}
// 添加多个goods-tabs会取消锚点滚动
if (el.data.name === 'cs-goods-tabs') {
if (this.hasGoodsNavCom) {
......
......@@ -2176,9 +2176,9 @@
}
},
"@qg/citrus-ui": {
"version": "0.3.59",
"resolved": "http://npmprivate.quantgroups.com/@qg%2fcitrus-ui/-/citrus-ui-0.3.59.tgz",
"integrity": "sha512-+uMf1BPpyxgjKSkb2S2WShtU8+thLLfi3V7Zo/H5F/XWzNCKTCwTCb/Z1UmRrtHlITVEbr0tYYQ822On5eQX3g==",
"version": "0.3.60",
"resolved": "http://npmprivate.quantgroups.com/@qg%2fcitrus-ui/-/citrus-ui-0.3.60.tgz",
"integrity": "sha512-IJW+ZLh2GW17LLTw0FxMSlIcy5mtkOjonS6bVSWMGFXLrzvvIxB2emQQYNF9N30FSJcFoTl/CB+5mUeN44Wjvg==",
"requires": {
"@better-scroll/core": "^2.1.1",
"@qg/cherry-ui": "^2.23.9",
......@@ -2188,6 +2188,7 @@
"js-cookie": "^2.2.1",
"nanoid": "^3.3.4",
"sa-sdk-javascript": "^1.16.1",
"smoothscroll-polyfill": "^0.4.4",
"swiper": "^4.5.1",
"vuex": "^3.6.0",
"weixin-js-sdk": "^1.6.0"
......@@ -7147,42 +7148,6 @@
"resolved": "http://npmprivate.quantgroups.com/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cosmiconfig": {
"version": "5.2.1",
"resolved": "http://npmprivate.quantgroups.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
"integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
"requires": {
"import-fresh": "^2.0.0",
"is-directory": "^0.3.1",
"js-yaml": "^3.13.1",
"parse-json": "^4.0.0"
},
"dependencies": {
"import-fresh": {
"version": "2.0.0",
"resolved": "http://npmprivate.quantgroups.com/import-fresh/-/import-fresh-2.0.0.tgz",
"integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
"requires": {
"caller-path": "^2.0.0",
"resolve-from": "^3.0.0"
}
},
"parse-json": {
"version": "4.0.0",
"resolved": "http://npmprivate.quantgroups.com/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"requires": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
}
},
"resolve-from": {
"version": "3.0.0",
"resolved": "http://npmprivate.quantgroups.com/resolve-from/-/resolve-from-3.0.0.tgz",
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
}
}
},
"crc": {
"version": "3.8.0",
"resolved": "http://npmprivate.quantgroups.com/crc/-/crc-3.8.0.tgz",
......@@ -7506,6 +7471,42 @@
"cssnano-preset-default": "^4.0.8",
"is-resolvable": "^1.0.0",
"postcss": "^7.0.0"
},
"dependencies": {
"cosmiconfig": {
"version": "5.2.1",
"resolved": "http://npmprivate.quantgroups.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
"integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
"requires": {
"import-fresh": "^2.0.0",
"is-directory": "^0.3.1",
"js-yaml": "^3.13.1",
"parse-json": "^4.0.0"
}
},
"import-fresh": {
"version": "2.0.0",
"resolved": "http://npmprivate.quantgroups.com/import-fresh/-/import-fresh-2.0.0.tgz",
"integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
"requires": {
"caller-path": "^2.0.0",
"resolve-from": "^3.0.0"
}
},
"parse-json": {
"version": "4.0.0",
"resolved": "http://npmprivate.quantgroups.com/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"requires": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
}
},
"resolve-from": {
"version": "3.0.0",
"resolved": "http://npmprivate.quantgroups.com/resolve-from/-/resolve-from-3.0.0.tgz",
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
}
}
},
"cssnano-preset-default": {
......@@ -20658,6 +20659,42 @@
"requires": {
"cosmiconfig": "^5.0.0",
"import-cwd": "^2.0.0"
},
"dependencies": {
"cosmiconfig": {
"version": "5.2.1",
"resolved": "http://npmprivate.quantgroups.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
"integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
"requires": {
"import-fresh": "^2.0.0",
"is-directory": "^0.3.1",
"js-yaml": "^3.13.1",
"parse-json": "^4.0.0"
}
},
"import-fresh": {
"version": "2.0.0",
"resolved": "http://npmprivate.quantgroups.com/import-fresh/-/import-fresh-2.0.0.tgz",
"integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
"requires": {
"caller-path": "^2.0.0",
"resolve-from": "^3.0.0"
}
},
"parse-json": {
"version": "4.0.0",
"resolved": "http://npmprivate.quantgroups.com/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"requires": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
}
},
"resolve-from": {
"version": "3.0.0",
"resolved": "http://npmprivate.quantgroups.com/resolve-from/-/resolve-from-3.0.0.tgz",
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
}
}
},
"postcss-loader": {
......@@ -22823,6 +22860,11 @@
"resolved": "http://npmprivate.quantgroups.com/smart-buffer/-/smart-buffer-4.1.0.tgz",
"integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw=="
},
"smoothscroll-polyfill": {
"version": "0.4.4",
"resolved": "http://npmprivate.quantgroups.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz",
"integrity": "sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg=="
},
"snake-case": {
"version": "2.1.0",
"resolved": "http://npmprivate.quantgroups.com/snake-case/-/snake-case-2.1.0.tgz",
......
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