Browse Source

bug修改

yuwenjun 4 years ago
parent
commit
7c6349d6ce

+ 11 - 1
src/views/supplier/components/uploadFile.vue

@@ -12,6 +12,7 @@
       :on-success="success"
       :accept="accept"
       :before-upload="beforeUpload"
+      :on-remove="remove"
     >
       <el-button slot="trigger" size="mini" type="primary">选取文件</el-button>
       <!-- <el-button style="margin-left: 10px;" size="mini" type="success" @click="uploadFile">上传</el-button> -->
@@ -31,6 +32,10 @@ export default {
     authUserId: {
       type: Number,
       default: -1
+    },
+    brandId: {
+      type: Number,
+      required: true
     }
   },
 
@@ -41,7 +46,8 @@ export default {
       accept: '.doc,.ppt,.pdf',
       // 请求参数
       params: {
-        authUserId: null
+        authUserId: null,
+        brandId: null
       },
       headers: {
         'X-Token': ''
@@ -54,6 +60,7 @@ export default {
   },
   created() {
     this.headers['X-Token'] = this.token
+    this.params.brandId = this.brandId
   },
   methods: {
     success(response) {
@@ -74,6 +81,9 @@ export default {
         this.$message.warning('文件上传大小超出限制(≤2MB)')
         return false
       }
+    },
+    remove() {
+      this.$emit('remove')
     }
   }
 }

+ 4 - 0
src/views/supplier/components/uploadImage.vue

@@ -12,6 +12,7 @@
       :auto-upload="true"
       :on-success="success"
       :file-list="fileList"
+      :on-remove="remove"
     >
       <!-- :class="{hidden:(hasUpload && fileList===[]) || !hasUpload}" -->
       <i class="el-icon-plus" />
@@ -71,6 +72,9 @@ export default {
         this.$message.warning('文件上传大小超出限制(≤1MB)')
         return false
       }
+    },
+    remove() {
+      this.$emit('remove')
     }
   }
 }

+ 352 - 157
src/views/supplier/user/add.vue

@@ -1,20 +1,20 @@
 <template>
   <div v-loading="isLoading" class="addSupplier">
-    <el-form ref="addFormRef" :model="addData" :rules="rules" label-width="120px" class="addForm">
+    <el-form ref="addFormRef" :model="addFromData" :rules="addFromDataRules" label-width="120px" class="addForm">
       <el-form-item label="供应商类型:" prop="shopType">
-        <el-select v-model="addData.shopType" placeholder="请选择供应商类型" style="width: 100%" @change="getBrandList">
+        <el-select v-model="addFromData.shopType" placeholder="请选择供应商类型" style="width: 100%" @change="reGetBrandList">
           <el-option label="品牌方" :value="1" />
           <el-option label="代理商" :value="2" />
         </el-select>
       </el-form-item>
 
       <!-- 供应商名称 -->
-      <el-form-item v-if="addData.shopType===2" label="供应商名称:" prop="shopName">
-        <el-input v-model="addData.shopName" placeholder="请输入供应商名称" />
+      <el-form-item v-if="addFromData.shopType===2" label="供应商名称:" prop="shopName">
+        <el-input v-model="addFromData.shopName" placeholder="请输入供应商名称" />
       </el-form-item>
 
-      <el-form-item v-if="addData.shopType===1" label="供应商名称:" prop="shopName">
-        <el-select v-model="addData.brandId" placeholder="请选择品牌" style="width: 100%" filterable @change="setShopName">
+      <el-form-item v-if="addFromData.shopType===1" label="供应商名称:" prop="brandId">
+        <el-select v-model="addFromData.brandId" placeholder="请选择品牌" style="width: 100%" filterable @change="setShopName">
           <el-option
             v-for="(item) in brandList"
             :key="item.id"
@@ -26,64 +26,41 @@
       <!-- 供应商名称END -->
 
       <el-form-item label="手机号:" prop="mobile">
-        <el-input v-model="addData.mobile" placeholder="请输入手机号" />
+        <el-input v-model="addFromData.mobile" placeholder="请输入手机号" />
       </el-form-item>
       <el-form-item label="联系人:" prop="linkMan">
-        <el-input v-model="addData.linkMan" placeholder="请输入联系人" />
+        <el-input v-model="addFromData.linkMan" placeholder="请输入联系人" />
       </el-form-item>
-      <el-form-item v-if="addData.shopType===2" label="所属品牌:" prop="brandId">
-        <el-select v-model="addData.brandId" placeholder="请选择所属品牌" style="width: 100%" filterable @change="setShopName">
-          <el-option
-            v-for="item in brandList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="产地:" prop="countryId">
-        <el-select v-model="addData.countryId" placeholder="产地" style="width: 100%" filterable>
-          <el-option
-            v-for="item in countryList"
-            :key="item.countryId"
-            :label="item.countryName"
-            :value="item.countryId"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="品牌logo:" class="no-input" prop="brandAuthLogo">
-        <upload-image ref="uploadImageRef1" :file-list="fileList1" @success="imageUploadSuccess1" @error="imageUploadFaild1" />
-        <el-input v-model="addData.brandAuthLogo" type="hidden" class="hiddenInput" />
-      </el-form-item>
-      <el-form-item label="官网认证链接:">
-        <el-input v-model="addData.securityLink" placeholder="请输入官网认证链接" />
+
+      <el-form-item v-if="addFromData.shopType === 2" label="代理品牌:" class="brand-box">
+        <template v-if="supplierBrands">
+          <el-tag v-for="(brand,index) in supplierBrands" :key="index" type="success" closable @click="handleTagClick(index)" @close="handleTagClose(index)">{{ brand.brandName }}</el-tag>
+        </template>
+        <el-tag @click="handleAddBrand()">添加品牌<span class="el-icon-plus" /></el-tag>
       </el-form-item>
-      <template v-if="addData.shopType===2">
-        <el-form-item label="代理声明:">
-          <el-radio v-model="addData.statementType" :label="1">弹窗</el-radio>
-          <el-radio v-model="addData.statementType" :label="2">链接</el-radio>
-          <el-radio v-model="addData.statementType" :label="3">图片</el-radio>
-          <el-radio v-model="addData.statementType" :label="4">文件</el-radio>
-        </el-form-item>
 
-        <el-form-item v-if="addData.statementType === 1" label="弹窗:" prop="statementContent">
-          <el-input v-if="addData.statementType === 1" v-model="addData.statementContent" type="textarea" />
-        </el-form-item>
-        <el-form-item v-else-if="addData.statementType === 2" label="链接:" prop="statementLink">
-          <el-input v-if="addData.statementType === 2" v-model="addData.statementLink" />
+      <template v-if="addFromData.shopType===1">
+        <el-form-item label="产地:" prop="countryId">
+          <el-select v-model="addFromData.countryId" placeholder="产地" style="width: 100%" filterable>
+            <el-option
+              v-for="item in countryList"
+              :key="item.countryId"
+              :label="item.countryName"
+              :value="item.countryId"
+            />
+          </el-select>
         </el-form-item>
-        <el-form-item v-else-if="addData.statementType === 3" label="图片:" class="no-input" prop="statementImage">
-          <upload-image v-if="addData.statementType === 3" ref="uploadImageRef2" @success="imageUploadSuccess2" @error="imageUploadFaild2" />
-          <el-input v-model="addData.statementImage" type="hidden" class="hiddenInput" />
+        <el-form-item label="品牌logo:" class="no-input" prop="brandAuthLogo">
+          <upload-image ref="uploadImageRef1" :file-list="fileList1" @success="imageUploadSuccess1" @error="imageUploadFaild1" />
+          <el-input v-model="addFromData.brandAuthLogo" type="hidden" class="hiddenInput" />
         </el-form-item>
-        <el-form-item v-else label="文件:" prop="statementFileId">
-          <upload-file v-if="addData.statementType === 4" ref="uploadFileRef" :auth-user-id="addData.authUserId" @success="fileUploadSuccess" @error="fileUploadFaild" />
-          <el-input v-model="addData.statementFileId" type="hidden" class="hiddenInput" />
+        <el-form-item label="官网认证链接:">
+          <el-input v-model="addFromData.securityLink" placeholder="请输入官网认证链接" />
         </el-form-item>
-
       </template>
+
       <el-form-item label="供应商状态:">
-        <el-select v-model="addData.shopStatus" placeholder="请选择供应商状态" style="width: 100%">
+        <el-select v-model="addFromData.shopStatus" placeholder="请选择供应商状态" style="width: 100%">
           <el-option label="启用" :value="1" />
           <el-option label="禁用" :value="0" />
         </el-select>
@@ -93,6 +70,79 @@
       <el-button type="primary" @click="submit">保存</el-button>
       <el-button type="warning" @click="$_back()">返回</el-button>
     </div>
+
+    <!-- 添加代理商品牌dialog -->
+    <el-dialog
+      title="添加品牌信息"
+      :visible.sync="showAddDialog"
+      @closed="addBrandDialogClosed"
+    >
+      <el-form v-if="addFromData.shopType===2" ref="addBrandFormRef" :model="brandData" :rules="brandDataRules" label-width="120px">
+        <el-form-item label="产地" prop="countryId">
+          <el-select v-model="brandData.countryId" placeholder="产地" style="width: 100%" filterable>
+            <el-option
+              v-for="item in countryList"
+              :key="item.countryId"
+              :label="item.countryName"
+              :value="item.countryId"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="所属品牌:" prop="brandId">
+          <el-select v-model="brandData.brandId" placeholder="请选择所属品牌" style="width: 100%" filterable @change="handleSetName">
+            <el-option
+              v-for="item in brandList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item ref="brandAuthLogo" label="品牌logo:" class="no-input" prop="brandAuthLogo">
+          <upload-image ref="uploadImageRef1" :file-list="fileList1" @success="imageUploadSuccess1" @error="imageUploadFaild1" />
+          <el-input v-model="brandData.brandAuthLogo" type="hidden" class="hiddenInput" />
+        </el-form-item>
+
+        <el-form-item label="官网认证链接:">
+          <el-input v-model="brandData.securityLink" placeholder="请输入官网认证链接" />
+        </el-form-item>
+
+        <el-form-item label="代理声明:">
+          <el-radio-group v-model="brandData.statementType" @change="handleRadioChange">
+            <el-radio :label="1">弹窗</el-radio>
+            <el-radio :label="2">链接</el-radio>
+            <el-radio :label="3">图片</el-radio>
+            <el-radio :label="4">文件</el-radio>
+          </el-radio-group>
+
+        </el-form-item>
+
+        <el-form-item v-if="brandData.statementType === 1" ref="statementContent" label="弹窗:" prop="statementContent">
+          <el-input v-model="brandData.statementContent" type="textarea" />
+        </el-form-item>
+
+        <el-form-item v-if="brandData.statementType === 2" ref="statementLink" label="链接:" prop="statementLink">
+          <el-input v-model="brandData.statementLink" />
+        </el-form-item>
+
+        <el-form-item v-if="brandData.statementType === 3" ref="statementImage" label="图片:" class="no-input" prop="statementImage">
+          <upload-image ref="uploadImageRef2" :file-list="fileList2" @success="imageUploadSuccess2" />
+          <el-input v-model="brandData.statementImage" type="hidden" class="hiddenInput" />
+        </el-form-item>
+
+        <el-form-item v-if="brandData.statementType === 4" ref="statementFileId" label="文件:" prop="statementFileId">
+          <upload-file ref="uploadFileRef" :brand-id="brandData.brandId" :file-list="fileList3" :auth-user-id="addFromData.authUserId" @success="fileUploadSuccess" @error="fileUploadFaild" />
+          <el-input v-model="brandData.statementFileId" type="hidden" class="hiddenInput" />
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer">
+        <el-button @click="showAddDialog = false">取 消</el-button>
+        <el-button type="primary" @click="handleSaveBrandInfo">确 定</el-button>
+      </div>
+    </el-dialog>
+
   </div>
 </template>
 
@@ -116,47 +166,73 @@ export default {
     }
     return {
       isLoading: false,
+      // 是否显示代理商商添加品牌
+      showAddDialog: false,
+      // 品牌列表
+      brandList: [],
 
-      addData: {
-        authUserId: null, // 供应商id
-        brandAuthLogo: '', //	品牌授权logo
+      // 品牌表单校验数据
+      brandData: {
+        isNew: true, // 是否是新添加的
+        index: '', // 当前元素的索引
         brandId: '', // 品牌id
         countryId: 1, // 产地国家id
-        createBy: '', // 创建人用户id
-        linkMan: '', // 联系人
-        mobile: '', // 手机号
+        brandAuthLogo: '', //	品牌授权logo
         securityLink: '', // 官网认证链接
-        shopName: '', // 供应商名称
-        shopStatus: 1, // 供应商状态:0停用 1启用
-        shopType: 1, //	供应商类型:1品牌方,2代理商
         statementContent: '', // 声明弹窗内容
         statementLink: '', // 声明链接
         statementFileId: -1, //	声明文件id
         statementImage: '', // 声明图片
         statementType: 1 // 代理声明类型:1弹窗 2链接 3图片 4文件(.doc .ppt .pdf)
       },
-      selectedBrandIndex: '',
-      brandList: [], // 品牌列表
-      rules: {
-        shopType: [{ required: true, message: '供应商类型不能为空', trigger: 'change' }],
-        shopName: [{ required: true, message: '供应商名称不能为空', trigger: ['blur', 'change'] }],
+      // 品牌集合
+      supplierBrands: [],
+      // 表单校验的数据
+      addFromData: {
+        authUserId: null, // 供应商id
+        shopType: 1, //	供应商类型:1品牌方,2代理商
+        createBy: '', // 创建人用户id
+        brandId: '', // 品牌id
+        shopName: '', // 供应商名称
+        mobile: '', // 手机号
+        linkMan: '', // 联系人
+        countryId: 1, // 产地国家id
+        brandAuthLogo: '', //	品牌授权logo
+        securityLink: '', // 官网认证链接
+        shopStatus: 1, // 供应商状态:0停用 1启用
+        shopInfo: []
+      },
+
+      // 表单数据校验规则
+      addFromDataRules: {
+        shopType: { required: true, message: '请选择供应商类型', trigger: 'change' },
+        brandId: { required: true, message: '请选择品牌', trigger: 'change' },
+        shopName: [
+          { required: true, message: '请输入供应商名称', trigger: 'blur' },
+          { maxLength: 50, message: '最大字符长度为50个字符', trigger: 'blur' }
+        ],
         mobile: [
-          { required: true, message: '手机号不能为空', trigger: 'blur' },
+          { required: true, message: '请输入手机号', trigger: 'blur' },
           { validator: valideMobile, trigger: 'blur' }
-        ], // 手机号格式校验
-        linkMan: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
-        countryId: [{ required: true, message: '产地不能为空', trigger: 'change' }],
-        brandAuthLogo: [{ required: true, message: '品牌logo不能为空' }],
-        brandId: [{ required: true, message: '所属品牌不能为空', trigger: 'blur' }],
-        statementContent: [{ required: true, message: '声明不能为空', trigger: 'blur' }],
-        statementLink: [{ required: true, message: '声明链接不能为空', trigger: 'blur' }],
-        statementImage: [{ required: true, message: '声明图片不能为空' }],
-        statementFileId: [{ required: true, message: '声明文件不能为空' }]
+        ],
+        linkMan: { required: true, message: '请输入联系人', trigger: 'blur' },
+        countryId: { required: true, message: '请选择国家', trigger: 'change' },
+        brandAuthLogo: { required: true, message: '请上传品牌logo图片', trigger: 'change' }
       },
-      fileList1: [], // 已上传的图片列表 品牌logo
+      brandDataRules: {
+        brandId: { required: true, message: '请选择品牌', trigger: 'change' },
+        countryId: { required: true, message: '请选择国家', trigger: 'change' },
+        brandAuthLogo: { required: true, message: '请上传品牌logo图片', trigger: 'change' },
+        statementContent: { required: true, message: '请输入声明内容', trigger: 'blur' },
+        statementLink: { required: true, message: '请输入声明链接', trigger: 'blur' },
+        statementImage: { required: true, message: '请上传声明图片', trigger: 'change' },
+        statementFileId: { required: true, message: '请上传声明文件', trigger: 'change' }
+      },
+
+      // 上传的图片列表
+      fileList1: [], // 已上传的图片列表 品牌logo图片
       fileList2: [], // 已上传的图片列表 声明图片
       fileList3: [] // 已上传的图片列表 声明文件
-      // countryList: []
     }
   },
   computed: {
@@ -166,52 +242,108 @@ export default {
     this.initAddForm()
   },
   methods: {
+    // 创建添加数据对象
+    createAddData() {
+      const addData = {
+        authUserId: null, // 供应商id
+        createBy: '', // 创建人用户id
+        linkMan: '', // 联系人
+        mobile: '', // 手机号
+        shopName: '设置', // 供应商名称
+        shopStatus: 1, // 供应商状态:0停用 1启用
+        shopType: 1, //	供应商类型:1品牌方,2代理商
+        shopInfo: []
+      }
+
+      // 循环赋值
+      for (const key in addData) {
+        if (Object.hasOwnProperty.call(addData, key)) {
+          addData[key] = this.addFromData[key]
+        }
+      }
+      // 添加品牌方 shopInfo 里面只有一个对象
+      if (this.addFromData.shopType === 1) {
+        addData.shopInfo.push({
+          brandId: this.addFromData.brandId, // 品牌id
+          countryId: this.addFromData.countryId, // 产地国家id
+          brandAuthLogo: this.addFromData.brandAuthLogo, //	品牌授权logo
+          securityLink: this.addFromData.securityLink, // 官网认证链接
+          statementContent: '', // 声明弹窗内容
+          statementLink: '', // 声明链接
+          statementFileId: -1, //	声明文件id
+          statementImage: '', // 声明图片
+          statementType: 1 // 代理声明类型:1弹窗 2链接 3图片 4文件(.doc .ppt .pdf)
+        })
+      }
+      // 添加代理商
+      if (this.addFromData.shopType === 2) {
+        addData.shopInfo = this.supplierBrands
+      }
+      addData.createBy = this.authUserId
+      return addData
+    },
     // 初始添加供应商时的表单数据
     initAddForm() {
-      // this.addData.authUserId = this.authUserId
+      // this.addFromData.authUserId = this.authUserId
       this.getBrandList()
-      this.addData.shopName = ''
+      this.addFromData.shopName = ''
     },
     // 获取品牌列表
     getBrandList() {
       // 获取品牌列表
-      fetchBrandList({ type: this.addData.shopType }).then(res => {
+      fetchBrandList({ type: this.addFromData.shopType }).then(res => {
         console.log(res)
         if (res.code === 0) {
           this.brandList = res.data
         }
       }).catch(err => console.log(err))
     },
-    // 提交表单数据
-    async submit() {
-      this.isLoading = true
-      if (this.addData.statementType === 4) {
-        debugger
-        console.log(this.$refs)
-        this.$refs.uploadFileRef.$refs.upload.submit()
-      } else {
-        await this.$refs.addFormRef.validate(valide => {
-          if (!valide) {
-            this.isLoading = false
-            return
-          }
-          this.save()
-        })
+    // 重新获取品牌列表
+    reGetBrandList(id) {
+      const shopType = id
+      this.fileList2 = []
+      this.fileList1 = []
+      this.fileList3 = []
+      this.addFromData = {
+        authUserId: null, // 供应商id
+        brandAuthLogo: '', //	品牌授权logo
+        brandId: '', // 品牌id
+        countryId: 1, // 产地国家id
+        createBy: '', // 创建人用户id
+        linkMan: '', // 联系人
+        mobile: '', // 手机号
+        securityLink: '', // 官网认证链接
+        shopName: '', // 供应商名称
+        shopStatus: 1, // 供应商状态:0停用 1启用
+        shopType: 1 //	供应商类型:1品牌方,2代理商
       }
+      this.$refs.addFormRef?.clearValidate()
+      this.addFromData.shopType = shopType
+      this.getBrandList()
+    },
+
+    // 提交表单数据
+    submit() {
+      this.$refs.addFormRef.validate(valide => {
+        if (!valide) {
+          this.isLoading = false
+          return
+        }
+        // this.addFromData.shopInfo = [this.brandData]
+        // console.log(this.addFromData)
+        // return
+        this.save()
+      })
     },
     // 保存
-    async save() {
-      this.addData.createBy = this.authUserId
-      addSupplier(this.addData).then(res => {
+    save() {
+      addSupplier(this.createAddData()).then(res => {
         console.log(res)
-        this.$message.success('添加成功')
-        this.$refs.addFormRef.resetFields()
-        this.clearFormData()
+        this.$message.success('保存成功')
         this.$router.replace('/supplier')
       }).finally(() => {
         this.isLoading = false
-        this.$refs.addFormRef.resetFields()
-        this.addData.securityLink = ''
+        this.addFromData.securityLink = ''
       })
     },
     // 设置品牌名称
@@ -225,37 +357,107 @@ export default {
         }
       })
       console.log(selectBrand)
-      if (this.addData.shopType === 1) {
-        this.addData.shopName = selectBrand.name
+      if (this.addFromData.shopType === 1) {
+        this.addFromData.shopName = selectBrand.name
       }
-      this.addData.brandAuthLogo = selectBrand.authLogo
+      this.addFromData.brandAuthLogo = selectBrand.authLogo
       if (selectBrand.authLogo) {
-        fileList.push({ name: this.addData.shopName, url: selectBrand.authLogo || '' })
+        fileList.push({ name: this.addFromData.shopName, url: selectBrand.authLogo || '' })
       }
       this.fileList1 = fileList
-      // const fileList = []
-      // if (this.addData.shopType === 1) {
-      //   this.addData.shopName = this.brandList[index]?.name
-      // }
-      // this.addData.brandAuthLogo = this.brandList[index]?.authLogo || ''
-      // if (this.brandList[index]?.authLogo) {
-      //   fileList.push({ name: this.addData.shopName, url: this.brandList[index]?.authLogo || '' })
-      // }
-      // this.fileList1 = fileList
     },
-    // 文件上传成功
-    fileUploadSuccess(data) {
-      this.addData.statementFileId = data.data
-      // this.uploadFile()
-      console.log(data)
-      this.$refs.addFormRef.validate(valide => {
-        if (!valide) {
-          this.isLoading = false
+    // 重置表单项
+    handleRadioChange() {
+      this.$refs.statementContent?.clearValidate()
+      this.$refs.statementLink?.clearValidate()
+      this.$refs.statementFileId?.clearValidate()
+      this.$refs.statementImage?.clearValidate()
+    },
+    handleSaveBrandInfo() {
+      // 如果为代理商 && 声明类型为文件
+      if (this.addFromData.shopType === 2 && this.brandData.statementType === 4) {
+        console.log(this.brandData.statementFileId)
+        if (this.brandData.statementFileId !== -1) {
+          this.saveBrandInfo()
+        } else {
+          this.$refs.uploadFileRef.$refs.upload.submit()
+        }
+      } else {
+        this.saveBrandInfo()
+      }
+    },
+    // 代理商保存品牌信息
+    saveBrandInfo() {
+      this.$refs.addBrandFormRef.validate(valide => {
+        if (!valide) return
+        // 提交保存
+        if (this.brandData.isNew) {
+          this.supplierBrands.push(this.cloneData(this.brandData))
+        } else {
+          this.supplierBrands.splice(this.brandData.index, 1, this.cloneData(this.brandData))
+        }
+        this.showAddDialog = false
+      })
+    },
+    // brandData
+    // 添加品牌信息对话框关闭事件
+    addBrandDialogClosed() {
+      this.fileList1 = []
+      this.fileList2 = []
+      this.fileList3 = []
+      this.$refs.addBrandFormRef.resetFields()
+    },
+    handleSetName(id) {
+      const fileList = []
+      let brandInfo = null
+      this.brandList.forEach(item => {
+        if (item.id === id) {
+          brandInfo = item
           return
         }
-        console.log(2)
-        this.save()
       })
+      this.brandData.brandName = brandInfo.name
+      this.brandData.brandId = brandInfo.id
+      this.brandData.brandAuthLogo = brandInfo.authLogo
+      fileList.push({ name: brandInfo.name, url: brandInfo.authLogo })
+      this.fileList1 = fileList
+    },
+
+    // 供应商代理品牌标签关闭时间
+    handleTagClose(index) {
+      this.supplierBrands.splice(index, 1)
+    },
+
+    // 查看品牌信息
+    handleTagClick(index) {
+      this.brandData = this.cloneData(this.supplierBrands[index])
+      this.brandData.isNew = false
+      this.brandData.index = index
+      this.showAddDialog = true
+      console.log(this.brandData)
+      if (this.brandData.statementFileId !== -1) {
+        this.fileList3 = [{ name: '文件已上传', url: '' }]
+      }
+      if (this.brandData.statementImage !== '') {
+        this.fileList2 = [{ name: '文件已上传', url: this.brandData.statementImage }]
+      }
+      if (this.brandData.brandAuthLogo !== '') {
+        this.fileList1 = [{ name: '', url: this.brandData.brandAuthLogo }]
+      }
+      console.log(this.fileList1)
+      console.log(this.fileList2)
+      console.log(this.fileList3)
+    },
+    // 添加品牌
+    handleAddBrand() {
+      this.brandData.isNew = true
+      this.showAddDialog = true
+    },
+    // 文件上传成功
+    fileUploadSuccess(data) {
+      this.brandData.statementFileId = data.data
+      console.log(data)
+      this.saveBrandInfo()
     },
     fileUploadFaild(err, file, fileList) {
       console.log(err)
@@ -263,7 +465,11 @@ export default {
 
     // 图片上传成功 品牌logo
     imageUploadSuccess1(data) {
-      this.addData.brandAuthLogo = data.data
+      if (this.addFromData.shopType === 1) {
+        this.addFromData.brandAuthLogo = data.data
+      } else if (this.addFromData.shopType === 2) {
+        this.brandData.brandAuthLogo = data.data
+      }
     },
     imageUploadFaild1(err, file, fileList) {
       console.log(err)
@@ -271,38 +477,21 @@ export default {
 
     // 图片上传成功 声明图片
     imageUploadSuccess2(data) {
-      this.addData.statementImage = data.data
+      this.brandData.statementImage = data.data
     },
     imageUploadFaild2(err, file, fileList) {
       console.log(err)
-    }, // removeImage1() {
-    //   this.fileList1 = []
-    // },
-
-    clearFormData() {
-      this.addData = {
-        authUserId: '', // 供应商id
-        brandAuthLogo: '', //	品牌授权logo
-        brandId: '', // 品牌id
-        countryId: 1, // 产地国家id
-        createBy: '', // 创建人用户id
-        linkMan: '', // 联系人
-        mobile: '', // 手机号
-        securityLink: '', // 官网认证链接
-        shopName: '', // 供应商名称
-        shopStatus: 1, // 供应商状态:0停用 1启用
-        shopType: 1, //	供应商类型:1品牌方,2代理商
-        statementContent: '', // 声明弹窗内容
-        statementLink: '', // 声明链接
-        statementFileId: '', //	声明文件id
-        statementImage: '', // 声明图片
-        statementType: 1 // 代理声明类型:1弹窗 2链接 3图片 4文件(.doc .ppt .pdf)
+    },
+    // 克隆
+    cloneData(data) {
+      const resutl = {}
+      for (const key in data) {
+        if (Object.hasOwnProperty.call(data, key)) {
+          resutl[key] = data[key]
+        }
       }
-      this.fileList1 = []
-      this.fileList2 = []
-      this.fileList3 = []
+      return resutl
     }
-
   }
 }
 </script>
@@ -315,6 +504,12 @@ export default {
   width: 500px;
   margin: 0 auto;
   margin-top: 80px;
+  .brand-box{
+    .el-tag{
+      margin-left: 10px;
+      cursor: pointer;
+    }
+  }
 }
 .submit-btn {
   text-align: center;

+ 390 - 163
src/views/supplier/user/edit.vue

@@ -1,20 +1,20 @@
 <template>
   <div v-loading="isLoading" class="addSupplier">
-    <el-form ref="addFormRef" :model="addData" :rules="rules" label-width="120px" class="addForm">
+    <el-form ref="addFormRef" :model="addFromData" :rules="addFromDataRules" label-width="120px" class="addForm">
       <el-form-item label="供应商类型:" prop="shopType">
-        <el-select v-model="addData.shopType" placeholder="请选择供应商类型" style="width: 100%" disabled @change="getBrandList">
+        <el-select v-model="addFromData.shopType" placeholder="请选择供应商类型" style="width: 100%" disabled @change="reGetBrandList">
           <el-option label="品牌方" :value="1" />
           <el-option label="代理商" :value="2" />
         </el-select>
       </el-form-item>
 
       <!-- 供应商名称 -->
-      <el-form-item v-if="addData.shopType===2" label="供应商名称:" prop="shopName">
-        <el-input v-model="addData.shopName" placeholder="请输入供应商名称" disabled />
+      <el-form-item v-if="addFromData.shopType===2" label="供应商名称:" prop="shopName">
+        <el-input v-model="addFromData.shopName" placeholder="请输入供应商名称" disabled />
       </el-form-item>
 
-      <el-form-item v-if="addData.shopType===1" label="供应商名称:" prop="shopName">
-        <el-select v-model="addData.brandId" placeholder="请选择品牌" style="width: 100%" filterable disabled>
+      <el-form-item v-if="addFromData.shopType===1" label="供应商名称:" prop="brandId">
+        <el-select v-model="addFromData.brandId" placeholder="请选择品牌" style="width: 100%" filterable disabled @change="setShopName">
           <el-option
             v-for="(item) in brandList"
             :key="item.id"
@@ -26,64 +26,41 @@
       <!-- 供应商名称END -->
 
       <el-form-item label="手机号:" prop="mobile">
-        <el-input v-model="addData.mobile" placeholder="请输入手机号" />
+        <el-input v-model="addFromData.mobile" placeholder="请输入手机号" />
       </el-form-item>
       <el-form-item label="联系人:" prop="linkMan">
-        <el-input v-model="addData.linkMan" placeholder="请输入联系人" />
+        <el-input v-model="addFromData.linkMan" placeholder="请输入联系人" />
       </el-form-item>
-      <el-form-item v-if="addData.shopType===2" label="所属品牌:" prop="brandId">
-        <el-select v-model="addData.brandId" placeholder="请选择所属品牌" style="width: 100%" filterable @change="setShopName">
-          <el-option
-            v-for="(item) in brandList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="产地:" prop="countryId">
-        <el-select v-model="addData.countryId" placeholder="产地" style="width: 100%" filterable>
-          <el-option
-            v-for="item in countryList"
-            :key="item.countryId"
-            :label="item.countryName"
-            :value="item.countryId"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="品牌logo:" class="no-input" prop="brandAuthLogo">
-        <upload-image ref="uploadImageRef1" :file-list="fileList1" @success="imageUploadSuccess1" @error="imageUploadFaild1" />
-        <el-input v-model="addData.brandAuthLogo" type="hidden" class="hiddenInput" />
-      </el-form-item>
-      <el-form-item label="官网认证链接:">
-        <el-input v-model="addData.securityLink" placeholder="请输入官网认证链接" />
+
+      <el-form-item v-if="addFromData.shopType === 2" label="代理品牌:" class="brand-box">
+        <template v-if="supplierBrands">
+          <el-tag v-for="(brand,index) in supplierBrands" :key="index" type="success" closable @click="handleTagClick(index)" @close="handleTagClose(index)">{{ brand.brandName }}</el-tag>
+        </template>
+        <el-tag @click="handleAddBrand()">添加品牌<span class="el-icon-plus" /></el-tag>
       </el-form-item>
-      <template v-if="addData.shopType===2">
-        <el-form-item label="代理声明:">
-          <el-radio v-model="addData.statementType" :label="1">弹窗</el-radio>
-          <el-radio v-model="addData.statementType" :label="2">链接</el-radio>
-          <el-radio v-model="addData.statementType" :label="3">图片</el-radio>
-          <el-radio v-model="addData.statementType" :label="4">文件</el-radio>
-        </el-form-item>
 
-        <el-form-item v-if="addData.statementType === 1" label="弹窗:" prop="statementContent">
-          <el-input v-if="addData.statementType === 1" v-model="addData.statementContent" type="textarea" />
-        </el-form-item>
-        <el-form-item v-else-if="addData.statementType === 2" label="链接:" prop="statementLink">
-          <el-input v-if="addData.statementType === 2" v-model="addData.statementLink" />
+      <template v-if="addFromData.shopType===1">
+        <el-form-item label="产地:" prop="countryId">
+          <el-select v-model="addFromData.countryId" placeholder="产地" style="width: 100%" filterable>
+            <el-option
+              v-for="item in countryList"
+              :key="item.countryId"
+              :label="item.countryName"
+              :value="item.countryId"
+            />
+          </el-select>
         </el-form-item>
-        <el-form-item v-else-if="addData.statementType === 3" label="图片:" class="no-input" prop="statementImage">
-          <upload-image v-if="addData.statementType === 3" ref="uploadImageRef2" :file-list="fileList2" @success="imageUploadSuccess2" @error="imageUploadFaild2" />
-          <el-input v-model="addData.statementImage" type="hidden" class="hiddenInput" />
+        <el-form-item label="品牌logo:" class="no-input" prop="brandAuthLogo">
+          <upload-image ref="uploadImageRef1" :file-list="fileList1" @success="imageUploadSuccess1" @error="imageUploadFaild1" />
+          <el-input v-model="addFromData.brandAuthLogo" type="hidden" class="hiddenInput" />
         </el-form-item>
-        <el-form-item v-else label="文件:" prop="statementFileId">
-          <upload-file v-if="addData.statementType === 4" ref="uploadFileRef" :auth-user-id="addData.authUserId" :file-list="fileList3" @success="fileUploadSuccess" @error="fileUploadFaild" />
-          <el-input v-model="addData.statementFileId" type="hidden" class="hiddenInput" />
+        <el-form-item label="官网认证链接:">
+          <el-input v-model="addFromData.securityLink" placeholder="请输入官网认证链接" />
         </el-form-item>
-
       </template>
+
       <el-form-item label="供应商状态:">
-        <el-select v-model="addData.shopStatus" placeholder="请选择供应商状态" style="width: 100%">
+        <el-select v-model="addFromData.shopStatus" placeholder="请选择供应商状态" style="width: 100%">
           <el-option label="启用" :value="1" />
           <el-option label="禁用" :value="0" />
         </el-select>
@@ -93,6 +70,79 @@
       <el-button type="primary" @click="submit">保存</el-button>
       <el-button type="warning" @click="$_back()">返回</el-button>
     </div>
+
+    <!-- 添加代理商品牌dialog -->
+    <el-dialog
+      title="添加品牌信息"
+      :visible.sync="showAddDialog"
+      @closed="addBrandDialogClosed"
+    >
+      <el-form v-if="addFromData.shopType===2" ref="addBrandFormRef" :model="brandData" :rules="brandDataRules" label-width="120px">
+        <el-form-item label="产地" prop="countryId">
+          <el-select v-model="brandData.countryId" placeholder="产地" style="width: 100%" filterable>
+            <el-option
+              v-for="item in countryList"
+              :key="item.countryId"
+              :label="item.countryName"
+              :value="item.countryId"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="所属品牌:" prop="brandId">
+          <el-select v-model="brandData.brandId" placeholder="请选择所属品牌" style="width: 100%" filterable @change="handleSetName">
+            <el-option
+              v-for="item in brandList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item ref="brandAuthLogo" label="品牌logo:" class="no-input" prop="brandAuthLogo">
+          <upload-image ref="uploadImageRef1" :file-list="fileList1" @success="imageUploadSuccess1" @error="imageUploadFaild1" />
+          <el-input v-model="brandData.brandAuthLogo" type="hidden" class="hiddenInput" />
+        </el-form-item>
+
+        <el-form-item label="官网认证链接:">
+          <el-input v-model="brandData.securityLink" placeholder="请输入官网认证链接" />
+        </el-form-item>
+
+        <el-form-item label="代理声明:">
+          <el-radio-group v-model="brandData.statementType" @change="handleRadioChange">
+            <el-radio :label="1">弹窗</el-radio>
+            <el-radio :label="2">链接</el-radio>
+            <el-radio :label="3">图片</el-radio>
+            <el-radio :label="4">文件</el-radio>
+          </el-radio-group>
+
+        </el-form-item>
+
+        <el-form-item v-if="brandData.statementType === 1" ref="statementContent" label="弹窗:" prop="statementContent">
+          <el-input v-model="brandData.statementContent" type="textarea" />
+        </el-form-item>
+
+        <el-form-item v-if="brandData.statementType === 2" ref="statementLink" label="链接:" prop="statementLink">
+          <el-input v-model="brandData.statementLink" />
+        </el-form-item>
+
+        <el-form-item v-if="brandData.statementType === 3" ref="statementImage" label="图片:" class="no-input" prop="statementImage">
+          <upload-image ref="uploadImageRef2" :file-list="fileList2" @success="imageUploadSuccess2" />
+          <el-input v-model="brandData.statementImage" type="hidden" class="hiddenInput" />
+        </el-form-item>
+
+        <el-form-item v-if="brandData.statementType === 4" ref="statementFileId" label="文件:" prop="statementFileId">
+          <upload-file ref="uploadFileRef" :brand-id="brandData.brandId" :file-list="fileList3" :auth-user-id="addFromData.authUserId" @success="fileUploadSuccess" @error="fileUploadFaild" @remove="removeFile" />
+          <el-input v-model="brandData.statementFileId" type="hidden" class="hiddenInput" />
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer">
+        <el-button @click="showAddDialog = false">取 消</el-button>
+        <el-button type="primary" @click="handleSaveBrandInfo">确 定</el-button>
+      </div>
+    </el-dialog>
+
   </div>
 </template>
 
@@ -116,48 +166,73 @@ export default {
     }
     return {
       isLoading: false,
-
-      addData: {
-        authUserId: null, // 供应商id
-        brandAuthLogo: '', //	品牌授权logo
+      // 是否显示代理商商添加品牌
+      showAddDialog: false,
+      // 品牌列表
+      brandList: [],
+      selectBrandIndex: '',
+      // 品牌表单校验数据
+      brandData: {
+        isNew: true, // 是否是新添加的
+        index: '', // 当前元素的索引
         brandId: '', // 品牌id
         countryId: 1, // 产地国家id
-        createBy: '', // 创建人用户id
-        linkMan: '', // 联系人
-        mobile: '', // 手机号
+        brandAuthLogo: '', //	品牌授权logo
         securityLink: '', // 官网认证链接
-        shopName: '', // 供应商名称
-        shopStatus: 1, // 供应商状态:0停用 1启用
-        shopType: 1, //	供应商类型:1品牌方,2代理商
         statementContent: '', // 声明弹窗内容
         statementLink: '', // 声明链接
-        statementFileId: 'no file', //	声明文件id
+        statementFileId: -1, //	声明文件id
         statementImage: '', // 声明图片
         statementType: 1 // 代理声明类型:1弹窗 2链接 3图片 4文件(.doc .ppt .pdf)
       },
-      selectedBrandIndex: '',
-      brandList: [], // 品牌列表
-      // 表单校验规则
-      rules: {
-        shopType: [{ required: true, message: '供应商类型不能为空', trigger: 'change' }],
-        shopName: [{ required: true, message: '供应商名称不能为空', trigger: ['blur', 'change'] }],
+      // 品牌集合
+      supplierBrands: [],
+      // 表单校验的数据
+      addFromData: {
+        authUserId: null, // 供应商id
+        shopType: 1, //	供应商类型:1品牌方,2代理商
+        createBy: '', // 创建人用户id
+        brandId: '', // 品牌id
+        shopName: '', // 供应商名称
+        mobile: '', // 手机号
+        linkMan: '', // 联系人
+        countryId: 1, // 产地国家id
+        brandAuthLogo: '', //	品牌授权logo
+        securityLink: '', // 官网认证链接
+        shopStatus: 1, // 供应商状态:0停用 1启用
+        shopInfo: []
+      },
+
+      // 表单数据校验规则
+      addFromDataRules: {
+        shopType: { required: true, message: '请选择供应商类型', trigger: 'change' },
+        brandId: { required: true, message: '请选择品牌', trigger: 'change' },
+        shopName: [
+          { required: true, message: '请输入供应商名称', trigger: 'blur' },
+          { maxLength: 50, message: '最大字符长度为50个字符', trigger: 'blur' }
+        ],
         mobile: [
-          { required: true, message: '手机号不能为空', trigger: 'blur' },
+          { required: true, message: '请输入手机号', trigger: 'blur' },
           { validator: valideMobile, trigger: 'blur' }
-        ], // 手机号格式校验
-        linkMan: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
-        countryId: [{ required: true, message: '产地不能为空', trigger: 'change' }],
-        brandAuthLogo: [{ required: true, message: '品牌logo不能为空' }],
-        brandId: [{ required: true, message: '所属品牌不能为空', trigger: 'change' }],
-        statementContent: [{ required: true, message: '声明不能为空', trigger: 'blur' }],
-        statementLink: [{ required: true, message: '声明链接不能为空', trigger: 'blur' }],
-        statementImage: [{ required: false, message: '声明图片不能为空' }],
-        statementFileId: [{ required: false, message: '声明文件不能为空' }]
+        ],
+        linkMan: { required: true, message: '请输入联系人', trigger: 'blur' },
+        countryId: { required: true, message: '请选择国家', trigger: 'change' },
+        brandAuthLogo: { required: true, message: '请上传品牌logo图片', trigger: 'change' }
+      },
+      brandDataRules: {
+        brandId: { required: true, message: '请选择品牌', trigger: 'change' },
+        countryId: { required: true, message: '请选择国家', trigger: 'change' },
+        brandAuthLogo: { required: true, message: '请上传品牌logo图片', trigger: 'change' },
+        statementContent: { required: true, message: '请输入声明内容', trigger: 'blur' },
+        statementLink: { required: true, message: '请输入声明链接', trigger: 'blur' },
+        statementImage: { required: true, message: '请上传声明图片', trigger: 'change' },
+        statementFileId: { required: true, message: '请上传声明文件', trigger: 'change' }
       },
-      fileList1: [], // 已上传的图片列表 品牌logo
+
+      // 上传的图片列表
+      fileList1: [], // 已上传的图片列表 品牌logo图片
       fileList2: [], // 已上传的图片列表 声明图片
       fileList3: [] // 已上传的图片列表 声明文件
-      // countryList: []
     }
   },
   computed: {
@@ -165,14 +240,14 @@ export default {
   },
   created() {
     // 获取供应商id
-    this.addData.authUserId = this.$route.query.id
-    this.getInfoById(this.addData.authUserId)
+    this.addFromData.authUserId = this.$route.query.id
+    this.getInfoById(this.addFromData.authUserId)
   },
   methods: {
     // 初始添加供应商时的表单数据
     initAddForm(data) {
+      this.getBrandList(data.shopType)
       this.setFormData(data)
-      this.getBrandList(data.type)
     },
     // 查询供应商信息
     getInfoById(id) {
@@ -180,7 +255,6 @@ export default {
       getSupplierById({ authUserId: id })
         .then(res => {
           if (res.code === 0) {
-            console.log(res.data)
             this.initAddForm(res.data)
           }
         })
@@ -191,16 +265,33 @@ export default {
     },
     // 为表单设置数据
     setFormData(data) {
-      for (const key in this.addData) {
-        if (Object.hasOwnProperty.call(data, key)) {
-          this.addData[key] = data[key] || ''
+      // 如果返回的是品牌方信息
+      if (data.shopType === 1) {
+        this.addFromData = {
+          ...data,
+          ...data.shopInfo[0]
         }
       }
-      if (this.addData.brandAuthLogo) {
-        this.fileList1.push({ name: 'authLogo', url: this.addData.brandAuthLogo })
+      if (data.shopType === 2) {
+        this.addFromData = {
+          ...data,
+          shopInfo: []
+        }
+        data.shopInfo.forEach((item, index) => {
+          item.index = index
+          item.isNew = false
+          if (item.statementFileId === null) {
+            item.statementFileId = -1
+          }
+        })
+        this.supplierBrands = data.shopInfo
       }
-      if (this.addData.statementImage) {
-        this.fileList2.push({ name: '声明图片', url: this.addData.statementImage })
+      console.log(this.addFromData)
+      if (this.addFromData.brandAuthLogo) {
+        this.fileList1.push({ name: 'authLogo', url: this.addFromData.brandAuthLogo })
+      }
+      if (this.addFromData.statementImage) {
+        this.fileList2.push({ name: '声明图片', url: this.addFromData.statementImage })
       }
       if (data.statementFileName) {
         // this.fileList3.push({ name: '您已上传文件,不支持预览,可删除后重新上传', url: '' })
@@ -208,68 +299,76 @@ export default {
       }
     },
     // 获取品牌列表
-    getBrandList(type) {
-      fetchBrandList({ type }).then(res => {
+    getBrandList(shopType) {
+      fetchBrandList({ type: shopType }).then(res => {
         if (res.code === 0) {
           this.brandList = res.data
         }
       }).catch(err => console.log(err))
     },
 
-    // 保存表单数据
-    // async save() {
-    //   this.isLoading = true
-    //   this.addData.createBy = this.authUserId
-    //   // this.uploadFile()
-    //   await this.$refs.addFormRef.validate(valide => {
-    //     if (!valide) {
-    //       this.isLoading = false
-    //       return
-    //     }
-    //     if (this.addData.statementFileId === 'no file') {
-    //       this.addData.statementFileId = null
-    //     }
-    //     addSupplier(this.addData).then(res => {
-    //       this.$message.success('修改成功')
-    //       // this.$refs.addFormRef.resetFields()
-    //     }).catch(err => {
-    //       console.log(err)
-    //       this.$message.danger('修改失败')
-    //     }).finally(() => {
-    //       this.isLoading = false
-    //       // this.addData.securityLink = ''
-    //     })
-    //   })
-    // },
     // 提交表单数据
-    async submit() {
-      this.isLoading = true
-      if (this.addData.statementType === 4 && this.addData.statementFileId !== 'no file') {
-        console.log(this.$refs)
-        this.$refs.uploadFileRef.$refs.upload.submit()
-      } else {
-        this.addData.statementFileId = null
-        await this.$refs.addFormRef.validate(valide => {
-          if (!valide) {
-            this.isLoading = false
-            return
-          }
-          this.save()
+    submit() {
+      this.$refs.addFormRef.validate(valide => {
+        if (!valide) {
+          this.isLoading = false
+          return
+        }
+        // this.addFromData.shopInfo = [this.brandData]
+        // console.log(this.addFromData)
+        // return
+        this.save()
+      })
+    },
+    // 创建添加数据对象
+    createAddData() {
+      const addData = {
+        authUserId: null, // 供应商id
+        createBy: '', // 创建人用户id
+        linkMan: '', // 联系人
+        mobile: '', // 手机号
+        shopName: '设置', // 供应商名称
+        shopStatus: 1, // 供应商状态:0停用 1启用
+        shopType: 1, //	供应商类型:1品牌方,2代理商
+        shopInfo: []
+      }
+
+      // 循环赋值
+      for (const key in addData) {
+        if (Object.hasOwnProperty.call(addData, key)) {
+          addData[key] = this.addFromData[key]
+        }
+      }
+      // 添加品牌方 shopInfo 里面只有一个对象
+      if (this.addFromData.shopType === 1) {
+        addData.shopInfo.push({
+          brandId: this.addFromData.brandId, // 品牌id
+          countryId: this.addFromData.countryId, // 产地国家id
+          brandAuthLogo: this.addFromData.brandAuthLogo, //	品牌授权logo
+          securityLink: this.addFromData.securityLink, // 官网认证链接
+          statementContent: '', // 声明弹窗内容
+          statementLink: '', // 声明链接
+          statementFileId: -1, //	声明文件id
+          statementImage: '', // 声明图片
+          statementType: 1 // 代理声明类型:1弹窗 2链接 3图片 4文件(.doc .ppt .pdf)
         })
       }
+      // 添加代理商
+      if (this.addFromData.shopType === 2) {
+        addData.shopInfo = this.supplierBrands
+      }
+      addData.createBy = this.authUserId
+      return addData
     },
     // 保存
-    async save() {
-      this.addData.createBy = this.authUserId
-      addSupplier(this.addData).then(res => {
+    save() {
+      addSupplier(this.createAddData()).then(res => {
         console.log(res)
-        this.$message.success('修改成功')
-        // this.$refs.addFormRef.resetFields()
-        // this.clearFormData()
+        this.$message.success('保存成功')
+        this.$router.replace('/supplier')
       }).finally(() => {
         this.isLoading = false
-        // this.$refs.addFormRef.resetFields()
-        this.addData.securityLink = ''
+        this.addFromData.securityLink = ''
       })
     },
     // 设置品牌名称
@@ -283,55 +382,177 @@ export default {
         }
       })
       console.log(selectBrand)
-      if (this.addData.shopType === 1) {
-        this.addData.shopName = selectBrand.name
+      if (this.addFromData.shopType === 1) {
+        this.addFromData.shopName = selectBrand.name
       }
-      this.addData.brandAuthLogo = selectBrand.authLogo
+      this.addFromData.brandAuthLogo = selectBrand.authLogo
       if (selectBrand.authLogo) {
-        fileList.push({ name: this.addData.shopName, url: selectBrand.authLogo || '' })
+        fileList.push({ name: this.addFromData.shopName, url: selectBrand.authLogo || '' })
       }
       this.fileList1 = fileList
       // const fileList = []
-      // if (this.addData.shopType === 1) {
-      //   this.addData.shopName = this.brandList[index]?.name
+      // if (this.addFromData.shopType === 1) {
+      //   this.addFromData.shopName = this.brandList[index]?.name
       // }
-      // this.addData.brandAuthLogo = this.brandList[index]?.authLogo || ''
+      // this.addFromData.brandAuthLogo = this.brandList[index]?.authLogo || ''
       // if (this.brandList[index]?.authLogo) {
-      //   fileList.push({ name: this.addData.shopName, url: this.brandList[index]?.authLogo || '' })
+      //   fileList.push({ name: this.addFromData.shopName, url: this.brandList[index]?.authLogo || '' })
       // }
       // this.fileList1 = fileList
     },
-    // 文件上传成功
-    fileUploadSuccess(data) {
-      this.addData.statementFileId = data.data
-      console.log(data)
-      this.$refs.addFormRef.validate(valide => {
-        if (!valide) {
-          this.isLoading = false
+    // 重新获取品牌列表
+    reGetBrandList(id) {
+      const shopType = id
+      this.fileList2 = []
+      this.fileList1 = []
+      this.fileList3 = []
+      this.addFromData = {
+        authUserId: null, // 供应商id
+        brandAuthLogo: '', //	品牌授权logo
+        brandId: '', // 品牌id
+        countryId: 1, // 产地国家id
+        createBy: '', // 创建人用户id
+        linkMan: '', // 联系人
+        mobile: '', // 手机号
+        securityLink: '', // 官网认证链接
+        shopName: '', // 供应商名称
+        shopStatus: 1, // 供应商状态:0停用 1启用
+        shopType: 1 //	供应商类型:1品牌方,2代理商
+      }
+      this.$refs.addFormRef?.clearValidate()
+      this.addFromData.shopType = shopType
+      this.getBrandList()
+    },
+    // 添加品牌信息对话框关闭事件
+    addBrandDialogClosed() {
+      this.fileList1 = []
+      this.fileList2 = []
+      this.fileList3 = []
+      this.$refs.addBrandFormRef.resetFields()
+    },
+    // 添加品牌
+    handleAddBrand() {
+      this.brandData.isNew = true
+      this.showAddDialog = true
+    },
+    handleSaveBrandInfo() {
+      // 如果为代理商 && 声明类型为文件
+      console.log(this.brandData)
+      debugger
+      if (this.addFromData.shopType === 2 && this.brandData.statementType === 4) {
+        // this.$refs.uploadFileRef.$refs.upload.submit()
+        if (this.brandData.statementFileId !== -1) {
+          this.saveBrandInfo()
+        } else {
+          this.$refs.uploadFileRef.$refs.upload.submit()
+        }
+      } else {
+        this.saveBrandInfo()
+      }
+    },
+    handleSetName(id) {
+      const fileList = []
+      let brandInfo = null
+      this.brandList.forEach(item => {
+        if (item.id === id) {
+          brandInfo = item
           return
         }
-        console.log(2)
-        this.save()
+      })
+      this.brandData.brandName = brandInfo.name
+      this.brandData.brandId = brandInfo.id
+      this.brandData.brandAuthLogo = brandInfo.authLogo
+      fileList.push({ name: brandInfo.name, url: brandInfo.authLogo })
+      this.fileList1 = fileList
+    },
+    // 重置表单项
+    handleRadioChange() {
+      this.$refs.statementContent?.clearValidate()
+      this.$refs.statementLink?.clearValidate()
+      this.$refs.statementFileId?.clearValidate()
+      this.$refs.statementImage?.clearValidate()
+    },
+    // 供应商代理品牌标签关闭时间
+    handleTagClose(index) {
+      this.supplierBrands.splice(index, 1)
+    },
+
+    // 查看品牌信息
+    handleTagClick(index) {
+      this.selectBrandIndex = index
+      this.brandData = this.cloneData(this.supplierBrands[index])
+      this.brandData.isNew = false
+      this.brandData.index = index
+      this.showAddDialog = true
+      console.log(this.brandData)
+      if (this.brandData.statementFileName) {
+        this.fileList3 = [{ name: this.brandData.statementFileName, url: '' }]
+      }
+      if (this.brandData.statementImage !== '') {
+        this.fileList2 = [{ name: '文件已上传', url: this.brandData.statementImage }]
+      }
+      if (this.brandData.brandAuthLogo !== '') {
+        this.fileList1 = [{ name: '', url: this.brandData.brandAuthLogo }]
+      }
+      console.log(this.brandData)
+    },
+    // 代理商保存品牌信息
+    saveBrandInfo() {
+      this.$refs.addBrandFormRef.validate(valide => {
+        if (!valide) return
+        // 提交保存
+        if (this.brandData.isNew) {
+          this.supplierBrands.push(this.cloneData(this.brandData))
+        } else {
+          this.supplierBrands.splice(this.brandData.index, 1, this.cloneData(this.brandData))
+        }
+        this.showAddDialog = false
       })
     },
+    // 文件上传成功
+    fileUploadSuccess(data) {
+      this.brandData.statementFileId = data.data
+      console.log(data)
+      this.saveBrandInfo()
+    },
     fileUploadFaild(err, file, fileList) {
       console.log(err)
     },
-
+    removeFile() {
+      console.log('删除上传的文件')
+      this.brandData.statementFileId = -1
+      console.log(this.brandData.statementFileId)
+    },
     // 图片上传成功 品牌logo
     imageUploadSuccess1(data) {
-      this.addData.brandAuthLogo = data.data
+      if (this.addFromData.shopType === 1) {
+        this.addFromData.brandAuthLogo = data.data
+      } else if (this.addFromData.shopType === 2) {
+        this.brandData.brandAuthLogo = data.data
+      }
     },
     imageUploadFaild1(err, file, fileList) {
       console.log(err)
     },
-
     // 图片上传成功 声明图片
     imageUploadSuccess2(data) {
-      this.addData.statementImage = data.data
+      this.addFromData.statementImage = data.data
     },
     imageUploadFaild2(err, file, fileList) {
       console.log(err)
+    },
+    removeImage() {
+      this.addFromData.statementImage = ''
+    },
+    // 克隆
+    cloneData(data) {
+      const resutl = {}
+      for (const key in data) {
+        if (Object.hasOwnProperty.call(data, key)) {
+          resutl[key] = data[key]
+        }
+      }
+      return resutl
     }
   }
 }
@@ -345,6 +566,12 @@ export default {
   width: 500px;
   margin: 0 auto;
   margin-top: 80px;
+  .brand-box{
+    .el-tag{
+      margin-left: 10px;
+      cursor: pointer;
+    }
+  }
 }
 .submit-btn {
   text-align: center;

+ 2 - 2
src/views/supplier/user/index.vue

@@ -38,8 +38,8 @@
       <el-table-column label="供应商名称" align="center" prop="name" />
       <el-table-column label="供应商类型" width="150px" align="center">
         <template v-slot="{row}">
-          <span v-if="row.type === 1">品牌方</span>
-          <span v-if="row.type === 2">代理商</span>
+          <span v-if="row.shopType === 1">品牌方</span>
+          <span v-if="row.shopType === 2">代理商</span>
         </template>
       </el-table-column>
       <el-table-column label="所属品牌" width="150px" align="center" prop="brandName" />