|
|
@@ -981,76 +981,65 @@
|
|
|
<el-form-item label="非首营链接" prop="businessLink" v-if="form.reviewAudit === '1'">
|
|
|
<el-input :min="0" v-model="form.businessLink" placeholder="请输入非首营链接"/>
|
|
|
</el-form-item>
|
|
|
+
|
|
|
+ <!-- 生产企业营业执照 -->
|
|
|
<el-form-item v-if="form.isShow === '1'" label="生产企业营业执照" prop="business">
|
|
|
<Material v-model="businessArr" type="image" :num="1" :width="150" :height="150"/>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <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-switch>
|
|
|
+ <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>
|
|
|
|
|
|
- <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">
|
|
|
<Material v-model="licenseArr" type="image" :num="1" :width="150" :height="150"/>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <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-switch>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item v-if="form.isShow === '1' && licenseArr.length > 0 && !licenseValue" prop="licenseExpire">
|
|
|
+ <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="结束日期">
|
|
|
+ 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>
|
|
|
|
|
|
+ <!--商品注册证/备案凭证-->
|
|
|
<el-form-item v-if="form.isShow === '1'" label="商品注册证/备案凭证" prop="certificate">
|
|
|
<Material v-model="certificateArr" type="image" :num="1" :width="150" :height="150"/>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item v-if="form.isShow === '1' && certificateArr.length > 0" label="商品注册证/备案凭证是否长期有效" prop="isCertificatePermanent">
|
|
|
- <el-switch
|
|
|
- @change="switchChange()"
|
|
|
- v-model="certificateValue"
|
|
|
- active-color="#13ce66"
|
|
|
- inactive-color="#ff4949">
|
|
|
- </el-switch>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item v-if="form.isShow === '1' && certificateArr.length > 0 && !certificateValue" prop="certificateExpire">
|
|
|
+ <el-form-item v-if="form.isShow === '1' && certificateArr.length > 0" label="注册证有效期" prop="certificateExpire">
|
|
|
<el-date-picker
|
|
|
v-model="form.certificateExpire"
|
|
|
type="daterange"
|
|
|
value-format="yyyy-MM-dd"
|
|
|
range-separator="至"
|
|
|
start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期">
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ @change="validateCertificateExpire">
|
|
|
</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 v-if="form.isShow === '1' && displayDemo" label="Ⅰ类Ⅱ类备案凭证" prop="voucher">-->
|
|
|
@@ -1067,29 +1056,26 @@
|
|
|
<!-- </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>
|
|
|
|
|
|
- <el-form-item v-if="form.isShow === '1' && gmpAuthArr.length > 0" label="GMP/GSP认证证书是否长期有效" prop="isGmpAuthPermanent">
|
|
|
- <el-switch
|
|
|
- @change="switchChange()"
|
|
|
- v-model="gmpAuthValue"
|
|
|
- active-color="#13ce66"
|
|
|
- inactive-color="#ff4949">
|
|
|
- </el-switch>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item v-if="form.isShow === '1' && gmpAuthArr.length > 0 && !gmpAuthValue" prop="gmpAuthExpire">
|
|
|
+ <el-form-item v-if="form.isShow === '1' && gmpAuthArr.length > 0" label="GMP/GSP认证有效期" prop="gmpAuthExpire">
|
|
|
<el-date-picker
|
|
|
v-model="form.gmpAuthExpire"
|
|
|
type="daterange"
|
|
|
value-format="yyyy-MM-dd"
|
|
|
range-separator="至"
|
|
|
start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期">
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ @change="validateGmpAuthExpire">
|
|
|
</el-date-picker>
|
|
|
+ <div v-if="gmpAuthExpireError" style="color: #F56C6C; font-size: 12px; line-height: 1; padding-top: 4px;">
|
|
|
+ <i class="el-icon-warning"></i> {{ gmpAuthExpireError }}
|
|
|
+ </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>
|
|
|
@@ -1354,10 +1340,7 @@ export default {
|
|
|
return {
|
|
|
auditLogs:[],
|
|
|
titleValue:null,
|
|
|
- gmpAuthValue:false,
|
|
|
- certificateValue:false,
|
|
|
- licenseValue:false,
|
|
|
- businessValue:false,
|
|
|
+
|
|
|
displayDemo: false,
|
|
|
cateIdToNameMap: {},
|
|
|
businessArr: [],
|
|
|
@@ -1365,7 +1348,12 @@ export default {
|
|
|
certificateArr: [],
|
|
|
voucherArr: [],
|
|
|
gmpAuthArr: [],
|
|
|
- activeValue: '0',
|
|
|
+ // 证书过期错误提示
|
|
|
+ businessExpireError: '',
|
|
|
+ licenseExpireError: '',
|
|
|
+ certificateExpireError: '',
|
|
|
+ gmpAuthExpireError: '',
|
|
|
+ activeValue: '1',
|
|
|
orderOptions: [],
|
|
|
medicalMallConfig: {},
|
|
|
promptList: [],
|
|
|
@@ -1626,21 +1614,21 @@ export default {
|
|
|
businessLink: [
|
|
|
{ required: true, message: "非首营链接不能为空!", trigger: "change" }
|
|
|
],
|
|
|
- // 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" }
|
|
|
- // ],
|
|
|
+ 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"}
|
|
|
// ],
|
|
|
@@ -2075,6 +2063,7 @@ export default {
|
|
|
/** 新增按钮操作 */
|
|
|
handleAdd() {
|
|
|
this.reset();
|
|
|
+ this.clearExpireErrors(); // 清空过期错误提示
|
|
|
|
|
|
this.open = true;
|
|
|
this.title = "添加商品";
|
|
|
@@ -2093,6 +2082,7 @@ export default {
|
|
|
}
|
|
|
var that = this;
|
|
|
this.reset();
|
|
|
+ this.clearExpireErrors(); // 清空过期错误提示
|
|
|
const productId = row.productId || this.ids
|
|
|
getStoreProduct(productId).then(response => {
|
|
|
this.form = response.data;
|
|
|
@@ -2134,29 +2124,7 @@ export default {
|
|
|
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
|
|
|
- }
|
|
|
-
|
|
|
- if(this.form.isGmpAuthPermanent == 1){
|
|
|
- this.gmpAuthValue = true
|
|
|
- }else {
|
|
|
- this.gmpAuthValue = false
|
|
|
- }
|
|
|
|
|
|
const expireFieldMap = [
|
|
|
{ expireKey: 'businessExpire', startKey: 'businessStart', endKey: 'businessEnd' },
|
|
|
@@ -2242,12 +2210,23 @@ export default {
|
|
|
}
|
|
|
this.open = true;
|
|
|
this.title = "修改商品";
|
|
|
+ // 加载数据后立即校验过期状态
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.validateAllExpires();
|
|
|
+ });
|
|
|
});
|
|
|
},
|
|
|
/** 提交按钮 */
|
|
|
submitForm() {
|
|
|
this.$refs["form"].validate(valid => {
|
|
|
if (valid) {
|
|
|
+ // 统一校验所有证书是否过期
|
|
|
+ const expireError = this.checkAllCertificatesExpire();
|
|
|
+ if (expireError) {
|
|
|
+ this.$message.error(expireError);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
let checkBoolean = false
|
|
|
if (this.form.specType === 0) {
|
|
|
this.form.items = [];
|
|
|
@@ -2275,29 +2254,11 @@ export default {
|
|
|
this.form.qualificationCertificateEnd = this.form.qualificationExpire[1];
|
|
|
}
|
|
|
|
|
|
- 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;
|
|
|
- }
|
|
|
-
|
|
|
- if(!!this.gmpAuthValue){
|
|
|
- this.form.isGmpAuthPermanent=1;
|
|
|
- }else {
|
|
|
- this.form.isGmpAuthPermanent=0;
|
|
|
- }
|
|
|
+ // 删除长期有效标识,所有证书都需要填写有效期
|
|
|
+ this.form.isBusinessPermanent = 0;
|
|
|
+ this.form.isLicensePermanent = 0;
|
|
|
+ this.form.isCertificatePermanent = 0;
|
|
|
+ this.form.isGmpAuthPermanent = 0;
|
|
|
|
|
|
// // 组装companyIds
|
|
|
// if (this.form.companyIds != null && this.form.companyIds != undefined) {
|
|
|
@@ -2420,7 +2381,80 @@ export default {
|
|
|
}).catch(() => {
|
|
|
|
|
|
});
|
|
|
+ },
|
|
|
+
|
|
|
+ // 清空所有证书过期错误提示
|
|
|
+ clearExpireErrors() {
|
|
|
+ this.businessExpireError = '';
|
|
|
+ this.licenseExpireError = '';
|
|
|
+ this.certificateExpireError = '';
|
|
|
+ this.gmpAuthExpireError = '';
|
|
|
+ },
|
|
|
+
|
|
|
+ // 统一校验证书有效期(返回错误信息或null)
|
|
|
+ checkCertificateExpire(dates, certName) {
|
|
|
+ if (dates && dates.length === 2) {
|
|
|
+ const endDate = new Date(dates[1]);
|
|
|
+ const today = new Date();
|
|
|
+ today.setHours(0, 0, 0, 0);
|
|
|
+ if (endDate < today) {
|
|
|
+ return `${certName}已过期,请更新证书`;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 检查所有证书是否过期(提交时使用)
|
|
|
+ checkAllCertificatesExpire() {
|
|
|
+ // 按顺序检查,返回第一个过期的证书错误信息
|
|
|
+ let error = null;
|
|
|
+
|
|
|
+ error = this.checkCertificateExpire(this.form.businessExpire, '营业执照');
|
|
|
+ if (error) return error + '后再提交!';
|
|
|
+
|
|
|
+ error = this.checkCertificateExpire(this.form.licenseExpire, '生产许可证');
|
|
|
+ if (error) return error + '后再提交!';
|
|
|
+
|
|
|
+ error = this.checkCertificateExpire(this.form.certificateExpire, '注册证');
|
|
|
+ if (error) return error + '后再提交!';
|
|
|
+
|
|
|
+ error = this.checkCertificateExpire(this.form.gmpAuthExpire, 'GMP/GSP认证');
|
|
|
+ if (error) return error + '后再提交!';
|
|
|
+
|
|
|
+ return null;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 校验所有证书并更新错误提示(用于实时显示)
|
|
|
+ validateAllExpires() {
|
|
|
+ this.validateBusinessExpire(this.form.businessExpire);
|
|
|
+ this.validateLicenseExpire(this.form.licenseExpire);
|
|
|
+ this.validateCertificateExpire(this.form.certificateExpire);
|
|
|
+ this.validateGmpAuthExpire(this.form.gmpAuthExpire);
|
|
|
+ },
|
|
|
+
|
|
|
+ // 验证营业执照有效期
|
|
|
+ validateBusinessExpire(dates) {
|
|
|
+ const error = this.checkCertificateExpire(dates, '营业执照');
|
|
|
+ this.businessExpireError = error ? error + '!' : '';
|
|
|
+ },
|
|
|
+
|
|
|
+ // 验证生产许可证有效期
|
|
|
+ validateLicenseExpire(dates) {
|
|
|
+ const error = this.checkCertificateExpire(dates, '生产许可证');
|
|
|
+ this.licenseExpireError = error ? error + '!' : '';
|
|
|
+ },
|
|
|
+
|
|
|
+ // 验证注册证有效期
|
|
|
+ validateCertificateExpire(dates) {
|
|
|
+ const error = this.checkCertificateExpire(dates, '注册证');
|
|
|
+ this.certificateExpireError = error ? error + '!' : '';
|
|
|
+ },
|
|
|
+
|
|
|
+ // 验证GMP/GSP认证有效期
|
|
|
+ validateGmpAuthExpire(dates) {
|
|
|
+ const error = this.checkCertificateExpire(dates, 'GMP/GSP认证');
|
|
|
+ this.gmpAuthExpireError = error ? error + '!' : '';
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
-</script>
|
|
|
+</script>
|