|
@@ -1,123 +1,3 @@
|
|
|
-<template>
|
|
|
- <div class="product-select">
|
|
|
- <div class="left-part" v-loading="infiniteLoad">
|
|
|
- <el-tabs v-model="activeName">
|
|
|
- <el-tab-pane label="搜索" name="search">
|
|
|
- <div class="product-search">
|
|
|
- <vxe-input v-model="searchInp" @search-click="handleSearch" @keydown="handleKeydown" placeholder="请输入商品名称" type="search" class="search-input" />
|
|
|
- </div>
|
|
|
- <div class="padding-0-10">
|
|
|
- <div class="list-bar">
|
|
|
- <span class="padding-0-10">商品列表</span>
|
|
|
- <vxe-button class="custom-vxe-btn" type="text" content="添加" icon="vxe-icon-add" @click="handleSelectedItems" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <ul v-infinite-scroll="load" class="infinite-list" style="overflow: auto;">
|
|
|
- <div>
|
|
|
- <el-collapse v-model="activeNames" class="padding-0-10 border-none">
|
|
|
- <el-collapse-item v-for="(item, index) in data" :key="item.parentAsin" :name="String(index)">
|
|
|
- <template #title>
|
|
|
- <el-checkbox v-model="item.checked" @click.stop="" @change="checkAll(item, item.checked)" :disabled="item.allChildrenExist">
|
|
|
- {{ item.parentAsin }}
|
|
|
- </el-checkbox>
|
|
|
- <!-- <p style="margin-left: 10px">111---{{ item.allChildrenExist }}</p> -->
|
|
|
- <el-tag style="margin-left: 8px;" effect="plain" size="small" round
|
|
|
- >{{ item.num }}
|
|
|
- <span v-if="item.num == '1'">ASIN</span>
|
|
|
- <span v-else>ASINs</span>
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- <ul class="list-container">
|
|
|
- <li v-for="child in item.childAsin" :key="child.asin">
|
|
|
- <div class="list-content">
|
|
|
- <el-checkbox v-if="child.isExist == false" v-model="child.checked" @change="checkSingle(item)" />
|
|
|
-
|
|
|
- <img :src="child.Image" class="image-item" />
|
|
|
- <div>
|
|
|
- <el-tooltip effect="dark" :content="child.Title" placement="top-start">
|
|
|
- <span class="list-item-title">{{ child.Title }}</span>
|
|
|
- </el-tooltip>
|
|
|
- <div>
|
|
|
- <span class="item-font">${{ child.Price ? child.Price : '--' }}</span>
|
|
|
- | <span class="item-quantity">{{ child.Quantity ? '有库存' : '缺货' }}</span>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <span class="item-asin">ASIN:</span> {{ child.Asin }}
|
|
|
- <span v-if="child.isExist" class="exist-item">此商品已存在</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </el-collapse-item>
|
|
|
- </el-collapse>
|
|
|
- </div>
|
|
|
- </ul>
|
|
|
- </el-tab-pane>
|
|
|
- <el-tab-pane label="输入" name="input">
|
|
|
- <div class="textarea-part">
|
|
|
- <el-input
|
|
|
- disabled="true"
|
|
|
- v-model="textarea"
|
|
|
- style="width: 100%"
|
|
|
- :rows="15"
|
|
|
- type="textarea"
|
|
|
- placeholder="请输入ASIN, 多个ASIN使用逗号、空格或换行符分隔" />
|
|
|
- <div class="custom-button">
|
|
|
- <el-button :disabled="!textarea" type="primary" text bg>添加</el-button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </el-tab-pane>
|
|
|
- </el-tabs>
|
|
|
- </div>
|
|
|
- <div class="right-part">
|
|
|
- <div>
|
|
|
- <div class="right-top-part">
|
|
|
- <span>已添加: {{ addedItem }}</span>
|
|
|
- <span>
|
|
|
- <vxe-button
|
|
|
- v-if="hasSelectedItems"
|
|
|
- type="text"
|
|
|
- status="warning"
|
|
|
- content="删除选中项"
|
|
|
- icon="vxe-icon-delete"
|
|
|
- @click="removeSelectedItems"></vxe-button>
|
|
|
- <vxe-button type="text" status="danger" content="删除所有" icon="vxe-icon-delete" @click="removeAllItems"></vxe-button>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <el-scrollbar height="540px">
|
|
|
- <el-collapse v-model="activeNames" class="padding-0-10 border-none">
|
|
|
- <el-collapse-item v-for="(item, index) in selectedData" :key="item.parentAsin" :name="String(index)">
|
|
|
- <template #title>
|
|
|
- <el-checkbox v-model="item.checked" @click.stop="" @change="checkAll(item, item.checked)">{{ item.parentAsin }}</el-checkbox>
|
|
|
- <el-tag style="margin-left: 8px" effect="plain" size="small" round>{{ item.childAsin.length }}ASIN</el-tag>
|
|
|
- </template>
|
|
|
- <ul class="list-container">
|
|
|
- <li v-for="child in item.childAsin" :key="child.asin">
|
|
|
- <div class="list-content">
|
|
|
- <el-checkbox v-model="child.checked" @change="checkSingle(item)"></el-checkbox>
|
|
|
- <img :src="child.Image" class="image-item" />
|
|
|
- <div>
|
|
|
- <el-tooltip effect="dark" :content="child.Title" placement="top-start">
|
|
|
- <span class="list-item-title">{{ child.Title }}</span>
|
|
|
- </el-tooltip>
|
|
|
- <div>
|
|
|
- <span class="item-font">${{ child.Price ? child.Price : '--' }}</span>
|
|
|
- | <span class="item-quantity">{{ child.Quantity ? '有库存' : '缺货' }}</span>
|
|
|
- </div>
|
|
|
- <div><span class="item-asin">ASIN:</span> {{ child.Asin }}</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </el-collapse-item>
|
|
|
- </el-collapse>
|
|
|
- </el-scrollbar>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-
|
|
|
<script setup lang="ts">
|
|
|
import { computed, inject, onBeforeUnmount, onMounted, ref } from 'vue'
|
|
|
import { getAllProduct } from '/@/views/productCenter/productList/api'
|
|
@@ -143,7 +23,7 @@ async function handleSearch() {
|
|
|
profile_id: profile.value.profile_id,
|
|
|
asin: searchInp.value,
|
|
|
}
|
|
|
- try {
|
|
|
+ try {
|
|
|
const response = await getAllProduct(query)
|
|
|
data.value = response.data
|
|
|
} catch (error) {
|
|
@@ -372,6 +252,132 @@ onBeforeUnmount(() => {
|
|
|
})
|
|
|
</script>
|
|
|
|
|
|
+<template>
|
|
|
+ <div class="product-select">
|
|
|
+ <div class="left-part" v-loading="infiniteLoad">
|
|
|
+ <el-tabs v-model="activeName">
|
|
|
+ <el-tab-pane label="搜索" name="search">
|
|
|
+ <div class="product-search">
|
|
|
+ <vxe-input
|
|
|
+ v-model="searchInp"
|
|
|
+ @search-click="handleSearch"
|
|
|
+ @keydown="handleKeydown"
|
|
|
+ placeholder="请输入商品名称"
|
|
|
+ type="search"
|
|
|
+ class="search-input" />
|
|
|
+ </div>
|
|
|
+ <div class="padding-0-10">
|
|
|
+ <div class="list-bar">
|
|
|
+ <span class="padding-0-10">商品列表</span>
|
|
|
+ <vxe-button class="custom-vxe-btn" type="text" content="添加" icon="vxe-icon-add" @click="handleSelectedItems" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <ul v-infinite-scroll="load" class="infinite-list" style="overflow: auto">
|
|
|
+ <div>
|
|
|
+ <el-collapse v-model="activeNames" class="padding-0-10 border-none">
|
|
|
+ <el-collapse-item v-for="(item, index) in data" :key="item.parentAsin" :name="String(index)">
|
|
|
+ <template #title>
|
|
|
+ <el-checkbox v-model="item.checked" @click.stop="" @change="checkAll(item, item.checked)" :disabled="item.allChildrenExist">
|
|
|
+ {{ item.parentAsin }}
|
|
|
+ </el-checkbox>
|
|
|
+ <!-- <p style="margin-left: 10px">111---{{ item.allChildrenExist }}</p> -->
|
|
|
+ <el-tag style="margin-left: 8px" effect="plain" size="small" round
|
|
|
+ >{{ item.num }}
|
|
|
+ <span v-if="item.num == '1'">ASIN</span>
|
|
|
+ <span v-else>ASINs</span>
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ <ul class="list-container">
|
|
|
+ <li v-for="child in item.childAsin" :key="child.asin">
|
|
|
+ <div class="list-content">
|
|
|
+ <el-checkbox v-if="child.isExist == false" v-model="child.checked" @change="checkSingle(item)" />
|
|
|
+
|
|
|
+ <img :src="child.Image" class="image-item" />
|
|
|
+ <div>
|
|
|
+ <el-tooltip effect="dark" :content="child.Title" placement="top-start">
|
|
|
+ <span class="list-item-title">{{ child.Title }}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ <div>
|
|
|
+ <span class="item-font">${{ child.Price ? child.Price : '--' }}</span>
|
|
|
+ | <span class="item-quantity">{{ child.Quantity ? '有库存' : '缺货' }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="item-asin">ASIN:</span> {{ child.Asin }}
|
|
|
+ <span v-if="child.isExist" class="exist-item">此商品已存在</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </el-collapse-item>
|
|
|
+ </el-collapse>
|
|
|
+ </div>
|
|
|
+ </ul>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="输入" name="input">
|
|
|
+ <div class="textarea-part">
|
|
|
+ <el-input
|
|
|
+ disabled="true"
|
|
|
+ v-model="textarea"
|
|
|
+ style="width: 100%"
|
|
|
+ :rows="15"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请输入ASIN, 多个ASIN使用逗号、空格或换行符分隔" />
|
|
|
+ <div class="custom-button">
|
|
|
+ <el-button :disabled="!textarea" type="primary" text bg>添加</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ </div>
|
|
|
+ <div class="right-part">
|
|
|
+ <div>
|
|
|
+ <div class="right-top-part">
|
|
|
+ <span>已添加: {{ addedItem }}</span>
|
|
|
+ <span>
|
|
|
+ <vxe-button
|
|
|
+ v-if="hasSelectedItems"
|
|
|
+ type="text"
|
|
|
+ status="warning"
|
|
|
+ content="删除选中项"
|
|
|
+ icon="vxe-icon-delete"
|
|
|
+ @click="removeSelectedItems"></vxe-button>
|
|
|
+ <vxe-button type="text" status="danger" content="删除所有" icon="vxe-icon-delete" @click="removeAllItems"></vxe-button>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <el-scrollbar height="540px">
|
|
|
+ <el-collapse v-model="activeNames" class="padding-0-10 border-none">
|
|
|
+ <el-collapse-item v-for="(item, index) in selectedData" :key="item.parentAsin" :name="String(index)">
|
|
|
+ <template #title>
|
|
|
+ <el-checkbox v-model="item.checked" @click.stop="" @change="checkAll(item, item.checked)">{{ item.parentAsin }}</el-checkbox>
|
|
|
+ <el-tag style="margin-left: 8px" effect="plain" size="small" round>{{ item.childAsin.length }}ASIN</el-tag>
|
|
|
+ </template>
|
|
|
+ <ul class="list-container">
|
|
|
+ <li v-for="child in item.childAsin" :key="child.asin">
|
|
|
+ <div class="list-content">
|
|
|
+ <el-checkbox v-model="child.checked" @change="checkSingle(item)"></el-checkbox>
|
|
|
+ <img :src="child.Image" class="image-item" />
|
|
|
+ <div>
|
|
|
+ <el-tooltip effect="dark" :content="child.Title" placement="top-start">
|
|
|
+ <span class="list-item-title">{{ child.Title }}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ <div>
|
|
|
+ <span class="item-font">${{ child.Price ? child.Price : '--' }}</span>
|
|
|
+ | <span class="item-quantity">{{ child.Quantity ? '有库存' : '缺货' }}</span>
|
|
|
+ </div>
|
|
|
+ <div><span class="item-asin">ASIN:</span> {{ child.Asin }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </el-collapse-item>
|
|
|
+ </el-collapse>
|
|
|
+ </el-scrollbar>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
<style scoped>
|
|
|
.product-select {
|
|
|
display: flex;
|
|
@@ -494,7 +500,7 @@ onBeforeUnmount(() => {
|
|
|
.border-none {
|
|
|
border: none;
|
|
|
}
|
|
|
-:deep(.el-collapse-item:last-child .el-collapse-item__wrap ) {
|
|
|
+:deep(.el-collapse-item:last-child .el-collapse-item__wrap) {
|
|
|
border-bottom: none;
|
|
|
}
|
|
|
</style>
|