|
@@ -27,13 +27,10 @@ const app = new Vue({
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
-
|
|
|
productId: 0,
|
|
|
commodityType: 2, // 商品类型 1: 产品 2: 仪器
|
|
|
shopId: GLOBAL_SHOP_ID,
|
|
|
-
|
|
|
action: $('#coreServer').val() + '/tools/image/upload/multi',
|
|
|
-
|
|
|
formData: {
|
|
|
// 仪器名称
|
|
|
name: '',
|
|
@@ -61,26 +58,30 @@ const app = new Vue({
|
|
|
producePlace: '',
|
|
|
// 上市时间
|
|
|
marketTime: '',
|
|
|
- // 公司/厂商
|
|
|
+ // 供应商
|
|
|
company: '',
|
|
|
// NMPA认证时间
|
|
|
nmpaTime: '',
|
|
|
// 仪器认证
|
|
|
authImageList: '',
|
|
|
- // 适应人群
|
|
|
+ // 适应证
|
|
|
adaptiveMan: '',
|
|
|
// 不适应人群
|
|
|
unAdaptiveMan: '',
|
|
|
- // 术前术后
|
|
|
+ // 注意事项
|
|
|
aroundOperation: '',
|
|
|
// 效果展示图片列表
|
|
|
- displayImageList: '',
|
|
|
+ // displayImageList: '',
|
|
|
// 常见问题
|
|
|
questionList: '',
|
|
|
// 仪器类别
|
|
|
typeId: '',
|
|
|
// 仪器状态
|
|
|
status: 1,
|
|
|
+ // seo关键词
|
|
|
+ seoKeyword: '',
|
|
|
+ // 仪器链接
|
|
|
+ productLink: '',
|
|
|
},
|
|
|
rules: {
|
|
|
// 仪器名称
|
|
@@ -91,49 +92,49 @@ const app = new Vue({
|
|
|
discription: [{required: true, message: '仪器概述不能为空', trigger: ['change', 'blur']}],
|
|
|
// 仪器图片
|
|
|
image: [{required: true, message: '请上传仪器图片', trigger: 'change'}],
|
|
|
- // 认证链接
|
|
|
- authLink: [{required: true, message: '请输入认证链接', trigger: ['change', 'blur']}],
|
|
|
- // 认证二维码
|
|
|
- authQrCode: [{required: true, message: '请上传证二维码', trigger: 'change'}],
|
|
|
+ // 产品链接
|
|
|
+ productLink: [{required: true, message: '产品链接不能为空', trigger: ['change', 'blur']}],
|
|
|
// 产仪器参数
|
|
|
paramList: [{required: true, validator: validateParamList, trigger: 'change'}],
|
|
|
- // 仪器优点
|
|
|
- advantage: [{required: true, message: '仪器优点不能为空', trigger: 'change'}],
|
|
|
- // 仪器缺点
|
|
|
- disadvantage: [{required: true, message: '仪器缺点不能为空', trigger: 'change'}],
|
|
|
- // 仪器原理
|
|
|
- principle: [{required: true, message: '仪器原理不能为空', trigger: 'change'}],
|
|
|
- // 品牌
|
|
|
- brand: [{required: true, message: '请输入仪器品牌', trigger: ['change', 'blur']}],
|
|
|
- // 产地
|
|
|
- producePlace: [{required: true, message: '仪器产地不能为空', trigger: ['change', 'blur']}],
|
|
|
- // 上市时间
|
|
|
- marketTime: [{required: true, message: '请填写上市时间', trigger: 'change'}],
|
|
|
- // 公司/厂商
|
|
|
- company: [{required: true, message: '公司/厂商不能为空', trigger: ['change', 'blur']}],
|
|
|
- // NMPA认证时间
|
|
|
- nmpaTime: [{required: true, message: '请填写NMPA认证时间', trigger: 'change'}],
|
|
|
- // 仪器认证
|
|
|
- authImageList: [{required: true, message: '请上传仪器认证图片', trigger: 'change'}],
|
|
|
- // 适应人群
|
|
|
- adaptiveMan: [{required: true, message: '适应人群不能为空', trigger: 'change'}],
|
|
|
- // 不适应人群
|
|
|
- unAdaptiveMan: [{required: true, message: '不适应人群不能为空', trigger: 'change'}],
|
|
|
- // 术前术后
|
|
|
- aroundOperation: [{required: true, message: '术前术后不能为空', trigger: 'change'}],
|
|
|
- // 效果展示图片列表
|
|
|
- displayImageList: [{required: true, message: '请上传效果展示图片', trigger: 'change'}],
|
|
|
- // 常见问题
|
|
|
- questionList: [{required: true, validator: validateQuestionList, trigger: 'change'}],
|
|
|
- // 仪器类别
|
|
|
- typeId: [{required: true, message: '请选择仪器类别', trigger: 'change'}],
|
|
|
- // 仪器状态
|
|
|
- status: [{required: true, message: '请选择仪器状态', trigger: 'change'}],
|
|
|
+ // // 认证链接
|
|
|
+ // authLink: [{required: true, message: '请输入认证链接', trigger: ['change', 'blur']}],
|
|
|
+ // // 认证二维码
|
|
|
+ // authQrCode: [{required: true, message: '请上传证二维码', trigger: 'change'}],
|
|
|
+ // // 仪器优点
|
|
|
+ // advantage: [{required: true, message: '仪器优点不能为空', trigger: 'change'}],
|
|
|
+ // // 仪器缺点
|
|
|
+ // disadvantage: [{required: true, message: '仪器缺点不能为空', trigger: 'change'}],
|
|
|
+ // // 仪器原理
|
|
|
+ // principle: [{required: true, message: '仪器原理不能为空', trigger: 'change'}],
|
|
|
+ // // 品牌
|
|
|
+ // brand: [{required: true, message: '请输入仪器品牌', trigger: ['change', 'blur']}],
|
|
|
+ // // 产地
|
|
|
+ // producePlace: [{required: true, message: '仪器产地不能为空', trigger: ['change', 'blur']}],
|
|
|
+ // // 上市时间
|
|
|
+ // marketTime: [{required: true, message: '请填写上市时间', trigger: 'change'}],
|
|
|
+ // // 供应商
|
|
|
+ // company: [{required: true, message: '公司/厂商不能为空', trigger: ['change', 'blur']}],
|
|
|
+ // // NMPA认证时间
|
|
|
+ // nmpaTime: [{required: true, message: '请填写NMPA认证时间', trigger: 'change'}],
|
|
|
+ // // 仪器认证
|
|
|
+ // authImageList: [{required: true, message: '请上传仪器认证图片', trigger: 'change'}],
|
|
|
+ // // 适应证
|
|
|
+ // adaptiveMan: [{required: true, message: '适应人群不能为空', trigger: 'change'}],
|
|
|
+ // // 不适应人群
|
|
|
+ // unAdaptiveMan: [{required: true, message: '不适应人群不能为空', trigger: 'change'}],
|
|
|
+ // // 术前术后
|
|
|
+ // aroundOperation: [{required: true, message: '术前术后不能为空', trigger: 'change'}],
|
|
|
+ // // 效果展示图片列表
|
|
|
+ // displayImageList: [{required: true, message: '请上传效果展示图片', trigger: 'change'}],
|
|
|
+ // // 常见问题
|
|
|
+ // questionList: [{required: true, validator: validateQuestionList, trigger: 'change'}],
|
|
|
+ // // 仪器类别
|
|
|
+ // typeId: [{required: true, message: '请选择仪器类别', trigger: 'change'}],
|
|
|
+ // // 仪器状态
|
|
|
+ // status: [{required: true, message: '请选择仪器状态', trigger: 'change'}],
|
|
|
},
|
|
|
-
|
|
|
// 仪器类别列表
|
|
|
typeList: [],
|
|
|
-
|
|
|
// 仪器参数
|
|
|
// paramList: [],
|
|
|
paramEmptyList: [], // 占位
|
|
@@ -147,6 +148,11 @@ const app = new Vue({
|
|
|
displayImageList: [], // 初始化列表
|
|
|
dialogVisible: false,
|
|
|
dialogImageUrl: '',
|
|
|
+ // 日期选择格式
|
|
|
+ marketTimeType: 'year',
|
|
|
+ nmpaTimeType: 'year',
|
|
|
+ // 空缺数量
|
|
|
+ emptyNum: ''
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -161,7 +167,7 @@ const app = new Vue({
|
|
|
const filter = this.questionEmptyList.filter(item => item.question !== '' && item.answer !== '')
|
|
|
if (filter.length > 0) return filter.map(item => ({question: item.question, answer: item.answer}))
|
|
|
return []
|
|
|
- },
|
|
|
+ }
|
|
|
},
|
|
|
|
|
|
mounted: function mounted() {
|
|
@@ -171,7 +177,7 @@ const app = new Vue({
|
|
|
|
|
|
created() {
|
|
|
this.getTypeList();
|
|
|
- this.watchArrayStatus(['paramList', 'questionList', 'authImageList', 'displayImageList']);
|
|
|
+ this.watchArrayStatus(['paramList', 'questionList', 'authImageList']);
|
|
|
this.getProductFormData();
|
|
|
},
|
|
|
|
|
@@ -191,8 +197,59 @@ const app = new Vue({
|
|
|
this.socrllToErrorInput()
|
|
|
return;
|
|
|
}
|
|
|
- this.saveFormData()
|
|
|
+ this.emptyNum = this.validateEmptyParams(this.formData)
|
|
|
+ if( this.emptyNum> 0 && this.formData.status === 1){
|
|
|
+ this.$confirm('您还剩余' + this.emptyNum + '项未完善,将会导致用户对您产品/仪器的认识度不够,确认是否提交?', '提示', {
|
|
|
+ confirmButtonText: '是',
|
|
|
+ cancelButtonText: '否'
|
|
|
+ }).then(() => {
|
|
|
+ this.saveFormData()
|
|
|
+ })
|
|
|
+ } else{
|
|
|
+ this.saveFormData()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ // 校验空参数个数
|
|
|
+ validateEmptyParams(params){
|
|
|
+ const keys = Object.keys(params)
|
|
|
+ console.log(params)
|
|
|
+ let count = 0
|
|
|
+ keys.forEach(key => {
|
|
|
+ if(typeof params[key] === "string"){
|
|
|
+ if(params[key] === '' || params[key].trim().length <= 0){
|
|
|
+ count ++
|
|
|
+ }
|
|
|
+ }else if(typeof params[key] === 'number'){
|
|
|
+ console.log(key)
|
|
|
+ }else if(typeof params[key] === 'object'){
|
|
|
+ if(params[key] instanceof Array){
|
|
|
+ if(params[key].length <= 0){
|
|
|
+ count ++
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ if(params[key] === null){
|
|
|
+ count ++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(typeof params[key] === 'undefined'){
|
|
|
+ count ++
|
|
|
+ }
|
|
|
})
|
|
|
+ return count;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 裁切时间格式
|
|
|
+ sliceDateStr(time, type) {
|
|
|
+ if(!time) return ''
|
|
|
+ time = dateFormat(time, 'yyyy-MM-dd')
|
|
|
+ if (type === 'year') {
|
|
|
+ time = time.slice(0, 4)
|
|
|
+ } else if (type === 'month') {
|
|
|
+ time = time.slice(0, 7)
|
|
|
+ }
|
|
|
+ return time
|
|
|
},
|
|
|
|
|
|
// 保存表单数据
|
|
@@ -204,13 +261,26 @@ const app = new Vue({
|
|
|
commodityType: this.commodityType,
|
|
|
paramList: JSON.stringify(this.paramList),
|
|
|
questionList: JSON.stringify(this.questionList),
|
|
|
- marketTime: dateFormat(this.formData.marketTime, 'yyyy-MM-dd'),
|
|
|
- nmpaTime: dateFormat(this.formData.nmpaTime, 'yyyy-MM-dd'),
|
|
|
+ // marketTime: dateFormat(this.formData.marketTime, 'yyyy-MM-dd'),
|
|
|
+ // nmpaTime: dateFormat(this.formData.nmpaTime, 'yyyy-MM-dd'),
|
|
|
authImageList: this.authImageList.map(image => (image.response ? image.response.data : image.url)),
|
|
|
- displayImageList: this.displayImageList.map(image => (image.response ? image.response.data : image.url))
|
|
|
+ // displayImageList: this.displayImageList.map(image => (image.response ? image.response.data : image.url))
|
|
|
};
|
|
|
|
|
|
+ /* 处理时间 */
|
|
|
+ if(this.formData.marketTime){
|
|
|
+ params.marketTime = this.sliceDateStr(this.formData.marketTime, this.marketTimeType)
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 处理时间 */
|
|
|
+ if(this.formData.nmpaTime){
|
|
|
+ params.nmpaTime = this.sliceDateStr(this.formData.nmpaTime, this.nmpaTimeType)
|
|
|
+ }
|
|
|
+
|
|
|
if (this.productId) params.productId = this.productId;
|
|
|
+
|
|
|
+ params.emptyNum = this.emptyNum;
|
|
|
+
|
|
|
console.log(params);
|
|
|
SupplierApi.ShopBaikeProductSave(params, function (res) {
|
|
|
if (res.code === 0) {
|
|
@@ -224,6 +294,18 @@ const app = new Vue({
|
|
|
})
|
|
|
},
|
|
|
|
|
|
+ // 获取时间类型(年月日)
|
|
|
+ getTimeType(time){
|
|
|
+ time = time.split('-')
|
|
|
+ if(time.length === 1){
|
|
|
+ return 'year'
|
|
|
+ }else if(time.length === 2){
|
|
|
+ return 'month'
|
|
|
+ }else {
|
|
|
+ return 'date'
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
initFormData: function(formData){
|
|
|
console.log(formData);
|
|
|
// 初始化this.formData
|
|
@@ -235,6 +317,11 @@ const app = new Vue({
|
|
|
this.formData[key] = len > 0 ? len : ''
|
|
|
} else if(['marketTime', 'nmpaTime'].includes(key)){
|
|
|
this.formData[key] = new Date(formData[key])
|
|
|
+ if(key === 'marketTime'){
|
|
|
+ this.marketTimeType = this.getTimeType(formData[key])
|
|
|
+ }else{
|
|
|
+ this.nmpaTimeType = this.getTimeType(formData[key])
|
|
|
+ }
|
|
|
}
|
|
|
else {
|
|
|
this.formData[key] = formData[key];
|
|
@@ -245,7 +332,7 @@ const app = new Vue({
|
|
|
this.resetEmptyListData(formData.paramList, formData.questionList);
|
|
|
// 处理图片
|
|
|
this.authImageList = formData.authImageList.map(image => ({ url: image, name: 'authImage'}))
|
|
|
- this.displayImageList = formData.displayImageList.map(image => ({ url: image, name: 'authImage'}))
|
|
|
+ // this.displayImageList = formData.displayImageList.map(image => ({ url: image, name: 'authImage'}))
|
|
|
},
|
|
|
|
|
|
|