29 changed files with 3707 additions and 293 deletions
			
			
		| @ -0,0 +1,223 @@ | |||||
|  | <template> | ||||
|  |   <el-dialog | ||||
|  |     class="oklens-add-order" | ||||
|  |     :close-on-click-modal="false" | ||||
|  |     :visible.sync="visible" | ||||
|  |     :width="dataForm.title==='新增' || dataForm.title === '换片' || dataForm.title === '补录' || dataForm.title === '借片' ? '60%' : '30%'" | ||||
|  |     :title="dataForm.title" | ||||
|  |   > | ||||
|  |     <el-form ref="dataForm" :model="dataForm" :rules="dataRule"> | ||||
|  |       <el-form-item :label="dataForm.title === '借片' ? '借片日期' : '订片日期'" label-width="90px" prop="dpDate"> | ||||
|  |         <el-date-picker v-model="dataForm.dpDate" type="date" placeholder="请选择订片日期" value-format="yyyy-MM-dd" /> | ||||
|  |       </el-form-item> | ||||
|  |       <el-form-item :label="dataForm.title === '借片' ? '借片医生':'订片医生'" label-width="90px" prop="dpDoctorId"> | ||||
|  |         <el-select v-model="dataForm.dpDoctorId" placeholder="请选择订片医生" clearable> | ||||
|  |           <el-option v-for="(item,index) in doctorList " :key="index" :value="item.doctorId" :label="item.doctorName" /> | ||||
|  |         </el-select> | ||||
|  |       </el-form-item> | ||||
|  |       <div v-if="dataForm.title==='新增' || dataForm.title === '换片' || dataForm.title === '补录' || dataForm.title === '借片' || dataForm.title === '离焦软镜'" class="eyeType"> | ||||
|  |         <div class="rightEye"> | ||||
|  |           <p class="rightEye-text">右眼</p> | ||||
|  |           <left-right-eye ref="rightEyeRef" :brand-list="brandList" eye-type="OD" :title="dataForm.title" :patient-id-number="patientIdNumber" :tab-title="tabTitle" /> | ||||
|  |         </div> | ||||
|  |         <div class="leftEye"> | ||||
|  |           <p class="leftEye-text">左眼</p> | ||||
|  |           <left-right-eye ref="leftEyeRef" :brand-list="brandList" eye-type="OS" :title="dataForm.title" :patient-id-number="patientIdNumber" :tab-title="tabTitle" /> | ||||
|  |         </div> | ||||
|  |       </div> | ||||
|  |       <left-right-eye v-if="dataForm.title==='编辑' || dataForm.title==='编辑补录' || dataForm.title==='编辑借片' || dataForm.title==='编辑离焦软镜'" ref="editLeftRightEye" :brand-list="brandList" :title="dataForm.title" :tab-title="tabTitle" /> | ||||
|  |     </el-form> | ||||
|  |     <template slot="footer"> | ||||
|  |       <el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||
|  |       <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> | ||||
|  |     </template> | ||||
|  |   </el-dialog> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import debounce from 'lodash/debounce' | ||||
|  | import leftRightEye from './left-right-eye.vue' | ||||
|  | export default { | ||||
|  |   components: { | ||||
|  |     leftRightEye | ||||
|  |   }, | ||||
|  |   props: { | ||||
|  |     brandList: { | ||||
|  |       type: Array, | ||||
|  |       default: () => [] | ||||
|  |     }, | ||||
|  |     patientIdNumber: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     }, | ||||
|  |     doctorList: { | ||||
|  |       type: Array, | ||||
|  |       default: () => [] | ||||
|  |     }, | ||||
|  |     tabTitle: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       visible: false, | ||||
|  |       dataForm: { | ||||
|  |         dpDoctorId: '', | ||||
|  |         dpDate: '', | ||||
|  |         patientIdNumber: this.patientIdNumber, | ||||
|  |         drgsName: window.localStorage.getItem('identity') | ||||
|  |       }, | ||||
|  |       ISCRTForm: false | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   computed: { | ||||
|  |     dataRule() { | ||||
|  |       return { | ||||
|  |         dpDoctorId: [ | ||||
|  |           { required: true, message: '请选择订片医生', trigger: 'change' } | ||||
|  |         ], | ||||
|  |         dpDate: [ | ||||
|  |           { required: true, message: '请选择订片日期', trigger: 'change' } | ||||
|  |         ] | ||||
|  | 
 | ||||
|  |       } | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   created() { | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     init() { | ||||
|  |       this.visible = true | ||||
|  |       this.$nextTick(() => { | ||||
|  |         this.$refs.dataForm.resetFields() // 重置表单 | ||||
|  |         if (this.dataForm.title === '新增' || this.dataForm.title === '借片' || this.dataForm.title === '换片' || this.dataForm.title === '补录') { | ||||
|  |           this.$refs.rightEyeRef.leftRightInit() | ||||
|  |           this.$refs.leftEyeRef.leftRightInit() | ||||
|  |         } else if (this.dataForm.title === '编辑' || this.dataForm.title === '编辑补录') { | ||||
|  |           this.$refs.editLeftRightEye.leftRightInit() | ||||
|  |         } | ||||
|  |         if (this.dataForm.id) { | ||||
|  |           this.getInfo() | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       this.dataForm.dpDoctorId = '' | ||||
|  |       this.dataForm.dpDate = '' | ||||
|  |     }, | ||||
|  |     // 获取信息 | ||||
|  |     getInfo() { | ||||
|  |       this.$http.get(`/dp/getDpInfo/${this.dataForm.id}`).then(({ data: res }) => { | ||||
|  |         if (res.code !== 0) { | ||||
|  |           return this.$message.error(res.msg) | ||||
|  |         } | ||||
|  | 
 | ||||
|  |         this.dataForm = { | ||||
|  |           ...this.dataForm, | ||||
|  |           ...res.data | ||||
|  |         } | ||||
|  |         this.ISCRTForm = res.data.flag | ||||
|  |         this.$refs.editLeftRightEye.ISCRTForm = this.ISCRTForm | ||||
|  |         const eyeData = JSON.parse(JSON.stringify(res.data)) | ||||
|  |         delete eyeData.dpDate | ||||
|  |         delete eyeData.dpDoctorId | ||||
|  |         delete eyeData.dpDoctorName | ||||
|  |         this.$refs.editLeftRightEye.dataForm = { ...eyeData } | ||||
|  |         this.$refs.editLeftRightEye.getBrandColorList('', res.data.brandId, '编辑') | ||||
|  |       }).catch(() => {}) | ||||
|  |     }, | ||||
|  | 
 | ||||
|  |     // 表单提交 320321188808123330    18888888888 | ||||
|  |     dataFormSubmitHandle: debounce(function() { | ||||
|  |       this.$refs.dataForm.validate((valid) => { | ||||
|  |         if (!valid) { | ||||
|  |           return false | ||||
|  |         } | ||||
|  |         if (this.dataForm.title === '新增' || this.dataForm.title === '借片' || this.dataForm.title === '换片' || this.dataForm.title === '补录') { | ||||
|  |           let flag = 0 | ||||
|  |           this.$refs.rightEyeRef.validateFun() | ||||
|  |           if (this.$refs.rightEyeRef.validateFlag) { | ||||
|  |             flag++ | ||||
|  |             this.dpFun({ ...this.dataForm, ...this.$refs.rightEyeRef.dataForm }) | ||||
|  |           } | ||||
|  | 
 | ||||
|  |           this.$refs.leftEyeRef.validateFun() | ||||
|  |           if (this.$refs.leftEyeRef.validateFlag) { | ||||
|  |             flag++ | ||||
|  |             this.dpFun({ ...this.dataForm, ...this.$refs.leftEyeRef.dataForm }) | ||||
|  |           } | ||||
|  |           flag === 0 ? this.$message.error('请填写右眼或左眼完整信息') : '' | ||||
|  |         } else if (this.dataForm.title === '编辑' || this.dataForm.title === '编辑补录' || this.dataForm.title === '编辑借片' || this.dataForm.title === '编辑离焦软镜') { | ||||
|  |           this.$refs.editLeftRightEye.validateFun() | ||||
|  |           this.dpFun({ ...this.dataForm, ...this.$refs.editLeftRightEye.dataForm }) | ||||
|  |         } | ||||
|  |       }) | ||||
|  |     }, 1000, { leading: true, trailing: false }), | ||||
|  |     // 订片接口封装 | ||||
|  |     dpFun(data) { | ||||
|  |       const url = this.dataForm.title === '新增' || this.dataForm.title === '编辑' || this.dataForm.title === '编辑补录' || this.dataForm.title === '编辑借片' || this.dataForm.title === '编辑离焦软镜' ? '/dp' : (this.dataForm.title === '换片' ? '/dp/replace' : (this.dataForm.title === '补录' ? '/dp/addRecord' : (this.dataForm.title === '借片' ? '/dp/borrow' : ''))) | ||||
|  |       this.$http[!this.dataForm.id ? 'post' : 'put'](url, data).then(({ data: res }) => { | ||||
|  |         if (res.code !== 0) { | ||||
|  |           return this.$message.error(res.msg) | ||||
|  |         } | ||||
|  |         this.$message({ | ||||
|  |           message: this.$t('prompt.success'), | ||||
|  |           type: 'success', | ||||
|  |           duration: 500, | ||||
|  |           onClose: () => { | ||||
|  |             this.visible = false | ||||
|  |             this.$emit('refreshDataList') | ||||
|  |           } | ||||
|  |         }) | ||||
|  |       }).catch(() => {}) | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | .oklens-add-order { | ||||
|  |   .eyeType { | ||||
|  |     margin-left:90px; | ||||
|  |     display: flex; | ||||
|  |     .rightEye { | ||||
|  |       margin-right: 16px; | ||||
|  |     } | ||||
|  |     .rightEye,.leftEye { | ||||
|  |       width: 50%; | ||||
|  |       border-radius: 6px; | ||||
|  |       background: #FAFAFA; | ||||
|  |       padding: 0 20px; | ||||
|  |     } | ||||
|  |     .rightEye-text,.leftEye-text { | ||||
|  |       font-size: 16px; | ||||
|  |       height: 50px; | ||||
|  |       line-height: 50px; | ||||
|  |       font-weight: 700; | ||||
|  |       border-bottom: 1px solid rgba(0, 0, 0, 0.06); | ||||
|  |       margin-bottom: 20px; | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
|  | <style lang="scss"> | ||||
|  | .oklens-add-order { | ||||
|  |   .el-dialog__header { | ||||
|  |     margin-bottom:12px | ||||
|  |   } | ||||
|  |     .el-dialog__body { | ||||
|  |         padding-right: 30px; | ||||
|  |     } | ||||
|  |     .formItemOne .el-form-item__content { | ||||
|  |       display: flex; | ||||
|  |     } | ||||
|  |     .el-date-editor.el-input, .el-date-editor.el-input__inner{ | ||||
|  |       width: 100%; | ||||
|  |     } | ||||
|  |     .el-select { | ||||
|  |       display: block; | ||||
|  |     } | ||||
|  |     .el-input-number { | ||||
|  |       display: block; | ||||
|  |       width: 100%; | ||||
|  |     } | ||||
|  | } | ||||
|  | </style> | ||||
| @ -0,0 +1,131 @@ | |||||
|  | <template> | ||||
|  |   <el-dialog | ||||
|  |     class="oklens-add-order" | ||||
|  |     :visible.sync="visible" | ||||
|  |     :close-on-click-modal="false" | ||||
|  |     width="30%" | ||||
|  |     :title="dataForm.title" | ||||
|  |     append-to-body | ||||
|  |     @close="closeDialog" | ||||
|  |   > | ||||
|  |     <el-form ref="dataForm" :model="dataForm" :rules="dataRule"> | ||||
|  |       <el-form-item :label="(dataForm.title=='更改通知' ? '通知' : dataForm.title) + '日期:'" label-width="90px" prop="shareDate"> | ||||
|  |         <el-date-picker v-model="dataForm.shareDate" value-format="yyyy-MM-dd" type="date" :placeholder="'请选择' + (dataForm.title=='更改通知' ? '通知' : dataForm.title )+ '日期'" /> | ||||
|  |       </el-form-item> | ||||
|  |       <template v-if="dataForm.title=='到货'"> | ||||
|  |         <el-form-item label="出厂编号:" label-width="90px" prop="factoryNumber"> | ||||
|  |           <el-input v-model="dataForm.factoryNumber" placeholder="核对并填写出厂编号" /> | ||||
|  |         </el-form-item> | ||||
|  |       </template> | ||||
|  |       <el-form-item label="备 注:" label-width="90px" prop="remark"> | ||||
|  |         <el-input v-model="dataForm.remark" type="textarea" placeholder="备注信息" /> | ||||
|  |       </el-form-item> | ||||
|  |     </el-form> | ||||
|  |     <template slot="footer"> | ||||
|  |       <el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||
|  |       <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> | ||||
|  |     </template> | ||||
|  |   </el-dialog> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import debounce from 'lodash/debounce' | ||||
|  | export default { | ||||
|  |   props: { | ||||
|  |     brandList: { | ||||
|  |       type: Array, | ||||
|  |       default: () => [] | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       visible: false, | ||||
|  |       dataForm: { | ||||
|  |         dpId: '', | ||||
|  |         shareDate: '', | ||||
|  |         factoryNumber: '', | ||||
|  |         remark: '' | ||||
|  |       }, | ||||
|  |       params: {} | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   computed: { | ||||
|  |     dataRule() { | ||||
|  |       return { | ||||
|  |         shareDate: [ | ||||
|  |           { required: true, message: '请选择日期', trigger: 'change' } | ||||
|  |         ], | ||||
|  |         factoryNumber: [ | ||||
|  |           { required: true, message: '请选择出厂编号', trigger: 'blur' } | ||||
|  |         ] | ||||
|  |       } | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     init() { | ||||
|  |       this.visible = true | ||||
|  |       this.$nextTick(() => { | ||||
|  |         this.$refs.dataForm.resetFields() // 重置表单 | ||||
|  |         console.log(this.dataForm) | ||||
|  |         if (this.dataForm.title === '更改通知') { | ||||
|  |           this.dataForm.id = this.params.noticeId | ||||
|  |           this.dataForm.remark = this.params.noticeRemark | ||||
|  |           this.dataForm.shareDate = this.params.noticeDate | ||||
|  |         } else if (this.dataForm.title === '通知') { | ||||
|  |           this.dataForm.shareDate = this.$moment().format('YYYY-MM-DD') | ||||
|  |         } | ||||
|  |       }) | ||||
|  |     }, | ||||
|  |     // 表单提交 320321188808123330    18888888888 | ||||
|  |     dataFormSubmitHandle: debounce(function() { | ||||
|  |       this.$refs.dataForm.validate((valid) => { | ||||
|  |         if (!valid) { | ||||
|  |           return false | ||||
|  |         } | ||||
|  |         const url = this.dataForm.title === '到货' ? '/dp/arrival' : (this.dataForm.title === '通知' ? '/dp/notice' : this.dataForm.title === '更改通知' ? '/dp/updateNotice' : '') | ||||
|  |         this.$http[!this.params.noticeId ? 'post' : 'put'](url, this.dataForm).then(({ data: res }) => { | ||||
|  |           if (res.code !== 0) { | ||||
|  |             return this.$message.error(res.msg) | ||||
|  |           } | ||||
|  |           this.$message({ | ||||
|  |             message: this.$t('prompt.success'), | ||||
|  |             type: 'success', | ||||
|  |             duration: 500, | ||||
|  |             onClose: () => { | ||||
|  |               this.visible = false | ||||
|  |               this.$emit('getDataList') | ||||
|  |             } | ||||
|  |           }) | ||||
|  |         }).catch(() => {}) | ||||
|  |       }) | ||||
|  |     }, 1000, { leading: true, trailing: false }), | ||||
|  |     // 关闭弹框 | ||||
|  |     closeDialog() { | ||||
|  |       this.$emit('closeDialog') | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss"> | ||||
|  | .oklens-add-order { | ||||
|  |   .el-dialog__header { | ||||
|  |     margin-bottom:12px | ||||
|  |   } | ||||
|  |     .el-dialog__body { | ||||
|  |         padding-right: 30px; | ||||
|  |     } | ||||
|  |     .formItemOne .el-form-item__content { | ||||
|  |       display: flex; | ||||
|  |     } | ||||
|  |     .el-date-editor.el-input, .el-date-editor.el-input__inner{ | ||||
|  |       width: 100%; | ||||
|  |     } | ||||
|  |     .el-select { | ||||
|  |       display: block; | ||||
|  |     } | ||||
|  |     .el-input-number { | ||||
|  |       display: block; | ||||
|  |       width: 100%; | ||||
|  |     } | ||||
|  | } | ||||
|  | </style> | ||||
| @ -0,0 +1,430 @@ | |||||
|  | <template> | ||||
|  |   <div class="okLens"> | ||||
|  |     <!-- ok镜头部 --> | ||||
|  |     <head-template head-left="订片记录"> | ||||
|  |       <el-button v-if="tabTitle !== 'LJRJ'" size="small" @click="addOrUpdateHandle('','','借片')"> | ||||
|  |         <svg-icon icon-class="icon-jiebei" /><span class="repair-title">借片</span> | ||||
|  |       </el-button> | ||||
|  |       <el-button v-if="tabTitle !== 'LJRJ'" size="small" @click="addOrUpdateHandle('','','补录')"> | ||||
|  |         <svg-icon icon-class="icon-repair" /><span class="repair-title">补录</span> | ||||
|  |       </el-button> | ||||
|  |       <el-button size="small" @click="addOrUpdateHandle('','','换片')"> | ||||
|  |         <svg-icon icon-class="icon-change-film" /><span class="change-title">换片</span> | ||||
|  |       </el-button> | ||||
|  |       <el-button type="primary" size="small" icon="el-icon-plus" @click="addOrUpdateHandle('','','新增')">新增</el-button> | ||||
|  |     </head-template> | ||||
|  | 
 | ||||
|  |     <!-- ok镜内容 --> | ||||
|  |     <!-- 1:定片未到货,2:到货未通知,3:通知未取镜,4:取镜/离焦软镜,5:放弃取镜,6:换片 7:补录,8:借片,100:退货 --> | ||||
|  |     <el-table ref="multipleTable" :data="dataList" tooltip-effect="dark" style="width: 100%" :height="`calc(100vh - 217px)`" :row-class-name="getRowClass"> | ||||
|  |       <el-table-column type="expand"> | ||||
|  |         <template v-if="scope.row.status!=7 || scope.row.status!=8" slot-scope="scope"> | ||||
|  |           <el-steps space="80%" :active="scope.row.status==3 ? 3 : scope.row.status" :finish-status="scope.row.status==4 ? 'success' : ( scope.row.status== 5 || scope.row.status== 100 ? 'error' : ( scope.row.status== 6 ? 'wait' : 'finish' ))"> | ||||
|  |             <el-step v-for="(item,index) in scope.row.logVOList" :key="index" :title="item.name"> | ||||
|  |               <template slot="description"> | ||||
|  |                 <div class="step-desc"> | ||||
|  |                   <p class="description-name">{{ item.status==1 && !scope.row.oldDpId ? '订片': (item.status==2 ? '到货' : (item.status==3 ? '通知' : (item.status==4 ? '取镜' :(item.status==5 ? '放弃' : (item.status==6 ? '换片' : (item.status==100 ? '退货' : (item.status==1&& scope.row.oldDpId ? '换片':''))))))) }}</p> | ||||
|  |                   <p class="description-date"> {{ item.shareDate ? $options.filters.dateFilterTwo( item.shareDate) : '' }}</p> | ||||
|  |                   <p v-show="item.status==2 || item.status==6">出厂编号:{{ item.factoryNumber ? item.factoryNumber : '-' }}</p> | ||||
|  |                   <p v-show="item.status==1 && scope.row.oldDpId ">原订片编号:{{ scope.row.oldDpId ? scope.row.oldDpId.substr(9) : '' }}</p> | ||||
|  |                   <p v-show="item.status==6">新订片编号:{{ scope.row.newDpId ? scope.row.newDpId.substr(9) : '' }}</p> | ||||
|  |                   <div class="description-content"> | ||||
|  |                     <template v-if="item.status==1"> | ||||
|  |                       <span v-show="scope.row.eyeType">眼别:{{ scope.row.eyeType }}</span> | ||||
|  |                       <span v-show="scope.row.brand">品牌:{{ scope.row.brand }}</span> | ||||
|  |                       <span v-show="scope.row.curvity && (scope.row.flag=='0'||scope.row.flag=='2')">曲率:{{ scope.row.curvity }}</span> | ||||
|  |                       <span v-show="scope.row.degrees && (scope.row.flag=='0'||scope.row.flag=='2')">度数:{{ scope.row.degrees }}</span> | ||||
|  |                       <span v-show="scope.row.degrees && scope.row.flag=='2'">AZT:{{ scope.row.azt }}</span> | ||||
|  |                       <span v-show="scope.row.bc && (scope.row.flag=='1' ||scope.row.flag=='2')">BC:{{ scope.row.bc }}</span> | ||||
|  |                       <span v-show="scope.row.rzd && scope.row.flag=='1'">RZD:{{ scope.row.rzd }}</span> | ||||
|  |                       <span v-show="scope.row.lza && scope.row.flag=='1'">LZA:{{ scope.row.lza }}</span> | ||||
|  |                       <span v-show="scope.row.diameter">直径:{{ scope.row.diameter }}</span> | ||||
|  |                     </template> | ||||
|  |                     <template v-else> | ||||
|  |                       <p v-show="item.status==4 && item.id && scope.row.status==4" class="take-mirror" @click="removeLensReturnGoodsClick(scope.row.id,...scope.row,'取镜记录')">取镜记录</p> | ||||
|  |                     </template> | ||||
|  |                     <p v-show="item.operateDoctorName">订片医生:{{ item.dpDoctorName }}</p> | ||||
|  |                     <p v-show="item.operateDoctorName">操作者:{{ item.operateDoctorName }}</p> | ||||
|  |                     <p>备注:{{ item.remark ? item.remark : '-' }}</p> | ||||
|  |                   </div> | ||||
|  |                 </div> | ||||
|  |               </template> | ||||
|  |             </el-step> | ||||
|  |           </el-steps> | ||||
|  |         </template> | ||||
|  |       </el-table-column> | ||||
|  |       <el-table-column prop="id" label="订片编号" :width=" tabTitle !== 'LJRJ' ? 100 : ''"> | ||||
|  |         <template slot-scope="scope"> | ||||
|  |           {{ scope.row.id ? scope.row.id.substr(9): '- ' }} | ||||
|  |         </template> | ||||
|  |       </el-table-column> | ||||
|  |       <el-table-column prop="dpDate" label="订片日期" :width=" tabTitle !== 'LJRJ' ? 100 : ''"> | ||||
|  |         <template slot-scope="scope"> | ||||
|  |           {{ scope.row.dpDate ? $options.filters.dateFilterTwo( scope.row.dpDate): '- ' }} | ||||
|  |         </template> | ||||
|  |       </el-table-column> | ||||
|  |       <el-table-column v-if="tabTitle !=='LJRJ'" prop="content" :label="tabTitle==='okLens' ? '内容(眼别 品牌 曲率 度数 直径)' : '内容(眼别 品牌 基弧 度数 直径)'" width="240"> | ||||
|  |         <template slot-scope="scope"> | ||||
|  |           <div class="table-colum-content"> | ||||
|  |             <span v-show="scope.row.eyeType"><b :style="{'color':scope.row.eyeType==='OD' ? 'green': '#1E79FF'}">眼别:{{ scope.row.eyeType }}</b></span> | ||||
|  |             <span v-show="scope.row.brand">品牌:{{ scope.row.brand }}</span> | ||||
|  |             <!-- flag 0 第一种国产品牌  flag 1 进口品牌    flag 0 第二种国产品牌 --> | ||||
|  |             <!-- 根据不同的flag显示不同的内容 --> | ||||
|  |             <span v-show="scope.row.curvity && (scope.row.flag=='0'||scope.row.flag=='2') && tabTitle==='okLens'">曲率:{{ scope.row.curvity }}</span> | ||||
|  |             <span v-show="scope.row.baseArc && (scope.row.flag=='0'||scope.row.flag=='2') && tabTitle==='RGP'">基弧:{{ scope.row.baseArc }}</span> | ||||
|  |             <span v-show="scope.row.degrees && (scope.row.flag=='0'||scope.row.flag=='2')">度数:{{ scope.row.degrees }}</span> | ||||
|  |             <span v-show="scope.row.degrees && scope.row.flag=='2'">AZT:{{ scope.row.azt }}</span> | ||||
|  |             <span v-show="scope.row.bc && (scope.row.flag=='1' ||scope.row.flag=='2')">BC:{{ scope.row.bc }}</span> | ||||
|  |             <span v-show="scope.row.rzd && scope.row.flag=='1'">RZD:{{ scope.row.rzd }}</span> | ||||
|  |             <span v-show="scope.row.lza && scope.row.flag=='1'">LZA:{{ scope.row.lza }}</span> | ||||
|  |             <span v-show="scope.row.diameter">直径:{{ scope.row.diameter }}</span> | ||||
|  |           </div> | ||||
|  |         </template> | ||||
|  |       </el-table-column> | ||||
|  |       <el-table-column v-if="tabTitle ==='LJRJ'" prop="content" label="内容(眼别 品牌 度数)" width="300"> | ||||
|  |         <template slot-scope="scope"> | ||||
|  |           <div class="table-colum-content"> | ||||
|  |             <span v-show="scope.row.eyeType"><b :style="{'color':scope.row.eyeType==='OD' ? 'green': '#1E79FF'}">眼别:{{ scope.row.eyeType }}</b></span> | ||||
|  |             <span v-show="scope.row.brand">品牌:{{ scope.row.brand }}</span> | ||||
|  |             <span v-show="scope.row.degrees">度数:{{ scope.row.degrees }}</span> | ||||
|  |           </div> | ||||
|  |         </template> | ||||
|  |       </el-table-column> | ||||
|  |       <el-table-column prop="remark" label="备注"> | ||||
|  |         <template slot-scope="scope"> | ||||
|  |           {{ scope.row.remark ? scope.row.remark : '-' }} | ||||
|  |         </template> | ||||
|  |       </el-table-column> | ||||
|  |       <el-table-column prop="dpDoctorName" label="订片医生" /> | ||||
|  |       <template v-if="tabTitle !=='LJRJ'"> | ||||
|  |         <el-table-column prop="arrivalDate" label="到货日期"> | ||||
|  |           <template slot-scope="scope"> | ||||
|  |             {{ scope.row.arrivalDate ? $options.filters.dateFilterTwo( scope.row.arrivalDate): '- ' }} | ||||
|  |           </template> | ||||
|  |         </el-table-column> | ||||
|  |         <el-table-column prop="noticeDate" label="通知日期"> | ||||
|  |           <template slot-scope="scope"> | ||||
|  |             {{ scope.row.noticeDate ? $options.filters.dateFilterTwo( scope.row.noticeDate): '- ' }} | ||||
|  |           </template> | ||||
|  |         </el-table-column> | ||||
|  |         <el-table-column prop="takeAwayDate" label="取镜日期"> | ||||
|  |           <template slot-scope="scope"> | ||||
|  |             {{ scope.row.takeAwayDate ? $options.filters.dateFilterTwo( scope.row.takeAwayDate): '- ' }} | ||||
|  |           </template> | ||||
|  |         </el-table-column> | ||||
|  |         <el-table-column prop="returnDate" label="归还日期"> | ||||
|  |           <template slot-scope="scope"> | ||||
|  |             {{ scope.row.returnDate ? $options.filters.dateFilterTwo( scope.row.returnDate): '- ' }} | ||||
|  |           </template> | ||||
|  |         </el-table-column> | ||||
|  |       </template> | ||||
|  |       <el-table-column label="状态"> | ||||
|  |         <!-- 1:定片未到货,2:到货未通知,3:通知未取镜,4:放弃取镜,5:放弃取镜,6:换片,7:补录,100:退货 --> | ||||
|  |         <template slot-scope="scope"> | ||||
|  |           <div v-show="scope.row.status == 1"> | ||||
|  |             <span class="circle-status not-start" /> | ||||
|  |             <span>未到货</span> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status == 2"> | ||||
|  |             <span class="circle-status not-start" /> | ||||
|  |             <span>未通知</span> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status == 3"> | ||||
|  |             <template v-if="new Date(scope.row.noticeDate).setDate(new Date(scope.row.noticeDate).getDate() + 30) < new Date()"> | ||||
|  |               <span class="circle-status not-start" /> | ||||
|  |               <span>通知30天未取镜</span> | ||||
|  |             </template> | ||||
|  |             <template v-else> | ||||
|  |               <span class="circle-status not-start" /> | ||||
|  |               <span>未取镜</span> | ||||
|  |             </template> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status == 4"> | ||||
|  |             <span class="circle-status goed" /> | ||||
|  |             <span>已取镜</span> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status == 5"> | ||||
|  |             <span class="circle-status goed" /> | ||||
|  |             <span>已放弃</span> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status == 6"> | ||||
|  |             <span class="circle-status patch" /> | ||||
|  |             <span>换片</span> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status == 7"> | ||||
|  |             <span class="circle-status patch" /> | ||||
|  |             <span>补录</span> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status == 8"> | ||||
|  |             <span class="circle-status blue" /> | ||||
|  |             <span>借片</span> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status == 100"> | ||||
|  |             <span class="circle-status give-up" /> | ||||
|  |             <span>已退货</span> | ||||
|  |           </div> | ||||
|  |         </template> | ||||
|  |       </el-table-column> | ||||
|  |       <!-- 1:未到货,2未通知,3:未取镜,4:取镜,5:已放弃,6:换片,7:补录,8:借片,100:退货 --> | ||||
|  |       <el-table-column prop="operation" label="操作" width="150"> | ||||
|  |         <template slot-scope="scope"> | ||||
|  |           <div v-show="scope.row.status!=6 && scope.row.status!=7 && scope.row.status!=8 && scope.row.status!=100 && tabTitle !== 'LJRJ'"> | ||||
|  |             <span v-show="scope.row.status==1" class="operation-details" @click="arrivalNotiveClick(scope.row.id,...scope.row,'到货')">到货</span> | ||||
|  |             <span v-show="scope.row.status==2" class="operation-details" @click="arrivalNotiveClick(scope.row.id,...scope.row,'通知')">通知</span> | ||||
|  |             <span v-show="scope.row.status==3" class="operation-details" @click="arrivalNotiveClick(scope.row.id,...scope.row,'更改通知')">更改通知</span> | ||||
|  |             <span v-show="scope.row.status==3 || scope.row.status==5" class="operation-details" @click="removeLensReturnGoodsClick(scope.row.id,...scope.row,'取镜')">取镜</span> | ||||
|  |             <span v-show="scope.row.status==4" class="operation-details" @click="removeLensReturnGoodsClick(scope.row.id,...scope.row,'取镜记录')">取镜记录</span> | ||||
|  |             <span v-show="scope.row.status==1 || scope.row.status==2 || scope.row.status==4 || scope.row.status==5" class="operation-details" @click="removeLensReturnGoodsClick(scope.row.id,...scope.row,'退货')">退货</span> | ||||
|  |             <el-dropdown trigger="click" @command="handleCommandDropdowm(scope.row.id,...scope.row,$event)"> | ||||
|  |               <i class="el-icon-more" /> | ||||
|  |               <el-dropdown-menu slot="dropdown"> | ||||
|  |                 <el-dropdown-item v-show="scope.row.status==3" command="退货">退货</el-dropdown-item> | ||||
|  |                 <el-dropdown-item command="编辑">编辑</el-dropdown-item> | ||||
|  |                 <el-dropdown-item v-if="$hasPermission('patientManagement:delete')" command="删除">删除</el-dropdown-item> | ||||
|  |               </el-dropdown-menu> | ||||
|  |             </el-dropdown> | ||||
|  |           </div> | ||||
|  |           <div v-show="scope.row.status==6 || scope.row.status==7 || scope.row.status==8 || scope.row.status==100 || tabTitle =='LJRJ'"> | ||||
|  |             <span v-show="scope.row.status==7 || scope.row.status==8 || tabTitle =='LJRJ'" class="operation-details" @click="addOrUpdateHandle(scope.row.id,...scope.row,`编辑${scope.row.status===7 ? '补录' : (scope.row.status==8 ? '借片' : (tabTitle =='LJRJ' ? '离焦软镜' :''))}`)">编辑</span> | ||||
|  |             <template v-if="$hasPermission('patientManagement:delete')"> | ||||
|  |               <span v-show="scope.row.status==6 || scope.row.status==7 || scope.row.status==8 || scope.row.status==100 || tabTitle =='LJRJ'" class="operation-details" @click="deleteHandle(scope.row.id)">删除</span> | ||||
|  |             </template> | ||||
|  |           </div> | ||||
|  |         </template> | ||||
|  |       </el-table-column> | ||||
|  |     </el-table> | ||||
|  |     <!-- 弹窗 新增/编辑/换片/补录/借片 --> | ||||
|  |     <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :doctor-list="doctorList" :brand-list="brandList" :patient-id="patientId" :tab-title="tabTitle" @refreshDataList="getDataList()" /> | ||||
|  |     <!-- 弹窗 到货/通知 --> | ||||
|  |     <arrival-notice-or-update v-if="arrivalNoticeVisible" ref="arrivalNoticeOrUpdate" :patient-id="patientId" @refreshDataList="getDataList" @getDataList="getDataList()" @closeDialog="arrivalNoticeVisible=false" /> | ||||
|  |     <!-- 弹窗 取镜/退货 --> | ||||
|  |     <removeLens-returnGoods-or-update v-if="removeLensReturnGoodsVisible" ref="removeLensReturnGoodsOrUpdate" :patient-id="patientId" :father-factory-number="factoryNumber" @getDataList="getDataList()" @closeDialog="removeLensReturnGoodsVisible=false" /> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | <script> | ||||
|  | import headTemplate from '@/components/head' | ||||
|  | import mixinViewModule from '@/mixins/view-module' | ||||
|  | import AddOrUpdate from './add-or-update.vue' | ||||
|  | import arrivalNoticeOrUpdate from './arrival-notice-or-update' | ||||
|  | import removeLensReturnGoodsOrUpdate from './removeLens-returnGoods-or-update' | ||||
|  | export default { | ||||
|  |   components: { | ||||
|  |     headTemplate, | ||||
|  |     AddOrUpdate, | ||||
|  |     arrivalNoticeOrUpdate, | ||||
|  |     removeLensReturnGoodsOrUpdate | ||||
|  |   }, | ||||
|  |   mixins: [mixinViewModule], | ||||
|  |   props: { | ||||
|  |     patientId: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     }, | ||||
|  |     doctorList: { | ||||
|  |       type: Array, | ||||
|  |       default: () => [] | ||||
|  |     }, | ||||
|  |     tabTitle: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       tableHeight: '', | ||||
|  |       brandList: [], | ||||
|  |       arrivalNoticeVisible: false, | ||||
|  |       removeLensReturnGoodsVisible: false, | ||||
|  |       mixinViewModuleOptions: { | ||||
|  |         getDataListURL: '/dp/getOKList', | ||||
|  |         deleteURL: '/dp' | ||||
|  |       }, | ||||
|  |       dataForm: { | ||||
|  |         patientId: this.patientId, | ||||
|  |         isInvisible: this.tabTitle === 'okLens' ? 0 : (this.tabTitle === 'RGP' ? 1 : 2) // 0是ok镜 1是RGP隐形眼镜 2是离焦软镜 | ||||
|  |       }, | ||||
|  |       factoryNumber: '' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   created() { | ||||
|  |     this.getBrandList() | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     init() { | ||||
|  |       // this.$nextTick(() => { | ||||
|  |       //   console.log(this.$('.el-table').offset().top) | ||||
|  |       //   console.log(this.$(document).height()) | ||||
|  |       //   this.tableHeight = this.$(document).height() - this.$('.el-table').offset().top - 36 | ||||
|  |       //   console.log(this.tableHeight) | ||||
|  |       // }) | ||||
|  |     }, | ||||
|  |     // rowStyle({ row, rowIndex }) { | ||||
|  |     //   console.log(row) | ||||
|  |     //   const stylejson = {} | ||||
|  |     //   if (row.eyeType === 'OD') { | ||||
|  |     //     stylejson.color = 'green' | ||||
|  |     //   } else if (row.eyeType === 'OS') { | ||||
|  |     //     stylejson.color = '#1E79FF' | ||||
|  |     //   } | ||||
|  |     //   return stylejson | ||||
|  |     // }, | ||||
|  |     // 获取品牌列表 | ||||
|  |     async getBrandList() { | ||||
|  |       const { data: res } = await this.$http.get('dp/getBrandList', { | ||||
|  |         params: { | ||||
|  |           isInvisible: this.tabTitle === 'okLens' ? 0 : (this.tabTitle === 'RGP' ? 1 : 2) // 0是ok镜 1是RGP隐形眼镜 2是离焦软镜 | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       this.brandList = res.data | ||||
|  |     }, | ||||
|  |     // 设置展开图标是否显示 | ||||
|  |     getRowClass({ row, rowIndex }) { | ||||
|  |       if (row.status === 7 || row.status === 8) { | ||||
|  |         return 'row-expand-cover' | ||||
|  |       } else { | ||||
|  |         return '' | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 点击菜单触发事件回调 | ||||
|  |     handleCommandDropdowm(id, scopeRow, e) { | ||||
|  |       console.log(id, scopeRow, e) | ||||
|  |       if (e === '编辑') { | ||||
|  |         this.addOrUpdateHandle(id, scopeRow, e) | ||||
|  |       } else if (e === '退货') { | ||||
|  |         this.removeLensReturnGoodsClick(id, scopeRow, e) | ||||
|  |       } else if (e === '删除') { | ||||
|  |         this.deleteHandle(id) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 到货-通知 | ||||
|  |     arrivalNotiveClick(dpId, params, title) { | ||||
|  |       this.arrivalNoticeVisible = true | ||||
|  |       this.$nextTick(() => { | ||||
|  |         this.$refs.arrivalNoticeOrUpdate.dataForm.dpId = dpId | ||||
|  |         this.$refs.arrivalNoticeOrUpdate.dataForm.title = title | ||||
|  |         this.$refs.arrivalNoticeOrUpdate.params = params | ||||
|  |         this.$refs.arrivalNoticeOrUpdate.init() | ||||
|  |       }) | ||||
|  |     }, | ||||
|  |     // 取镜-退货-取镜记录 | ||||
|  |     removeLensReturnGoodsClick(dpId, params, title) { | ||||
|  |       this.removeLensReturnGoodsVisible = true | ||||
|  |       this.factoryNumber = params.factoryNumber | ||||
|  |       this.$nextTick(() => { | ||||
|  |         this.$refs.removeLensReturnGoodsOrUpdate.dataForm.dpId = dpId | ||||
|  |         this.$refs.removeLensReturnGoodsOrUpdate.dataForm.title = title | ||||
|  |         this.$refs.removeLensReturnGoodsOrUpdate.init() | ||||
|  |       }) | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | .okLens { | ||||
|  |   .description-content,.table-colum-content { | ||||
|  |     span { | ||||
|  |       display: inline-block; | ||||
|  |       padding-right: 8px; | ||||
|  |     } | ||||
|  |   } | ||||
|  |   .take-mirror { | ||||
|  |     color:#1890ff; | ||||
|  |     cursor: pointer; | ||||
|  |   } | ||||
|  |   .repair-title, | ||||
|  |   .change-title { | ||||
|  |     display: inline-block; | ||||
|  |     vertical-align: middle; | ||||
|  |     padding-left: 6px; | ||||
|  |   } | ||||
|  |   .circle-status { | ||||
|  |     width: 6px; | ||||
|  |     height: 6px; | ||||
|  |     border-radius: 50%; | ||||
|  |     margin-right: 5px; | ||||
|  |     display: inline-block; | ||||
|  |   } | ||||
|  |   .not-start { | ||||
|  |     background-color: #1890ff; | ||||
|  |   } | ||||
|  |   .not-started { | ||||
|  |     background-color: #FAAD14 | ||||
|  | ; | ||||
|  |   } | ||||
|  |   .goed { | ||||
|  |     background: #52c41a; | ||||
|  |   } | ||||
|  |   .give-up { | ||||
|  |     background-color: #FF4D4F; | ||||
|  |   } | ||||
|  |   .blue { | ||||
|  |     background: #14b1fa; | ||||
|  |   } | ||||
|  |   .patch { | ||||
|  |     background-color: #bfbfbf; | ||||
|  |   } | ||||
|  |   .step-desc { | ||||
|  |     .content { | ||||
|  |       color: #b8b8b8; | ||||
|  |     } | ||||
|  |   } | ||||
|  |   .operation-details { | ||||
|  |     cursor: pointer; | ||||
|  |     color:#1890ff; | ||||
|  |     padding-right: 8px; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
|  | <style lang="scss"> | ||||
|  | .okLens { | ||||
|  |   .el-table::before { | ||||
|  |     height: 0; | ||||
|  |   } | ||||
|  |   .el-timeline-item__node--normal { | ||||
|  |     border: 3px solid #1890ff; | ||||
|  |   } | ||||
|  |   .row-expand-cover .el-table__expand-column .el-icon{ | ||||
|  |     visibility:hidden; | ||||
|  |   } | ||||
|  |   .el-step.is-center .el-step__line { | ||||
|  |     left: 55%; | ||||
|  |     right: -45%; | ||||
|  |   } | ||||
|  |   .el-step__icon-inner { | ||||
|  |     display: none; | ||||
|  |   } | ||||
|  |   .el-step__icon.is-text { | ||||
|  |     border: none; | ||||
|  |     width: 8px; | ||||
|  |     height: 8px; | ||||
|  |   } | ||||
|  |   // 完成 | ||||
|  |   .el-step__head.is-finish .el-step__icon.is-text { | ||||
|  |     background: #409eff; | ||||
|  |   } | ||||
|  |   // 错误 | ||||
|  |   .el-step__head.is-error .el-step__icon.is-text { | ||||
|  |     background: #F56C6C; | ||||
|  |   } | ||||
|  |    .el-step__head.is-success .el-step__icon.is-text { | ||||
|  |     background: #67C23A; | ||||
|  |   } | ||||
|  |   .el-step__head.is-wait .el-step__icon.is-text { | ||||
|  |     background: #b8b8b8; | ||||
|  |   } | ||||
|  |   .el-step__head.is-process,.el-step__title.is-process { | ||||
|  |     color: #b8b8b8; | ||||
|  |   } | ||||
|  |   .el-step__description.is-process { | ||||
|  |     color: #b8b8b8; | ||||
|  |   } | ||||
|  |   .el-step__head.is-process .el-step__icon.is-text { | ||||
|  |     background: #b8b8b8; | ||||
|  |   } | ||||
|  |   .el-steps--horizontal { | ||||
|  |     .el-step.is-horizontal:last-child { | ||||
|  |       flex-basis: 30% !important; | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
| @ -0,0 +1,241 @@ | |||||
|  | <template> | ||||
|  |   <el-form ref="dataForm" :model="dataForm" :rules="dataRule"> | ||||
|  |     <el-form-item v-if="title.includes('编辑')" label="眼 别:" label-width="90px" prop="eyeType"> | ||||
|  |       <el-select v-model="dataForm.eyeType" placeholder="请选择眼别" clearable> | ||||
|  |         <el-option label="右眼" value="OD" /> | ||||
|  |         <el-option label="左眼" value="OS" /> | ||||
|  |       </el-select> | ||||
|  |     </el-form-item> | ||||
|  |     <el-form-item v-if="title=='换片'" label="目标镜片:" label-width="90px" prop="oldDpId"> | ||||
|  |       <el-select v-model="dataForm.oldDpId" placeholder="请选择目标镜片" clearable> | ||||
|  |         <el-option v-for="(item,index) in replaceList " :key="index" :value="item.id" :label="`${item.dpDate}-${item.brand}-${item.colour}`" /> | ||||
|  |       </el-select> | ||||
|  |     </el-form-item> | ||||
|  |     <el-form-item label="品 牌:" :label-width="title=='新增' ? '60px' : '90px'" prop="brandId"> | ||||
|  |       <el-select v-model="dataForm.brandId" placeholder="请选择品牌" clearable> | ||||
|  |         <el-option v-for="(item,index) in brandList " :key="index" :value="item.id" :label="item.brand" @click.native="selectOptionBrandHandle(item)" /> | ||||
|  |       </el-select> | ||||
|  |     </el-form-item> | ||||
|  |     <template v-if="ISCRTForm=='0' || ISCRTForm=='2'"> | ||||
|  |       <el-form-item v-if="tabTitle==='okLens' && tabTitle !== 'LJRJ'" label="曲 率:" :label-width="title=='新增' ? '60px' : '90px'" prop="curvity"> | ||||
|  |         <el-input v-model="dataForm.curvity" placeholder="请填写曲率" /> | ||||
|  |       </el-form-item> | ||||
|  |       <el-form-item v-if="tabTitle==='RGP' && tabTitle !== 'LJRJ'" label="基弧:" :label-width="title=='新增' ? '60px' : '90px'" prop="baseArc"> | ||||
|  |         <el-input v-model="dataForm.baseArc" placeholder="请填写基弧" /> | ||||
|  |       </el-form-item> | ||||
|  |       <el-form-item label="度 数:" :label-width="title=='新增' ? '60px' : '90px'" prop="degrees"> | ||||
|  |         <el-input v-model="dataForm.degrees" placeholder="请填写度数" /> | ||||
|  |       </el-form-item> | ||||
|  |     </template> | ||||
|  |     <template> | ||||
|  |       <el-form-item v-if=" ISCRTForm=='2'" label="AZT:" :label-width="title=='新增' ? '60px' : '90px'" prop="azt"> | ||||
|  |         <el-input v-model="dataForm.azt" placeholder="请填写度数" /> | ||||
|  |       </el-form-item> | ||||
|  |       <el-form-item v-if="ISCRTForm =='1' || ISCRTForm =='2'" label="BC:" :label-width="title=='新增' ? '60px' : '90px'" prop="bc"> | ||||
|  |         <el-input v-model="dataForm.bc" placeholder="请填写BC" /> | ||||
|  |       </el-form-item> | ||||
|  |     </template> | ||||
|  |     <template v-if="ISCRTForm =='1'"> | ||||
|  |       <el-form-item label="RZD:" :label-width="title=='新增' ? '60px' : '90px'" prop="rzd"> | ||||
|  |         <el-input v-model="dataForm.rzd" placeholder="请填写RZD" /> | ||||
|  |       </el-form-item> | ||||
|  |       <el-form-item label="LZA:" :label-width="title=='新增' ? '60px' : '90px'" prop="lza"> | ||||
|  |         <el-input v-model="dataForm.lza" placeholder="请填写LZA" /> | ||||
|  |       </el-form-item> | ||||
|  |     </template> | ||||
|  |     <el-form-item v-if="tabTitle !== 'LJRJ'" label="直 径:" :label-width="title=='新增' ? '60px' : '90px'" prop="diameter"> | ||||
|  |       <el-input v-model="dataForm.diameter" placeholder="请填写直径" /> | ||||
|  |     </el-form-item> | ||||
|  |     <el-form-item v-if="tabTitle !== 'LJRJ'" label="颜 色:" :label-width="title=='新增' ? '60px' : '90px'" prop="colourId"> | ||||
|  |       <el-select v-model="dataForm.colourId" placeholder="请选择颜色" clearable @change="colorChange"> | ||||
|  |         <el-option v-for="item in brandCOlorList.data" :key="item.id" :label="item.colour" :value="item.id" @click.native="selectOptionColorHandle(item)" /> | ||||
|  |       </el-select> | ||||
|  |     </el-form-item> | ||||
|  |     <el-form-item v-if="title.includes('借片')" label="归还日期:" :label-width="title=='新增' ? '60px' : '90px'" prop="returnDate"> | ||||
|  |       <el-date-picker v-model="dataForm.returnDate" type="date" placeholder="请选择归还日期" value-format="yyyy-MM-dd" /> | ||||
|  |     </el-form-item> | ||||
|  |     <el-form-item label="备 注:" :label-width="title=='新增' ? '60px' : '90px'" prop="remark"> | ||||
|  |       <el-input v-model="dataForm.remark" type="textarea" placeholder="备注信息" /> | ||||
|  |     </el-form-item> | ||||
|  |   </el-form> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | export default { | ||||
|  |   props: { | ||||
|  |     brandList: { | ||||
|  |       type: Array, | ||||
|  |       default: () => [] | ||||
|  |     }, | ||||
|  |     eyeType: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     }, | ||||
|  |     title: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     }, | ||||
|  |     patientIdNumber: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     }, | ||||
|  |     tabTitle: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       brandCOlorList: {}, | ||||
|  |       replaceList: [], | ||||
|  |       dataForm: { | ||||
|  |         eyeType: '', | ||||
|  |         oldDpId: '', | ||||
|  |         brandId: '', | ||||
|  |         curvity: '', | ||||
|  |         baseArc: '', | ||||
|  |         degrees: '', | ||||
|  |         azt: '', | ||||
|  |         bc: '', | ||||
|  |         rzd: '', | ||||
|  |         lza: '', | ||||
|  |         diameter: '', | ||||
|  |         colourId: '', | ||||
|  |         returnDate: '', | ||||
|  |         remark: '', | ||||
|  |         status: '' | ||||
|  |       }, | ||||
|  |       ISCRTForm: '0', | ||||
|  |       validateFlag: false | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   computed: { | ||||
|  |     dataRule() { | ||||
|  |       return { | ||||
|  |         oldDpId: [ | ||||
|  |           { required: true, message: '请选择目标镜片', trigger: 'change' } | ||||
|  |         ], | ||||
|  |         eyeType: [ | ||||
|  |           { required: true, message: '请选择眼别', trigger: 'change' } | ||||
|  |         ], | ||||
|  |         brandId: [ | ||||
|  |           { required: true, message: '请选择品牌', trigger: 'change' } | ||||
|  |         ], | ||||
|  |         curvity: [ | ||||
|  |           { required: true, message: '请选择屈率', trigger: 'blur' } | ||||
|  |         ], | ||||
|  |         baseArc: [ | ||||
|  |           { required: true, message: '请选择基弧', trigger: 'blur' } | ||||
|  |         ], | ||||
|  |         degrees: [ | ||||
|  |           { required: true, message: '请选择度数', trigger: 'change' } | ||||
|  |         ], | ||||
|  |         azt: [ | ||||
|  |           { required: true, message: '请选择AZT', trigger: 'change' } | ||||
|  |         ], | ||||
|  |         bc: [ | ||||
|  |           { required: true, message: '请选择BC', trigger: 'blur' } | ||||
|  |         ], | ||||
|  |         rzd: [ | ||||
|  |           { required: true, message: '请选择RZD', trigger: 'change' } | ||||
|  |         ], | ||||
|  |         lza: [ | ||||
|  |           { required: true, message: '请选择LZA', trigger: 'blur' } | ||||
|  |         ], | ||||
|  |         diameter: [ | ||||
|  |           { required: true, message: '请选择直径', trigger: 'blur' } | ||||
|  |         ], | ||||
|  |         colourId: [ | ||||
|  |           { required: true, message: '请选择颜色', trigger: 'change' } | ||||
|  |         ] | ||||
|  | 
 | ||||
|  |       } | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   created() { | ||||
|  | 
 | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     // 获取可以换片的定片记录 | ||||
|  |     async getReplaceList() { | ||||
|  |       const { data: res } = await this.$http.get('/dp/getReplaceList', { | ||||
|  |         params: { | ||||
|  |           patientIdNumber: this.patientIdNumber, | ||||
|  |           drgsName: window.localStorage.getItem('identity'), | ||||
|  |           eyeType: this.dataForm.eyeType, | ||||
|  |           isInvisible: this.tabTitle === 'okLens' ? 0 : (this.tabTitle === 'RGP' ? 1 : 2) // 0是ok镜 1是RGP隐形眼镜 2是离焦软镜 | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       this.replaceList = res.data | ||||
|  |     }, | ||||
|  |     leftRightInit() { | ||||
|  |       this.$nextTick(() => { | ||||
|  |         this.ISCRTForm = '0' | ||||
|  |         this.$refs.dataForm.resetFields() // 重置表单 | ||||
|  |         console.log(this.eyeType) | ||||
|  |         this.dataForm.eyeType = this.title === '新增' || this.title === '借片' || this.title === '换片' || this.title === '补录' ? this.eyeType : '' | ||||
|  |         this.dataForm.status = this.tabTitle === 'LJRJ' ? 4 : '' | ||||
|  |         if (this.title === '换片') { | ||||
|  |           // 获取可以换片的定片记录 | ||||
|  |           this.getReplaceList() | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       this.dataForm.oldDpId = '' | ||||
|  |     }, | ||||
|  |     colorChange(e) { | ||||
|  |       console.log(e) | ||||
|  |       console.log(this.brandCOlorList) | ||||
|  |     }, | ||||
|  |     // 选择品牌变化 | ||||
|  |     selectOptionBrandHandle(item) { | ||||
|  |       console.log('选择品牌变化', item) | ||||
|  |       this.ISCRTForm = item.flag | ||||
|  |       this.dataForm.brand = item.brand | ||||
|  |       this.getBrandColorList(item, item.id) | ||||
|  |     }, | ||||
|  |     // 选择颜色变化 | ||||
|  |     selectOptionColorHandle(item) { | ||||
|  |       console.log(item) | ||||
|  |       this.dataForm.colour = item.colour | ||||
|  |     }, | ||||
|  |     // 获取颜色 | ||||
|  |     async getBrandColorList(item, brandId, title) { | ||||
|  |       const { data: res } = await this.$http.get('/dp/getBrandColourList', { | ||||
|  |         params: { | ||||
|  |           brandId: brandId | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       this.brandCOlorList = res.data | ||||
|  |       console.log(res.data) | ||||
|  |       if (title !== '编辑') { | ||||
|  |         this.dataForm.colourId = this.dataForm.eyeType === 'OD' ? res.data.odDefault.id : res.data.osDefault.id | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 校验 | ||||
|  |     validateFun() { | ||||
|  |       const dataForm = this.dataForm | ||||
|  |       // 进口品牌是否填写完整 flag=1 | ||||
|  |       const ImportCRTFlag1 = dataForm.bc || dataForm.lza || dataForm.rzd || dataForm.brandId || dataForm.colourId || dataForm.diameter | ||||
|  |       // 国产品牌是否填写完整 flag=0 | ||||
|  |       const chinaFlag0 = dataForm.brandId || dataForm.colourId || dataForm.curvity || dataForm.degrees || dataForm.diameter | ||||
|  |       // 国产品牌 flag=2 | ||||
|  |       const chinaFlag2 = dataForm.brandId || dataForm.colourId || dataForm.curvity || dataForm.degrees || dataForm.diameter || dataForm.atz | ||||
|  |       // 如果是进口品牌并且填写完整 flag=1 || 如果是第一种类型的国产品牌填写完整 flag=0 || 如果是第二种类型的国产品牌填写完整 flag=2 | ||||
|  |       if ((this.ISCRTForm === '1' && ImportCRTFlag1) || (this.ISCRTForm === '0' && chinaFlag0) || (this.ISCRTForm === '2' && chinaFlag2)) { | ||||
|  |         this.$refs.dataForm.validate((valid) => { | ||||
|  |           if (!valid) { | ||||
|  |             this.validateFlag = false | ||||
|  |             return false | ||||
|  |           } else { | ||||
|  |             this.validateFlag = true | ||||
|  |           } | ||||
|  |         }) | ||||
|  |       } | ||||
|  |       // 如果是进口品牌没有填写完整 flag=1 || 如果是第一种类型的国产品牌填写完整 flag=0 || 如果是第二种类型的国产品牌填写完整 flag=2 | ||||
|  |       else if ((this.ISCRTForm === '1' && !ImportCRTFlag1) || (this.ISCRTForm === '0' && !chinaFlag0) || (this.ISCRTForm === '2' && !chinaFlag2)) { | ||||
|  |         this.validateFlag = false | ||||
|  |       } | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
| @ -0,0 +1,269 @@ | |||||
|  | <template> | ||||
|  |   <el-dialog | ||||
|  |     class="oklens-removeLens-returnGoods" | ||||
|  |     :visible.sync="visible" | ||||
|  |     :close-on-click-modal="false" | ||||
|  |     width="30%" | ||||
|  |     :title="dataForm.title" | ||||
|  |     append-to-body | ||||
|  |     @close="closeDialog" | ||||
|  |   > | ||||
|  |     <div class="info"> | ||||
|  |       <div class="orderDate"> | ||||
|  |         <span class="info-left">订片日期:</span> | ||||
|  |         <span class="info-right">{{ dataForm.dpDate }}</span> | ||||
|  |       </div> | ||||
|  |       <div class="orderInfo"> | ||||
|  |         <span class="info-left">订片信息:</span> | ||||
|  |         <div class="info-right"> | ||||
|  |           <p>品牌:{{ dataForm.brand }}</p> | ||||
|  |           <p>眼别:{{ dataForm.eyeType }}</p> | ||||
|  |           <p v-show="dataForm.curvity">曲率:{{ dataForm.curvity }}</p> | ||||
|  |           <p v-show="dataForm.degrees">度数:{{ dataForm.degrees }}</p> | ||||
|  |           <p v-show="dataForm.azt">AZT:{{ dataForm.azt }}</p> | ||||
|  |           <p v-show="dataForm.bc">BC:{{ dataForm.bc }}</p> | ||||
|  |           <p v-show="dataForm.rzd">RZD:{{ dataForm.rzd }}</p> | ||||
|  |           <p v-show="dataForm.lza">LZA:{{ dataForm.lza }}</p> | ||||
|  |           <p v-show="dataForm.diameter">直径:{{ dataForm.diameter }}</p> | ||||
|  |           <p>颜色:{{ dataForm.colour }}</p> | ||||
|  |         </div> | ||||
|  |       </div> | ||||
|  |       <template v-if="dataForm.title=='取镜记录'"> | ||||
|  |         <div class="removeLensDate"> | ||||
|  |           <span class="info-left">取镜日期:</span> | ||||
|  |           <span class="info-right">{{ dataForm.takeAwayDate }}</span> | ||||
|  |         </div> | ||||
|  |         <div class="factoryNumber"> | ||||
|  |           <span class="info-left">出厂编号:</span> | ||||
|  |           <span class="info-right">{{ dataForm.factoryNumber }}</span> | ||||
|  |         </div> | ||||
|  |         <div class="remarks"> | ||||
|  |           <span class="info-left">备注:</span> | ||||
|  |           <div class="info-right">{{ dataForm.remark }}</div> | ||||
|  |         </div> | ||||
|  |         <div class="sign"> | ||||
|  |           <span class="info-left">取镜签字:</span> | ||||
|  |           <img style="width: 80px;height: 40px;" :src="dataForm.signFile"> | ||||
|  |         </div> | ||||
|  |       </template> | ||||
|  |     </div> | ||||
|  |     <template v-if="dataForm.title !='取镜记录'"> | ||||
|  |       <el-form ref="dataForm" :model="dataForm" :rules="dataRule"> | ||||
|  |         <template v-if="dataForm.title=='取镜'"> | ||||
|  |           <el-form-item label="操作:" label-width="90px" prop="operation"> | ||||
|  |             <el-radio-group v-model="dataForm.status"> | ||||
|  |               <el-radio label="4">取镜</el-radio> | ||||
|  |               <el-radio label="5">放弃</el-radio> | ||||
|  |             </el-radio-group> | ||||
|  |           </el-form-item> | ||||
|  |         </template> | ||||
|  |         <el-form-item :label="dataForm.title + '日期:'" label-width="90px" prop="shareDate"> | ||||
|  |           <el-date-picker v-model="dataForm.shareDate" type="date" :placeholder="'请选择' + dataForm.title + '日期'" value-format="yyyy-MM-dd" /> | ||||
|  |         </el-form-item> | ||||
|  |         <el-form-item label="出厂编号:" label-width="90px"> | ||||
|  |           <el-input v-model="dataForm.factoryNumber" placeholder="核对并填写出厂编号" /> | ||||
|  |         </el-form-item> | ||||
|  |         <el-form-item label="备 注:" label-width="90px" prop="remark"> | ||||
|  |           <el-input v-model="dataForm.remark" type="textarea" placeholder="备注信息" /> | ||||
|  |         </el-form-item> | ||||
|  |       </el-form> | ||||
|  |     </template> | ||||
|  |     <template v-if="dataForm.title=='取镜'"> | ||||
|  |       <div class="signFile"> | ||||
|  |         <span class="info-left">取镜签名:</span> | ||||
|  |         <div class="signFile-right" @click="signClick"> | ||||
|  |           <el-button v-if="lensFlag" type="primary" icon="el-icon-edit" size="small">签名</el-button> | ||||
|  |           <span v-else class="sign-img"> | ||||
|  |             <img style="width: 80px;height: 40px;" :src="lensSign"> | ||||
|  |           </span> | ||||
|  |           <span /> | ||||
|  |         </div> | ||||
|  |       </div> | ||||
|  |     </template> | ||||
|  |     <template slot="footer"> | ||||
|  |       <el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||
|  |       <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> | ||||
|  |     </template> | ||||
|  |   </el-dialog> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import debounce from 'lodash/debounce' | ||||
|  | export default { | ||||
|  |   props: { | ||||
|  |     brandList: { | ||||
|  |       type: Array, | ||||
|  |       default: () => [] | ||||
|  |     }, | ||||
|  |     fatherFactoryNumber: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       visible: false, | ||||
|  |       dataForm: { | ||||
|  |         status: '4', | ||||
|  |         shareDate: '', | ||||
|  |         factoryNumber: '', | ||||
|  |         signFile: '', | ||||
|  |         remark: '' | ||||
|  |       }, | ||||
|  |       ISCRTForm: false | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   computed: { | ||||
|  |     dataRule() { | ||||
|  |       // var validataFactoryNumber = (rule, value, callback) => { | ||||
|  |       //   if (value !== this.dataForm.factoryNumbered) { | ||||
|  |       //     return callback(new Error('您输入的出厂编号不匹配')) | ||||
|  |       //   } | ||||
|  |       //   callback() | ||||
|  |       // } | ||||
|  |       return { | ||||
|  |         shareDate: [ | ||||
|  |           { required: true, message: '请选择日期', trigger: 'change' } | ||||
|  |         ] | ||||
|  |         // factoryNumber: [ | ||||
|  |         //   { required: true, validator: validataFactoryNumber, trigger: 'blur' } | ||||
|  |         // ] | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     lensFlag: { | ||||
|  |       get() { | ||||
|  |         return this.$store.getters.lensFlag | ||||
|  |       }, | ||||
|  |       set(val) {} | ||||
|  |     }, | ||||
|  |     lensSign: { | ||||
|  |       get() { | ||||
|  |         return this.$store.getters.lensSign | ||||
|  |       }, | ||||
|  |       set(val) { | ||||
|  |       } | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     init() { | ||||
|  |       this.visible = true | ||||
|  |       if (this.dataForm.title !== '取镜记录') { | ||||
|  |         this.$nextTick(() => { | ||||
|  |           this.$store.commit('lensSign', '') | ||||
|  |           this.$store.commit('lensFlag', true) | ||||
|  |           this.$refs.dataForm.resetFields() // 重置表单 | ||||
|  |         }) | ||||
|  |       } | ||||
|  |       this.getTaskAwayLogHandle() | ||||
|  |     }, | ||||
|  |     // 获取取镜记录 | ||||
|  |     async getTaskAwayLogHandle() { | ||||
|  |       const { data: res } = await this.$http.get('/dp/getTaskAwayLog', { | ||||
|  |         params: { | ||||
|  |           dpId: this.dataForm.dpId | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       this.dataForm = { | ||||
|  |         ...this.dataForm, | ||||
|  |         ...res.data | ||||
|  |       } | ||||
|  |       res.data.factoryNumber ? '' : this.dataForm.factoryNumber = this.fatherFactoryNumber | ||||
|  |       if (this.dataForm.title === '退货') { | ||||
|  |         this.dataForm.remark = '' | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     signClick() { | ||||
|  |       // this.$parent.$parent.$parent.$parent.beginSign(2) | ||||
|  |       this.$store.commit('beginSign', 5) | ||||
|  |     }, | ||||
|  |     // 表单提交 320321188808123330    18888888888 | ||||
|  |     dataFormSubmitHandle: debounce(function() { | ||||
|  |       this.dataForm.signFile = this.$store.getters.lensSign | ||||
|  |       if (this.dataForm.title !== '取镜记录') { | ||||
|  |         this.$refs.dataForm.validate((valid) => { | ||||
|  |           if (!valid) { | ||||
|  |             return false | ||||
|  |           } | ||||
|  |           // if (this.dataForm.title === '取镜' && !this.dataForm.signFile) { | ||||
|  |           //   this.$message.error('请填写签名') | ||||
|  |           //   return false | ||||
|  |           // } | ||||
|  |           // 取镜/退货 | ||||
|  |           this.$http.post(this.dataForm.title === '取镜' ? '/dp/takeAway' : '/dp/returnDp', this.dataForm).then(({ data: res }) => { | ||||
|  |             if (res.code !== 0) { | ||||
|  |               return this.$message.error(res.msg) | ||||
|  |             } | ||||
|  |             this.$message({ | ||||
|  |               message: this.$t('prompt.success'), | ||||
|  |               type: 'success', | ||||
|  |               duration: 500, | ||||
|  |               onClose: () => { | ||||
|  |                 this.visible = false | ||||
|  |                 this.$emit('getDataList') | ||||
|  |               } | ||||
|  |             }) | ||||
|  |           }).catch(() => {}) | ||||
|  |         }) | ||||
|  |       } else { | ||||
|  |         this.visible = false | ||||
|  |       } | ||||
|  |     }, 1000, { leading: true, trailing: false }), | ||||
|  |     // 关闭弹框 | ||||
|  |     closeDialog() { | ||||
|  |       this.$emit('closeDialog') | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | .oklens-removeLens-returnGoods { | ||||
|  |   .sign-img { | ||||
|  |     width: 78px; | ||||
|  |     height: 36px; | ||||
|  |     overflow: hidden; | ||||
|  |     display: flex; | ||||
|  |     justify-content: center; | ||||
|  |     align-items: center; | ||||
|  |   } | ||||
|  |   .info { | ||||
|  |     margin-left: 16px; | ||||
|  |     margin-bottom: 16px; | ||||
|  |     font-size: 14px; | ||||
|  |     line-height: 32px; | ||||
|  |   } | ||||
|  |   .orderInfo,.removeLensDate,.factoryNumber,.remarks,.signFile { | ||||
|  |     display: flex; | ||||
|  |     line-height: 32px; | ||||
|  |     align-items: center; | ||||
|  |   } | ||||
|  |   .info-left { | ||||
|  |     display: inline-block; | ||||
|  |     width: 80px; | ||||
|  |     text-align: right; | ||||
|  |     padding-right: 6px; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
|  | <style lang="scss"> | ||||
|  | .oklens-removeLens-returnGoods { | ||||
|  |   .el-dialog__header { | ||||
|  |     margin-bottom:12px | ||||
|  |   } | ||||
|  |     .el-dialog__body { | ||||
|  |         padding-right: 30px; | ||||
|  |     } | ||||
|  |     .formItemOne .el-form-item__content { | ||||
|  |       display: flex; | ||||
|  |     } | ||||
|  |     .el-date-editor.el-input, .el-date-editor.el-input__inner{ | ||||
|  |       width: 100%; | ||||
|  |     } | ||||
|  |     .el-select { | ||||
|  |       display: block; | ||||
|  |     } | ||||
|  |     .el-input-number { | ||||
|  |       display: block; | ||||
|  |       width: 100%; | ||||
|  |     } | ||||
|  | } | ||||
|  | </style> | ||||
| @ -0,0 +1,175 @@ | |||||
|  | <template> | ||||
|  |   <div class="drawer"> | ||||
|  |     <div :class="maskClass" @click="closeByMask" /> | ||||
|  |     <div :class="mainClass" :style="mainStyle" class="main"> | ||||
|  |       <div class="drawer-body"> | ||||
|  |         <shrink ref="shrinkTwo" :arrowType="2" @changeType="selectType" @display="closeByButton"/> | ||||
|  |         <slot/> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import shrink from '@/components/360View/shrink' | ||||
|  | 
 | ||||
|  | export default { | ||||
|  |   components: { shrink }, | ||||
|  |   props: { | ||||
|  |     // 是否打开 | ||||
|  |     display: { | ||||
|  |       type: Boolean | ||||
|  |     }, | ||||
|  | 
 | ||||
|  |     // 标题 | ||||
|  |     title: { | ||||
|  |       type: String, | ||||
|  |       default: '标题' | ||||
|  |     }, | ||||
|  | 
 | ||||
|  |     // 是否显示关闭按钮 | ||||
|  |     closable: { | ||||
|  |       type: Boolean, | ||||
|  |       default: true | ||||
|  |     }, | ||||
|  | 
 | ||||
|  |     // 是否显示遮罩 | ||||
|  |     mask: { | ||||
|  |       type: Boolean, | ||||
|  |       default: true | ||||
|  |     }, | ||||
|  | 
 | ||||
|  |     // 是否点击遮罩关闭 | ||||
|  |     maskClosable: { | ||||
|  |       type: Boolean, | ||||
|  |       default: true | ||||
|  |     }, | ||||
|  | 
 | ||||
|  |     // 宽度(支持百分比) | ||||
|  |     width: { | ||||
|  |       type: String, | ||||
|  |       default: '400px' | ||||
|  |     }, | ||||
|  | 
 | ||||
|  |     // 是否在父级元素中打开 | ||||
|  |     inner: { | ||||
|  |       type: Boolean, | ||||
|  |       default: false | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   computed: { | ||||
|  |     maskClass: function() { | ||||
|  |       return { | ||||
|  |         'mask-show': (this.mask && this.display), | ||||
|  |         'mask-hide': !(this.mask && this.display), | ||||
|  |         'inner': this.inner | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     mainClass: function() { | ||||
|  |       return { | ||||
|  |         'main-show': this.display, | ||||
|  |         'main-hide': !this.display, | ||||
|  |         'inner': this.inner | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     mainStyle: function() { | ||||
|  |       return { | ||||
|  |         width: this.width, | ||||
|  |         right: this.display ? '0' : `-${this.width}`, | ||||
|  |         borderLeft: this.mask ? 'none' : '1px solid #eee' | ||||
|  |       } | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   mounted() { | ||||
|  |     if (this.inner) { | ||||
|  |       const box = this.$el.parentNode | ||||
|  |       box.style.position = 'relative' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     closeByMask() { | ||||
|  |       this.maskClosable && this.$emit('update:display', false) | ||||
|  |     }, | ||||
|  |     closeByButton() { | ||||
|  |       this.$emit('update:display', false) | ||||
|  |       document.getElementsByClassName('drawer')[0].style.display = 'none' | ||||
|  |     }, | ||||
|  |     // 点击shark上模块展示对应模块 | ||||
|  |     selectType(type) { | ||||
|  |       this.$parent.dataType = type | ||||
|  |     }, | ||||
|  |     selectShrink() { | ||||
|  |       this.$refs.shrinkTwo.active = 'imgOne' | ||||
|  |     }, | ||||
|  |     init() { | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | 
 | ||||
|  | <style lang="scss" scoped> | ||||
|  | .drawer { | ||||
|  |   width: auto; | ||||
|  |   height: 100%; | ||||
|  |   /* 遮罩 */ | ||||
|  |   .mask-show { | ||||
|  |     //position: fixed; | ||||
|  |     //top: 0; | ||||
|  |     //left: 0; | ||||
|  |     //width: 100%; | ||||
|  |     //height: 100%; | ||||
|  |     //z-index: 999; | ||||
|  |     //background-color: rgba(0,0,0,.5); | ||||
|  |     //opacity: 1; | ||||
|  |     //transition: opacity .5s; | ||||
|  |   } | ||||
|  |   .mask-hide { | ||||
|  |     opacity: 0; | ||||
|  |     transition: opacity .5s; | ||||
|  |   } | ||||
|  | 
 | ||||
|  |   /* 滑块 */ | ||||
|  |   .main { | ||||
|  |     position: fixed; | ||||
|  |     z-index: 999; | ||||
|  |     top: 60px; | ||||
|  |     height: calc(100% - 70px); | ||||
|  |     background: #fff; | ||||
|  |     transition: all 0.5s; | ||||
|  |   } | ||||
|  |   .main-show { | ||||
|  |     opacity: 1; | ||||
|  |   } | ||||
|  |   .main-hide { | ||||
|  |     opacity: 0; | ||||
|  |   } | ||||
|  | 
 | ||||
|  |   /* 某个元素内部显示 */ | ||||
|  |   .inner { | ||||
|  |     position: absolute; | ||||
|  |   } | ||||
|  | 
 | ||||
|  |   /* 其他样式 */ | ||||
|  |   .drawer-head { | ||||
|  |     display: flex; | ||||
|  |     justify-content: space-between; | ||||
|  |     height: 45px; | ||||
|  |     line-height: 45px; | ||||
|  |     padding: 0 15px; | ||||
|  |     font-size: 14px; | ||||
|  |     font-weight: bold; | ||||
|  |     border-bottom: 1px solid #eee; | ||||
|  |     .close-btn { | ||||
|  |       display: inline-block; | ||||
|  |       cursor: pointer; | ||||
|  |       height: 100%; | ||||
|  |       padding-left: 20px; | ||||
|  |     } | ||||
|  |   } | ||||
|  |   .drawer-body { | ||||
|  |     display: flex; | ||||
|  |     height: 100%; | ||||
|  |     font-size: 14px; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
								
									
										File diff suppressed because it is too large
									
								
							
						
					| @ -0,0 +1,48 @@ | |||||
|  | <template> | ||||
|  |   <div class="detail-view"> | ||||
|  |     <imgRecord v-if="imgFlag" :patient-info="patientBaseData" :exam-info="info"/> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import imgRecord from './img-record' | ||||
|  | export default { | ||||
|  |   components: { | ||||
|  |     imgRecord | ||||
|  |   }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       imgFlag: false, | ||||
|  |       info: {}, | ||||
|  |       patientBaseData: {} | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   mounted() { | ||||
|  |     this.info = JSON.parse(this.$Base64.decode(this.$route.query.info)) | ||||
|  |     this.getPatientData() | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     // 根据id获取患者信息 | ||||
|  |     async getPatientData() { | ||||
|  |       if (!this.info.patientId) return | ||||
|  |       const { data: res } = await this.$http.get( | ||||
|  |         '/patient/view/getPatientData', | ||||
|  |         { | ||||
|  |           params: { | ||||
|  |             patientId: this.info.patientId | ||||
|  |           } | ||||
|  |         } | ||||
|  |       ) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.patientBaseData = res.data ? res.data : {} | ||||
|  |         this.imgFlag = true | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | 
 | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | </style> | ||||
| @ -0,0 +1,284 @@ | |||||
|  | <template> | ||||
|  |   <div id="fileId" v-resize="handleResize" class="container" file-solt-id="fileId"> | ||||
|  |     <div v-if="fileType == 'PDF' && instanceList.length > 1" style="margin: 2px"> | ||||
|  |       <el-pagination simple :current-page="curIndex" :total="instanceList.length" defaultPageSize="1"  @current-change="handleCurrentChange" /> | ||||
|  |     </div> | ||||
|  |     <iframe v-if="fileType == 'PDF'" :src="pdfUrl + '#view=FitH,top&pagemode=thumbs'" frameborder="0" style="width: 100%; height: 100%"></iframe> | ||||
|  |     <div v-if="fileType == 'DCM'" class="dicom" ref="dicomElement"></div> | ||||
|  |     <div v-if="fileType == 'JPG'" style="width: 100%;height: 100%" class="dicom" ref="dicomElement"></div> | ||||
|  | <!--    <iframe v-if="curFile.fileType == 'PDF'" :src="curFile.filePath + '#view=FitH,top&pagemode=thumbs'" frameborder="0" style="width: 100%; height: 100%" />--> | ||||
|  | <!--    <div v-if="curFile.fileType == 'DCM'" ref="dicomElement" class="dicom" />--> | ||||
|  | <!--    <div v-if="curFile.fileType == 'JPG' || curFile.fileType == 'PNG'" ref="imgElement" class="dicom" />--> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | 
 | ||||
|  | export default { | ||||
|  |   directives: { // 使用局部注册指令的方式 | ||||
|  |     resize: { // 指令的名称 | ||||
|  |       bind(el, binding) { // el为绑定的元素,binding为绑定给指令的对象 | ||||
|  |         let width = ''; let height = '' | ||||
|  |         function isReize() { | ||||
|  |           const style = document.defaultView.getComputedStyle(el) | ||||
|  |           if (width !== style.width || height !== style.height) { | ||||
|  |             binding.value() | ||||
|  |           } | ||||
|  |           width = style.width | ||||
|  |           height = style.height | ||||
|  |         } | ||||
|  |         el.__vueSetInterval__ = setInterval(isReize, 300) | ||||
|  |       }, | ||||
|  |       unbind(el) { | ||||
|  |         clearInterval(el.__vueSetInterval__) | ||||
|  |       } | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   props: ['fileObject'], | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       curFile: this.fileObject, | ||||
|  |       curElement: '', | ||||
|  |       fileType: '', | ||||
|  |       viewportDefault: '', | ||||
|  |       zoomValue: '', | ||||
|  |       wwwcValue: '', | ||||
|  |       renderTime: '', | ||||
|  |       pdfUrl: '', | ||||
|  |       curIndex: 1, | ||||
|  |       total: 1, | ||||
|  |       childrenList: [], | ||||
|  |       instanceList: [] | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   watch: { | ||||
|  |     fileObject(val) { | ||||
|  |       this.curFile = val | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   created() { | ||||
|  |     this.instanceList = this.fileObject.instanceList || [] | ||||
|  |     this.fileType = this.instanceList.length ? this.instanceList[0].imageType : '' | ||||
|  |   }, | ||||
|  |   mounted() { | ||||
|  |     this.initData() | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     handleCurrentChange (val) { | ||||
|  |       console.log(val) | ||||
|  |       this.pdfUrl = this.instanceList[val - 1].imageId | ||||
|  |     }, | ||||
|  |     // 加载DICM和图片 | ||||
|  |     drawCornerStone(imageUrl, type) { | ||||
|  |       const self = this | ||||
|  |       let element = '' | ||||
|  |       let imageId = '' | ||||
|  |       if (type === 'DCM') { | ||||
|  |         element = this.$refs.dicomElement | ||||
|  |         imageId = 'wadouri:' + imageUrl// dicom文件需要加上前缀'wadouri:' | ||||
|  |       } else { | ||||
|  |         element = this.$refs.dicomElement | ||||
|  |         imageId = imageUrl | ||||
|  |       } | ||||
|  |       this.$cornerstoneTools.init() | ||||
|  |       this.$cornerstone.enable(element) | ||||
|  |       element.width = document.documentElement.clientWidth | ||||
|  |       element.height = document.documentElement.clientHeight | ||||
|  |       this.$cornerstone.loadImage(imageId).then(function (image) { | ||||
|  |         if (type === 'DCM') { | ||||
|  |           const viewport = self.$cornerstone.getDefaultViewportForImage(element, image) | ||||
|  |           self.viewportDefault = viewport | ||||
|  |           self.$cornerstone.displayImage(element, image, viewport) | ||||
|  |         } else { | ||||
|  |           self.$cornerstone.displayImage(element, image) | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       element.addEventListener('cornerstoneimagerendered', this.getZoomRate)// 监听事件 | ||||
|  |       // let imageId = '' | ||||
|  |       // const self = this | ||||
|  |       // if (type === 'DCM') { | ||||
|  |       //   imageId = 'wadouri:' + imageUrl // dicom文件需要加上前缀'wadouri:' | ||||
|  |       // } else { | ||||
|  |       //   imageId = imageUrl | ||||
|  |       // } | ||||
|  |       // this.$cornerstoneTools.init() | ||||
|  |       // this.$cornerstone.enable(this.curElement) | ||||
|  |       // this.curElement.width = document.documentElement.clientWidth | ||||
|  |       // this.curElement.height = document.documentElement.clientHeight | ||||
|  |       // this.$cornerstone.loadImage(imageId).then(function(image) { | ||||
|  |       //   // 获取当前图像默认的窗宽窗位 | ||||
|  |       //   const viewport = self.$cornerstone.getDefaultViewportForImage(self.curElement, image) | ||||
|  |       //   self.viewportDefault = viewport | ||||
|  |       //   if (type === 'DCM') { | ||||
|  |       //     self.$cornerstone.displayImage(self.curElement, image, viewport) | ||||
|  |       //   } else { | ||||
|  |       //     self.$cornerstone.displayImage(self.curElement, image) | ||||
|  |       //   } | ||||
|  |       // }) | ||||
|  |     }, | ||||
|  |     // 重新渲染 | ||||
|  |     handleResize() { | ||||
|  |       const canvas = document.getElementById('fileId') | ||||
|  |       if (this.curElement && canvas) { | ||||
|  |         this.curElement.style.width = canvas.offsetWidth + 'px' | ||||
|  |         this.curElement.style.height = canvas.offsetHeight + 'px' | ||||
|  |         this.$cornerstone.resize(this.curElement) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 窗宽窗位 | ||||
|  |     setWwwl() { | ||||
|  |       const WwwcTool = this.$cornerstoneTools.WwwcTool | ||||
|  |       this.$cornerstoneTools.addTool(WwwcTool) | ||||
|  |       this.$cornerstoneTools.setToolActive('Wwwc', { mouseButtonMask: 1 }) | ||||
|  |       this.$forceUpdate() | ||||
|  |     }, | ||||
|  |     // 负片 | ||||
|  |     setInvert() { | ||||
|  |       if (!this.curElement) return | ||||
|  |       this.viewportDefault.invert = !this.viewportDefault.invert | ||||
|  |       this.$cornerstone.setViewport(this.curElement, this.viewportDefault) | ||||
|  |     }, | ||||
|  |     // 缩放 | ||||
|  |     setZoom() { | ||||
|  |       const ZoomTool = this.$cornerstoneTools.ZoomTool | ||||
|  |       this.$cornerstoneTools.addTool(ZoomTool, { | ||||
|  |         configuration: { | ||||
|  |           invert: false, | ||||
|  |           preventZoomOutsideImage: false, | ||||
|  |           minScale: 0.1, | ||||
|  |           maxScale: 20.0 | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       this.$cornerstoneTools.setToolActive('Zoom', { mouseButtonMask: 1 }) | ||||
|  |     }, | ||||
|  |     // 移动 | ||||
|  |     setMove() { | ||||
|  |       const PanTool = this.$cornerstoneTools.PanTool | ||||
|  |       this.$cornerstoneTools.addTool(PanTool) | ||||
|  |       this.$cornerstoneTools.setToolActive('Pan', { mouseButtonMask: 1 }) | ||||
|  |     }, | ||||
|  |     // 放大镜 | ||||
|  |     setMagnify() { | ||||
|  |       const MagnifyTool = this.$cornerstoneTools.MagnifyTool | ||||
|  |       this.$cornerstoneTools.addTool(MagnifyTool) | ||||
|  |       this.$cornerstoneTools.setToolActive('Magnify', { mouseButtonMask: 1 }) | ||||
|  |     }, | ||||
|  |     // 重载 | ||||
|  |     setReset() { | ||||
|  |       if (!this.curElement) return | ||||
|  |       this.$cornerstone.reset(this.curElement) | ||||
|  |     }, | ||||
|  |     setScroll() { | ||||
|  |       const self = this | ||||
|  |       const element = this.$refs.dicomElement | ||||
|  |       if (!element) return | ||||
|  |       this.$cornerstoneTools.init() | ||||
|  |       this.$cornerstone.enable(element) | ||||
|  |       const s = document.getElementById('fileId') | ||||
|  |       element.width = s.clientWidth | ||||
|  |       element.height = s.clientHeight | ||||
|  |       const series = this.childrenList | ||||
|  |       let imageIds = '' | ||||
|  |       if (this.fileType === 'DCM') { | ||||
|  |         const scheme = 'wadouri' | ||||
|  |         imageIds = series.map(seriesImage => `${scheme}:${seriesImage.imageId}`) | ||||
|  |       } else { | ||||
|  |         imageIds = series.map(seriesImage => `${seriesImage.imageId}`) | ||||
|  |       } | ||||
|  |       const StackScrollTool = this.$cornerstoneTools.StackScrollTool | ||||
|  |       this.total = imageIds.length | ||||
|  |       const stack = { | ||||
|  |         currentImageIdIndex: 0, | ||||
|  |         imageIds | ||||
|  |       } | ||||
|  |       // load images and set the stack | ||||
|  |       // loadAndCacheImage | ||||
|  |       this.$cornerstone.loadImage(imageIds[0]).then((image) => { | ||||
|  |         const viewport = this.$cornerstone.getDefaultViewportForImage(element, image) | ||||
|  |         self.viewportDefault = viewport | ||||
|  |         this.$cornerstone.displayImage(element, image, viewport) | ||||
|  |         this.$cornerstoneTools.addStackStateManager(element, ['stack']) | ||||
|  |         this.$cornerstoneTools.addToolState(element, 'stack', stack) | ||||
|  |       }) | ||||
|  |       this.$cornerstoneTools.addTool(StackScrollTool) | ||||
|  |       this.$cornerstoneTools.setToolActive('StackScroll', { mouseButtonMask: 1 }) | ||||
|  |       element.addEventListener('cornerstoneimagerendered', this.getZoomRate)// 监听事件 | ||||
|  |     }, | ||||
|  |     // 计算缩放/窗宽/窗位/渲染时间 | ||||
|  |     getZoomRate(e) { | ||||
|  |       if (!this.curElement) return | ||||
|  |       const contextData = e.detail | ||||
|  |       const viewport = this.$cornerstone.getViewport(this.curElement) | ||||
|  |       const dcmaxTools = this.$cornerstoneTools.getToolState(this.curElement, 'stack') | ||||
|  |       this.zoomValue = viewport.scale.toFixed(2) | ||||
|  |       this.wwwcValue = Math.round(viewport.voi.windowWidth) + '/' + Math.round(viewport.voi.windowCenter) | ||||
|  |       this.renderTime = contextData.renderTimeInMs.toFixed(2) | ||||
|  |       if (dcmaxTools && dcmaxTools.data && dcmaxTools.data.length) { | ||||
|  |         this.curIndex = dcmaxTools.data[0].currentImageIdIndex + 1 | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     initData() { | ||||
|  |       if (this.instanceList.length === 1 && this.fileType === 'DCM') { | ||||
|  |         this.curElement = this.$refs.imgElement | ||||
|  |         const imageUrl = this.instanceList[0].imageId | ||||
|  |         this.drawCornerStone(imageUrl, 'DCM') | ||||
|  |         this.handleResize() | ||||
|  |       } else if (this.instanceList.length === 1 && (this.fileType === 'JPG' || this.fileType === 'PNG')) { | ||||
|  |         this.curElement = this.$refs.imgElement | ||||
|  |         const imageUrl = this.instanceList[0].imageId | ||||
|  |         this.drawCornerStone(imageUrl, 'JPG') | ||||
|  |         this.handleResize() | ||||
|  |       } else if (this.instanceList.length > 1 && (this.fileType === 'JPG' || this.fileType === 'PNG')) { | ||||
|  |         this.curElement = this.$refs.imgElement | ||||
|  |         this.childrenList = this.instanceList | ||||
|  |         this.setScroll() | ||||
|  |         this.handleResize() | ||||
|  |       } else if (this.instanceList.length > 1 && this.fileType === 'DCM') { | ||||
|  |         console.log('序列', this.instanceList) | ||||
|  |         this.curElement = this.$refs.dicomElement | ||||
|  |         this.childrenList = this.instanceList | ||||
|  |         this.setScroll() | ||||
|  |         this.handleResize() | ||||
|  |       } else if (this.fileType === 'PDF') { | ||||
|  |         console.log('pdf') | ||||
|  |         this.pdfUrl = this.instanceList[0].imageId | ||||
|  |         this.total = this.instanceList.length | ||||
|  |       } | ||||
|  |       // if (this.curFile && this.curFile.fileType === 'DCM') { | ||||
|  |       //   this.curElement = this.$refs.dicomElement | ||||
|  |       //   const imageUrl = this.curFile.filePath | ||||
|  |       //   this.drawCornerStone(imageUrl, 'DCM') | ||||
|  |       //   // 每当图像被cornerstone重新绘制时,将发出CornerstoneImageRendered事件调用 | ||||
|  |       //   this.curElement.addEventListener('cornerstoneimagerendered', this.getZoomRate)// 监听事件 | ||||
|  |       // } else if (this.curFile && (this.curFile.fileType === 'JPG' || this.curFile.fileType === 'PNG')) { | ||||
|  |       //   const imageUrl = this.curFile.filePath | ||||
|  |       //   this.curElement = this.$refs.imgElement | ||||
|  |       //   this.drawCornerStone(imageUrl, 'JPG') | ||||
|  |       //   this.curElement.addEventListener('cornerstoneimagerendered', this.getZoomRate)// 监听事件 | ||||
|  |       // } | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | 
 | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  |   .container { | ||||
|  |     color: #FFFFFF; | ||||
|  |     width: 100%; | ||||
|  |     height: 100%; | ||||
|  |     overflow: hidden; | ||||
|  |     text-align: center; | ||||
|  | 
 | ||||
|  |     .dicom{ | ||||
|  |       width: 100% !important; | ||||
|  |       height: 100% !important; | ||||
|  |     } | ||||
|  |   } | ||||
|  | </style> | ||||
|  | <style lang="scss"> | ||||
|  | .container{ | ||||
|  |   .cornerstone-canvas{ | ||||
|  |     width: 100%; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
					Loading…
					
					
				
		Reference in new issue