Selaa lähdekoodia

服务商商品

zhengjinyi 4 kuukautta sitten
vanhempi
commit
1e32f6020b

+ 32 - 0
src/api/serviceSettlement/goods.js

@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+
+export const getProductList = (params) => request({
+  url: '/providers/product/list',
+  method: 'get',
+  params
+})
+
+export const addProducts = (params) => request({
+  url: '/providers/add/products',
+  method: 'get',
+  params
+})
+
+export const getProvidersProducts = (params) => request({
+  url: '/providers/products',
+  method: 'get',
+  params
+})
+
+/**
+ * 删除供应商相关商品
+ * @param {*} id
+ * @returns
+ */
+export function delProduct(params) {
+  return request({
+    url: '/providers/del/products',
+    method: 'get',
+    params
+  })
+}

+ 17 - 0
src/router/modules/serviceSettlement.js

@@ -29,6 +29,23 @@ export default {
           name: 'SettlementEdit',
           meta: { title: '编辑列表', noCache: true, activeMenu: '/service/settlement' }
         },
+        {
+          path: 'goods',
+          hidden: true,
+          component: () => import('@/views/index'),
+          name: 'SettlementGoods',
+          redirect: '/service/settlement/goods/list',
+          meta: { title: '商品管理', noCache: true, activeMenu: '/service/settlement' },
+          children: [
+            {
+              path: 'list',
+              hidden: true,
+              component: () => import('@/views/serviceSettlement/goods/index.vue'),
+              name: 'SettlementGoodsList',
+              meta: { title: '服务商商品列表', noCache: true, activeMenu: '/service/settlement' }
+            }
+          ]
+        },
         {
           path: 'contract',
           hidden: true,

+ 172 - 0
src/views/serviceSettlement/components/goods-dialog.vue

@@ -0,0 +1,172 @@
+<template>
+  <el-dialog title="添加商品" :visible.sync="visible" width="1200px" :close-on-click-modal="false" :show-close="false">
+    <div class="filter-container">
+      <div class="filter-control">
+        <span>商品ID:</span>
+        <el-input
+          v-model="listQuery.productId"
+          placeholder="商品ID"
+          clearable
+          style="width: 160px"
+          @keyup.enter.native="getList"
+          @clear="getList"
+        />
+      </div>
+      <div class="filter-control">
+        <span>商品名称:</span>
+        <el-input
+          v-model="listQuery.productName"
+          placeholder="商品名称"
+          clearable
+          style="width: 160px"
+          @keyup.enter.native="getList"
+          @clear="getList"
+        />
+      </div>
+      <div class="filter-control">
+        <span>供应商ID:</span>
+        <el-input
+          v-model="listQuery.shopId"
+          placeholder="供应商ID"
+          clearable
+          style="width: 160px"
+          @keyup.enter.native="getList"
+          @clear="getList"
+        />
+      </div>
+      <div class="filter-control">
+        <span>供应商名称:</span>
+        <el-input
+          v-model="listQuery.shopName"
+          placeholder="供应商名称"
+          clearable
+          style="width: 160px"
+          @keyup.enter.native="getList"
+          @clear="getList"
+        />
+      </div>
+      <div class="filter-control">
+        <el-button type="primary" @click="getList"> 查询 </el-button>
+      </div>
+    </div>
+    <el-table
+      ref="table"
+      v-loading="isLoading"
+      :data="list"
+      height="400px"
+      border
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="55" />
+      <el-table-column label="商品ID" prop="productId" align="center" width="100" />
+      <el-table-column prop="mainImage" label="商品图片" align="center" width="120">
+        <template slot-scope="{ row }">
+          <img v-if="row.mainImage" :src="row.mainImage" alt="" style="width: 50px; height: 50px" />
+          <span v-else>---</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="商品名称" prop="productName" align="center" />
+      <el-table-column label="供应商" prop="shopName" align="center" />
+    </el-table>
+    <!-- 页码 -->
+    <pagination
+      :total="total"
+      :page-sizes="[10, 20]"
+      :page-size="10"
+      :page.sync="listQuery.pageNum"
+      :limit.sync="listQuery.pageSize"
+      @pagination="getProductList"
+    />
+    <div slot="footer">
+      <el-button @click="handleCanle"> 取 消 </el-button>
+      <el-button type="primary" :disabled="disabled" @click="handleConfirm"> 确 定 </el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { getProductList } from '@/api/serviceSettlement/goods'
+
+export default {
+  name: 'GoodsDialog',
+  data() {
+    return {
+      visible: true,
+      listQuery: {
+        providerId: this.$route.query.providersId,
+        shopId: '',
+        productId: '',
+        shopName: '',
+        productName: '',
+        pageNum: 1, // 页码
+        pageSize: 10 // 页面数据数
+      },
+      list: [],
+      total: 0,
+      shopsRadio: null,
+      isLoading: true
+    }
+  },
+  computed: {
+    disabled() {
+      return this.shopsRadio === null
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    // 获取所有供应商列表
+    async getList() {
+      this.list = []
+      this.listQuery.pageNum = 1
+      this.getProductList()
+    },
+    // 获取所有供应商列表
+    async getProductList() {
+      try {
+        const res = await getProductList(this.listQuery)
+        this.list = res.data.results
+        this.total = res.data.totalRecord
+        this.isLoading = false
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    // 选择供应商
+    handleSelectionChange(row) {
+      this.shopsRadio = row
+      console.log('row', row)
+    },
+    // 确认选择供应商
+    handleConfirm() {
+      this.$emit('confirm', this.shopsRadio)
+    },
+    handleCanle() {
+      // 取消弹窗
+      this.$emit('cancel')
+    },
+    // 已选择的禁用勾选框
+    selectable(row) {
+      if (row.flag) {
+        return true
+      } else {
+        return false
+      }
+    },
+    checkedInput(event, type) {
+      let pattern = ''
+      switch (type) {
+        case 1:
+          pattern = /[^\d]/g
+          break
+        case 2:
+          pattern = /[^u4E00-u9FA5|d|a-zA-Z|rns,.?!,。?!…—&$=()-+/*{}[]]|s/g
+          break
+      }
+      return event.replace(pattern, '')
+    }
+  }
+}
+</script>
+<style lang="scss" scoped></style>

+ 197 - 0
src/views/serviceSettlement/goods/index.vue

@@ -0,0 +1,197 @@
+<template>
+  <div class="app-container">
+    <!-- 顶部操作区域 -->
+    <div class="filter-container">
+      <div class="filter-control">
+        <span>商品ID:</span>
+        <el-input
+          v-model="listQuery.productId"
+          placeholder="商品ID"
+          clearable
+          @keyup.enter.native="getList"
+          @clear="getList"
+        />
+      </div>
+      <div class="filter-control">
+        <span>商品名称:</span>
+        <el-input
+          v-model="listQuery.productName"
+          placeholder="商品名称"
+          clearable
+          @keyup.enter.native="getList"
+          @clear="getList"
+        />
+      </div>
+      <div class="filter-control">
+        <el-button type="primary" @click="getList"> 查询 </el-button>
+        <el-button type="primary" @click="goodsDialogVisible = true"> 添加商品 </el-button>
+      </div>
+    </div>
+    <!-- 列表 -->
+    <el-table v-loading="isLoading" :data="list" border style="width: 100%" height="660">
+      <el-table-column prop="productId" label="商品ID" align="center" width="80" />
+      <el-table-column prop="mainImage" label="商品图片" align="center" width="120">
+        <template slot-scope="{ row }">
+          <img v-if="row.mainImage" :src="row.mainImage" alt="" style="width: 50px; height: 50px" />
+          <span v-else>---</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="productName" label="商品名称" align="center" />
+      <el-table-column prop="shopName" label="供应商名称" align="center" />
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{ row }">
+          <el-button type="danger" size="mini" style="margin: 2px" @click="handleDelete(row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 页码 -->
+    <pagination
+      :total="total"
+      :page-sizes="[10, 20, 30, 100]"
+      :page-size="20"
+      :page.sync="listQuery.pageNum"
+      :limit.sync="listQuery.pageSize"
+      @pagination="getShopProduct"
+    />
+    <!--  选择商品弹窗 -->
+    <goods-dialog v-if="goodsDialogVisible" ref="shopDialog" @confirm="handleAddGoodsConfirm" @cancel="handleCancel" />
+  </div>
+</template>
+
+<script>
+import { getProvidersProducts, addProducts, delProduct } from '@/api/serviceSettlement/goods'
+import GoodsDialog from '../components/goods-dialog'
+export default {
+  name: 'RecordList',
+  components: { GoodsDialog },
+  filters: {},
+  data() {
+    return {
+      isLoading: true,
+      listQuery: {
+        providerId: this.$route.query.providersId,
+        productName: '',
+        productId: '',
+        pageNum: 1,
+        pageSize: 20
+      },
+      list: [],
+      total: 0,
+      goodsDialogVisible: false
+    }
+  },
+  computed: {
+    providersId() {
+      return this.$route.query.providersId || false
+    }
+  },
+  created() {
+    this.getList()
+  },
+  mounted() {},
+  methods: {
+    // 获取行为记录列表
+    getList() {
+      this.list = []
+      this.listQuery.pageNum = 1
+      this.getProvidersProducts()
+    },
+    // 确认选择商品
+    handleAddGoodsConfirm(data) {
+      console.log('data', data)
+      const productIds = []
+      data.forEach((ele) => {
+        productIds.push(ele.productId)
+      })
+      this.addProducts({ providerId: this.providersId, productIds: productIds.join(',') })
+    },
+    // 取消选择供商品
+    handleCancel() {
+      this.goodsDialogVisible = false
+      this.$refs.shopDialog.visible = false
+    },
+    // 获取服务商商品列表
+    async getProvidersProducts() {
+      try {
+        this.isLoading = true
+        const res = await getProvidersProducts(this.listQuery)
+        this.list = res.data.results
+        this.total = res.data.totalRecord
+        this.isLoading = false
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    // 保存添加商品
+    async addProducts(params) {
+      try {
+        await addProducts(params)
+        this.goodsDialogVisible = false
+        this.$notify({
+          title: '',
+          message: '添加成功',
+          type: 'success'
+        });
+        this.getList()
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    // 操作删除商品
+    async handleDelete(row) {
+      try {
+        await this.$confirm('确定删除该商品吗?', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+        this.delProduct(row)
+      } catch (error) {
+        this.$message.info('已取消删除操作')
+      }
+    },
+    // 调用删除广告图
+    async delProduct(row) {
+      try {
+        await delProduct({ providerId: this.providersId, productId: row.productId })
+        this.$notify({
+          title: '',
+          message: '删除成功',
+          type: 'success'
+        });
+        this.getList()
+      } catch (error) {
+        console.log(error)
+      }
+    }
+  }
+}
+</script>
+
+<style>
+.tags-sms {
+  width: 100%;
+  height: auto;
+  font-size: 16px;
+  color: #333333;
+  line-height: 28px;
+  box-sizing: border-box;
+  padding: 5px;
+}
+.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+  float: left;
+}
+.uploader-tips {
+  position: absolute;
+  bottom: 0;
+  left: 160px;
+  line-height: 28px;
+  color: red;
+  margin: 0;
+}
+</style>

+ 4 - 0
src/views/serviceSettlement/list/edit.vue

@@ -46,6 +46,9 @@
           />
         </el-select>
       </el-form-item>
+      <el-form-item label="服务商分帐号:" prop="splitCode">
+        <el-input v-model="formLabelAlign.splitCode" placeholder="请输入服务商分帐号" />
+      </el-form-item>
       <el-form-item label="联系人:" prop="linkMan">
         <el-input v-model="formLabelAlign.linkMan" placeholder="请输入联系人" />
       </el-form-item>
@@ -174,6 +177,7 @@ export default {
         serviceLevel: [
           { required: true, message: '请选择服务商级别', trigger: 'change' }
         ],
+        //splitCode: [{ required: true, message: '请输入联系服务商分账号', trigger: 'blur' }],
         mobile: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
         linkMan: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
         serviceCategory: [

+ 21 - 7
src/views/serviceSettlement/list/index.vue

@@ -81,16 +81,16 @@
         type="index"
         sortable="custom"
         align="center"
-        width="80"
+        width="50"
       />
       <el-table-column prop="name" label="服务商名称" align="center" />
       <el-table-column prop="serviceLevel" label="服务商级别" align="center">
         <template slot-scope="{ row }">
-          <el-tag type="success" effect="dark" size="mini" v-if="row.serviceLevel === 1">一级</el-tag>
-          <el-tag type="success" effect="dark" size="mini" v-if="row.serviceLevel === 2">二级</el-tag>
-          <el-tag type="success" effect="dark" size="mini" v-if="row.serviceLevel === 3">三级</el-tag>
-          <el-tag type="success" effect="dark" size="mini" v-if="row.serviceLevel === 4">品牌特约</el-tag>
-          <el-tag type="success" effect="dark" size="mini" v-if="row.serviceLevel === 5">品牌指定</el-tag>
+          <el-tag v-if="row.serviceLevel === 1" type="success" effect="dark" size="mini">一级</el-tag>
+          <el-tag v-if="row.serviceLevel === 2" type="success" effect="dark" size="mini">二级</el-tag>
+          <el-tag v-if="row.serviceLevel === 3" type="success" effect="dark" size="mini">三级</el-tag>
+          <el-tag v-if="row.serviceLevel === 4" type="success" effect="dark" size="mini">品牌特约</el-tag>
+          <el-tag v-if="row.serviceLevel === 5" type="success" effect="dark" size="mini">品牌指定</el-tag>
         </template>
       </el-table-column>
       <el-table-column prop="serviceCategory" label="服务商类型" align="center">
@@ -100,9 +100,16 @@
           </div>
         </template>
       </el-table-column>
+      <el-table-column prop="serviceCategory" label="服务商分账号" align="center">
+        <template slot-scope="{ row }">
+          <div>
+            {{ row.splitCode ? row.splitCode : "--" }}
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column prop="contractStartDate" label="授权起始日期" align="center" />
       <el-table-column prop="contractEndDate" label="授权截止日期" align="center" />
-      <el-table-column prop="status" label="状态" align="center">
+      <el-table-column prop="status" label="状态" align="center" width="100">
         <template slot-scope="scope">
           <div>
             已{{ scope.row.status === 90 ? "上线" : "下线" }}
@@ -132,6 +139,13 @@
                 $router.push('/service/settlement/contract/list?providersId=' + row.id)
               "
             >合同管理</el-button>
+            <el-button
+              type="primary"
+              size="mini"
+              @click="
+                $router.push('/service/settlement/goods/list?providersId=' + row.id)
+              "
+            >商品管理</el-button>
           </div>
         </template>
       </el-table-column>

+ 3 - 3
src/views/user/customer/customer-goods-list.vue

@@ -112,7 +112,7 @@
       :limit.sync="listQuery.pageSize"
       @pagination="getShopProduct"
     />
-    <!--  选择供应商弹窗 -->
+    <!--  选择商弹窗 -->
     <goods-dialog v-if="goodsDialogVisible" ref="shopDialog" @confirm="handleAddShopConfirm" @cancel="handleCancel" />
     <!-- 设置统计状态 -->
     <el-dialog title="设置统计状态" :visible.sync="dialogFormVisible" width="500px">
@@ -232,7 +232,7 @@ export default {
       this.listQuery.pageNum = 1
       this.getShopProduct()
     },
-    // 确认选择供应
+    // 确认选择商
     handleAddShopConfirm(data) {
       console.log('data', data)
       const productIds = []
@@ -241,7 +241,7 @@ export default {
       })
       this.saveShopProduct({ id: this.listQuery.id, productIds: productIds.join(',') })
     },
-    // 取消选择供
+    // 取消选择供商
     handleCancel() {
       this.goodsDialogVisible = false
       this.$refs.shopDialog.visible = false