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'; ...@@ -7,6 +7,7 @@ import Upload from './component/Upload/index.vue';
import ColorSelector from './component/ColorSelector/index.vue'; import ColorSelector from './component/ColorSelector/index.vue';
import DiscountGoodsSelector from './component/DiscountGoodsSelector/index.vue'; import DiscountGoodsSelector from './component/DiscountGoodsSelector/index.vue';
import SnapUpActivitySelector from './component/SnapUpActivitySelector/index.vue'; import SnapUpActivitySelector from './component/SnapUpActivitySelector/index.vue';
import SeckillSelector from './component/SeckillSelector/index.vue';
import VerticalAdStyleSelector from './component/VerticalAdStyleSelector/index.vue'; import VerticalAdStyleSelector from './component/VerticalAdStyleSelector/index.vue';
import CategoryTypeSelector from './component/CategoryTypeSelector/index.vue'; import CategoryTypeSelector from './component/CategoryTypeSelector/index.vue';
import CategorySelector from './component/CategorySelector/index.vue'; import CategorySelector from './component/CategorySelector/index.vue';
...@@ -18,6 +19,7 @@ import DiscountGoodsSelectorV2 from './component/DiscountGoodsSelectorV2/index.v ...@@ -18,6 +19,7 @@ import DiscountGoodsSelectorV2 from './component/DiscountGoodsSelectorV2/index.v
import GoodsChannelTypeSelector from './component/GoodsChannelTypeSelector/index.vue'; import GoodsChannelTypeSelector from './component/GoodsChannelTypeSelector/index.vue';
import GoodsPromotionTypeSelector from './component/GoodsPromotionTypeSelector/index.vue'; import GoodsPromotionTypeSelector from './component/GoodsPromotionTypeSelector/index.vue';
import GoodsResourceSelector from './component/GoodsResourceSelector/index.vue'; import GoodsResourceSelector from './component/GoodsResourceSelector/index.vue';
import GoodsCubeSelector from './component/GoodsCubeSelector/index.vue';
import BaseSelect from './component/BaseSelect/index.vue'; import BaseSelect from './component/BaseSelect/index.vue';
import ComponentSelect from './component/ComponentSelect/index.vue'; import ComponentSelect from './component/ComponentSelect/index.vue';
import FormList from './component/FormList/index.vue'; import FormList from './component/FormList/index.vue';
...@@ -56,7 +58,9 @@ const allComponentsMap = getAllScheme(); ...@@ -56,7 +58,9 @@ const allComponentsMap = getAllScheme();
GoodsChannelTypeSelector, GoodsChannelTypeSelector,
GoodsPromotionTypeSelector, GoodsPromotionTypeSelector,
FontWeightSelector, FontWeightSelector,
GoodsResourceSelector GoodsResourceSelector,
GoodsCubeSelector,
SeckillSelector
}, name: 'DynamicForm' }) }, name: 'DynamicForm' })
export default class DynamicForm extends Mixins(ContextMenuMixin, DynamicFormMixin) { export default class DynamicForm extends Mixins(ContextMenuMixin, DynamicFormMixin) {
@State(state => state.editor.curEleIndex) curEleIndex; @State(state => state.editor.curEleIndex) curEleIndex;
......
...@@ -16,6 +16,9 @@ export default class GoodsTabsMixin extends Vue { ...@@ -16,6 +16,9 @@ export default class GoodsTabsMixin extends Vue {
get hasSnapUpCom() { get hasSnapUpCom() {
return this.pageData.elements.some(item => item.name === 'cs-snap-up'); 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() { get hasGoodsNavCom() {
return this.pageData.elements.some(item => item.name === 'cs-goods-tabs'); return this.pageData.elements.some(item => item.name === 'cs-goods-tabs');
} }
......
...@@ -273,6 +273,14 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin, ...@@ -273,6 +273,14 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
return; return;
} }
} }
if (el.data.name === 'cs-seckill') {
if (this.hasSeckillCom) {
this.$Notice.warning({
title: '秒杀组件目前只支持添加一个'
});
return;
}
}
// 添加多个goods-tabs会取消锚点滚动 // 添加多个goods-tabs会取消锚点滚动
if (el.data.name === 'cs-goods-tabs') { if (el.data.name === 'cs-goods-tabs') {
if (this.hasGoodsNavCom) { if (this.hasGoodsNavCom) {
......
...@@ -2176,9 +2176,9 @@ ...@@ -2176,9 +2176,9 @@
} }
}, },
"@qg/citrus-ui": { "@qg/citrus-ui": {
"version": "0.3.59", "version": "0.3.60",
"resolved": "http://npmprivate.quantgroups.com/@qg%2fcitrus-ui/-/citrus-ui-0.3.59.tgz", "resolved": "http://npmprivate.quantgroups.com/@qg%2fcitrus-ui/-/citrus-ui-0.3.60.tgz",
"integrity": "sha512-+uMf1BPpyxgjKSkb2S2WShtU8+thLLfi3V7Zo/H5F/XWzNCKTCwTCb/Z1UmRrtHlITVEbr0tYYQ822On5eQX3g==", "integrity": "sha512-IJW+ZLh2GW17LLTw0FxMSlIcy5mtkOjonS6bVSWMGFXLrzvvIxB2emQQYNF9N30FSJcFoTl/CB+5mUeN44Wjvg==",
"requires": { "requires": {
"@better-scroll/core": "^2.1.1", "@better-scroll/core": "^2.1.1",
"@qg/cherry-ui": "^2.23.9", "@qg/cherry-ui": "^2.23.9",
...@@ -2188,6 +2188,7 @@ ...@@ -2188,6 +2188,7 @@
"js-cookie": "^2.2.1", "js-cookie": "^2.2.1",
"nanoid": "^3.3.4", "nanoid": "^3.3.4",
"sa-sdk-javascript": "^1.16.1", "sa-sdk-javascript": "^1.16.1",
"smoothscroll-polyfill": "^0.4.4",
"swiper": "^4.5.1", "swiper": "^4.5.1",
"vuex": "^3.6.0", "vuex": "^3.6.0",
"weixin-js-sdk": "^1.6.0" "weixin-js-sdk": "^1.6.0"
...@@ -7147,42 +7148,6 @@ ...@@ -7147,42 +7148,6 @@
"resolved": "http://npmprivate.quantgroups.com/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "http://npmprivate.quantgroups.com/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" "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": { "crc": {
"version": "3.8.0", "version": "3.8.0",
"resolved": "http://npmprivate.quantgroups.com/crc/-/crc-3.8.0.tgz", "resolved": "http://npmprivate.quantgroups.com/crc/-/crc-3.8.0.tgz",
...@@ -7506,6 +7471,42 @@ ...@@ -7506,6 +7471,42 @@
"cssnano-preset-default": "^4.0.8", "cssnano-preset-default": "^4.0.8",
"is-resolvable": "^1.0.0", "is-resolvable": "^1.0.0",
"postcss": "^7.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": { "cssnano-preset-default": {
...@@ -20658,6 +20659,42 @@ ...@@ -20658,6 +20659,42 @@
"requires": { "requires": {
"cosmiconfig": "^5.0.0", "cosmiconfig": "^5.0.0",
"import-cwd": "^2.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": { "postcss-loader": {
...@@ -22823,6 +22860,11 @@ ...@@ -22823,6 +22860,11 @@
"resolved": "http://npmprivate.quantgroups.com/smart-buffer/-/smart-buffer-4.1.0.tgz", "resolved": "http://npmprivate.quantgroups.com/smart-buffer/-/smart-buffer-4.1.0.tgz",
"integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" "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": { "snake-case": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "http://npmprivate.quantgroups.com/snake-case/-/snake-case-2.1.0.tgz", "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