25 changed files with 1474 additions and 470 deletions
			
			
		| @ -0,0 +1,855 @@ | |||||
|  | <template> | ||||
|  |   <div class="foreBox"> | ||||
|  |     <div class="moveIcon"> | ||||
|  |       <p @click="moveAll(1)"><i class="el-icon-back" /></p> | ||||
|  |       <p style="margin-top: 5px" @click="moveAll(2)"><i class="el-icon-back" style="transform: rotateY(180deg)" /></p> | ||||
|  |     </div> | ||||
|  |     <div style="display: flex;margin-top: 32px"> | ||||
|  |       <div style="width: 200px;padding-right: 8px;text-align: left;overflow-x: auto"> | ||||
|  |         <p style="font-weight: bold;margin-bottom: 12px;text-align: left">描述项模板</p> | ||||
|  |         <el-button v-if="!treeCaseList.length" type="primary" size="small" @click="append(1)">+新增</el-button> | ||||
|  |         <el-tree | ||||
|  |           ref="tree" | ||||
|  |           :data="treeCaseList" | ||||
|  |           :props="treeProps" | ||||
|  |           :default-expand-all="true" | ||||
|  |           :expand-on-click-node="false" | ||||
|  |           node-key="id" | ||||
|  |           highlight-current | ||||
|  |           @node-click="templateData" | ||||
|  |         > | ||||
|  |           <span slot-scope="{ node, data }" class="custom-tree-node"> | ||||
|  |             <span style="display: inline-block;min-width: 80px"> | ||||
|  |               <span>{{ node.label }}</span> | ||||
|  |             </span> | ||||
|  |             <span> | ||||
|  |               <el-button v-if="!data.treeId" icon="el-icon-plus" style="font-size: 12px;color: #409EFF" type="text" @click.stop="append(2, data)"></el-button> | ||||
|  |               <el-button icon="el-icon-delete" style="font-size: 12px;color: #F56C6C" type="text" @click.stop="remove(node, data)"></el-button> | ||||
|  |             </span> | ||||
|  |           </span> | ||||
|  |         </el-tree> | ||||
|  |       </div> | ||||
|  |       <el-table | ||||
|  |         id="foreCheck" | ||||
|  |         ref="multipleTable" | ||||
|  |         :data="tableData" | ||||
|  |         style="margin: 8px 8px 0 0" | ||||
|  |         @select="selection" | ||||
|  |       > | ||||
|  |         <el-table-column | ||||
|  |           type="selection" | ||||
|  |           width="55" | ||||
|  |         /> | ||||
|  |         <el-table-column | ||||
|  |           align="center" | ||||
|  |           label="OD" | ||||
|  |         > | ||||
|  |           <template slot-scope="scope"> | ||||
|  |             <div> | ||||
|  |               <span v-if="scope.row.sort === 1"> | ||||
|  |                 <span style="margin-right: 16px">结膜:充血</span><treeSelect | ||||
|  |                   v-model="scope.row.od" | ||||
|  |                   :props="treeProps" | ||||
|  |                   style="display: inline-block;width: 60%" | ||||
|  |                   :options="scope.row.data" | ||||
|  |                   :multiple="true" | ||||
|  |                   :filterable="true" | ||||
|  |                   :check-strictly="true" | ||||
|  |                   :default-expand-all="true" | ||||
|  |                   @handleNode="handleNode(scope.$index,'od', $event)" | ||||
|  |                   @add="addTree(scope.row, $event)" | ||||
|  |                   @remove="removeTree" | ||||
|  |                 /> | ||||
|  |               </span> | ||||
|  |               <span v-if="scope.row.sort === 2"> | ||||
|  |                 <span style="margin-right: 16px">结膜:分泌物</span><treeSelect | ||||
|  |                   v-model="scope.row.od" | ||||
|  |                   :props="treeProps" | ||||
|  |                   style="display: inline-block;width: 60%" | ||||
|  |                   :options="scope.row.data" | ||||
|  |                   :multiple="true" | ||||
|  |                   :filterable="true" | ||||
|  |                   :check-strictly="true" | ||||
|  |                   :default-expand-all="true" | ||||
|  |                   @handleNode="handleNode(scope.$index,'od', $event)" | ||||
|  |                   @add="addTree(scope.row, $event)" | ||||
|  |                   @remove="removeTree" | ||||
|  |         /> | ||||
|  |               </span> | ||||
|  |               <span v-if="scope.row.sort === 99"> | ||||
|  |                 <treeSelect v-model="scope.row.od" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'od', $event)" @add="addTree(scope.row, $event)" @remove="removeTree" /> | ||||
|  |               </span> | ||||
|  |               <span v-if="!scope.row.sort && !scope.row.id">{{ scope.row.name }}</span> | ||||
|  |       </div> | ||||
|  |           </template> | ||||
|  |         </el-table-column> | ||||
|  |         <el-table-column | ||||
|  |           class="move" | ||||
|  |           align="center" | ||||
|  |           width="120" | ||||
|  |         > | ||||
|  |           <template slot-scope="scope"> | ||||
|  |             <div> | ||||
|  |               <p @click="moveHandle(scope.$index,1, scope.row)"><i class="el-icon-back" /></p> | ||||
|  |               <p style="margin-top: 5px" @click="moveHandle(scope.$index,2, scope.row)"><i class="el-icon-back" style="transform: rotateY(180deg)" /></p> | ||||
|  |             </div> | ||||
|  |           </template> | ||||
|  |         </el-table-column> | ||||
|  |         <el-table-column | ||||
|  |           align="center" | ||||
|  |           label="OS" | ||||
|  |           width="300" | ||||
|  |         > | ||||
|  |           <template slot-scope="scope"> | ||||
|  |             <div> | ||||
|  |               <span v-if="scope.row.sort === 1"> | ||||
|  |                 <span style="margin-right: 16px">结膜:充血</span><treeSelect | ||||
|  |                   v-model="scope.row.os" | ||||
|  |                   :props="treeProps" | ||||
|  |                   style="display: inline-block;width: 60%" | ||||
|  |                   :options="scope.row.data" | ||||
|  |                   :multiple="true" | ||||
|  |                   :filterable="true" | ||||
|  |                   :check-strictly="true" | ||||
|  |                   :default-expand-all="true" | ||||
|  |                   @handleNode="handleNode(scope.$index,'os', $event)" | ||||
|  |                   @add="addTree(scope.row, $event)" | ||||
|  |                   @remove="removeTree" | ||||
|  |       /> | ||||
|  |               </span> | ||||
|  |               <span v-if="scope.row.sort === 2"> | ||||
|  |                 <span style="margin-right: 16px">结膜:分泌物</span><treeSelect | ||||
|  |                   v-model="scope.row.os" | ||||
|  |                   :props="treeProps" | ||||
|  |                   style="display: inline-block;width: 60%" | ||||
|  |                   :options="scope.row.data" | ||||
|  |                   :multiple="true" | ||||
|  |                   :filterable="true" | ||||
|  |                   :check-strictly="true" | ||||
|  |                   :default-expand-all="true" | ||||
|  |                   @handleNode="handleNode(scope.$index,'os', $event)" | ||||
|  |                   @add="addTree(scope.row, $event)" | ||||
|  |                   @remove="removeTree" | ||||
|  |                 /> | ||||
|  |               </span> | ||||
|  |               <span v-if="scope.row.sort === 99"> | ||||
|  |                 <treeSelect v-model="scope.row.os" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'os', $event)" @add="addTree(scope.row, $event)" @remove="removeTree" /> | ||||
|  |               </span> | ||||
|  |               <span v-if="!scope.row.sort && !scope.row.id">{{ scope.row.name }}</span> | ||||
|  |     </div> | ||||
|  |           </template> | ||||
|  |         </el-table-column> | ||||
|  |       </el-table> | ||||
|  |     </div> | ||||
|  |     <el-dialog :title="title" :visible.sync="dialogFormVisible" width="40%"> | ||||
|  |       <el-form :model="form" style="margin-top: 16px"> | ||||
|  |         <el-form-item label="名称:" label-width="120px"> | ||||
|  |           <el-input v-model="form.name" auto-complete="off" style="width: 300px" /> | ||||
|  |         </el-form-item> | ||||
|  |       </el-form> | ||||
|  |       <div slot="footer" class="dialog-footer"> | ||||
|  |         <el-button @click="dialogFormVisible = false">取 消</el-button> | ||||
|  |         <el-button type="primary" @click="handSaveBtn">确 定</el-button> | ||||
|  |       </div> | ||||
|  |     </el-dialog> | ||||
|  |     <el-dialog title="新建模板" :visible.sync="templateFlag" width="40%"> | ||||
|  |       <el-form :model="form" style="margin-top: 16px"> | ||||
|  |         <el-form-item label="名称:" label-width="120px"> | ||||
|  |           <el-input v-model="form.name" auto-complete="off" style="width: 300px" /> | ||||
|  |         </el-form-item> | ||||
|  |         <el-form-item label="目录:" label-width="120px"> | ||||
|  |           <el-tree | ||||
|  |             ref="tree" | ||||
|  |             :data="treeTemplate" | ||||
|  |             :props="treeProps" | ||||
|  |             :default-expand-all="true" | ||||
|  |             :expand-on-click-node="false" | ||||
|  |             node-key="id" | ||||
|  |             highlight-current | ||||
|  |             @node-click="templateNodeClick" | ||||
|  |           /> | ||||
|  |         </el-form-item> | ||||
|  |       </el-form> | ||||
|  |       <div slot="footer" class="dialog-footer"> | ||||
|  |         <el-button @click="templateFlag = false">取 消</el-button> | ||||
|  |         <el-button type="primary" @click="saveTreeTemplete">确 定</el-button> | ||||
|  |       </div> | ||||
|  |     </el-dialog> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | <script> | ||||
|  | import _ from 'lodash' | ||||
|  | import eventBus from '@/page-subspecialty/utils/eventBus' | ||||
|  | import treeSelect from '@/components/360View/itemSelect' | ||||
|  | import axios from 'axios' | ||||
|  | import Cookies from 'js-cookie' | ||||
|  | import ForeForm from '@/components/360View/medicalRecord/outPatientRecord/foreForm.vue' | ||||
|  | const Base64 = require('js-base64').Base64 | ||||
|  | export default { | ||||
|  |   components: { | ||||
|  |     treeSelect | ||||
|  |   }, | ||||
|  |   mixins: [], | ||||
|  |   props: { | ||||
|  |     patientIdNumber: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     }, | ||||
|  |     patientId: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     }, | ||||
|  |     isSearch: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   inject: ['refresh'], | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       userData: {}, | ||||
|  |       title: '', | ||||
|  |       sourceData: [], | ||||
|  |       treeCaseList: [], | ||||
|  |       treeTemplate: [], | ||||
|  |       addType: '', | ||||
|  |       treeProps: { | ||||
|  |         value: 'id', | ||||
|  |         label: 'name', | ||||
|  |         children: 'child' | ||||
|  |       }, | ||||
|  |       type: '', | ||||
|  |       doctorId: '', | ||||
|  |       deleteId: '', | ||||
|  |       treeId: '', | ||||
|  |       treeFlag: '', | ||||
|  |       treeName: '', | ||||
|  |       weight: '', | ||||
|  |       parentId: 0, | ||||
|  |       collectId: '', | ||||
|  |       form: { | ||||
|  |         name: '' | ||||
|  |       }, | ||||
|  |       multipleSelection: [], | ||||
|  |       templateFlag: false, | ||||
|  |       dialogFormVisible: false, | ||||
|  |       tableData: [ | ||||
|  |         { | ||||
|  |           name: '眼睑' | ||||
|  |         }, { | ||||
|  |           name: '眼睑', | ||||
|  |           sort: 99, | ||||
|  |           id: 1, | ||||
|  |           type: 'anion', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '结膜' | ||||
|  |         }, { | ||||
|  |           name: '结膜', | ||||
|  |           id: 2, | ||||
|  |           sort: 1, | ||||
|  |           type: 'jimmy', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '结膜', | ||||
|  |           id: 3, | ||||
|  |           sort: 2, | ||||
|  |           type: 'jimmy', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '泪器' | ||||
|  |         }, { | ||||
|  |           name: '泪器', | ||||
|  |           sort: 99, | ||||
|  |           id: 4, | ||||
|  |           type: 'liq', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '角膜' | ||||
|  |         }, { | ||||
|  |           name: '角膜', | ||||
|  |           sort: 99, | ||||
|  |           id: 5, | ||||
|  |           type: 'Giacomo', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '前房' | ||||
|  |         }, { | ||||
|  |           name: '前房', | ||||
|  |           sort: 99, | ||||
|  |           id: 6, | ||||
|  |           type: 'Jianfeng', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '虹膜' | ||||
|  |         }, { | ||||
|  |           name: '虹膜', | ||||
|  |           sort: 99, | ||||
|  |           id: 7, | ||||
|  |           type: 'mongo', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '瞳孔' | ||||
|  |         }, { | ||||
|  |           name: '瞳孔', | ||||
|  |           sort: 99, | ||||
|  |           id: 8, | ||||
|  |           type: 'tonguing', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '晶状体' | ||||
|  |         }, { | ||||
|  |           name: '晶状体', | ||||
|  |           sort: 99, | ||||
|  |           id: 9, | ||||
|  |           type: 'jingling', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '睫状体' | ||||
|  |         }, { | ||||
|  |           name: '睫状体', | ||||
|  |           sort: 99, | ||||
|  |           id: 10, | ||||
|  |           type: 'jingles', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '眼位' | ||||
|  |         }, { | ||||
|  |           name: '眼位', | ||||
|  |           sort: 99, | ||||
|  |           id: 11, | ||||
|  |           type: 'yawn', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '眼眶' | ||||
|  |         }, { | ||||
|  |           name: '眼眶', | ||||
|  |           sort: 99, | ||||
|  |           id: 12, | ||||
|  |           type: 'yanking', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }, { | ||||
|  |           name: '眼球运动' | ||||
|  |         }, { | ||||
|  |           name: '眼球运动', | ||||
|  |           sort: 99, | ||||
|  |           id: 13, | ||||
|  |           type: 'yang', | ||||
|  |           od: '', | ||||
|  |           os: '' | ||||
|  |         }] | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   watch: { | ||||
|  |     tableData: { | ||||
|  |       deep: true, | ||||
|  |       handler: (value) => { | ||||
|  |         if (value) { | ||||
|  |           eventBus.$emit('getForeData', value) | ||||
|  |         } | ||||
|  |       } | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   created() { | ||||
|  |   }, | ||||
|  |   mounted() { | ||||
|  |     this.userData = JSON.parse(window.localStorage.getItem('qg-userData')) | ||||
|  |     this.doctorId = this.userData.id | ||||
|  |     this.getforeList('2').then(() => { | ||||
|  |       this.queryOptions() | ||||
|  |     }) | ||||
|  |     // 查询左侧病历树 | ||||
|  |     this.queryTreeCase() | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     async getforeList(flag) { | ||||
|  |       const { data: res } = await this.$http.get('/case/getCase', { | ||||
|  |         params: { | ||||
|  |           patientId: this.patientId, | ||||
|  |           platform: this.isSearch, | ||||
|  |           flag: flag // 1病史采集2前段检查3后段检查4专科检查 | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.tableData = res.data ? JSON.parse(res.data.jsonText) : [] | ||||
|  |         this.tableData.forEach(item => { | ||||
|  |           item.flag = false | ||||
|  |         }) | ||||
|  |         console.log(123, this.tableData) | ||||
|  |         this.collectId = res.data ? res.data.id : '' | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 表格复选框 | ||||
|  |     selection(selection, val) { | ||||
|  |       if (!val.id) { | ||||
|  |         const data = this.tableData.filter(item => item.name === val.name) | ||||
|  |         if (val.flag) { | ||||
|  |           data.forEach(row => { | ||||
|  |             row.flag = false | ||||
|  |             this.$refs.multipleTable.toggleRowSelection(row, false) | ||||
|  |           }) | ||||
|  |         } else { | ||||
|  |           data.forEach(row => { | ||||
|  |             row.flag = true | ||||
|  |             this.$refs.multipleTable.toggleRowSelection(row, true) | ||||
|  |           }) | ||||
|  |         } | ||||
|  |       } else { | ||||
|  |         const data = this.tableData.filter(item => item.id === val.id) | ||||
|  |         if (val.flag) { | ||||
|  |           data.forEach(row => { | ||||
|  |             row.flag = false | ||||
|  |           }) | ||||
|  |         } else { | ||||
|  |           data.forEach(row => { | ||||
|  |             row.flag = true | ||||
|  |           }) | ||||
|  |         } | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 保留下拉框的label,添加到数据集用于展示 | ||||
|  |     handleNode(index, type, event) { | ||||
|  |       if (type === 'os') { | ||||
|  |         this.tableData[index].osValue = event | ||||
|  |       } else { | ||||
|  |         this.tableData[index].odValue = event | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 添加数据集 | ||||
|  |     addForeData() { | ||||
|  |       const selectData = this.tableData.filter(item => item.flag === true) | ||||
|  |       if (!selectData.length) return this.$message.warning('请勾选数据!') | ||||
|  |       const data = selectData.filter(item => { | ||||
|  |         return item.type !== undefined | ||||
|  |       }) | ||||
|  |       eventBus.$emit('sendForData', data) | ||||
|  |     }, | ||||
|  |     // 获取下拉选择项,把数据封装进表格中 | ||||
|  |     queryOptions() { | ||||
|  |       const treeList = [] | ||||
|  |       this.tableData.forEach(item => { | ||||
|  |         if (item.type) { | ||||
|  |           const p = this.queryTree(item.type) | ||||
|  |           treeList.push(p) | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       Promise.all(treeList).then((result) => { | ||||
|  |         if (result.length) { | ||||
|  |           result.forEach(item => { | ||||
|  |             item.forEach(row => { | ||||
|  |               this.tableData.forEach(e => { | ||||
|  |                 if (e.type === row.type) { | ||||
|  |                   e.data = item | ||||
|  |                   const sort = item.sort | ||||
|  |                   item.sort = '' | ||||
|  |                   this.$nextTick(() => { | ||||
|  |                     item.sort = sort | ||||
|  |                   }) | ||||
|  |                 } | ||||
|  |               }) | ||||
|  |             }) | ||||
|  |           }) | ||||
|  |         } | ||||
|  |         this.sourceData = _.cloneDeep(this.tableData) || [] | ||||
|  |         eventBus.$emit('getForeData', this.tableData) | ||||
|  |       }).catch((error) => { | ||||
|  |       }) | ||||
|  |     }, | ||||
|  |     // 全部移动 | ||||
|  |     moveAll(type) { | ||||
|  |       if (type === 1) { | ||||
|  |         this.tableData.forEach(item => { | ||||
|  |           if (item.sort) { | ||||
|  |             item.od = item.os | ||||
|  |             item.odValue = item.osValue | ||||
|  |             const sort = item.sort | ||||
|  |             item.sort = '' | ||||
|  |             this.$nextTick(() => { | ||||
|  |               item.sort = sort | ||||
|  |             }) | ||||
|  |           } | ||||
|  |         }) | ||||
|  |       } else { | ||||
|  |         this.tableData.forEach(item => { | ||||
|  |           if (item.sort) { | ||||
|  |             item.os = item.od | ||||
|  |             item.osValue = item.odValue | ||||
|  |             const sort = item.sort | ||||
|  |             item.sort = '' | ||||
|  |             this.$nextTick(() => { | ||||
|  |               item.sort = sort | ||||
|  |             }) | ||||
|  |           } | ||||
|  |         }) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 移动 | ||||
|  |     moveHandle(index, type, row) { | ||||
|  |       if (row.id) { | ||||
|  |         if (type === 1) { | ||||
|  |           this.tableData[index].od = row.os | ||||
|  |           this.tableData[index].odValue = row.osValue | ||||
|  |         } else { | ||||
|  |           this.tableData[index].os = row.od | ||||
|  |           this.tableData[index].osValue = row.odValue | ||||
|  |         } | ||||
|  |         const sort = this.tableData[index].sort | ||||
|  |         this.tableData[index].sort = '' | ||||
|  |         this.$nextTick(() => { | ||||
|  |           this.tableData[index].sort = sort | ||||
|  |         }) | ||||
|  |       } else { | ||||
|  |         if (type === 1) { | ||||
|  |           this.tableData.forEach(item => { | ||||
|  |             if (item.name === row.name) { | ||||
|  |               item.od = item.os | ||||
|  |               item.odValue = item.osValue | ||||
|  |               const sort = item.sort | ||||
|  |               item.sort = '' | ||||
|  |               this.$nextTick(() => { | ||||
|  |                 item.sort = sort | ||||
|  |               }) | ||||
|  |             } | ||||
|  |           }) | ||||
|  |         } else { | ||||
|  |           this.tableData.forEach(item => { | ||||
|  |             if (item.name === row.name) { | ||||
|  |               item.os = item.od | ||||
|  |               item.osValue = item.odValue | ||||
|  |               const sort = item.sort | ||||
|  |               item.sort = '' | ||||
|  |               this.$nextTick(() => { | ||||
|  |                 item.sort = sort | ||||
|  |               }) | ||||
|  |             } | ||||
|  |           }) | ||||
|  |         } | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 保存前段检查 | ||||
|  |     async saveFore() { | ||||
|  |       const params = { | ||||
|  |         flag: '2', // 1病史采集2前段检查3后段检查4专科检查 | ||||
|  |         jsonText: JSON.stringify(this.tableData), | ||||
|  |         name: '前段检查', | ||||
|  |         patientId: this.patientId, | ||||
|  |         platform: this.isSearch | ||||
|  |       } | ||||
|  |       let url = '' | ||||
|  |       if (this.collectId) { | ||||
|  |         url = '/case/update' | ||||
|  |         params.id = this.collectId | ||||
|  |       } else { | ||||
|  |         url = '/case/save' | ||||
|  |       } | ||||
|  |       const { data: res } = await this.$http.post(url, params) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.$message.success('保存成功') | ||||
|  |         await this.getforeList('2') | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     handSaveBtn() { | ||||
|  |       if (this.addType === 1) { | ||||
|  |         this.handleSaveTree() | ||||
|  |       } else { | ||||
|  |         this.handleSaveCase() | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 新增选择下拉树 | ||||
|  |     addTree(item, event) { | ||||
|  |       this.title = '新增子级' | ||||
|  |       this.addType = 1 | ||||
|  |       this.form.name = '' | ||||
|  |       this.type = event.type | ||||
|  |       this.parentId = event.id | ||||
|  |       this.treeFlag = event.flag | ||||
|  |       this.dialogFormVisible = true | ||||
|  |     }, | ||||
|  |     // 新增保存树-眼睛部位下拉选择 | ||||
|  |     async handleSaveTree() { | ||||
|  |       const params = { | ||||
|  |         doctorId: this.doctorId, | ||||
|  |         name: this.form.name, | ||||
|  |         flag: this.treeFlag, // // 1公共树,2个人树 | ||||
|  |         type: this.type, | ||||
|  |         parentId: this.parentId, | ||||
|  |         platform: this.isSearch | ||||
|  |       } | ||||
|  |       const { data: res } = await this.$http.post('/treetag/addTree', params) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.dialogFormVisible = false | ||||
|  |         this.updataList() | ||||
|  |         this.$message.success('保存成功') | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 删除选择下拉树 | ||||
|  |     removeTree(item) { | ||||
|  |       this.type = item.type | ||||
|  |       this.deleteId = item.id | ||||
|  |       this.$confirm('确定删除该节点?', '提示', { | ||||
|  |         confirmButtonText: '确定', | ||||
|  |         cancelButtonText: '取消', | ||||
|  |         type: 'warning' | ||||
|  |       }).then(() => { | ||||
|  |         this.handleRemove() | ||||
|  |       }).catch(() => { | ||||
|  | 
 | ||||
|  |       }) | ||||
|  |     }, | ||||
|  |     // 删除选择下拉树 | ||||
|  |     async handleRemove() { | ||||
|  |       const params = { | ||||
|  |         id: this.deleteId | ||||
|  |       } | ||||
|  |       const { data: res } = await this.$http.post('/treetag/deleteTree', params) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.$message.success('删除成功') | ||||
|  |         this.updataList() | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 刷新单个选择下拉树 | ||||
|  |     updataList() { | ||||
|  |       this.queryTree(this.type).then((res) => { | ||||
|  |         this.tableData.forEach(item => { | ||||
|  |           if (item.type === this.type) { | ||||
|  |             const sort = item.sort | ||||
|  |             item.sort = '' | ||||
|  |             this.$nextTick(() => { | ||||
|  |               item.sort = sort | ||||
|  |             }) | ||||
|  |             item.data = res | ||||
|  |           } | ||||
|  |         }) | ||||
|  |       }) | ||||
|  |     }, | ||||
|  |     // 封装查询单个下拉选择树 | ||||
|  |     queryTree(type) { | ||||
|  |       // http://47.110.224.240:8036/xiangan-crf/treetag/findTree | ||||
|  |       // 47.110.224.240:8036 | ||||
|  |       // 192.168.4.83:8036 | ||||
|  |       return new Promise((resolve, reject) => { | ||||
|  |         axios.defaults.headers.common['token'] = Cookies.get('xa-token') || '' | ||||
|  |         axios.get('http://192.168.4.83:8036/xiangan-crf/treetag/findTree', { | ||||
|  |           params: { | ||||
|  |             doctorId: this.doctorId, | ||||
|  |             type: type, | ||||
|  |             platform: this.isSearch | ||||
|  |           } | ||||
|  |         }).then(res => { | ||||
|  |           if (res.data.code === 0) { | ||||
|  |             const data = res.data | ||||
|  |             resolve(data.data) | ||||
|  |           } | ||||
|  |         }) | ||||
|  |           .catch(error => { | ||||
|  |             reject(error) | ||||
|  |           }) | ||||
|  |       }) | ||||
|  |     }, | ||||
|  |     // 点击左侧模板数据覆盖表格内容 | ||||
|  |     templateData(data, node) { | ||||
|  |       if (data && data.caseJson) { | ||||
|  |         this.tableData = JSON.parse(data.caseJson) | ||||
|  |         // 回显表格复选框 | ||||
|  |         this.$nextTick(() => { | ||||
|  |           this.tableData.forEach(item => { | ||||
|  |             if (item.flag) { | ||||
|  |             this.$refs.multipleTable.toggleRowSelection(item, true) | ||||
|  |             } | ||||
|  |           }) | ||||
|  |         }) | ||||
|  |       } else { | ||||
|  |         this.tableData = _.cloneDeep(this.sourceData) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 点击保存模板后弹框 | ||||
|  |     handleTemplate() { | ||||
|  |       // if (!this.multipleSelection.length) return this.$message.warning('请勾选模板内容!') | ||||
|  |       this.form.name = '' | ||||
|  |       this.queryTemplate() | ||||
|  |       this.templateFlag = true | ||||
|  |     }, | ||||
|  |     // 保存模板时选择树节点 | ||||
|  |     templateNodeClick(node) { | ||||
|  |       this.treeId = node.id | ||||
|  |     }, | ||||
|  |     // 保存模板树 | ||||
|  |     async saveTreeTemplete() { | ||||
|  |       if (!this.treeId) return this.$message.warning('请选择目录!') | ||||
|  |       const params = { | ||||
|  |         caseJson: JSON.stringify(this.tableData), | ||||
|  |         doctorId: this.doctorId, | ||||
|  |         name: this.form.name, | ||||
|  |         type: 2, // 2前段检查 3后段检查 | ||||
|  |         treeId: this.treeId | ||||
|  |       } | ||||
|  |       const { data: res } = await this.$http.post('/treetemplate/addTreeCase', params) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.templateFlag = false | ||||
|  |         this.queryTreeCase() | ||||
|  |         this.$message.success('保存成功') | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 新增左侧描述项树弹框 | ||||
|  |     append(type, data) { | ||||
|  |       this.addType = 2 | ||||
|  |       this.form.name = '' | ||||
|  |       type === 1 ? this.title = '新增父级' : this.title = '新增子级' | ||||
|  |       type === 1 ? this.parentId = 0 : this.parentId = data.id | ||||
|  |       this.dialogFormVisible = true | ||||
|  |     }, | ||||
|  |     // 新增左侧描述项树 | ||||
|  |     async handleSaveCase() { | ||||
|  |       const params = { | ||||
|  |         doctorId: this.doctorId, | ||||
|  |         name: this.form.name, | ||||
|  |         weight: this.weight, | ||||
|  |         parentId: this.parentId, | ||||
|  |         platform: this.isSearch | ||||
|  |       } | ||||
|  |       const { data: res } = await this.$http.post('/treetemplate/addTree', params) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.dialogFormVisible = false | ||||
|  |         this.queryTreeCase() | ||||
|  |         this.$message.success('保存成功') | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 删除左侧树/模板节点弹框 | ||||
|  |     remove(node, data) { | ||||
|  |       this.deleteId = data.id | ||||
|  |       let url = '' | ||||
|  |       if (data.type) { | ||||
|  |         // 模板节点 | ||||
|  |         url = '/treetemplate/deleteTreeCase' | ||||
|  |       } else { | ||||
|  |         // 树节点 | ||||
|  |         url = '/treetemplate/deleteTree' | ||||
|  |       } | ||||
|  |       this.$confirm('确定删除该节点?', '提示', { | ||||
|  |         confirmButtonText: '确定', | ||||
|  |         cancelButtonText: '取消', | ||||
|  |         type: 'warning' | ||||
|  |       }).then(() => { | ||||
|  |         this.removeTemplate(url) | ||||
|  |       }).catch(() => { | ||||
|  | 
 | ||||
|  |       }) | ||||
|  |     }, | ||||
|  |     // 删除左侧树/模板节点 | ||||
|  |     async removeTemplate(url) { | ||||
|  |       const params = { | ||||
|  |         id: this.deleteId | ||||
|  |       } | ||||
|  |       const { data: res } = await this.$http.post(url, params) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.$message.success('删除成功') | ||||
|  |         this.queryTreeCase() | ||||
|  |         this.getforeList('2') | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 查询弹框模板树 | ||||
|  |     async queryTemplate() { | ||||
|  |       const { data: res } = await this.$http.get('/treetemplate/findTree', { | ||||
|  |         params: { | ||||
|  |           platform: this.isSearch, | ||||
|  |           doctorId: this.doctorId | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.treeTemplate = res.data | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     // 使用递归遍历树,合并模板节点和child节点 | ||||
|  |     fn(data) { | ||||
|  |       data.forEach((item, i) => { | ||||
|  |         if (item.list && item.list.length) { | ||||
|  |           item.child = item.child.concat(item.list) | ||||
|  |           // 调用递归函数 | ||||
|  |         } | ||||
|  |         if (item.child) { | ||||
|  |           this.fn(item.child) | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       return data | ||||
|  |     }, | ||||
|  |     // 查询左侧病历树 | ||||
|  |     async queryTreeCase() { | ||||
|  |       const { data: res } = await this.$http.get('/treetemplate/findTreeCase', { | ||||
|  |         params: { | ||||
|  |           type: 2, | ||||
|  |           platform: this.isSearch, | ||||
|  |           doctorId: this.doctorId | ||||
|  |         } | ||||
|  |       }) | ||||
|  |       if (res.code === 0) { | ||||
|  |         this.treeCaseList = this.fn(res.data) | ||||
|  |       } else { | ||||
|  |         this.$message.error(res.msg) | ||||
|  |       } | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | .foreBox{ | ||||
|  |   width: 100%; | ||||
|  |   height: 100%; | ||||
|  |   overflow-y: auto; | ||||
|  |   position: relative; | ||||
|  |   .btnBox{ | ||||
|  |     position: fixed; | ||||
|  |     right: 84px; | ||||
|  |     text-align: right; | ||||
|  |     margin-right: 16px; | ||||
|  |     background-color: white; | ||||
|  |     z-index: 999; | ||||
|  |   } | ||||
|  |   .moveIcon{ | ||||
|  |     position: absolute; | ||||
|  |     left: calc(50% + 120px); | ||||
|  |     top: 40px; | ||||
|  |     z-index: 9; | ||||
|  |   } | ||||
|  |   .custom-tree-node{ | ||||
|  |     width: 100%; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
|  | <style lang="scss"> | ||||
|  | .foreBox{ | ||||
|  |   .el-form-item__content{ | ||||
|  |     text-align: left; | ||||
|  |   } | ||||
|  |   .el-tree-node>.el-tree-node__children{ | ||||
|  |     overflow-x: auto; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
					Loading…
					
					
				
		Reference in new issue