<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">

      <el-form-item label="商品分类" prop="cateId">
        <treeselect  v-model="queryParams.cateId"  style="width:205.4px" :options="categoryOptions" :normalizer="normalizer" placeholder="请选择分类" />
      </el-form-item>

      <el-form-item label="商品名称" prop="productName">
        <el-input
          v-model="queryParams.productName"
          placeholder="请输入商品名称"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>

      <el-form-item label="商品编号" prop="barCode">
        <el-input
          v-model="queryParams.barCode"
          placeholder="请输入商品编号"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>


      <el-form-item label="商品类型" prop="productTypes">
        <el-select v-model="queryParams.productTypes" multiple placeholder="请选择商品类型" clearable size="small" >
          <el-option
            v-for="item in productTypeOptions"
            :key="item.dictValue"
            :label="item.dictLabel"
            :value="Number(item.dictValue)"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="所属公司">
        <el-select style="width: 240px" v-model="companyId" multiple placeholder="请选择企业" clearable size="small" >
          <el-option
            v-for="item in companyOptions"
            :key="item.companyId"
            :label="item.companyName"
            :value="item.companyId"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="所属店铺" v-if="this.isStores">
        <el-select style="width: 240px" v-model="queryParams.storeIds" placeholder="请选择店铺" clearable size="small" >
          <el-option
            v-for="item in storeOptions"
            :key="item.storeId"
            :label="item.storeName"
            :value="item.storeId"
          />
        </el-select>
      </el-form-item>
      <div v-if="this.isMedicalMall">
      <el-form-item label="审核状态">
        <el-select style="width: 240px" v-model="queryParams.isAudit" placeholder="请选择审核状态" size="small" >
          <el-option value="0" label="待审核" key="isAudit0">待审核</el-option>
          <el-option value="1" label="审核通过" key="isAudit1">审核通过</el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="药品注册证书编号" prop="drugRegCertNo">
        <el-input
          v-model="queryParams.drugRegCertNo"
          placeholder="请输入药品注册证书编号"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="通用名称" prop="commonName">
        <el-input
          v-model="queryParams.commonName"
          placeholder="请输入通用名称"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="剂型" prop="dosageForm">
        <el-input
          v-model="queryParams.dosageForm"
          placeholder="请输入剂型"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="单价" prop="unitPrice">
        <el-input
          v-model="queryParams.unitPrice"
          placeholder="请输入单价"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="批号" prop="batchNumber">
        <el-input
          v-model="queryParams.batchNumber"
          placeholder="请输入批号"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="上市许可持有人" prop="mah">
        <el-input
          v-model="queryParams.mah"
          placeholder="请输入上市许可持有人"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="持有人地址" prop="mahAddress">
        <el-input
          v-model="queryParams.mahAddress"
          placeholder="请输入持有人地址"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="生产企业" prop="manufacturer">
        <el-input
          v-model="queryParams.manufacturer"
          placeholder="请输入生产企业"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="生产企业地址" prop="manufacturerAddress">
        <el-input
          v-model="queryParams.manufacturerAddress"
          placeholder="请输入生产企业地址"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="功能主治" prop="indications">
        <el-input
          v-model="queryParams.indications"
          placeholder="请输入功能主治"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="用法用量" prop="dosage">
        <el-input
          v-model="queryParams.dosage"
          placeholder="请输入用法用量"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="不良反应" prop="adverseReactions">
        <el-input
          v-model="queryParams.adverseReactions"
          placeholder="请输入不良反应"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="禁忌" prop="contraindications">
        <el-input
          v-model="queryParams.contraindications"
          placeholder="请输入禁忌"
          clearable
          size="small"

        />
      </el-form-item>

      <el-form-item label="注意事项" prop="precautions">
        <el-input
          v-model="queryParams.precautions"
          placeholder="请输入注意事项"
          clearable
          size="small"

        />
      </el-form-item>
      </div>
      <!-- <el-form-item label="状态" prop="isShow">
         <el-select style="width: 240px" v-model="queryParams.isShow" placeholder="请选择状态" clearable size="small" >
         <el-option
                v-for="item in isShowOptions"
                :key="item.dictValue"
                :label="item.dictLabel"
                :value="item.dictValue"
              />
        </el-select>
      </el-form-item> -->

      <el-form-item>
        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>

    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['store:storeProduct:add']"
        >新增</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          icon="el-icon-edit"
          size="mini"
          :disabled="multiple"
          @click="handleUpdate"
          v-hasPermi="['store:storeProduct:edit']"
        >修改</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['store:storeProduct:remove']"
        >删除</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="info"
          plain
          icon="el-icon-upload2"
          size="mini"
          @click="handleImport"
          v-hasPermi="['store:storeProduct:import']"
        >导入</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          v-hasPermi="['store:storePayment:export']"
        >导出</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          icon="el-icon-edit"
          size="mini"
          :disabled="multiple"
          @click="bulkCopy"
          v-hasPermi="['store:storeProduct:bulkCopy']"
        >批量复制</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-edit-outline"
          size="mini"
          :disabled="multiple"
          @click="handleBulkUpdate"
          v-hasPermi="['store:storeProduct:edit']"
        >批量修改</el-button>
      </el-col>

      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <el-tabs type="card" v-model="activeName" @tab-click="handleClick">
      <el-tab-pane label="出售中" name="1"></el-tab-pane>
      <el-tab-pane label="待上架" name="0"></el-tab-pane>
    </el-tabs>

    <el-table  height="500" border v-loading="loading" :data="storeProductList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="ID" align="center" prop="productId" />
      <el-table-column label="商品图片" align="center" width="120">
        <template slot-scope="scope">
          <el-popover
            placement="right"
            title=""
            trigger="hover">
            <img slot="reference" :src="scope.row.image" width="100">
            <img :src="scope.row.image" style="max-width: 150px;">
          </el-popover>
        </template>
      </el-table-column>
      <el-table-column label="商品名称" show-overflow-tooltip align="center" prop="productName" />
      <el-table-column label="分类" align="center" prop="cateName" />
      <el-table-column label="所属公司" align="center" min-width="160">
        <template slot-scope="scope">
          <div class="company-name-list">
            <div
              v-for="(name, idx) in getDisplayCompanyNameList(scope.row)"
              :key="idx"
              class="company-name-item"
            >{{ name }}</div>
            <el-button
              v-if="getCompanyNameList(scope.row.companyName).length > 3"
              type="text"
              size="mini"
              @click="toggleCompanyNameExpand(scope.row)"
            >
              {{ isCompanyNameExpanded(scope.row) ? '收起' : `展开(${getCompanyNameList(scope.row.companyName).length})` }}
            </el-button>
          </div>
        </template>
      </el-table-column>
      <el-table-column label="所属店铺" align="center" prop="storeName" v-if="this.isStores"/>
      <el-table-column label="售价" align="center" prop="price" >
        <template slot-scope="scope" >
          <span v-if="scope.row.price!=null">{{scope.row.price.toFixed(2)}}</span>
        </template>
      </el-table-column>
      <el-table-column label="原价" align="center" prop="otPrice" >
        <template slot-scope="scope" >
          <span v-if="scope.row.otPrice!=null">{{scope.row.otPrice.toFixed(2)}}</span>
        </template>
      </el-table-column>
      <el-table-column label="销量" align="center" prop="sales" />
      <el-table-column label="库存" align="center" prop="stock" />
      <el-table-column label="类型" align="center" prop="productType" >
        <template slot-scope="scope">
          <el-tag prop="productType" v-for="(item, index) in productTypeOptions"    v-if="scope.row.productType==item.dictValue">{{item.dictLabel}}</el-tag>
        </template>
      </el-table-column>
      <el-table-column label="状态" align="center" prop="isShow" >
        <template slot-scope="scope">
          <el-tag :type="getStatusType(scope.row)" prop="status">
            {{ getStatusText(scope.row) }}
          </el-tag>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['store:storeProduct:edit']"
          >修改</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleCopy(scope.row)"
            v-hasPermi="['store:storeProduct:copy']"
          >复制</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="showOperLog(scope.row)"
            v-hasPermi="['store:storeProduct:list']"
            v-if="scope.row.isAudit===1"
          >审核记录</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['store:storeProduct:remove']"
          >删除</el-button>
        </template>
      </el-table-column>
    </el-table>

    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />

    <el-dialog title="批量修改商品" :visible.sync="open1" width="580px" append-to-body>
      <el-form ref="form1" :model="form1" label-width="90px">
        <el-form-item label="商品状态">
          <el-radio-group v-model="form1.isShow">
            <el-radio label="">不修改</el-radio>
            <el-radio :label="item.dictValue" v-for="item in isShowOptions" :key="item.dictValue">{{ item.dictLabel }}</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="商城展示">
          <el-radio-group v-model="form1.isDisplay">
            <el-radio label="">不修改</el-radio>
            <el-radio :label="item.dictValue" v-for="item in isDisplayOptions" :key="item.dictValue">{{ item.dictLabel }}</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="所属公司">
          <div class="quick-select-row">
            <el-button type="text" size="mini" @click="handleBulkCompanySelectAll">全选</el-button>
            <el-button type="text" size="mini" @click="handleBulkCompanyInvert">反选</el-button>
            <el-button type="text" size="mini" @click="handleBulkCompanyClear">一键清空</el-button>
            <el-button type="text" size="mini" @click="handleBulkCompanySkip">不修改</el-button>
          </div>
          <el-select
            style="width: 100%"
            filterable
            multiple
            v-model="form1.companyId"
            placeholder="请选择所属公司，可留空表示清空"
            clearable
            size="small"
          >
            <el-option
              v-for="item in companyOptions"
              :key="item.companyId"
              :label="item.companyName"
              :value="item.companyId"
            />
          </el-select>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm1">确 定</el-button>
        <el-button @click="cancel1">取 消</el-button>
      </div>
    </el-dialog>

    <!-- 添加或修改商品对话框 -->
    <el-dialog :title="title" v-if="open" :fullscreen="isFullscreen" :visible.sync="open" width="1000px" append-to-body :show-close="false">
      <template v-slot:title>
        <div style="display: flex; justify-content: space-between; align-items: center;">
          <span>{{ title }}</span>
          <div>
            <!-- 全屏按钮 -->
            <el-button type="text" @click="handleFullScreen" size="middle">
              <i class="el-icon-full-screen"></i>
            </el-button>
            <!--关闭按钮-->
            <el-button type="text" @click="open = false">
              <i class="el-icon-close"></i>
            </el-button>
          </div>
        </div>
      </template>
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row >
          <el-col :span="12">
            <el-form-item label="商品名称" prop="productName">
              <el-input v-model="form.productName" placeholder="请输入商品名称" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="商品分类" prop="cateId">
              <treeselect v-model="form.cateId" :options="categoryOptions" :normalizer="normalizer" placeholder="请选择上级分类" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="关键字" prop="keyword">
              <el-input v-model="form.keyword" placeholder="请输入关键字" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="单位名" prop="unitName">
              <el-input v-model="form.unitName" placeholder="请输入单位名" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="品牌" prop="brand">
              <el-input v-model="form.brand" placeholder="请输入品牌" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="食品生产许可证编码" prop="unitName">
              <el-input v-model="form.foodProductionLicenseCode" placeholder="请输入食品生产许可证编码" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="生产企业名称" prop="manufacturer">
              <el-input v-model="form.manufacturer" placeholder="请输入生产企业名称" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="产地" prop="originPlace">
              <el-input v-model="form.originPlace" placeholder="请输入产地" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="净含量" prop="netContent">
              <el-input v-model="form.netContent" placeholder="请输入净含量" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="保质期" prop="shelfLife">
              <el-date-picker value-format="yyyy-MM-dd HH:mm:ss" type="date" v-model="form.shelfLife" placeholder="请输入保质期" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="国产或进口" prop="domesticImported">
              <el-select v-model="form.domesticImported" style="width: 23%;">
                <el-option v-for="(item, index) in domesticImportedOptions"
                           :value="item.dictValue" :key="item.dictValue" :label="item.dictLabel"/>
              </el-select>
            </el-form-item>
          </el-col>

        </el-row>
        <el-row :gutter="10" v-show="false">
          <el-col :span="12">
            <el-form-item label="是否药品" prop="isDrug">
              <el-radio-group v-model="form.isDrug">
                <el-radio
                  v-for="item in isDrugOptions"
                  :key="item.dictValue"
                  :label="item.dictValue"
                >{{ item.dictLabel }}</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
        </el-row>
        <div v-if="form.isDrug === '1' ">
          <el-form-item label="药品展示图" prop="drugImage">
            <Material v-model="drugImageArr" type="image" :num="1" :width="150" :height="150" />
          </el-form-item>
          <div v-if="this.isMedicalMall">
          <el-row>
            <el-col :span="12">
              <el-form-item label="药品注册证书编号" prop="drugRegCertNo">
                <el-input v-model="form.drugRegCertNo" placeholder="请输入药品注册证书编号" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="通用名称" prop="commonName">
                <el-input v-model="form.commonName" placeholder="请输入通用名称" />
              </el-form-item>
            </el-col>
          </el-row>

          <el-row>
            <el-col :span="12">
              <el-form-item label="剂型" prop="dosageForm">
                <el-input v-model="form.dosageForm" placeholder="请输入剂型" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="单价" prop="unitPrice">
                <el-input v-model="form.unitPrice" placeholder="请输入单价" type="number" />
              </el-form-item>
            </el-col>
          </el-row>

          <el-row>
            <el-col :span="12">
              <el-form-item label="批号" prop="batchNumber">
                <el-input v-model="form.batchNumber" placeholder="请输入批号" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="规格" prop="prescribeSpec">
                <el-input v-model="form.prescribeSpec" placeholder="请输入规格" />
              </el-form-item>
            </el-col>
          </el-row>

          <el-row>
            <el-col :span="12">
              <el-form-item label="上市许可持有人" prop="mah">
                <el-input v-model="form.mah" placeholder="请输入上市许可持有人" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="持有人地址" prop="mahAddress">
                <el-input v-model="form.mahAddress" placeholder="请输入上市许可持有人地址" />
              </el-form-item>
            </el-col>
          </el-row>

          <el-row>
            <el-col :span="12">
              <el-form-item label="生产企业" prop="manufacturer">
                <el-input v-model="form.manufacturer" placeholder="请输入生产企业" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="企业地址" prop="manufacturerAddress">
                <el-input v-model="form.manufacturerAddress" placeholder="请输入生产企业地址" />
              </el-form-item>
            </el-col>
          </el-row>

          <el-form-item label="功能主治" prop="indications">
            <el-input v-model="form.indications" type="textarea" placeholder="请输入功能主治" />
          </el-form-item>

          <el-form-item label="用法用量" prop="dosage">
            <el-input v-model="form.dosage" type="textarea" placeholder="请输入用法用量" />
          </el-form-item>

          <el-form-item label="不良反应" prop="adverseReactions">
            <el-input v-model="form.adverseReactions" type="textarea" placeholder="请输入不良反应" />
          </el-form-item>

          <el-form-item label="禁忌" prop="contraindications">
            <el-input v-model="form.contraindications" type="textarea" placeholder="请输入禁忌" />
          </el-form-item>

          <el-form-item label="注意事项" prop="precautions">
            <el-input v-model="form.precautions" type="textarea" placeholder="请输入注意事项" />
          </el-form-item>
        </div>
        </div>
<!--        <el-row>-->
<!--          <el-col :span="24">-->
<!--            <el-form-item label="商品简介" prop="productInfo">-->
<!--              <el-input v-model="form.productInfo" type="textarea" :rows="2" placeholder="请输入商品简介" />-->
<!--            </el-form-item>-->
<!--          </el-col>-->
<!--        </el-row>-->
        <el-form-item label="标签类型" prop="tagType">
          <el-select v-model="tagType" multiple placeholder="请选择标签类型" clearable style="width: 100%" @change="onTagTypeChange">
            <el-option label="不分润商品" value="no_commission" />
            <el-option label="预售商品" value="presale" />
          </el-select>
        </el-form-item>
        <el-form-item label="最晚发货时间" prop="presaleShippingTime" v-if="tagType && tagType.includes('presale')">
          <el-date-picker
            v-model="presaleShippingTime"
            type="datetime"
            placeholder="请选择最晚发货时间"
            value-format="yyyy-MM-dd HH:mm:ss"
            style="width: 100%"
          />
        </el-form-item>
        <el-form-item label="商品图片" prop="image">
          <Material v-model="imageArr" type="image" :num="1" :width="150" :height="150" />
        </el-form-item>
        <!--        <el-form-item label="商品视频" prop="video">
                  <div>
                    <el-upload
                      ref="upload"
                      class="upload-demo"
                      :action="uploadUrl"
                      :on-success="handleSuccess"
                      :before-upload="beforeUpload"
                      :limit="1"
                      :accept="videoAccept"
                    >
                      <el-button size="small" type="primary">点击上传视频</el-button>
                    </el-upload>
                    <video v-if="form.video" :src="form.video" controls style="max-width: 300px; max-height: 300px; margin-top: 10px"></video>
                  </div>
                </el-form-item>-->
        <el-form-item label="轮播图" prop="sliderImage">
          <Material v-model="photoArr" type="image" :num="10" :width="150" :height="150" />
        </el-form-item>
        <el-row>
          <el-col :span="24">
            <el-form-item label="商品规格：" props="specType">
              <el-radio-group v-model="form.specType" >
                <el-radio :label="0" class="radio">单规格</el-radio>
                <el-radio :label="1">多规格</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <!-- 多规格添加-->
          <el-col :span="24" v-if="form.specType === 1" class="noForm" >
            <el-col :span="24">
              <el-form-item label="选择规格：" prop="">
                <div  class="acea-row row-middle">
                  <el-select v-model="form.selectRule" style="width: 23%;">
                    <el-option v-for="(item, index) in ruleList" :value="item.ruleName" :key="index">{{ item.ruleName }}</el-option>
                  </el-select>
                  <el-button style="margin-left:10px;" type="primary" class="mr20" @click="confirm">确认</el-button>
                </div>
              </el-form-item>
            </el-col>

            <el-col :span="24">
              <el-form-item v-if="attrs!=null&&attrs.length!==0">
                <div  v-for="(item, index) in attrs" :key="index">
                  <div class="acea-row row-middle"><span class="mr5">{{item.value}}</span>
                    <i class="el-icon-circle-close"  @click="handleRemoveRole(index)"></i>
                  </div>
                  <div class="rulesBox">
                    <el-tag type="dot" closable color="primary" v-for="(j, indexn) in item.detail" :key="indexn" :name="j" class="mr20" @close="handleRemove2(item.detail,indexn)">{{j}}</el-tag>
                    <el-input placeholder="请输入属性名称" v-model="item.detail.attrsVal"
                              style="width: 200px">
                      <el-button slot="append" type="primary" @click="createAttr(item.detail.attrsVal,index)">添加</el-button>
                    </el-input>
                  </div>
                </div>
              </el-form-item>
            </el-col>

            <el-col :span="24" v-if="createBnt">
              <el-form-item>
                <el-button type="primary" size="small" icon="md-add" @click="addBtn" class="mr15">添加新规格</el-button>
                <el-button type="success" size="small"  @click="generate">立即生成</el-button>
              </el-form-item>
            </el-col>
            <el-col :span="24" v-if="showIput">
              <el-col  :xl="6" :lg="9" :md="10" :sm="24" :xs="24" >
                <el-form-item label="规格：">
                  <el-input  placeholder="请输入规格" v-model="formDynamic.attrsName"  />
                </el-form-item>
              </el-col>
              <el-col  :xl="6" :lg="9" :md="10" :sm="24" :xs="24">
                <el-form-item label="规格值：">
                  <el-input v-model="formDynamic.attrsVal" placeholder="请输入规格值"  />
                </el-form-item>
              </el-col>
              <el-col :xl="6" :lg="5" :md="10" :sm="24" :xs="24" >
                <el-button type="primary"    @click="createAttrName">确定</el-button>
                <el-button type="danger" @click="closeAttrName" >取消</el-button>
              </el-col>
            </el-col>
            <!-- 多规格设置-->
            <el-col :xl="24" :lg="24" :md="24" :sm="24" :xs="24" v-if="manyFormValidate!=null&&manyFormValidate.length">
              <!-- 多规格表格-->
              <el-col :span="24">
                <el-form-item label="商品属性：" class="labeltop">
                  <el-button type="primary" size="mini" @click="batchSetOpen = true" style="margin-right: 10px;">批量设置</el-button>
                  <el-button type="warning" size="mini" @click="handleBatchClearStock">批量清空库存</el-button>

                  <el-table :data="manyFormValidate" size="small" style="width: 90%;" border>
                    <el-table-column type="myindex" v-for="(item,index) in form.header" :key="index"  :width="item.minWidth" :label="item.title" :property="item.slot" align="center">
                      <template slot-scope="scope">
                        <div v-if="scope.column.property == 'image'" align="center">
                          <single-img v-model="scope.row[scope.column.property]" type="image" :num="1" :width="60" :height="60" />
                        </div>
                        <div v-else-if="scope.column.property.indexOf('value') != -1" align="center">
                          {{ scope.row[scope.column.property] }}
                        </div>
                        <div v-else-if="scope.column.property == 'action'" align="center" >
                          <a @click="delAttrTable(scope.$index)" align="center">删除</a>
                        </div>
                        <div v-else align="center">
                          <el-input
                            v-model="scope.row[scope.column.property]"
                            align="center"
                            :placeholder="scope.column.property === 'barCode' ? '必填' : ''"
                          />
                        </div>
                      </template>
                    </el-table-column>
                  </el-table>

                </el-form-item>
              </el-col>
            </el-col>
          </el-col>

          <!-- 单规格表格-->
          <el-col :xl="23" :lg="24" :md="24" :sm="24" :xs="24" v-if="form.specType === 0" style="">
            <el-form-item >
              <el-table :data="oneFormValidate"  size="small" border>
                <el-table-column prop="image" label="图片" align="center">
                  <template slot-scope="scope">
                    <single-img v-model="scope.row.image" type="image" :num="1" :width="60" :height="60" />
                  </template>
                </el-table-column>
                <el-table-column prop="price" label="售价" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.price"/>
                  </template>
                </el-table-column>
                <el-table-column prop="agentPrice" label="代理价" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.agentPrice"/>
                  </template>
                </el-table-column>
                <el-table-column prop="cost" label="成本价" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.cost"/>
                  </template>
                </el-table-column>
                <el-table-column prop="otPrice" label="原价" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.otPrice"/>
                  </template>
                </el-table-column>
                <el-table-column prop="stock" label="库存" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.stock" maxlength="7"/>
                  </template>
                </el-table-column>
                <el-table-column prop="barCode" label="商品编号" width="130px" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.barCode" placeholder="必填" required/>
                  </template>
                </el-table-column>
                <el-table-column prop="barCode" label="组合编号" width="130px" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.groupBarCode"/>
                  </template>
                </el-table-column>
                <el-table-column prop="weight" label="重量（KG）" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.weight"/>
                  </template>
                </el-table-column>
                <el-table-column prop="volume" label="体积(m³)" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.volume"/>
                  </template>
                </el-table-column>
                <el-table-column prop="volume" label="所需积分" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.integral"/>
                  </template>
                </el-table-column>
                <el-table-column prop="volume" label="一级返佣" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.brokerage"/>
                  </template>
                </el-table-column>
                <el-table-column prop="volume" label="二级返佣" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.brokerageTwo"/>
                  </template>
                </el-table-column>
                <el-table-column prop="volume" label="三级返佣" align="center">
                  <template slot-scope="scope">
                    <el-input type="text" v-model="scope.row.brokerageThree"/>
                  </template>
                </el-table-column>
              </el-table>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="运费模板：" prop="tempId">
             <div class="acea-row">
                <el-select
                  v-model="form.tempId"
                  class="mr20"
                  filterable
                  placeholder="可以输入文字进行过滤匹配"
                >
                  <el-option
                    v-for="(item, index) in templateList"
                    :value="item.id"
                    :key="index"
                    :label="item.name"
                  >
                  </el-option>
                </el-select>
              </div>
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item label="商品详情" prop="description">
          <editor ref="myeditor"   @on-text-change="updateText" />
        </el-form-item>
        <el-row>
          <el-col :span="8">
            <el-form-item label="商品状态" prop="isShow">
              <el-radio-group v-model="form.isShow">
                <el-radio :label="item.dictValue" v-for="item in isShowOptions" >{{item.dictLabel}}</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="是否热卖" prop="isHot">
              <el-radio-group v-model="form.isHot">
                <el-radio :label="item.dictValue" v-for="item in isHotOptions" >{{item.dictLabel}}</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="猜你喜欢" prop="isGood">
              <el-radio-group v-model="form.isGood">
                <el-radio :label="item.dictValue" v-for="item in isGoodOptions" >{{item.dictLabel}}</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="8">
            <el-form-item label="精品推荐" prop="isBest">
              <el-radio-group v-model="form.isBest">
                <el-radio :label="item.dictValue" v-for="item in isBestOptions" >{{item.dictLabel}}</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="新品首发" prop="isNew">
              <el-radio-group v-model="form.isNew">
                <el-radio :label="item.dictValue" v-for="item in isNewOptions" >{{item.dictLabel}}</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="返还积分">
              <el-input-number  v-model="form.giveIntegral" :min="0" placeholder="请输入积分" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="8">
            <el-form-item label="商城展示" prop="isDisplay">
              <el-radio-group v-model="form.isDisplay">
                <el-radio :label="item.dictValue" v-for="item in isDisplayOptions" >{{item.dictLabel}}</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="8">

            <el-form-item label="排序" prop="sort">
              <el-input-number :min="0"  v-model="form.sort" placeholder="请输入排序" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="销量" prop="sales">
              <el-input-number :min="0"  v-model="form.sales" placeholder="请输入销量" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="限购数量" prop="purchaseLimit">
              <el-input-number
                :min="0"
                v-model="form.purchaseLimit"
                placeholder="请输入限购数量"
                :controls="true"
                @input="handlePurchaseLimitInput"
              />
            </el-form-item>
          </el-col>

        </el-row>
        <el-row>
          <el-col :span="8">
            <el-form-item label="单次购买数量" prop="singlePurchaseLimit">
              <el-input-number
                :min="0"
                v-model="form.singlePurchaseLimit"
                placeholder="单次下单最多件数，0不限"
                :controls="true"
                @input="handleSinglePurchaseLimitInput"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item label="推广分类" prop="tuiCateId">
          <el-select style="width: 240px" v-model="form.tuiCateId" placeholder="请选择推广分类" clearable size="small" >
            <el-option
              v-for="item in productTuiCateOptions"
              :key="item.dictValue"
              :label="item.dictLabel"
              :value="item.dictValue"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="商品类型" prop="productType">
          <el-select style="width: 240px" v-model="form.productType" placeholder="请选择商品类型" clearable size="small">
            <el-option
              v-for="item in productTypeOptions"
              :key="item.dictValue"
              :label="item.dictLabel"
              :value="item.dictValue"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="所属公司">
          <div class="form-company-select">
            <el-select
              class="company-select-input"
              style="width: 240px"
              v-model="form.companyIds"
              multiple
              placeholder="请选择企业"
              clearable
              size="small"
            >
              <div style="padding: 0 20px; display: flex; justify-content: space-between; line-height: 34px;">
                <el-button type="text" size="mini" @click="form.companyIds = companyOptions.map(item => item.companyId)">全选</el-button>
                <el-button type="text" size="mini" @click="form.companyIds = companyOptions.map(item => item.companyId).filter(id => !form.companyIds.includes(id))">反选</el-button>
                <el-button type="text" size="mini" @click="form.companyIds = []">清空</el-button>
              </div>
              <el-option
                v-for="item in companyOptions"
                :key="item.companyId"
                :label="item.companyName"
                :value="item.companyId"
              />
            </el-select>
            <div v-if="selectedCompanyList.length" class="selected-company-list">
              <template v-if="selectedCompanyList.length <= 5 || formCompanyIdsExpanded">
                <el-tag
                  v-for="item in selectedCompanyList"
                  :key="item.companyId"
                  closable
                  size="mini"
                  class="selected-company-tag"
                  @close="removeFormCompanyId(item.companyId)"
                >{{ item.companyName }}</el-tag>
              </template>
              <div v-else class="company-fold-bar">
                <span class="company-fold-summary">已选择 {{ selectedCompanyList.length }} 个公司</span>
              </div>
              <el-button
                v-if="selectedCompanyList.length > 5"
                type="text"
                size="mini"
                @click="formCompanyIdsExpanded = !formCompanyIdsExpanded"
              >{{ formCompanyIdsExpanded ? '收起' : '展开' }}</el-button>
            </div>
          </div>
        </el-form-item>
        <el-form-item label="所属店铺" prop="storeId" v-if="this.isStores">
          <el-select style="width: 240px" v-model="form.storeId" placeholder="请选择店铺" clearable size="small" >
            <el-option
              v-for="item in storeOptions"
              :key="item.storeId"
              :label="item.storeName"
              :value="item.storeId"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="退货地址" prop="returnAddress">
          <el-input v-model="form.returnAddress" type="textarea" :rows="1" placeholder="请输入退货地址" />
        </el-form-item>
        <el-form-item label="发货人手机号" prop="senderPhones">
          <div class="sender-phone-wrap">
            <el-tag
              v-for="(phone, index) in senderPhoneList"
              :key="phone + '-' + index"
              closable
              @close="removeSenderPhone(index)"
              style="margin-right: 8px; margin-bottom: 8px;"
            >{{ phone }}</el-tag>
            <template v-if="senderPhoneList.length < 3">
              <el-input
                v-model="senderPhoneInput"
                placeholder="请输入手机号"
                maxlength="11"
                size="small"
                style="width: 180px; margin-right: 8px;"
                @keyup.enter.native="addSenderPhone"
              />
              <el-button type="primary" size="small" @click="addSenderPhone">添加</el-button>
            </template>
            <span v-else class="text-muted">最多添加3个手机号</span>
          </div>
        </el-form-item>
        <el-form-item label="国药准字" v-if="form.productType==2" prop="prescribeCode">
          <el-input v-model="form.prescribeCode" placeholder="请输入国药准字" />
        </el-form-item>
        <el-form-item label="规格" v-if="form.productType==2" prop="prescribeSpec">
          <el-input v-model="form.prescribeSpec" placeholder="请输入规格" />
        </el-form-item>
        <el-form-item label="生产厂家" v-if="form.productType==2" prop="prescribeFactory">
          <el-input v-model="form.prescribeFactory" placeholder="请输入生产厂家" />
        </el-form-item>
        <el-form-item label="处方名" v-if="form.productType==2" prop="prescribeName">
          <el-input v-model="form.prescribeName" placeholder="请输入处方名" />
        </el-form-item>
        <el-form-item label="用户端分类(多选)" prop="userEndCategoryIds">
          <div class="quick-select-row">
            <el-button type="text" size="small" @click="selectAllUserEndCategoryByPosition(1)">全选金刚区</el-button>
            <el-button type="text" size="small" @click="selectAllUserEndCategoryByPosition(2)">全选瀑布流</el-button>
          </div>
          <div class="scroll-select-wrap">
            <div
              class="scroll-box scroll-box-category"
              ref="userEndCategoryScroll"
              @scroll="onUserEndCategoryScroll"
              style="overflow-y: auto; max-height: 200px;"
            >
              <el-checkbox-group v-model="form.userEndCategoryIds" :key="'uec-' + (userEndCategoryList.length ? 'ready' : 'empty')">
                <div class="scroll-options">
                  <el-checkbox
                    v-for="c in userEndCategoryList"
                    :key="'c'+c.id"
                    :label="Number(c.id)"
                    border
                    size="small"
                    class="scroll-option-item"
                  >
                    {{ c.categoryName }}（{{ c.position === 1 ? '金刚区' : '瀑布流' }}）
                  </el-checkbox>
                </div>
              </el-checkbox-group>
              <div v-if="userEndCategoryLoading" class="scroll-loading">加载中...</div>
              <div v-else-if="userEndCategoryList.length >= userEndCategoryTotal && userEndCategoryTotal > 0" class="scroll-end">已加载全部</div>
              <div v-else-if="userEndCategoryList.length > 0 && userEndCategoryList.length < userEndCategoryTotal" class="scroll-more" @click="loadUserEndCategoryPage(true)">
                <span>点击加载更多</span>
              </div>
            </div>
          </div>
        </el-form-item>
        <el-form-item label="商品标签(最多3个)" prop="tagIds">
          <div class="scroll-select-wrap">
            <div
              class="scroll-box scroll-box-tag"
              ref="tagScroll"
              @scroll="onTagScroll"
              style="overflow-y: auto; max-height: 200px;"
            >
              <el-checkbox-group v-model="form.tagIds" @change="onTagIdsChange" :key="'tag-' + (tagList.length ? 'ready' : 'empty')">
                <div class="scroll-options">
                  <el-checkbox
                    v-for="t in tagList"
                    :key="'t'+t.id"
                    :label="Number(t.id)"
                    :disabled="isTagDisabled(Number(t.id))"
                    border
                    size="small"
                    class="scroll-option-item"
                  >
                    {{ t.tagName }}
                  </el-checkbox>
                </div>
              </el-checkbox-group>
              <div v-if="tagLoading" class="scroll-loading">加载中...</div>
              <div v-else-if="tagList.length >= tagTotal && tagTotal > 0" class="scroll-end">已加载全部</div>
              <div v-else-if="tagList.length > 0 && tagList.length < tagTotal" class="scroll-more" @click="loadTagPage(true)">
                <span>点击加载更多</span>
              </div>
            </div>
          </div>
          <span v-if="form.tagIds && form.tagIds.length > 3" class="text-danger">最多选择3个</span>
        </el-form-item>
      </el-form>

      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
      <el-upload
        ref="upload"
        :limit="1"
        accept=".xlsx, .xls"
        :headers="upload.headers"
        :action="upload.url + '?updateSupport=' + upload.updateSupport"
        :disabled="upload.isUploading"
        :on-progress="handleFileUploadProgress"
        :on-success="handleFileSuccess"
        :auto-upload="false"
        drag
      >
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将文件拖到此处，或<em>点击上传</em></div>
        <div class="el-upload__tip text-center" slot="tip">
          <div class="el-upload__tip" slot="tip">
            <!--     <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的数据 -->
          </div>
          <span>仅允许导入xls、xlsx格式文件。</span>
          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
        </div>
      </el-upload>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitFileForm">确 定</el-button>
        <el-button @click="upload.open = false">取 消</el-button>
      </div>
    </el-dialog>

    <!-- 批量设置弹窗 -->
    <el-dialog title="批量设置" :visible.sync="batchSetOpen" width="400px" append-to-body>
      <el-form :model="batchSetForm" label-width="100px">
        <el-form-item label="价格">
          <el-input v-model="batchSetForm.price" placeholder="不填则不修改" />
        </el-form-item>
        <el-form-item label="增减库存">
          <el-input v-model="batchSetForm.stock" placeholder="不填则不修改" />
        </el-form-item>
        <el-form-item label="成本价">
          <el-input v-model="batchSetForm.cost" placeholder="不填则不修改" />
        </el-form-item>
        <el-form-item label="规格编码">
          <el-input v-model="batchSetForm.barCode" placeholder="不填则不修改" />
        </el-form-item>
        <el-form-item label="重量(kg)">
          <el-input v-model="batchSetForm.weight" placeholder="不填则不修改" />
        </el-form-item>
        <el-form-item label="体积(m³)">
          <el-input v-model="batchSetForm.volume" placeholder="不填则不修改" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="handleBatchSet">确 定</el-button>
        <el-button @click="batchSetOpen = false">取 消</el-button>
      </div>
    </el-dialog>

  </div>
</template>

<script>
import { listUserEndCategoryForProduct, listUserEndCategory } from "@/api/hisStore/userEndCategory";
import { listStoreProductTag } from "@/api/hisStore/storeProductTag";
import {
  genFormatAttr,
  listStoreProduct,
  getStoreProduct,
  delStoreProduct,
  copyStoreProduct,
  addOrEdit,
  exportStoreProduct,
  importTemplate,
  bulkCopy,bulkUpdate
} from "@/api/hisStore/storeProduct";
import { getAllStoreProductCategory } from "@/api/hisStore/storeProductCategory";
import { getAllStoreProductRule } from "@/api/hisStore/storeProductRule";
import { getAllShippingTemplates } from "@/api/hisStore/shippingTemplates";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import Editor from '@/components/Editor/wangZm';
import Material from '@/components/Material'
import singleImg from '@/components/Material/single'
import { getCompanyList } from "@/api/company/company";
import { listStore } from '@/api/hisStore/store'
export default {
  name: "HisStoreProduct",
  components: {
    Treeselect,
    Editor,
    Material,
    singleImg,
  },
  watch: {
    imageArr: function(val) {
      this.form.image = val.join(',')
    },
    photoArr: function(val) {
      this.form.sliderImage = val.join(',')
    },
    drugImageArr: function(val) {
      this.form.drugImage = val.join(',');
    }
  },
  data() {
    return {
      isMedicalMall: this.$store.state.user.medicalMallConfig.medicalMall,
      // isStores: this.$store.state.user.medicalMallConfig.stores,
      isStores: true,
      companyId: null,
      storeId: null,
      isAudit: null,
      uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
      //videoAccept:"video/*",
      upload: {
        // 是否显示弹出层
        open: false,
        // 弹出层标题
        title: "",
        // 是否禁用上传
        isUploading: false,
        // 是否更新已经存在的用户数据
        updateSupport: 0,
        // 设置上传的请求头部
        headers: { Authorization: "Bearer " + getToken() },
        // 上传的地址
        url: process.env.VUE_APP_BASE_API + "/store/storeProduct/importData"
      },
      // 添加药品相关字段
      isDrugOptions: [
        { dictValue: "0", dictLabel: "否" },
        { dictValue: "1", dictLabel: "是" }
      ],
      // 添加药品相关字段
      domesticImportedOptions: [
        { dictValue: "0", dictLabel: "国产" },
        { dictValue: "1", dictLabel: "进口" }
      ],

      // 药品展示图
      drugImageArr: [],

      productTuiCateOptions:[],
      showIput: false,
      createBnt:true,
      // 规格数据
      formDynamic: {
        attrsName: '',
        attrsVal: ''
      },
      open1: false,
      form1: {
        isShow: '',
        isDisplay: '',
        companyId: null
      },
      isBtn: false,
      columns: [],
      attrs:[],
      templateList:[],
      ruleList:[],
      // 多规格表格data
      manyFormValidate: [],
      // 批量设置弹窗
      batchSetOpen: false,
      batchSetForm: {
        price: '',
        stock: '',
        cost: '',
        barCode: '',
        weight: '',
        volume: ''
      },
      // 单规格表格data
      oneFormValidate: [
        {
          image: '',
          price: 0,
          cost: 0,
          agentPrice: 0,
          otPrice: 0,
          stock: 0,
          barCode: '',
          weight: 0,
          volume: 0,
          integral: 0
        }
      ],
      photoArr:[],
      imageArr:[],
      senderPhoneList: [],
      senderPhoneInput: '',
      tagType: [],
      presaleShippingTime: null,
      activeName:"1",
      productTypeOptions:[],
      isDisplayOptions:[],
      isGoodOptions:[],
      isNewOptions:[],
      isBestOptions:[],
      isHotOptions:[],
      isShowOptions:[],
      categoryOptions:[],
      // 企业列表
      companyOptions:[],
      storeOptions:[],
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: false,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      isFullscreen: false,
      // 总条数
      total: 0,
      // 商品表格数据
      storeProductList: [],
      expandedCompanyRows: {},
      formCompanyIdsExpanded: false,
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,

      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        productName: null,
        productType: null,
        productTypes: [],
        isShow: "1",
        barCode:null,
        companyIds: null,
        storeIds: null,
        drugRegCertNo: null,
        commonName: null,
        dosageForm: null,
        unitPrice: null,
        batchNumber: null,
        mah: null,
        mahAddress: null,
        manufacturer: null,
        manufacturerAddress: null,
        indications: null,
        dosage: null,
        adverseReactions: null,
        contraindications: null,
        precautions: null
      },
      // 表单参数
      form: {},
      userEndCategoryList: [],
      userEndCategoryPageNum: 1,
      userEndCategoryTotal: 0,
      userEndCategoryLoading: false,
      tagList: [],
      tagPageNum: 1,
      tagTotal: 0,
      tagLoading: false,
      storeForm: {isAudit:1,status:1},
      // 表单校验
      rules: {
        image: [
          { required: true, message: "商品图片不能为空", trigger: "blur" }
        ],
        sliderImage: [
          { required: true, message: "轮播图不能为空", trigger: "blur" }
        ],
        productName: [
          { required: true, message: "商品名称不能为空", trigger: "blur" }
        ],
        // productInfo: [
        //   { required: true, message: "商品简介不能为空", trigger: "blur" }
        // ],
        // unitName: [
        //   { required: true, message: "单位名不能为空", trigger: "blur" }
        // ],
        // keyword: [
        //   { required: true, message: "关键字不能为空", trigger: "blur" }
        // ],
        cateId: [
          { required: true, message: "分类id不能为空", trigger: "blur" }
        ],
        price: [
          { required: true, message: "商品价格不能为空", trigger: "blur" }
        ],
        prescribeCode: [
          { required: true, message: "国药准字不能为空", trigger: "blur" }
        ],
        prescribeSpec: [
          { required: true, message: "规格不能为空", trigger: "blur" }
        ],
        prescribeFactory: [
          { required: true, message: "生产厂家不能为空", trigger: "blur" }
        ],
        prescribeName: [
          { required: true, message: "处方药不能为空", trigger: "blur" }
        ],
        companyIds: [
          { required: true, message: "销售公司不能为空", trigger: "blur" }
        ],
        // 药品相关字段校验（仅在是药品时必填）
        drugImage: [
          { required: true, message: "药品展示图不能为空", trigger: "blur" }
        ],
        drugRegCertNo: [
          { required: true, message: "药品注册证书编号不能为空", trigger: "blur" }
        ],
        commonName: [
          { required: true, message: "通用名称不能为空", trigger: "blur" }
        ],
        dosageForm: [
          { required: true, message: "剂型不能为空", trigger: "blur" }
        ],
        unitPrice: [
          { required: true, message: "单价不能为空", trigger: "blur" }
        ],
        batchNumber: [
          { required: true, message: "批号不能为空", trigger: "blur" }
        ],
        mah: [
          { required: true, message: "上市许可持有人不能为空", trigger: "blur" }
        ],
        mahAddress: [
          { required: true, message: "上市许可持有人地址不能为空", trigger: "blur" }
        ],
        // manufacturer: [
        //   { required: true, message: "生产企业不能为空", trigger: "blur" }
        // ],
        manufacturerAddress: [
          { required: true, message: "生产企业地址不能为空", trigger: "blur" }
        ],
        indications: [
          { required: true, message: "功能主治不能为空", trigger: "blur" }
        ],
        dosage: [
          { required: true, message: "用法用量不能为空", trigger: "blur" }
        ],
        adverseReactions: [
          { required: true, message: "不良反应不能为空", trigger: "blur" }
        ],
        contraindications: [
          { required: true, message: "禁忌不能为空", trigger: "blur" }
        ],
        precautions: [
          { required: true, message: "注意事项不能为空", trigger: "blur" }
        ],
        // storeId :[
        //   { required: true, message: "所属店铺不能为空", trigger: "blur"}
        // ],
      }
    };
  },
  created() {
    this.getDicts("store_product_tui_cate").then((response) => {
      this.productTuiCateOptions = response.data;
    });
    this.getDicts("store_product_enable").then((response) => {
      this.isNewOptions = response.data;
      this.isBestOptions = response.data;
      this.isHotOptions = response.data;
      this.isGoodOptions=response.data;
      this.isDisplayOptions=response.data;
    });
    this.getDicts("store_product_type").then((response) => {
      this.productTypeOptions = response.data;
      if(!this.isMedicalMall &&
      this.productTypeOptions.length === 4){
        //删除后两项
        this.productTypeOptions.splice(2,2);
      }
    });
    this.getDicts("store_product_is_show").then((response) => {
      this.isShowOptions = response.data;
    });
    getAllShippingTemplates().then(response => {
      this.templateList =response.data;
    });
    getAllStoreProductRule().then(response => {
      this.ruleList =response.data;
    });
    getCompanyList().then(response => {
      this.companyOptions = response.data;
    });
    listStore(this.storeForm).then(response => {
      this.storeOptions = response.rows;
    });
    this.getTreeselect();
    this.getList();
  },
  computed: {
    selectedCompanyList() {
      const ids = this.form.companyIds || [];
      if (!ids.length) {
        return [];
      }
      return ids.map(id => {
        const company = this.companyOptions.find(item => item.companyId === id);
        return {
          companyId: id,
          companyName: company ? company.companyName : id
        };
      });
    }
  },
  methods: {
    getCompanyNameList(companyName) {
      if (!companyName) {
        return [];
      }
      return String(companyName).split(/[,，]/).map(s => s.trim()).filter(Boolean);
    },
    getDisplayCompanyNameList(row) {
      const list = this.getCompanyNameList(row.companyName);
      if (list.length <= 3 || this.isCompanyNameExpanded(row)) {
        return list;
      }
      return list.slice(0, 3);
    },
    isCompanyNameExpanded(row) {
      return !!this.expandedCompanyRows[row.productId];
    },
    toggleCompanyNameExpand(row) {
      const key = row.productId;
      this.$set(this.expandedCompanyRows, key, !this.expandedCompanyRows[key]);
    },
    removeFormCompanyId(companyId) {
      this.form.companyIds = (this.form.companyIds || []).filter(id => id !== companyId);
      if ((this.form.companyIds || []).length <= 5) {
        this.formCompanyIdsExpanded = false;
      }
    },
    getStatusText(row) {
      if (row.isAudit == 0) {
        return '待审核';
      }
      const option = this.isShowOptions.find(item => item.dictValue == row.isShow);
      return option ? option.dictLabel : '未知状态';
    },

    getStatusType(row) {
      if (row.isAudit == 0) {
        return 'warning';
      }
      // 根据你的业务逻辑返回不同的类型，如：success, danger, info等
      return row.isShow == 1 ? 'success' : 'info';
    },
    cancel1(){
      this.open1 = false;
      this.resetForm1();
    },
    resetForm1() {
      this.form1 = {
        isShow: '',
        isDisplay: '',
        companyId: null
      };
    },
    handleBulkUpdate() {
      if (!this.ids || this.ids.length === 0) {
        this.$message.warning("请先选择要修改的商品");
        return;
      }
      this.resetForm1();
      this.open1 = true;
    },
    handleBulkCompanySelectAll() {
      this.form1.companyId = this.companyOptions.map(item => item.companyId);
    },
    handleBulkCompanyInvert() {
      const current = this.form1.companyId || [];
      this.form1.companyId = this.companyOptions
        .map(item => item.companyId)
        .filter(id => !current.includes(id));
    },
    handleBulkCompanyClear() {
      this.form1.companyId = [];
    },
    handleBulkCompanySkip() {
      this.form1.companyId = null;
    },
    submitForm1(){
      const param = {
        productId: this.ids
      };
      if (this.form1.isShow !== null && this.form1.isShow !== undefined && this.form1.isShow !== '') {
        param.goodsStatus = Number(this.form1.isShow);
      }
      if (this.form1.isDisplay !== null && this.form1.isDisplay !== undefined && this.form1.isDisplay !== '') {
        param.goodsIsShow = Number(this.form1.isDisplay);
      }
      if (this.form1.companyId !== null && this.form1.companyId !== undefined) {
        param.updateCompanyIds = true;
        param.companyIds = this.form1.companyId.length > 0 ? this.form1.companyId.join(',') : '';
      }
      if (param.goodsStatus == null && param.goodsIsShow == null && !param.updateCompanyIds) {
        this.$message.warning("请至少修改一项");
        return;
      }
      bulkUpdate(param).then(res => {
        if (res.code === 200) {
          this.msgSuccess("批量修改成功");
          this.open1 = false;
          this.resetForm1();
          this.getList();
        }
      });
    },
    handleFullScreen(){
      this.isFullscreen = !this.isFullscreen;
    },
    handleSuccess(response, file) {
      // 上传成功后的回调函数
      this.myloading.close();
      //this.form.video = response.url;
      this.$refs.upload.clearFiles();
    },
    beforeUpload(file) {
      // 上传前的钩子函数，可以在这里对文件进行处理
      // 返回 false 则取消上传

      // 例如限制文件大小
      const isLt2M = file.size / 1024 / 1024 < 200;
      if (!isLt2M) {
        this.$message.error('上传视频文件大小不能超过 200MB!');
        return false;
      }
      this.myloading = this.$loading({
        lock: true,
        text: '上传中',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      });

    },
    // 提交上传文件
    submitFileForm() {
      this.$refs.upload.submit();
    },
    // 文件上传中处理
    handleFileUploadProgress(event, file, fileList) {
      this.upload.isUploading = true;
    },
    // 文件上传成功处理
    handleFileSuccess(response, file, fileList) {
      this.upload.open = false;
      this.upload.isUploading = false;
      this.$refs.upload.clearFiles();
      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
      this.getList();
    },
    handleImport() {
      this.upload.title = "商品导入";
      this.upload.open = true;
    },
    importTemplate() {
      importTemplate().then(response => {
        this.download(response.msg);
      });
    },
    // 删除表格中的属性
    delAttrTable (index) {
      this.manyFormValidate.splice(index, 1);
    },
    // 批量设置
    handleBatchSet() {
      const form = this.batchSetForm;
      const fields = ['price', 'stock', 'cost', 'barCode', 'weight', 'volume'];
      let hasValue = false;
      for (const key of fields) {
        if (form[key] !== '' && form[key] !== null && form[key] !== undefined) {
          hasValue = true;
          break;
        }
      }
      if (!hasValue) {
        this.$message.warning('请至少填写一项数据');
        return;
      }
      this.manyFormValidate.forEach(row => {
        fields.forEach(key => {
          if (form[key] !== '' && form[key] !== null && form[key] !== undefined) {
            this.$set(row, key, form[key]);
          }
        });
      });
      this.batchSetOpen = false;
      this.batchSetForm = { price: '', stock: '', cost: '', barCode: '', weight: '', volume: '' };
      this.$message.success('批量设置成功');
    },
    // 批量清空库存
    handleBatchClearStock() {
      if (this.manyFormValidate.length === 0) {
        this.$message.warning('没有可操作的规格数据');
        return;
      }
      this.$confirm('是否确认将所有规格的库存清零?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.manyFormValidate.forEach(row => {
          this.$set(row, 'stock', 0);
        });
        this.$message.success('库存已全部清零');
      }).catch(() => {});
    },
    addBtn () {
      this.clearAttr();
      this.createBnt = false;
      this.showIput = true;
    },
    //生成SKU
    generate () {
      var prodoct = this.form.productId?this.form.productId:0;
      genFormatAttr(prodoct, { attrs: this.attrs }).then(res => {
        if(this.form.specType === 0){
          this.oneFormValidate = res.value;
          this.form.header = res.header;
          let header = res.header;
          header.pop();
        }else if(this.form.specType === 1) {
          this.manyFormValidate = res.value;
          let headerdel = {
            title: '操作',
            slot: 'action',
            fixed: 'right',
            width: 220
          };
          res.header.push(headerdel);
          this.form.header = res.header;
          let header = res.header;
          header.pop();
          // this.manyFormValidate.map((item) => {
          //   if(this.imageArr.length>0){
          //     item.image = this.imageArr[0]
          //   }
          // });
        }

      }).catch(res => {
      })
    },
    // 取消添加新规格
    closeAttrName () {
      this.showIput = false;
      this.createBnt = true;
    },
    clearAttr () {
      this.formDynamic.attrsName = '';
      this.formDynamic.attrsVal = '';
    },
    // 处理限购数量输入
    handlePurchaseLimitInput(value) {
      // 只允许输入纯数字
      if (value !== null && value !== undefined && value !== '') {
        // 如果不是数字,设置为null
        if (isNaN(value) || value < 0) {
          this.$nextTick(() => {
            this.form.purchaseLimit = null;
          });
        } else {
          // 确保是整数
          this.form.purchaseLimit = Math.floor(Number(value));
        }
      }
    },
    handleSinglePurchaseLimitInput(value) {
      if (value !== null && value !== undefined && value !== '') {
        if (isNaN(value) || value < 0) {
          this.$nextTick(() => {
            this.form.singlePurchaseLimit = null;
          });
        } else {
          this.form.singlePurchaseLimit = Math.floor(Number(value));
        }
      }
    },
    // 删除规格
    handleRemoveRole (index) {
      this.attrs.splice(index, 1);
      this.manyFormValidate.splice(index, 1);
    },
    // 删除属性
    handleRemove2 (item, index) {
      item.splice(index, 1);
    },
    // 添加规则名称
    createAttrName () {
      if (this.formDynamic.attrsName && this.formDynamic.attrsVal) {
        let data = {
          value: this.formDynamic.attrsName,
          detail: [
            this.formDynamic.attrsVal
          ]
        };
        this.attrs.push(data);
        var hash = {};
        this.attrs = this.attrs.reduce(function (item, next) {
          hash[next.value] ? '' : hash[next.value] = true && item.push(next);
          return item
        }, [])
        this.clearAttr();
        this.showIput = false;
        this.createBnt = true;
      } else {
        this.$message.warning('请添加完整的规格！');
      }
    },
    // 添加属性
    createAttr (num, idx) {
      if (num) {
        this.attrs[idx].detail.push(num);
        var hash = {};
        this.attrs[idx].detail = this.attrs[idx].detail.reduce(function (item, next) {
          hash[next] ? '' : hash[next] = true && item.push(next);
          return item
        }, [])
      } else {
        this.$message.warning('请添加属性！');
      }
    },
    confirm () {
      let that = this;
      that.createBnt = true;
      if (that.form.selectRule==null||that.form.selectRule.trim().length <= 0) {
        return this.$message({
          message:'请选择属性',
          type: 'error'
        });
      }
      that.ruleList.forEach(function (item, index) {
        if (item.ruleName === that.form.selectRule) {
          that.attrs =JSON.parse( item.ruleValue);

        }
      });

    },
    updateText(text){
      this.form.description=text
    },
    handleClick(tab, event) {
      this.queryParams.isShow=tab.name;
      this.getList();
    },
    /** 转换商品分类数据结构 */
    normalizer(node) {
      if (node.children && !node.children.length) {
        delete node.children;
      }
      return {
        id: node.cateId,
        label: node.cateName,
        children: node.children
      };
    },
    getTreeselect() {
      getAllStoreProductCategory().then(response => {
        this.categoryOptions = [];
        debugger;
        const data = this.handleTree(response.data, "cateId", "pid");
        this.categoryOptions=data;
      });
    },
    /** 查询商品列表 */
    getList() {
      this.loading = true;
      listStoreProduct(this.queryParams).then(response => {
        this.storeProductList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    loadUserEndCategoryForProduct(storeId) {
      this.userEndCategoryPageNum = 1;
      this.userEndCategoryList = [];
      this.userEndCategoryTotal = 0;
      return this.loadUserEndCategoryPage(false);
    },
    loadUserEndCategoryPage(append) {
      if (this.userEndCategoryLoading) return Promise.resolve();
      if (append && this.userEndCategoryList.length >= this.userEndCategoryTotal && this.userEndCategoryTotal > 0) return Promise.resolve();
      this.userEndCategoryLoading = true;
      const pageNum = append ? this.userEndCategoryPageNum : 1;
      return listUserEndCategory({ pageNum, pageSize: 10,status:1 }).then(response => {
        const rows = response.rows || [];
        this.userEndCategoryTotal = response.total || 0;
        if (append) {
          this.userEndCategoryList = this.userEndCategoryList.concat(rows);
          this.userEndCategoryPageNum = pageNum + 1;
        } else {
          this.userEndCategoryList = rows;
          this.userEndCategoryPageNum = 2;
        }
      }).finally(() => {
        this.userEndCategoryLoading = false;
      });
    },
    onUserEndCategoryScroll(e) {
      const el = e && e.target;
      if (!el) return;
      if (this.$refs.userEndCategoryScroll && el !== this.$refs.userEndCategoryScroll) return;
      const scrollTop = el.scrollTop;
      const scrollHeight = el.scrollHeight;
      const clientHeight = el.clientHeight;
      if (clientHeight + scrollTop >= scrollHeight - 10) {
        this.loadUserEndCategoryPage(true);
      }
    },
    selectAllUserEndCategoryByPosition(position) {
      const list = this.userEndCategoryList || [];
      const idsOfPosition = list.filter(c => c.position === position).map(c => Number(c.id)).filter(id => id !== 0 && !Number.isNaN(id));
      const current = this.form.userEndCategoryIds || [];
      const otherPositionIds = current.filter(id => {
        const c = list.find(x => Number(x.id) === Number(id));
        return c ? c.position !== position : true;
      });
      this.$set(this.form, 'userEndCategoryIds', [...new Set([...otherPositionIds, ...idsOfPosition])]);
    },
    loadTagPage(append) {
      if (this.tagLoading) return Promise.resolve();
      if (append && this.tagList.length >= this.tagTotal && this.tagTotal > 0) return Promise.resolve();
      this.tagLoading = true;
      const pageNum = append ? this.tagPageNum : 1;
      return listStoreProductTag({ pageNum, pageSize: 10,status:1 }).then(response => {
        const rows = response.rows || [];
        this.tagTotal = response.total || 0;
        if (append) {
          this.tagList = this.tagList.concat(rows);
          this.tagPageNum = pageNum + 1;
        } else {
          this.tagList = rows;
          this.tagPageNum = 2;
        }
      }).finally(() => {
        this.tagLoading = false;
      });
    },
    onTagScroll(e) {
      const el = e && e.target;
      if (!el) return;
      if (this.$refs.tagScroll && el !== this.$refs.tagScroll) return;
      const scrollTop = el.scrollTop;
      const scrollHeight = el.scrollHeight;
      const clientHeight = el.clientHeight;
      if (clientHeight + scrollTop >= scrollHeight - 10) {
        this.loadTagPage(true);
      }
    },
    onTagIdsChange(val) {
      if (val && val.length > 3) {
        this.$message.warning('商品标签最多选择3个');
        this.$set(this.form, 'tagIds', val.slice(0, 3));
      }
    },
    isTagDisabled(tagId) {
      const ids = this.form.tagIds || [];
      const n = Number(tagId);
      if (ids.some(id => Number(id) === n)) return false;
      return ids.length >= 3;
    },
    loadTagOptions() {
      this.tagPageNum = 1;
      this.tagList = [];
      this.tagTotal = 0;
      return this.loadTagPage(false);
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // 标签类型变更
    onTagTypeChange(val) {
      if (!val || !val.includes('presale')) {
        this.presaleShippingTime = null;
      }
    },
    // 表单重置
    reset() {
      this.form = {
        productId: null,
        image: null,
        video: null,
        sliderImage: null,
        productName: null,
        productInfo: null,
        keyword: null,
        barCode: null,
        cateId: null,
        price: null,
        vipPrice: null,
        otPrice: null,
        postage: null,
        unitName: null,
        sort: null,
        sales: null,
        stock: null,
        isShow: "0",
        isHot: "0",
        isBenefit: "0",
        isBest: "0",
        isNew: "0",
        description: null,
        createTime: null,
        updateTime: null,
        isPostage: null,
        foodProductionLicenseCode: null,
        brand: null,
        isDel: null,
        giveIntegral: null,
        cost: null,
        isGood: "0",
        browse: null,
        codePath: null,
        tempId: "",
        specType: 0,
        isIntegral: null,
        integral: null,
        productType: "1",
        prescribeCode: null,
        prescribeSpec: null,
        prescribeFactory: null,
        prescribeName: null,
        isDisplay:"1",
        companyIds:[],
        returnAddress: "", // 退货地址
        senderPhones: "", // 发货人手机号
        isDrug: "0", // 是否药品
        originPlace: "", // 原产地
        netContent: "", // 净含量
        shelfLife: "", // 有效日期
        domesticImported: "", // 国产或进口
        drugImage: null, // 药品展示图
        drugRegCertNo: null, // 药品注册证书编号
        commonName: null, // 通用名称
        dosageForm: null, // 剂型
        unitPrice: null, // 单价
        batchNumber: null, // 批号
        mah: null, // 上市许可持有人
        mahAddress: null, // 上市许可持有人地址
        manufacturer: null, // 生产企业
        manufacturerAddress: null, // 生产企业地址
        indications: null, // 功能主治
        dosage: null, // 用法用量
        adverseReactions: null, // 不良反应
        contraindications: null, // 禁忌
        precautions: null ,// 注意事项
        purchaseLimit: null, // 限购数量
        singlePurchaseLimit: null, // 单次购买数量上限
        userEndCategoryIds: [],
        tagIds: [],
        tagInfo: null // 标签信息
      };
      // 重置标签类型和预售发货时间
      this.tagType = [];
      this.presaleShippingTime = null;
      // 重置药品展示图
      this.drugImageArr = [];
      this.resetForm("form");
      this.oneFormValidate = [
        {
          image: '',
          price: 0,
          agentPrice: 0,
          cost: 0,
          otPrice: 0,
          stock: 0,
          barCode: '',
          weight: 0,
          volume: 0,
          integral: 0,
          brokerage:0,
          brokerageTwo:0
        }
      ]
      this.attrs=[];
      this.photoArr=[];
      this.imageArr=[];
      this.senderPhoneList = [];
      this.senderPhoneInput = '';
      this.formCompanyIdsExpanded = false;
    },
    parseSenderPhones(value) {
      if (!value) {
        return [];
      }
      return value.split(',').map(phone => phone.trim()).filter(phone => phone);
    },
    syncSenderPhonesToForm() {
      this.form.senderPhones = this.senderPhoneList.join(',');
    },
    addSenderPhone() {
      const phone = (this.senderPhoneInput || '').trim();
      if (!phone) {
        return this.$message.warning('请输入手机号');
      }
      if (!/^1\d{10}$/.test(phone)) {
        return this.$message.warning('请输入正确的11位手机号');
      }
      if (this.senderPhoneList.includes(phone)) {
        return this.$message.warning('手机号已存在');
      }
      if (this.senderPhoneList.length >= 3) {
        return this.$message.warning('最多添加3个手机号');
      }
      this.senderPhoneList.push(phone);
      this.senderPhoneInput = '';
      this.syncSenderPhonesToForm();
    },
    removeSenderPhone(index) {
      this.senderPhoneList.splice(index, 1);
      this.syncSenderPhonesToForm();
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.queryParams.companyIds = this.companyId +''
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      const showFlag = this.queryParams.isShow
      this.queryParams = {
        pageNum:1,
        pageSize:10,
        isShow:showFlag
      }
      this.companyId = '';
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.productId)
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      Promise.all([
        this.loadTagOptions(),
        this.loadUserEndCategoryForProduct(this.form.storeId)
      ]).then(() => {
        this.open = true;
        this.title = "添加商品";
        this.$nextTick(() => {
          if (this.$refs.myeditor) this.$refs.myeditor.setText("");
        });
      });
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      if (this.ids.length > 1) {
        this.handleBulkUpdate();
        return;
      }
      var that=this;
      this.reset();
      const productId = row.productId || this.ids
      getStoreProduct(productId).then(response => {
        this.form = response.data;
        this.form.isShow = response.data.isShow.toString();
        this.form.isHot = response.data.isHot.toString();
        this.form.isGood = response.data.isGood.toString();
        this.form.isBest = response.data.isBest.toString();
        this.form.isNew = response.data.isNew.toString();
        this.form.productType = response.data.productType.toString();
        this.form.isDisplay = response.data.isDisplay.toString();
        if(this.form.tuiCateId!=null){
          this.form.tuiCateId = response.data.tuiCateId.toString();
        }
        // this.form.isDrug = response.data.isDrug ? response.data.isDrug.toString() : "1";
        this.form.isDrug = response.data.isDrug === 0 ? "0" : (response.data.isDrug ? response.data.isDrug.toString() : "1");
        if (this.form.drugImage != null) {
          this.drugImageArr = this.form.drugImage.split(",");
        }
        this.senderPhoneList = this.parseSenderPhones(this.form.senderPhones);
        this.senderPhoneInput = '';

        //组装attrs数据
        if(response.attrs!=null){
          this.attrs=[];
          response.attrs.forEach(function (item, index) {
            var data={value:item.attrName,detail:item.attrValues.split(',')}
            that.attrs.push(data);
          });
        }
        // 组装companyIds
        if (response.data.companyIds != null && response.data.companyIds != undefined && response.data.companyIds.length > 0) {
          this.form.companyIds = response.data.companyIds.split(',').map(Number);
        }
        // 解析标签信息
        if (this.form.tagInfo) {
          try {
            const tagObj = JSON.parse(this.form.tagInfo);
            // type 兼容单值(旧)和数组(新)
            if (Array.isArray(tagObj.type)) {
              this.tagType = tagObj.type;
            } else if (tagObj.type) {
              this.tagType = [tagObj.type];
            } else {
              this.tagType = [];
            }
            this.presaleShippingTime = tagObj.shippingTime || null;
          } catch (e) {
            this.tagType = [];
            this.presaleShippingTime = null;
          }
        } else {
          this.tagType = [];
          this.presaleShippingTime = null;
        }
        this.$set(this.form, 'userEndCategoryIds', (response.userEndCategoryIds || []).map(id => Number(id)).filter(id => !Number.isNaN(id)));
        this.$set(this.form, 'tagIds', (response.tagIds || []).map(id => Number(id)).filter(id => !Number.isNaN(id)));
        Promise.all([
          this.loadTagOptions(),
          this.loadUserEndCategoryForProduct(this.form.storeId)
        ]).then(() => {
          this.open = true;
          this.title = "修改商品";
          this.$nextTick(() => {
            setTimeout(() => {
              if (this.$refs.myeditor) {
                if (this.form.description == null) {
                  this.$refs.myeditor.setText("");
                } else {
                  this.$refs.myeditor.setText(this.form.description);
                }
              }
            }, 200);
          });
        });
        setTimeout(() => {
          that.generate();
        }, 200);
        if(this.form.specType === 0){
          that.manyFormValidate = [];
        }else {
          that.createBnt = true;
          that.oneFormValidate = [
            {
              image: '',
              price: 0,
              agentPrice: 0,
              cost: 0,
              otPrice: 0,
              stock: 0,
              barCode: '',
              weight: 0,
              volume: 0,
              integral: 0,
              brokerage:0,
              brokerageTwo:0
            }
          ]
        }
        if(this.form.image!=null){
          this.imageArr=this.form.image.split(",");
        }
        if(this.form.sliderImage!=null){
          this.photoArr=this.form.sliderImage.split(",");
        }
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.tagIds && this.form.tagIds.length > 3) {
            return this.$message.warning('商品标签最多选择3个');
          }
          if(this.form.specType ===0 ){
            this.form.items = [];
            this.form.values = this.oneFormValidate;
            // 验证单规格商品编码必填
            if (!this.oneFormValidate || this.oneFormValidate.length === 0) {
              return this.$message.warning('请填写商品规格信息！');
            }
            for (let i = 0; i < this.oneFormValidate.length; i++) {
              if (!this.oneFormValidate[i].barCode || this.oneFormValidate[i].barCode.trim() === '') {
                return this.$message.warning('商品规格中的商品编号不能为空！');
              }
            }
          }else{
            this.form.items = this.attrs;
            this.form.values = this.manyFormValidate;
            // 验证多规格商品编码必填
            if(this.manyFormValidate.length===0){
              return this.$message.warning('请点击生成规格！');
            }
            for (let i = 0; i < this.manyFormValidate.length; i++) {
              if (!this.manyFormValidate[i].barCode || this.manyFormValidate[i].barCode.trim() === '') {
                return this.$message.warning('商品规格中的商品编号不能为空！');
              }
            }
          }
          // 组装companyIds
          if (this.form.companyIds != null && this.form.companyIds != undefined) {
            this.form.companyIds = this.form.companyIds.join(',');
          }
          // 组装标签信息 tagInfo
          if (this.tagType && this.tagType.length > 0) {
            const tagObj = { type: this.tagType };
            if (this.tagType.includes('presale') && this.presaleShippingTime) {
              tagObj.shippingTime = this.presaleShippingTime;
            }
            this.form.tagInfo = JSON.stringify(tagObj);
          } else {
            this.form.tagInfo = null;
          }
          this.syncSenderPhonesToForm();
          addOrEdit(this.form).then(response => {
            if (response.code === 200) {
              this.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            }
          }).catch(error => {
            this.$message.error('请求失败: ' + error.message)
          });
        }
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const productIds = row.productId || this.ids;
      this.$confirm('是否确认删除商品编号为"' + productIds + '"的数据项?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(function() {
        return delStoreProduct(productIds);
      }).then(() => {
        this.getList();
        this.msgSuccess("删除成功");
      }).catch(function() {});
    },
    /** 复制按钮操作 */
    handleCopy(row) {
      const productIds = row.productId || this.ids;
      this.$confirm('是否确认复制商品编号为"' + productIds + '"的数据项?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(function() {
        return copyStoreProduct(productIds);
      }).then(() => {
        this.getList();
        this.msgSuccess("复制成功");
      }).catch(function() {});
    },
    /** 复制按钮操作 */
    bulkCopy(row) {
      const productIds = row.productId || this.ids;
      this.$confirm('是否确认复制商品编号为"' + productIds + '"的数据项?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(function() {
        return bulkCopy(productIds);
      }).then(() => {
        this.getList();
        this.msgSuccess("复制成功");
      }).catch(function() {});
    },
    /** 导出按钮操作 */
    handleExport() {
      const queryParams = this.queryParams;
      this.$confirm('是否确认导出所有商品数据项?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(function() {
        return exportStoreProduct(queryParams);
      }).then(response => {
        this.download(response.msg);
      }).catch(function() {});
    }
  }
};
</script>
<style scoped>
.user-end-category-wrap .category-group { margin-bottom: 12px; }
.user-end-category-wrap .select-all-label { cursor: pointer; color: #409EFF; margin-right: 12px; }
.user-end-category-wrap .category-children { display: inline-block; margin-top: 6px; }
.text-danger { color: #F56C6C; font-size: 12px; }
.scroll-select-wrap { width: 100%; }
.quick-select-row { margin-bottom: 6px; }
.quick-select-row .el-button { padding: 0 8px; }
.scroll-box { max-height: 200px; overflow-y: auto; border: 1px solid #DCDFE6; border-radius: 4px; padding: 8px; background: #FAFAFA; }
.scroll-options { display: flex; flex-wrap: wrap; gap: 8px; }
.scroll-option-item { margin-right: 0; }
.scroll-loading, .scroll-end { text-align: center; color: #909399; font-size: 12px; padding: 8px 0; }
.scroll-more { text-align: center; padding: 8px 0; cursor: pointer; font-size: 12px; color: #409EFF; }
.scroll-more:hover { text-decoration: underline; }
.company-name-list {
  text-align: left;
  line-height: 1.5;
}
.company-name-item {
  word-break: break-all;
}
.form-company-select {
  width: 100%;
}
.form-company-select .company-select-input ::v-deep .el-select__tags {
  display: none;
}
.form-company-select .company-select-input ::v-deep .el-input__inner {
  height: 32px !important;
}
.selected-company-list {
  margin-top: 8px;
  line-height: 1.5;
}
.selected-company-tag {
  margin: 0 8px 8px 0;
}
.company-fold-bar {
  display: inline-block;
  margin-right: 8px;
}
.company-fold-summary {
  color: #606266;
  font-size: 12px;
}
</style>
