aaa
doum
2026-06-08 3ac279c9df7181c9f21d35a689a321b990b87b22
company_admin/src/components/business/OperaGoodsWindow.vue
@@ -11,7 +11,7 @@
          <el-input v-model="form.name" maxlength="50" placeholder="请输入商品名称,不超过50个字" v-trim/>
        </el-form-item>
        <el-form-item label="商品品牌" prop="brandId">
          <el-select v-model="form.brandId" placeholder="请选择,单选">
          <el-select v-model="form.brandId" filterable placeholder="请选择,单选">
            <el-option
              v-for="item in brandList"
              :key="item.id"
@@ -21,8 +21,7 @@
          </el-select>
        </el-form-item>
        <el-form-item label="商品类别" prop="categoryId">
          <!-- @change="changeCategory(form.categoryId)" -->
          <el-select v-model="form.categoryId" placeholder="请选择,单选">
          <el-select v-model="form.categoryId" filterable placeholder="请选择一级类别" @change="onCategoryChange">
            <el-option
              v-for="item in categoryList"
              :key="item.id"
@@ -31,7 +30,17 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item :label="name1" prop="attrFirstIds" v-if="name1">
        <el-form-item label="二级类别">
          <el-select v-model="form.subCategoryId" clearable filterable placeholder="可选,请选择二级类别">
            <el-option
              v-for="item in subCategoryList"
              :key="item.id"
              :label="item.name"
              :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <!-- <el-form-item :label="name1" prop="attrFirstIds" v-if="name1">
          <el-select v-model="form.attrFirstIds" multiple placeholder="请选择,支持多选">
            <el-option
              v-for="item in form.attrFirstList"
@@ -50,7 +59,7 @@
              :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        </el-form-item> -->
        <el-form-item label="指导价(元)" prop="zdPrice">
          <el-input v-model="form.zdPrice" @input="priceCHANEG(form.zdPrice, 1)" type="number" placeholder="建议录入整数,单位元" v-trim/>
        </el-form-item>
@@ -61,7 +70,7 @@
          <el-upload
            :action="action"
            :file-list="form.ztList"
            :data="{ folder: 'projects' }"
            :data="{ folder: 'goods_img' }"
            list-type="picture-card"
            :limit="1"
            :on-success="fileSuccess"
@@ -76,7 +85,7 @@
            :action="action"
            :file-list="form.files"
            :multiple="true"
            :data="{ folder: 'projects' }"
            :data="{ folder: 'goods_img' }"
            list-type="picture-card"
            :on-success="fileSuccess1"
            :on-remove="handleRemove1">
@@ -84,10 +93,12 @@
            <div slot="tip" class="el-upload__tip">只能上传图片格式,png格式,建议尺寸600*600px</div>
          </el-upload>
        </el-form-item>
        <div style="font-size: 18px;font-weight: bold;">参数属性值配置 <span style="font-size: 13px; font-weight: 500;">按需配置当前商品的产品参数值,单个参数值不超过30个字</span></div>
        <el-form-item :label="item.name" v-for="(item, index) in form.goodsParamList" :key="index">
          <el-input v-model="item.val" maxlength="30" type="text" placeholder="请输入" v-trim/>
        </el-form-item>
        <template v-if="form.goodsParamList && form.goodsParamList.length > 0">
          <div style="font-size: 18px;font-weight: bold;">参数属性值配置 <span style="font-size: 13px; font-weight: 500;">按需配置当前商品的产品参数值,单个参数值不超过30个字</span></div>
          <el-form-item :label="item.name" v-for="(item, index) in form.goodsParamList" :key="index">
            <el-input v-model="item.val" maxlength="30" type="text" placeholder="请输入" v-trim/>
          </el-form-item>
        </template>
      </el-form>
    </GlobalWindow>
  </template>
@@ -96,14 +107,15 @@
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import { brand } from '@/api/system/common.js'
  import { findListForGoodsId, create, updateById } from '@/api/business/goods.js'
  import { findListForGoodsId, create, updateById, companyCreate, companyUpdateById } from '@/api/business/goods.js'
  import { fetchChildren } from '@/api/business/category.js'
  export default {
    name: 'OperaGoodsWindow',
    extends: BaseOpera,
    components: { GlobalWindow },
    data () {
      return {
        action: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal',
        action: process.env.VUE_APP_API_PREFIX + '/public/upload',
        name1: '',
        name2: '',
        // 表单数据
@@ -111,6 +123,7 @@
          id: null,
          name: '',
          categoryId: '',
          subCategoryId: '',
          brandId: '',
          zdPrice: '',
          price: '',
@@ -146,6 +159,7 @@
        },
        options: [],
        categoryList: [],
        subCategoryList: [],
        brandList: []
      }
    },
@@ -195,6 +209,7 @@
              id: null,
              name: '',
              categoryId: '',
              subCategoryId: '',
              brandId: '',
              zdPrice: '',
              price: '',
@@ -215,6 +230,45 @@
      }
    },
    methods: {
      open (title, target) {
        this.title = title
        this.visible = true
        if (target == null) {
          this.$nextTick(() => {
            this.$refs.form.resetFields()
            this.form[this.configData['field.id']] = null
            this.subCategoryList = []
          })
          return
        }
        this.$nextTick(() => {
          for (const key in this.form) {
            this.form[key] = target[key]
          }
          this.loadSubCategoryOptions()
        })
      },
      buildSubmitPayload () {
        const payload = { ...this.form, type: 0 }
        if (payload.subCategoryId === '' || payload.subCategoryId == null) {
          payload.subCategoryId = null
        } else {
          payload.subCategoryId = Number(payload.subCategoryId)
        }
        return payload
      },
      loadSubCategoryOptions () {
        if (!this.form.categoryId) {
          this.subCategoryList = []
          return
        }
        fetchChildren(this.form.categoryId).then(res => {
          this.subCategoryList = res || []
          if (this.form.subCategoryId !== '' && this.form.subCategoryId != null) {
            this.form.subCategoryId = Number(this.form.subCategoryId)
          }
        })
      },
      priceCHANEG(val, type) {
        if (!/^[1-9]+[0-9]*$/.test(val)) {
          this.$message.warning('只能输入正整数')
@@ -259,7 +313,8 @@
              this.form.attrSecodIds = ''
            }
            if (!this.form.id) {
              create(this.form)
              const payload = this.buildSubmitPayload()
              companyCreate(payload)
                .then(() => {
                  this.visible = false
                  this.$tip.apiSuccess('新建成功')
@@ -272,7 +327,7 @@
                  this.isWorking = false
                })
            } else {
              updateById(this.form)
              companyUpdateById(this.buildSubmitPayload())
                .then(() => {
                  this.visible = false
                  this.$tip.apiSuccess('编辑成功')
@@ -295,13 +350,22 @@
          message: '只能上传一个图标'
        })
      },
      initMuitlFiles (fileList) {
        const list = [];
        fileList.forEach(rawFile => {
          list.push({ fileurl: rawFile.response.data.imgaddr, name: rawFile.response.data.imgname, url: rawFile.response.data.url })
        });
        return list;
      },
      fileSuccess1(response, file, fileList) {
        this.form.files = fileList
        this.form.multifileList.push({ fileurl: response.data.imgaddr, name: response.data.imgname, url: response.data.url })
        // this.form.multifileList.push({ fileurl: response.data.imgaddr, name: response.data.imgname, url: response.data.url })
       this.form.multifileList=this.initMuitlFiles(fileList);
      },
      handleRemove1(file, fileList) {
        this.form.files = fileList
        this.form.multifileList = fileList
        // this.form.multifileList = fileList
        this.form.multifileList=this.initMuitlFiles(fileList);
      },
      fileSuccess(response) {
        this.form.ztList.push({ imgaddr: response.data.imgaddr, url: response.data.url })
@@ -317,18 +381,27 @@
              this.brandList = res
            })
        },
        onCategoryChange (val) {
          this.form.subCategoryId = ''
          this.subCategoryList = []
          if (val) {
            fetchChildren(val).then(res => {
              this.subCategoryList = res || []
            })
          }
        },
        getcategory(type) {
          findListForGoodsId(this.form.id || '')
            .then(res => {
              this.categoryList = res
              this.categoryList = (res || []).filter(item => !item.parentId)
              this.loadSubCategoryOptions()
              if (type === 1) {
                this.categoryList.forEach(item => {
                  if (item.id === this.form.categoryId) {
                    this.form.goodsParamList = JSON.parse(JSON.stringify(item.paramList))
                    this.form.goodsParamList.forEach(item => {
                      item.pramaId = item.id
                    this.form.goodsParamList.forEach(p => {
                      p.pramaId = p.id
                    })
                    console.log(this.form.goodsParamList)
                  }
                })
              }