vue2搭建的商品后台管理项目(2)

三级联动

静态组件:(因为多个功能需要用到,所以需要注册为全局组件)
在这里插入图片描述
在这里插入图片描述
需要配置接口获取一级id,二级id,三级id:

//一级分类请求接口
export const reqcategory1Id = () => request({ url: '/admin/product/getCategory1', method: 'get' })


//二级分类请求接口

export const reqcategory2Id = (category1Id) => request({ url: `/admin/product/getCategory2/${category1Id}`, method: 'get' })


//三级分类请求接口

export const reqcategory3Id = (category2Id) => request({ url: `/admin/product/getCategory3/${category2Id}`, method: 'get' })

平台属性业务

静态组件:

        <el-table :data="attrlist" border stripe>
          <el-table-column
            type="index"
            label="序号"
            width="80px"
            align="center"
          >
          </el-table-column>
          <el-table-column prop="attrName" label="属性名称" width="150px">
          </el-table-column>
          <el-table-column prop="prop" label="属性值列表" width="width">
            <template slot-scope="{ row }">
              <el-tag
                v-for="tag in row.attrValueList"
                :key="tag.id"
                style="margin: 0px 10px"
              >
                {{ tag.valueName }}
              </el-tag>
            </template>
          </el-table-column>
          <el-table-column prop="prop" label="操作" width="150px">
            <template slot-scope="{ row }">
              <el-button
                type="warning"
                size="mini"
                icon="el-icon-edit"
                @click="editattrinfovalue(row)"
              ></el-button>
              <el-button
                type="danger"
                size="mini"
                icon="el-icon-delete"
                @click="deleteattrinfo(row)"
              ></el-button>
            </template>
          </el-table-column>
        </el-table>

配置接口动态展示:


//获取商品属性接口
export const reqcategoryattr = (category1Id, category2Id, category3Id) => request({ url: `/admin/product/attrInfoList/${category1Id}/${category2Id}/${category3Id}`, method: 'get' })

效果图:
在这里插入图片描述

添加属性与修改属性

静态属性

 <div v-show="falg">
        <el-form
          ref="form"
          label-width="80px"
          :inline="true"
          size="normal"
          :model="attrinfo"
        >
          <el-form-item label="属性名">
            <el-input
              placeholder="请输入属性名"
              v-model="attrinfo.attrName"
            ></el-input>
          </el-form-item>
        </el-form>
        <el-button
          type="primary"
          size="default"
          icon="el-icon-plus"
          @click="addattrinfo"
          :disabled="!attrinfo.attrName"
          >添加属性值</el-button
        >
        <el-button size="default" @click="falg = !falg"> 取消</el-button>
        <el-table
          :data="attrinfo.attrValueList"
          border
          style="margin: 20px 0px"
          script
        >
          <el-table-column
            type="index"
            label="序号"
            width="80px"
            align="center"
          >
          </el-table-column>
          <el-table-column porp="porp" label="属性值名称" width="width">
            <template slot-scope="{ row }">
              <el-input
                v-model="row.valueName"
                placeholder="请输入属性值名"
                size="mini"
                v-show="!row.value"
                ref="info"
                clearable
                @blur="showtab(row)"
              ></el-input>
              <span
                v-show="row.value"
                @click="showtab(row)"
                style="width: 100%"
                >{{ row.valueName }}</span
              >
            </template>
          </el-table-column>
          <el-table-column porp="porp" label="操作" width="width">
            <template slot-scope="{ $index }">
              <el-button
                type="danger"
                size="default"
                icon="el-icon-delete"
                @click="deleteattrvalueinfo($index)"
              ></el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-button type="primary" size="default" @click="saveattrinfo"
          >保存</el-button
        >
        <el-button size="default" @click="falg = !falg">取消</el-button>
      </div>

接口文件:


//添加属性值接口

export const reqattrinfo = (data) => request({ url: '/admin/product/saveAttrInfo', method: 'post', data })

注意点:

  1. 控制属性值查看与编辑模式的功能,需要在每条属性值上加入一个属性flag来控制每个属性值的查看与编辑
//添加属性值input
    addattrinfo() {
      const { attrValueList } = this.attrinfo;
      const obj = {
        attrId: undefined,
        valueName: "",
        value: false,
      };
      attrValueList.push(obj);
      //自动聚焦功能的实现
      this.$nextTick(() => {
        this.$refs.info.focus();
      });
    },
  1. 不能加空值属性值,所以在发送保存请求时需要整理数据
  //保存属性值
    async saveattrinfo() {
      this.falg = !this.falg;
      const { attrinfo } = this;
      attrinfo.attrValueList = attrinfo.attrValueList.filter((item) => {
        if (item.valueName.trim() !== "") {
          return item;
        }
      });
      console.log(attrinfo.attrValueList);
      let result = await this.$API.attr.reqattrinfo(attrinfo);
      if (result.code === 200) {
        this.$message(attrinfo.id ? "修改成功" : "添加成功");
        this.getattrlist();
      } else {
        this.$message(new Error("fail"));
      }
    },

删除属性:

接口文件:
(需要传入id)

//删除属性接口
export const deleteattr = (attrId) => request({ url: `/admin/product/deleteAttr/${attrId}`, method: 'delete' })

静态组件:

 //删除属性
    async deleteattrinfo(row) {
      let result = await this.$API.attr.deleteattr(row.id);
      if (result.code === 200) {
        this.$message("删除成功");
        this.getattrlist();
      }
    },

spu管理模块介绍

该业务:包括三个模块的切换所以用scense属性空值模块的切换 0–表示spu模块 1----spuform模块 2 ----skuform模块
在这里插入图片描述
静态组件:
在这里插入图片描述
动态展示spu列表:
需要写接口:

//请求spu数据接口
export const getspulist = (page, limit, category3Id) => request({ url: `/admin/product/${page}/${limit}`, method: 'get', params: { category3Id } })

在这里插入图片描述

spuform业务:

添加和修改spu

在这里插入图片描述
注意点:

  1. 点击添加spu和修改spu会发请求去获取品牌数据和销售属性
  2. 照片墙必须要有url,name属性但是服务器发过来的数据没有所以需要处理数据,并且后面添加的数据没有imgUrl,imgName属性,所以最后保存也需要整理数据
//获取spu图片
        let imgurl = await this.$API.spu.getspuimglist(id);
        if (imgurl.code === 200) {
          let list = imgurl.data;
          //由于照片墙需要数组,且数组内必须要有name 、url属性
          list.forEach((item) => {
            item.name = item.imgName;
            item.url = item.imgUrl;
          });
          this.imgurlllist = list;
        }
//保存or修改spu
    async saveorupdatespuinfo() {
      //整里数据图片数据
      this.spuvalueinfo.spuImageList = this.imgurlllist.map((item) => {
        return {
          imgName: item.name,
          imgUrl: (item.response && item.response.data) || item.url,
        };
      });
      let result = await this.$API.spu.savespulist(this.spuvalueinfo);
      if (result.code === 200) {
        this.$message("保存成功");
        this.$emit("changsence", 0);
        //清空修改成功或取消后得残留数据
        this.imgurlllist = [];
        this.spuvalueinfo = {
          //品牌id
          tmId: "",
          category3Id: 0,
          description: "", //spu描述
          spuImageList: [], //spu图片信息
          spuName: "", //spu名称
          spuSaleAttrList: [], //平台销售属性与属性值
        };
      }
    },

重要点:
在这里插入图片描述
实现销售属性有几个属性未选择:

 unselect() {
      return this.attrlist.filter((item) => {
        return this.spuvalueinfo.spuSaleAttrList.every((item1) => {
          return item.name !== item1.saleAttrName;
        });
      });
    },

删除spu

接口:

//删除spu
export const deletespuinfo = (spuId) => request({ url: `/admin/product/deleteSpu/${spuId}`, method: 'delete' })
    //删除spu回调
    async deletespuinfo(row) {
      let result = await this.$API.spu.deletespuinfo(row.id);
      if (result.code === 200) {
        this.$message("删除成功");
        this.getspudata();
      }
    },

skuform业务

静态组件:
(会发送3个请求去请求图片数据,平台属性数据,销售属性数据 )
在这里插入图片描述
接口文件:

//获取图片数据接口
export const getspuimginfo = (spuId) => request({ url: `/admin/product/spuImageList/${spuId}`, method: 'get' })
//获取销售属性数据
export const getspuVauleinfo = (spuId) => request({ url: `/admin/product/spuSaleAttrList/${spuId}`, method: 'get' })
//获取商品基础信息
export const getmarkinfo = (category1Id, category2Id, category3Id) => request({ url: `/admin/product/attrInfoList/${category1Id}/${category2Id}/${category3Id}`, method: 'get' })

注意:保存数据发送请求需要整理数据

async savesubmit() {
      //整理平台属性id
      //第一种写法
      // let arr = [];
      // this.baseAttrValueList.forEach((item) => {
      //   if (item.attrpintaiid) {
      //     const [attrId, valueId] = item.attrpintaiid.split(":");
      //     console.log(attrId, valueId);
      //     let obj = {
      //       attrId,
      //       valueId,
      //     };
      //     arr.push(obj);
      //   }
      //   //将处理好的数据push进列表
      //   this.skuinfo.skuAttrValueList = arr;
      // });
      //第二种写法 reduce
      this.skuinfo.skuAttrValueList = this.baseAttrValueList.reduce(
        (prev, item) => {
          if (item.attrpintaiid) {
            const [attrId, valueId] = item.attrpintaiid.split(":");
            prev.push({ attrId, valueId });
          }
          return prev;
        },
        []
      );
      //整理销售属性
      this.skuinfo.skuSaleAttrValueList = this.basevaluelist.reduce(
        (prev, item) => {
          if (item.attrid) {
            const [saleAttrId, saleAttrValueId] = item.attrid.split(":");
            prev.push({ saleAttrId, saleAttrValueId });
          }
          return prev;
        },
        []
      );
      //整理图片数据
      this.skuinfo.skuImageList = this.imagellist.map((item) => {
        return {
          imgName: item.imgName,
          imgUrl: item.imgUrl,
          isDefault: item.isDefault,
          spuImgId: item.id,
        };
      });
      //发请求
      let result = await this.$API.spu.saveskuinfo(this.skuinfo);
      if (result.code === 200) {
        this.$message("添加sku成功");
        this.$emit("changsence", 0);
      }
    },

图片列表的默认图片功能:(排他思想)

//处理默认图标的显示与隐藏
    handleshow(row) {
      this.baseImageList.forEach((item) => {
        if (item.id !== row.id) {
          item.isDefault = 0;
        }
      });
      row.isDefault = 1;
      this.skuinfo.skuDefaultImg = row.imgUrl;
    },

sku详情信息展示业务

效果图:
在这里插入图片描述

//请求sku列表数据
export const reqskulistinfo = (spuId) => request({ url: `/admin/product/findBySpuId/${spuId}`, method: 'get' })

静态展示用的时dialog组件:

        <el-dialog
          :title="`${spuName}的sku列表`"
          :visible.sync="dialogTableVisible"
        >
          <el-table v-loading="loading" :data="skuinfolist">
            <el-table-column
              property="skuName"
              label="名称"
              width="200"
            ></el-table-column>
            <el-table-column
              property="price"
              label="价格"
              width="180"
            ></el-table-column>
            <el-table-column
              property="weight"
              label="重量"
              width="180"
            ></el-table-column>
            <el-table-column property="prop" label="默认图片" width="150">
              <template slot-scope="{ row }">
                <img
                  :src="row.skuDefaultImg"
                  alt=""
                  style="width: 100px; height: 100px"
                />
              </template>
            </el-table-column>
          </el-table>
        </el-dialog>

sku模块业务

静态组件:
(运用了element-ui的抽屉组件)
在这里插入图片描述
在这里插入图片描述
该模块相关接口:

//导入二次封装的axios模块
import request from "@/utils/request"
//请求skulis数据
export const reqskulist = (page, limit) => request({ url: `/admin/product/list/${page}/${limit}`, method: 'get' })
//处理sku上架
export const onsale = (skuId) => request({ url: `/admin/product/onSale/${skuId}`, method: 'get' })
//处理sku下架
export const cancelsale = (skuId) => request({ url: `/admin/product/cancelSale/${skuId}`, method: 'get' })
//删除sku接口
export const deletesku = (skuId) => request({ url: `/admin/product/deleteSku/${skuId}`, method: 'delete' })
//sku详情页
export const getskuinfo = (skuId) => request({ url: `/admin/product/getSkuById/${skuId}`, method: 'get' })

首页

可视化搭建:
效果图:
在这里插入图片描述
分为card组件,observe组件,sale组件
在这里插入图片描述
用mock虚拟数据模拟动态可视化:
第一步:创建(home.js)
在这里插入图片描述
data.json(里面包含了一些虚拟数据)在这里插入图片描述
第二步:配置home.js

//data是一个对象
const data = require('./data.json')

module.exports = [
    {
        url: '/home/list',
        type: 'get',
        response: config => {
            const items = data.items
            return {
                code: 20000,
                data
            }
        }
    }
]

第三步:需要在index.js引入home.js

const Mock = require('mockjs')
const { param2Obj } = require('./utils')

const user = require('./user')
const table = require('./table')
const home = require('./home')
const mocks = [
  ...user,
  ...table,
  ...home
]

// for front mock
// please use it cautiously, it will redefine XMLHttpRequest,
// which will cause many of your third-party libraries to be invalidated(like progress event).
function mockXHR() {
  // mock patch
  // https://github.com/nuysoft/Mock/issues/300
  Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
  Mock.XHR.prototype.send = function () {
    if (this.custom.xhr) {
      this.custom.xhr.withCredentials = this.withCredentials || false

      if (this.responseType) {
        this.custom.xhr.responseType = this.responseType
      }
    }
    this.proxy_send(...arguments)
  }

  function XHR2ExpressReqWrap(respond) {
    return function (options) {
      let result = null
      if (respond instanceof Function) {
        const { body, type, url } = options
        // https://expressjs.com/en/4x/api.html#req
        result = respond({
          method: type,
          body: JSON.parse(body),
          query: param2Obj(url)
        })
      } else {
        result = respond
      }
      return Mock.mock(result)
    }
  }

  for (const i of mocks) {
    Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
  }
}

module.exports = {
  mocks,
  mockXHR
}


第四步:配置vue.config.js
在这里插入图片描述

 //开启mock数据
    after: require('./mock/mock-server.js')

第五步:配置store

import mockrequest from "@/utils/mock"
const state = {
    list: []
};
const mutations = {
    GETDATA(state, list) {
        state.list = list
    }
};
const actions = {
    //发送请求mock数据
    async getData({ commit }) {
        let result = await mockrequest.get('/home/list')
        if (result.code === 20000) {
            commit('GETDATA', result.data)
        }
    }
};
const getters = {};


export default {
    state,
    mutations,
    actions,
    getters
}

第六步:
挂载就发请求

  mounted() {
    this.$store.dispatch("getData");
  },

sale.vue

import { mapState } from "vuex";
  computed: {
    title() {
      return this.activeName === "sale" ? "销售额" : "访问量";
    },
    ...mapState({
      liststate: (state) => state.home.list,
    }),
  },
奋斗的小泉
关注 关注
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue-element项目实战之商品管理系统
William_fang的博客
04-20 2864
商品管理后台系统。(该项目由登录、会员等级、会员列表、商品详情、商品列表、用户中心等页面组成,有登录、注册、重置、增删改查等功能,详细功能前往gitee说明文档查看)
vue电商网站后台管理系统模板
06-19
一款基于vue实现的电商网站后台管理系统模板,适合电子商务购物网站admin系统。界面使用tab选项卡的方式,无刷新效果很好。这套后台模板是github项目,请参考帮助文档。
VUE2_商品管理
weixin_51775906的博客
02-22 131
Vue 学习项目
Vue后台电商管理项目
m0_73442777的博客
04-18 1468
该电商后台管理项目是一个完整的Vue.js应用程序案例,通过阅读该项目的源代码和文档,读者可以全面了解Vue.js框架的应用和开发技巧,进一步提高自己的前端开发能力和水平。
Vue电商后台管理
weixin_45860609的博客
08-14 2062
项目初始化 1 安装Vue 脚手架 npm install -g @vue/cli 2 通过Vue脚手架创建项目 输入vue ui 进入vue管理界面 选择创建 在指定的目录下创建项目 选择手动预设 勾选以下这些功能 点击下一步后 点击创建项目 3 配置element-ui组件库 配置插件 将其改为按需导入 5 配置axios库 安装axios运行依赖 将代码托管至远程github仓储 后台项目环境配置 安装phpstudy 配置安装数据库 解压vue_api_server文
html sku效果后台,vue sku商品规格模板之后台管理系统篇
weixin_39990250的博客
06-03 1005
刚看到设计稿的时候,还是有点懵的,查询了百度后就开始有了灵感和思路了,下面就来看看实现的效果吧,这个是vue+element-ui的后台管理系统,用到的是element的ui。前面步骤一到二是上传图片,第三步才是商品sku模板的开始。1.下图是我们看到模板的第一步(添加规格类型),就是不论什么规格都是自己拟定义image.png2.下图是我们看到的第二步,增加规格的名称image.pngimage...
vue商品规格属性(sku)组合算法_vue+有赞vant的商品规格sku记录-小程序
weixin_39828960的博客
12-11 1144
vant-vue关于sku规格是说明,并不详情,从手册复制无法使用。git下载安装vant后的sku示例却很详情。我剔除了高级用法,以下是基础用法示例:sku.vue文件 <template> <div> <!-- 基础用法 --> <div class="sku-container"> <van-sk...
vue+antd搭建后台管理界面模版(PC端),适配中文、英文、日文 mock数据,开箱即用
Python代码大全
12-23 2353
vue2 + vuex + vue-router + webpack + ES6/7 + axios + antd + 阿里图标iconfont。如有问题请直接在 Issues 中提,或者您发现问题并有非常好的解决方案,欢迎 PR 👍。或者您可以 “follow” 一下,我会不断开源更多的有趣的项目。为了方便后期修改使用,模拟数据在页面中,具体修改看下面【强调】开发环境 w7 Chrome 61。
vue2搭建商品后台管理项目(1)
m0_58813731的博客
12-24 515
vue2搭建商品后台管理项目
vue2和elementUI搭建后台管理系统
06-24
基于vue2和elementUI搭建基础的后台管理系统。
前端vue项目,后台新闻管理系统
07-19
这是基于vue的新闻管理系统,接口是通过 json-server来实现的
基于vue2 + Element-ui搭建后台管理系统源码.zip
10-12
基于vue2 + Element-ui搭建后台管理系统
vue3使用element-plus搭建后台管理系统---菜单管理
07-01
vue3使用element-plus搭建后台管理系统---菜单管理
vue搭建后台管理系统模板
02-12
vue搭建后台管理系统模板,能帮助你快速配置好webpack等功能,大神必备神器,导入即用,无需更改!
后台管理系统)动态添加商品规格
weixin_47169270的博客
05-21 975
数据结构 子商品集合: [ { 规格集合: [ { 规格名: "", 规格值: [], }, ], }, ], 代码地址 https://gitee.com/huangwei1240/background-management-system.git. spec.vue文件 ...
vue3-admin商品管理后台项目(后台布局layout布局开发二)
lovestar墨竹的博客
10-21 1462
vue3-admin商品管理后台项目(后台布局layout布局开发二)
黑马程序员课程Vue实战项目_Element-ui——电商后台管理系统-商品管理(商品列表)
weixin_48884617的博客
04-19 8140
黑马程序员课程Vue实战项目_Element-ui——电商后台管理系统-商品管理(商品列表)
Vue使用教程和后台商品管理系统分享(详细完整教程讲解)
a910247的博客
04-10 1795
随着软件开发不断进步,前后端框架技术也取得重大进步,前端主要Layui经典框架,还有谷歌flutter和如今流行的Vue框架,后端主要是Spring框架,尤其是SpringBoot应用非常广泛,而前端这门技术也越来越重要,很多人都开启了学习Vue技术,本文就介绍了Vue的基础内容以及后台管理系统项目分享。
vue+有赞vant的商品规格sku记录-小程序
baok1592的专栏
07-30 1426
vant-vue关于sku规格是说明,并不详情,从手册复制无法使用。git下载安装vant后的sku示例却很详情。 我剔除了高级用法,以下是基础用法示例: sku.vue文件 <template> <div> <!-- 基础用法 --> <div class="sku-container"> <van-sku v-model="showBase" :sku="s.
vue2 后台管理项目搭建
最新发布
09-24
Vue 2后台管理项目搭建步骤如下: 1. 安装Node.js:首先要确保计算机上已安装Node.js,可以在官方网站上下载并安装最新版本。 2. 使用Vue CLI创建项目:打开命令行工具,运行以下命令来安装Vue CLI: ``` npm install -g @vue/cli ``` 然后,使用以下命令创建Vue项目: ``` vue create project-name ``` 在创建过程中,可以选择使用默认配置还是手动选择配置。如果是新手,建议选择默认配置。 3. 安装相关依赖:在项目目录下,运行以下命令安装一些常用的依赖项: ``` cd project-name npm install vue-router axios element-ui ``` 其中,vue-router用于处理路由,axios用于进行网络请求,element-ui是一个常用的UI框架,可以根据需要选择安装其他依赖。 4. 配置路由和页面:在src目录下创建router目录,并在其中创建index.js文件来配置路由。在src目录下创建views目录,并在其中创建各个页面组件。 在router/index.js文件中,添加以下代码配置路由: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' import Home from '../views/Home.vue' Vue.use(VueRouter) const routes = [ { path: '/', name: 'Home', component: Home } ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) export default router ``` 在views目录下的各个组件中,可以编写对应的页面内容。 5. 编写页面代码:在各个组件中编写页面代码,并根据需要引入element-ui的组件进行布局。 6. 运行项目:在命令行工具中运行以下命令启动项目: ``` npm run serve ``` 项目将在本地服务器上运行,可以在浏览器中访问http://localhost:8080来查看。 这就是Vue 2后台管理项目搭建流程,根据实际需求,可以继续配置页面、添加组件等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • promise的作用与使用 1092
  • Vue指令--自定义指令--常用内置指令--全局指令-局部指令 960
  • vue2搭建的商品后台管理项目(1) 515
  • vue2搭建的商品后台管理项目(2) 490
  • vue-基本路由 - 嵌套路由 - 编程式路由导航 351

最新评论

  • vue的动画与过渡-trasition-enter-leave

    CSDN-Ada助手: Vue入门 技能树或许可以帮到你:https://edu.csdn.net/skill/vue?utm_source=AI_act_vue

大家在看

  • Python和Keras开发深度学习模型对CIFAR-10图像分类 938
  • 抖音橱窗带货秘籍:简单操作,高收益
  • OpenCASCADE入门(2)——openCasCade7.6.0版本的exe方式安装,vs2017环境配置,编译和使用draw
  • 拿下列表和元组只要一篇就够了 60
  • Java 集合中的组内平均值计算

最新文章

  • Ajax的使用,axios发送ajax请求,jquery发送ajax请求
  • promise的作用与使用
  • git的运用
2022年12篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司文山网站改版梧州网站搜索优化娄底网站推广工具多少钱吉安网站推广哪家好喀什百度竞价包年推广哪家好哈尔滨百度爱采购哪家好钦州外贸网站设计延安网站改版哪家好大芬关键词排名包年推广公司襄樊百度标王哪家好淄博网页设计公司阜阳品牌网站设计公司秦皇岛关键词按天扣费多少钱青岛关键词按天扣费价格孝感seo网站推广报价湛江网站建设价格广元seo网站优化迪庆至尊标王哪家好梅州阿里店铺运营价格六安高端网站设计多少钱菏泽企业网站设计公司金昌设计公司网站公司安顺设计网站坂田网站设计模板秦皇岛建设网站推荐内江企业网站制作价格海西关键词排名哪家好坂田网站优化按天收费推荐池州百度关键词包年推广公司益阳网站制作多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化