| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- @extends('layouts.base')
- @section('content')
- @section('title', trans('公众号导入商品'))
- <style>
- body{background-color: #F2F2F2;}
- .transition{transition: all .5s;}
- .modular{padding: 10px;border-radius: 10px;background-color: #fff;margin: 10px 0;}
- .tips{margin-top: 10px;line-height: 30px;height: 230px;min-width: 920px;overflow-y: hidden;}
- .close-tips{height: 48px;}
- .isShow{height: 30px;overflow-y: hidden;cursor:pointer}
- .put-away{transform: translateY(-30px);}
- .open{transform: translateY(0);}
- .major-tips{color: #F25353;}
- .tips-title{display: flex;align-items: center;width: 100%;}
- .tips-title .el-icon-arrow-down{transform: rotate(-180deg);margin: 0 2px;cursor:pointer}
- .tips .arrow-down{transform: rotate(0deg);}
- .el-collapse{padding: 10px;border-radius: 10px;}
- .search-box{display: flex;flex-wrap: wrap;}
- .search-box>div{max-width: 240px;margin: 10px 10px 0 0;}
- .list-title{display: flex;}
- .list-title .icon-box{display: flex;flex-wrap: wrap;width: 14px;}
- .list-title .icon-box i{font-size: 14px;}
- .list-title .el-icon-caret-bottom{margin-top: -12px;}
- .list{display: flex;grid-gap: 10px;text-align: justify;justify-items: center;flex-wrap: wrap;}
- .list-item{width: 220px;height: 330px;border: 1px solid #ccc;}
- .list-item:hover{border-color: #F25353;}
- .img-box,.list-item img{width: 100%;height: 230px;position: relative;}
- .checkbox{position: absolute;left: 4px;top: -8px;opacity: 0;}
- .isImport{position: absolute;width: 100%;height: 30px;line-height: 30px;color: #fff;background-color: #F25353;text-align: center;opacity: 0;bottom: 0;}
- .list-item:hover .isImport,.list-item:hover .checkbox{opacity: 1;}
- .product-title{text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;margin: 6px;line-height: 20px;height: 40px;text-indent: 2rem;word-wrap:keep-all;}
- .price-box{width: 100%;height: calc(100% - 52px - 230px);display: flex;justify-content: space-around;align-items: center;text-align: center;line-height: 20px;}
- .foort{position: fixed;width: calc(100vw - 295px);height: 80px;background-color: #fff;bottom: 0;border-radius: 10px 10px 0 0;box-shadow: 0px -1px 10px rgb(0 0 0 / 10%);padding: 10px;}
- .foort-top,.foort-buttom{display: flex;align-items: center;}
- .--mb--rich-text{flex: 1;color: #F25353;}
- .foort-buttom>div{margin-right: 10px;}
- </style>
- <div class="all">
- <div id="app">
- <div class="tips modular transition" :class="{'close-tips':!isShow}">
- <div class="tips-title">
- <span style="flex: 1;">功能介绍</span>
- <span class="major-tips isShow" @click="setIsShow">
- <!-- [[isShow?"收起":"展开"]] -->
- <div class="put-away transition" :class="{'open':!isShow}">
- <div>展开</div>
- <div>收起</div>
- </div>
- </span>
- <span class="el-icon-arrow-down major-tips transition" :class="{'arrow-down':!isShow}" @click="setIsShow"></span>
- </div>
- <div>1. 选择公众号快速导入商品</div>
- <div>2. <span class="major-tips">导入公众号后点击导入后请不要关闭页面,或者重新刷新页面,这样会导致程序崩溃,造成不可预计的错误</span></div>
- <div>3. 导入会把导入公众号的商品信息:商品基本信息,分类,品牌,视频,属性,规格等导入当前公众号。<span class="major-tips">(先导入分类/品牌可增加导入的成功率)</span> </div>
- <div>
- <span>4. 如果数据你的商品描述中添加了大量的文字样式等,导入时需要更改mysql配置,步骤如下:</span>
- <div style="text-indent: 2rem;">1. 找到服务器my.conf文件,针对宝塔用户</div>
- <div style="text-indent: 2rem;">2. 查找max_allowed_packet,把max_allowed_packet值改为500M,值根据情况来定</div>
- </div>
- </div>
- <div class="modular">
- 选择公众号:
- <el-select v-model="search.uniacid" placeholder="请选择" size="small" @change="changeuniacid">
- <el-option v-for="(item,i) in PublicNumber" :key="i" :label="item.name" :value="item.uniacid"></el-option>
- </el-select>
- <div class="search-box">
- <el-select v-model="search.category.parentid" placeholder="请选择一级分类" size="small" @change="changeCategory(search.category.parentid,'category','category1')" clearable>
- <el-option v-for="(item,i) in category" :key="i" :label="item.name" :value="item.id"></el-option>
- </el-select>
- <el-select v-model="search.category.childid" placeholder="请选择二级分类" size="small" @change="changeCategory(search.category.childid,'category1','category2')" clearable>
- <el-option v-for="(item,i) in category1" :key="i" :label="item.name" :value="item.id"></el-option>
- </el-select>
- <el-select v-model="search.category.thirdid" placeholder="请选择三级分类" size="small" v-if="cat_level == 3">
- <el-option v-for="(item,i) in category2" :key="i" :label="item.name" :value="item.id"></el-option>
- </el-select>
- <div style="display: flex;align-items: center;max-width:400px;">
- <div style="margin-right:4px;">价格区间</div>
- <el-input v-model="search.min_price" placeholder="商品最低价" size="small" clearable style="flex: 1;"></el-input>
- <div style="margin:0 2px;">至</div>
- <el-input v-model="search.max_price" placeholder="商品最高价" size="small" clearable style="flex: 1;"></el-input>
- </div>
- <el-select v-model="search.is_presence" placeholder="是否已导入" size="small" clearable>
- <el-option label="已导入" value="1"></el-option>
- <el-option label="未导入" value="0"></el-option>
- </el-select>
- <el-select v-model="search.brand_id" placeholder="请选择品牌名称" size="small" clearable>
- <el-option v-for="(item,i) in brandList" :key="i" :label="item.name" :value="item.id"></el-option>
- </el-select>
- <!-- <el-input v-model="form.keyword" placeholder="请输入商品ID或关键字" size="small"></el-input>
- <el-input v-model="form.brank" placeholder="请输入品牌名称" size="small"></el-input> -->
- <div style="display: flex;max-width: 370px;min-width: 370px;align-items: center;">
- <div style="margin-right:8px;">商品类型</div>
- <el-checkbox-group v-model="search.product_attr" style="margin-top:6px;">
- <el-checkbox label="is_new">新品</el-checkbox>
- <el-checkbox label="is_hot">热卖</el-checkbox>
- <el-checkbox label="is_recommand">推荐</el-checkbox>
- <el-checkbox label="is_discount">促销</el-checkbox>
- </el-checkbox-group>
- </div>
- <div>
- <el-button size="small" style="width: 80px;" @click="initFrom">重置</el-button>
- <el-button size="small" type="primary" style="width: 80px;" @click="searchList">搜索</el-button>
- </div>
- </div>
- </div>
- <div class="modular">
- <div class="list-title">
- <el-checkbox v-model="change" @change="changeAll"></el-checkbox>
- <span class="" style="margin: 0 10px 0 4px;" @click="changeAll(!change)">全选</span>
- <span @click="setreal_sales">销量</span>
- <div class="icon-box" @click="setreal_sales">
- <i class="el-icon-caret-top transition" :class="{'major-tips':search.real_sales == '0'}"></i>
- <i class="el-icon-caret-bottom transition" :class="{'major-tips':search.real_sales == '1'}"></i>
- </div>
- </div>
- <div class="list">
- <div class="list-item transition" v-for="(item,i) in listData">
- <div class="img-box">
- <img :src="item.thumb" alt="">
- <div class="isImport transition" v-if="item.is_presence == 1">已导入</div>
- <el-checkbox class="checkbox transition" v-model="item.change" v-else></el-checkbox>
- </div>
- <div class="product-title">[[item.title]]</div>
- <div class="price-box">
- <div>
- <div>现价</div>
- <div class="major-tips">¥[[item.price]]</div>
- </div>
- <div>
- <div>成本</div>
- <div class="major-tips">¥[[item.cost_price]]</div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div style="height: 100px;"></div>
- <div class="foort" style="height: 120px">
- <div class="foort-top" style="margin-bottom: 20px">
- <div class="--mb--rich-text">如不选择导入分类则自动匹配或创建分类!</div>
- <el-pagination @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-size="per_page" v-if="total > 0" layout="total, prev, pager, next, jumper" :total="total" background>
- </el-pagination>
- </div>
- <div class="foort-buttom">
- 选择导入的分类:
- <el-select v-model="importForm.parentid" placeholder="请选择一级分类" size="small" @change="changeCategory(importForm.parentid,'importcategory','importcategory1')" clearable>
- <el-option v-for="(item,i) in importcategory" :key="i" :label="item.name" :value="item.id"></el-option>
- </el-select>
- <el-select v-model="importForm.childid" placeholder="请选择二级分类" size="small" @change="changeCategory(importForm.childid,'importcategory1','importcategory2')" clearable>
- <el-option v-for="(item,i) in importcategory1" :key="i" :label="item.name" :value="item.id"></el-option>
- </el-select>
- <el-select v-model="importForm.thirdid" placeholder="请选择三级分类" size="small" clearable v-if="import_cat_level == 3">
- <el-option v-for="(item,i) in importcategory2" :key="i" :label="item.name" :value="item.id"></el-option>
- </el-select>
- <div style="flex: 1;">
- <el-button size="small" type="primary" @click="importGoods">导入商品</el-button>
- <el-button size="small" type="primary" @click="importAllGoods">导入全部筛选商品</el-button>
- </div>
- </div>
- </div>
- </div>
- </div>
- <script>
- let vm = new Vue({
- el:"#app",
- delimiters: ['[[', ']]'],
- data(){
- return{
- search:{
- uniacid:"",
- category:{
- parentid:"",
- childid:"",
- thirdid:"",
- },
- real_sales:"0",
- brand_id:"",
- is_presence:"",
- max_price:"",
- min_price:"",
- product_attr:[]
- },
- category:[],
- category1:[],
- category2:[],
- importcategory:[],
- importcategory1:[],
- importcategory2:[],
- importForm:{
- parentid:"",
- childid:"",
- thirdid:""
- },
- isShow:true,
- form:{},
- currentPage:1,
- total:0,
- listData:[],
- PublicNumber:[],//公众号列表
- value: '',
- isChange:false,
- change:false,
- brandList:[],
- per_page:20,
- cat_level:"2",
- import_cat_level:"2",
- }
- },
- created(){
- this.initFrom();
- this.getPublicNumber();
- },
- methods:{
- changeuniacid(){
- this.getBrand();
- this.getCategory();
- this.getImportCategory();
- setTimeout(this.getList,0);
- },
- changeAll(change){
- this.change = change;
- this.listData.forEach(item=>{
- item.change = change;
- })
- },
- changeCategory(value,key,ckildKey){
- for (let i = 0; i < this[key].length; i++) {
- let item = this[key][i];
- if (item.id == value) {
- this[ckildKey] = item.childrens;
- return false;
- }
- }
- },
- setIsShow(){
- this.isShow = !this.isShow;
- },
- initFrom(){
- this.search = {
- category:{
- parentid:"",
- childid:"",
- thirdid:""
- },
- brand_id:"",
- is_presence:"",
- max_price:"",
- min_price:"",
- product_attr:[],
- real_sales:"0"
- }
- },
- loading(text){
- return this.$loading({
- lock: true,
- text,
- spinner: 'el-icon-loading',
- background: 'rgba(0, 0, 0, 0.7)'
- });
- },
- getBrand(){
- this.$http.post("{!! yzWebFullUrl('plugin.goods-assistant.admin.ImportUniacid.getBrand') !!}",{uniacids:this.search.uniacid}).then(({data:{result,msg,data}})=>{
- if (result == 1) this.brandList = data || [];
- })
- },
- getPublicNumber(){
- let loading = this.loading("加载公众号中...");
- this.$http.post("{!! yzWebFullUrl('plugin.goods-assistant.admin.ImportUniacid.getPublicNumber') !!}").then(({data:{result,data,msg}})=>{
- loading.close();
- if(result == 1){
- if(!data || data.length<=0){
- this.$message.error("公众号列表为空");
- this.PublicNumber = [];
- return false;
- }
- this.PublicNumber = data;
- this.search.uniacid = data[0].uniacid;
- this.getBrand();
- this.getCategory();
- this.getImportCategory();
- setTimeout(this.getList,0);
- }else this.$message.error(msg);
- })
- },
- getjson(){
- //后端需要为空或者不选择的不需要传key过去
- let {search} = this;
- let json = {};
- for (let key in search) {
- let item = search[key];
- if(key == "category"){
- for (const key1 in item) {
- let items = item[key1];
- if(items !=""){
- if(!json.category) json.category = {};
- json.category[key1] = items;
- }
- }
- }else if(key == "product_attr"){
- if(item.length>0) json.product_attr = item;
- }else{
- if(item != "") json[key] = item;
- }
- }
- return json;
- },
- getList(){
- let loading = this.loading("加载数据中...");
- let json = this.getjson();
- this.$http.post("{!! yzWebFullUrl('plugin.goods-assistant.admin.ImportUniacid.getGoodsData') !!}",{search:json,page:this.currentPage},"加载数据中...").then(({data:{result,data,msg}})=>{
- loading.close();
- if(result == 1){
- this.listData = data.data;
- this.total = data.total;
- this.per_page = data.per_page;
- }else this.$message.error(msg);
- })
- },
- getCategory(){
- this.$http.post("{!! yzWebFullUrl('plugin.goods-assistant.admin.ImportUniacid.getCategory') !!}",{uniacids:this.search.uniacid}).then(({data:{result,data,msg}})=>{
- if(result == 1){
- this.import_cat_level = data.cat_level;
- this.importcategory = data.category;
- }
- // this.category = data.category || [];
- })
- },
- getImportCategory(){
- this.$http.post("{!! yzWebFullUrl('plugin.goods-assistant.admin.ImportUniacid.getImportCategory') !!}",{uniacids:this.search.uniacid}).then(({data:{result,data,msg}})=>{
- if(result == 1){
- this.cat_level = data.cat_level;
- this.category = data.category || [];
- }
- //this.category = data.category || [];
- console.log(data);
- })
- },
- importGoods(){
- let goods_ids = this.listData.map(item=>{
- if(item.change) return item.id;
- })
- if(!goods_ids || goods_ids.length<=0) return this.$message.error("请选择导入商品");
- let loading = this.loading("正在导入中...");
- this.$http.post("{!! yzWebFullUrl('plugin.goods-assistant.admin.ImportUniacid.isImport') !!}",{uniacids:this.search.uniacid,goods_ids,import_category:this.importForm}).then(({data:{result,msg}})=>{
- loading.close();
- this.$message[result==1?"success":"error"](msg);
- if(result==1) {
- this.change = false;
- setTimeout(this.getList,500);
- }
- })
- },
- importAllGoods(){
- let loading = this.loading("正在导入中...");
- let json = this.getjson();
- json.page = this.currentPage;
- let import_category = false;
- for (let key in this.importForm) {
- if(this.importForm[key]!==""){
- if(!import_category)import_category = {};
- import_category[key] = this.importForm[key];
- }
- }
- this.$http.post("{!! yzWebFullUrl('plugin.goods-assistant.admin.ImportUniacid.screenImport') !!}",{search:json,import_category}).then(({data:{result,msg}})=>{
- loading.close();
- this.$message[result==1?"success":"error"](msg);
- if(result==1) {
- this.change = false;
- setTimeout(this.getList,500);
- }
- })
- },
- searchList(){
- this.currentPage = 1;
- this.getList();
- },
- handleCurrentChange(){
- this.getList();
- },
- setreal_sales(){
- this.search.real_sales = this.search.real_sales == 1?"0":"1";
- this.getList();
- }
- },
- watch:{
- "search.category.parentid"(value){
- if(value === "") this.$set(this.search.category,"childid","");
- },
- "search.category.childid"(value){
- if(value === "") this.$set(this.search.category,"thirdid","");
- },
- "importForm.parentid"(value){
- if(value === "") this.$set(this.importForm,"childid","");
- },
- "importForm.childid"(value){
- if(value === "") this.$set(this.importForm,"thirdid","");
- }
- }
- })
- </script>
- @endsection('content')
|