| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <template>
- <div class="goods-box" v-if="defaults.goodsList">
- <div class="wrapper">
- <draggable class="dragArea list-group" :list="defaults.goodsList.list" group="peoples">
- <div
- class="item"
- v-for="(goods, index) in defaults.goodsList.list"
- :key="index"
- v-if="defaults.goodsList.list.length"
- >
- <img :src="type == 1 ? goods.pic : goods.image" alt="" />
- <span class="iconfont icondel_1" @click.stop="bindDelete(index)"></span>
- </div>
- <div class="add-item item" @click="modals = true"><span class="iconfont iconaddto"></span></div>
- </draggable>
- </div>
- <Modal
- v-model="modals"
- :loading="loading"
- :title="titles"
- class="paymentFooter"
- :class="type ? '' : 'middleTop'"
- scrollable
- width="900"
- @on-cancel="cancel"
- @on-ok="ok"
- >
- <sort-list ref="goodslist" @getProductDiy="getProductDiy" v-if="modals && type == 1"></sort-list>
- <goods-list
- ref="goodslist"
- @getProductDiy="getProductDiy"
- :ischeckbox="true"
- :type="type"
- :is_new="is_new"
- :diy="true"
- v-if="modals && type != 1"
- ></goods-list>
- </Modal>
- </div>
- </template>
- <script>
- import vuedraggable from 'vuedraggable';
- import goodsList from '@/components/goodsList';
- import sortList from '@/components/sortList';
- export default {
- name: 'c_goods',
- props: {
- name: {
- type: String,
- },
- configData: {
- type: null,
- },
- configNum: {
- type: Number | String,
- default: 'default',
- },
- },
- components: {
- goodsList,
- sortList,
- draggable: vuedraggable,
- },
- watch: {
- configData: {
- handler(nVal, oVal) {
- this.defaults = nVal[this.configNum];
- let goodType = nVal[this.configNum].titleInfo ? nVal[this.configNum].titleInfo.type : 0;
- this.type = nVal[this.configNum].selectConfig.type
- ? nVal[this.configNum].selectConfig.type
- : goodType
- ? goodType
- : 0;
- switch (this.type) {
- case 0:
- this.titles = '商品列表';
- break;
- case 1:
- this.titles = '分类列表';
- break;
- case 8:
- this.titles = '砍价列表';
- break;
- case 2:
- this.titles = '秒杀列表';
- break;
- case 3:
- this.titles = '拼团列表';
- break;
- default:
- }
- },
- immediate: true,
- deep: true,
- },
- },
- data() {
- return {
- modals: false,
- goodsList: [],
- tempGoods: [],
- defaults: {},
- type: '',
- is_new: '',
- loading: true,
- titles: '',
- };
- },
- created() {
- this.defaults = this.configData[this.configNum];
- this.is_new = this.configData[this.configNum].is_new;
- },
- methods: {
- getProductDiy(data) {
- this.tempGoods = data;
- this.loading = false;
- },
- cancel() {
- this.tempGoods = [];
- },
- //对象数组去重;
- unique(arr) {
- const res = new Map();
- return arr.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1));
- },
- ok() {
- if (!this.tempGoods.length) {
- return this.$Message.warning('请先选择商品');
- }
- let list = this.defaults.goodsList.list;
- list.push.apply(list, this.tempGoods);
- // list.push(this.tempGoods);
- let picList = this.unique(list);
- this.defaults.goodsList.list = picList;
- // this.defaults.goodsList.list.push(this.tempGoods);
- },
- bindDelete(index) {
- this.defaults.goodsList.list.splice(index, 1);
- },
- },
- };
- </script>
- <style scoped lang="stylus">
- .middleTop /deep/.ivu-modal-wrap .ivu-modal{
- top:50%!important;
- margin-top:-350px;
- }
- .goods-box
- padding 16px 0
- margin-bottom 16px
- border-top 1px solid rgba(0,0,0,0.05)
- border-bottom 1px solid rgba(0,0,0,0.05)
- .wrapper,.list-group
- display flex
- flex-wrap wrap
- .add-item
- display flex
- align-items center
- justify-content center
- width 80px
- height 80px
- margin-bottom 10px
- background #F7F7F7
- .iconfont
- font-size 18px
- color #D8D8D8
- .item
- position relative
- width 80px
- height 80px
- margin-bottom 20px
- margin-right 12px
- &:nth-child(4n)
- margin-right 0
- img
- width 100%
- height 100%
- .icondel_1
- position absolute
- right -10px
- top -16px
- color #999999
- font-size 28px
- cursor pointer
- </style>
|