123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713 |
- <template>
- <div class="ManageItemBatchWrapper">
- <crumbs :title="title" :param="$route.params" linkTo="RecordItemList" minWidth="1510px"></crumbs>
- <div class="contents">
- <div class="content">
- <el-form ref="form" :label-position="labelPosition" label-width="125px" class="add-record-form" >
-
- <el-form-item label="选择医院:" prop="brbaxx">
- <el-select v-model="hospitalId"
- placeholder="请选择医院"
- size="small"
- @change="changeHospital">
- <el-option
- v-for="item in hospitalList"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- </el-option>
- </el-select>
- </el-form-item>
-
- <el-form-item label="条目列表:" prop="hospitalList">
- <!-- <el-table
- ref="multipleTable"
- :data="tableData"
- tooltip-effect="light"
- style="width: 100%"
- @selection-change="handleSelectionChange">
- <el-table-column
- type="selection"
- width="120">
- </el-table-column>
- <el-table-column
- label="医院名称"
- prop="hospitalName"
- width="240">
-
- </el-table-column>
- <el-table-column
- prop="name"
- label="扣分值"
- width="240">
- <template slot-scope="scope">
- <el-input class="tipsMsg" v-model="scope.row.value" placeholder="请输入扣分值"></el-input>
- </template>
- </el-table-column>
- <el-table-column
- prop="address"
- label="提示语"
- width="240"
- show-overflow-tooltip>
- <template slot-scope="scope">
- <el-input class="tipsMsg" v-model="scope.row.tipMsg" placeholder="请输入提示语"></el-input>
- </template>
- </el-table-column>
- </el-table> -->
- <el-collapse v-model="activeLeftNames" @change="handleChange" v-if="caseLIst.length > 0">
- <el-collapse-item v-for="(item, index) in caseLIst" :title="item.name" :name="item.id" :key="item.id">
- <!-- <el-checkbox-group v-model="checkAllMap[item.remark]" >
- <el-checkbox v-for=" casesEntry in item.qcCasesEntry" :label="casesEntry.id" :key="casesEntry.id">{{casesEntry.name}}
- <el-input placeholder="请输入扣分值"></el-input>
- </el-checkbox>
- </el-checkbox-group> -->
- <el-table
- ref="multipleTable"
- :data="item.qcCasesEntry"
- tooltip-effect="light"
- style="width: 100%"
- @selection-change="handleSelectionChange($event,item.remark)">
- <el-table-column
- type="selection"
- width="60">
- </el-table-column>
- <el-table-column
- label="条目编码"
- prop="code"
- width="120">
- </el-table-column>
- <el-table-column
- label="条目名称"
- prop="name"
- width="240">
- </el-table-column>
- <el-table-column
- label="医院数据模块"
- prop="modeName"
- width="120">
- </el-table-column>
- <el-table-column
- prop=""
- label="终末扣分值"
- width="120">
- <template slot-scope="scope">
- <el-input class="scoreInp" oninput="if(value.length>5)value=value.slice(0,5)" v-model.trim="scope.row.score" type="number" placeholder=""></el-input>
- </template>
- </el-table-column>
- <el-table-column
- prop=""
- label="运行扣分值"
- width="120">
- <template slot-scope="scope">
- <el-input class="scoreInp" oninput="if(value.length>5)value=value.slice(0,5)" v-model.trim="scope.row.scoreRun" type="number" placeholder=""></el-input>
- </template>
- </el-table-column>
- <el-table-column
- prop="address"
- label="提示信息"
- width="240"
- show-overflow-tooltip>
- <template slot-scope="scope">
- <el-input class="tipsMsg" v-model.trim="scope.row.msg" placeholder="请输入提示信息"></el-input>
- </template>
- </el-table-column>
- <el-table-column
- prop="address"
- label="终末质控"
- width="120"
- show-overflow-tooltip>
- <template slot-scope="scope">
- <span class="checkUsed" :class="{'active': scope.row.isUsed == 1,'disabled': getDisabled(scope.row,item.remark)}" @click="checkUsed(scope.row,index,scope.$index,item.remark)"></span>
- <!-- <el-checkbox v-model="scope.row.isUsed" :value ="scope.row.isUsed" :disabled="getIsUsed(scope.row)" true-label="1" false-label="0">{{scope.row.isUsed}}</el-checkbox> -->
- </template>
- </el-table-column>
- <el-table-column
- prop="address"
- label="运行质控"
- width="120"
- show-overflow-tooltip>
- <template slot-scope="scope">
- <span class="checkUsed" :class="{'active': scope.row.isUsedRun == 1,'disabled': getDisabled(scope.row,item.remark)}" @click="checkUsedRun(scope.row,index,scope.$index,item.remark)"></span>
- <!-- <el-checkbox v-model="scope.row.isUsed" :value ="scope.row.isUsed" :disabled="getIsUsed(scope.row)" true-label="1" false-label="0">{{scope.row.isUsed}}</el-checkbox> -->
- </template>
- </el-table-column>
- <el-table-column
- prop="address"
- label="单项否决"
- width="120"
- show-overflow-tooltip>
- <template slot-scope="scope">
- <span class="checkUsed" :class="{'active': scope.row.isReject == 1,'disabled': getDisabled(scope.row,item.remark)}" @click="checkReject(scope.row,index,scope.$index,item.remark)"></span>
- <!-- <el-checkbox v-model="scope.row.isUsed" :value ="scope.row.isUsed" :disabled="getIsUsed(scope.row)" true-label="1" false-label="0">{{scope.row.isUsed}}</el-checkbox> -->
- </template>
- </el-table-column>
- </el-table>
- </el-collapse-item>
- </el-collapse>
- </el-form-item>
- <p class="oper">
- <el-button style="margin-right: 30px" size="small" type="primary" @click="comfirn('form')">确定</el-button>
- <el-button size="small" @click="cancel">取消</el-button>
- </p>
- </el-form>
- </div>
- </div>
- </div>
- </template>
- <script type="text/javascript">
- import api from '@api/records.js';
- import $ from 'jquery';
- export default {
- name:'ManageItemBatch',
- data(){
- return{
- // data:{},
- labelPosition:'left',
- /*zybljlList:[
- {name:'aaa',content:'333333'},
- {name:'vvv',content:'333sa'}
- ],*/
- hospitalList:[],
- caseLIst:[],
- sexType:[],
- bloodType:[],
- rhType:[],
- title:'质控条目-批量管理',
- hospitalId:'',
- tableData:[],
- checkAllMap:{
- },
- multipleSelection: [],
- id:null,
- activeLeftNames: [],
- modifier:''
- }
- },
- created(){
- const userLoginDTO = JSON.parse(localStorage.getItem('userLoginDTO'))
- this.modifier = userLoginDTO && userLoginDTO.linkman
-
- this.getRecordHopitalList()
- // this.getRecordInpModule()
- },
- methods:{
- toggleSelection(values) {
- setTimeout(()=>{
- // this.$refs.multipleTable[6].toggleRowSelection(this.caseLIst[6].qcCasesEntry[0]);
- // this.$refs.multipleTable[6].toggleRowSelection(this.caseLIst[6].qcCasesEntry[1]);
- for(let i = 0; i < values.length; i++){
- if(values[i].length > 0){
- values[i].forEach(value=>{
- const index = this.caseLIst[i].qcCasesEntry.findIndex(item =>item.id === value.id)
- this.$refs.multipleTable[i].toggleRowSelection(this.caseLIst[i].qcCasesEntry[index]);
- })
- }
- }
- // if (rows) {
- // rows.forEach(row => {
- // this.$refs.multipleTable.toggleRowSelection(row);
- // // console.log('this.$refs.multipleTabl',this.$refs.multipleTable)
- // // const domLen = this.$refs.multipleTable.length
- // // const values = Object.values(this.checkAllMap)
- // // console.log('values,',values)
- // // for(let i = 0; i < values.length; i++){
- // // if(values[i].length > 0){
- // // console.length('aaaaaaaaaaa')
- // // this.$refs.multipleTable[i].toggleRowSelection(value[i]);
- // // }
- // // }
- // });
- // } else {
- // console.log('bbbb')
- // const domLen = this.$refs.multipleTabl.length
- // for(let i = 0; i < domLen; i++){
- // // this.$refs.multipleTable[i].clearSelection();
- // }
- // }
- })
-
- },
- checkUsed(row,index,ii,remark){
- if(this.getDisabled(row,remark)){
- return
- }
- let isUsed = this.caseLIst[index].qcCasesEntry[ii].isUsed
- const caseLIstCopy = JSON.parse(JSON.stringify(this.caseLIst))
- if(isUsed == 1){
- caseLIstCopy[index].qcCasesEntry[ii].isUsed = 0
- }else{
- caseLIstCopy[index].qcCasesEntry[ii].isUsed = 1
- }
- this.caseLIst = caseLIstCopy
- const values = Object.values(this.checkAllMap)
- this.toggleSelection(values)
- },
- checkUsedRun(row,index,ii,remark){
- if(this.getDisabled(row,remark)){
- return
- }
- let isUsedRun = this.caseLIst[index].qcCasesEntry[ii].isUsedRun
- const caseLIstCopy = JSON.parse(JSON.stringify(this.caseLIst))
- if(isUsedRun == 1){
- caseLIstCopy[index].qcCasesEntry[ii].isUsedRun = 0
- }else{
- caseLIstCopy[index].qcCasesEntry[ii].isUsedRun = 1
- }
- this.caseLIst = caseLIstCopy
- const values = Object.values(this.checkAllMap)
- this.toggleSelection(values)
- },
- checkReject(row,index,ii,remark){
- if(this.getDisabled(row,remark)){
- return
- }
- let isReject = this.caseLIst[index].qcCasesEntry[ii].isReject
- const caseLIstCopy = JSON.parse(JSON.stringify(this.caseLIst))
- if(isReject == 1){
- caseLIstCopy[index].qcCasesEntry[ii].isReject = 0
- }else{
- caseLIstCopy[index].qcCasesEntry[ii].isReject = 1
- }
- this.caseLIst = caseLIstCopy
- const values = Object.values(this.checkAllMap)
- this.toggleSelection(values)
- },
- handleSelectionChange(val,remark) {
- this.checkAllMap[remark] = val;
- },
- getIsUsed(row){
- // if(this.multipleSelection.findIndex(it => it.hospitalId ==row.hospitalId) > -1){
- // return false
- // } else{
- // return true
- // }
-
- },
- getDisabled(row,remark){
- const hasChecked = this.checkAllMap[remark].findIndex(item => item.id === row.id) === -1
- return hasChecked
- },
- handleChange(val) {
- },
- changeHospital(val){
- this.getRecordInpModule().then(()=>{
- this.getRecordByHospital(val)
- }
- )
-
- },
- getRecordInpModule(){
- return api.getRecordInpModule({}).then((res)=>{
- const result = res.data;
- if(result.code==0){
- let caseLIstCopy = result.data
- for(let i = 0; i < caseLIstCopy.length; i++){
- for(let j = 0; j < caseLIstCopy[i].qcCasesEntry.length; j++){
- caseLIstCopy[i].qcCasesEntry[j].isUsedRun = 0
- caseLIstCopy[i].qcCasesEntry[j].isUsed = 0
- caseLIstCopy[i].qcCasesEntry[j].isReject = 0
- }
- }
- this.caseLIst = caseLIstCopy //提醒每项加分值和备注
- const checkAllMap = {}
- for(let i = 0; i < this.caseLIst.length; i++){
- checkAllMap[this.caseLIst[i].remark] = []
- }
- this.checkAllMap = checkAllMap
- }else{
- this.$message({
- message:result.msg,
- type:'warning',
- showClose: true
- });
- }
- })
- },
- getRecordHopitalList(){
- return api.getRecordHopitalList({}).then((res)=>{
- const result = res.data;
- if(result.code==0){
- this.hospitalList = result.data
- const tableData = []
- for(let i = 0; i < this.hospitalList.length; i++){
- tableData.push({
- hospitalId: this.hospitalList[i].id,
- hospitalName: this.hospitalList[i].name,
- value: '',
- tipMsg:'',
- scoreRun:'',
- })
- }
- this.tableData = tableData
- }else{
- this.$message({
- message:result.msg,
- type:'warning',
- showClose: true
- });
- }
- })
- },
- getRecordByHospital(hospitalId){
- const param = {
- hospitalId: hospitalId
- }
- return api.getRecordByHospital(param).then((res)=>{
- const result = res.data;
- if(result.code==0){
- this.hospitalItemList = result.data
- for (let i = 0; i< this.hospitalItemList.length; i++){
- const hospitalItem = this.hospitalItemList[i]
- let caseItem = this.caseLIst.find(item =>item.id === hospitalItem.casesId)
- for(let j = 0; j < hospitalItem.getAllByHospitalDetialDTOS.length; j++){
-
- const checkedItem = hospitalItem.getAllByHospitalDetialDTOS[j]
- let recordItem = caseItem.qcCasesEntry.find(item => item.id === checkedItem.casesEntryId)
- recordItem.score = checkedItem.score
- recordItem.scoreRun = checkedItem.scoreRun
- recordItem.msg = checkedItem.msg
- recordItem.isUsed = checkedItem.isUsed
- recordItem.isUsedRun = checkedItem.isUsedRun
- recordItem.isReject = checkedItem.isReject
- recordItem.modeName = checkedItem.modeName
- this.checkAllMap[caseItem.remark].push(recordItem)
- }
- }
- this.caseLIst = JSON.parse(JSON.stringify(this.caseLIst))
- const values = Object.values(this.checkAllMap)
- this.toggleSelection(values)
- }else{
- this.$message({
- message:result.msg,
- type:'warning',
- showClose: true
- });
- }
- })
- },
- cancel(){
- this.$router.push({
- name: 'RecordItemList',
- params: Object.assign({}, this.$route.params)
- });
- },
- comfirn(form){
- if(!this.hospitalId){
- this.$message({
- message:"请选择医院",
- type:'warning',
- showClose: true
- });
- }
- const values = Object.values(this.checkAllMap);
- let casesEntryHospitals = [],requiredValNull=[],valueTypeWr=[],tempItemIdx={};
- $(".el-collapse .wrong").removeClass("wrong");
- for(let i = 0; i < values.length; i++){
- for(let j = 0; j < values[i].length;j++){
- const value = values[i][j];
- if(!valueTypeWr.length&&(!value.msg||value.score==="")){
- tempItemIdx=this.caseLIst[i].qcCasesEntry.findIndex(item =>item.id === value.id);
- requiredValNull.push(value.casesId);
- $(".el-collapse .el-collapse-item:eq("+i+") table tr:eq("+(+tempItemIdx+1)+")").addClass("wrong");
- }
- var reg = new RegExp(/^\d+(\.\d)?$/);
- if(!requiredValNull.length&&(!reg.test(value.score) || value.score >100)){
- tempItemIdx=this.caseLIst[i].qcCasesEntry.findIndex(item =>item.id === value.id);
- $(".el-collapse .el-collapse-item:eq("+i+") table tr:eq("+(+tempItemIdx+1)+")").addClass("wrong");
- valueTypeWr.push(value.casesId);
- }
- let item = {
- "casesEntryId": value.id,
- "creator": "0",
- "hospitalId": this.hospitalId,
- "modifier": this.modifier,
- "msg": value.msg||"",
- "remark": value.remark,
- "score": Number(value.score),
- "scoreRun": Number(value.scoreRun),
- "isUsed":value.isUsed||0,
- "isUsedRun":value.isUsedRun||0,
- "isReject":value.isReject||0
- }
- casesEntryHospitals.push(item)
- }
- }
- if(requiredValNull.length>0){
- this.$message({
- message:'勾选项扣分值和提示信息不能为空',
- type:'warning',
- showClose: true
- });
- this.activeLeftNames = requiredValNull;
- $(".el-main").scrollTop(160);
- return
- }else if(valueTypeWr.length>0){
- this.$message({
- message:'扣分值请输入≥0且≤100的数字,最多保留小数点后1位',
- type:'warning',
- showClose: true
- });
- this.activeLeftNames = valueTypeWr;
- $(".el-main").scrollTop(160);
- return
- }
- let param = {
- "casesEntryHospitals": casesEntryHospitals,
- "hospitalIds": [
- this.hospitalId
- ]
- }
- api.updateRecordByHospital(param).then((res)=>{
- if(res.data.code==0){
- this.$message({
- message:"修改成功",
- type:'success',
- showClose: true
- });
- //返回带搜索条件的首页
- this.$router.push({
- name: 'RecordItemList',
- params: Object.assign({}, this.$route.params)
- });
- }else{
- this.$message({
- message:res.data.msg,
- type:'warning',
- showClose: true
- });
- }
- })
- return
- /*if(!this.form.name.trim() || !this.form.refreshTime.trim()){
- this.$message({
- message:'请填写相关内容',
- type:'warning'
- });
- return
- }*/
- /*this.$refs[form].validate((valid) => {
- if (valid) {*/
- // if(this.basyid){//修改
- // const param = Object.assign({},this.form,{basyid:this.basyid,brzyid:this.brzyid});
- // api.saveRecord(param).then((res)=>{
- // if(res.data.code==0){
- // this.$message({
- // message:"修改成功",
- // type:'success'
- // });
- // //返回带搜索条件的首页
- // this.$router.push({
- // name: 'RecordManager',
- // params: Object.assign({}, this.$route.params)
- // });
- // }else{
- // this.$message({
- // message:res.data.msg,
- // type:'warning'
- // });
- // }
- // })
- // }else{//添加
- // // 复制时把list多余字段过滤掉,如id等
- // const detail = this.list;
- // let copyDetail=[];
- // let item={};
- // if(detail && detail.length>0){
- // for(let i=0; i<detail.length; i++){
- // item.title = detail[i].title;
- // item.description = detail[i].description;
- // copyDetail.push(item);
- // item={};
- // }
- // }
- // const params = Object.assign({},this.form);
- // // api.addVersInfo(this.form).then((res)=>{
- // api.saveRecord(params).then((res)=>{
- // if(res.data.code==0){
- // this.$message({
- // message:"添加成功",
- // type:'success'
- // })
- // // this.$router.push({path: 'LT-GBBXXWH-BBXXWH'});
- // this.$router.push({name: 'RecordManager'});
- // }else{
- // this.$message({
- // message:res.data.msg,
- // type:'warning'
- // });
- // }
- // })
- // }
- /*} else {
- return false;
- }
- });*/
- },
- }
- }
- </script>
- <style lang="less">
- @import "../../less/admin.less";
- .ManageItemBatchWrapper{
- .content{
- background: #fff;
- padding: 20px 20px 50px;
- color: #545455;
- min-width: 1500px;
- position: relative;
- .short-inp{
- width: 200px;
- }
- .sub-title{
- font-weight: bold;
- font-size: 16px;
- margin-bottom: 20px;
- }
- .oper{
- text-align: right;
- }
- .checkUsed{
- cursor: pointer;
- position: relative;
- // color: #fff;
- display: inline-block;
- width: 14px;
- height: 14px;
- background: #fff;
- border: 1px solid #333;
- box-sizing: border-box;
- border-radius: 2px;
- -webkit-transition: border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);
- transition: border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);
- }
- .active{
- position: relative;
- // color: #fff;
- display: inline-block;
- width: 14px;
- height: 14px;
- background: #48C5D7;
- border: 1px solid #333;
- box-sizing: border-box;
- border-radius: 2px;
- -webkit-transition: border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);
- transition: border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);
- }
- .wrong td{
- border:1px #ff0000 solid;
- border-right:none;
- border-left:none;
- &:last-child{
- border-right:1px #ff0000 solid;
- }
- &:first-child{
- border-left:1px #ff0000 solid;
- }
- }
- .active::after{
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
- content: "";
- border: 1px solid #FFF;
- border-left: 0;
- border-top: 0;
- height: 7px;
- left: 4px;
- position: absolute;
- top: 1px;
- -webkit-transform: rotate(45deg) scaleY(0);
- transform: rotate(45deg) scaleY(0);
- width: 3px;
- -webkit-transition: -webkit-transform .15s ease-in .05s;
- transition: -webkit-transform .15s ease-in .05s;
- transition: transform .15s ease-in .05s;
- transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s;
- transition: transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(45deg) scaleY(1);
- transform: rotate(45deg) scaleY(1);
- }
- .active.disabled::after{
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
- content: "";
- border: 1px solid #c9cdd5;
- border-left: 0;
- border-top: 0;
- height: 7px;
- left: 4px;
- position: absolute;
- top: 1px;
- -webkit-transform: rotate(45deg) scaleY(0);
- transform: rotate(45deg) scaleY(0);
- width: 3px;
- -webkit-transition: -webkit-transform .15s ease-in .05s;
- transition: -webkit-transform .15s ease-in .05s;
- transition: transform .15s ease-in .05s;
- transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s;
- transition: transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(45deg) scaleY(1);
- transform: rotate(45deg) scaleY(1);
-
- }
- .disabled{
- cursor: not-allowed;
- background-color: #edf2fc;
- }
- /deep/.el-table__row td:nth-child(3){
- text-align: left;
- }
- /deep/.el-input{
- .el-input__inner{
- border: 1px solid #333;
- color: #000;
- }
- }
- /deep/.el-checkbox__inner{
- border: 1px solid #333;
- }
- /deep/.tipsMsg{
- .el-input__inner{
- width:200px;
- height: 30px;
- display: inline-block;
- border: 1px solid #333;
- color: #000;
- }
- }
- /deep/.el-table .cell, .el-table th div, .el-table--border td:first-child .cell, .el-table--border th:first-child .cell {
- padding: 0;
- }
- /deep/.el-input input::-webkit-outer-spin-button,
- /deep/.el-input input::-webkit-inner-spin-button {
- -webkit-appearance: none;
- }
- /deep/.el-input input[type="number"]{
- -moz-appearance: textfield;
- line-height: 20px;
- }
- /deep/.scoreInp.el-input{
- width:50px;
- .el-input__inner{
- width:50px;
- height: 30px;
- display: inline-block;
- }
- }
- }
- }
- .el-collapse-item__content{
- padding-bottom: 0;
- }
- .el-table::before{
- content: unset;
- }
- </style>
|