| <!DOCTYPE HTML> | 
| <html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> | 
| <head> | 
|     <meta charset="utf-8"> | 
|     <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> | 
|     <meta name="renderer" content="webkit|ie-comp|ie-stand"> | 
|     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | 
|     <meta name="viewport" | 
|           content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> | 
|     <meta http-equiv="Cache-Control" content="no-siteapp"/> | 
|     <LINK rel="Bookmark" href="../images/favicon.ico"> | 
|     <!-- 本框架基本脚本和样式 --> | 
|   | 
|     <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> | 
|     <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> | 
|     <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/> | 
|     <style> | 
|         .avatar-uploader .el-upload { | 
|             border: 1px dashed #d9d9d9; | 
|             border-radius: 6px; | 
|             cursor: pointer; | 
|             position: relative; | 
|             overflow: hidden; | 
|         } | 
|         .avatar-uploader .el-upload:hover { | 
|             border-color: #409EFF; | 
|         } | 
|         .avatar-uploader-icon { | 
|             font-size: 28px; | 
|             color: #8c939d; | 
|             width: 178px; | 
|             height: 178px; | 
|             line-height: 178px; | 
|             text-align: center; | 
|         } | 
|         .avatar { | 
|             width: 178px; | 
|             height: 178px; | 
|             display: block; | 
|         } | 
|   | 
|         .avatar-uploader-icon-small { | 
|             font-size: 28px; | 
|             color: #8c939d; | 
|             width: 78px; | 
|             height: 78px; | 
|             line-height: 78px; | 
|             text-align: center; | 
|         } | 
|   | 
|         .avatar-small { | 
|             width: 78px; | 
|             height: 78px; | 
|             display: block; | 
|         } | 
|   | 
|     </style> | 
| </head> | 
| <body> | 
| <div class="ibox-content" id="app" v-cloak> | 
|     <el-form :model="form" :rules="rules" ref="form" label-width="100px" class="demo-form"> | 
|         <el-row> | 
|             <el-col :span="6"> | 
|                 <el-form-item label="检测对象"> | 
|                     <el-input v-model="form.checkedUser" :disabled="true"></el-input> | 
|                 </el-form-item> | 
|             </el-col> | 
|             <el-col :offset="2" :span="6"> | 
|                 <el-form-item label="检测时间" prop="checkTime"> | 
|                     <el-date-picker | 
|                             v-model="form.checkTime" | 
|                             type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" | 
|                             placeholder="选择日期"> | 
|                     </el-date-picker> | 
|                 </el-form-item> | 
|             </el-col> | 
|         </el-row> | 
|         <el-row class="mb-20"> | 
|             <el-col :span="20"> | 
|                 <el-form-item label="检测主图"> | 
|                 <el-upload | 
|                         class="avatar-uploader" | 
|                         action="/admin/multipleUploadFile/doUpload" | 
|                         :show-file-list="false" | 
|                         :on-preview="handlePictureCardPreview" | 
|                         :on-success="handleUploadSuccess" | 
|                 > | 
|                     <img v-if="imageUrl" :src="imageUrlView" class="avatar"> | 
|                     <i v-else class="el-icon-plus avatar-uploader-icon"></i> | 
|                 </el-upload> | 
|   | 
|             </el-col> | 
|         </el-row> | 
|   | 
|   | 
|         <el-tabs type="card"> | 
|             <el-tab-pane label="问题分析"> | 
|                 <el-row> | 
|                     <el-col :span="5"> | 
|                         <el-form-item label="输入问题分析"> | 
|                             <el-input v-model="analysisTitle"></el-input> | 
|                         </el-form-item> | 
|                     </el-col> | 
|                     <el-col :span="4" :offset="1"> | 
|                         <el-button type="primary" @click="addSkinAnalysis">添加问题分析</el-button> | 
|                     </el-col> | 
|                 </el-row> | 
|                 <el-row  v-for="(item, index) in form.analysisDetail"> | 
|                     <p class="el-big-title">问题分析 - {{ item.symptom }} | 
|                         <el-button type="text" @click="delSkinAnalysis(item.symptom)">删除分析</el-button> | 
|                     </p> | 
|                     <el-row> | 
|                         <el-col :offset="2" :span="7"> | 
|                             <el-form-item label="问题图片"> | 
|                                 <el-upload class="avatar-uploader" | 
|                                            action="/admin/multipleUploadFile/doUpload" | 
|                                            :data="{'data': index}" | 
|                                            :show-file-list="false" | 
|                                            :on-preview="handlePictureCardPreviewForAnalysis" | 
|                                            :on-success="handleUploadSuccessForAnalysis" > | 
|                                     <img v-if="item.img" :src="item.imgView" class="avatar-small" /> | 
|                                     <i v-else class="el-icon-plus avatar-uploader-icon-small"></i> | 
|                                 </el-upload> | 
|                         </el-col> | 
|                     </el-row> | 
|                     <el-row> | 
|                         <el-col :offset="2" :span="7"> | 
|                             <el-form-item label="问题占比" :prop="'analysisDetail.'+ index +'.percentage'" :rules="rules.percentage"> | 
|                                 <el-input v-model:number="item.percentage" prop="percentage"></el-input> | 
|                             </el-form-item> | 
|                         </el-col> | 
|                     </el-row> | 
|                     <el-row> | 
|                         <el-col :offset="2" :span="7"> | 
|                             <el-form-item label="描述" :prop="'analysisDetail.'+ index +'.analysis'" :rules="rules.analysis"> | 
|                                 <el-input v-model="item.analysis" type="textarea" :rows="3"></el-input> | 
|                             </el-form-item> | 
|                         </el-col> | 
|                     </el-row> | 
|                 </el-row> | 
|             </el-tab-pane> | 
|             <el-tab-pane label="解决方案"> | 
|                 <el-row> | 
|                     <el-col :span="5"> | 
|                         <el-form-item label="输入症状"> | 
|                             <el-input v-model="symptom"></el-input> | 
|                         </el-form-item> | 
|                     </el-col> | 
|   | 
|                     <el-col :span="4" :offset="1"> | 
|                         <el-button type="primary" @click="addSkinSymptom">添加皮肤症状</el-button> | 
|                     </el-col> | 
|                 </el-row> | 
|   | 
|                 <el-row v-for="(item, index) in form.skinDetails"> | 
|                     <p class="el-big-title">皮肤症状 - {{ item.symptom }} | 
|                         <el-button type="text" @click="delSkinSymptom(item.symptom)">删除症状</el-button> | 
|                     </p> | 
|                     <el-row> | 
|                         <el-col :offset="2" :span="7"> | 
|                             <el-form-item label="症状图片"> | 
|                                 <el-upload class="avatar-uploader" | 
|                                            action="/admin/multipleUploadFile/doUpload" | 
|                                            :data="{'data': index}" | 
|                                            :show-file-list="false" | 
|                                            :on-preview="handlePictureCardPreviewForList" | 
|                                            :on-success="handleUploadSuccessForList" > | 
|                                     <img v-if="item.img" :src="item.imgView" class="avatar-small" /> | 
|                                     <i v-else class="el-icon-plus avatar-uploader-icon-small"></i> | 
|                                 </el-upload> | 
|                         </el-col> | 
|                     </el-row> | 
| <!--                    <el-row>--> | 
| <!--                        <el-col :offset="2" :span="7">--> | 
| <!--                            <el-form-item label="问题占比" :prop="'skinDetails.'+ index +'.percentage'" :rules="rules.percentage">--> | 
| <!--                                <el-input v-model:number="item.percentage" prop="percentage"></el-input>--> | 
| <!--                            </el-form-item>--> | 
| <!--                        </el-col>--> | 
| <!--                    </el-row>--> | 
|                     <el-row> | 
|                         <el-col :offset="2" :span="7"> | 
|                             <el-form-item label="症状描述" :prop="'skinDetails.'+ index +'.analysis'" :rules="rules.analysis"> | 
|                                 <el-input v-model="item.analysis" type="textarea" :rows="3"></el-input> | 
|                             </el-form-item> | 
|                         </el-col> | 
|                         <el-col :offset="1" :span="7"> | 
|                             <el-form-item label="护理建议" :prop="'skinDetails.'+ index +'.solution'" :rules="rules.solution"> | 
|                                 <el-input v-model="item.solution" type="textarea" :rows="3"></el-input> | 
|                             </el-form-item> | 
|                         </el-col> | 
|                     </el-row> | 
|   | 
|                     <el-row> | 
|                         <el-col :offset="2" :span="7"> | 
|                             <el-form-item label="推荐产品" :prop="'skinDetails.'+ index +'.products'" :rules="rules.products"> | 
|                                 <el-select v-model="item.products" multiple filterable default-first-option placeholder="请选择产品"> | 
|                                     <el-option v-for="item1 in options" :key="item1.id" | 
|                                                :label="item1.title" | 
|                                                :value="item1.id"> | 
|                                     </el-option> | 
|                                 </el-select> | 
|                             </el-form-item> | 
|                         </el-col> | 
|                     </el-row> | 
|                 </el-row> | 
|             </el-tab-pane> | 
|         </el-tabs> | 
|   | 
|         <el-form-item class="foot_bar"> | 
|             <el-button :loading="submiting" type="primary" @click="submitForm('form')" >保存</el-button> | 
|             <el-button @click="closeForm()">关闭</el-button> | 
|         </el-form-item> | 
|     </el-form> | 
| </div> | 
| </div> | 
| <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> | 
| <script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script> | 
| <script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> | 
| <script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> | 
| <script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> | 
| <script type="text/javascript"> | 
|   | 
|     // { | 
|     //     symptom : "", | 
|     //         desc : "", | 
|     //     advice : "", | 
|     //     products : "" | 
|     // } | 
|   | 
|     /* | 
|         console.log('加载服务器数据'); | 
|         var _this = this; | 
|         AjaxProxy.requst({ | 
|             app: _this, | 
|             async: false, | 
|             url: basePath + '/admin/projService/findProjServiceInfo?id=' + id, | 
|             callback: function (data) { | 
|   | 
|             } | 
|         }); | 
|     */ | 
|     const priceValidator = (rule, value, callback) =>{ | 
|         const reg =  /(?!^0*(\.0{1,2})?$)^\d{1,13}(\.\d{1,2})?$/; | 
|         const flag = reg.test(value); | 
|         if (flag) { | 
|             callback() | 
|         } else { | 
|             callback(new Error('请输入保留两位以内的小数')) | 
|         } | 
|     }; | 
|   | 
|     var vipId = $.query.get("vipId"); | 
|     var id = $.query.get("id"); | 
|     var app = new Vue({ | 
|         el: '#app', | 
|         data: { | 
|             symptom : "", | 
|             analysisTitle : "", | 
|             submiting : false, | 
|             options: [], | 
|             form : { | 
|                 id : "", | 
|                 skinDetails : [], | 
|                 analysisDetail : [], | 
|                 checkTime : "", | 
|                 checkedUser : "", | 
|                 userId : "", | 
|                 ext1 : "", | 
|             }, | 
|             rules:{ | 
|                 checkTime : [ | 
|                     { required: true, message: '请选择日期', trigger: 'blur' } | 
|                 ], | 
|                 percentage : [ | 
|                     { required: true, message: '请输入保留两位以内的小数', trigger: 'blur' }, | 
|                     { validator : priceValidator, trigger: 'blur' } | 
|                 ], | 
|                 analysis : [ | 
|                     { required: true, message: '请输入症状描述', trigger: 'blur' } | 
|                 ], | 
|                 solution : [ | 
|                     { required: true, message: '请输入护理建议', trigger: 'blur' } | 
|                 ], | 
|                 products : [ | 
|                     { required: true, message: '请选择推荐产品', trigger: 'change' } | 
|                 ], | 
|             }, | 
|             //产品主图上传相关变量 | 
|             dialogVisible: false, | 
|             imageUrlView:'', | 
|             imageUrl:'', | 
|         }, | 
|         created: function () { | 
|             this.loadInfo(); | 
|   | 
|             if (id != '' || id == undefined) { | 
|                 this.initData(id); | 
|             } | 
|         }, | 
|         mounted: function () { | 
|         }, | 
|         methods: { | 
|             loadInfo: function () { | 
|                 let _this = this; | 
|                 AjaxProxy.requst({ | 
|                     app: _this, | 
|                     async: false, | 
|                     url: basePath + '/admin/vipInfo/findUserById?id=' + vipId, | 
|                     callback: function (data) { | 
|                         _this.form.checkedUser = data.rows[0].vipName; | 
|                         _this.form.userId = data.rows[0].id; | 
|                     } | 
|                 }); | 
|   | 
|                 AjaxProxy.requst({ | 
|                     app: _this, | 
|                     async: false, | 
|                     url: basePath + '/admin/shopProduct/showList?limit=999', | 
|                     callback: function (data) { | 
|                         console.log(data); | 
|                         _this.options = data.rows; | 
|                     } | 
|                 }); | 
|             }, | 
|             initData : function(id) { | 
|                 var _this = this; | 
|                 _this.form.id = id; | 
|                 AjaxProxy.requst({ | 
|                     app: _this, | 
|                     async: false, | 
|                     url: basePath + '/admin/sysSkinCheckRecord/findSkinCheckInfoById?id=' + id, | 
|                     callback: function (data) { | 
|                         var result = data.mapInfo.data; | 
|                         console.log(result) | 
|                         _this.form.checkTime = result.checkTime; | 
|                         _this.imageUrl = result.ext1; | 
|                         _this.imageUrlView = result.ext1; | 
|                         result.skinDetails.forEach((item) => { | 
|                             item.products = item.productIds.split(",").map(Number); | 
|                             item.imgView = item.img; | 
|                             _this.form.skinDetails.push(item); | 
|                         }); | 
|   | 
|                         result.analysisDetail.forEach((item) => { | 
|                             item.imgView = item.img; | 
|                             _this.form.analysisDetail.push(item); | 
|                         }); | 
|                     } | 
|                 }); | 
|             }, | 
|             loadData : function() { | 
|                 if (id == "" || id == undefined) { | 
|                     return; | 
|                 } | 
|   | 
|                 AjaxProxy.requst({ | 
|                     app: _this, | 
|                     async: false, | 
|                     url: basePath + '/admin/shopProduct/showList?limit=999', | 
|                     callback: function (data) { | 
|                         console.log(data); | 
|                         _this.options = data.rows; | 
|                     } | 
|                 }); | 
|             }, | 
|             handlePictureCardPreview(file){ | 
|                 this.dialogImageUrl = file.url; | 
|                 this.dialogVisible = true; | 
|             }, | 
|             handleUploadSuccess(res, file) { | 
|                 this.imageUrlView = URL.createObjectURL(file.raw); | 
|                 this.imageUrl = res.path; | 
|             }, | 
|             handleRemove() { | 
|                 this.imageUrl = ''; | 
|             }, | 
|             handlePictureCardPreviewForList(file){ | 
|                 this.dialogImageUrl = file.url; | 
|                 this.dialogVisible = true; | 
|             }, | 
|             handleUploadSuccessForList(res, file) { | 
|                 this.form.skinDetails[res.index].imgView = URL.createObjectURL(file.raw); | 
|                 this.form.skinDetails[res.index].img = res.path; | 
|                 Vue.set(this.form.skinDetails,res.index,this.form.skinDetails[res.index]) | 
|             }, | 
|             handleRemoveForList() { | 
|                 this.imageUrl = ''; | 
|             }, | 
|             handlePictureCardPreviewForAnalysis(file){ | 
|                 this.dialogImageUrl = file.url; | 
|                 this.dialogVisible = true; | 
|             }, | 
|             handleUploadSuccessForAnalysis(res, file) { | 
|                 this.form.analysisDetail[res.index].imgView = URL.createObjectURL(file.raw); | 
|                 this.form.analysisDetail[res.index].img = res.path; | 
|                 Vue.set(this.form.analysisDetail,res.index,this.form.analysisDetail[res.index]) | 
|             }, | 
|             handleRemoveForAnalysis() { | 
|                 this.imageUrl = ''; | 
|             }, | 
|             addSkinSymptom : function() { | 
|                 let _this = this; | 
|                 var symptomTitle = _this.symptom; | 
|   | 
|                 if (symptomTitle == '') { | 
|                     _this.$notify({ | 
|                         title: '提示', | 
|                         message: '请输入皮肤症状', | 
|                         type: 'warning' | 
|                     }); | 
|                     return; | 
|                 } | 
|   | 
|                 var symptom = {}; | 
|                 symptom.symptom = symptomTitle; | 
|                 let symptomList = _this.form.skinDetails; | 
|                 if (symptomList.length > 0) { | 
|                     var flag = true; | 
|                     for (var i = 0; i < symptomList.length; i++) { | 
|                         if(symptomList[i].symptom == symptomTitle) { | 
|                             flag = false; | 
|                             break; | 
|                         } | 
|                     } | 
|                     if (flag) { | 
|                         symptomList.push(symptom); | 
|                     } | 
|                 } else { | 
|                     symptomList.push(symptom); | 
|                 } | 
|             }, | 
|             delSkinSymptom : function (value) { | 
|                 let _this = this; | 
|                 var symptomTitle = value; | 
|                 let symptomList = _this.form.skinDetails; | 
|                 if (symptomList.length > 1) { | 
|                     for (var i = 0; i < symptomList.length; i++) { | 
|                         if(symptomList[i].symptom == symptomTitle) { | 
|                             console.log(symptomList[i].symptom) | 
|                             symptomList.splice(i, 1); | 
|                             break; | 
|                         } | 
|                     } | 
|                 } else { | 
|                     symptomList.splice(0, 1); | 
|                 } | 
|             }, | 
|             addSkinAnalysis : function() { | 
|                 let _this = this; | 
|                 var analysisTitle = _this.analysisTitle; | 
|   | 
|                 if (analysisTitle == '') { | 
|                     _this.$notify({ | 
|                         title: '提示', | 
|                         message: '请输入问题分析标题', | 
|                         type: 'warning' | 
|                     }); | 
|                     return; | 
|                 } | 
|   | 
|                 var analysis = {}; | 
|                 analysis.symptom = analysisTitle; | 
|                 let analysisList = _this.form.analysisDetail; | 
|                 if (analysisList.length > 0) { | 
|                     var flag = true; | 
|                     for (var i = 0; i < analysisList.length; i++) { | 
|                         if(analysisList[i].symptom == analysisTitle) { | 
|                             flag = false; | 
|                             break; | 
|                         } | 
|                     } | 
|                     if (flag) { | 
|                         analysisList.push(analysis); | 
|                     } | 
|                 } else { | 
|                     analysisList.push(analysis); | 
|                 } | 
|             }, | 
|             delSkinAnalysis : function(value) { | 
|                 let _this = this; | 
|                 var analysisTitle = value; | 
|                 let analysisList = _this.form.analysisDetail; | 
|                 if (analysisList.length > 1) { | 
|                     for (var i = 0; i < analysisList.length; i++) { | 
|                         if(analysisList[i].symptom == analysisTitle) { | 
|                             analysisList.splice(i, 1); | 
|                             break; | 
|                         } | 
|                     } | 
|                 } else { | 
|                     analysisList.splice(0, 1); | 
|                 } | 
|             }, | 
|             submitForm : function (formName) { | 
|                 let _this = this; | 
|                 var params = _this.form; | 
|   | 
|                 var flag = false; | 
|                 _this.$refs[formName].validate((valid) => { | 
|                     if (!valid) { | 
|                         console.log('error submit!!'); | 
|                         flag = true; | 
|                         return; | 
|                     } | 
|                 }); | 
|                 if (flag) { | 
|                     return; | 
|                 } | 
|   | 
|                 if (_this.imageUrl == '' || _this.imageUrl == undefined) { | 
|                     _this.$notify({ | 
|                         title: '提示', | 
|                         message: '请添加主图', | 
|                         type: 'warning' | 
|                     }); | 
|                     return; | 
|                 } | 
|   | 
|                 for(var i = 0; i < params.skinDetails.length; i++) { | 
|                     params.skinDetails[i].productIds = params.skinDetails[i].products.join(","); | 
|                     params.skinDetails[i].t1=1; | 
|                 } | 
|   | 
|                 for(var i = 0; i < params.analysisDetail.length; i++) { | 
|                     params.analysisDetail[i].t1=2; | 
|                 } | 
|                 params.ext1 = _this.imageUrl; | 
|                 _this.submiting = true; | 
|                 console.log(params) | 
|                 AjaxProxy.requst({ | 
|                     app: _this, | 
|                     data: params, | 
|                     url: basePath + '/admin/sysSkinCheckRecord/addSysSkinCheckRecord', | 
|                     callback: function (data) { | 
|                         _this.$message({ | 
|                             message: "保存成功", | 
|                             type: 'success', | 
|                             duration : 1000, | 
|                             onClose: function () { | 
|                                 _this.closeForm(); | 
|                             } | 
|                         }); | 
|                         if (parent.myGrid) { | 
|                             parent.myGrid.serchData(); | 
|                         } | 
|   | 
|                         if (parent.app) { | 
|                             parent.app.skinCheckQuery(); | 
|                         } | 
|                     } | 
|                 }); | 
|             }, | 
|             closeForm : function () { | 
|                 parent.layer.close(parent.layer.getFrameIndex(window.name)); | 
|             } | 
|         }, | 
|         filters: | 
|             { | 
|                 format: function (value, patten) { | 
|                     if (!value) return ''; | 
|                     return MTools.formatDate(value, patten) | 
|                 }, | 
|             }, | 
|     }) | 
| </script> | 
| </body> | 
| </html> |