chenrui %!s(int64=4) %!d(string=hai) anos
pai
achega
5b9bd90778

+ 71 - 0
src/api/dealerProduct.js

@@ -0,0 +1,71 @@
+import { axios } from '@/utils/request'
+
+//  产品列表  分页
+export const dealerProductList = (params) => {
+  const url = `/dealerProduct/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+
+//  产品列表  无分页
+export const dealerProductQuery = (params) => {
+  const url = `/dealerProduct/query`
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 新增/编辑产品
+export const dealerProductSave = params => {
+  return axios({
+    url: '/dealerProduct/save',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 产品 更改状态
+export const dealerProductUpdate = params => {
+  return axios({
+    url: '/dealerProduct/updateStatus',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 产品 导出
+export const dealerProductExport = params => {
+  return axios({
+    url: '/dealerProduct/export',
+    data: params,
+    method: 'post',
+    responseType: 'blob'
+  })
+}
+
+//  产品  详情
+export const dealerProductDetail = (params) => {
+  return axios({
+    url: `/dealerProduct/findById/${params.id}`,
+    data: {},
+    method: 'get'
+  })
+}
+//  赠品 列表  分页
+export const giftsDetailList = (params) => {
+  const url = `/giftsDetail/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}

+ 41 - 0
src/api/dealerProductBrand.js

@@ -0,0 +1,41 @@
+import { axios } from '@/utils/request'
+
+//  产品品牌列表  分页
+export const dealerProductBrandList = (params) => {
+  const url = `/dealerProductBrand/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+
+//  产品品牌列表  无分页
+export const dealerProductBrandQuery = (params) => {
+  const url = `/dealerProductBrand/query`
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 新增/编辑产品品牌
+export const dealerProductBrandSave = params => {
+  return axios({
+    url: '/dealerProductBrand/save',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 产品品牌 更改状态
+export const dealerProductBrandUpdate = params => {
+  return axios({
+    url: '/dealerProductBrand/updateStatus',
+    data: params,
+    method: 'post'
+  })
+}

+ 29 - 0
src/api/dealerProductType.js

@@ -0,0 +1,29 @@
+import { axios } from '@/utils/request'
+
+//  产品类别列表  无分页
+export const dealerProductTypeQuery = (params) => {
+  const url = `/dealerProductType/query`
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 新增/编辑产品类别
+export const dealerProductTypeSave = params => {
+  return axios({
+    url: '/dealerProductType/save',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 删除产品类别
+export const dealerProductTypeDel = params => {
+  return axios({
+    url: `/dealerProductType/delete/${params.id}`,
+    data: {},
+    method: 'get'
+  })
+}

+ 235 - 0
src/config/router.config.js

@@ -191,6 +191,241 @@ export const asyncRouterMap = [
           }
         ]
       },
+      // 产品管理
+      {
+        path: '/productManagement',
+        redirect: '/productManagement/productInfo',
+        component: PageView,
+        meta: {
+          title: '产品管理',
+          icon: 'shopping'
+          // permission: 'M_shop'
+        },
+        children: [
+          {
+            path: '/productManagement/productInfo',
+            redirect: '/productManagement/productInfo/list',
+            name: 'productInfo',
+            component: RouteView,
+            meta: {
+              title: '产品信息管理',
+              icon: 'file-text'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'productInfoList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productInfo/list.vue'),
+                meta: {
+                  title: '产品信息列表',
+                  icon: 'file-text',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: 'add',
+                name: 'productInfoAdd',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productInfo/edit.vue'),
+                meta: {
+                  title: '新增产品',
+                  icon: 'file-text',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'edit/:id',
+                name: 'productInfoEdit',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productInfo/edit.vue'),
+                meta: {
+                  title: '编辑产品',
+                  icon: 'file-text',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
+          },
+          {
+            path: '/productManagement/productPricing',
+            redirect: '/productManagement/productPricing/list',
+            name: 'productPricing',
+            component: RouteView,
+            meta: {
+              title: '产品定价',
+              icon: 'sketch'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'productPricingList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productPricing/list.vue'),
+                meta: {
+                  title: '产品定价列表',
+                  icon: 'sketch',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              }
+            ]
+          },
+          {
+            path: '/productManagement/priceChangeRecord',
+            redirect: '/productManagement/priceChangeRecord/list',
+            name: 'priceChangeRecord',
+            component: RouteView,
+            meta: {
+              title: '价格变更记录',
+              icon: 'sketch'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'priceChangeRecordList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/priceChangeRecord/list.vue'),
+                meta: {
+                  title: '价格变更记录列表',
+                  icon: 'sketch',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              }
+            ]
+          },
+          {
+            path: '/productManagement/productLaunchAudit',
+            redirect: '/productManagement/productLaunchAudit/list',
+            name: 'productLaunchAudit',
+            component: RouteView,
+            meta: {
+              title: '产品上线审核',
+              icon: 'sketch'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'productLaunchAuditList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productLaunchAudit/list.vue'),
+                meta: {
+                  title: '产品上线审核列表',
+                  icon: 'sketch',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              }
+            ]
+          },
+          {
+            path: '/productManagement/productOfflineAudit',
+            redirect: '/productManagement/productOfflineAudit/list',
+            name: 'productOfflineAudit',
+            component: RouteView,
+            meta: {
+              title: '产品下线审核',
+              icon: 'sketch'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'productOfflineAuditList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productOfflineAudit/list.vue'),
+                meta: {
+                  title: '产品下线审核列表',
+                  icon: 'sketch',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              }
+            ]
+          },
+          {
+            path: '/productManagement/productLevel',
+            redirect: '/productManagement/productLevel/list',
+            name: 'productLevel',
+            component: RouteView,
+            meta: {
+              title: '产品级别',
+              icon: 'sketch'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'productLevelList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productLevel/list.vue'),
+                meta: {
+                  title: '产品级别列表',
+                  icon: 'sketch',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              }
+            ]
+          },
+          {
+            path: '/productManagement/productBrand',
+            redirect: '/productManagement/productBrand/list',
+            name: 'productBrand',
+            component: RouteView,
+            meta: {
+              title: '产品品牌管理',
+              icon: 'sketch'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'productBrandList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productBrand/list.vue'),
+                meta: {
+                  title: '产品品牌列表',
+                  icon: 'sketch',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              }
+            ]
+          },
+          {
+            path: '/productManagement/productCategory',
+            redirect: '/productManagement/productCategory/list',
+            name: 'productCategory',
+            component: RouteView,
+            meta: {
+              title: '产品类别管理',
+              icon: 'sliders'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'productCategoryList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/productManagement/productCategory/list.vue'),
+                meta: {
+                  title: '产品类别列表',
+                  icon: 'sliders',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              }
+            ]
+          }
+        ]
+      },
       {
         path: '/menusAuth',
         redirect: '/bnSetting/menusAuth',

+ 8 - 0
src/views/productManagement/priceChangeRecord/list.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 128 - 0
src/views/productManagement/productBrand/editModal.vue

@@ -0,0 +1,128 @@
+<template>
+  <a-modal
+    centered
+    class="productBrandEdit-modal"
+    :footer="null"
+    :maskClosable="false"
+    :title="modalTit"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="800">
+    <!-- 表单 -->
+    <div>
+      <a-form-model
+        id="productBrandEdit-form"
+        ref="ruleForm"
+        :model="form"
+        :rules="rules"
+        :label-col="formItemLayout.labelCol"
+        :wrapper-col="formItemLayout.wrapperCol"
+      >
+        <a-form-model-item label="产品品牌名称" prop="productBrandName">
+          <a-input
+            id="productBrandEdit-productBrandName"
+            :maxLength="30"
+            v-model="form.productBrandName"
+            placeholder="请输入产品品牌名称(最多30个字符)"
+            allowClear />
+        </a-form-model-item>
+      </a-form-model>
+      <div class="btn-cont">
+        <a-button type="primary" id="product-brand-edit-modal-save" @click="handleSave">保存</a-button>
+        <a-button id="product-brand-edit-modal-back" @click="isShow = false" style="margin-left: 15px;">返回列表</a-button>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+import { STable } from '@/components'
+import { dealerProductBrandSave } from '@/api/dealerProductBrand'
+export default {
+  name: 'productBrandEditModal',
+  components: { STable },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    },
+    nowData: {
+      type: Object,
+      default: null
+    }
+  },
+  computed: {
+    modalTit () {
+      return (this.itemId ? '编辑' : '新增') + '产品品牌'
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      formItemLayout: {
+        labelCol: { span: 6 },
+        wrapperCol: { span: 16 }
+      },
+      form: {
+        productBrandName: '', // 产品品牌名称
+      },
+      rules: {
+        productBrandName: [
+          { required: true, message: '请输入产品品牌名称', trigger: 'blur' }
+        ],
+      }
+    }
+  },
+  methods: {
+    //  保存
+    handleSave(){
+      const _this = this
+      _this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          const formData = JSON.parse(JSON.stringify(_this.form))
+          formData.id = _this.itemId ? _this.itemId : undefined
+          dealerProductBrandSave(formData).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$emit('ok')
+              _this.isShow = false
+            }
+          })
+        } else {
+          return false
+        }
+      })
+    },
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }else{
+        this.form.productBrandName = this.nowData && this.nowData.productBrandName ? this.nowData.productBrandName : ''
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .productBrandEdit-modal{
+    .ant-modal-body {
+    	padding: 40px 40px 24px;
+    }
+    .btn-cont {
+    	text-align: center;
+    	margin: 35px 0 10px;
+    }
+  }
+</style>

+ 142 - 0
src/views/productManagement/productBrand/list.vue

@@ -0,0 +1,142 @@
+<template>
+  <a-card size="small" :bordered="false" class="productBrandList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="品牌名称">
+              <a-input id="productBrandList-productBrandName" v-model.trim="queryParam.productBrandName" allowClear placeholder="请输入品牌名称"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="状态">
+              <v-select code="ENABLED_FLAG" id="productBrandList-enabledFlag" v-model="queryParam.enabledFlag" allowClear placeholder="请选择状态"></v-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="productBrandList-refresh">查询</a-button>
+            <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="productBrandList-reset">重置</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="productBrandList-add" type="primary" @click="handleEdit()">新增品牌</a-button>
+      <a-button id="productBrandList-import" @click="handleImport">导入品牌</a-button>
+    </div>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      bordered>
+      <!-- 状态 -->
+      <template slot="enabledFlag" slot-scope="text, record">
+        <a-switch
+          id="productBrandList-enable"
+          checkedChildren="启用"
+          unCheckedChildren="禁用"
+          @change="changeStatus(record)"
+          :checked="record.enabledFlag == 1 ? true : false" />
+        <!-- <span :class="record.enabledFlag==1?'green':'red'" v-else> {{ record.enabledFlag==1? '已启用': '已禁用' }} </span> -->
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="primary" @click="handleEdit(record)" id="productBrandList-edit-btn">编辑</a-button>
+      </template>
+    </s-table>
+    <!-- 新增/编辑产品品牌 -->
+    <product-brand-edit-modal :openModal="openModal" :nowData="nowData" :itemId="itemId" @ok="handleOk" @close="closeModal" />
+  </a-card>
+</template>
+
+<script>
+import { dealerProductBrandList, dealerProductBrandUpdate } from '@/api/dealerProductBrand'
+import { STable, VSelect } from '@/components'
+import productBrandEditModal from './editModal.vue'
+export default {
+  components: { STable, VSelect, productBrandEditModal },
+  data () {
+    return {
+      queryParam: { //  查询条件
+        productBrandName: '', //  品牌名称
+        enabledFlag: undefined,  //  状态
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 70, align: 'center' },
+        { title: '产品品牌名称', dataIndex: 'productBrandName', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '首字母', dataIndex: 'firstChar', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '创建时间', dataIndex: 'createDate', width: 180, align: 'center' },
+        { title: '状态', scopedSlots: { customRender: 'enabledFlag' }, width: 180, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 240, align: 'center' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        return dealerProductBrandList( Object.assign(parameter, this.queryParam) ).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          this.disabled = false
+          return data
+        })
+      },
+      openModal: false,  //  新增编辑  弹框
+      itemId: '',  //  当前id
+      nowData: null  //  当前记录数据
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.productBrandName = ''
+      this.queryParam.enabledFlag = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  新增/编辑
+    handleEdit(row){
+      this.itemId = row ? row.id : null
+      this.nowData = row ? row : null
+      this.openModal = true
+    },
+    //  新增/编辑  成功
+    handleOk(){
+      this.$refs.table.refresh(true)
+    },
+    //  关闭弹框
+    closeModal(){
+      this.itemId = ''
+      this.nowData = null
+      this.openModal = false
+    },
+    // 启用 禁用
+    changeStatus (record) {
+      const _this = this
+      const _data = {
+        id: record.id,
+        enabledFlag: record.enabledFlag == 1 ? '0' : '1'
+      }
+      dealerProductBrandUpdate(_data).then(res => {
+      	if (res.status == 200) {
+      		_this.$message.success(res.message)
+      		_this.$refs.table.refresh()
+      	} else {
+      		_this.$refs.table.refresh()
+      	}
+      })
+    },
+    //  导入
+    handleImport(){},
+  }
+}
+</script>
+
+<style lang="less"></style>

+ 146 - 0
src/views/productManagement/productCategory/editModal.vue

@@ -0,0 +1,146 @@
+<template>
+  <a-modal
+    centered
+    class="productCategoryEdit-modal"
+    :footer="null"
+    :maskClosable="false"
+    :title="modalTit"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="800">
+    <!-- 表单 -->
+    <div>
+      <a-form-model
+        id="productCategoryEdit-form"
+        ref="ruleForm"
+        :model="form"
+        :rules="rules"
+        :label-col="formItemLayout.labelCol"
+        :wrapper-col="formItemLayout.wrapperCol"
+      >
+        <a-form-model-item label="所属类别" v-if="parentType">
+          {{ parentType }}
+        </a-form-model-item>
+        <a-form-model-item label="产品类别名称" prop="productTypeName">
+          <a-input v-model.trim="form.productTypeName" id="productCategoryEdit-name" :maxLength="30" allowClear placeholder="请输入产品类别名称(最多30个字符)" />
+        </a-form-model-item>
+      </a-form-model>
+      <div class="btn-cont">
+        <a-button type="primary" id="product-category-edit-modal-save" @click="handleSave">保存</a-button>
+        <a-button id="product-category-edit-modal-back" @click="isShow = false" style="margin-left: 15px;">返回列表</a-button>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+import { STable } from '@/components'
+import { dealerProductTypeSave } from '@/api/dealerProductType'
+export default {
+  name: 'productCategoryEditModal',
+  components: { STable },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    },
+    nowData: {
+      type: Object,
+      default: null
+    }
+  },
+  computed: {
+    modalTit () {
+      return (this.itemId ? '编辑' : '新增') + '产品类别'
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      formItemLayout: {
+        labelCol: { span: 6 },
+        wrapperCol: { span: 16 }
+      },
+      form: {
+        productTypeName: '', // 产品类别名称
+      },
+      rules: {
+        productTypeName: [
+          { required: true, message: '请输入产品类别名称', trigger: 'blur' }
+        ],
+      },
+      parentType: '',  //  父级分类
+    }
+  },
+  methods: {
+    //  保存
+    handleSave(){
+      const _this = this
+      _this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          const formData = JSON.parse(JSON.stringify(_this.form))
+          formData.id = _this.itemId ? _this.itemId : undefined
+          formData.psn = _this.nowData && _this.nowData.psn ? _this.nowData.psn : undefined
+          dealerProductTypeSave(formData).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$emit('ok')
+              _this.isShow = false
+            }
+          })
+        } else {
+          return false
+        }
+      })
+    },
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }else{
+        //  获取父级分类 名称
+        if(this.nowData && this.nowData.namePaths){
+          let namePathsArr = []
+          namePathsArr = this.nowData.namePaths.split(',')
+          this.parentType = ''
+          namePathsArr.map((item, index) => {
+            this.parentType += item + ' > '
+          })
+          this.parentType = this.parentType ? this.parentType.substr(0, this.parentType.length - 3) : ''
+        }else{
+          this.parentType = ''
+        }
+      }
+    },
+    itemId (newValue, oldValue) {
+      if (this.isShow && newValue) {
+        this.form.productTypeName = this.nowData && this.nowData.productTypeName ? this.nowData.productTypeName : ''
+      }else{
+        this.form.productTypeName = ''
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .productCategoryEdit-modal{
+    .ant-modal-body {
+    	padding: 40px 40px 24px;
+    }
+    .btn-cont {
+    	text-align: center;
+    	margin: 35px 0 10px;
+    }
+  }
+</style>

+ 174 - 0
src/views/productManagement/productCategory/list.vue

@@ -0,0 +1,174 @@
+<template>
+  <a-card size="small" :bordered="false" class="productCategoryList-wrap">
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="productCategoryList-add" type="primary" @click="handleAdd()" style="margin-top: 18px;">新增一级分类</a-button>
+    </div>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :showPagination="false"
+      :defaultExpandedRowKeys="defaultExpandedRowKeys"
+      bordered>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button
+          v-if="record.productTypeLevel<3"
+          type="link"
+          size="small"
+          icon="plus"
+          class="btn-add-s"
+          id="productCategory-addSubItem"
+          @click="handleAdd(record)">新增子级</a-button>
+        <a-button
+          v-if="record.pid != 0"
+          type="link"
+          size="small"
+          icon="edit"
+          class="btn-edit-s"
+          id="productCategory-edit"
+          @click="handleEdit(record)">编辑</a-button>
+        <a-button
+          v-if="record.pid != 0"
+          type="link"
+          size="small"
+          icon="delete"
+          class="btn-del-s"
+          id="productCategory-del"
+          @click="handleDel(record)">删除</a-button>
+      </template>
+    </s-table>
+    <!-- 新增/编辑产品类别 -->
+    <product-category-edit-modal :openModal="openModal" :nowData="nowData" :itemId="itemId" @ok="handleOk" @close="closeModal" />
+  </a-card>
+</template>
+
+<script>
+import { dealerProductTypeQuery, dealerProductTypeDel } from '@/api/dealerProductType'
+import { STable } from '@/components'
+import productCategoryEditModal from './editModal.vue'
+export default {
+  components: { STable, productCategoryEditModal },
+  data () {
+    return {
+      formItemLayout: {
+        labelCol: { span: 6 },
+        wrapperCol: { span: 16 }
+      },
+      columns: [
+        { title: '产品类别名称', dataIndex: 'productTypeName', width: 200, align: 'left' },
+        { title: '首字母', dataIndex: 'firstChar', width: 150, align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: 150, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 150, align: 'center' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        return dealerProductTypeQuery({}).then(res => {
+          //  递归去除空children
+          this.recursionFun(res.data)
+          if(res.data.length > 0){
+            this.defaultExpandedRowKeys[0] = res.data[0].id
+          }else{
+            this.defaultExpandedRowKeys = []
+          }
+          return res.data
+        })
+      },
+      defaultExpandedRowKeys: [], //  树形数据默认展开项
+      openModal: false,  //  新增编辑  弹框
+      itemId: '',  //  当前id
+      nowData: null  //  当前记录数据
+    }
+  },
+  methods: {
+    //  新增子级
+    handleAdd (row) {
+      this.itemId = null
+      if(row){  //  新增子级
+        let nowData = row
+        nowData.psn = nowData && nowData.productTypeSn ? nowData.productTypeSn : null
+        this.nowData = nowData
+      }else{  //  最高级
+        this.nowData = null
+      }
+      this.openModal = true
+    },
+    //  编辑
+    handleEdit (row) {
+      this.itemId = row && row.id ? row.id : null
+      let nowData = row
+      nowData.psn = nowData && nowData.productTypeSn ? nowData.productTypeSn : null
+      this.nowData = nowData
+      this.openModal = true
+    },
+    //  关闭弹框
+    closeModal(){
+      this.itemId = ''
+      this.openModal = false
+    },
+    //  新增/编辑  成功
+    handleOk(){
+      this.$refs.table.refresh(true)
+    },
+    //  删除
+    handleDel (item) {
+      const _this = this
+      _this.nowId = item.id
+      _this.$confirm({
+        title: '提示',
+        content: '删除后原数据不可恢复,是否删除?',
+        centered: true,
+        onOk () {
+          dealerProductTypeDel({ id: _this.nowId }).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$refs.table.refresh()
+            }
+          })
+        }
+      })
+    },
+    //  递归函数
+    recursionFun (data) {
+      if (data) {
+        data.map((item, index) => {
+          if (item.children && item.children.length == 0) {
+            delete item.children
+          } else {
+            this.recursionFun(item.children)
+          }
+        })
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .productCategoryList-wrap{
+    // 表格
+    .s-table{
+      .btn-edit-s{
+        color: #1891ff;
+        margin: 0 5px;
+      }
+      .btn-del-s{
+        color: #ff4d4f;
+      }
+      .btn-edit-s.ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .btn-edit-s.ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger){
+        color: #1891ff;
+        border-color: #1891ff;
+      }
+      .btn-del-s.ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .btn-del-s.ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger){
+        color: #ff4d4f;
+        border-color: #ff4d4f;
+      }
+    }
+  }
+</style>

+ 148 - 0
src/views/productManagement/productInfo/detailModal.vue

@@ -0,0 +1,148 @@
+<template>
+  <a-modal
+    centered
+    class="productInfoDetail-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="产品详情"
+    v-model="isShow"
+    @cancle="isShow=false"
+    width="80%">
+    <!-- 产品详情 -->
+    <div>
+      <a-descriptions bordered size="default">
+        <a-descriptions-item label="产品图片:">
+          <img
+            v-for="(item,index) in fileList"
+            :key="index"
+            :src="item.url"
+            title="点击查看大图"
+            class="productPic"
+            @click="getPreview(item.url)" />
+        </a-descriptions-item>
+        <!-- <a-descriptions-item label="产品名称:">{{ detailsData.productName || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="产品编码:">{{ detailsData.productCode || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="原厂编码:">{{ detailsData.origCode || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="其他编码:">{{ detailsData.origCode || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="包装规格:">{{ detailsData.origCode || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="箭冠产品:">{{ detailsData.origCode || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="单位:">{{ detailsData.unit || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="产品品牌:">{{ detailsData.productBrandName || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="产品类别:">{{ productTypeName || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="产品尺寸:">{{ (detailsData.wholesalePrice || detailsData.wholesalePrice==0) ? detailsData.wholesalePrice : '--' }}</a-descriptions-item>
+        <a-descriptions-item label="产品重量:">{{ (detailsData.terminalPrice || detailsData.terminalPrice==0) ? detailsData.terminalPrice : '--' }}</a-descriptions-item>
+        <a-descriptions-item label="颜色:">{{ detailsData.productBrandName || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="产品说明:">{{ detailsData.productBrandName || '--' }}</a-descriptions-item>
+        <a-descriptions-item label="其他说明:">{{ detailsData.productBrandName || '--' }}</a-descriptions-item> -->
+      </a-descriptions>
+      <div class="btn-cont"><a-button id="product-management-detail-modal-back" @click="isShow = false">返回列表</a-button></div>
+    </div>
+    <a-modal :visible="previewVisible" :footer="null" @cancel="previewVisible=false">
+      <img alt="example" style="width: 100%" :src="previewImage" />
+    </a-modal>
+  </a-modal>
+</template>
+
+<script>
+// import { dealerProductDetail } from '@/api/dealerProduct'
+export default {
+  name: 'ProductInfoDetailModal',
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    }
+  },
+  computed: {
+    productTypeName () {
+      const productTypeName1 = this.detailsData.productTypeName1 ? this.detailsData.productTypeName1 : ''
+      const productTypeName2 = this.detailsData.productTypeName2 ? ' > ' + this.detailsData.productTypeName2 : ''
+      const productTypeName3 = this.detailsData.productTypeName3 ? ' > ' + this.detailsData.productTypeName3 : ''
+      return productTypeName1 + productTypeName2 + productTypeName3
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      detailsData: null, //  详情数据
+      previewVisible: false,
+      previewImage: '',
+      fileList: [
+        {
+          uid: '-1',
+          name: 'image.png',
+          status: 'done',
+          url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'
+        },
+        {
+          uid: '-2',
+          name: 'image.png',
+          status: 'done',
+          url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'
+        },
+        {
+          uid: '-3',
+          name: 'image.png',
+          status: 'done',
+          url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'
+        }
+      ]
+    }
+  },
+  methods: {
+    //  获取详情
+    getDetail () {
+      // dealerProductDetail({ id: this.itemId }).then(res => {
+      //   if (res.status == 200) {
+      //     this.detailsData = res.data
+      //   } else {
+      //     this.detailsData = null
+      //   }
+      // })
+    },
+    // 查看大图
+    getPreview (url) {
+      this.previewImage = url
+      this.previewVisible = true
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }
+    },
+    itemId (newValue, oldValue) {
+      if (this.isShow && newValue) {
+        this.getDetail()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .productInfoDetail-modal{
+    .ant-modal-body {
+      padding: 40px 40px 24px;
+    }
+    .productPic{
+      cursor: pointer;
+      width: 100px;
+      margin-right: 10px;
+    }
+    .btn-cont {
+      text-align: center;
+      margin: 35px 0 10px;
+    }
+  }
+</style>

+ 8 - 0
src/views/productManagement/productInfo/edit.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 416 - 0
src/views/productManagement/productInfo/list.vue

@@ -0,0 +1,416 @@
+<template>
+  <a-card size="small" :bordered="false" class="productInfoList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="创建时间">
+              <a-range-picker
+                style="width:100%"
+                id="productInfoList-creatTime"
+                :disabledDate="disabledDate"
+                @change="creatTimechange"
+                :format="dateFormat"
+                :placeholder="['开始时间', '结束时间']" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="产品编码/原厂编码">
+              <a-input id="productInfoList-productCode" v-model.trim="queryParam.productCode" allowClear placeholder="请输入产品编码"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="产品名称">
+              <a-input id="productInfoList-productName" v-model.trim="queryParam.productName" allowClear placeholder="请输入产品名称"/>
+            </a-form-item>
+          </a-col>
+          <template v-if="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="产品品牌">
+                <a-select
+                  placeholder="请选择"
+                  id="productInfoList-productBrandSn"
+                  allowClear
+                  v-model="queryParam.productBrandSn"
+                  :showSearch="true"
+                  option-filter-prop="children"
+                  :filter-option="filterOption">
+                  <a-select-option v-for="item in productBrandList" :key="item.productBrandSn" :value="item.productBrandSn">{{ item.productBrandName }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="产品类别">
+                <a-cascader
+                  @change="changeProductType"
+                  change-on-select
+                  :options="productTypeList"
+                  :fieldNames="{ label: 'productTypeName', value: 'id', children: 'children' }"
+                  id="productInfoList-productType"
+                  placeholder="请选择产品类别"
+                  allowClear />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="状态">
+                <v-select code="ENABLED_FLAG" id="productInfoList-enabledFlag" v-model="queryParam.enabledFlag" allowClear placeholder="请选择状态"></v-select>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :md="6" :sm="24">
+            <a-button style="margin-bottom: 18px;" type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="productInfoList-refresh">查询</a-button>
+            <a-button style="margin: 0 0 18px 8px" @click="resetSearchForm" :disabled="disabled" id="productInfoList-reset">重置</a-button>
+            <a @click="advanced=!advanced" style="margin-left: 8px">
+              {{ advanced ? '收起' : '展开' }}
+              <a-icon :type="advanced ? 'up' : 'down'"/>
+            </a>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="productInfoList-add" type="primary" @click="handleEdit()">新增产品</a-button>
+      <a-button id="productInfoList-import" :disabled="!hasSelected" :loading="loading" @click="handleBatchAudit" style="margin: 0 15px;">批量审核</a-button>
+      <a-button id="productInfoList-import" :disabled="!hasSelected" :loading="loading" @click="handleBatchLaunch" style="margin: 0 15px;">批量上线</a-button>
+      <a-button id="productInfoList-import" :disabled="!hasSelected" :loading="loading" @click="handleBatchDownline" style="margin: 0 15px;">批量下线</a-button>
+      <span style="margin-left: 8px">
+        <template v-if="hasSelected">{{ `已选 ${selectedRowKeys.length} 项` }}</template>
+      </span>
+    </div>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :scroll="{ x: 1850 }"
+      bordered>
+      <!-- 产品图片 -->
+      <template slot="productPic" slot-scope="text, record">
+        <img :src="record.productPic[0]" width="30" height="30" class="productPic" @click="openPicModal=true" />
+      </template>
+      <!-- 产品类别 -->
+      <template slot="productType" slot-scope="text, record">
+        <a-tooltip placement="top">
+          <template slot="title">
+            <span>{{ record.productTypeName }}</span>
+          </template>
+          {{ record.productTypeName3 }}
+        </a-tooltip>
+      </template>
+      <!-- 状态 -->
+      <template slot="status" slot-scope="text, record">
+        <a-tag :color="record.status==1?'green':'red'" >{{ record.status==1? '待提交': '待单据审核' }}</a-tag>
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="handleAudit(record)" id="productInfoList-audit-btn">审核</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleLaunch(record)" id="productInfoList-launch-btn">上线</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDownline(record)" id="productInfoList-downline-btn">下线</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleEdit(record)" id="productInfoList-edit-btn">编辑</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDetail(record)" id="productInfoList-detail-btn">详情</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDel(record)" id="productInfoList-del-btn">删除</a-button>
+      </template>
+    </s-table>
+    <!-- 产品详情 -->
+    <product-info-detail-modal :openModal="openModal" :itemId="itemId" @close="closeModal" />
+    <!-- 查看产品图片 -->
+    <look-pic-modal :openModal="openPicModal" :itemId="itemId" @close="closePicModal" />
+  </a-card>
+</template>
+
+<script>
+import { dealerProductBrandQuery } from '@/api/dealerProductBrand'
+import { dealerProductTypeQuery } from '@/api/dealerProductType'
+import { dealerProductList, dealerProductUpdate, dealerProductExport } from '@/api/dealerProduct'
+import { STable, VSelect } from '@/components'
+import productInfoDetailModal from './detailModal.vue'
+import lookPicModal from './lookPicModal.vue'
+export default {
+  components: { STable, VSelect, productInfoDetailModal, lookPicModal },
+  data () {
+    return {
+      advanced: false, // 高级搜索 展开/关闭
+      queryParam: { //  查询条件
+        productCode: '', //  产品编码
+        productName: '', //  产品名称
+        origCode: '', //  原厂编码
+        productBrandSn: undefined, //  产品品牌
+        productTypeSn1: '', //  产品一级类别
+        productTypeSn2: '', //  产品二级类别
+        productTypeSn3: '', //  产品三级类别
+        enabledFlag: undefined, //  状态
+        beginDate: '', //  创建时间  开始时间
+        endDate: '' //  创建时间  结束时间
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      exportLoading: false, // 导出loading
+      dateFormat: 'YYYY-MM-DD',
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: 160, align: 'center' },
+        { title: '产品图片', scopedSlots: { customRender: 'productPic' }, width: 140, align: 'center' },
+        { title: '产品名称', dataIndex: 'productName', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '产品编码', dataIndex: 'productCode', width: 140, align: 'center' },
+        { title: '原厂编码', dataIndex: 'origCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '品牌', dataIndex: 'productBrandName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '类别', scopedSlots: { customRender: 'productType' }, width: 200, align: 'center' },
+        { title: '是否箭冠产品', dataIndex: 'terminaldsdPrice', width: 120, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '最后修改时间', dataIndex: 'cssreateDate', width: 160, align: 'center' },
+        { title: '产品状态', scopedSlots: { customRender: 'status' }, width: 100, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 310, align: 'center', fixed: 'right' }
+      ],
+      selectedRowKeys: [], // Check here to configure the default column
+      loading: false,
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return dealerProductList(Object.assign(parameter, this.queryParam)).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //     const productTypeName1 = data.list[i].productTypeName1 ? data.list[i].productTypeName1 : ''
+        //     const productTypeName2 = data.list[i].productTypeName2 ? ' > ' + data.list[i].productTypeName2 : ''
+        //     const productTypeName3 = data.list[i].productTypeName3 ? ' > ' + data.list[i].productTypeName3 : ''
+        //     data.list[i].productTypeName = productTypeName1 + productTypeName2 + productTypeName3
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', productNum: 'jgqp11111111111', productName: '产品1', productPic: ['https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg', 'https://qn.antdv.com/vue.png'], productOldNum: 'jgqp111123545', productBrand: '箭冠品牌', productType: '产品分类1', inventoryNum: '5', inventoryMoney: '122' }
+            ]
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      openModal: false, //  查看详情  弹框
+      openPicModal: false, //  查看图片 弹框
+      itemId: '', //  当前产品id
+      productBrandList: [], //  品牌下拉数据
+      productTypeList: [] //  类别下拉数据
+    }
+  },
+  computed: {
+    hasSelected () {
+      return this.selectedRowKeys.length > 0
+    }
+  },
+  methods: {
+    // 不可选日期
+    disabledDate (date, dateStrings) {
+      return date && date.valueOf() > Date.now()
+    },
+    //  创建时间  change
+    creatTimechange (dates, dateStrings) {
+      this.queryParam.beginDate = dateStrings[0]
+      this.queryParam.endDate = dateStrings[1]
+    },
+    // // 批量出库
+    // handleOutbounds () {
+    //   this.loading = true
+    //   // ajax request after empty completing
+    //   setTimeout(() => {
+    //     this.loading = false
+    //     this.selectedRowKeys = []
+    //   }, 1000)
+    // },
+    onSelectChange (selectedRowKeys) {
+      console.log('selectedRowKeys changed: ', selectedRowKeys)
+      this.selectedRowKeys = selectedRowKeys
+    },
+    // 批量审核
+    handleBatchAudit () {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要批量审核吗?',
+        centered: true,
+        onOk () {
+          // salesDel({ id: row.id }).then(res => {
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    // 批量上线
+    handleBatchLaunch () {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要批量上线吗?',
+        centered: true,
+        onOk () {
+          // salesDel({ id: row.id }).then(res => {
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    // 批量下线
+    handleBatchDownline () {},
+    //  重置
+    resetSearchForm () {
+      this.queryParam.productCode = ''
+      this.queryParam.productName = ''
+      this.queryParam.origCode = ''
+      this.queryParam.productBrandSn = undefined
+      this.queryParam.productTypeSn1 = ''
+      this.queryParam.productTypeSn2 = ''
+      this.queryParam.productTypeSn3 = ''
+      this.queryParam.enabledFlag = undefined
+      this.queryParam.beginDate = ''
+      this.queryParam.endDate = ''
+      this.$refs.table.refresh(true)
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      if (row) { //  编辑
+        this.$router.push({ path: `/productManagement/productInfo/edit/${row.id}` })
+      } else { //  新增
+        this.$router.push({ path: '/productManagement/productInfo/add' })
+      }
+    },
+    // 审核
+    handleAudit (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要审核吗?',
+        centered: true,
+        onOk () {
+          // salesDel({ id: row.id }).then(res => {
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    // 上线
+    handleLaunch (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要上线吗?',
+        centered: true,
+        onOk () {
+          // salesDel({ id: row.id }).then(res => {
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    // 下线
+    handleDownline (row) {},
+    // 删除
+    handleDel (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要删除吗?',
+        centered: true,
+        onOk () {
+          // salesDel({ id: row.id }).then(res => {
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    filterOption (input, option) {
+      return (
+        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      )
+    },
+    //  详情
+    handleDetail (row) {
+      this.itemId = row.id
+      this.openModal = true
+    },
+    //  关闭弹框
+    closeModal () {
+      this.itemId = ''
+      this.openModal = false
+    },
+    // 关闭查看图片弹框
+    closePicModal () {
+      this.itemId = ''
+      this.openPicModal = false
+    },
+    //  产品类别  change
+    changeProductType (val, opt) {
+      this.queryParam.productTypeSn1 = val[0] ? val[0] : ''
+      this.queryParam.productTypeSn2 = val[1] ? val[1] : ''
+      this.queryParam.productTypeSn3 = val[2] ? val[2] : ''
+    },
+    //  产品品牌  列表
+    getProductBrand () {
+      dealerProductBrandQuery({}).then(res => {
+        if (res.status == 200) {
+          this.productBrandList = res.data
+        } else {
+          this.productBrandList = []
+        }
+      })
+    },
+    //  产品类别  列表
+    getProductType () {
+      dealerProductTypeQuery({}).then(res => {
+        if (res.status == 200) {
+          this.productTypeList = res.data
+        } else {
+          this.productTypeList = []
+        }
+      })
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.getProductBrand()
+      vm.getProductType()
+    })
+  }
+}
+</script>
+
+<style lang="less">
+  .productInfoList-wrap{
+    .productPic{
+      cursor: pointer;
+    }
+  }
+</style>

+ 118 - 0
src/views/productManagement/productInfo/lookPicModal.vue

@@ -0,0 +1,118 @@
+<template>
+  <a-modal
+    centered
+    class="productInfoPicDetail-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="产品图片"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="800">
+    <a-carousel arrows>
+      <div slot="prevArrow" slot-scope="props" class="custom-slick-arrow" style="left: 10px;zIndex: 1">
+        <a-icon type="left-circle" />
+      </div>
+      <div slot="nextArrow" slot-scope="props" class="custom-slick-arrow" style="right: 10px">
+        <a-icon type="right-circle" />
+      </div>
+      <div><h3>1</h3></div>
+      <div><h3>2</h3></div>
+      <div><h3>3</h3></div>
+      <div><h3>4</h3></div>
+    </a-carousel>
+    <div class="btn-cont"><a-button id="product-management-detail-modal-back" @click="isShow = false">返回列表</a-button></div>
+  </a-modal>
+</template>
+
+<script>
+// import { dealerProductDetail } from '@/api/dealerProduct'
+export default {
+  name: 'ProductInfoPicDetailModal',
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      detailsData: null //  详情数据
+    }
+  },
+  methods: {
+    //  获取详情
+    getDetail () {
+      // dealerProductDetail({ id: this.itemId }).then(res => {
+      //   if (res.status == 200) {
+      //     this.detailsData = res.data
+      //   }else{
+      //     this.detailsData = null
+      //   }
+      // })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }
+    },
+    itemId (newValue, oldValue) {
+      if (this.isShow && newValue) {
+        this.getDetail()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .productInfoPicDetail-modal{
+    .ant-modal-body {
+    	padding: 40px 40px 24px;
+    }
+    .btn-cont {
+    	text-align: center;
+    	margin: 35px 0 10px;
+    }
+  }
+</style>
+<style scoped>
+  /* For demo */
+  .ant-carousel >>> .slick-slide {
+    text-align: center;
+    height: 160px;
+    line-height: 160px;
+    background: #364d79;
+    overflow: hidden;
+  }
+
+  .ant-carousel >>> .custom-slick-arrow {
+    width: 25px;
+    height: 25px;
+    font-size: 25px;
+    color: #fff;
+    background-color: rgba(31, 45, 61, 0.11);
+    opacity: 0.3;
+  }
+  .ant-carousel >>> .custom-slick-arrow:before {
+    display: none;
+  }
+  .ant-carousel >>> .custom-slick-arrow:hover {
+    opacity: 0.5;
+  }
+
+  .ant-carousel >>> .slick-slide h3 {
+    color: #fff;
+  }
+</style>

+ 8 - 0
src/views/productManagement/productLaunchAudit/list.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 8 - 0
src/views/productManagement/productLevel/list.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 8 - 0
src/views/productManagement/productOfflineAudit/list.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 8 - 0
src/views/productManagement/productPricing/list.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 1 - 1
src/views/salesManagement/examineVerify/list.vue

@@ -88,7 +88,7 @@
       bordered>
       <!-- 状态 -->
       <template slot="status" slot-scope="text, record">
-        <span :class="record.status==1?'green':'red'"> {{ record.status==1? '待入库': '待审核' }} </span>
+        <a-tag :color="record.status==1?'green':'red'" >{{ record.status==1? '待提交': '待单据审核' }}</a-tag>
       </template>
       <!-- 操作 -->
       <template slot="action" slot-scope="text, record">