|
@@ -48,16 +48,6 @@
|
|
|
/>
|
|
/>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</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="medicalMallConfig.isStores">
|
|
<el-form-item label="所属店铺" v-if="medicalMallConfig.isStores">
|
|
|
<el-select style="width: 240px" v-model="queryParams.storeIds" placeholder="请选择店铺" clearable size="small">
|
|
<el-select style="width: 240px" v-model="queryParams.storeIds" placeholder="请选择店铺" clearable size="small">
|
|
|
<el-option
|
|
<el-option
|
|
@@ -69,12 +59,6 @@
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<div v-if="medicalMallConfig.isAudit">
|
|
<div v-if="medicalMallConfig.isAudit">
|
|
|
-<!-- <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-form-item label="药品注册证书编号" prop="drugRegCertNo">
|
|
|
<el-input
|
|
<el-input
|
|
|
v-model="queryParams.drugRegCertNo"
|
|
v-model="queryParams.drugRegCertNo"
|
|
@@ -248,16 +232,6 @@
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</div>
|
|
</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-form-item>
|
|
|
<el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
<el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
@@ -484,16 +458,6 @@
|
|
|
<el-radio :label="item.dictValue" v-for="item in isDisplayOptions">{{ item.dictLabel }}</el-radio>
|
|
<el-radio :label="item.dictValue" v-for="item in isDisplayOptions">{{ item.dictLabel }}</el-radio>
|
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <!-- <el-form-item label="所属公司" prop="companyId">-->
|
|
|
|
|
- <!-- <el-select style="width: 220px" 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>
|
|
</el-form>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
|
<el-button type="primary" @click="submitForm1">确 定</el-button>
|
|
<el-button type="primary" @click="submitForm1">确 定</el-button>
|
|
@@ -530,10 +494,48 @@
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="商品分类" prop="cateId">
|
|
<el-form-item label="商品分类" prop="cateId">
|
|
|
<treeselect v-model="form.cateId" :options="categoryOptions" :normalizer="normalizer"
|
|
<treeselect v-model="form.cateId" :options="categoryOptions" :normalizer="normalizer"
|
|
|
- placeholder="请选择上级分类"/>
|
|
|
|
|
|
|
+ placeholder="请选择上级分类" @input="onCategoryOrStoreChange"/>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
|
|
+ <el-row>
|
|
|
|
|
+ <el-col :span="12">
|
|
|
|
|
+ <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-col>
|
|
|
|
|
+ <el-col :span="12">
|
|
|
|
|
+ <el-form-item label="所属店铺" prop="storeId" v-if="medicalMallConfig.isStores">
|
|
|
|
|
+ <el-select style="width: 240px" v-model="form.storeId" placeholder="请选择店铺" clearable size="small" @change="onCategoryOrStoreChange">
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ v-for="item in storeOptions"
|
|
|
|
|
+ :key="item.storeId"
|
|
|
|
|
+ :label="item.storeName"
|
|
|
|
|
+ :value="item.storeId"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
|
|
+
|
|
|
|
|
+ <el-row>
|
|
|
|
|
+ <el-col :span="12">
|
|
|
|
|
+ <el-form-item label="器械编码" prop="medicalDeviceCode" v-if="showMedicalDeviceCode">
|
|
|
|
|
+ <el-input v-model="form.medicalDeviceCode" placeholder="请输入器械编码" @blur="onCategoryOrStoreChange" style="width: calc(100% - 120px);"/>
|
|
|
|
|
+ <el-button type="primary" @click="showExemptDeviceDialog" style="margin-left: 10px;" v-if="shouldShowExemptDeviceButton">显示器免</el-button>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
<el-row>
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="关键字" prop="keyword">
|
|
<el-form-item label="关键字" prop="keyword">
|
|
@@ -679,22 +681,7 @@
|
|
|
<el-form-item label="商品图片" prop="image">
|
|
<el-form-item label="商品图片" prop="image">
|
|
|
<Material v-model="imageArr" type="image" :num="1" :width="150" :height="150"/>
|
|
<Material v-model="imageArr" type="image" :num="1" :width="150" :height="150"/>
|
|
|
</el-form-item>
|
|
</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">
|
|
<el-form-item label="轮播图" prop="sliderImage">
|
|
|
<Material v-model="photoArr" type="image" :num="10" :width="150" :height="150"/>
|
|
<Material v-model="photoArr" type="image" :num="10" :width="150" :height="150"/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -969,37 +956,7 @@
|
|
|
/>
|
|
/>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</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="所属公司">-->
|
|
|
|
|
- <!-- <el-select style="width: 240px" v-model="form.companyIds" 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="所属店铺" prop="storeId" v-if="medicalMallConfig.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>
|
|
|
|
|
|
|
+
|
|
|
<div v-if="form.isDrug === '1'">
|
|
<div v-if="form.isDrug === '1'">
|
|
|
<el-form-item v-if="form.isShow==='1'" label="审核说明" prop="reviewAudit">
|
|
<el-form-item v-if="form.isShow==='1'" label="审核说明" prop="reviewAudit">
|
|
|
<el-select style="width: 240px" v-model="form.reviewAudit" placeholder="请选择审核说明" clearable
|
|
<el-select style="width: 240px" v-model="form.reviewAudit" placeholder="请选择审核说明" clearable
|
|
@@ -1021,80 +978,63 @@
|
|
|
<Material v-model="businessArr" type="image" :num="1" :width="150" :height="150"/>
|
|
<Material v-model="businessArr" type="image" :num="1" :width="150" :height="150"/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item v-if="form.isShow === '1' && businessArr.length > 0" label="营业执照有效期" prop="businessExpire">
|
|
|
|
|
- <el-date-picker
|
|
|
|
|
- v-model="form.businessExpire"
|
|
|
|
|
- type="daterange"
|
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
|
- range-separator="至"
|
|
|
|
|
- start-placeholder="开始日期"
|
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
- @change="validateBusinessExpire">
|
|
|
|
|
- </el-date-picker>
|
|
|
|
|
- <div v-if="businessExpireError" style="color: #F56C6C; font-size: 12px; line-height: 1; padding-top: 4px;">
|
|
|
|
|
- <i class="el-icon-warning"></i> {{ businessExpireError }}
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <el-form-item v-if="form.isShow === '1' && businessArr.length > 0" label="生产企业营业执照是否长期有效" prop="isBusinessPermanent">
|
|
|
|
|
+ <el-switch @change="switchChange()" v-model="businessValue" active-color="#13ce66" inactive-color="#ff4949" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
+ <el-form-item v-if="form.isShow === '1' && businessArr.length > 0 && !businessValue" prop="businessExpire">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-model="form.businessExpire"
|
|
|
|
|
+ type="daterange"
|
|
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
|
|
+ range-separator="至"
|
|
|
|
|
+ start-placeholder="开始日期"
|
|
|
|
|
+ end-placeholder="结束日期">
|
|
|
|
|
+ </el-date-picker>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+
|
|
|
<!--生产企业的生产许可证/备案凭证-->
|
|
<!--生产企业的生产许可证/备案凭证-->
|
|
|
<el-form-item v-if="form.isShow === '1'" label="生产企业的生产许可证/备案凭证" prop="license">
|
|
<el-form-item v-if="form.isShow === '1'" label="生产企业的生产许可证/备案凭证" prop="license">
|
|
|
<Material v-model="licenseArr" type="image" :num="1" :width="150" :height="150"/>
|
|
<Material v-model="licenseArr" type="image" :num="1" :width="150" :height="150"/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item v-if="form.isShow === '1' && licenseArr.length > 0" label="生产许可证有效期" prop="licenseExpire">
|
|
|
|
|
- <el-date-picker
|
|
|
|
|
- v-model="form.licenseExpire"
|
|
|
|
|
- type="daterange"
|
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
|
- range-separator="至"
|
|
|
|
|
- start-placeholder="开始日期"
|
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
- @change="validateLicenseExpire">
|
|
|
|
|
- </el-date-picker>
|
|
|
|
|
- <div v-if="licenseExpireError" style="color: #F56C6C; font-size: 12px; line-height: 1; padding-top: 4px;">
|
|
|
|
|
- <i class="el-icon-warning"></i> {{ licenseExpireError }}
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <el-form-item v-if="form.isShow === '1' && licenseArr.length > 0" label="生产企业的生产许可证/备案凭证是否长期有效" prop="isLicensePermanent">
|
|
|
|
|
+ <el-switch @change="switchChange()" v-model="licenseValue" active-color="#13ce66" inactive-color="#ff4949" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
+ <el-form-item v-if="form.isShow === '1' && licenseArr.length > 0 && !licenseValue" prop="licenseExpire">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-model="form.licenseExpire"
|
|
|
|
|
+ type="daterange"
|
|
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
|
|
+ range-separator="至"
|
|
|
|
|
+ start-placeholder="开始日期"
|
|
|
|
|
+ end-placeholder="结束日期">
|
|
|
|
|
+ </el-date-picker>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+
|
|
|
<!--商品注册证/备案凭证-->
|
|
<!--商品注册证/备案凭证-->
|
|
|
<el-form-item v-if="form.isShow === '1'" label="商品注册证/备案凭证" prop="certificate">
|
|
<el-form-item v-if="form.isShow === '1'" label="商品注册证/备案凭证" prop="certificate">
|
|
|
<Material v-model="certificateArr" type="image" :num="1" :width="150" :height="150"/>
|
|
<Material v-model="certificateArr" type="image" :num="1" :width="150" :height="150"/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item v-if="form.isShow === '1' && certificateArr.length > 0" label="注册证有效期" prop="certificateExpire">
|
|
|
|
|
|
|
+ <el-form-item v-if="form.isShow === '1' && licenseArr.length > 0" label="商品注册证/备案凭证是否长期有效" prop="isCertificatePermanent">
|
|
|
|
|
+ <el-switch @change="switchChange()" v-model="certificateValue" active-color="#13ce66" inactive-color="#ff4949" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+
|
|
|
|
|
+ <el-form-item v-if="form.isShow === '1' && certificateArr.length > 0 && !certificateValue" prop="certificateExpire">
|
|
|
<el-date-picker
|
|
<el-date-picker
|
|
|
- v-model="form.certificateExpire"
|
|
|
|
|
- type="daterange"
|
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
|
- range-separator="至"
|
|
|
|
|
- start-placeholder="开始日期"
|
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
- @change="validateCertificateExpire">
|
|
|
|
|
|
|
+ v-model="form.certificateExpire"
|
|
|
|
|
+ type="daterange"
|
|
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
|
|
+ range-separator="至"
|
|
|
|
|
+ start-placeholder="开始日期"
|
|
|
|
|
+ end-placeholder="结束日期">
|
|
|
</el-date-picker>
|
|
</el-date-picker>
|
|
|
- <div v-if="certificateExpireError" style="color: #F56C6C; font-size: 12px; line-height: 1; padding-top: 4px;">
|
|
|
|
|
- <i class="el-icon-warning"></i> {{ certificateExpireError }}
|
|
|
|
|
- </div>
|
|
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
-
|
|
|
|
|
- <!-- <el-form-item v-if="form.isShow === '1' && displayDemo" label="Ⅰ类Ⅱ类备案凭证" prop="voucher">-->
|
|
|
|
|
- <!-- <Material v-model="voucherArr" type="image" :num="1" :width="150" :height="150"/>-->
|
|
|
|
|
- <!-- </el-form-item>-->
|
|
|
|
|
- <!-- <el-form-item v-if="form.isShow === '1' && voucherArr.length > 0 && displayDemo" prop="voucherExpire">-->
|
|
|
|
|
- <!-- <el-date-picker-->
|
|
|
|
|
- <!-- v-model="form.voucherExpire"-->
|
|
|
|
|
- <!-- type="daterange"-->
|
|
|
|
|
- <!-- value-format="yyyy-MM-dd"-->
|
|
|
|
|
- <!-- range-separator="至"-->
|
|
|
|
|
- <!-- start-placeholder="开始日期"-->
|
|
|
|
|
- <!-- end-placeholder="结束日期">-->
|
|
|
|
|
- <!-- </el-date-picker>-->
|
|
|
|
|
- <!-- </el-form-item>-->
|
|
|
|
|
-
|
|
|
|
|
- <!-- GMP/GSP认证证书(后续不需要了)-->
|
|
|
|
|
- <!-- <el-form-item v-if="form.isShow === '1'" label="GMP/GSP认证证书" prop="gmpAuth">-->
|
|
|
|
|
- <!-- <Material v-model="gmpAuthArr" type="image" :num="1" :width="150" :height="150"/>-->
|
|
|
|
|
- <!-- </el-form-item>-->
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
<el-form-item label="国药准字" v-if="form.productType==2" prop="prescribeCode">
|
|
<el-form-item label="国药准字" v-if="form.productType==2" prop="prescribeCode">
|
|
|
<el-input v-model="form.prescribeCode" placeholder="请输入国药准字"/>
|
|
<el-input v-model="form.prescribeCode" placeholder="请输入国药准字"/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -1183,10 +1123,40 @@
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
</el-table>
|
|
</el-table>
|
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
|
- <el-button type="primary" @click="authVisible = false">关 闭</el-button>
|
|
|
|
|
- </span>
|
|
|
|
|
|
|
+ <el-button type="primary" @click="authVisible = false">关 闭</el-button>
|
|
|
|
|
+ </span>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
+<!-- 免于经营备案的第二类医疗器械产品弹窗 -->
|
|
|
|
|
+<el-dialog title="免于经营备案的第二类医疗器械产品" :visible.sync="exemptDeviceDialogVisible" width="80%" append-to-body modal-append-to-body="false" z-index="9999" top="5vh" custom-class="exempt-device-dialog">
|
|
|
|
|
+ <el-form :model="exemptDeviceQueryParams" ref="exemptDeviceQueryForm" :inline="true" label-width="80px">
|
|
|
|
|
+ <el-form-item label="产品名称">
|
|
|
|
|
+ <el-input v-model="exemptDeviceQueryParams.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleExemptDeviceQuery" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item>
|
|
|
|
|
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleExemptDeviceQuery">搜索</el-button>
|
|
|
|
|
+ <el-button icon="el-icon-refresh" size="mini" @click="resetExemptDeviceQuery">重置</el-button>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-form>
|
|
|
|
|
+
|
|
|
|
|
+ <el-table v-loading="exemptDeviceLoading" :data="exemptDeviceList" border>
|
|
|
|
|
+ <el-table-column label="产品序号" align="center" prop="serialNumber" />
|
|
|
|
|
+ <el-table-column label="产品名称" align="center" prop="productName" />
|
|
|
|
|
+ <el-table-column label="目录名称" align="center" prop="directoryName" />
|
|
|
|
|
+ <el-table-column label="产品描述" align="center" prop="productDescription" />
|
|
|
|
|
+ <el-table-column label="产品用途" align="center" prop="usageStr" />
|
|
|
|
|
+ <el-table-column label="创建时间" align="center" prop="createTime" width="180" />
|
|
|
|
|
+ <el-table-column label="更新时间" align="center" prop="updateTime" width="180" />
|
|
|
|
|
+ </el-table>
|
|
|
|
|
+
|
|
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
|
|
+ <el-button @click="exemptDeviceDialogVisible = false">关 闭</el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+</el-dialog>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
<!-- 溯源码管理弹窗 -->
|
|
<!-- 溯源码管理弹窗 -->
|
|
|
<el-dialog
|
|
<el-dialog
|
|
|
:title="titleVisible"
|
|
:title="titleVisible"
|
|
@@ -1215,7 +1185,7 @@ import {
|
|
|
importTemplate,
|
|
importTemplate,
|
|
|
batchModify,
|
|
batchModify,
|
|
|
sync580,
|
|
sync580,
|
|
|
- updateIsShow, exportDrugProduct,getAuthInfo,copyProduct,selectForbiddenKeywords,checkStoreLicense
|
|
|
|
|
|
|
+ updateIsShow, exportDrugProduct,getAuthInfo,copyProduct,selectForbiddenKeywords,checkStoreLicense,getExemptSecondMedicalDeviceList
|
|
|
} from "@/api/hisStore/storeProduct";
|
|
} from "@/api/hisStore/storeProduct";
|
|
|
import {getAllStoreProductCategory} from "@/api/hisStore/storeProductCategory";
|
|
import {getAllStoreProductCategory} from "@/api/hisStore/storeProductCategory";
|
|
|
import {getAllStoreProductRule} from "@/api/hisStore/storeProductRule";
|
|
import {getAllStoreProductRule} from "@/api/hisStore/storeProductRule";
|
|
@@ -1240,6 +1210,7 @@ export default {
|
|
|
Material,
|
|
Material,
|
|
|
singleImg,
|
|
singleImg,
|
|
|
VerifyCode,
|
|
VerifyCode,
|
|
|
|
|
+ singleImg
|
|
|
},
|
|
},
|
|
|
created() {
|
|
created() {
|
|
|
this.$nextTick(() => {
|
|
this.$nextTick(() => {
|
|
@@ -1289,6 +1260,16 @@ export default {
|
|
|
this.getTreeselect();
|
|
this.getTreeselect();
|
|
|
this.getList();
|
|
this.getList();
|
|
|
},
|
|
},
|
|
|
|
|
+ computed: {
|
|
|
|
|
+ // 计算属性:是否显示显示器免按钮
|
|
|
|
|
+ shouldShowExemptDeviceButton() {
|
|
|
|
|
+ // 只有在显示器械编码输入框且不是III类器械时才显示按钮
|
|
|
|
|
+ return this.showMedicalDeviceCode &&
|
|
|
|
|
+ this.form.cateId &&
|
|
|
|
|
+ this.cateIdToNameMap[this.form.cateId] &&
|
|
|
|
|
+ !this.cateIdToNameMap[this.form.cateId].includes('III类器械');
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
watch: {
|
|
watch: {
|
|
|
licenseArr(val) {
|
|
licenseArr(val) {
|
|
|
this.form.license = val.join(',');
|
|
this.form.license = val.join(',');
|
|
@@ -1346,21 +1327,80 @@ export default {
|
|
|
'form.cateId': {
|
|
'form.cateId': {
|
|
|
handler(newVal, oldVal) {
|
|
handler(newVal, oldVal) {
|
|
|
// 分类变化时动态修改验证规则
|
|
// 分类变化时动态修改验证规则
|
|
|
- if (newVal == 224) {
|
|
|
|
|
- this.rules.indications = [];
|
|
|
|
|
- this.rules.dosage = [];
|
|
|
|
|
- }
|
|
|
|
|
const cateName = this.cateIdToNameMap[newVal];
|
|
const cateName = this.cateIdToNameMap[newVal];
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否包含"器械"
|
|
|
if(cateName !== undefined && cateName.includes('器械')){
|
|
if(cateName !== undefined && cateName.includes('器械')){
|
|
|
- this.displayDemo=true;
|
|
|
|
|
- }else {
|
|
|
|
|
- this.displayDemo=false;
|
|
|
|
|
|
|
+ this.displayDemo = true;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.displayDemo = false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否为II类器械或III类器械,如果是则显示器械编码输入框
|
|
|
|
|
+ if (cateName !== undefined && (cateName.includes('II类器械') || cateName.includes('III类器械'))) {
|
|
|
|
|
+ this.showMedicalDeviceCode = true;
|
|
|
|
|
+ // 只有当商品分类为II类器械时才显示显示器免按钮
|
|
|
|
|
+ this.showExemptDeviceButton = cateName.includes('II类器械');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.showMedicalDeviceCode = false;
|
|
|
|
|
+ this.showExemptDeviceButton = false;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否包含"处方药"
|
|
|
|
|
+ const isPrescriptionDrug = cateName !== undefined && cateName.includes('处方药');
|
|
|
|
|
+
|
|
|
|
|
+ // 如果是处方药,则移除相关字段的必填校验
|
|
|
|
|
+ if (isPrescriptionDrug) {
|
|
|
|
|
+ // 移除必填校验规则
|
|
|
|
|
+ const fieldsToRemoveRequired = ['indications', 'ingredient', 'dosage', 'adverseReactions', 'contraindications', 'precautions'];
|
|
|
|
|
+ fieldsToRemoveRequired.forEach(field => {
|
|
|
|
|
+ if (this.rules[field]) {
|
|
|
|
|
+ // 过滤掉 required 规则
|
|
|
|
|
+ this.rules[field] = this.rules[field].filter(rule => rule.required !== true);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果不是处方药,恢复默认的必填校验规则
|
|
|
|
|
+ // 恢复 ingredient 字段的必填规则
|
|
|
|
|
+ if (!this.rules.ingredient) {
|
|
|
|
|
+ this.rules.ingredient = [];
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!this.rules.ingredient.some(rule => rule.required)) {
|
|
|
|
|
+ this.rules.ingredient.unshift({ required: true, message: "成分不能为空", trigger: "blur" });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 恢复其他字段的必填规则
|
|
|
|
|
+ const requiredRules = {
|
|
|
|
|
+ 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" }]
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ Object.keys(requiredRules).forEach(field => {
|
|
|
|
|
+ if (!this.rules[field]) {
|
|
|
|
|
+ this.rules[field] = [];
|
|
|
|
|
+ }
|
|
|
|
|
+ // 检查是否已有 required 规则,如果没有就添加
|
|
|
|
|
+ if (!this.rules[field].some(rule => rule.required)) {
|
|
|
|
|
+ this.rules[field] = [...requiredRules[field], ...this.rules[field]];
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
this.ingredientError = '';
|
|
this.ingredientError = '';
|
|
|
// 清除验证状态
|
|
// 清除验证状态
|
|
|
this.$nextTick(() => {
|
|
this.$nextTick(() => {
|
|
|
if (this.$refs.form) {
|
|
if (this.$refs.form) {
|
|
|
- this.$refs.form.clearValidate(['indications', 'dosage']);
|
|
|
|
|
|
|
+ this.$refs.form.clearValidate([
|
|
|
|
|
+ 'indications',
|
|
|
|
|
+ 'ingredient',
|
|
|
|
|
+ 'dosage',
|
|
|
|
|
+ 'adverseReactions',
|
|
|
|
|
+ 'contraindications',
|
|
|
|
|
+ 'precautions'
|
|
|
|
|
+ ]);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -1395,6 +1435,9 @@ export default {
|
|
|
},
|
|
},
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
|
|
+ certificateValue:false,
|
|
|
|
|
+ licenseValue:false,
|
|
|
|
|
+ businessValue:false,
|
|
|
// 溯源码弹窗相关
|
|
// 溯源码弹窗相关
|
|
|
titleVisible:'溯源管理:',
|
|
titleVisible:'溯源管理:',
|
|
|
verifyDialogVisible: false, // 溯源码弹窗显示状态
|
|
verifyDialogVisible: false, // 溯源码弹窗显示状态
|
|
@@ -1408,6 +1451,8 @@ export default {
|
|
|
ingredientError: '', // 成分禁止提示
|
|
ingredientError: '', // 成分禁止提示
|
|
|
displayDemo: false,
|
|
displayDemo: false,
|
|
|
cateIdToNameMap: {},
|
|
cateIdToNameMap: {},
|
|
|
|
|
+ showMedicalDeviceCode: false, // 是否显示器械编码输入框
|
|
|
|
|
+ showExemptDeviceButton: false, // 是否显示显示器免按钮
|
|
|
businessArr: [],
|
|
businessArr: [],
|
|
|
licenseArr: [],
|
|
licenseArr: [],
|
|
|
certificateArr: [],
|
|
certificateArr: [],
|
|
@@ -1503,6 +1548,17 @@ export default {
|
|
|
// 企业列表
|
|
// 企业列表
|
|
|
companyOptions: [],
|
|
companyOptions: [],
|
|
|
storeOptions: [],
|
|
storeOptions: [],
|
|
|
|
|
+ // 防抖定时器
|
|
|
|
|
+ categoryOrStoreChangeTimer: null,
|
|
|
|
|
+ // 免于经营备案的第二类医疗器械产品相关变量
|
|
|
|
|
+ exemptDeviceDialogVisible: false,
|
|
|
|
|
+ exemptDeviceList: [],
|
|
|
|
|
+ allExemptDeviceList: [], // 保存所有数据用于本地搜索
|
|
|
|
|
+ exemptDeviceLoading: false,
|
|
|
|
|
+ exemptDeviceTotal: 0,
|
|
|
|
|
+ exemptDeviceQueryParams: {
|
|
|
|
|
+ productName: null
|
|
|
|
|
+ },
|
|
|
// 遮罩层
|
|
// 遮罩层
|
|
|
loading: true,
|
|
loading: true,
|
|
|
// 选中数组
|
|
// 选中数组
|
|
@@ -1569,6 +1625,7 @@ export default {
|
|
|
isCertificatePermanent:null,
|
|
isCertificatePermanent:null,
|
|
|
isLicensePermanent:null,
|
|
isLicensePermanent:null,
|
|
|
isBusinessPermanent:null,
|
|
isBusinessPermanent:null,
|
|
|
|
|
+ medicalDeviceCode: null, // 器械编码
|
|
|
},
|
|
},
|
|
|
// 表单校验
|
|
// 表单校验
|
|
|
rules: {
|
|
rules: {
|
|
@@ -1606,6 +1663,9 @@ export default {
|
|
|
cateId: [
|
|
cateId: [
|
|
|
{required: true, message: "分类id不能为空", trigger: "blur"}
|
|
{required: true, message: "分类id不能为空", trigger: "blur"}
|
|
|
],
|
|
],
|
|
|
|
|
+ medicalDeviceCode: [
|
|
|
|
|
+ {required: true, message: "器械编码不能为空", trigger: "blur"}
|
|
|
|
|
+ ],
|
|
|
price: [
|
|
price: [
|
|
|
{required: true, message: "商品价格不能为空", trigger: "blur"}
|
|
{required: true, message: "商品价格不能为空", trigger: "blur"}
|
|
|
],
|
|
],
|
|
@@ -1709,35 +1769,6 @@ export default {
|
|
|
},
|
|
},
|
|
|
};
|
|
};
|
|
|
},
|
|
},
|
|
|
- // computed: {
|
|
|
|
|
- // // 动态验证规则 - 返回完整的规则对象
|
|
|
|
|
- // dynamicRules() {
|
|
|
|
|
- // // 复制基础规则
|
|
|
|
|
- // const rules = { ...this.rules };
|
|
|
|
|
- //
|
|
|
|
|
- // // 判断是否为处方药 (cateId = 224)
|
|
|
|
|
- // const isPrescriptionDrug = this.form.cateId == 224;
|
|
|
|
|
- // console.log("分类id"+this.form.cateId);
|
|
|
|
|
- // // 修改触发时机,只在失去焦点时验证
|
|
|
|
|
- // Object.keys(rules).forEach(key => {
|
|
|
|
|
- // if (rules[key] && rules[key].length > 0) {
|
|
|
|
|
- // rules[key].forEach(rule => {
|
|
|
|
|
- // rule.trigger = 'blur'; // 只在失去焦点时验证
|
|
|
|
|
- // });
|
|
|
|
|
- // }
|
|
|
|
|
- // });
|
|
|
|
|
- // // 如果是处方药,取消功能主治和用法用量的校验
|
|
|
|
|
- // if (isPrescriptionDrug) {
|
|
|
|
|
- // rules.indications = []; // 空数组表示取消校验
|
|
|
|
|
- // rules.dosage = []; // 空数组表示取消校验
|
|
|
|
|
- // }else {
|
|
|
|
|
- // rules.indications = this.rules.indications
|
|
|
|
|
- // rules.dosage = this.rules.dosage
|
|
|
|
|
- // }
|
|
|
|
|
- //
|
|
|
|
|
- // return rules;
|
|
|
|
|
- // }
|
|
|
|
|
- // },
|
|
|
|
|
methods: {
|
|
methods: {
|
|
|
// 防抖检查店铺许可证权限
|
|
// 防抖检查店铺许可证权限
|
|
|
debounceCheckStoreLicense() {
|
|
debounceCheckStoreLicense() {
|
|
@@ -1753,12 +1784,36 @@ export default {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 获取分类名称
|
|
|
|
|
+ const cateName = this.cateIdToNameMap[this.form.cateId];
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否为II类器械或III类器械
|
|
|
|
|
+ const isMedicalDevice = cateName !== undefined && (cateName.includes('II类器械') || cateName.includes('III类器械'));
|
|
|
|
|
+
|
|
|
|
|
+ // 如果是II类或III类器械,需要检查器械编码是否为空
|
|
|
|
|
+ if (isMedicalDevice && (!this.form.medicalDeviceCode || this.form.medicalDeviceCode.trim() === '')) {
|
|
|
|
|
+ this.$message.error('请选择II类器械或III类器械分类时,器械编码不能为空');
|
|
|
|
|
+ this.storeLicenseCheckFailed = true;
|
|
|
|
|
+ this.storeLicenseErrorMessage = '请选择II类器械或III类器械分类时,器械编码不能为空';
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 添加检查中标志,防止重复调用
|
|
// 添加检查中标志,防止重复调用
|
|
|
if (this.isCheckingLicense) {
|
|
if (this.isCheckingLicense) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
this.isCheckingLicense = true;
|
|
this.isCheckingLicense = true;
|
|
|
- checkStoreLicense(this.form.storeId, this.form.cateId).then(response => {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 准备请求参数
|
|
|
|
|
+ let cateId = this.form.cateId;
|
|
|
|
|
+ let medicalDeviceCode = null;
|
|
|
|
|
+
|
|
|
|
|
+ // 如果是II类或III类器械,传递器械编码
|
|
|
|
|
+ if (isMedicalDevice) {
|
|
|
|
|
+ medicalDeviceCode = this.form.medicalDeviceCode;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ checkStoreLicense(this.form.storeId, cateId, medicalDeviceCode).then(response => {
|
|
|
if (response.code === 200) {
|
|
if (response.code === 200) {
|
|
|
if (!response.data.flag) {
|
|
if (!response.data.flag) {
|
|
|
// 权限检查失败
|
|
// 权限检查失败
|
|
@@ -1835,22 +1890,90 @@ export default {
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ // 当商品分类或所属店铺改变时触发
|
|
|
|
|
+ onCategoryOrStoreChange() {
|
|
|
|
|
+ // 使用防抖机制,避免频繁调用
|
|
|
|
|
+ clearTimeout(this.categoryOrStoreChangeTimer);
|
|
|
|
|
+ this.categoryOrStoreChangeTimer = setTimeout(() => {
|
|
|
|
|
+ this.checkStoreLicensePermission();
|
|
|
|
|
+ }, 500);
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ // 显示免于经营备案的第二类医疗器械产品弹窗
|
|
|
|
|
+ showExemptDeviceDialog() {
|
|
|
|
|
+ this.exemptDeviceDialogVisible = true;
|
|
|
|
|
+ // 重置搜索条件
|
|
|
|
|
+ this.exemptDeviceQueryParams = {
|
|
|
|
|
+ productName: null
|
|
|
|
|
+ };
|
|
|
|
|
+ // 只有在没有数据时才获取数据
|
|
|
|
|
+ if (this.allExemptDeviceList.length === 0) {
|
|
|
|
|
+ this.getExemptDeviceList();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果已有数据,直接显示
|
|
|
|
|
+ this.exemptDeviceList = this.allExemptDeviceList;
|
|
|
|
|
+ this.exemptDeviceTotal = this.exemptDeviceList.length;
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ // 获取免于经营备案的第二类医疗器械产品列表
|
|
|
|
|
+ getExemptDeviceList() {
|
|
|
|
|
+ this.exemptDeviceLoading = true;
|
|
|
|
|
+ // 调用实际的API接口来获取数据
|
|
|
|
|
+ getExemptSecondMedicalDeviceList(this.exemptDeviceQueryParams).then(response => {
|
|
|
|
|
+ this.allExemptDeviceList = response.rows || response.data || [];
|
|
|
|
|
+ // 根据搜索条件过滤数据
|
|
|
|
|
+ if (this.exemptDeviceQueryParams.productName) {
|
|
|
|
|
+ const searchTerm = this.exemptDeviceQueryParams.productName.toLowerCase();
|
|
|
|
|
+ this.exemptDeviceList = this.allExemptDeviceList.filter(item =>
|
|
|
|
|
+ item.productName && item.productName.toLowerCase().includes(searchTerm)
|
|
|
|
|
+ );
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.exemptDeviceList = this.allExemptDeviceList;
|
|
|
|
|
+ }
|
|
|
|
|
+ this.exemptDeviceTotal = this.exemptDeviceList.length;
|
|
|
|
|
+ this.exemptDeviceLoading = false;
|
|
|
|
|
+ }).catch(error => {
|
|
|
|
|
+ console.error('获取免于经营备案的第二类医疗器械产品列表失败:', error);
|
|
|
|
|
+ this.$message.error('获取免于经营备案的第二类医疗器械产品列表失败');
|
|
|
|
|
+ this.exemptDeviceLoading = false;
|
|
|
|
|
+ this.exemptDeviceList = [];
|
|
|
|
|
+ this.allExemptDeviceList = [];
|
|
|
|
|
+ this.exemptDeviceTotal = 0;
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+ // 搜索免于经营备案的第二类医疗器械产品
|
|
|
|
|
+ handleExemptDeviceQuery() {
|
|
|
|
|
+ // 在本地数据中搜索
|
|
|
|
|
+ if (this.exemptDeviceQueryParams.productName) {
|
|
|
|
|
+ const searchTerm = this.exemptDeviceQueryParams.productName.toLowerCase();
|
|
|
|
|
+ this.exemptDeviceList = this.allExemptDeviceList.filter(item =>
|
|
|
|
|
+ item.productName && item.productName.toLowerCase().includes(searchTerm)
|
|
|
|
|
+ );
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.exemptDeviceList = this.allExemptDeviceList;
|
|
|
|
|
+ }
|
|
|
|
|
+ this.exemptDeviceTotal = this.exemptDeviceList.length;
|
|
|
|
|
+ },
|
|
|
|
|
+ // 重置免于经营备案的第二类医疗器械产品搜索
|
|
|
|
|
+ resetExemptDeviceQuery() {
|
|
|
|
|
+ this.exemptDeviceQueryParams = {
|
|
|
|
|
+ productName: null
|
|
|
|
|
+ };
|
|
|
|
|
+ // 重置时显示所有数据
|
|
|
|
|
+ this.exemptDeviceList = this.allExemptDeviceList;
|
|
|
|
|
+ this.exemptDeviceTotal = this.exemptDeviceList.length;
|
|
|
|
|
+ },
|
|
|
handleNoticeInfo() {
|
|
handleNoticeInfo() {
|
|
|
qualifications()
|
|
qualifications()
|
|
|
.then(response => {
|
|
.then(response => {
|
|
|
- console.log("noticeInfo接口完整响应:", response);
|
|
|
|
|
if (response.code === 200) {
|
|
if (response.code === 200) {
|
|
|
this.promptList = response.data;
|
|
this.promptList = response.data;
|
|
|
if (this.promptList && this.promptList.length > 0) {
|
|
if (this.promptList && this.promptList.length > 0) {
|
|
|
this.dialogVisible = true;
|
|
this.dialogVisible = true;
|
|
|
}
|
|
}
|
|
|
- console.log("通知信息请求完成!", this.promptList);
|
|
|
|
|
- } else {
|
|
|
|
|
- console.warn("接口返回非成功状态:", response.code);
|
|
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
.catch(err => {
|
|
.catch(err => {
|
|
|
- console.error("获取通知信息失败:", err);
|
|
|
|
|
this.$message.error("加载通知信息失败,请稍后重试");
|
|
this.$message.error("加载通知信息失败,请稍后重试");
|
|
|
});
|
|
});
|
|
|
},
|
|
},
|
|
@@ -2097,6 +2220,7 @@ export default {
|
|
|
},
|
|
},
|
|
|
// 表单重置
|
|
// 表单重置
|
|
|
reset() {
|
|
reset() {
|
|
|
|
|
+ this.initPrescriptionDrugRules(); // 重置处方药相关的校验规则
|
|
|
this.isFormInitialized = false; // 重置初始化标志
|
|
this.isFormInitialized = false; // 重置初始化标志
|
|
|
this.ingredientError = '';
|
|
this.ingredientError = '';
|
|
|
this.form = {
|
|
this.form = {
|
|
@@ -2302,7 +2426,23 @@ export default {
|
|
|
this.qualificationArr = this.form.qualificationCertificate.split(",");
|
|
this.qualificationArr = this.form.qualificationCertificate.split(",");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if(this.form.isBusinessPermanent == 1){
|
|
|
|
|
+ this.businessValue = true
|
|
|
|
|
+ }else {
|
|
|
|
|
+ this.businessValue = false
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ if(this.form.isLicensePermanent == 1){
|
|
|
|
|
+ this.licenseValue = true
|
|
|
|
|
+ }else {
|
|
|
|
|
+ this.licenseValue = false
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(this.form.isCertificatePermanent == 1){
|
|
|
|
|
+ this.certificateValue = true
|
|
|
|
|
+ }else {
|
|
|
|
|
+ this.certificateValue = false
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
const expireFieldMap = [
|
|
const expireFieldMap = [
|
|
|
{ expireKey: 'businessExpire', startKey: 'businessStart', endKey: 'businessEnd' },
|
|
{ expireKey: 'businessExpire', startKey: 'businessStart', endKey: 'businessEnd' },
|
|
@@ -2440,10 +2580,24 @@ export default {
|
|
|
this.form.qualificationCertificateEnd = this.form.qualificationExpire[1];
|
|
this.form.qualificationCertificateEnd = this.form.qualificationExpire[1];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 删除长期有效标识,所有证书都需要填写有效期
|
|
|
|
|
- this.form.isBusinessPermanent = 0;
|
|
|
|
|
- this.form.isLicensePermanent = 0;
|
|
|
|
|
- this.form.isCertificatePermanent = 0;
|
|
|
|
|
|
|
+ //无语,有的时候要删除,删除了又要加回来。
|
|
|
|
|
+ if(!!this.businessValue){
|
|
|
|
|
+ this.form.isBusinessPermanent=1;
|
|
|
|
|
+ }else {
|
|
|
|
|
+ this.form.isBusinessPermanent=0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(!!this.licenseValue){
|
|
|
|
|
+ this.form.isLicensePermanent=1;
|
|
|
|
|
+ }else {
|
|
|
|
|
+ this.form.isLicensePermanent=0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(!!this.certificateValue){
|
|
|
|
|
+ this.form.isCertificatePermanent=1;
|
|
|
|
|
+ }else {
|
|
|
|
|
+ this.form.isCertificatePermanent=0;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// // 组装companyIds
|
|
// // 组装companyIds
|
|
|
// if (this.form.companyIds != null && this.form.companyIds != undefined) {
|
|
// if (this.form.companyIds != null && this.form.companyIds != undefined) {
|
|
@@ -2629,6 +2783,50 @@ export default {
|
|
|
const error = this.checkCertificateExpire(dates, '注册证');
|
|
const error = this.checkCertificateExpire(dates, '注册证');
|
|
|
this.certificateExpireError = error ? error + '!' : '';
|
|
this.certificateExpireError = error ? error + '!' : '';
|
|
|
},
|
|
},
|
|
|
|
|
+ // 添加一个新的方法用于初始化处方药相关规则
|
|
|
|
|
+ initPrescriptionDrugRules() {
|
|
|
|
|
+ // 初始化处方药相关字段的校验规则
|
|
|
|
|
+ this.$set(this.rules, 'indications', [
|
|
|
|
|
+ { required: true, message: "功能主治不能为空", trigger: "blur" }
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ this.$set(this.rules, 'ingredient', [
|
|
|
|
|
+ { required: true, message: "成分不能为空", trigger: "blur" },
|
|
|
|
|
+ {
|
|
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
|
|
+ if (this.ingredientError) {
|
|
|
|
|
+ callback(new Error(this.ingredientError));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: "blur"
|
|
|
|
|
+ }
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ this.$set(this.rules, 'dosage', [
|
|
|
|
|
+ { required: true, message: "用法用量不能为空", trigger: "blur" }
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ this.$set(this.rules, 'adverseReactions', [
|
|
|
|
|
+ { required: true, message: "不良反应不能为空", trigger: "blur" }
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ this.$set(this.rules, 'contraindications', [
|
|
|
|
|
+ { required: true, message: "禁忌不能为空", trigger: "blur" }
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ this.$set(this.rules, 'precautions', [
|
|
|
|
|
+ { required: true, message: "注意事项不能为空", trigger: "blur" }
|
|
|
|
|
+ ]);
|
|
|
|
|
+ },
|
|
|
|
|
+ // 组件销毁前清理定时器
|
|
|
|
|
+ beforeDestroy() {
|
|
|
|
|
+ if (this.categoryOrStoreChangeTimer) {
|
|
|
|
|
+ clearTimeout(this.categoryOrStoreChangeTimer);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
//打开溯源码页面
|
|
//打开溯源码页面
|
|
|
openVerify(row){
|
|
openVerify(row){
|
|
|
if (row) {
|
|
if (row) {
|
|
@@ -2662,3 +2860,17 @@ export default {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
</script>
|
|
</script>
|
|
|
|
|
+
|
|
|
|
|
+<style scoped>
|
|
|
|
|
+.exempt-device-dialog {
|
|
|
|
|
+ z-index: 9999 !important;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.exempt-device-dialog .el-dialog {
|
|
|
|
|
+ z-index: 9999 !important;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.exempt-device-dialog .el-dialog__wrapper {
|
|
|
|
|
+ z-index: 9999 !important;
|
|
|
|
|
+}
|
|
|
|
|
+</style>
|