Browse Source

Merge remote-tracking branch 'origin/testedMerge'

zhouna 5 years ago
parent
commit
0dcdc54822

+ 16 - 2
src/api/config.js

@@ -325,8 +325,22 @@ export default {
       'getQcEntryTypeByHospital': '/api/mrman/qc/qcEntryType/getTypeByHospital', //质控条目与质控类型关系--根据医院获取质控类型列表
       'getQcEntryTypeIndex': '/api/mrman/qc/qcEntryType/index', //质控条目与质控类型关系--根据医院和条目检索未被选择的质控类型
       'saveQcEntryType': '/api/mrman/qc/qcEntryType/saveOrUpdate', //质控条目与质控类型关系--保存
-      
-      
+      'getStdList':'/api/mrman/stdBehospitalInfo/getSthospitalInfoPage' ,//标准病例列表
+      'delStdRecord':'/api/mrman/stdBehospitalInfo/clearSthospitalInfo',//删除标准病例
+      'updateStdRecord':'/api/mrman/stdBehospitalInfo/updataSthospitalInfo',//更新标准病例
+      'findStdRecord':'/api/mrman/stdBehospitalInfo/findSthospitalInfo',//查找标准病例
+      'getStdDeptList':'/api/mrman/medBehospitalInfo/findhospitalDept', //获取科室列表
+      'getTestItems':'/api/mrman/stdBehospitalInfo/getStatistic',     //获取病例条目统计
+      'addTask':'/api/mrman/stdMissionDetail/addMissionDetail',   //添加任务
+      'getTaskList':'/api/mrman/stdMissionInfo/getMissionInfoPage',   //获取任务列表
+      'delTask':'/api/mrman/stdMissionInfo/clearMissionInfo',   //获取任务列表
+      'editTask':'/api/mrman/stdMissionInfo/getMissionInfoPage',   //获取任务列表
+      'getTaskDetailList':'/api/mrman/stdMissionDetail/getMissionDetailPage',   //获取任务详情列表
+      'getTaskDetail':'/api/mrman/stdMissionDetail/getMissionDetailPage',   //获取单个任务详情
+      'editTaskDetail':'/api/mrman/stdMissionDetail/updateMissionDetail',   //任务详情修改
+      'delTaskDetail':'/api/mrman/stdMissionDetail/clearMissionDetail',     //任务详情删除
+      'autoTest':'/api/mrman/stdBehospitalInfo/analyze',  //自动化测试
+
   },
 	menuIconList: { //菜单对应图标
 		'YH-KZT': 'el-icon-menu',

+ 51 - 0
src/api/qualityControl.js

@@ -69,4 +69,55 @@ export default {
   saveQcEntryType(param){ //质控条目与质控类型关系--保存
     return axios.post(urls.saveQcEntryType,param);
   },
+  getStdList(param){//获取标准病例列表
+    return axios.post(urls.getStdList,param);
+  },
+  delStdRecord(param){//删除标准病例
+    return axios.post(urls.delStdRecord,param);
+  },
+  updateStdRecord(param){//更新标准病例
+    return axios.post(urls.updateStdRecord,param);
+  },
+  findStdRecord(param){//查找标准病例
+    return axios.post(urls.findStdRecord,param);
+  },
+  getStdDeptList(param){//更新标准病例
+    return axios.post(urls.getStdDeptList,param);
+  },
+  getTestItems(param){
+    return axios.post(urls.getTestItems,param);
+  },
+  getTaskList(param){
+    return axios.post(urls.getTaskList,param);
+  },
+  addTask(param){
+    return axios.post(urls.addTask,param);
+  },
+  delTask(param){
+    return axios.post(urls.delTask,param);
+  },
+  editTask(param){
+    return axios.post(urls.editTask,param);
+  },
+  getTaskDetailList(param){
+    return axios.post(urls.getTaskDetailList,param);
+  },
+  getTaskDetail(param){
+    return axios.post(urls.getTaskDetail,param);
+  },
+  editTaskDetail(param){
+    return axios.post(urls.editTaskDetail,param);
+  },
+  delTaskDetail(param){
+    return axios.post(urls.delTaskDetail,param);
+  },
+  getRecordHopitalList(param){
+    return axios.post(urls.getRecordHopitalList,param);
+  },
+  getRecordCases(param){
+    return axios.post(urls.getRecordCases,param);
+  },
+  autoTest(param){
+    return axios.post(urls.autoTest,param);
+  },
 }

+ 9 - 0
src/api/utils.js

@@ -114,6 +114,15 @@ export default {
       }
     }
   },
+  tranformDate(time,str,flag='-'){
+    if(!time){
+      return time;
+    }
+    const year=time.getFullYear();
+    const month = time.getMonth()+1;
+    const day = time.getDate();
+    return year+flag+(month>9?month:'0'+month)+flag+(day>9?day:'0'+day)+str;
+  },
   //获取两个时间间隔天数
   getTimeRangeDay(timeArr) {
     if(!timeArr||timeArr.length==0){

+ 85 - 289
src/components/qualityControl/AddStandardRecord.vue

@@ -1,142 +1,74 @@
 <template>
     <div>
-        <crumbs :title="title" :param="$route.params" linkTo="BaseField"></crumbs>
+        <crumbs :title="title" :param="$route.params" linkTo="StandardRecord"></crumbs>
         <div class="contents">
             <div class="content">
             <el-form ref="form" :label-position="labelPosition" label-width="125px" :model="form" :rules="rules">
                 <el-form-item label="所属医院:" prop="hospitalId">
                     <el-select v-model="form.hospitalId"
                                placeholder="请选择"
-                                 @change="changeHospital"
                                size="small">
                         <el-option
                                 v-for="item in hisTypes"
-                                :key="item.val"
+                                :key="item.id"
                                 :label="item.name"
-                                :value="Number(item.val)">
+                                :value="item.id">
                         </el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="病人住院序号:" prop="hospitalNo">
-                    <el-select v-model="hospitalNo" filterable placeholder="请选择">
-                        <el-option
-                        v-for="item in hospitalNoList"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
-                        </el-option>
-                    </el-select>  <span>搜索</span>
+                <el-form-item label="病人住院序号:" prop="behospitalCode">
+                    <el-input size="mini" v-model.trim="form.behospitalCode" placeholder="病人住院序号" clearable style="width: 200px;"></el-input>
+                    <el-button size="mini" @click="searchList" style="margin-left: 20px;height: 30px;">搜索</el-button>
                 </el-form-item>
                 <div>
                     <el-table
                     :data="medicalRecordlist"
                     border
                     style="width: 100%">
-                <el-table-column
+                <!--<el-table-column
                         :resizable = "false"
                         label="所属医院"
-                        prop="id"
+                        prop="hospitalName"
                         >
-                </el-table-column>
+                </el-table-column>-->
                 <el-table-column
                         :resizable = "false"
-                        prop="name"
+                        prop="behospitalCode"
                         label="病人住院序号"
                         width="180">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
-                        label="病案号">
-                </el-table-column>
-                
-                <el-table-column
-                        :resizable = "false"
-                        prop="hospitalId"
-                        :formatter="hisFormatter"
+                        prop="name"
                         label="病人姓名">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="sex"
                         label="性别">
                 </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
-                        label="年龄">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="behospitalDate"
+                        :formatter="dateFormatter"
                         label="入院日期">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="leaveHospitalDate"
+                        :formatter="dateFormatter"
                         label="出院日期">
                 </el-table-column>
-                <el-table-column
+                <!--<el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="gmtModified"
+                        :formatter="dateFormatter"
                         label="加入时间">
-                </el-table-column>
+                </el-table-column>-->
             </el-table>
-                    
                 </div>
-                <!-- <el-form-item label="所属模块:" prop="modeId">
-                    <el-select v-model="form.modeId"
-                               placeholder="请选择"
-                               @change="changeModule"
-                               size="small">
-                        <el-option
-                                v-for="item in fieldTypes"
-                                :key="item.val"
-                                :label="item.name"
-                                :value="Number(item.val)">
-                        </el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="备注:" prop="tagName">
-                    <el-input type="text" placeholder="请输入备注" v-model.trim="form.tagName"></el-input>
-                </el-form-item>
-                <el-form-item label="显示名称:" prop="name">
-                    <el-input type="text" placeholder="请输入显示名称" v-model.trim="form.name"></el-input>
-                </el-form-item>
-                <el-form-item label="取值字段:" prop="value">
-                    <el-input type="text" placeholder="请输入取值字段" v-model.trim="form.val"></el-input>
-                    
-                </el-form-item>
-                <el-form-item label="关联缺陷条目:" prop="casesEntryIds">
-                    <el-select filterable
-                               multiple
-                               v-model="casesEIds"
-                               placeholder="请选择"
-                               class="big-select"
-                               size="small">
-                        <el-option
-                                v-for="item in flawList"
-                                :key="item.id"
-                                :label="item.name"
-                                :value="String(item.id)">
-                        </el-option>
-                    </el-select>
-                    
-                </el-form-item>
-                <el-form-item>
-                    <el-checkbox v-model="form.monoLine" :true-label="Number(1)" :false-label="Number(0)">独占一行</el-checkbox>
-                    <el-checkbox v-model="form.addLine" :true-label="Number(1)" :false-label="Number(0)">内容换行</el-checkbox>
-                    <el-checkbox v-model="form.position" :true-label="Number(1)" :false-label="Number(0)">靠右显示</el-checkbox>
-                    <el-checkbox v-model="form.bold" :true-label="Number(1)" :false-label="Number(0)">内容加粗</el-checkbox>
-                    <el-checkbox v-model="form.retract" :true-label="Number(1)" :false-label="Number(0)">内容缩进</el-checkbox>
-                </el-form-item> -->
-                <el-button class="disclButn" size="small" type="primary" :disabled = 'saveDisable' @click="comfirn('form')">确定</el-button>
+                <el-button class="disclButn" size="small" type="primary" :disabled = 'saveDisable' @click="comfirn">确定</el-button>
             </el-form>
         </div>
         </div>
@@ -156,236 +88,92 @@
         title:'标准病历-新增',
         casesEIds:'',
         form:{
-          modeId:"",
           hospitalId:"",
-          hospitalNo:"", //病人住院序号
-          name:'',
-          val:'',
-          tagName:'',
-          monoLine:0,
-          addLine:0,
-          bold:0,
-          position:0,
-          retract:0,
-          casesEntryIds:'',
-          quesCasesEntryVOList:[]
+          behospitalCode:"", //病人住院序号
         },
         id:null,
         rules:{
           hospitalId:{ required: true, message: '请选择所属医院', trigger: ['blur', 'change']},
-          hospitalNo:{ required: true, message: '请选择病人住院序号', trigger: ['blur', 'change']},
+          behospitalCode:{ required: true, message: '请输入病人住院序号', trigger: ['blur', 'change']},
           /*name:[{ required: true, message: '请输入显示名称',trigger: ['blur', 'change'] }],*/
         },
         copy:null,
-        saveDisable: false,  //保存按钮禁止点击
+        saveDisable: true,  //保存按钮禁止点击
         flawList:[],
         hisTypes:[],
-        hospitalNoList:[], //住院序号列表
-        fieldTypes:[],
       }
     },
     created(){
-      this.getAllTypes();
-      let {isCopy,info} = this.$route.params;
-      this.copy=isCopy;
-      if(info){
-        const infoCopy =  Object.assign({},info);
-        isCopy?infoCopy.id="":"";
-        // infoCopy.casesEntryIds?this.casesEIds = infoCopy.casesEntryIds.split(","):'';
-        let tmpArr = [],tmpArr1 = []
-        for(let i = 0;i < infoCopy.quesCasesEntryDTOList.length;i++){
-          let obj = {
-            name:infoCopy.quesCasesEntryDTOList[i].casesEntryName,
-            casesEntryName:infoCopy.quesCasesEntryDTOList[i].casesEntryName,
-            id:infoCopy.quesCasesEntryDTOList[i].casesEntryId,
-            casesEntryId:infoCopy.quesCasesEntryDTOList[i].casesEntryId
-          }
-          tmpArr.push(""+infoCopy.quesCasesEntryDTOList[i].casesEntryId)
-          tmpArr1.push(obj)
-        }
-        infoCopy.quesCasesEntryDTOList?this.casesEIds = tmpArr:'';
-        infoCopy.quesCasesEntryVOList = [...tmpArr1];
-        this.title=isCopy?"字段映射维护-复制字段映射":'字段映射维护-修改字段映射';
-        this.form = infoCopy;
-        this.getQcFlawList(tmpArr1);
-      }else{
-        let hospitalId = localStorage.getItem("qcSelectHospital")&&Number(localStorage.getItem("qcSelectHospital")) || "";
-        let modeId = localStorage.getItem("qcSelectModule")&&Number(localStorage.getItem("qcSelectModule"))  || "";
-    
-        let qcSelecttModuleNme = localStorage.getItem("qcSelectModuleName");
-        this.form.hospitalId = hospitalId
-        this.form.modeId = modeId
-        this.form.tagName = qcSelecttModuleNme
-        this.getQcFlawList()
+      let {hisTypes} = this.$route.params;
+      if(!hisTypes){
+        this.getHisTypes();
+        return;
       }
+      this.hisTypes = hisTypes;
     },
     watch:{
-      "casesEIds":function(val){
-        this.form.casesEntryIds = val.join(",");
-        let tmp = []
-        for(let i = 0;i < val.length;i++){
-          let obj = {
-            casesEntryId:val[i],
-            id:val[i],
-          }
-          tmp.push(obj)
-        }
-        this.form.quesCasesEntryVOList = tmp
-      }
     },
     methods:{
-      changeHospital(val){
-         localStorage.setItem("qcSelectHospital",val);
-        const mName=localStorage.getItem("qcSelectModuleName");
-        const qcSelecttModuleNme  = this.hisTypes.find(item => Number(item.val) === val).name + '-'+(mName||"");
-        localStorage.setItem("qcSelectModuleName",qcSelecttModuleNme);
-        this.getQcFlawList()
-        this.form.modeId=""
-        this.form.quesCasesEntryDTOList =[]
-        this.casesEIds=[]
-      },
-      changeModule(val){
-         localStorage.setItem("qcSelectModule",val);
-         const shis=localStorage.getItem("qcSelectHospital");
-         const qcSelecttModuleNme  = this.hisTypes.find(item => +item.val === +shis).name + '-'+this.fieldTypes.find(item => Number(item.val) === val).name + '-';
-         this.form.tagName = qcSelecttModuleNme
-          localStorage.setItem("qcSelectModuleName",qcSelecttModuleNme);
-        this.getQcFlawList()
-         this.form.quesCasesEntryDTOList =[]
-        this.casesEIds=[]
-      },
-      getQcFlawList(val){
-        const { hospitalId, modeId } = this.form
-        if(hospitalId === '' || modeId === ''){
-          return
-        }
-        const param={modeId:modeId,hospitalId:hospitalId,name:"",size:500};
-        api.getQcFlawList(param).then((res)=>{
-          if(res.data.code==="0") {
-            const data = res.data.data;
-            this.flawList = []
-            this.flawList = data.records;
-            /*let info = this.$route.params.info;
-            if(info){
-              const infoCopy =  Object.assign({},this.form);
-
-              
-              for(let i = 0;i < infoCopy.quesCasesEntryDTOList.length;i++){
-                let obj = {
-                  name:infoCopy.quesCasesEntryDTOList[i].casesEntryName,
-                  casesEntryName:infoCopy.quesCasesEntryDTOList[i].casesEntryName,
-                  id:infoCopy.quesCasesEntryDTOList[i].casesEntryId,
-                  casesEntryId:infoCopy.quesCasesEntryDTOList[i].casesEntryId
-              }
-              this.flawList.unshift(obj)
-            }
-            }*/
-          }else{
-            this.warning("获取缺陷条目失败");
-          }
-        });
-      },
-      getAllTypes(){
-        if(localStorage.getItem("qcModuleTypes")){
-          this.hisTypes = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-          this.fieldTypes = JSON.parse(localStorage.getItem("qcModuleTypes"));
-          return ;
-        }
-        //获取枚举信息
-        api.getQcTypes().then((res)=>{
+      getHisTypes(){
+        api.getRecordHopitalList().then((res)=>{
           if(res.data.code==="0"){
             const data = res.data.data;
-            localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
-            localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
+            this.hisTypes =data;
           }else{
-            this.warning("获取枚举信息失败");
+            this.warning("获取医院列表失败");
           }
         });
       },
-      comfirn(form){
-        /*if(!this.form.name.trim() || !this.form.refreshTime.trim()){
-          this.$message({
-            message:'请填写相关内容',
-            type:'warning'
-          });
-          return
-        }*/
-        const {hospitalId,modeId,tagName} = this.form
+      dateFormatter(item,prop,it){
+        return it.substr(0,10);
+      },
+      searchList(){
+        const { hospitalId, behospitalCode } = this.form;
         if(!hospitalId){
           this.warning("请选择所属医院");
           return
         }
-         if(!modeId){
-          this.warning("请选择所属模块");
+        if(!behospitalCode){
+          this.warning("请输入病人住院序号");
           return
         }
-         if(!tagName){
-          this.warning("请输入备注");
-          return
-        }
-        // this.$refs[form].validate((valid) => {
-          // if (valid) {
-            const { val } = this.form
-            let regex = /(?<=【)(.+?)(?=】)/g;
-             let regex2 = /[^\u4e00-\u9fa5|a-zA-Z0-9]+/
-            const matchVal = val.match(regex) ||[]
-            let illegalCode = false
-            for(let i = 0; i < matchVal.length; i++){
-              if(regex2.test(matchVal[i])){
-                illegalCode = true
-              }
-            }
-            if(illegalCode){
-              this.warning("取值字段【】含有非法字符")
-              return;
-            }
-
-            if(this.form.id){//修改
-              const param = Object.assign({},this.form);
-              this.saveDisable = true;  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
-              api.addFieldMatch({questionWrapper:param}).then((res)=>{
-                if(res.data.code==0){
-                  this.$message({
-                    message:"修改成功",
-                    type:'success'
-                  });
-                  //返回带搜索条件的首页
-                  this.$router.push({
-                    name: 'BaseField',
-                    params: Object.assign({}, this.$route.params, {currentPage: 1})
-                  });
-                }else{
-                  this.$message({
-                    message:res.data.msg,
-                    type:'warning'
-                  });
-                }
-                this.saveDisable = false
-              })
-            }else{//添加
-              const params = Object.assign({},this.form);
-              this.saveDisable = true;  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
-              api.addFieldMatch({questionWrapper:params}).then((res)=>{
-                if(res.data.code==0){
-                  this.$message({
-                    message:"添加成功",
-                    type:'success'
-                  });
-                  this.$router.push({name: 'BaseField'});
-                }else{
-                  this.$message({
-                    message:res.data.msg,
-                    type:'warning'
-                  });
-                }
-                this.saveDisable = false
-              })
+        const param={ hospitalId, behospitalCode };
+        api.findStdRecord(param).then((res)=>{
+          if(res.data.code==="0") {
+            const data = res.data.data;
+            this.medicalRecordlist = [data];
+            if(data.status===1){
+              this.saveDisable=true;
+              this.warning("病历此前已被添加");
+            }else{
+              this.saveDisable=false;
             }
-          // } else {
-          //   return false;
-          // }
-        // });
+          }else{
+            this.medicalRecordlist = [];
+            this.saveDisable=true;
+            this.warning(res.data.msg);
+          }
+        });
+      },
+      comfirn(){
+        const {hospitalId,behospitalCode} = this.form;
+        const params = Object.assign({},this.form);
+        this.saveDisable = true;  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+        api.updateStdRecord(params).then((res)=>{
+          if(res.data.code==0){
+            this.$message({
+              message:"添加成功",
+              type:'success'
+            });
+            this.$router.push({name: 'StandardRecord'});
+          }else{
+            this.$message({
+              message:res.data.msg,
+              type:'warning'
+            });
+          }
+          this.saveDisable = false;
+        })
       },
       warning(msg, type,time) {
           this.$message({
@@ -409,7 +197,7 @@
 <style lang="less" scoped>
     .content {
         background: #fff;
-        padding: 20px 20px 50px;
+        padding: 20px 20px 80px;
         color: #545455;
         min-width: 980px;
         position: relative;
@@ -421,6 +209,7 @@
               .el-input__inner{
                     height: 30px;
                     line-height: 30px;
+                  width: 200px;
               }
             }
     .el-form-item{
@@ -429,4 +218,11 @@
     .el-select.big-select{
         width: 360px;
     }
+    .disclButn{
+        left: 49%;
+        bottom: 20px;
+    }
+    .el-button.is-disabled, .el-button.is-disabled:focus, .el-button.is-disabled:hover{
+        color: #fff;
+    }
 </style>

+ 333 - 0
src/components/qualityControl/AutoTestList.vue

@@ -0,0 +1,333 @@
+<template>
+    <div>
+        <crumbs title="自动化测试统计">
+            <el-form :inline="true" class="demo-form-inline" style="max-width: 870px;text-align: right;">
+                <el-form-item label="所属医院:">
+                    <el-select size="mini" v-model="filter.hospitalId" placeholder="所属医院" clearable>
+                        <el-option v-for="item in hisTypes" :label="item.name" :value="item.id" :key="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="所属模块:">
+                    <el-select size="mini" v-model="filter.casesId" placeholder="所属模块" clearable>
+                        <el-option v-for="item in fieldTypes" :label="item.name" :value="String(item.id)" :key="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="缺陷名称:">
+                    <el-input size="mini" v-model="filter.entryName" placeholder="缺陷名称"></el-input>
+                </el-form-item>
+                <el-form-item label="条目编码:">
+                    <el-input size="mini" v-model="filter.entryCode" placeholder="条目编码"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <el-button size="mini" type="warning" @click="setTaskName">转化为任务</el-button>
+                    <el-button size="mini" type="warning" @click="showTestDialog">自动化测试</el-button>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table :data="list"
+                      border
+                      style="width: 100%">
+                <el-table-column
+                        type="index"
+                        :index="indexMethod"
+                        label="编号"
+                        width="60">
+                </el-table-column>
+                <el-table-column
+                        prop="gmtModified"
+                        label="所属医院"
+                        width="120"
+                        :formatter="hisFormatter"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="casesName"
+                        width="120"
+                        label="所属模块">
+                </el-table-column>
+                <el-table-column
+                        prop="entryName"
+                        label="缺陷名称">
+                </el-table-column>
+                <el-table-column
+                        prop="entryCode"
+                        width="120"
+                        label="条目编码">
+                </el-table-column>
+                <el-table-column
+                        prop="amount"
+                        width="80"
+                        label="差异数量">
+                </el-table-column>
+                <el-table-column
+                        prop="behospitalCodeStr"
+                        width="145"
+                        label="病人住院序号">
+                </el-table-column>
+                <!--<el-table-column
+                        label="操作" width="100">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" @click="toEditField(scope.row, 'modify')">修改</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <el-button type="text" size="small" @click="toEditField(scope.row, 'copy')">复制</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.id)">删除</el-button>
+                    </template>
+                </el-table-column>-->
+            </el-table>
+            <el-pagination v-if="total>pageSize"
+                           :current-page.sync="currentPage"
+                           @current-change="currentChange"
+                           background
+                           :page-size="pageSize"
+                           :layout="pageLayout"
+                           :total="total">
+            </el-pagination>
+        </div>
+        <el-dialog title="新建" :visible.sync="dialogTaskName" class="autotest-dialog">
+            <el-form>
+                <el-form-item label="任务名称:" label-width="80">
+                    <el-input v-model.tirm="taskName" placeholder="请输入任务名称" autocomplete="off"></el-input>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="addTask" :disabled="addBtnDisable">确 定</el-button>
+            </div>
+        </el-dialog>
+        <el-dialog title="提示" :visible.sync="dialogTippop" class="tip-dialog">
+            <div class="dialog-body">
+                <p>经程序自动化测试,下列病历存在问题,请及时处理~</p>
+                <br/>
+                <div class="warn-tip" v-html="tips"></div>
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="addTask">确 定</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+  import api from '@api/qualityControl.js';
+  import { Loading } from 'element-ui';
+  import config from '@api/config.js';
+
+  export default {
+    name: 'AutoTestList',
+    data: function () {
+      return {
+        list: [],
+        tagType:[1],
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        loading: false,
+        fieldTypes:[],
+        searched:false,
+        hisTypes:[],
+        taskName:"",
+        dialogTaskName:false,
+        dialogTippop:false,
+        addBtnDisable:false,
+        pageLayout:config.pageLayout,
+        tips:'',
+        filter: {
+          hospitalId:'',
+          entryName:'',
+          entryCode: '',
+          casesId:'',
+        }
+      }
+    },
+    created() {
+      const _this=this;
+      setTimeout(function() {
+        _this.getAllTypes()
+      },100);
+    },
+    watch:{
+      'filter':{
+        handler:function(){
+          this.searched = false;
+        },
+        deep:true
+      }
+    },
+    beforeRouteEnter(to, from, next){
+      next(vm => {
+        //const pm = to.param;
+        Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
+      })
+    },
+    methods: {
+      hisFormatter(item){
+        const field = this.hisTypes.filter((it)=>it.id==item.hospitalId);
+        return field[0]?field[0].name:'';
+      },
+      getAllTypes(){
+        api.getRecordHopitalList().then((res)=>{
+          if(res.data.code==="0"){
+            const data = res.data.data;
+            this.hisTypes =data;
+            this.getDataList();
+          }else{
+            this.warning("获取医院信息失败");
+          }
+        });
+        api.getRecordCases().then((res)=>{
+          if(res.data.code==="0"){
+            const data = res.data.data;
+            this.fieldTypes =data;
+          }else{
+            this.warning("获取模块信息失败");
+          }
+        });
+      },
+      autoTest(){
+        //this.loading=true;
+        let loadingInstance =Loading.service({background:"rgba(0, 0, 0, 0.6)"});
+        api.autoTest().then((res)=>{
+          if(res.data.code==="0"){
+            //this.loading=false;
+            loadingInstance.close();
+            const {messages}=res.data.data;
+            let str='';
+            if(messages.length>0){
+              for(let i=0;i<messages.length;i++){
+                str+=`<p>`+messages[i]+`</p>`;
+              }
+              this.tips = str;
+              this.dialogTippop=true;
+            }else{
+              this.warning(res.data.msg||'操作成功','success');
+            }
+            this.getDataList();
+          }else{
+            this.warning(res.data.msg||"自动化测试失败");
+          }
+        });
+      },
+      setTaskName(){
+        this.dialogTaskName = true;
+      },
+      addTask(){
+        if(!this.taskName.trim()){
+          this.warning("请输入任务名称");
+          return;
+        }
+        this.addBtnDisable=true;
+        api.addTask({missionName:this.taskName}).then((res)=>{
+          this.addBtnDisable=false;
+          if(res.data.code==="0"){
+            this.dialogTaskName = false;
+            this.toTaskList();
+          }else{
+            this.warning(res.data.msg||"转化为任务失败");
+          }
+        });
+      },
+      toTaskList(){
+        const pam = this.searched ? {
+          currentPage: this.currentPage,
+          filter: this.filter
+        } : {currentPage: this.currentPage};
+        this.$router.push({name: 'AutoTestTask', params: pam});
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        this.searched = true;
+        api.getTestItems(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getFilterItems() {
+        const param = Object.assign({
+          current: this.currentPage,
+          size: this.pageSize,
+        },this.filter);
+        return param;
+      },
+      indexMethod(index) {
+        return ((this.currentPage - 1) * this.pageSize) + index + 1;
+      },
+      currentChange(next) {
+        this.currentPage = next;
+        this.getDataList();
+      },
+      warning(msg,type){
+        this.$message({
+          showClose: true,
+          message:msg,
+          type:type||'warning'
+        })
+      },
+      showTestDialog(){
+        this.showConfirmDialog('所有标准病历自动化测试,可能将等待很长时间~',()=>{
+          this.autoTest();
+        });
+      },
+      showConfirmDialog(msg,resolve){
+        this.$alert(msg, '提示', {
+          confirmButtonText: '确定',
+          type: 'warning'
+        }).then(() => {
+          resolve();
+        }).catch(() => {});
+      },
+      showDelDialog(id){
+        this.showConfirmDialog('是否删除该字段映射?',()=>{
+          api.delFieldMatch({ids:id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      }
+    }
+  }
+</script>
+<style>
+   .el-loading-spinner{
+        top:200px;
+    }
+    .autotest-dialog .el-dialog__body{
+        padding: 30px 20px;
+    }
+   .autotest-dialog .el-form-item__content{
+       display: inline-block;
+       width: 272px;
+    }
+    .autotest-dialog .el-dialog{
+        width: 400px!important;
+    }
+</style>
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+        color: red !important;
+    }
+    div.container{
+        height: 90px!important;
+    }
+    .contents{
+        padding:120px 20px 0;
+    }
+</style>

+ 0 - 354
src/components/qualityControl/AutoTestStat.vue

@@ -1,354 +0,0 @@
-<template>
-    <div>
-        <crumbs title="自动化测试统计">
-            <el-form :inline="true" class="demo-form-inline">
-                <el-form-item label="所属医院:">
-                    <el-select size="mini" v-model.trim="filter.hospitalId" @change="getValue"  placeholder="所属医院" clearable>
-                        <el-option v-for="item in hospitalList" :label="item.name" :value="item.val" :key="item.id" ></el-option>
-                    </el-select>
-                </el-form-item>
-                 <el-form-item label="所属模块:">
-                     <el-select size="mini" v-model.trim="filter.casesId"  placeholder="所属模块" clearable>
-                        <el-option v-for="item in moduleList" :label="item.name" :value="item.val" :key="item.id" ></el-option>
-                    </el-select>
-                </el-form-item>
-                 <el-form-item label="缺陷名称:">
-                    <el-input size="mini" v-model.trim="filter.entryName" placeholder="缺陷名称" clearable></el-input>
-                </el-form-item>
-               
-                <el-form-item label="条目编码:">
-                    <el-input size="mini" v-model.trim="filter.code" placeholder="条目编码" clearable></el-input>
-                </el-form-item>
-                <el-form-item>
-                    <el-button size="mini" @click="filterDatas">确认</el-button>
-                    <el-button size="mini" type="warning" @click="transformTask">转化为任务</el-button>
-                    <el-button size="mini" type="warning" @click="addTemp">自动化测试</el-button>
-                </el-form-item>
-            </el-form>
-        </crumbs>
-        <div class="contents">
-            <el-table   
-                    :data="list"
-                    border
-                    style="width: 100%">
-                <el-table-column
-                    type="index"
-                    :index="indexMethod"
-                    label="编号"
-                    width="60">
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        label="所属医院"
-                        prop="hospitalId"
-                        :formatter="hisFormatter"
-                        >
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        prop="casesName"
-                        label="所属模块">
-                </el-table-column>
-                 <el-table-column
-                        :resizable = "false"
-                        prop="entryName"
-                        label="缺陷名称"
-                        width="180"
-                        show-overflow-tooltip>
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        prop="code"
-                        label="条目编码">
-                </el-table-column>
-                 <el-table-column
-                        :resizable = "false"
-                        prop="typeStr"
-                        label="差异数量"
-                        show-overflow-tooltip>
-                </el-table-column>
-                    <el-table-column
-                        :resizable = "false"
-                        prop="typeStr"
-                        label="病人住院序号"
-                        show-overflow-tooltip>
-                </el-table-column>
-             
-            </el-table>
-          <el-pagination  :current-page.sync="currentPage"
-                          @current-change="currentChange"
-                          background
-                          :page-size.sync="pageSize"
-                          :page-sizes="pageSizeArr"
-                           @size-change="handleSizeChange"
-                          :layout="pageLayout"
-                          :total="total">
-            </el-pagination>
-        </div>
-    </div>
-</template>
-
-<script>
-    import api from '@api/qualityControl.js';
-  import config from '@api/config.js';
-  import utils from '@api/utils.js'
-  export default {
-    name: 'ItemDataType',
-    data: function() {
-      return {
-        list: [],
-        hospitalList: [],
-        moduleList:[],
-        qcTypeNameList:[],
-        searched: false,
-        filter: {
-          typeName:"",//质控类型名称
-          hospitalId: "", //所属医院
-          entryName:"", //条目名称
-          casesId:null,//所属模块
-          code:"",//条目编码
-        },
-        currentPage: 1,
-        pageSize: config.pageSize,
-        pageSizeArr:config.pageSizeArr,
-        pageLayout:config.pageLayout,
-        total: 0,
-      }
-    },
-    created() {
-      const _this=this;
-      this.getTypeNameList()
-      setTimeout(function(){
-        _this.getAllTypes().then(()=>{
-          _this.getDataList()
-        })
-      },100);
-
-    },
-    watch: {
-      'filter': {
-        handler: function () {
-          this.searched = false;
-        },
-        deep: true
-      }
-    },
-    beforeRouteEnter(to, from, next) {
-      next(vm => {
-        //const pm = to.param;
-        Object.assign(vm, to.params);
-        vm.inCurrentPage=to.params.currentPage;
-      })
-    },
-    methods: {
-      moduleFormatter(row, column, cellValue){
-        const it = this.moduleList.find(item => item.id == cellValue);
-        return it?it.name:'';
-      },
-      hisFormatter(row, column, cellValue){
-        const it = this.hospitalList.find(item => item.val == cellValue);
-        return it?it.name:'';
-      },
-      getAllTypes(){
-          if(localStorage.getItem("qcModuleTypes")){
-              this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-              this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
-              return new Promise(function(resolve, reject){
-                  resolve()
-              });
-          }
-          //获取枚举信息
-          return api.getQcTypes().then((res)=>{
-              if(res.data.code==="0"){
-                  const data = res.data.data;
-                  localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
-                  localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-                  localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
-                  this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-                  this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
-              }else{
-                  this.warning("获取枚举信息失败");
-              }
-          });
-      },
-      getTypeNameList(hospitalId){
-        api.getQcEntryTypeByHospital({hospitalId:hospitalId}).then((res) => {
-          if(res.data.code == 0){
-            // let list = res.data.data.records
-              this.qcTypeNameList = res.data.data
-          }
-          
-        })
-      },
-      handleSizeChange(val){
-        this.pageSize = val;
-        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
-        this.getDataList();
-      },
-      getValue(val) {
-        console.log('changeVal', )
-        THIS.filter.typeName = ""
-      },
-      getDataList(isTurnPage) {
-        const param = this.getFilterItems(isTurnPage);
-        this.searched = true;
-        const loading = this.$loading({
-            lock: true,
-            text: 'Loading',
-            spinner: 'el-icon-loading',
-            background: 'rgba(0, 0, 0, 0.7)'
-        });
-        api.getQcEntryTypeList(param).then((res) => {
-          loading.close()
-          if(res.data.code == 0){
-            let list = res.data.data.records
-          /*for(let i = 0; i < list.length; i++){
-            list[i].hospitalId = this.hospitalList.find(item => item.val == list[i].hospitalId).name
-            list[i].modeId  = this.moduleList.find(item => item.val == list[i].modeId).name
-          }*/
-          this.list = list;
-          this.total = res.data.data.total;
-          if(this.inCurrentPage!==undefined){
-            this.currentPage=this.inCurrentPage;
-            this.inCurrentPage = undefined;
-          }
-          }
-          
-        })
-      },
-      filterDatas() {
-        this.currentPage = 1;
-        this.getDataList();
-      },
-      addTemp() {
-        const pam = this.searched ? {
-          currentPage: this.currentPage,
-          pageSize:this.pageSize,
-          filter: this.filter
-        } : {currentPage: this.currentPage,pageSize:this.pageSize};
-        this.$router.push({
-          name: 'ItemDataTypeRelation',
-          params: pam
-        })
-      },
-      transformTask(){
-          const pam = this.searched ? {
-          currentPage: this.currentPage,
-          pageSize:this.pageSize,
-          filter: this.filter
-        } : {currentPage: this.currentPage,pageSize:this.pageSize};
-        this.$router.push({
-          name: 'TransformTask',
-          params: pam
-        })
-      },
-     
-      currentChange(next) {
-        this.currentPage = next;
-        this.getDataList(true);
-        // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
-        //     this.list = this.cacheData[next];
-        // } else {
-        //     this.getDataList();
-        // }
-      },
-      clearFilter(){
-        this.filter={
-          hospitalId: "",
-          typeName:"",
-          entryName:"",
-          casesId:null,
-          code:""
-        };
-      },
-      getFilterItems(isTurnPage) {
-        //翻页时筛选条件没点确定则清空
-        if(isTurnPage&&!this.searched){
-          this.clearFilter();
-        };
-        const {hospitalId,typeName,entryName,casesId,code} = this.filter
-        const param = {
-          current: this.inCurrentPage||this.currentPage,
-          size: this.pageSize,
-          hospitalId: hospitalId,
-          typeName:typeName,
-          entryName:entryName,
-          casesId:casesId,
-          code:code
-        };
-        return param;
-      },
-      indexMethod(index) {
-        return ((this.currentPage - 1) * this.pageSize) + index + 1;
-      },
-      getTagType(val) {
-        return val
-      },
-      warning(msg,type){
-        this.$message({
-          showClose: true,
-          dangerouslyUseHTMLString: true,
-          message:'<p>'+msg+'</p>',
-          type:type||'warning'
-        })
-      },
-      showConfirmDialog(msg,resolve){
-        this.$alert(msg, '提示', {
-          confirmButtonText: '确定',
-          type: 'warning'
-        }).then(() => {
-          resolve();
-        }).catch(() => {});
-      },
-      showDelDialog(row){
-        const param = {
-          "ids": row.id,
-        }
-        this.showConfirmDialog('是否删除该模板?',()=>{
-          api.delQCTemp(param).then((res)=>{
-            if(res.data.code=='0'){
-              if(!this.searched){
-                //未点确认时清空搜索条件
-                this.clearFilter();
-              }
-              if(this.list.length==1){
-                //当前在最后一页且只有一条数据时,删除后跳到前一页
-                this.currentPage = this.currentPage===1?1:this.currentPage-1;
-              }
-              this.getDataList();
-              this.warning(res.data.msg || '操作成功','success');
-            }else{
-              this.warning(res.data.msg);
-            }
-          }).catch((error)=>{
-            this.warning(error);
-          })
-        });
-      }
-    }
-  }
-</script>
-
-
-<style lang="less">
-  @import "../../less/admin.less";
-    .delete{
-        color: red
-    }
-    .delete:hover {
-        color: red;
-    }
-    .el-select .el-input .el-icon-arrow-up{
-        display: inline-block!important;
-    }
-    .el-select .el-input .el-icon-circle-close{
-        float:left;
-    }
-  .el-pagination__sizes{
-      margin-right: 20px;
-    .el-input .el-input__inner{
-        height: 28px;
-        line-height: 28px;
-    }
-  }
-</style>

+ 0 - 367
src/components/qualityControl/AutoTestStatDetail.vue

@@ -1,367 +0,0 @@
-<template>
-    <div>
-        <crumbs title="详情" linkTo="TransformTask">
-            <el-form :inline="true" class="demo-form-inline">
-                <el-form-item label="所属医院:">
-                    <el-select size="mini" v-model.trim="filter.hospitalId" @change="getValue"  placeholder="所属医院" clearable>
-                        <el-option v-for="item in hospitalList" :label="item.name" :value="item.val" :key="item.id" ></el-option>
-                    </el-select>
-                </el-form-item>
-                 <el-form-item label="所属模块:">
-                     <el-select size="mini" v-model.trim="filter.casesId"  placeholder="所属模块" clearable>
-                        <el-option v-for="item in moduleList" :label="item.name" :value="item.val" :key="item.id" ></el-option>
-                    </el-select>
-                </el-form-item>
-                 <el-form-item label="缺陷名称:">
-                    <el-input size="mini" v-model.trim="filter.entryName" placeholder="缺陷名称" clearable></el-input>
-                </el-form-item>
-               
-                <el-form-item label="条目编码:">
-                    <el-input size="mini" v-model.trim="filter.code" placeholder="条目编码" clearable></el-input>
-                </el-form-item>
-                <el-form-item>
-                    <el-button size="mini" @click="filterDatas">确认</el-button>
-                </el-form-item>
-            </el-form>
-        </crumbs>
-        <div class="contents">
-            <el-table   
-                    :data="list"
-                    border
-                    style="width: 100%">
-                <el-table-column
-                    type="index"
-                    :index="indexMethod"
-                    label="编号"
-                    width="60">
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        label="所属医院"
-                        prop="hospitalId"
-                        :formatter="hisFormatter"
-                        >
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        prop="casesName"
-                        label="所属模块">
-                </el-table-column>
-                 <el-table-column
-                        :resizable = "false"
-                        prop="entryName"
-                        label="缺陷名称"
-                        width="180"
-                        show-overflow-tooltip>
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        prop="code"
-                        label="条目编码">
-                </el-table-column>
-                 <el-table-column
-                        :resizable = "false"
-                        prop="typeStr"
-                        label="差异数量"
-                        show-overflow-tooltip>
-                </el-table-column>
-                    <el-table-column
-                        :resizable = "false"
-                        prop="typeStr"
-                        label="病人住院序号"
-                        show-overflow-tooltip>
-                </el-table-column>
-             
-            </el-table>
-          <el-pagination  :current-page.sync="currentPage"
-                          @current-change="currentChange"
-                          background
-                          :page-size.sync="pageSize"
-                          :page-sizes="pageSizeArr"
-                           @size-change="handleSizeChange"
-                          :layout="pageLayout"
-                          :total="total">
-            </el-pagination>
-        </div>
-    </div>
-</template>
-
-<script>
-    import api from '@api/qualityControl.js';
-  import config from '@api/config.js';
-  import utils from '@api/utils.js'
-  export default {
-    name: 'TransformTask',
-    data: function() {
-      return {
-        list: [],
-        hospitalList: [],
-        moduleList:[],
-        qcTypeNameList:[],
-        searched: false,
-        filter: {
-          typeName:"",//质控类型名称
-          hospitalId: "", //所属医院
-          entryName:"", //条目名称
-          casesId:null,//所属模块
-          code:"",//条目编码
-        },
-        currentPage: 1,
-        pageSize: config.pageSize,
-        pageSizeArr:config.pageSizeArr,
-        pageLayout:config.pageLayout,
-        total: 0,
-      }
-    },
-    created() {
-      const _this=this;
-      this.getTypeNameList()
-      setTimeout(function(){
-        _this.getAllTypes().then(()=>{
-          _this.getDataList()
-        })
-      },100);
-
-    },
-    watch: {
-      'filter': {
-        handler: function () {
-          this.searched = false;
-        },
-        deep: true
-      }
-    },
-    beforeRouteEnter(to, from, next) {
-      next(vm => {
-        //const pm = to.param;
-        Object.assign(vm, to.params);
-        vm.inCurrentPage=to.params.currentPage;
-      })
-    },
-    methods: {
-      moduleFormatter(row, column, cellValue){
-        const it = this.moduleList.find(item => item.id == cellValue);
-        return it?it.name:'';
-      },
-      hisFormatter(row, column, cellValue){
-        const it = this.hospitalList.find(item => item.val == cellValue);
-        return it?it.name:'';
-      },
-      getAllTypes(){
-          if(localStorage.getItem("qcModuleTypes")){
-              this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-              this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
-              return new Promise(function(resolve, reject){
-                  resolve()
-              });
-          }
-          //获取枚举信息
-          return api.getQcTypes().then((res)=>{
-              if(res.data.code==="0"){
-                  const data = res.data.data;
-                  localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
-                  localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-                  localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
-                  this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-                  this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
-              }else{
-                  this.warning("获取枚举信息失败");
-              }
-          });
-      },
-      getTypeNameList(hospitalId){
-        api.getQcEntryTypeByHospital({hospitalId:hospitalId}).then((res) => {
-          if(res.data.code == 0){
-            // let list = res.data.data.records
-              this.qcTypeNameList = res.data.data
-          }
-          
-        })
-      },
-      handleSizeChange(val){
-        this.pageSize = val;
-        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
-        this.getDataList();
-      },
-      getValue(val) {
-        console.log('changeVal', )
-        THIS.filter.typeName = ""
-      },
-      getDataList(isTurnPage) {
-        const param = this.getFilterItems(isTurnPage);
-        this.searched = true;
-        const loading = this.$loading({
-            lock: true,
-            text: 'Loading',
-            spinner: 'el-icon-loading',
-            background: 'rgba(0, 0, 0, 0.7)'
-        });
-        api.getQcEntryTypeList(param).then((res) => {
-          loading.close()
-          if(res.data.code == 0){
-            let list = res.data.data.records
-          /*for(let i = 0; i < list.length; i++){
-            list[i].hospitalId = this.hospitalList.find(item => item.val == list[i].hospitalId).name
-            list[i].modeId  = this.moduleList.find(item => item.val == list[i].modeId).name
-          }*/
-          this.list = list;
-          this.total = res.data.data.total;
-          if(this.inCurrentPage!==undefined){
-            this.currentPage=this.inCurrentPage;
-            this.inCurrentPage = undefined;
-          }
-          }
-          
-        })
-      },
-      filterDatas() {
-        this.currentPage = 1;
-        this.getDataList();
-      },
-      addTemp() {
-        const pam = this.searched ? {
-          currentPage: this.currentPage,
-          pageSize:this.pageSize,
-          filter: this.filter
-        } : {currentPage: this.currentPage,pageSize:this.pageSize};
-        this.$router.push({
-          name: 'ItemDataTypeRelation',
-          params: pam
-        })
-      },
-      modifyIndeptTag(row, type) {
-        api.getQcEntryTypeDetail({ "entryId": row.entryId,"hospitalId": row.hospitalId}).then((res)=>{
-          const {code,data,msg} = res.data;
-          const hospitalItem = this.hospitalList.find(item => item.val == row.hospitalId);
-         const hospitalName = hospitalItem ? hospitalItem.name:''
-          if(code=='0'){
-            const item = Object.assign({},{hospitalName:hospitalName},data);
-            const pam = this.searched ? {
-              currentPage: this.currentPage,
-              filter: this.filter
-            } : {currentPage: this.currentPage};
-            if(type == 'modify') {
-              this.$router.push({name: 'ItemDataTypeRelation', params: Object.assign(pam, {isEdit: true, data: item})});
-            } else if( type == 'copy') {
-              this.$router.push({name: 'ItemDataTypeRelation', params: Object.assign(pam, {isCopy: true, data: item})});
-            } else {
-                return
-            }
-          }else{
-            this.$message({
-              message: msg,
-              type: 'warning'
-            });
-          }
-        });
-        //this.$router.push({name:'AddIndeptLabel',params:{isEdit:true,data:row}});
-      },
-      currentChange(next) {
-        this.currentPage = next;
-        this.getDataList(true);
-        // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
-        //     this.list = this.cacheData[next];
-        // } else {
-        //     this.getDataList();
-        // }
-      },
-      clearFilter(){
-        this.filter={
-          hospitalId: "",
-          typeName:"",
-          entryName:"",
-          casesId:null,
-          code:""
-        };
-      },
-      getFilterItems(isTurnPage) {
-        //翻页时筛选条件没点确定则清空
-        if(isTurnPage&&!this.searched){
-          this.clearFilter();
-        };
-        const {hospitalId,typeName,entryName,casesId,code} = this.filter
-        const param = {
-          current: this.inCurrentPage||this.currentPage,
-          size: this.pageSize,
-          hospitalId: hospitalId,
-          typeName:typeName,
-          entryName:entryName,
-          casesId:casesId,
-          code:code
-        };
-        return param;
-      },
-      indexMethod(index) {
-        return ((this.currentPage - 1) * this.pageSize) + index + 1;
-      },
-      getTagType(val) {
-        return val
-      },
-      warning(msg,type){
-        this.$message({
-          showClose: true,
-          dangerouslyUseHTMLString: true,
-          message:'<p>'+msg+'</p>',
-          type:type||'warning'
-        })
-      },
-      showConfirmDialog(msg,resolve){
-        this.$alert(msg, '提示', {
-          confirmButtonText: '确定',
-          type: 'warning'
-        }).then(() => {
-          resolve();
-        }).catch(() => {});
-      },
-      showDelDialog(row){
-        const param = {
-          "ids": row.id,
-        }
-        this.showConfirmDialog('是否删除该模板?',()=>{
-          api.delQCTemp(param).then((res)=>{
-            if(res.data.code=='0'){
-              if(!this.searched){
-                //未点确认时清空搜索条件
-                this.clearFilter();
-              }
-              if(this.list.length==1){
-                //当前在最后一页且只有一条数据时,删除后跳到前一页
-                this.currentPage = this.currentPage===1?1:this.currentPage-1;
-              }
-              this.getDataList();
-              this.warning(res.data.msg || '操作成功','success');
-            }else{
-              this.warning(res.data.msg);
-            }
-          }).catch((error)=>{
-            this.warning(error);
-          })
-        });
-      }
-    }
-  }
-</script>
-
-
-<style lang="less">
-  @import "../../less/admin.less";
-    .delete{
-        color: red
-    }
-    .delete:hover {
-        color: red;
-    }
-    .el-select .el-input .el-icon-arrow-up{
-        display: inline-block!important;
-    }
-    .el-select .el-input .el-icon-circle-close{
-        float:left;
-    }
-  .el-pagination__sizes{
-      margin-right: 20px;
-    .el-input .el-input__inner{
-        height: 28px;
-        line-height: 28px;
-    }
-  }
-</style>

+ 172 - 0
src/components/qualityControl/AutoTestTask.vue

@@ -0,0 +1,172 @@
+<template>
+    <div>
+        <crumbs title="任务列表">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="任务名称:">
+                    <el-input size="mini" v-model="filter.missionName" placeholder="任务名称"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table :data="list"
+                      border
+                      style="width: 100%">
+                <el-table-column
+                        type="index"
+                        :index="indexMethod"
+                        label="编号"
+                        width="60">
+                </el-table-column>
+                <el-table-column
+                        prop="missionName"
+                        label="任务名称">
+                </el-table-column>
+                <el-table-column
+                        label="操作" width="150">
+                    <template slot-scope="scope"><el-button type="text" size="small" @click="toTaskDetail(scope.row.id)">详情</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <!--<el-button type="text" size="small" @click="toEditField(scope.row, 'modify')">修改</el-button>
+                        <span style="margin:0 3px;">|</span>-->
+                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.id)">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <el-pagination :current-page.sync="currentPage"
+                           @current-change="currentChange"
+                           background
+                           :page-size="pageSize"
+                           :layout="pageLayout"
+                           :total="total">
+            </el-pagination>
+        </div>
+    </div>
+</template>
+
+<script>
+  import api from '@api/qualityControl.js';
+  import config from '@api/config.js';
+
+  export default {
+    name: 'AutoTestTask',
+    data: function () {
+      return {
+        list: [],
+        tagType:[1],
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        fieldTypes:[],
+        searched:false,
+        pageLayout:config.pageLayout,
+        hisTypes:[],
+        filter: {
+          missionName: ''
+        }
+      }
+    },
+    created() {
+      const _this=this;
+      setTimeout(function() {
+        _this.getDataList()
+      },100);
+    },
+    watch:{
+      'filter':{
+        handler:function(){
+          this.searched = false;
+        },
+        deep:true
+      }
+    },
+    beforeRouteEnter(to, from, next){
+      next(vm => {
+        //const pm = to.param;
+        Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
+      })
+    },
+    methods: {
+      toTaskDetail(id){
+        const pam = this.searched ? {
+          currentPage: this.currentPage,
+          filter: this.filter,
+          id
+        } : {currentPage: this.currentPage,id};
+         this.$router.push({
+           name:'TaskDetail',
+           params: pam
+         })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        this.searched = true;
+        api.getTaskList(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getFilterItems() {
+        const param = Object.assign({
+          current: this.currentPage,
+          size: this.pageSize,
+        },this.filter);
+        return param;
+      },
+      indexMethod(index) {
+        return ((this.currentPage - 1) * this.pageSize) + index + 1;
+      },
+      currentChange(next) {
+        this.currentPage = next;
+        this.getDataList();
+      },
+      warning(msg,type){
+        this.$message({
+          showClose: true,
+          message:msg,
+          type:type||'warning'
+        })
+      },
+      showConfirmDialog(msg,resolve){
+        this.$alert(msg, '提示', {
+          confirmButtonText: '确定',
+          type: 'warning'
+        }).then(() => {
+          resolve();
+        }).catch(() => {});
+      },
+      showDelDialog(id){
+        this.showConfirmDialog('是否删除该任务?',()=>{
+          api.delTask({id:id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      }
+    }
+  }
+</script>
+
+<style lang="less">
+    @import "../../less/admin.less";
+    .delete{
+        color: red !important;
+    }
+</style>

+ 107 - 105
src/components/qualityControl/StandardRecord.vue

@@ -1,16 +1,21 @@
 <template>
     <div class="standardRecordWrapper">
         <crumbs title="标准病历维护">
-            <el-form :inline="true" class="demo-form-inline">
+            <el-form :inline="true" class="demo-form-inline" style="max-width: 870px;text-align: right;">
+                <el-form-item label="所属医院:">
+                    <el-select size="mini" v-model="filter.hospitalId" placeholder="所属医院" clearable>
+                        <el-option v-for="item in hisTypes" :label="item.name" :value="item.id" :key="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
               <el-form-item label="病人住院序号:">
-                    <el-input size="mini" v-model.trim="filter.moduleId" placeholder="病人住院序号" clearable></el-input>
+                    <el-input size="mini" v-model.trim="filter.behospitalCode" placeholder="病人住院序号" clearable></el-input>
                 </el-form-item>
                  <el-form-item label="病人姓名:">
-                    <el-input size="mini" v-model.trim="filter.modeName" placeholder="病人姓名" clearable></el-input>
+                    <el-input size="mini" v-model.trim="filter.name" placeholder="病人姓名" clearable></el-input>
                 </el-form-item>
                 <el-form-item label="科室:">
-                     <el-select size="mini" v-model.trim="filter.modeId" @change="getValue"  placeholder="请选择科室" clearable>
-                        <el-option v-for="item in moduleList" :label="item.name" :value="item.val" :key="item.id" ></el-option>
+                     <el-select size="mini" v-model.trim="filter.deptId" @change="getValue"  placeholder="请选择科室" clearable>
+                        <el-option v-for="item in moduleList" :label="item.deptName" :value="Number(item.deptId)" :key="Number(item.deptId)" ></el-option>
                     </el-select>
                 </el-form-item>
                 <el-form-item label="出院日期:">
@@ -47,56 +52,47 @@
                 <el-table-column
                         :resizable = "false"
                         label="所属医院"
-                        prop="id"
+                        prop="hospitalName"
                         >
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="name"
+                        prop="behospitalCode"
                         label="病人住院序号"
                         width="180">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="deptName"
                         label="科室">
                 </el-table-column>
                 
                 <el-table-column
                         :resizable = "false"
-                        prop="hospitalId"
-                        :formatter="hisFormatter"
+                        prop="name"
                         label="病人姓名">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="sex"
                         label="性别">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
-                        label="年龄">
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="behospitalDate"
+                        :formatter="dateFormatter"
                         label="入院日期">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="leaveHospitalDate"
+                        :formatter="dateFormatter"
                         label="出院日期">
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modeId"
-                        :formatter="moduleFormatter"
+                        prop="gmtModified"
+                        :formatter="dateFormatter"
                         label="加入时间">
                 </el-table-column>
                 <el-table-column
@@ -104,9 +100,7 @@
                         prop="operate"
                         label="操作">
                     <template slot-scope="scope">
-                        <el-button  @click="modifyIndeptTag(scope.row, 'modify')" type="text" size="small">修改</el-button>
-                        <span style="margin:0 3px;">|</span>
-                        <el-button @click="modifyIndeptTag(scope.row, 'copy')" class="text" type="text" size="small">复制</el-button>
+                        <el-button  @click="modifyStd(scope.row)" type="text" size="small">更新</el-button>
                         <span style="margin:0 3px;">|</span>
                         <el-button @click="showDelDialog(scope.row)" class="delete" type="text" size="small">删除</el-button>
                     </template>
@@ -134,14 +128,14 @@
     data: function() {
       return {
         list: [],
-        hospitalList: [],
+        hisTypes:[],
         moduleList:[],
         searched: false,
         filter: {
-          modeName: '', //模板名称
-          moduleId:null, //模板Id
-          modeId: '',//所属模块
-          hospitalName: '', //所属医院
+          hospitalId:'',
+          behospitalCode: '',
+          deptId:'',
+          name: '',
           date1:"",
           date2:"",
         },
@@ -155,9 +149,7 @@
     created() {
       const _this=this;
       setTimeout(function(){
-        _this.getAllTypes().then(()=>{
-          _this.getDataList()
-        })
+        _this.getAllTypes()
       },100);
 
     },
@@ -177,35 +169,27 @@
       })
     },
     methods: {
-      moduleFormatter(row, column, cellValue){
-        const it = this.moduleList.find(item => item.val == cellValue);
-        return it?it.name:'';
-      },
-      hisFormatter(row, column, cellValue){
-        const it = this.hospitalList.find(item => item.val == cellValue);
-        return it?it.name:'';
+      dateFormatter(item,prop,it){
+        return it.substr(0,10);
       },
       getAllTypes(){
-          if(localStorage.getItem("qcModuleTypes")){
-              this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-              this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
-              return new Promise(function(resolve, reject){
-                  resolve()
-              });
+        api.getRecordHopitalList().then((res)=>{
+          if(res.data.code==="0"){
+            const data = res.data.data;
+            this.hisTypes =data;
+          }else{
+            this.warning("获取医院列表失败");
           }
-          //获取枚举信息
-          return api.getQcTypes().then((res)=>{
-              if(res.data.code==="0"){
-                  const data = res.data.data;
-                  localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
-                  localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-                  localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
-                  this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-                  this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
-              }else{
-                  this.warning("获取枚举信息失败");
-              }
-          });
+        });
+        api.getStdDeptList({}).then((res)=>{
+            if(res.data.code==="0"){
+                const data = res.data.data;
+                this.moduleList=data;
+            }else{
+                this.warning("获取科室列表失败");
+            }
+        });
+        this.getDataList();
       },
       handleSizeChange(val){
         this.pageSize = val;
@@ -217,6 +201,11 @@
       },
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
+        const {leaveHosDateStart,leaveHosDateEnd}=param;
+        if(leaveHosDateStart&&leaveHosDateEnd&&leaveHosDateStart>leaveHosDateEnd){
+          this.warning('开始时间不能大于结束时间');
+          return;
+        }
         this.searched = true;
         const loading = this.$loading({
             lock: true,
@@ -224,18 +213,18 @@
             spinner: 'el-icon-loading',
             background: 'rgba(0, 0, 0, 0.7)'
         });
-        api.getQCTemplist(param).then((res) => {
-          loading.close()
-          let list = res.data.data.records
-          /*for(let i = 0; i < list.length; i++){
-            list[i].hospitalId = this.hospitalList.find(item => item.val == list[i].hospitalId).name
-            list[i].modeId  = this.moduleList.find(item => item.val == list[i].modeId).name
-          }*/
-          this.list = list;
-          this.total = res.data.data.total;
-          if(this.inCurrentPage!==undefined){
-            this.currentPage=this.inCurrentPage;
-            this.inCurrentPage = undefined;
+        api.getStdList(param).then((res) => {
+          loading.close();
+          if(res.data.code==="0"){
+            let list = res.data.data.records;
+            this.list = list;
+            this.total = res.data.data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          }else{
+            this.warning(res.data.msg||'操作失败');
           }
         })
       },
@@ -247,29 +236,20 @@
         const pam = this.searched ? {
           currentPage: this.currentPage,
           pageSize:this.pageSize,
-          filter: this.filter
-        } : {currentPage: this.currentPage,pageSize:this.pageSize};
+          filter: this.filter,
+          hisTypes:this.hisTypes
+        } : {currentPage: this.currentPage,pageSize:this.pageSize,hisTypes:this.hisTypes};
         this.$router.push({
           name: 'AddStandardRecord',
           params: pam
         })
       },
-      modifyIndeptTag(row, type) {
-        api.getQCTempDetail({moduleId:row.id}).then((res)=>{
+      modifyStd(row) {
+        api.updateStdRecord({behospitalCode:row.behospitalCode,hospitalId:row.hospitalId}).then((res)=>{
           const {code,data,msg} = res.data;
           if(code=='0'){
-            const item = Object.assign({},row,data);
-            const pam = this.searched ? {
-              currentPage: this.currentPage,
-              filter: this.filter
-            } : {currentPage: this.currentPage};
-            if(type == 'modify') {
-              this.$router.push({name: 'AddQualityControlTemp', params: Object.assign(pam, {isEdit: true, data: item})});
-            } else if( type == 'copy') {
-              this.$router.push({name: 'AddQualityControlTemp', params: Object.assign(pam, {isCopy: true, data: item})});
-            } else {
-                return
-            }
+            this.warning(res.data.msg || '更新成功','success');
+            this.getDataList();
           }else{
             this.$message({
               message: msg,
@@ -290,11 +270,12 @@
       },
       clearFilter(){
         this.filter={
-          name: "",
-          modeId: "",
-          hospitalName: "",
-          id:"",
-
+          hospitalId:'',
+          behospitalCode: '',
+          deptId:'',
+          name: '',
+          date1:"",
+          date2:"",
         };
       },
       getFilterItems(isTurnPage) {
@@ -302,14 +283,22 @@
         if(isTurnPage&&!this.searched){
           this.clearFilter();
         };
-        const {modeName, modeId, hospitalName,moduleId} = this.filter
+        const {hospitalId,behospitalCode, deptId, name,date1,date2} = this.filter;
+        let beCode=behospitalCode;
+        var patrn = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、]/g;
+        beCode=behospitalCode.replace(patrn,function(x){
+          return "\\"+x;
+        });
+        const {tranformDate} = utils;
         const param = {
-          name: modeName,
           current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
-          modeId: modeId,
-          id:moduleId,
-          hospitalId: hospitalName
+          hospitalId,
+          deptId,
+          name,
+          behospitalCode:beCode,
+          leaveHosDateEnd:tranformDate(date2,' 23:59:59'),
+          leaveHosDateStart: tranformDate(date1," 00:00:00")
         };
         return param;
       },
@@ -337,10 +326,11 @@
       },
       showDelDialog(row){
         const param = {
-          "ids": row.id,
+          "behospitalCode": row.behospitalCode,
+          "hospitalId":row.hospitalId
         }
-        this.showConfirmDialog('是否删除该模板?',()=>{
-          api.delQCTemp(param).then((res)=>{
+        this.showConfirmDialog('是否删除该病历?',()=>{
+          api.delStdRecord(param).then((res)=>{
             if(res.data.code=='0'){
               if(!this.searched){
                 //未点确认时清空搜索条件
@@ -369,10 +359,10 @@
   @import "../../less/admin.less";
   .standardRecordWrapper{
     .el-date-editor.el-input{
-      width: 115px;
+      width: 130px;
       input{
         padding: 0 5px;
-        width: 115px;
+        width: 130px;
         height: 25px;
       }
     }
@@ -396,4 +386,16 @@
         line-height: 28px;
     }
   }
+  .standardRecordWrapper .container{
+      height: 90px!important;
+  }
+  .standardRecordWrapper>.contents{
+      padding:120px 20px 0;
+  }
+  .standardRecordWrapper .el-form-item{
+      margin-bottom: 0;
+  }
+  .standardRecordWrapper .el-input__suffix{
+      right: 22px;
+  }
 </style>

+ 335 - 0
src/components/qualityControl/TaskDetail.vue

@@ -0,0 +1,335 @@
+<template>
+    <div>
+        <crumbs title="详情" :param="$route.params" linkTo="AutoTestTask">
+            <el-form :inline="true" class="demo-form-inline" style="max-width: 870px;text-align: right;">
+                <el-form-item label="所属医院:">
+                    <el-select size="mini" v-model="filter.hospitalId" placeholder="所属医院" clearable>
+                        <el-option v-for="item in hisTypes" :label="item.name" :value="item.id" :key="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="所属模块:">
+                    <el-select size="mini" v-model="filter.casesId" placeholder="所属模块" clearable>
+                        <el-option v-for="item in fieldTypes" :label="item.name" :value="item.id" :key="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="缺陷名称:">
+                    <el-input size="mini" v-model="filter.entryName" placeholder="缺陷名称"></el-input>
+                </el-form-item>
+                <el-form-item label="条目编码:">
+                    <el-input size="mini" v-model="filter.entryCode" placeholder="条目编码"></el-input>
+                </el-form-item>
+                <el-form-item label="状态:">
+                    <el-select size="mini" v-model="filter.status" placeholder="状态" clearable>
+                        <el-option v-for="item in statusTypes" :label="item.name" :value="item.id" :key="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table :data="list"
+                      border
+                      v-loading="loading"
+                      element-loading-text="拼命加载中"
+                      element-loading-spinner="el-icon-loading"
+                      element-loading-background="rgba(0, 0, 0, 0.6)"
+                      style="width: 100%">
+                <el-table-column
+                        type="index"
+                        :index="indexMethod"
+                        label="编号"
+                        width="60">
+                </el-table-column>
+                <el-table-column
+                        prop="gmtModified"
+                        label="所属医院"
+                        width="110"
+                        :formatter="hisFormatter"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="casesName"
+                        width="110"
+                        label="所属模块">
+                </el-table-column>
+                <el-table-column
+                        prop="entryName"
+                        label="缺陷名称">
+                </el-table-column>
+                <el-table-column
+                        prop="entryCode"
+                        width="120"
+                        label="条目编码">
+                </el-table-column>
+                <el-table-column
+                        prop="amount"
+                        width="80"
+                        label="差异数量">
+                </el-table-column>
+                <el-table-column
+                        width="145"
+                        prop="behospitalCodeStr"
+                        label="病人住院序号">
+                </el-table-column>
+                <el-table-column
+                        prop="status"
+                        width="80"
+                        :formatter="statusFormatter"
+                        label="状态">
+                </el-table-column>
+                <el-table-column
+                        prop="remark"
+                        width="60"
+                        label="备注">
+                </el-table-column>
+                <el-table-column
+                        label="操作" width="100">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" @click="showEditDialog(scope.row)">修改</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <!--<el-button type="text" size="small" @click="toEditField(scope.row, 'copy')">复制</el-button>
+                        <span style="margin:0 3px;">|</span>-->
+                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.id)">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <el-pagination v-if="total>pageSize"
+                           :current-page.sync="currentPage"
+                           @current-change="currentChange"
+                           background
+                           :page-size="pageSize"
+                           layout="total,prev, pager, next, jumper"
+                           :total="total">
+            </el-pagination>
+        </div>
+        <el-dialog title="修改" :visible.sync="dialogVisible" class="autotest-dialog">
+            <el-form>
+                <el-form-item label="状态:" label-width="80">
+                    <el-select size="mini" v-model="status" placeholder="状态">
+                        <el-option v-for="item in editStatus" :label="item.name" :value="item.id" :key="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="备注:" label-width="80">
+                    <el-input type="textarea"
+                              v-model="remark"
+                              placeholder="请输入备注"
+                              :rows="3"
+                              autocomplete="off"></el-input>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="editTaskDetail">确 定</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+  import api from '@api/qualityControl.js';
+  import { Loading } from 'element-ui';
+
+  export default {
+    name: 'AutoTestList',
+    data: function () {
+      return {
+        list: [],
+        tagType:[1],
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        loading: false,
+        fieldTypes:[],
+        searched:false,
+        hisTypes:[],
+        statusTypes:[
+          {id:null,name:'全部'},
+          {id:0,name:'未处理'},
+          {id:1,name:'已处理'},
+          ],
+        editStatus:[
+          {id:0,name:'未处理'},
+          {id:1,name:'已处理'},
+        ],
+        taskName:"",
+        dialogVisible:false,
+        editId:'',
+        remark:'',
+        status:'',
+        filter: {
+          hospitalId:'',
+          entryName:'',
+          entryCode: '',
+          casesId:'',
+        }
+      }
+    },
+    created() {
+      const _this=this;
+      setTimeout(function() {
+        _this.getAllTypes()
+      },100);
+    },
+    watch:{
+      'filter':{
+        handler:function(){
+          this.searched = false;
+        },
+        deep:true
+      }
+    },
+    beforeRouteEnter(to, from, next){
+      next(vm => {
+        //const pm = to.param;
+        Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
+      })
+    },
+    methods: {
+      getAllTypes(){
+        api.getRecordHopitalList().then((res)=>{
+          if(res.data.code==="0"){
+            const data = res.data.data;
+            this.hisTypes =data;
+            this.getDataList();
+          }else{
+            this.warning("获取医院信息失败");
+          }
+        });
+        api.getRecordCases().then((res)=>{
+          if(res.data.code==="0"){
+            const data = res.data.data;
+            this.fieldTypes =data;
+          }else{
+            this.warning("获取模块信息失败");
+          }
+        });
+      },
+      statusFormatter(it){
+        return +it.status===0?"未处理":"已处理";
+      },
+      hisFormatter(item){
+        const field = this.hisTypes.filter((it)=>it.id==item.hospitalId);
+        return field[0]?field[0].name:'';
+      },
+      showEditDialog(row){
+        this.dialogVisible = true;console.log(row)
+        this.editId = row.id;
+        this.remark=row.remark;
+        this.status = row.status;
+      },
+      editTaskDetail(){
+        const param = {
+          id:this.editId,
+          remark:this.remark,
+          status:this.status,
+        };
+        api.editTaskDetail(param).then((res) => {
+          if (res.data.code == '0') {
+            this.dialogVisible = false;
+              this.warning(res.data.msg||'修改成功','success');
+            this.getDataList();
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      toTaskList(){
+        const pam = this.searched ? {
+          currentPage: this.currentPage,
+          filter: this.filter
+        } : {currentPage: this.currentPage};
+        this.$router.push({name: 'AutoTestTask', params: pam});
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        this.searched = true;
+        api.getTaskDetailList(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getFilterItems() {
+        const param = Object.assign({
+          current: this.currentPage,
+          size: this.pageSize,
+          missionId:this.$route.params.id,
+        },this.filter);
+        return param;
+      },
+      indexMethod(index) {
+        return ((this.currentPage - 1) * this.pageSize) + index + 1;
+      },
+      currentChange(next) {
+        this.currentPage = next;
+        this.getDataList();
+      },
+      warning(msg,type){
+        this.$message({
+          showClose: true,
+          message:msg,
+          type:type||'warning'
+        })
+      },
+      showConfirmDialog(msg,resolve){
+        this.$alert(msg, '提示', {
+          confirmButtonText: '确定',
+          type: 'warning'
+        }).then(() => {
+          resolve();
+        }).catch(() => {});
+      },
+      showDelDialog(id){
+        this.showConfirmDialog('是否删除该缺陷?',()=>{
+          api.delTaskDetail({id:id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      }
+    }
+  }
+</script>
+<style>
+   .el-loading-spinner{
+        top:200px;
+    }
+    .autotest-dialog .el-dialog__body{
+        padding: 30px 20px;
+    }
+   .autotest-dialog .el-form-item__content{
+       display: inline-block;
+       width: 272px;
+    }
+    .autotest-dialog .el-dialog{
+        width: 400px!important;
+    }
+</style>
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+        color: red !important;
+    }
+    div.container{
+        height: 90px!important;
+    }
+    .contents{
+        padding:120px 20px 0;
+    }
+</style>

+ 0 - 352
src/components/qualityControl/TransformTask.vue

@@ -1,352 +0,0 @@
-<template>
-    <div>
-        <crumbs title="转化为任务" linkTo="AutoTestStat">
-            <el-form :inline="true" class="demo-form-inline">
-                <el-form-item label="所属医院:">
-                    <el-select size="mini" v-model.trim="filter.hospitalId" @change="getValue"  placeholder="所属医院" clearable>
-                        <el-option v-for="item in hospitalList" :label="item.name" :value="item.val" :key="item.id" ></el-option>
-                    </el-select>
-                </el-form-item>
-                 <el-form-item label="所属模块:">
-                     <el-select size="mini" v-model.trim="filter.casesId"  placeholder="所属模块" clearable>
-                        <el-option v-for="item in moduleList" :label="item.name" :value="item.val" :key="item.id" ></el-option>
-                    </el-select>
-                </el-form-item>
-                 <el-form-item label="缺陷名称:">
-                    <el-input size="mini" v-model.trim="filter.entryName" placeholder="缺陷名称" clearable></el-input>
-                </el-form-item>
-               
-                <el-form-item label="条目编码:">
-                    <el-input size="mini" v-model.trim="filter.code" placeholder="条目编码" clearable></el-input>
-                </el-form-item>
-                <el-form-item>
-                    <el-button size="mini" @click="filterDatas">确认</el-button>
-                    <el-button size="mini" type="warning" @click="addTemp">转化为任务</el-button>
-                    <el-button size="mini" type="warning" @click="addTemp">自动化测试</el-button>
-                </el-form-item>
-            </el-form>
-        </crumbs>
-        <div class="contents">
-            <el-table   
-                    :data="list"
-                    border
-                    style="width: 100%">
-                <el-table-column
-                    type="index"
-                    :index="indexMethod"
-                    label="编号"
-                    width="60">
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        label="任务名称"
-                        prop="hospitalId"
-                        :formatter="hisFormatter"
-                        >
-                </el-table-column>
-                <el-table-column
-                        :resizable = "false"
-                        prop="operate"
-                        label="操作">
-                    <template slot-scope="scope">
-                        <el-button  @click="modifyIndeptTag(scope.row, 'modify')" type="text" size="small">详情</el-button>
-                        <!-- <span style="margin:0 3px;">|</span>
-                        <el-button @click="modifyIndeptTag(scope.row, 'copy')" class="text" type="text" size="small">复制</el-button> -->
-                        <span style="margin:0 3px;">|</span>
-                        <el-button @click="showDelDialog(scope.row)" class="delete" type="text" size="small">删除</el-button>
-                    </template>
-                </el-table-column>
-            </el-table>
-          <el-pagination  :current-page.sync="currentPage"
-                          @current-change="currentChange"
-                          background
-                          :page-size.sync="pageSize"
-                          :page-sizes="pageSizeArr"
-                           @size-change="handleSizeChange"
-                          :layout="pageLayout"
-                          :total="total">
-            </el-pagination>
-        </div>
-    </div>
-</template>
-
-<script>
-    import api from '@api/qualityControl.js';
-  import config from '@api/config.js';
-  import utils from '@api/utils.js'
-  export default {
-    name: 'TransformTask',
-    data: function() {
-      return {
-        list: [],
-        hospitalList: [],
-        moduleList:[],
-        qcTypeNameList:[],
-        searched: false,
-        filter: {
-          typeName:"",//质控类型名称
-          hospitalId: "", //所属医院
-          entryName:"", //条目名称
-          casesId:null,//所属模块
-          code:"",//条目编码
-        },
-        currentPage: 1,
-        pageSize: config.pageSize,
-        pageSizeArr:config.pageSizeArr,
-        pageLayout:config.pageLayout,
-        total: 0,
-      }
-    },
-    created() {
-      const _this=this;
-      this.getTypeNameList()
-      setTimeout(function(){
-        _this.getAllTypes().then(()=>{
-          _this.getDataList()
-        })
-      },100);
-
-    },
-    watch: {
-      'filter': {
-        handler: function () {
-          this.searched = false;
-        },
-        deep: true
-      }
-    },
-    beforeRouteEnter(to, from, next) {
-      next(vm => {
-        //const pm = to.param;
-        Object.assign(vm, to.params);
-        vm.inCurrentPage=to.params.currentPage;
-      })
-    },
-    methods: {
-      moduleFormatter(row, column, cellValue){
-        const it = this.moduleList.find(item => item.id == cellValue);
-        return it?it.name:'';
-      },
-      hisFormatter(row, column, cellValue){
-        const it = this.hospitalList.find(item => item.val == cellValue);
-        return it?it.name:'';
-      },
-      getAllTypes(){
-          if(localStorage.getItem("qcModuleTypes")){
-              this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-              this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
-              return new Promise(function(resolve, reject){
-                  resolve()
-              });
-          }
-          //获取枚举信息
-          return api.getQcTypes().then((res)=>{
-              if(res.data.code==="0"){
-                  const data = res.data.data;
-                  localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
-                  localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-                  localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
-                  this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-                  this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
-              }else{
-                  this.warning("获取枚举信息失败");
-              }
-          });
-      },
-      getTypeNameList(hospitalId){
-        api.getQcEntryTypeByHospital({hospitalId:hospitalId}).then((res) => {
-          if(res.data.code == 0){
-            // let list = res.data.data.records
-              this.qcTypeNameList = res.data.data
-          }
-          
-        })
-      },
-      handleSizeChange(val){
-        this.pageSize = val;
-        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
-        this.getDataList();
-      },
-      getValue(val) {
-        console.log('changeVal', )
-        THIS.filter.typeName = ""
-      },
-      getDataList(isTurnPage) {
-        const param = this.getFilterItems(isTurnPage);
-        this.searched = true;
-        const loading = this.$loading({
-            lock: true,
-            text: 'Loading',
-            spinner: 'el-icon-loading',
-            background: 'rgba(0, 0, 0, 0.7)'
-        });
-        api.getQcEntryTypeList(param).then((res) => {
-          loading.close()
-          if(res.data.code == 0){
-            let list = res.data.data.records
-          /*for(let i = 0; i < list.length; i++){
-            list[i].hospitalId = this.hospitalList.find(item => item.val == list[i].hospitalId).name
-            list[i].modeId  = this.moduleList.find(item => item.val == list[i].modeId).name
-          }*/
-          this.list = list;
-          this.total = res.data.data.total;
-          if(this.inCurrentPage!==undefined){
-            this.currentPage=this.inCurrentPage;
-            this.inCurrentPage = undefined;
-          }
-          }
-          
-        })
-      },
-      filterDatas() {
-        this.currentPage = 1;
-        this.getDataList();
-      },
-      addTemp() {
-        const pam = this.searched ? {
-          currentPage: this.currentPage,
-          pageSize:this.pageSize,
-          filter: this.filter
-        } : {currentPage: this.currentPage,pageSize:this.pageSize};
-        this.$router.push({
-          name: 'ItemDataTypeRelation',
-          params: pam
-        })
-      },
-      modifyIndeptTag(row, type) {
-        api.getQcEntryTypeDetail({ "entryId": row.entryId,"hospitalId": row.hospitalId}).then((res)=>{
-          const {code,data,msg} = res.data;
-          const hospitalItem = this.hospitalList.find(item => item.val == row.hospitalId);
-         const hospitalName = hospitalItem ? hospitalItem.name:''
-          if(code=='0'){
-            const item = Object.assign({},{hospitalName:hospitalName},data);
-            const pam = this.searched ? {
-              currentPage: this.currentPage,
-              filter: this.filter
-            } : {currentPage: this.currentPage};
-            if(type == 'modify') {
-              this.$router.push({name: 'ItemDataTypeRelation', params: Object.assign(pam, {isEdit: true, data: item})});
-            } else if( type == 'copy') {
-              this.$router.push({name: 'ItemDataTypeRelation', params: Object.assign(pam, {isCopy: true, data: item})});
-            } else {
-                return
-            }
-          }else{
-            this.$message({
-              message: msg,
-              type: 'warning'
-            });
-          }
-        });
-        //this.$router.push({name:'AddIndeptLabel',params:{isEdit:true,data:row}});
-      },
-      currentChange(next) {
-        this.currentPage = next;
-        this.getDataList(true);
-        // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
-        //     this.list = this.cacheData[next];
-        // } else {
-        //     this.getDataList();
-        // }
-      },
-      clearFilter(){
-        this.filter={
-          hospitalId: "",
-          typeName:"",
-          entryName:"",
-          casesId:null,
-          code:""
-        };
-      },
-      getFilterItems(isTurnPage) {
-        //翻页时筛选条件没点确定则清空
-        if(isTurnPage&&!this.searched){
-          this.clearFilter();
-        };
-        const {hospitalId,typeName,entryName,casesId,code} = this.filter
-        const param = {
-          current: this.inCurrentPage||this.currentPage,
-          size: this.pageSize,
-          hospitalId: hospitalId,
-          typeName:typeName,
-          entryName:entryName,
-          casesId:casesId,
-          code:code
-        };
-        return param;
-      },
-      indexMethod(index) {
-        return ((this.currentPage - 1) * this.pageSize) + index + 1;
-      },
-      getTagType(val) {
-        return val
-      },
-      warning(msg,type){
-        this.$message({
-          showClose: true,
-          dangerouslyUseHTMLString: true,
-          message:'<p>'+msg+'</p>',
-          type:type||'warning'
-        })
-      },
-      showConfirmDialog(msg,resolve){
-        this.$alert(msg, '提示', {
-          confirmButtonText: '确定',
-          type: 'warning'
-        }).then(() => {
-          resolve();
-        }).catch(() => {});
-      },
-      showDelDialog(row){
-        const param = {
-          "ids": row.id,
-        }
-        this.showConfirmDialog('是否删除该条任务?',()=>{
-          return
-          api.delQCTemp(param).then((res)=>{
-            if(res.data.code=='0'){
-              if(!this.searched){
-                //未点确认时清空搜索条件
-                this.clearFilter();
-              }
-              if(this.list.length==1){
-                //当前在最后一页且只有一条数据时,删除后跳到前一页
-                this.currentPage = this.currentPage===1?1:this.currentPage-1;
-              }
-              this.getDataList();
-              this.warning(res.data.msg || '操作成功','success');
-            }else{
-              this.warning(res.data.msg);
-            }
-          }).catch((error)=>{
-            this.warning(error);
-          })
-        });
-      }
-    }
-  }
-</script>
-
-
-<style lang="less">
-  @import "../../less/admin.less";
-    .delete{
-        color: red
-    }
-    .delete:hover {
-        color: red;
-    }
-    .el-select .el-input .el-icon-arrow-up{
-        display: inline-block!important;
-    }
-    .el-select .el-input .el-icon-circle-close{
-        float:left;
-    }
-  .el-pagination__sizes{
-      margin-right: 20px;
-    .el-input .el-input__inner{
-        height: 28px;
-        line-height: 28px;
-    }
-  }
-</style>

+ 6 - 6
src/routes.js

@@ -134,10 +134,10 @@ import AddQcType from '@components/qualityControl/AddQcType.vue';
 import StandardRecord from '@components/qualityControl/StandardRecord.vue';
 import AddStandardRecord from '@components/qualityControl/AddStandardRecord.vue';
 import ItemDataType from '@components/qualityControl/ItemDataType.vue';
+import AutoTestList from '@components/qualityControl/AutoTestList.vue';
+import AutoTestTask from '@components/qualityControl/AutoTestTask.vue';
+import TaskDetail from '@components/qualityControl/TaskDetail';
 import ItemDataTypeRelation from '@components/qualityControl/ItemDataTypeRelation.vue';
-import AutoTestStat from '@components/qualityControl/AutoTestStat.vue'; //自动化测试
-import TransformTask from '@components/qualityControl/TransformTask.vue'; //转化为任务
-import AutoTestStatDetail from '@components/qualityControl/AutoTestStatDetail.vue'; //自动化测试详情
 
 
 
@@ -346,11 +346,11 @@ export default [
       {path: 'LT-BLZK-PLGLBLTM',name:'ManageItemBatch', component: ManageItemBatch},//病例条目
       {path:'LT-ZKYMSJWH-ZKLXWH',name:'QCTypeMang',component: QCTypeMang},  //质控类型
       {path:'LT-ZKYMSJWH-TJZKLXWH',name:'AddQcType',component: AddQcType},  //添加质控类型
+      {path:'LT-ZKYMSJWH-ZDHCSTJ',name:'AutoTestList',component:AutoTestList},//自动化测试统计
+      {path:'LT-ZKYMSJWH-RWLB',name:'AutoTestTask',component:AutoTestTask},//自动化测试统计-转为任务
+      {path:'LT-ZKYMSJWH-ZDHCSXQ',name:'TaskDetail',component:TaskDetail},//自动化测试统计-转为任务-详情
       {path:'LT-ZKYMSJWH-BZBL',name:'StandardRecord',component: StandardRecord},  //标准病历
       {path:'LT-ZKYMSJWH-TJBZBL',name:'AddStandardRecord',component: AddStandardRecord},  //添加标准病历
-      {path:'LT-ZKYMSJWH-ZDHCSTJ',name:'AutoTestStat',component: AutoTestStat},  //自动化测试
-      {path:'LT-ZKYMSJWH-ZDHCSTJRW',name:'TransformTask',component: TransformTask},  //自动化测试
-      {path:'LT-ZKYMSJWH-ZDHCSTJXQ',name:'AutoTestStatDetail',component: AutoTestStatDetail},  //自动化测试
 
     ]
   }