2 Commitit 34d77e6385 ... 74ad31c171

Tekijä SHA1 Viesti Päivämäärä
  GXL 74ad31c171 Merge branch 'master' of http://139.9.104.214:3000/Szw/yzzn-middleground-supplier 1 vuosi sitten
  GXL c43578b4c3 商品登记,上架记录,图片上传组件修改 1 vuosi sitten

+ 35 - 6
src/api/supplier/goodsDetail.js

@@ -1,6 +1,6 @@
 import request from '@/utils/request'
 
-// 创建商品详情
+// 创建上架记录
 export function createGoodsDetail(data) {
   return request({
     url: '/supplier/goods-detail/create',
@@ -9,7 +9,7 @@ export function createGoodsDetail(data) {
   })
 }
 
-// 更新商品详情
+// 更新上架记录
 export function updateGoodsDetail(data) {
   return request({
     url: '/supplier/goods-detail/update',
@@ -18,7 +18,7 @@ export function updateGoodsDetail(data) {
   })
 }
 
-// 删除商品详情
+// 删除上架记录
 export function deleteGoodsDetail(id) {
   return request({
     url: '/supplier/goods-detail/delete?id=' + id,
@@ -26,7 +26,7 @@ export function deleteGoodsDetail(id) {
   })
 }
 
-// 获得商品详情
+// 获得上架记录
 export function getGoodsDetail(id) {
   return request({
     url: '/supplier/goods-detail/get?id=' + id,
@@ -34,7 +34,7 @@ export function getGoodsDetail(id) {
   })
 }
 
-// 获得商品详情分页
+// 获得上架记录分页
 export function getGoodsDetailPage(query) {
   return request({
     url: '/supplier/goods-detail/page',
@@ -43,7 +43,7 @@ export function getGoodsDetailPage(query) {
   })
 }
 
-// 导出商品详情 Excel
+// 导出上架记录 Excel
 export function exportGoodsDetailExcel(query) {
   return request({
     url: '/supplier/goods-detail/export-excel',
@@ -52,3 +52,32 @@ export function exportGoodsDetailExcel(query) {
     responseType: 'blob'
   })
 }
+
+// 补货
+export function addGoodsDetailUpNum(data) {
+  return request({
+    url: '/supplier/goods-detail/addUpNum',
+    method: 'put',
+    data: data
+  })
+}
+
+//状态修改
+export function changeGoodsDetailStatus(id, state) {
+  const data = {
+    id,
+    state
+  }
+  return request({
+    url: '/supplier/goods-detail/update-status',
+    method: 'put',
+    data: data
+  })
+}
+
+export function getAddAgainLog(associate) {
+  return request({
+    url: '/supplier/goods-detail/getAddAgainLog?associate=' + associate,
+    method: 'get'
+  })
+}

+ 1 - 1
src/components/ImageUpload/index.vue

@@ -15,8 +15,8 @@
         :headers="headers"
         :file-list="fileList"
         :on-preview="handlePictureCardPreview"
-        :class="{hide: this.fileList.length >= this.limit}"
     >
+    <!-- :class="{hide: this.fileList.length >= this.limit}" 上方el-upload参数,暂时注释删除,如有问题可加上调试 -->
       <i class="el-icon-plus"></i>
     </el-upload>
 

+ 5 - 1
src/utils/dict.js

@@ -311,7 +311,11 @@ export const DICT_TYPE = {
 
   DELIVERY_MODE: 'delivery_mode',
 
-  SHIPMENTS_STATUS: 'logistics_stutas'
+  SHIPMENTS_STATUS: 'logistics_stutas',
+
+  ON_SOURCE: 'on_source',//上架来源(方式)
+
+  GOODS_STATE: 'goods_state',//商品状态
 }
 
 /**

+ 52 - 3
src/views/supplier/billInfo/index.vue

@@ -2,19 +2,19 @@
   <div class="app-container">
 
     <!-- 搜索工作栏 -->
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="78px">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="70px">
       <el-form-item label="账单编号" prop="billCode">
         <el-input v-model="queryParams.billCode" placeholder="请输入账单编号" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="订单编号" prop="orderCode">
         <el-input v-model="queryParams.orderCode" placeholder="请输入订单编号" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="账单类型" prop="category">
+      <!-- <el-form-item label="账单类型" prop="category">
         <el-select v-model="queryParams.category" placeholder="请选择账单类型" clearable @keyup.enter.native="handleQuery">
           <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BILL_CATEGORY)" :key="dict.value" :label="dict.label"
             :value="dict.value" />
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="账单状态" prop="state">
         <el-select v-model="queryParams.state" placeholder="请选择账单状态" clearable @keyup.enter.native="handleQuery">
           <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BILL_STATE)" :key="dict.value" :label="dict.label"
@@ -22,6 +22,37 @@
         </el-select>
       </el-form-item>
       <el-form-item>
+        <el-popover placement="bottom" width="300" trigger="click">
+          <el-form-item label="账单编号" prop="billCode">
+            <el-input v-model="queryParams.billCode" placeholder="请输入账单编号" clearable
+              @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="订单编号" prop="orderCode">
+            <el-input v-model="queryParams.orderCode" placeholder="请输入订单编号" clearable
+              @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="账单类型" prop="category">
+            <el-select v-model="queryParams.category" placeholder="请选择账单类型" clearable @keyup.enter.native="handleQuery">
+              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BILL_CATEGORY)" :key="dict.value"
+                :label="dict.label" :value="dict.value" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="账单状态" prop="state">
+            <el-select v-model="queryParams.state" placeholder="请选择账单状态" clearable @keyup.enter.native="handleQuery">
+              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BILL_STATE)" :key="dict.value" :label="dict.label"
+                :value="dict.value" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="是否结清" prop="finished">
+            <el-radio-group v-model="queryParams.finished">
+              <el-radio label="0">否</el-radio>
+              <el-radio label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+          <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+          <el-button slot="reference" style="margin-right: 10px;">复合查询</el-button>
+        </el-popover>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
@@ -226,6 +257,21 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="账单总金额" prop="total">
+              <el-input v-model="formPayLog.total" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="已付金额" prop="paid">
+              <el-input v-model="formPayLog.paid" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="未付金额" prop="unpaid">
+              <el-input v-model="formPayLog.unpaid" disabled />
+            </el-form-item>
+          </el-col>
           <el-col :span="24">
             <el-table :data="formPayLog.list" v-loading="loadingPayLog">
               <el-table-column label="序号" align="center" prop="id" />
@@ -335,6 +381,9 @@ export default {
       this.formPayLog.orderCode = row.orderCode;
       this.formPayLog.billCode = row.billCode;
       this.formPayLog.state = row.state;
+      this.formPayLog.total = row.total;
+      this.formPayLog.paid = row.paid;
+      this.formPayLog.unpaid = row.unpaid;
       this.formPayLog.list = [];
       this.loadingPayLog = true
       //获取付款记录

+ 533 - 139
src/views/supplier/goodsDetail/index.vue

@@ -2,47 +2,65 @@
   <div class="app-container">
 
     <!-- 搜索工作栏 -->
-    <!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="商品编号" prop="code">
-        <el-input v-model="queryParams.code" placeholder="请输入商品编号" clearable @keyup.enter.native="handleQuery"/>
+        <el-input v-model="queryParams.code" placeholder="请输入商品编号" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="商品名称" prop="name">
-        <el-input v-model="queryParams.name" placeholder="请输入商品名称" clearable @keyup.enter.native="handleQuery"/>
-      </el-form-item>
-      <el-form-item label="关键词" prop="keyword">
-        <el-input v-model="queryParams.keyword" placeholder="请输入关键词" clearable @keyup.enter.native="handleQuery"/>
-      </el-form-item>
-      <el-form-item label="商品品牌" prop="brand">
-        <el-input v-model="queryParams.brand" placeholder="请输入商品品牌" clearable @keyup.enter.native="handleQuery"/>
+        <el-input v-model="queryParams.name" placeholder="请输入商品名称" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="商品状态" prop="state">
-        <el-input v-model="queryParams.state" placeholder="请输入商品状态" clearable @keyup.enter.native="handleQuery"/>
-      </el-form-item>
-      <el-form-item label="商品类型" prop="category">
-        <el-input v-model="queryParams.category" placeholder="请输入商品类型" clearable @keyup.enter.native="handleQuery"/>
-      </el-form-item>
-      <el-form-item label="上架时间" prop="upTime">
-        <el-date-picker v-model="queryParams.upTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
-                        range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
+        <el-select v-model="queryParams.state" placeholder="请选择商品状态" clearable @keyup.enter.native="handleQuery">
+          <el-option v-for="dict in this.getDictDatas(DICT_TYPE.GOODS_STATE)" :key="dict.value" :label="dict.label"
+            :value="dict.value" />
+        </el-select>
       </el-form-item>
       <el-form-item>
+        <el-popover placement="bottom" width="300" trigger="click">
+          <el-form-item label="商品编号" prop="code">
+            <el-input v-model="queryParams.code" placeholder="请输入商品编号" clearable @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="商品名称" prop="name">
+            <el-input v-model="queryParams.name" placeholder="请输入商品名称" clearable @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="商品类型" prop="category">
+            <el-cascader v-model="queryParams.category" :options="categoryOptions" :show-all-levels="false"
+              :props="{ label: 'name', value: 'id', children: 'children', checkStrictly: true }" />
+          </el-form-item>
+          <el-form-item label="商品品牌" prop="brand">
+            <el-input v-model="queryParams.brand" placeholder="请输入商品品牌" clearable @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="关键词" prop="keyword">
+            <el-input v-model="queryParams.keyword" placeholder="请输入关键词" clearable @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="商品状态" prop="state">
+            <el-select v-model="queryParams.state" placeholder="请选择商品状态" clearable @keyup.enter.native="handleQuery">
+              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.GOODS_STATE)" :key="dict.value" :label="dict.label"
+                :value="dict.value" />
+            </el-select>
+          </el-form-item>
+
+          <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+          <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+          <el-button slot="reference" style="margin-right: 10px;">复合查询</el-button>
+        </el-popover>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
-    </el-form> -->
+    </el-form>
 
     <!-- 操作工具栏 -->
-    <!-- <el-row :gutter="10" class="mb8">
+    <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
-                   v-hasPermi="['supplier:goods-detail:create']">新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
-                   v-hasPermi="['supplier:goods-detail:export']">导出</el-button>
+          v-hasPermi="['supplier:goods-detail:create']">新增上架</el-button>
       </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          :loading="exportLoading" v-hasPermi="['supplier:goods-detail:export']">导出</el-button>
+      </el-col> -->
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row> -->
+    </el-row>
 
     <el-row :gutter="10" class="mb8">
 
@@ -56,126 +74,377 @@
           style="overflow: auto;" />
       </el-col>
       <el-col :span="20">
-        <el-table v-loading="loading" :data="list">
-          <el-table-column label="序号" align="center" prop="id" />
-          <el-table-column label="商品id" align="center" prop="goodsId" />
-          <el-table-column label="商品编号" align="center" prop="code" />
-          <el-table-column label="商品名称" align="center" prop="name" />
-          <el-table-column label="关键词" align="center" prop="keyword" />
-          <el-table-column label="单位" align="center" prop="unit" />
-          <el-table-column label="市场价" align="center" prop="marketPrice" />
-          <el-table-column label="平台价" align="center" prop="platPrice" />
-          <el-table-column label="商品品牌" align="center" prop="brand" />
-          <el-table-column label="库存" align="center" prop="num" />
-          <el-table-column label="商品状态" align="center" prop="state" />
-          <el-table-column label="商品类型" align="center" prop="category" />
-          <el-table-column label="销售数量" align="center" prop="saleNum" />
-          <el-table-column label="付款策略" align="center" prop="payMethod" />
-          <el-table-column label="售后策略" align="center" prop="aftersaleStrategy" />
-          <el-table-column label="价格策略" align="center" prop="priceStrategy" />
-          <el-table-column label="上架方式" align="center" prop="upMethod" />
-          <el-table-column label="上架数量" align="center" prop="upNum" />
-          <el-table-column label="上架时间" align="center" prop="upTime" width="180">
-            <template v-slot="scope">
-              <span>{{ parseTime(scope.row.upTime) }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="是否置顶" align="center" prop="sticky" />
-          <el-table-column label="商品详情" align="center" prop="productDetail" />
-          <el-table-column label="商品封面" align="center" prop="productPhoto" />
-          <el-table-column label="创建时间" align="center" prop="createTime" width="180">
-            <template v-slot="scope">
-              <span>{{ parseTime(scope.row.createTime) }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-            <template v-slot="scope">
-              <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-                v-hasPermi="['supplier:goods-detail:update']">修改</el-button>
-              <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-                v-hasPermi="['supplier:goods-detail:delete']">删除</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-        <!-- 分页组件 -->
-        <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
-          @pagination="getList" />
+        <el-tabs type="border-card" value="0" @tab-click="handleClick">
+          <el-tab-pane label="全部" name="0">
+            <el-table v-loading="loading" :data="list" :show-header="false">
+              <el-table-column label="商品封面" align="center" prop="cover" width="250">
+                <template v-slot="scope">
+                  <img :src="scope.row.cover" width="200px" />
+                </template>
+              </el-table-column>
+              <el-table-column label="商品详情" align="center" width="680">
+                <template v-slot="scope">
+                  <el-descriptions :title="`商品名称:` + scope.row.name">
+                    <el-descriptions-item label="商品编号">{{ scope.row.code }}</el-descriptions-item>
+                    <el-descriptions-item label="上架数量">{{ scope.row.upNum }}</el-descriptions-item>
+                    <el-descriptions-item label="市场价">{{ scope.row.marketPrice }}</el-descriptions-item>
+                    <el-descriptions-item label="计量单位">{{ scope.row.unit }}</el-descriptions-item>
+                    <el-descriptions-item label="库存数量">{{ scope.row.num }}</el-descriptions-item>
+                    <el-descriptions-item label="平台价">{{ scope.row.platPrice }}</el-descriptions-item>
+                    <el-descriptions-item label="商品品牌">{{ scope.row.brand }}</el-descriptions-item>
+                    <el-descriptions-item label="销售数量">{{ scope.row.saleNum }}</el-descriptions-item>
+                    <el-descriptions-item label="商品状态">
+                      <dict-tag :type="DICT_TYPE.GOODS_STATE" :value="scope.row.state" />
+                    </el-descriptions-item>
+                    <el-descriptions-item label="商品类型">
+                      <el-tag> {{ getCategoryName(scope.row.category) }}</el-tag>
+                    </el-descriptions-item>
+                    <el-descriptions-item label="搜索关键词">
+                      <el-tag v-for="item in scope.row.keyword"> {{ item }}</el-tag>
+                    </el-descriptions-item>
+                  </el-descriptions>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
+                <template v-slot="scope">
+                  <el-button class="tableButton" size="small" type="success"
+                    @click="handleDetail(scope.row)">详情</el-button>
+                  <el-button class="tableButton" size="small" type="primary"
+                    @click="handleUpdate(scope.row)">修改</el-button>
+                  <el-button class="tableButton" size="small" type="warning" @click="handleOn(scope.row)">补货</el-button>
+                  <el-button class="tableButton" size="small" type="danger"
+                    @click="handleDown(scope.row)">下架</el-button>
+                  <el-button class="tableButton" size="small" type="info"
+                    @click="handleOnLog(scope.row)">补货记录</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <!-- 分页组件 -->
+            <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo"
+              :limit.sync="queryParams.pageSize" @pagination="getList" />
+          </el-tab-pane>
+          <el-tab-pane label="在售中" name="1">
+            <el-table v-loading="loading" :data="list" :show-header="false">
+              <el-table-column label="商品封面" align="center" prop="cover" width="250">
+                <template v-slot="scope">
+                  <img :src="scope.row.cover" width="200px" />
+                </template>
+              </el-table-column>
+              <el-table-column label="商品详情" align="center" width="680">
+                <template v-slot="scope">
+                  <el-descriptions :title="`商品名称:` + scope.row.name">
+                    <el-descriptions-item label="商品编号">{{ scope.row.code }}</el-descriptions-item>
+                    <el-descriptions-item label="上架数量">{{ scope.row.upNum }}</el-descriptions-item>
+                    <el-descriptions-item label="市场价">{{ scope.row.marketPrice }}</el-descriptions-item>
+                    <el-descriptions-item label="计量单位">{{ scope.row.unit }}</el-descriptions-item>
+                    <el-descriptions-item label="库存数量">{{ scope.row.num }}</el-descriptions-item>
+                    <el-descriptions-item label="平台价">{{ scope.row.platPrice }}</el-descriptions-item>
+                    <el-descriptions-item label="商品品牌">{{ scope.row.brand }}</el-descriptions-item>
+                    <el-descriptions-item label="销售数量">{{ scope.row.saleNum }}</el-descriptions-item>
+                    <el-descriptions-item label="商品状态">
+                      <dict-tag :type="DICT_TYPE.GOODS_STATE" :value="scope.row.state" />
+                    </el-descriptions-item>
+                    <el-descriptions-item label="商品类型">
+                      <el-tag> {{ getCategoryName(scope.row.category) }}</el-tag>
+                    </el-descriptions-item>
+                    <el-descriptions-item label="搜索关键词">
+                      <el-tag v-for="item in scope.row.keyword"> {{ item }}</el-tag>
+                    </el-descriptions-item>
+                  </el-descriptions>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
+                <template v-slot="scope">
+                  <el-button class="tableButton" size="small" type="success"
+                    @click="handleDetail(scope.row)">详情</el-button>
+                  <el-button class="tableButton" size="small" type="primary"
+                    @click="handleUpdate(scope.row)">修改</el-button>
+                  <el-button class="tableButton" size="small" type="warning" @click="handleOn(scope.row)">补货</el-button>
+                  <el-button class="tableButton" size="small" type="danger"
+                    @click="handleDown(scope.row)">下架</el-button>
+                  <el-button class="tableButton" size="small" type="info"
+                    @click="handleOnLog(scope.row)">上架记录</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <!-- 分页组件 -->
+            <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo"
+              :limit.sync="queryParams.pageSize" @pagination="getList" />
+          </el-tab-pane>
+          <el-tab-pane label="售罄" name="2">
+            <el-table v-loading="loading" :data="list" :show-header="false">
+              <el-table-column label="商品封面" align="center" prop="cover" width="250">
+                <template v-slot="scope">
+                  <img :src="scope.row.cover" width="200px" />
+                </template>
+              </el-table-column>
+              <el-table-column label="商品详情" align="center" width="680">
+                <template v-slot="scope">
+                  <el-descriptions :title="`商品名称:` + scope.row.name">
+                    <el-descriptions-item label="商品编号">{{ scope.row.code }}</el-descriptions-item>
+                    <el-descriptions-item label="上架数量">{{ scope.row.upNum }}</el-descriptions-item>
+                    <el-descriptions-item label="市场价">{{ scope.row.marketPrice }}</el-descriptions-item>
+                    <el-descriptions-item label="计量单位">{{ scope.row.unit }}</el-descriptions-item>
+                    <el-descriptions-item label="库存数量">{{ scope.row.num }}</el-descriptions-item>
+                    <el-descriptions-item label="平台价">{{ scope.row.platPrice }}</el-descriptions-item>
+                    <el-descriptions-item label="商品品牌">{{ scope.row.brand }}</el-descriptions-item>
+                    <el-descriptions-item label="销售数量">{{ scope.row.saleNum }}</el-descriptions-item>
+                    <el-descriptions-item label="商品状态">
+                      <dict-tag :type="DICT_TYPE.GOODS_STATE" :value="scope.row.state" />
+                    </el-descriptions-item>
+                    <el-descriptions-item label="商品类型">
+                      <el-tag> {{ getCategoryName(scope.row.category) }}</el-tag>
+                    </el-descriptions-item>
+                    <el-descriptions-item label="搜索关键词">
+                      <el-tag v-for="item in scope.row.keyword"> {{ item }}</el-tag>
+                    </el-descriptions-item>
+                  </el-descriptions>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
+                <template v-slot="scope">
+                  <el-button class="tableButton" size="small" type="success"
+                    @click="handleDetail(scope.row)">详情</el-button>
+                  <el-button class="tableButton" size="small" type="primary"
+                    @click="handleUpdate(scope.row)">修改</el-button>
+                  <el-button class="tableButton" size="small" type="warning" @click="handleOn(scope.row)">补货</el-button>
+                  <el-button class="tableButton" size="small" type="danger"
+                    @click="handleDown(scope.row)">下架</el-button>
+                  <el-button class="tableButton" size="small" type="info"
+                    @click="handleOnLog(scope.row)">上架记录</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <!-- 分页组件 -->
+            <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo"
+              :limit.sync="queryParams.pageSize" @pagination="getList" />
+          </el-tab-pane>
+          <el-tab-pane label="已下架" name="3">
+            <el-table v-loading="loading" :data="list" :show-header="false">
+              <el-table-column label="商品封面" align="center" prop="cover" width="250">
+                <template v-slot="scope">
+                  <img :src="scope.row.cover" width="200px" />
+                </template>
+              </el-table-column>
+              <el-table-column label="商品详情" align="center" width="680">
+                <template v-slot="scope">
+                  <el-descriptions :title="`商品名称:` + scope.row.name">
+                    <el-descriptions-item label="商品编号">{{ scope.row.code }}</el-descriptions-item>
+                    <el-descriptions-item label="上架数量">{{ scope.row.upNum }}</el-descriptions-item>
+                    <el-descriptions-item label="市场价">{{ scope.row.marketPrice }}</el-descriptions-item>
+                    <el-descriptions-item label="计量单位">{{ scope.row.unit }}</el-descriptions-item>
+                    <el-descriptions-item label="库存数量">{{ scope.row.num }}</el-descriptions-item>
+                    <el-descriptions-item label="平台价">{{ scope.row.platPrice }}</el-descriptions-item>
+                    <el-descriptions-item label="商品品牌">{{ scope.row.brand }}</el-descriptions-item>
+                    <el-descriptions-item label="销售数量">{{ scope.row.saleNum }}</el-descriptions-item>
+                    <el-descriptions-item label="商品状态">
+                      <dict-tag :type="DICT_TYPE.GOODS_STATE" :value="scope.row.state" />
+                    </el-descriptions-item>
+                    <el-descriptions-item label="商品类型">
+                      <el-tag> {{ getCategoryName(scope.row.category) }}</el-tag>
+                    </el-descriptions-item>
+                    <el-descriptions-item label="搜索关键词">
+                      <el-tag v-for="item in scope.row.keyword"> {{ item }}</el-tag>
+                    </el-descriptions-item>
+                  </el-descriptions>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
+                <template v-slot="scope">
+                  <el-button class="tableButton" size="small" type="success"
+                    @click="handleDetail(scope.row)">详情</el-button>
+                  <el-button class="tableButton" size="small" type="primary"
+                    @click="handleUpdate(scope.row)">修改</el-button>
+                  <el-button class="tableButton" size="small" type="warning" @click="handleOn(scope.row)">补货</el-button>
+                  <el-button class="tableButton" size="small" type="danger"
+                    @click="handleDown(scope.row)">下架</el-button>
+                  <el-button class="tableButton" size="small" type="info"
+                    @click="handleOnLog(scope.row)">上架记录</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <!-- 分页组件 -->
+            <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo"
+              :limit.sync="queryParams.pageSize" @pagination="getList" />
+          </el-tab-pane>
+        </el-tabs>
       </el-col>
     </el-row>
 
 
     <!-- 对话框(添加 / 修改) -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="商品id" prop="goodsId">
-          <el-input v-model="form.goodsId" placeholder="请输入商品id" />
-        </el-form-item>
+    <el-dialog :title="title" :visible.sync="open" width="800px" v-dialogDrag append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="93px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="商品编号" prop="code">
+              <el-input v-model="form.code" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="商品名称" prop="name">
+              <el-input v-model="form.name" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="付款方式" prop="payMethod">
+              <el-select v-model="form.payMethod" placeholder="请选择付款方式" multiple>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_METHOD)" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="售后策略" prop="aftersaleStrategy">
+              <el-select v-model="form.aftersaleStrategy" placeholder="请选择售后策略" clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.AFTERSALE_STRATEGY)" :key="parseInt(dict.value)"
+                  :label="dict.label" :value="parseInt(dict.value)" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="价格策略" prop="priceStrategy">
+              <el-select v-model="form.priceStrategy" placeholder="请选择价格策略" clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PRICE_STRATEGY)" :key="dict.value"
+                  :label="dict.label" :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="是否置顶" prop="sticky">
+              <el-select v-model="form.sticky" placeholder="请选择是否置顶" clearable>
+                <el-option v-for="dict in [{ label: '否', value: 0 }, { label: '是', value: 1 }]" :key="dict.value"
+                  :label="dict.label" :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <!-- 阶梯价格策略 -->
+          <el-col :span="24" v-if="form.priceStrategy == 2" style="margin-bottom: 20px;">
+            <el-table :data="priceStrategyTableData" style="width: 100%">
+              <el-table-column prop="level" align="center" label="阶梯" />
+              <el-table-column prop="condition" align="center" label="数量条件" />
+              <el-table-column prop="unit" align="center" label="单位" />
+              <el-table-column prop="category" align="center" label="策略类型" />
+              <el-table-column prop="price" align="center" label="价格/RMB(元)" />
+            </el-table>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="自定义策略" prop="customStrategy">
+              <el-input type="textarea" v-model="form.customStrategy" placeholder="请输入自定义策略" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="上架价格" prop="marketPrice">
+              <el-input-number v-model="form.marketPrice" :precision="2" :step="100" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="单位" prop="unit">
+              <el-input v-model="form.unit" placeholder="请输入单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="平台价" prop="platPrice">
+              <el-input-number v-model="form.platPrice" :precision="2" :step="100" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="上架方式" prop="upMethod">
+              <el-select v-model="form.upMethod" placeholder="请选择上架方式" clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.ON_SOURCE)" :key="parseInt(dict.value)"
+                  :label="dict.label" :value="parseInt(dict.value)" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="上架数量" prop="upNum">
+              <el-input-number :precision="0" :min="0" v-model="form.upNum" placeholder="请输入数量" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="立即上架" prop="upNow">
+              <el-select v-model="form.upNow" placeholder="请选择是否立即上架" clearable>
+                <el-option v-for="dict in [{ label: '否', value: 0 }, { label: '是', value: 1 }]" :key="dict.value"
+                  :label="dict.label" :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="上架时间" prop="upTime" v-if="form.upNow == 0">
+              <el-date-picker v-model="form.upTime" type="datetime" placeholder="选择上架时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="发货地址" prop="unit" v-if="form.upNow == 0">
+              <el-input v-model="form.unit" placeholder="请输入单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="退货地址" prop="unit" v-if="form.upNow == 0">
+              <el-input v-model="form.unit" placeholder="请输入单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="退货联系人" prop="unit" v-if="form.upNow == 0">
+              <el-input v-model="form.unit" placeholder="请输入单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="商品详情" prop="productDetail">
+              <editor v-model="form.productDetail" :min-height="192" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="商品封面" prop="cover">
+              <imageUpload v-model="form.cover" :limit='1' />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="商品图片" prop="cover">
+              <img v-for="item in form.picture" :src="item" class="avatar" width="200" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 对话框(补货) -->
+    <el-dialog title="商品补货" :visible.sync="openAdd" width="600px" v-dialogDrag append-to-body>
+      <el-form ref="formAdd" :model="formAdd" :rules="rulesAdd" label-width="93px">
         <el-form-item label="商品编号" prop="code">
-          <el-input v-model="form.code" placeholder="请输入商品编号" />
+          <el-input v-model="formAdd.code" disabled />
         </el-form-item>
         <el-form-item label="商品名称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入商品名称" />
-        </el-form-item>
-        <el-form-item label="关键词" prop="keyword">
-          <el-input v-model="form.keyword" placeholder="请输入关键词" />
-        </el-form-item>
-        <el-form-item label="单位" prop="unit">
-          <el-input v-model="form.unit" placeholder="请输入单位" />
-        </el-form-item>
-        <el-form-item label="市场价" prop="marketPrice">
-          <el-input v-model="form.marketPrice" placeholder="请输入市场价" />
+          <el-input v-model="formAdd.name" disabled />
         </el-form-item>
-        <el-form-item label="平台价" prop="platPrice">
-          <el-input v-model="form.platPrice" placeholder="请输入平台价" />
-        </el-form-item>
-        <el-form-item label="商品品牌" prop="brand">
-          <el-input v-model="form.brand" placeholder="请输入商品品牌" />
-        </el-form-item>
-        <el-form-item label="库存" prop="num">
-          <el-input v-model="form.num" placeholder="请输入库存" />
-        </el-form-item>
-        <el-form-item label="商品状态" prop="state">
-          <el-input v-model="form.state" placeholder="请输入商品状态" />
-        </el-form-item>
-        <el-form-item label="商品类型" prop="category">
-          <el-input v-model="form.category" placeholder="请输入商品类型" />
-        </el-form-item>
-        <el-form-item label="销售数量" prop="saleNum">
-          <el-input v-model="form.saleNum" placeholder="请输入销售数量" />
-        </el-form-item>
-        <el-form-item label="付款策略" prop="payMethod">
-          <el-input v-model="form.payMethod" placeholder="请输入付款策略" />
-        </el-form-item>
-        <el-form-item label="售后策略" prop="aftersaleStrategy">
-          <el-input v-model="form.aftersaleStrategy" placeholder="请输入售后策略" />
-        </el-form-item>
-        <el-form-item label="价格策略" prop="priceStrategy">
-          <el-input v-model="form.priceStrategy" placeholder="请输入价格策略" />
-        </el-form-item>
-        <el-form-item label="上架方式" prop="upMethod">
-          <el-input v-model="form.upMethod" placeholder="请输入上架方式" />
-        </el-form-item>
-        <el-form-item label="上架数量" prop="upNum">
-          <el-input v-model="form.upNum" placeholder="请输入上架数量" />
-        </el-form-item>
-        <el-form-item label="上架时间" prop="upTime">
-          <el-date-picker clearable v-model="form.upTime" type="date" value-format="timestamp" placeholder="选择上架时间" />
-        </el-form-item>
-        <el-form-item label="是否置顶" prop="sticky">
-          <el-input v-model="form.sticky" placeholder="请输入是否置顶" />
-        </el-form-item>
-        <el-form-item label="商品详情" prop="productDetail">
-          <el-input v-model="form.productDetail" placeholder="请输入商品详情" />
-        </el-form-item>
-        <el-form-item label="商品封面" prop="productPhoto">
-          <el-input v-model="form.productPhoto" placeholder="请输入商品封面" />
+        <el-form-item label="补货数量" prop="upNum">
+          <el-input-number :precision="0" :min="0" v-model="formAdd.upNum" placeholder="请输入数量" />
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitFormAdd">确 定</el-button>
+        <el-button @click="cancelAdd">取 消</el-button>
       </div>
     </el-dialog>
+
+    <!-- 对话框(补货记录) -->
+    <el-dialog title="补货记录" :visible.sync="openAddLog" width="700px" v-dialogDrag append-to-body>
+      <el-table v-loading="loadingAddLog" :data="listAddLog">
+        <el-table-column label="商品编号" align="center" prop="goodsCode" />
+        <el-table-column label="商品名称" align="center" prop="goodsName" />
+        <el-table-column label="补货数量" align="center" prop="upNum" />
+        <el-table-column label="补货时间" align="center" prop="createTime">
+          <template v-slot="scope">
+            {{ parseTime(scope.row.updateTime) }}
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
   </div>
 </template>
 
@@ -186,19 +455,28 @@ import {
   deleteGoodsDetail,
   getGoodsDetail,
   getGoodsDetailPage,
-  exportGoodsDetailExcel
+  exportGoodsDetailExcel,
+  addGoodsDetailUpNum,
+  changeGoodsDetailStatus,
+  getAddAgainLog,
 } from "@/api/supplier/goodsDetail";
 import { getGoodsCategoryListAll, } from "@/api/supplier/goodsCategory";
 import Treeselect from '@riophae/vue-treeselect'
+import Editor from '@/components/Editor';
+import ImageUpload from "@/components/ImageUpload/index";
 
 export default {
   name: "GoodsDetail",
   components: {
+    Editor,
+    ImageUpload,
     Treeselect,
   },
   data() {
     return {
       categoryOptions: [],
+      categoryList: [],
+      listAddLog: [],
       defaultProps: {
         children: 'children',
         label: 'name'
@@ -217,6 +495,8 @@ export default {
       title: "",
       // 是否显示弹出层
       open: false,
+      openAdd: false,
+      openAddLog: false,
       // 查询参数
       queryParams: {
         pageNo: 1,
@@ -232,18 +512,65 @@ export default {
       },
       // 表单参数
       form: {},
+      formAdd: {},
       // 表单校验
       rules: {
-      }
+      },
+      rulesAdd: {
+        upNum: [{ required: true, message: "补货数量不能为空", trigger: "blur" }],
+      },
+      priceStrategyTableData: [
+        { level: '1', condition: '0 ≤ 数量 ≤ 1', unit: '个', category: '固定价格', price: '¥100' },
+        { level: '2', condition: '2 ≤ 数量', unit: '个', category: '折扣/固定价格', price: '80%/¥90' },
+      ]
     };
   },
   created() {
     this.getList();
     getGoodsCategoryListAll().then(response => {
+      this.categoryList = response.data;
       this.categoryOptions = this.handleTree(response.data, "id");
     });
   },
   methods: {
+    /** 商品补货 */
+    submitFormAdd() {
+      this.$refs["formAdd"].validate(valid => {
+        if (!valid) {
+          return;
+        }
+        // 修改的提交
+        if (this.formAdd.id != null) {
+          addGoodsDetailUpNum(this.formAdd).then(response => {
+            this.$modal.msgSuccess("补货成功");
+            this.openAdd = false;
+            this.getList();
+          });
+          return;
+        }
+      })
+    },
+    /** 取消补货 */
+    cancelAdd() {
+      this.openAdd = false;
+      this.resetAdd();
+    },
+    /** tab查询 */
+    handleClick(tab, event) {
+      if (tab.name == '0') {//全部
+        this.queryParams.state = null;
+      }
+      if (tab.name == '1') {//在售中
+        this.queryParams.state = 1;
+      }
+      if (tab.name == '2') {//售罄
+        this.queryParams.state = 2;
+      }
+      if (tab.name == '3') {//已下架
+        this.queryParams.state = 3;
+      }
+      this.getList();
+    },
     // 筛选节点
     filterNode(value, data) {
       if (!value) return true
@@ -254,12 +581,26 @@ export default {
       this.queryParams.category = data.id
       this.getList()
     },
+    //获得商品类型名称
+    getCategoryName(category) {
+      for (const item of this.categoryList) {
+        if (item.id === category) {
+          return item.name;
+        }
+      }
+      return "未知类型";
+    },
     /** 查询列表 */
     getList() {
       this.loading = true;
       // 执行查询
       getGoodsDetailPage(this.queryParams).then(response => {
         this.list = response.data.list;
+        for (let i = 0; i < this.list.length; i++) {
+          if (this.list[i].keyword) {
+            this.list[i].keyword = this.list[i].keyword.split(",");
+          }
+        }
         this.total = response.data.total;
         this.loading = false;
       });
@@ -293,10 +634,21 @@ export default {
         upTime: undefined,
         sticky: undefined,
         productDetail: undefined,
-        productPhoto: undefined,
+        cover: undefined,
+        onTitle: undefined,
+        upNow: undefined,
+        customStrategy: undefined,
       };
       this.resetForm("form");
     },
+    resetAdd() {
+      this.formAdd = {
+        code: undefined,
+        name: undefined,
+        upNum: undefined,
+      }
+      this.resetForm("formAdd");
+    },
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNo = 1;
@@ -311,7 +663,11 @@ export default {
     handleAdd() {
       this.reset();
       this.open = true;
-      this.title = "添加商品详情";
+      this.title = "添加上架记录";
+    },
+    /** 详情 */
+    handleDetail(row) {
+
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
@@ -319,10 +675,41 @@ export default {
       const id = row.id;
       getGoodsDetail(id).then(response => {
         this.form = response.data;
+        if (this.form.payMethod) {
+          this.form.payMethod = this.form.payMethod.split(",");
+        }
+        if (this.form.picture) {
+          this.form.picture = this.form.picture.split(",");
+        }
         this.open = true;
-        this.title = "修改商品详情";
+        this.title = "修改上架记录";
       });
     },
+    /** 补货 */
+    handleOn(row) {
+      this.resetAdd();
+      this.formAdd.id = row.id;
+      this.formAdd.code = row.code;
+      this.formAdd.name = row.name;
+      this.openAdd = true;
+    },
+    /** 下架 */
+    handleDown(row) {
+      this.$modal.confirm('是否确认下架商品名称为"' + row.name + '",编号为"' + row.code + '"的商品吗?').then(function () {
+        return changeGoodsDetailStatus(row.id, 3);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("下架成功");
+      }).catch(() => { });
+    },
+    /** 补货记录 */
+    handleOnLog(row) {
+      const id = row.id;
+      getAddAgainLog(id).then(res => {
+        this.listAddLog = res.data;
+        this.openAddLog = true;
+      })
+    },
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
@@ -349,7 +736,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const id = row.id;
-      this.$modal.confirm('是否确认删除商品详情编号为"' + id + '"的数据项?').then(function () {
+      this.$modal.confirm('是否确认删除上架记录编号为"' + id + '"的数据项?').then(function () {
         return deleteGoodsDetail(id);
       }).then(() => {
         this.getList();
@@ -362,14 +749,21 @@ export default {
       let params = { ...this.queryParams };
       params.pageNo = undefined;
       params.pageSize = undefined;
-      this.$modal.confirm('是否确认导出所有商品详情数据项?').then(() => {
+      this.$modal.confirm('是否确认导出所有上架记录数据项?').then(() => {
         this.exportLoading = true;
         return exportGoodsDetailExcel(params);
       }).then(response => {
-        this.$download.excel(response, '商品详情.xls');
+        this.$download.excel(response, '上架记录.xls');
         this.exportLoading = false;
       }).catch(() => { });
     }
   }
 };
 </script>
+<style scoped>
+.tableButton {
+  margin-top: 5px;
+  margin-left: 10px;
+  width: 88%;
+}
+</style>

+ 597 - 69
src/views/supplier/goodsInfo/index.vue

@@ -3,16 +3,47 @@
 
     <!-- 搜索工作栏 -->
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="商品编号" prop="code">
+        <el-input v-model="queryParams.code" placeholder="请输入商品编号" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
       <el-form-item label="商品名称" prop="name">
         <el-input v-model="queryParams.name" placeholder="请输入商品名称" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="商品类型" prop="category">
-        <el-input v-model="queryParams.category" placeholder="请输入商品类型" clearable @keyup.enter.native="handleQuery" />
-      </el-form-item>
       <el-form-item label="商品状态" prop="state">
-        <el-input v-model="queryParams.state" placeholder="请输入商品状态" clearable @keyup.enter.native="handleQuery" />
+        <el-select v-model="queryParams.state" placeholder="请选择商品状态" clearable @keyup.enter.native="handleQuery">
+          <el-option v-for="dict in isEnable" :key="parseInt(dict.value)" :label="dict.label"
+            :value="parseInt(dict.value)" />
+        </el-select>
       </el-form-item>
       <el-form-item>
+        <el-popover placement="bottom" width="300" trigger="click">
+          <el-form-item label="商品编号" prop="code">
+            <el-input v-model="queryParams.code" placeholder="请输入商品编号" clearable @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="商品名称" prop="name">
+            <el-input v-model="queryParams.name" placeholder="请输入商品名称" clearable @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="商品类型" prop="category">
+            <el-input v-model="queryParams.category" placeholder="请输入商品类型" clearable
+              @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="商品品牌" prop="brand">
+            <el-input v-model="queryParams.brand" placeholder="请输入商品品牌" clearable @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="关键词" prop="keyword">
+            <el-input v-model="queryParams.keyword" placeholder="请输入商品关键词" clearable
+              @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="商品状态" prop="state">
+            <el-select v-model="queryParams.state" placeholder="请选择商品状态" clearable @keyup.enter.native="handleQuery">
+              <el-option v-for="dict in isEnable" :key="parseInt(dict.value)" :label="dict.label"
+                :value="parseInt(dict.value)" />
+            </el-select>
+          </el-form-item>
+          <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+          <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+          <el-button slot="reference" style="margin-right: 10px;">复合查询</el-button>
+        </el-popover>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
@@ -34,62 +65,67 @@
     <!-- 列表 -->
     <el-table v-loading="loading" :data="list">
       <el-table-column label="序号" align="center" prop="id" />
-      <el-table-column label="商品编号" align="center" prop="code" />
-      <el-table-column label="商品名称" align="center" prop="name" />
-      <el-table-column label="商品类型" align="center" prop="category">
-        <template v-slot="scope">
-          <el-tag> {{ getCategoryName(scope.row.category) }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="商品单价" align="center" prop="price" />
-      <el-table-column label="付款方式" align="center" prop="payMethod">
+      <el-table-column label="商品封面" align="center" prop="cover" width="200px">
         <template v-slot="scope">
-          <dict-tag v-for="item in scope.row.payMethod" :type="DICT_TYPE.PAY_METHOD" :value="item" />
+          <img :src="scope.row.cover" width="200px" />
         </template>
       </el-table-column>
-      <el-table-column label="价格策略" align="center" prop="priceStrategy">
-        <template v-slot="scope">
-          <dict-tag :type="DICT_TYPE.PRICE_STRATEGY" :value="scope.row.priceStrategy" />
-        </template>
-      </el-table-column>
-      <el-table-column label="售后策略" align="center" prop="aftersaleStrategy">
+      <el-table-column label="商品名称" align="center" prop="name" />
+      <el-table-column label="商品信息" align="center" width="240px">
         <template v-slot="scope">
-          <dict-tag :type="DICT_TYPE.AFTERSALE_STRATEGY" :value="scope.row.aftersaleStrategy" />
+          <el-descriptions :column="1" :contentstyle="{ width: '40%' }">
+            <el-descriptions-item label="商品编号">{{ scope.row.code }}</el-descriptions-item>
+            <el-descriptions-item label="商品类型">
+              <el-tag> {{ getCategoryName(scope.row.category) }}</el-tag>
+            </el-descriptions-item>
+            <el-descriptions-item label="商品品牌">{{ scope.row.brand }}</el-descriptions-item>
+            <el-descriptions-item label="商品型号">{{ scope.row.model }}</el-descriptions-item>
+            <el-descriptions-item label="商品关键词">
+              <el-tag v-for="item in scope.row.keyword"> {{ item }}</el-tag>
+            </el-descriptions-item>
+            <el-descriptions-item label="商品参数">{{ scope.row.productParameter }}</el-descriptions-item>
+          </el-descriptions>
         </template>
       </el-table-column>
-      <el-table-column label="关键词" align="center" prop="keyword">
+      <el-table-column label="商品策略" align="center" width="250px">
         <template v-slot="scope">
-          <el-tag v-for="item2 in scope.row.keyword"> {{ item2 }}</el-tag>
+          <el-descriptions :column="1" :contentstyle="{ width: '40%' }">
+            <el-descriptions-item label="自定义策略">{{ scope.row.customStrategy }}</el-descriptions-item>
+            <el-descriptions-item label="价格策略">
+              <dict-tag :type="DICT_TYPE.PRICE_STRATEGY" :value="scope.row.priceStrategy" />
+            </el-descriptions-item>
+            <el-descriptions-item label="售后策略">
+              <dict-tag :type="DICT_TYPE.AFTERSALE_STRATEGY" :value="scope.row.aftersaleStrategy" />
+            </el-descriptions-item>
+            <el-descriptions-item label="付款策略">
+              <dict-tag v-for="item in scope.row.payMethod" :type="DICT_TYPE.PAY_METHOD" :value="item" />
+            </el-descriptions-item>
+          </el-descriptions>
         </template>
       </el-table-column>
-      <!-- <el-table-column label="商品详情" align="center" prop="productDetail" /> -->
-      <el-table-column label="商品图片" align="center" prop="picture" />
       <el-table-column label="商品状态" align="center" prop="state">
         <template v-slot="scope">
           <el-switch v-model="scope.row.state" :active-value="0" :inactive-value="1"
             @change="handleStatusChange(scope.row)" />
         </template>
       </el-table-column>
-
-      <!-- <el-table-column label="商品型号" align="center" prop="model" /> -->
-      <!-- <el-table-column label="商品成本" align="center" prop="cost" /> -->
-      <!-- <el-table-column label="单位" align="center" prop="unit" /> -->
-      <!-- <el-table-column label="包装方式" align="center" prop="pack" /> -->
-      <!-- <el-table-column label="自定义策略" align="center" prop="customStrategy" /> -->
-      <!-- <el-table-column label="商品参数" align="center" prop="productParameter" /> -->
-      <!-- <el-table-column label="附件1" align="center" prop="attachmentOne" /> -->
-      <!-- <el-table-column label="附件2" align="center" prop="attachmentTwo" /> -->
-      <!-- <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+      <el-table-column label="商品成本价" align="center" prop="cost" />
+      <el-table-column label="附件" align="center">
         <template v-slot="scope">
-          <span>{{ parseTime(scope.row.createTime) }}</span>
+          <el-button type="text" @click="handleAttachment(scope.row)">查看附件</el-button>
         </template>
-</el-table-column> -->
+      </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template v-slot="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-            v-hasPermi="['supplier:goods:update']">修改</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-            v-hasPermi="['supplier:goods:delete']">删除</el-button>
+          <el-button size="mini" type="text" @click="handleDetail(scope.row)">详情</el-button>
+          <el-button size="mini" type="text" @click="handleUpdate(scope.row)" v-hasPermi="['supplier:goods:update']"
+            v-if="scope.row.state == 1">修改</el-button>
+          <el-button size="mini" type="text" @click="handleEnable(scope.row)" v-if="scope.row.state == 1">启用</el-button>
+          <el-button size="mini" type="text" @click="handleDisable(scope.row)"
+            v-if="scope.row.state == 0">停用</el-button>
+          <el-button size="mini" type="text" @click="handleOn(scope.row)" v-if="scope.row.state == 1">上架</el-button>
+          <el-button size="mini" type="text" @click="handleDelete(scope.row)" v-hasPermi="['supplier:goods:delete']"
+            v-if="scope.row.state == 1">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -99,7 +135,7 @@
 
     <!-- 对话框(添加 / 修改) -->
     <el-dialog :title="title" :visible.sync="open" width="800px" v-dialogDrag append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="90px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="93px">
         <el-row>
           <el-col :span="13">
             <el-form-item label="商品编号" prop="code">
@@ -121,20 +157,22 @@
               <el-input v-model="form.model" placeholder="请输入商品型号" />
             </el-form-item>
           </el-col>
+          <el-col :span="13">
+            <el-form-item label="商品封面" prop="cover">
+              <imageUpload v-model="form.cover" :limit='1' />
+            </el-form-item>
+          </el-col>
           <el-col :span="13">
             <el-form-item label="商品图片" prop="picture">
-              <!-- <el-input v-model="form.picture" placeholder="请输入商品图片" /> -->
               <imageUpload v-model="form.picture" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="商品类型" prop="category">
-              <!-- <el-input v-model="form.category" placeholder="请输入商品类型" /> -->
               <el-cascader v-model="form.category" :options="goodsCategory" :show-all-levels="false"
                 :props="{ label: 'name', value: 'id', children: 'children', checkStrictly: true }" />
             </el-form-item>
           </el-col>
-
           <el-col :span="12">
             <el-form-item label="商品成本" prop="cost">
               <el-input-number v-model="form.cost" :precision="2" :step="100" />
@@ -150,12 +188,11 @@
               <el-input v-model="form.unit" placeholder="请输入单位" />
             </el-form-item>
           </el-col>
-
           <el-col :span="12">
             <el-form-item label="包装方式" prop="pack">
               <el-select v-model="form.pack" placeholder="请选择包装方式" clearable>
-                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.GOODS_PACK)" :key="dict.value" :label="dict.label"
-                  :value="dict.value" />
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.GOODS_PACK)" :key="parseInt(dict.value)" :label="dict.label"
+                  :value="parseInt(dict.value)" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -170,8 +207,8 @@
           <el-col :span="12">
             <el-form-item label="价格策略" prop="priceStrategy">
               <el-select v-model="form.priceStrategy" placeholder="请选择价格策略" clearable>
-                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PRICE_STRATEGY)" :key="dict.value"
-                  :label="dict.label" :value="dict.value" />
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PRICE_STRATEGY)" :key="parseInt(dict.value)"
+                  :label="dict.label" :value="parseInt(dict.value)" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -188,8 +225,8 @@
           <el-col :span="12">
             <el-form-item label="售后策略" prop="aftersaleStrategy">
               <el-select v-model="form.aftersaleStrategy" placeholder="请选择售后策略" clearable>
-                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.AFTERSALE_STRATEGY)" :key="dict.value"
-                  :label="dict.label" :value="dict.value" />
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.AFTERSALE_STRATEGY)" :key="parseInt(dict.value)"
+                  :label="dict.label" :value="parseInt(dict.value)" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -223,28 +260,290 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="附件1" prop="attachmentOne">
-              <!-- <el-input v-model="form.attachmentOne" placeholder="请输入附件1" /> -->
-              <file-upload v-model="form.attachmentOne" />
+              <fileUpload v-model="form.attachmentOne" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="附件2" prop="attachmentTwo">
-              <!-- <el-input v-model="form.attachmentTwo" placeholder="请输入附件2" /> -->
-              <file-upload v-model="form.attachmentTwo" />
+              <fileUpload v-model="form.attachmentTwo" />
             </el-form-item>
           </el-col>
-
-          <!-- <el-form-item label="商品状态" prop="state">
-            <el-input v-model="form.state" placeholder="请输入商品状态" />
-          </el-form-item> -->
         </el-row>
       </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" :disabled="buttonDisable">确 定</el-button>
+        <el-button @click="cancel" :disabled="buttonDisable">取 消</el-button>
+      </div>
+    </el-dialog>
 
+    <!-- 对话框(上架) -->
+    <el-dialog title="上架/补货" :visible.sync="openOn" width="800px" v-dialogDrag append-to-body>
+      <el-form ref="formOn" :model="formOn" :rules="rulesOn" label-width="93px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="商品编号" prop="code">
+              <el-input v-model="formOn.code" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="商品名称" prop="name">
+              <el-input v-model="formOn.name" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="上架标题" prop="onTitle">
+              <el-input v-model="formOn.onTitle" placeholder="请输入上架标题" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="付款方式" prop="payMethod">
+              <el-select v-model="formOn.payMethod" placeholder="请选择付款方式" multiple>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_METHOD)" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="售后策略" prop="aftersaleStrategy">
+              <el-select v-model="formOn.aftersaleStrategy" placeholder="请选择售后策略" clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.AFTERSALE_STRATEGY)" :key="parseInt(dict.value)"
+                  :label="dict.label" :value="parseInt(dict.value)" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="价格策略" prop="priceStrategy">
+              <el-select v-model="formOn.priceStrategy" placeholder="请选择价格策略" clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PRICE_STRATEGY)" :key="parseInt(dict.value)"
+                  :label="dict.label" :value="parseInt(dict.value)" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <!-- 阶梯价格策略 -->
+          <el-col :span="24" v-if="formOn.priceStrategy == 2" style="margin-bottom: 20px;">
+            <el-table :data="priceStrategyTableData" style="width: 100%">
+              <el-table-column prop="level" align="center" label="阶梯" />
+              <el-table-column prop="condition" align="center" label="数量条件" />
+              <el-table-column prop="unit" align="center" label="单位" />
+              <el-table-column prop="category" align="center" label="策略类型" />
+              <el-table-column prop="price" align="center" label="价格/RMB(元)" />
+            </el-table>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="商品类型" prop="category">
+              <el-cascader v-model="formOn.category" :options="goodsCategory" :show-all-levels="false"
+                :props="{ label: 'name', value: 'id', children: 'children', checkStrictly: true }" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="是否置顶" prop="sticky">
+              <el-select v-model="formOn.sticky" placeholder="请选择是否置顶" clearable>
+                <el-option v-for="dict in [{ label: '否', value: 0 }, { label: '是', value: 1 }]" :key="dict.value"
+                  :label="dict.label" :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="自定义策略" prop="customStrategy">
+              <el-input type="textarea" v-model="formOn.customStrategy" placeholder="请输入自定义策略" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="上架价格" prop="marketPrice">
+              <el-input-number v-model="formOn.marketPrice" :precision="2" :step="100" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="单位" prop="unit">
+              <el-input v-model="formOn.unit" placeholder="请输入单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="上架方式" prop="upMethod">
+              <el-select v-model="formOn.upMethod" placeholder="请选择上架方式" clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.ON_SOURCE)" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="上架数量" prop="upNum">
+              <el-input-number :precision="0" :min="0" v-model="formOn.upNum" placeholder="请输入数量" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="立即上架" prop="upNow">
+              <el-select v-model="formOn.upNow" placeholder="请选择是否立即上架" clearable>
+                <el-option v-for="dict in [{ label: '否', value: 0 }, { label: '是', value: 1 }]" :key="dict.value"
+                  :label="dict.label" :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="上架时间" prop="upTime" v-if="formOn.upNow == 0">
+              <el-date-picker v-model="formOn.upTime" type="datetime" placeholder="选择上架时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="商品详情" prop="productDetail">
+              <editor v-model="formOn.productDetail" :min-height="192" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="商品封面" prop="cover">
+              <imageUpload v-model="formOn.cover" :limit='1' />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitFormOn" :disabled="buttonDisable">确 定</el-button>
+        <el-button @click="cancelFormOn" :disabled="buttonDisable">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 对话框(附件) -->
+    <el-dialog title="附件" :visible.sync="openAttachment" width="600px" v-dialogDrag append-to-body>
+      <a v-for="(item, index) in attachmentDetail" :href="item" target="downloadFile" download>
+        {{ item }}<br>
+      </a>
+    </el-dialog>
+    <!-- 对话框(详情) -->
+    <el-dialog title="详情" :visible.sync="openDetail" width="800px" v-dialogDrag append-to-body>
+      <el-form ref="formDetail" :model="formDetail" label-width="93px">
+        <el-row>
+          <el-col :span="13">
+            <el-form-item label="商品编号" prop="code">
+              <el-input v-model="formDetail.code" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="商品名称" prop="name">
+              <el-input v-model="formDetail.name" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="商品品牌" prop="brand">
+              <el-input v-model="formDetail.brand" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="商品型号" prop="model">
+              <el-input v-model="formDetail.model" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="商品封面" prop="cover">
+              <img :src="formDetail.cover" class="avatar" width="200" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="商品图片" prop="picture">
+              <img v-for="item in formDetail.picture" :src="item" class="avatar" width="200" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="商品类型" prop="category">
+              <!-- <el-input v-model="form.category" placeholder="请输入商品类型" /> -->
+              <el-cascader v-model="formDetail.category" :options="goodsCategory" :show-all-levels="false"
+                :props="{ label: 'name', value: 'id', children: 'children', checkStrictly: true }" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="商品成本" prop="cost">
+              <el-input-number v-model="formDetail.cost" :precision="2" :step="100" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="商品单价" prop="price">
+              <el-input-number v-model="formDetail.price" :precision="2" :step="100" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="10">
+            <el-form-item label="单位" prop="unit">
+              <el-input v-model="formDetail.unit" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="包装方式" prop="pack">
+              <el-select v-model="formDetail.pack" disabled clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.GOODS_PACK)" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="付款方式" prop="payMethod">
+              <el-select v-model="formDetail.payMethod" disabled multiple>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_METHOD)" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="价格策略" prop="priceStrategy">
+              <el-select v-model="formDetail.priceStrategy" disabled clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PRICE_STRATEGY)" :key="dict.value"
+                  :label="dict.label" :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <!-- 阶梯价格策略 -->
+          <el-col :span="24" v-if="formDetail.priceStrategy == 2" style="margin-bottom: 20px;">
+            <el-table :data="priceStrategyTableData" style="width: 100%">
+              <el-table-column prop="level" align="center" label="阶梯" />
+              <el-table-column prop="condition" align="center" label="数量条件" />
+              <el-table-column prop="unit" align="center" label="单位" />
+              <el-table-column prop="category" align="center" label="策略类型" />
+              <el-table-column prop="price" align="center" label="价格/RMB(元)" />
+            </el-table>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="售后策略" prop="aftersaleStrategy">
+              <el-select v-model="formDetail.aftersaleStrategy" disabled clearable>
+                <el-option v-for="dict in this.getDictDatas(DICT_TYPE.AFTERSALE_STRATEGY)" :key="dict.value"
+                  :label="dict.label" :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="自定义策略" prop="customStrategy">
+              <el-input type="textarea" v-model="formDetail.customStrategy" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="关键词" prop="keyword">
+              <!-- <el-input v-model="form.keyword" placeholder="请输入关键词" /> -->
+              <el-tag v-for="tag in formDetail.keyword">{{ tag }}</el-tag>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="商品参数" prop="productParameter">
+              <el-input type="textarea" v-model="formDetail.productParameter" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="商品详情" prop="productDetail">
+              <editor v-model="formDetail.productDetail" :min-height="192" :readOnly="true" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="附件1" prop="attachmentOne">
+              <a v-for="(item, index) in formDetail.attachmentOne" :href="item" target="downloadFile" download>
+                {{ item }}<br>
+              </a>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="附件2" prop="attachmentTwo">
+              <a v-for="(item, index) in formDetail.attachmentTwo" :href="item" target="downloadFile" download>
+                {{ item }}<br>
+              </a>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-dialog>
   </div>
 </template>
 
@@ -258,6 +557,7 @@ import {
   exportGoodsExcel,
   changeGoodsStatus,
 } from "@/api/supplier/goods";
+import { createGoodsDetail, } from "@/api/supplier/goodsDetail";
 import { getGoodsCategoryListAll, } from "@/api/supplier/goodsCategory";
 import { CommonStatusEnum } from "@/utils/constants";
 import Editor from '@/components/Editor';
@@ -273,12 +573,18 @@ export default {
   },
   data() {
     return {
+      buttonDisable: false,
+      attachmentDetail: [],
       goodsCategory: [],
       categoryList: [],
       dynamicTags: [],
       inputVisible: false,
       inputValue: '',
       SysCommonStatusEnum: CommonStatusEnum,
+      isEnable: [
+        { label: "启用", value: '0' },
+        { label: "禁用", value: '1' },
+      ],
       // 遮罩层
       loading: true,
       // 导出遮罩层
@@ -293,6 +599,9 @@ export default {
       title: "",
       // 是否显示弹出层
       open: false,
+      openOn: false,
+      openAttachment: false,
+      openDetail: false,
       // 查询参数
       queryParams: {
         pageNo: 1,
@@ -319,8 +628,47 @@ export default {
       },
       // 表单参数
       form: {},
+      formOn: {},
+      formDetail: {},
       // 表单校验
       rules: {
+        code: [{ required: true, message: "商品编号不能为空", trigger: "blur" }],
+        name: [{ required: true, message: "商品名称不能为空", trigger: "blur" }],
+        brand: [{ required: true, message: "商品品牌不能为空", trigger: "blur" }],
+        model: [{ required: true, message: "商品型号不能为空", trigger: "blur" }],
+        cover: [{ required: true, message: "商品封面不能为空", trigger: "blur" }],
+        category: [{ required: true, message: "商品类型不能为空", trigger: "blur" }],
+        cost: [{ required: true, message: "商品成本不能为空", trigger: "blur" }],
+        price: [{ required: true, message: "商品单价不能为空", trigger: "blur" }],
+        unit: [{ required: true, message: "单位不能为空", trigger: "blur" }],
+        pack: [{ required: true, message: "包装方式不能为空", trigger: "blur" }],
+        payMethod: [{ required: true, message: "付款方式不能为空", trigger: "blur" }],
+        priceStrategy: [{ required: true, message: "价格策略不能为空", trigger: "blur" }],
+        aftersaleStrategy: [{ required: true, message: "售后策略不能为空", trigger: "blur" }],
+        customStrategy: [{ required: true, message: "自定义策略不能为空", trigger: "blur" }],
+        keyword: [{ required: true, message: "关键词不能为空", trigger: "blur" }],
+        productParameter: [{ required: true, message: "商品参数不能为空", trigger: "blur" }],
+        productDetail: [{ required: true, message: "商品详情不能为空", trigger: "blur" }],
+      },
+      rulesOn: {
+        code: [{ required: true, message: "商品编号不能为空", trigger: "blur" }],
+        name: [{ required: true, message: "商品名称不能为空", trigger: "blur" }],
+        onTitle: [{ required: true, message: "商品品牌不能为空", trigger: "blur" }],
+        model: [{ required: true, message: "上架标题不能为空", trigger: "blur" }],
+        payMethod: [{ required: true, message: "付款方式不能为空", trigger: "blur" }],
+        aftersaleStrategy: [{ required: true, message: "售后策略不能为空", trigger: "blur" }],
+        priceStrategy: [{ required: true, message: "价格策略不能为空", trigger: "blur" }],
+        category: [{ required: true, message: "商品类型不能为空", trigger: "blur" }],
+        sticky: [{ required: true, message: "是否置顶不能为空", trigger: "blur" }],
+        customStrategy: [{ required: true, message: "自定义策略不能为空", trigger: "blur" }],
+        marketPrice: [{ required: true, message: "上架价格不能为空", trigger: "blur" }],
+        unit: [{ required: true, message: "单位不能为空", trigger: "blur" }],
+        upMethod: [{ required: true, message: "上架方式不能为空", trigger: "blur" }],
+        upNum: [{ required: true, message: "上架数量不能为空", trigger: "blur" }],
+        upNow: [{ required: true, message: "立即上架不能为空", trigger: "blur" }],
+        upTime: [{ required: true, message: "上架时间不能为空", trigger: "blur" }],
+        productDetail: [{ required: true, message: "商品详情不能为空", trigger: "blur" }],
+        cover: [{ required: true, message: "商品封面不能为空", trigger: "blur" }],
       },
       priceStrategyTableData: [
         { level: '1', condition: '0 ≤ 数量 ≤ 1', unit: '个', category: '固定价格', price: '¥100' },
@@ -336,6 +684,111 @@ export default {
     });
   },
   methods: {
+    /** 上架 */
+    handleOn(row) {
+      this.resetFormOn();
+      this.buttonDisable = false;
+      const id = row.id;
+      getGoods(id).then(response => {
+        let temp = response.data;
+        this.formOn = response.data;
+        this.formOn.goodsId = id; 
+        this.formOn.num = response.data.upNum; 
+        if (temp.payMethod) {
+          this.formOn.payMethod = temp.payMethod.split(",");
+        }
+        if (temp.keyword) {
+          this.formOn.keyword = temp.keyword.split(",");
+        }
+        this.openOn = true;
+      })
+    },
+    /**上架提交 */
+    submitFormOn() {
+      this.buttonDisable = true;
+      this.$refs["formOn"].validate(valid => {
+        if (!valid) {
+          return;
+        }
+        if (this.formOn.category != null && this.formOn.category != "" && this.formOn.category instanceof Array) {
+          this.formOn.category = this.formOn.category[this.formOn.category.length - 1];
+        }
+        if (this.formOn.payMethod != null) {
+          let temp = "";
+          for (let i = 0; i < this.formOn.payMethod.length; i++) {
+            if (!temp) {
+              temp = this.formOn.payMethod[i];
+            } else {
+              temp = temp + "," + this.formOn.payMethod[i];
+            }
+          }
+          this.formOn.payMethod = temp;
+        }
+        if (this.formOn.keyword != null) {
+          let temp = "";
+          for (let i = 0; i < this.formOn.keyword.length; i++) {
+            if (!temp) {
+              temp = this.formOn.keyword[i];
+            } else {
+              temp = temp + "," + this.formOn.keyword[i];
+            }
+          }
+          this.formOn.keyword = temp;
+        }
+        createGoodsDetail(this.formOn).then(response => {
+          this.$modal.msgSuccess("上架成功");
+          this.openOn = false;
+          this.buttonDisable = false;
+          this.getList();
+        });
+      })
+
+    },
+    /** 取消上架 */
+    cancelFormOn() {
+      this.buttonDisable = true;
+      this.openOn = false;
+      this.resetFormOn();
+      this.buttonDisable = false;
+    },
+    /** 详情 */
+    handleDetail(row) {
+      this.resetDetail();
+      const id = row.id;
+      getGoods(id).then(response => {
+        this.formDetail = response.data;
+        if (this.formDetail.keyword) {
+          this.formDetail.keyword = this.formDetail.keyword.split(",");
+        }
+        if (this.formDetail.payMethod) {
+          this.formDetail.payMethod = this.formDetail.payMethod.split(",");
+        }
+        this.formDetail.priceStrategy = this.formDetail.priceStrategy + "";
+        this.formDetail.aftersaleStrategy = this.formDetail.aftersaleStrategy + "";
+        this.formDetail.pack = this.formDetail.pack + "";
+        if (this.formDetail.picture) {
+          this.formDetail.picture = this.formDetail.picture.split(",");
+        }
+        if (this.formDetail.attachmentOne) {
+          this.formDetail.attachmentOne = this.formDetail.attachmentOne.split(",");
+        }
+        if (this.formDetail.attachmentTwo) {
+          this.formDetail.attachmentTwo = this.formDetail.attachmentTwo.split(",");
+        }
+        this.openDetail = true;
+      });
+    },
+    /** 查看附件 */
+    handleAttachment(row) {
+      this.attachmentDetail = [];
+      if (row.attachmentOne) {
+        this.attachmentDetail.push(...row.attachmentOne.split(","))
+      }
+      if (row.attachmentTwo) {
+        this.attachmentDetail.push(...row.attachmentTwo.split(","))
+      }
+      this.openAttachment = true;
+    },
     //获得商品类型名称
     getCategoryName(category) {
       for (const item of this.categoryList) {
@@ -361,11 +814,29 @@ export default {
         .catch(function () {
           // 异常时,需要将 row.status 状态重置回之前的
           row.state =
-            row.status === CommonStatusEnum.ENABLE
+            row.state === CommonStatusEnum.ENABLE
               ? CommonStatusEnum.DISABLE
               : CommonStatusEnum.ENABLE;
         });
     },
+    //启用
+    handleEnable(row) {
+      this.$modal.confirm('是否确认启用名为"' + row.name + '"的商品吗?').then(function () {
+        return changeGoodsStatus(row.id, 0);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("启用成功");
+      }).catch(() => { });
+    },
+    //停用
+    handleDisable(row) {
+      this.$modal.confirm('是否确认停用名为"' + row.name + '"的商品吗?').then(function () {
+        return changeGoodsStatus(row.id, 1);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("停用成功");
+      }).catch(() => { });
+    },
     // 关键词标签
     handleClose(tag) {
       this.form.keyword.splice(this.form.keyword.indexOf(tag), 1);
@@ -430,6 +901,61 @@ export default {
       };
       this.resetForm("form");
     },
+    resetDetail() {
+      this.formDetail = {
+        id: undefined,
+        code: undefined,
+        name: undefined,
+        model: undefined,
+        picture: undefined,
+        category: undefined,
+        cost: undefined,
+        unit: undefined,
+        price: undefined,
+        state: undefined,
+        pack: undefined,
+        payMethod: undefined,
+        priceStrategy: undefined,
+        aftersaleStrategy: undefined,
+        customStrategy: undefined,
+        keyword: [],
+        productParameter: undefined,
+        productDetail: undefined,
+        attachmentOne: undefined,
+        attachmentTwo: undefined,
+      };
+      this.resetForm("formDetail");
+    },
+    resetFormOn() {
+      this.formOn = {
+        id: undefined,
+        goodsId: undefined,
+        code: undefined,
+        name: undefined,
+        keyword: undefined,
+        unit: undefined,
+        marketPrice: undefined,
+        platPrice: undefined,
+        brand: undefined,
+        num: undefined,
+        state: undefined,
+        category: undefined,
+        saleNum: undefined,
+        payMethod: undefined,
+        aftersaleStrategy: undefined,
+        priceStrategy: undefined,
+        upMethod: undefined,
+        upNum: undefined,
+        upTime: undefined,
+        sticky: undefined,
+        productDetail: undefined,
+        cover: undefined,
+        onTitle: undefined,
+        upNow: undefined,
+        customStrategy: undefined,
+      };
+      this.resetForm("formOn");
+    },
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNo = 1;
@@ -443,12 +969,14 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
+      this.buttonDisable = false;
       this.open = true;
       this.title = "添加商品列表";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
+      this.buttonDisable = false;
       const id = row.id;
       getGoods(id).then(response => {
         this.form = response.data;
@@ -458,9 +986,6 @@ export default {
         if (this.form.payMethod) {
           this.form.payMethod = this.form.payMethod.split(",");
         }
-        this.form.priceStrategy = this.form.priceStrategy + "";
-        this.form.aftersaleStrategy = this.form.aftersaleStrategy + "";
-        this.form.pack = this.form.pack + "";
         this.open = true;
         this.title = "修改商品列表";
       });
@@ -468,6 +993,10 @@ export default {
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
+        if (!valid) {
+          return;
+        }
+        this.buttonDisable = true;
         if (this.form.category != null && this.form.category != "" && this.form.category instanceof Array) {
           this.form.category = this.form.category[this.form.category.length - 1];
         }
@@ -493,14 +1022,12 @@ export default {
           }
           this.form.keyword = temp;
         }
-        if (!valid) {
-          return;
-        }
         // 修改的提交
         if (this.form.id != null) {
           updateGoods(this.form).then(response => {
             this.$modal.msgSuccess("修改成功");
             this.open = false;
+            this.buttonDisable = false;
             this.getList();
           });
           return;
@@ -509,6 +1036,7 @@ export default {
         createGoods(this.form).then(response => {
           this.$modal.msgSuccess("新增成功");
           this.open = false;
+          this.buttonDisable = false;
           this.getList();
         });
       });