xiebaomin 1 рік тому
батько
коміт
ad541a5177

+ 3 - 2
.env.development

@@ -5,7 +5,8 @@ ENV = 'development'
 # VUE_APP_BASE_API = 'http://192.168.2.67:18015'
 # VUE_APP_BASE_API = 'http://localhost:18015'
 # VUE_APP_BASE_API = 'http://192.168.2.102:18015'
-VUE_APP_BASE_API = 'https://mapi-b.caimei365.com'
+ VUE_APP_BASE_API = 'http://192.168.2.103:18015'
+#VUE_APP_BASE_API = 'https://mapi-b.caimei365.com'
 # 图片上传,索引更新等
 VUE_APP_CORE_API = 'https://core-b.caimei365.com'
 
@@ -13,4 +14,4 @@ VUE_APP_CORE_API = 'https://core-b.caimei365.com'
 VUE_APP_CAIMEI_URL = 'http://120.79.25.27:8009'
 
 # 采美旧后台
-VUE_APP_ADMIN_URL = 'https://admin-b.caimei365.com'
+VUE_APP_ADMIN_URL = 'https://admin-b.caimei365.com'

+ 49 - 0
src/api/contentLibrary/context.js

@@ -0,0 +1,49 @@
+import request from '@/utils/request'
+
+export const getContextList = (params) => request({
+  url: '/productArchive/content/list',
+  method: 'GET',
+  params
+})
+
+export const getLabelKey = (params) => request({
+  url: process.env.VUE_APP_CORE_API + '/commodity/product/archive/findKeyWordList',
+  method: 'GET',
+  params
+})
+
+export const addContext = (data) => request({
+  url: '/productArchive/content/add',
+  method: 'POST',
+  data
+})
+
+export const getContextDetail = (params) => request({
+  url: '/productArchive/content/from',
+  method: 'GET',
+  params
+})
+
+export const uploadFile = (data) => request({
+  url: '/formData/oss/MultiPictareaddData',
+  method: 'POST',
+  headers: {
+    'Content-Type': 'multipart/form-data'
+  },
+  data
+})
+
+export const deleteContext = (data) => request({
+  url: '/productArchive/content/del',
+  method: 'POST',
+  headers: {
+    'Content-Type': 'multipart/form-data'
+  },
+  data
+})
+
+export const findKeyWordList = (params) => request({
+  url: '/home/findKeyWordList',
+  method: 'GET',
+  params
+})

+ 25 - 0
src/api/contentLibrary/store.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+export const getStoreBaseList = (params) => request({
+  url: '/home/findProductList',
+  method: 'GET',
+  params
+})
+
+export const getStoreList = (params) => request({
+  url: '/productArchive/list',
+  method: 'GET',
+  params
+})
+
+export const getStoreDetail = (params) => request({
+  url: '/productArchive/from',
+  method: 'GET',
+  params
+})
+
+export const addStore = (data) => request({
+  url: '/productArchive/add',
+  method: 'POST',
+  data
+})

+ 14 - 6
src/components/Editor/index.vue

@@ -29,10 +29,16 @@ import '/node_modules/@wangeditor/editor/dist/css/style.css'
 
 export default Vue.extend({
   components: { Editor, Toolbar },
+  props: {
+    value: {
+      type: String,
+      default: () => ''
+    }
+  },
   data() {
     return {
       editor: null,
-      html: '<p>hello</p>',
+      html: '',
       toolbarConfig: {},
       editorConfig: {
         MENU_CONF: {
@@ -56,11 +62,13 @@ export default Vue.extend({
       mode: 'simple' // or 'simple'
     }
   },
-  mounted() {
-    // 模拟 ajax 请求,异步渲染编辑器
-    setTimeout(() => {
-      this.html = '<p>模拟 Ajax 异步设置内容 HTML</p>'
-    }, 1500)
+  watch: {
+    html(val) {
+      this.$emit('input', val)
+    },
+    value(val) {
+      this.html = val
+    }
   },
   beforeDestroy() {
     const editor = this.editor

+ 186 - 0
src/views/dataBase/components/UploadFile.vue

@@ -0,0 +1,186 @@
+<template>
+  <div>
+    <input
+      ref="uploadInp"
+      type="file"
+      :accept="accept"
+      required
+      style="display: none;"
+      @change="handleChange($event)"
+    />
+    <div class="tips">{{ tip }}</div>
+    <el-button size="mini" type="primary" @click="triggerInput">选择文件</el-button>
+    <div v-for="(file, index) in dataList" :key="index" class="file-list">
+      <span>{{ file.fileName }} </span>
+      <div>
+        <el-button type="text" size="small" @click="handlePreview(file.ossUrl)">预览</el-button>
+        <el-button type="text" size="small" style="color: red" @click="handleRemove(index)">删除</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import { uploadFile } from '@/api/contentLibrary/context'
+export default {
+  name: 'UploadFile',
+  props: {
+    tip: {
+      type: String,
+      default: ''
+    },
+    multiple: {
+      type: Boolean,
+      default: false
+    },
+    limit: {
+      type: Number,
+      default: 1
+    },
+    accept: {
+      type: String,
+      default: '.docx,.pptx,.pdf,.mp4'
+    },
+    listType: {
+      type: String,
+      default: 'picture-card'
+    },
+    fileList: {
+      type: Array,
+      default: () => []
+    },
+    uuid: {
+      type: Number,
+      default: 0
+    },
+    beforeUpload: {
+      type: Function,
+      default: () => true
+    },
+    autoUpload: {
+      type: Boolean,
+      default: true
+    },
+    mode: {
+      type: String,
+      default: 'brand'
+    },
+    list: {
+      type: Array,
+      default: () => []
+    },
+    isCheck: {
+      type: Boolean,
+      default: () => true
+    },
+    actionUrl: {
+      type: String,
+      default: () => '/formData/MultiPictareaddData'
+    },
+    dataParams: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      dialogImageUrl: '',
+      dataList: [],
+      iframUrl: '',
+      dataObj: {
+        multipartFile: ''
+      },
+      count: 0,
+      loading: false
+    }
+  },
+  computed: {
+    ...mapGetters(['token']),
+    chooseState() {
+      return this.dataList.length < this.limit
+    },
+    action() {
+      return process.env.VUE_APP_BASE_API + this.actionUrl
+    },
+    headers() {
+      return {
+        'X-Token': this.token
+      }
+    }
+  },
+  watch: {
+    list: {
+      handler(val) {
+        console.log(val)
+        this.dataList = val
+      },
+      deep: true
+    }
+  },
+  methods: {
+    triggerInput() {
+      this.$refs.uploadInp.click()
+    },
+    // 删除
+    handleRemove(index) {
+      this.dataList = this.dataList.filter((_, i) => index !== i)
+      this.$emit('remove', { fileList: this.dataList })
+    },
+    // 变化
+    async handleChange(file) {
+      console.log(file)
+      const f = file.target.files[0]
+      const formData = new FormData()
+      formData.append('multipartFile', f)
+      try {
+        this.$emit('change-loading')
+        const data = await uploadFile(formData)
+        if (data.success) {
+          this.dataList.push({ fileName: data.fileName, ossUrl: data.url, ossName: data.ossName })
+          this.$emit('success', { fileList: this.dataList })
+          this.$emit('change-loading')
+          this.$message({
+            type: 'success',
+            message: '上传成功'
+          })
+        }
+      } catch (error) {
+        this.$message({
+          type: 'error',
+          message: '上传失败'
+        })
+        console.error(error)
+      }
+    },
+    // 上传失败
+    uploadError(err, file, fileList) {
+      this.dataList = fileList
+      this.$emit('error', { err, file, fileList })
+    },
+    handlePreview(f) {
+      if (f.indexOf('.docx') !== -1 || f.indexOf('.pptx') !== -1) {
+        window.open(`https://view.officeapps.live.com/op/view.aspx?src=${encodeURIComponent(f)}`)
+      } else {
+        window.open('javascript:window.name;', '<script>location.replace("' + f + '")<\/script>')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-upload-list {
+  display: none;
+}
+::v-deep .el-upload__tip {
+  position: static;
+}
+.file-list {
+  display: flex;
+  justify-content: space-between;
+  padding-right: 30px;
+  margin-top: 10px;
+}
+</style>

+ 115 - 0
src/views/dataBase/components/data-select.vue

@@ -0,0 +1,115 @@
+<template>
+  <div style="display: inline-block;">
+    <el-select
+      ref="select"
+      v-model="arr"
+      placeholder="标签"
+      filterable
+      remote
+      :multiple="isMultiple"
+      reserve-keyword
+      :remote-method="remoteMethod"
+      :loading="loading"
+    >
+      <el-option v-for="(i, index) in options" :key="index" :label="i.keyword" :value="i.id" @click.native="handleClick(i)" />
+    </el-select>
+    <div v-if="isEdit">
+      <el-tag
+        v-for="tag in emitArr"
+        :key="tag.id"
+        closable
+        :disable-transitions="false"
+        @close="handleClose(tag)"
+      >
+        {{ tag.keyword }}
+      </el-tag>
+    </div>
+  </div>
+</template>
+
+<script>
+import { findKeyWordList } from '@/api/contentLibrary/context'
+export default {
+  props: {
+    labelIds: {
+      type: Array,
+      default: () => []
+    },
+    isEdit: {
+      type: Boolean,
+      default: () => true
+    },
+    isMultiple: {
+      type: Boolean,
+      default: () => false
+    }
+  },
+  data() {
+    return {
+      emitArr: [],
+      list: [],
+      options: [],
+      loading: false,
+      arr: ''
+    }
+  },
+  watch: {
+    labelIds(val) {
+      console.log('传递来的emitArr', val)
+      this.emitArr = val
+    },
+    arr(val) {
+      if (this.isMultiple) {
+        this.$emit('handle-emit', val)
+      }
+    }
+  },
+  methods: {
+    async remoteMethod(v) {
+      if (v !== '') {
+        this.loading = true
+        try {
+          const { data } = await findKeyWordList({ keyword: v, pageSize: 10, pageNum: 1 })
+          this.list = data.results
+          const isShow = (i) => {
+            if (this.isMultiple) return !this.arr.some(e => e === i.id)
+            return !this.emitArr.some(e => Number(e.id) === Number(i.id))
+          }
+          this.options = this.list.filter(item => {
+            return ((item.keyword.toLowerCase()
+              .indexOf(v.toLowerCase()) > -1) && isShow(item))
+          })
+          console.log(this.options, this.labelIds)
+          this.loading = false
+        } catch (error) {
+          this.options = []
+          console.error(error)
+        }
+      } else {
+        this.options = []
+      }
+    },
+    handleClose(tag) {
+      this.emitArr = this.emitArr.filter(e => e.id !== tag.id)
+      this.$emit('handle-emit', this.emitArr)
+    },
+    handleClick($event) {
+      setTimeout(() => {
+        this.$refs.select.blur()
+        this.options = []
+      }, 200)
+      if (!this.isMultiple) {
+        this.emitArr.push($event)
+        console.log('传过去的', this.emitArr)
+        this.$emit('handle-emit', this.emitArr)
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.el-tag {
+  margin: 5px 5px 5px 0;
+}
+</style>

+ 2 - 1
src/views/dataBase/components/dataManageTab.vue

@@ -18,13 +18,14 @@ export default {
   mixins: [databaseMixin],
   data() {
     return {
-      activeName: '1'
+      activeName: sessionStorage.getItem('TabStorage') || '3'
     }
   },
   watch: {
     activeName: {
       handler(val) {
         if (val) {
+          sessionStorage.setItem('TabStorage', val)
           this.$emit('change', val)
         }
       },

+ 30 - 18
src/views/dataBase/components/dialogTable.vue

@@ -2,23 +2,24 @@
   <div class="supplier-list-selector">
     <div class="filter-container">
       <div class="filter-control">
-        <span>商品编号:</span>
-        <el-input v-model="listQuery.name" size="mini" placeholder="商品编号" @keyup.enter.native="filterList" />
+        <span>商品ID:</span>
+        <el-input v-model="listQuery.productId" size="mini" placeholder="商品ID" @keyup.enter.native="filterList" />
       </div>
       <div class="filter-control">
         <span>商品名称:</span>
-        <el-input v-model="listQuery.name" size="mini" placeholder="商品名称" @keyup.enter.native="filterList" />
+        <el-input v-model="listQuery.productName" size="mini" placeholder="商品名称" @keyup.enter.native="filterList" />
       </div>
       <div class="filter-control">
         <span>供应商名称:</span>
-        <el-input v-model="listQuery.name" size="mini" placeholder="供应商名称" @keyup.enter.native="filterList" />
+        <el-input v-model="listQuery.shopName" size="mini" placeholder="供应商名称" @keyup.enter.native="filterList" />
       </div>
       <div class="filter-control">
         <el-button type="primary" size="mini" @click="filterList">查询</el-button>
       </div>
     </div>
     <el-table
-      ref="multipleTable"
+      ref="Table"
+      v-loading="isLoading"
       :data="list"
       border
       fit
@@ -27,10 +28,14 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column prop="id" label="商品ID" width="55" align="center" />
-      <el-table-column prop="name" label="商品图片" align="center" />
-      <el-table-column prop="serviceLevel" label="商品名称" align="center" />
-      <el-table-column prop="contractStartDate" label="供应商名称" align="center" />
+      <el-table-column prop="productId" label="商品ID" align="center" />
+      <el-table-column prop="productImage" label="商品图片" align="center">
+        <template slot-scope="scope">
+          <el-image style="width: 150px;height: 100px" fit="contain" :src="scope.row.productImage" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="productName" label="商品名称" align="center" />
+      <el-table-column prop="shopName" label="供应商名称" align="center" />
     </el-table>
     <!-- 页码 -->
     <pagination :total="total" :page.sync="listQuery.pageNum" :limit.sync="listQuery.pageSize" @pagination="getList" />
@@ -41,24 +46,20 @@
   </div>
 </template>
 <script>
-import { getProviderList } from '@/api/serviceSettlement/service'
+import { getStoreBaseList } from '@/api/contentLibrary/store'
 
 export default {
   name: 'ClubListSelector',
   data() {
     return {
       listQuery: {
-        authUserId: '',
-        authParty: '',
-        auditStatus: '',
-        status: '',
-        name: '',
         pageNum: 1, // 页码
         pageSize: 10 // 分页
       },
       list: [],
       total: 0,
-      multipleSelection: []
+      multipleSelection: [],
+      isLoading: false
     }
   },
   computed: {
@@ -79,14 +80,17 @@ export default {
         this.$message.warning('选择列表不能为空')
         return
       }
-      this.$emit('confirm', this.multipleSelection)
+      this.$emit('confirm', this.multipleSelection[0])
     },
 
     // 获取机构列表
     async getList() {
-      const { data } = await getProviderList(this.listQuery)
+      this.isLoading = true
+      const { data } = await getStoreBaseList(this.listQuery)
+      console.log(data)
       this.list = data.results
       this.total = data.totalRecord
+      this.isLoading = false
     },
 
     // 筛选机构列表
@@ -102,6 +106,11 @@ export default {
 
     // 表格列选择
     handleSelectionChange(rows) {
+      if (rows.length > 1) {
+        rows.shift()
+        this.$refs.Table.clearSelection()
+        this.$refs.Table.toggleRowSelection(rows[0])
+      }
       this.multipleSelection = rows
     },
 
@@ -122,4 +131,7 @@ export default {
   text-align: right;
   margin-top: 15px;
 }
+::v-deep .el-table__header-wrapper .el-table__header .el-checkbox {
+  display: none;
+}
 </style>

+ 143 - 0
src/views/dataBase/components/dialogTypeTable.vue

@@ -0,0 +1,143 @@
+<template>
+  <div class="supplier-list-selector">
+    <div class="filter-container">
+      <div class="filter-control">
+        <span>标题:</span>
+        <el-input v-model="listQuery.title" size="mini" placeholder="标题" @keyup.enter.native="filterList" />
+      </div>
+      <div class="filter-control">
+        <el-button type="primary" size="mini" @click="filterList">查询</el-button>
+      </div>
+    </div>
+    <el-table
+      ref="Table"
+      v-loading="isLoading"
+      :data="list"
+      border
+      highlight-current-row
+      header-row-class-name="tableHeader"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column
+        label="ID"
+        prop="id"
+        align="center"
+        width="80"
+      />
+      <el-table-column prop="title" label="标题" align="center" />
+      <el-table-column prop="stageStatus" label="用户阶段" align="center">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.stageStatus | userStateFilter(userClass) }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="labelIds" label="标签" align="center">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.labelIds }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="pv" label="浏览量" align="center" />
+      <el-table-column prop="addTime" label="添加时间" align="center" />
+      <el-table-column prop="createBy" label="创建人" align="center" />
+    </el-table>
+    <!-- 页码 -->
+    <pagination :total="total" :page.sync="listQuery.pageNum" :limit.sync="listQuery.pageSize" @pagination="getList" />
+    <div class="control-footer">
+      <el-button type="primary" @click="onCancel">取消</el-button>
+      <el-button type="primary" @click="onConfirm">确认</el-button>
+    </div>
+  </div>
+</template>
+<script>
+import { getContextList } from '@/api/contentLibrary/context'
+import databaseMixin from '../mixins/index'
+
+export default {
+  name: 'Selector',
+  mixins: [databaseMixin],
+  props: {
+    typeId: {
+      type: Number,
+      default: () => 0
+    }
+  },
+  data() {
+    return {
+      listQuery: {
+        pageNum: 1, // 页码
+        pageSize: 10, // 分页
+        title: ''
+      },
+      list: [],
+      total: 0,
+      multipleSelection: [],
+      isLoading: false
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    // 取消
+    onCancel() {
+      this.multipleSelection = []
+      this.$emit('cancel', [])
+    },
+
+    // 确认
+    onConfirm() {
+      if (this.multipleSelection.length === 0) {
+        this.$message.warning('选择列表不能为空')
+        return
+      }
+      this.$emit('confirm', this.multipleSelection)
+    },
+
+    // 获取机构列表
+    async getList() {
+      this.isLoading = true
+      const { data } = await getContextList(Object.assign(this.listQuery, { productArchiveId: this.id, type: this.typeId }))
+      console.log(data)
+      this.list = data.results
+      this.total = data.totalRecord
+      this.isLoading = false
+    },
+
+    // 筛选机构列表
+    filterList() {
+      this.listQuery.pageNum = 1
+      this.getList()
+    },
+
+    // 设置选中的行
+    setSelection() {
+      this.list.forEach((row) => {})
+    },
+
+    // 表格列选择
+    handleSelectionChange(rows) {
+      this.multipleSelection = rows
+    },
+
+    // 表格索引
+    indexMethod(index) {
+      return index + this.listQuery.pageSize * (this.listQuery.pageNum - 1) + 1
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+::v-deep {
+  .pagination-container {
+    padding: 0 !important;
+  }
+}
+.control-footer {
+  text-align: right;
+  margin-top: 15px;
+}
+</style>

+ 18 - 10
src/views/dataBase/components/storeItem.vue

@@ -1,19 +1,24 @@
 <template>
   <div class="store-item">
-    <el-image :src="storeObj.image" />
-    <div class="store-name">{{ storeObj.name }}</div>
+    <el-image :src="productImage" />
+    <div class="store-name">{{ productName }}</div>
   </div>
 </template>
 
 <script>
 export default {
   props: {
-    storeObj: {
-      type: Object,
-      default: () => ({
-        name: '12346',
-        image: ''
-      })
+    productImage: {
+      type: String,
+      default: () => ''
+    },
+    productName: {
+      type: String,
+      default: () => ''
+    }
+  },
+  data() {
+    return {
     }
   }
 }
@@ -22,15 +27,18 @@ export default {
 <style lang="scss" scoped>
 .store-item {
   padding: 10px;
-  margin: 10px;
+  margin: 10px 0;
   display: flex;
   align-items: center;
-  background: #fff;
+  background: #66666636;
   margin-bottom: 10px;
   .el-image {
     width: 80px;
     height: 80px;
     margin-right: 10px;
   }
+  .store-name {
+    width: calc(100% - 80px);
+  }
 }
 </style>

+ 32 - 23
src/views/dataBase/mixins/index.js

@@ -1,16 +1,27 @@
+import { mapGetters } from 'vuex'
+import { getServiceList } from '@/api/library/keyword'
+
 export default {
   data() {
     return {
       storeAttributes: [
         {
-          id: 1,
-          value: '仪器'
+          id: '',
+          value: '请选择'
+        },
+        {
+          id: '1',
+          value: '产品'
         }, {
-          id: 2,
-          value: '设备'
+          id: '2',
+          value: '仪器'
         }
       ],
       storeClass: [
+        {
+          id: '',
+          value: '请选择'
+        },
         {
           id: 1,
           value: '医美'
@@ -56,8 +67,8 @@ export default {
       },
       userClass: [
         {
-          id: 0,
-          value: '全部'
+          id: '',
+          value: '请选择'
         },
         {
           id: 1,
@@ -76,23 +87,10 @@ export default {
           value: '购买阶段'
         }
       ],
-      userType: [
-        {
-          id: 0,
-          value: '全部'
-        },
-        {
-          id: 1,
-          value: '标签一'
-        },
-        {
-          id: 2,
-          value: '标签二'
-        }
-      ],
+      userType: [],
       dataManageListType: [
         {
-          id: '1',
+          id: '3',
           value: '文件'
         },
         {
@@ -100,7 +98,7 @@ export default {
           value: '视频'
         },
         {
-          id: '3',
+          id: '1',
           value: '图片'
         },
         {
@@ -111,10 +109,12 @@ export default {
           id: '5',
           value: '话术'
         }
-      ]
+      ],
+      sellerList: []
     }
   },
   computed: {
+    ...mapGetters(['userId', 'username', 'fullName', 'phone']),
     type() {
       return Number(this.$route.query.t) || false
     },
@@ -123,6 +123,9 @@ export default {
     },
     tId() {
       return this.$route.query.tId || false
+    },
+    pId() {
+      return this.$route.query.pid || false
     }
   },
   filters: {
@@ -132,5 +135,11 @@ export default {
     userTypeFilter(val, list) {
       return list.filter(e => e.id === val)[0].value
     }
+  },
+  methods: {
+    async getServiceList() {
+      const { data } = await getServiceList()
+      this.sellerList = data
+    }
   }
 }

+ 147 - 33
src/views/dataBase/store-list/data-management/edit.vue

@@ -1,30 +1,34 @@
 <template>
   <div>
-    <el-form ref="form" :model="form" :rules="fileAddRules" label-width="120px">
-      <el-form-item label="标题:">
-        <el-input v-model="form.name" />
+    <el-form ref="form" v-loading="loading" :model="form" :rules="fileAddRules" label-width="120px">
+      <el-form-item label="标题:" prop="title">
+        <el-input v-model="form.title" />
       </el-form-item>
-      <el-form-item v-if="type === 1" label="文件路径:">
+      <el-form-item v-if="type === 3" label="文件路径:" prop="archiveFiles">
         <file-upload
           :limit="20"
           :is-check="false"
-          :file-list="fileList"
+          :list="fileList"
+          :accept="'.docx,.pptx,.pdf'"
           :tip="'支持上传pdf、docx、pptx文件格式'"
+          @change-loading="() => (loading = !loading)"
           @success="UploadSuccess($event)"
           @remove="HandleRemove($event)"
         />
       </el-form-item>
-      <el-form-item v-if="type === 2" label="视频路径:">
+      <el-form-item v-if="type === 2" label="视频路径:" prop="archiveFiles">
         <file-upload
           :limit="20"
           :is-check="false"
-          :file-list="fileList"
-          :tip="'支持上传pdf、docx、pptx文件格式'"
+          :list="fileList"
+          :accept="'.mp4'"
+          :tip="'支持上传.mp4文件格式'"
+          @change-loading="() => (loading = !loading)"
           @success="UploadSuccess($event)"
           @remove="HandleRemove($event)"
         />
       </el-form-item>
-      <el-form-item v-if="type === 3" label="图片路径:">
+      <el-form-item v-if="type === 1" label="图片路径:" prop="archiveFiles">
         <image-upload
           :limit="6"
           :image-list="fileList"
@@ -32,19 +36,19 @@
           @remove="handleImageRemove($event, 'textRelateds')"
         />
       </el-form-item>
-      <el-form-item v-if="type === 4" label="文本内容:">
-        <editor-input />
+      <el-form-item v-if="type === 4" label="文本内容:" prop="content">
+        <editor-input v-model="form.content" />
       </el-form-item>
-      <el-form-item v-if="type === 5" label="话术内容:">
+      <el-form-item v-if="type === 5" label="话术内容:" prop="content">
         <el-input
-          v-model="form.textarea2"
+          v-model="form.content"
           type="textarea"
           :autosize="{ minRows: 2, maxRows: 4}"
           placeholder="请输入内容"
         />
       </el-form-item>
-      <el-form-item label="用户阶段:">
-        <el-select v-model="form.userClass" placeholder="用户阶段">
+      <el-form-item label="用户阶段:" prop="stageStatus">
+        <el-select v-model="form.stageStatus" placeholder="用户阶段">
           <el-option
             v-for="(i, index) in userClass"
             :key="index"
@@ -53,15 +57,8 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="标签:">
-        <el-select v-model="form.userType" placeholder="标签">
-          <el-option
-            v-for="(i, index) in userType"
-            :key="index"
-            :label="i.value"
-            :value="i.id"
-          />
-        </el-select>
+      <el-form-item label="标签:" prop="labelIds">
+        <data-select :label-ids="labelIds" @handle-emit="handleSelect" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="submitForm('form')">提交</el-button>
@@ -73,31 +70,148 @@
 
 <script>
 import ImageUpload from '@/components/UploadImage/index.vue'
-import FileUpload from '@/views/serviceSettlement/components/UploadFile.vue'
+import FileUpload from '../../components/UploadFile.vue'
 import databaseMixin from '../../mixins/index'
 import EditorInput from '@/components/Editor/index.vue'
+import dataSelect from '../../components/data-select.vue'
+import { addContext, getContextDetail } from '@/api/contentLibrary/context'
 
 export default {
   components: {
     ImageUpload,
     FileUpload,
-    EditorInput
+    EditorInput,
+    dataSelect
   },
   mixins: [databaseMixin],
   data() {
     return {
       form: {
-        infoType: 1
+        stageStatus: '',
+        productArchiveId: 0,
+        archiveFiles: [],
+        labelIds: '123'
       },
-      fileList: []
+      fileList: [],
+      labelIds: [],
+      loading: false,
+      fileAddRules: {
+        stageStatus: [
+          {
+            required: true,
+            message: '选择用户阶段',
+            trigger: 'blur'
+          }
+        ],
+        archiveFiles: [
+          {
+            required: true,
+            message: '请上传文件',
+            trigger: 'change'
+          }
+        ],
+        title: [
+          {
+            required: true,
+            message: '请输入标题',
+            trigger: 'blur'
+          }
+        ],
+        labelIds: [
+          {
+            required: true,
+            message: '请选择标签',
+            trigger: 'blur'
+          }
+        ]
+      }
+    }
+  },
+  mounted() {
+    if (this.tId) {
+      this.getContextDetail()
     }
   },
   methods: {
-    HandleRemove() {},
-    UploadSuccess() {},
-    handleImageSuccess() {},
-    handleImageRemove() {},
-    submitForm(form) {}
+    async getContextDetail() {
+      const { data } = await getContextDetail({ id: this.tId })
+      this.form = data
+      const isArray = (a) => a?.indexOf(',') !== -1
+      const k = isArray(data.keywords) ? data.keywords?.split(',') : [data.keywords]
+      const v = isArray(data.labelIds) ? data.labelIds?.split(',') : [data.labelIds]
+      this.labelIds = k?.map((e, i) => ({
+        id: v[i],
+        keyword: e
+      }))
+      this.fileList = data.type !== '1' ? data.archiveFiles : data.archiveFiles.map(e => ({
+        uid: e.id,
+        url: e.ossUrl,
+        name: e.id,
+        response: {
+          data: e.ossUrl
+        }
+      }))
+      console.log(this.labelIds)
+    },
+    HandleRemove(file) {
+      console.log(file)
+      this.form.archiveFiles = file.fileList
+    },
+    UploadSuccess(file) {
+      console.log(file)
+      this.form.archiveFiles = file.fileList
+    },
+    handleImageSuccess(file) {
+      console.log(file)
+      this.form.archiveFiles = file.fileList.map(e => ({
+        ossUrl: e.response.data,
+        fileName: e.name,
+        ossName: e.name
+      }))
+    },
+    handleImageRemove(file) {
+      this.form.archiveFiles = file.fileList.map(e => ({
+        ossUrl: e.response.data,
+        fileName: e.name,
+        ossName: e.name
+      }))
+    },
+    submitForm(form) {
+      this.$refs[form].validate(async valid => {
+        if (valid) {
+          try {
+            console.log(this.form.content)
+            const form = {
+              stageStatus: this.form.stageStatus.toString(),
+              type: this.type.toString(),
+              archiveFiles: this.form.archiveFiles || [],
+              productArchiveId: this.id,
+              labelIds: this.form.labelIds,
+              createBy: this.fullName,
+              title: this.form.title,
+              id: this.form.id || '',
+              content: this.form.content || ''
+            }
+            const data = await addContext(form)
+            if (data.code === 0) {
+              this.$router.back()
+            } else {
+              this.$message({
+                type: 'error',
+                message: data.msg
+              })
+            }
+          } catch (error) {
+            console.error(error)
+          }
+        }
+      })
+    },
+    handleSelect(val) {
+      console.log(val)
+      this.form.labelIds = val.map(e => e.k).join(',')
+      console.log(this.form.labelIds)
+    }
   }
 }
 </script>

+ 89 - 51
src/views/dataBase/store-list/data-management/list.vue

@@ -5,7 +5,7 @@
       <manage-tab @change="handleChange" />
 
       <div v-if="listQuery.type === 5">
-        <el-tabs v-model="listQuery.type2">
+        <el-tabs v-model="listQuery.allStatus" @tab-click="handleChange(listQuery.type)">
           <el-tab-pane label="企业话术" name="1" />
           <el-tab-pane label="个人话术" name="2" />
         </el-tabs>
@@ -14,16 +14,16 @@
       <div class="filter-control">
         <span>标题:</span>
         <el-input
-          v-model="listQuery.name"
+          v-model="listQuery.title"
           placeholder="标题"
           clearable
           @keyup.enter.native="handleChange(listQuery.type)"
           @clear="handleChange(listQuery.type)"
         />
       </div>
-      <div v-if="listQuery.type !== 5" class="filter-control">
+      <div v-if="listQuery.allStatus !== '2'" class="filter-control">
         <span>用户阶段:</span>
-        <el-select v-model="listQuery.userClass" placeholder="用户阶段" @change="handleChange(listQuery.type)">
+        <el-select v-model="listQuery.stageStatus" placeholder="用户阶段" @change="handleChange(listQuery.type)">
           <el-option
             v-for="(i, index) in userClass"
             :key="index"
@@ -32,32 +32,25 @@
           />
         </el-select>
       </div>
-      <div v-if="listQuery.type !== 5" class="filter-control">
+      <div v-if="listQuery.allStatus !== '2'" class="filter-control">
         <span>标签:</span>
-        <el-select v-model="listQuery.userType" placeholder="标签" @change="handleChange(listQuery.type)">
-          <el-option
-            v-for="(i, index) in userType"
-            :key="index"
-            :label="i.value"
-            :value="i.id"
-          />
-        </el-select>
+        <data-select :is-edit="false" :is-multiple="true" @handle-emit="handleSelect" />
       </div>
-      <div v-if="listQuery.type === 5" class="filter-control">
+      <div v-if="listQuery.allStatus === '2'" class="filter-control">
         <span>上传者:</span>
-        <el-select v-model="listQuery.userClass" placeholder="上传者" @change="handleChange(listQuery.type)">
+        <el-select v-model="listQuery.spId" placeholder="上传者" @change="handleChange(listQuery.type)">
           <el-option
-            v-for="(i, index) in userClass"
-            :key="index"
-            :label="i.value"
-            :value="i.id"
+            v-for="item in sellerList"
+            :key="item.serviceProviderId"
+            :label="item.linkMan"
+            :value="item.serviceProviderId"
           />
         </el-select>
       </div>
       <div class="filter-control">
         <el-button type="primary" @click="handleChange(listQuery.type)">查询</el-button>
-        <el-button v-if="listQuery.type !== 5" type="primary" @click="$router.push('/database/store-list/data-manage/edit?id=' + id + '&t=' + listQuery.type)">添加</el-button>
-        <el-button v-if="listQuery.type !== 5" type="primary" @click="exportDialogVisible = true">删除</el-button>
+        <el-button v-if="listQuery.allStatus !== '2'" type="primary" @click="$router.push('/database/store-list/data-manage/edit?id=' + id + '&t=' + listQuery.type)">添加</el-button>
+        <el-button v-if="listQuery.allStatus !== '2'" type="primary" @click="exportDialogVisible = true">删除</el-button>
       </div>
     </div>
 
@@ -67,50 +60,49 @@
       :data="list"
       border
     >
-      <!--<el-table-column type="selection" width="55" align="center" />-->
       <el-table-column
         label="ID"
         prop="id"
         align="center"
         width="80"
       />
-      <el-table-column prop="serviceLevel" label="标题" align="center" />
-      <el-table-column prop="userClass" label="用户阶段" align="center">
+      <el-table-column prop="title" label="标题" align="center" />
+      <el-table-column prop="stageStatus" label="用户阶段" align="center">
         <template slot-scope="scope">
           <div>
-            {{ scope.row.userClass | userStateFilter(userClass) }}
+            {{ scope.row.stageStatus | userStateFilter(userClass) }}
           </div>
         </template>
       </el-table-column>
-      <el-table-column prop="userType" label="标签" align="center">
+      <el-table-column prop="labelIds" label="标签" align="center">
         <template slot-scope="scope">
           <div>
-            {{ scope.row.userType | userTypeFilter(userType) }}
+            {{ scope.row.keywords }}
           </div>
         </template>
       </el-table-column>
-      <el-table-column prop="contractStartDate" label="浏览量" align="center" />
-      <el-table-column prop="contractStartDate" label="添加时间" align="center" />
-      <el-table-column prop="contractStartDate" label="创建人" align="center" />
+      <el-table-column prop="pv" label="浏览量" align="center" />
+      <el-table-column prop="addTime" label="添加时间" align="center" />
+      <el-table-column prop="createBy" label="创建人" align="center" />
       <el-table-column label="操作" align="center" width="250">
         <template slot-scope="{ row }">
           <div class="labelCenter">
             <el-button
-              v-if="listQuery.type2 === '1'"
+              v-if="listQuery.allStatus === '1'"
               type="primary"
               size="mini"
               @click="$router.push('/database/store-list/data-manage/edit?id=' + id + '&t=' + listQuery.type + '&tId=' + row.id)"
             >编辑</el-button>
             <el-button
-              v-if="listQuery.type2 === '1'"
+              v-if="listQuery.allStatus === '1'"
               type="primary"
               size="mini"
               @click="
-                handleDelete(row.id)
+                handleDelete({ ids: row.id, productArchiveId: id, type: listQuery.type.toString() })
               "
             >删除</el-button>
             <el-button
-              v-if="listQuery.type === 5 && listQuery.type2 === '2'"
+              v-if="listQuery.type === 5 && listQuery.allStatus === '2'"
               type="primary"
               size="mini"
               @click="
@@ -133,6 +125,7 @@
     <el-dialog title="选择商品" :visible.sync="exportDialogVisible" width="70%">
       <data-list-selector
         v-if="exportDialogVisible"
+        :type-id="listQuery.type"
         @cancel="onSelectorCancel"
         @confirm="onSelectorConfirm"
       />
@@ -142,13 +135,16 @@
 
 <script>
 import ManageTab from '../../components/dataManageTab.vue'
-import DataListSelector from '../../components/dialogTable.vue'
+import DataListSelector from '../../components/dialogTypeTable.vue'
 import databaseMixin from '../../mixins/index'
+import { getContextList, deleteContext } from '@/api/contentLibrary/context'
+import dataSelect from '../../components/data-select.vue'
 
 export default {
   components: {
     ManageTab,
-    DataListSelector
+    DataListSelector,
+    dataSelect
   },
   mixins: [databaseMixin],
   data() {
@@ -157,37 +153,79 @@ export default {
         type: '',
         pageNum: 1,
         pageSize: 10,
-        userType: 0,
-        userClass: 0,
-        type2: '1'
+        labelIds: '',
+        stageStatus: '',
+        allStatus: '1',
+        spId: ''
       },
-      list: [
-        {
-          id: 1,
-          userClass: 1,
-          userType: 1
-        }
-      ],
+      list: [],
       total: 0,
       isLoading: false,
       exportDialogVisible: false
     }
   },
+  watch: {
+    'listQuery.allStatus': {
+      handler(val) {
+        if (val) {
+          this.listQuery.labelIds = ''
+          this.listQuery.spId = ''
+        }
+      }
+    }
+  },
+  mounted() {
+    this.getServiceList()
+  },
   methods: {
-    getInfo() {
+    async getInfo() {
+      this.isLoading = true
+      const { data } = await getContextList(Object.assign(this.listQuery, { productArchiveId: this.id, productId: this.pId || '' }))
+      this.list = data.results
+      this.total = data.totalRecord
       this.isLoading = false
     },
+    handleSelect($event) {
+      this.listQuery.labelIds = $event.join(',')
+      this.handleChange(this.listQuery.type)
+    },
     handleChange($event) {
       if (this.id && $event) {
         this.listQuery.type = Number($event)
-        this.listQuery.type2 = '1'
         this.isLoading = true
         this.getInfo()
       }
     },
-    handleDelete(val) {},
-    onSelectorCancel() {},
-    onSelectorConfirm() {}
+    handleDelete(val) {
+      this.$confirm(`是否删除该资料?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async() => {
+        try {
+          const form = new FormData()
+          form.append('ids', val.ids)
+          form.append('type', val.type)
+          form.append('productArchiveId', val.productArchiveId)
+          await deleteContext(form)
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.handleChange(this.listQuery.type)
+        } catch (error) {
+          console.error(error)
+        }
+      })
+    },
+    onSelectorCancel() {
+      this.exportDialogVisible = false
+    },
+    onSelectorConfirm(row) {
+      console.log(row)
+      this.handleDelete({ ids: row.map(e => e.id).join(','), type: this.listQuery.type.toString(), productArchiveId: this.id })
+      this.exportDialogVisible = false
+    }
   }
 }
 </script>

+ 101 - 27
src/views/dataBase/store-list/edit.vue

@@ -2,36 +2,34 @@
   <div class="store-edit">
     <el-form ref="form" :model="form" :rules="storeAddRules" label-width="120px">
       <el-form-item label="商品信息:">
-        <el-radio-group v-model="form.info">
-          <el-radio v-for="i in storeInfo" :key="i.id" :label="i.id">{{ i.value }}</el-radio>
+        <el-radio-group :key="radioKey" v-model="form.info" @change="handleRadio">
+          <el-radio v-for="i in storeInfo" :key="i.id" :label="i.id">{{
+            i.value
+          }}</el-radio>
         </el-radio-group>
       </el-form-item>
-      <el-form-item v-if="form.info === 1" label="添加商品:">
-        <el-button type="primary" @click="exportDialogVisible = true">添加</el-button>
-        <store-item
-          v-for="i in selectStoreList"
-          :key="i.id"
-          :store-obj="i"
-        />
+      <el-form-item v-if="form.info === 1" label="添加商品:" prop="productId">
+        <store-item v-if="selectStore.productName" :product-image="selectStore.productImage" :product-name="selectStore.productName" />
+        <el-button type="primary" @click="exportDialogVisible = true">{{ selectStore.productName ? '选择商品' : '添加' }}</el-button>
       </el-form-item>
       <div v-if="form.info === 2">
-        <el-form-item label="商品名称:" prop="name">
-          <el-input v-model="form.name" />
+        <el-form-item label="商品名称:" prop="productName">
+          <el-input v-model="form.productName" />
         </el-form-item>
-        <el-form-item label="商品图片:" prop="image">
+        <el-form-item label="商品图片:" prop="productImage">
           <image-upload
             :limit="1"
-            :image-list="textRelateds"
-            @success="handleImageSuccess($event, 'textRelateds')"
-            @remove="handleImageRemove($event, 'textRelateds')"
+            :image-list="productImage"
+            @success="handleImageSuccess($event, 'productImage')"
+            @remove="handleImageRemove($event, 'productImage')"
           />
         </el-form-item>
-        <el-form-item label="供应商名称:" prop="linkMan">
-          <el-input v-model="form.linkMan" />
+        <el-form-item label="供应商名称:" prop="shopName">
+          <el-input v-model="form.shopName" />
         </el-form-item>
       </div>
       <el-form-item label="商品属性:">
-        <el-select v-model="form.storeAttributes" placeholder="请选择商品属性">
+        <el-select v-model="form.productType" placeholder="请选择商品属性">
           <el-option
             v-for="(i, index) in storeAttributes"
             :key="index"
@@ -41,7 +39,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="商品分类:">
-        <el-select v-model="form.storeClass" placeholder="请选择商品分类">
+        <el-select v-model="form.productClassify" placeholder="请选择商品分类">
           <el-option
             v-for="(i, index) in storeClass"
             :key="index"
@@ -71,6 +69,7 @@ import databaseMixin from '../mixins/index'
 import StoreListSelector from '../components/dialogTable.vue'
 import StoreItem from '../components/storeItem.vue'
 import ImageUpload from '@/components/UploadImage/index.vue'
+import { getStoreDetail, addStore } from '@/api/contentLibrary/store'
 
 export default {
   components: {
@@ -82,25 +81,100 @@ export default {
   data() {
     return {
       form: {
-        info: 1
+        info: 1,
+        productClassify: '',
+        productType: '',
+        productId: '',
+        productName: ''
       },
+      selectStore: {},
+      radioKey: 0,
       exportDialogVisible: false,
-      textRelateds: [],
-      selectStoreList: []
+      productImage: [],
+      storeAddRules: {
+        productId: [
+          {
+            required: true,
+            message: '请选择添加商品',
+            trigger: 'blur'
+          }
+        ],
+        productName: [
+          {
+            required: true,
+            message: '请输入商品名称',
+            trigger: 'blur'
+          }
+        ],
+        productImage: [
+          {
+            required: true,
+            message: '请上传商品图片',
+            trigger: 'blur'
+          }
+        ],
+        shopName: [
+          {
+            required: true,
+            message: '请输入供应商名称',
+            trigger: 'change'
+          }
+        ]
+      }
+    }
+  },
+  async mounted() {
+    if (this.id) {
+      await this.getInfo()
     }
   },
-  mounted() {},
   methods: {
-    onSelectorCancel(val) {},
+    async getInfo() {
+      const { data } = await getStoreDetail({ id: this.id })
+      this.form = data
+      this.form.info = data.productId ? 1 : 2
+      this.selectStore.productImage = data.productImage
+      this.selectStore.productName = data.productName
+      this.selectStore.productId = data.productId
+      this.productImage = [{ uid: 1, url: data.productImage }]
+      console.log(this.selectStore.productImage)
+    },
+    onSelectorCancel() {
+      this.exportDialogVisible = false
+    },
     onSelectorConfirm(val) {
       console.log(val)
+      const v = {
+        productId: val.productId,
+        productImage: val.productImage,
+        productName: val.productName,
+        shopName: val.shopName
+      }
+      this.form = Object.assign(this.form, v)
+      this.selectStore = val
+      this.exportDialogVisible = false
+    },
+    handleRadio($event) {
+      if ($event) {
+        this.radioKey = Math.random() * 1000
+      }
     },
     handleImageRemove() {},
-    handleImageSuccess() {},
+    handleImageSuccess(file, name) {
+      this.form[name] = file.file.response.data
+    },
     submitForm(form) {
-      this.$refs[form].validate(valid => {
+      this.$refs[form].validate(async(valid) => {
         if (valid) {
-          console.log(this.form)
+          if (this.form.info === 2) {
+            delete this.form.productId
+          }
+          try {
+            await addStore(this.form)
+            this.$router.back()
+          } catch (error) {
+            console.error(error)
+          }
         }
       })
     }

+ 33 - 21
src/views/dataBase/store-list/index.vue

@@ -5,7 +5,7 @@
       <div class="filter-control">
         <span>商品名称:</span>
         <el-input
-          v-model="listQuery.name"
+          v-model="listQuery.productName"
           placeholder="商品名称"
           clearable
           @keyup.enter.native="getList"
@@ -14,7 +14,7 @@
       </div>
       <div class="filter-control">
         <span>商品属性:</span>
-        <el-select v-model="listQuery.storeAttributes" placeholder="请选择商品属性" @change="getList">
+        <el-select v-model="listQuery.productType" placeholder="请选择商品属性" @change="getList">
           <el-option
             v-for="(i, index) in storeAttributes"
             :key="index"
@@ -25,7 +25,7 @@
       </div>
       <div class="filter-control">
         <span>商品分类:</span>
-        <el-select v-model="listQuery.storeClass" placeholder="请选择商品分类" @change="getList">
+        <el-select v-model="listQuery.productClassify" placeholder="请选择商品分类" @change="getList">
           <el-option
             v-for="(i, index) in storeClass"
             :key="index"
@@ -56,25 +56,27 @@
         align="center"
         width="80"
       />
-      <el-table-column prop="name" label="商品名称" align="center" />
-      <el-table-column prop="serviceLevel" label="商品图片" align="center">
-        <el-image src="" />
+      <el-table-column prop="productName" label="商品名称" align="center" />
+      <el-table-column prop="productImage" label="商品图片" align="center" width="150">
+        <template slot-scope="scope">
+          <el-image :src="scope.row.productImage" />
+        </template>
       </el-table-column>
-      <el-table-column prop="serviceCategory" label="商品属性" align="center">
+      <el-table-column prop="productType" label="商品属性" align="center">
         <template slot-scope="scope">
           <div>
-            {{ scope.row.serviceCategory == "1" ? "产品" : "仪器" }}
+            {{ scope.row.productType == "1" ? "产品" : "仪器" }}
           </div>
         </template>
       </el-table-column>
-      <el-table-column prop="serviceCategory" label="商品分类" align="center">
+      <el-table-column prop="productClassify" label="商品分类" align="center">
         <template slot-scope="scope">
           <div>
-            {{ scope.row.serviceCategory == "1" ? "生美" : "医美" }}
+            {{ scope.row.productClassify === 1 ? "医美" : "生美" }}
           </div>
         </template>
       </el-table-column>
-      <el-table-column prop="contractStartDate" label="添加时间" align="center" />
+      <el-table-column prop="addTime" label="添加时间" align="center" />
       <el-table-column label="操作" align="center" width="200">
         <template slot-scope="{ row }">
           <div class="labelCenter">
@@ -87,7 +89,7 @@
               type="primary"
               size="mini"
               @click="
-                $router.push('/database/store-list/data-manage/list?id=' + row.id)
+                $router.push('/database/store-list/data-manage/list?id=' + row.id + '&pId=' + (row.productId || ''))
               "
             >资料管理</el-button>
           </div>
@@ -107,24 +109,34 @@
 
 <script>
 import databaseMixin from '../mixins/index'
+import { getStoreList } from '@/api/contentLibrary/store'
 
 export default {
   mixins: [databaseMixin],
   data() {
     return {
-      listQuery: {},
-      list: [
-        {
-          id: 1
-        }
-      ],
-      total: 10,
+      listQuery: {
+        pageNum: 1,
+        pageSize: 10,
+        productType: '',
+        productClassify: ''
+      },
+      list: [],
+      total: 0,
       isLoading: false
     }
   },
-  mounted() {},
+  async mounted() {
+    await this.getList()
+  },
   methods: {
-    getList() {}
+    async getList() {
+      this.isLoading = true
+      const { data } = await getStoreList(this.listQuery)
+      this.list = data.results
+      this.total = data.totalRecord
+      this.isLoading = false
+    }
   }
 }
 </script>

+ 19 - 10
src/views/user/record/list.vue

@@ -100,15 +100,15 @@
           />
         </div>
         <div class="filter-control">
-          <span>协销ID:</span>
-          <el-input
-            v-model="listQuery.spName"
-            placeholder="协销"
-            clearable
-            style="width: 120px"
-            @keyup.enter.native="getList"
-            @clear="getList"
-          />
+          <span>协销:</span>
+          <el-select v-model="listQuery.headUserId" placeholder="协销" @change="getList">
+            <el-option
+              v-for="item in sellerList"
+              :key="item.serviceProviderId"
+              :label="item.linkMan"
+              :value="item.serviceProviderId"
+            />
+          </el-select>
         </div>
         <div class="filter-control">
           <span>内容库ID:</span>
@@ -232,6 +232,7 @@ import { fetchRecordList, getKeyword, getPageType } from '@/api/user/record/reco
 import { fetchShopRelevanceList, searchBehaviorList } from '@/api/user/supplier/supplier'
 import { export_json_to_excel } from '@/vendor/Export2Excel'
 import pickerOptions from '@/utils/time-picker.js'
+import { getServiceList } from '@/api/library/keyword'
 const defaultListQuery = {
   todayType: 0, // 0 今日数据 1 以往数据
   ip: '', // 访问人ID
@@ -249,7 +250,9 @@ const defaultListQuery = {
   startTime: '',
   endTime: '',
   pageNum: 1,
-  pageSize: 100
+  pageSize: 100,
+  headUserId: '', // 协销id
+  productArchiveId: '' // 内容库id
 }
 export default {
   name: 'RecordList',
@@ -294,6 +297,7 @@ export default {
       typesOptions: [], // 页面类型
       tagsOptions: [],
       tagsList: [],
+      sellerList: [], // 协销列表
       tabsCurrent: 0,
       tableHeight: window.innerHeight - 120, // 表格动态高度
       screenHeight: window.innerHeight // 内容区域高度
@@ -320,6 +324,7 @@ export default {
     this.getList()
     this.getKeyword()
     this.getPageType()
+    this.getServiceList()
   },
   mounted() {
     // window.onresize:浏览器尺寸变化响应事件
@@ -545,6 +550,10 @@ export default {
         return array
       }
       return value.split(',')
+    },
+    async getServiceList() {
+      const { data } = await getServiceList()
+      this.sellerList = data
     }
   }
 }