瀏覽代碼

模板添加初始化

zhangxc 5 年之前
父節點
當前提交
a14bb12786

+ 251 - 0
src/components/qualityControl/AddQualityControlTemp.vue

@@ -0,0 +1,251 @@
+<template>
+    <div>
+       <crumbs :title="title" linkTo="QualityControlTemp">
+        </crumbs>
+        <div class="contentWrapper">
+            <div class="content">
+                <el-form :model="form" ref="ruleForm" class="selectHospital">
+                    <el-form-item label="模板名称:" prop="name" class="formItem">
+                        <el-input v-model="form.tempName"  placeholder="请输入模板名称"></el-input>
+                    </el-form-item>
+                    <el-form-item label="所属医院:" prop="hospitalName" class="formItem">
+                        <el-select  v-model="form.hospital" placeholder="请选择医院"  class="selectHospital">
+                            <el-option v-for="item in hospitalList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="选择模块:" prop="module" class="formItem">
+                        <el-select  v-model="form.module" placeholder="请选择模块"  class="selectModule">
+                            <el-option v-for="item in moduleList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
+                     <el-form-item label="添加模块内容:" prop="moduleInfo" class="formItem">
+                        <div class="moduleInfoItem" v-for="(item,index) in moduleInfoList">
+                            <div class="searchBox">
+                                <el-input v-model="item.searchName"  placeholder="搜索字段单元" @input="searchFiled(index)">
+
+                                </el-input>
+                                <ul v-if="searchIndex == index &&  item.searchResult.length > 0" class="searchResultBox">
+                                    <li class="searchItem" 
+                                        v-for="searchItem in item.searchResult" 
+                                        :title="searchItem.name"
+                                        @click="selectSearchFiled(searchItem,index)"
+                                    >
+                                        {{searchItem.name}}
+                                    </li>
+                                </ul>
+                            </div>
+                            <div>
+                                <p>已选择字段:</p>
+                                <div class="selectFiled" v-for="(it,ii) in item.selectFiled">
+                                    <span>{{it.name}}</span>
+                                    <span @click="upFiled(ii,index)">上升</span>
+                                    <span @click="downFiled(ii,index)">下降</span> 
+                                    <span @click="delSelected(ii,index)">删除</span>
+                                </div>
+                            </div>
+                        </div>
+                        <span class="addUnit" @click="addUnit">+单元组</span>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </div>
+        
+    </div>
+</template>
+<script>
+export default {
+    name:"AddQualityControlTemp",
+    data: function(){
+        return {
+            title: "模板维护-添加",
+            form:{
+                tempName: "",
+                hospital:"",
+                module:"",
+            },
+            searchIndex: -1,
+            hospitalList:[  
+                    {
+                        id: 1,
+                        name:"台州"
+                    },
+                    {
+                        id: 2,
+                        name:"长兴"
+                    }
+                ],
+                moduleList:[
+                    {
+                        id: 1,
+                        name:"入院记录"
+                    },
+                    {
+                        id: 2,
+                        name:"出院小结"
+                    }
+                ],
+                moduleInfoList:[
+                    {   
+                        searchName:"",
+                        searchResult:[
+                            {
+                                name: "4姓名"
+                            },
+                            {
+                                name: "5职业"
+                            },
+                            {
+                                name: "6年龄"
+                            }
+                        ],
+                        selectFiled:[
+                            {
+                                name: "姓名"
+                            },
+                            {
+                                name: "职业"
+                            },
+                            {
+                                name: "年龄"
+                            }
+                        ]
+                    }
+                ]
+        }
+    },
+    methods:{
+        addUnit(){
+            this.moduleInfoList.push({   
+                        searchName:"",
+                        searchResult:[
+                            {
+                                name: "4姓名"
+                            },
+                            {
+                                name: "5职业"
+                            },
+                            {
+                                name: "6年龄"
+                            }
+                        ],
+                        selectFiled:[
+                            {
+                                name: "姓名1"
+                            },
+                            {
+                                name: "职业1"
+                            },
+                            {
+                                name: "年龄1"
+                            }
+                        ]
+                    })
+        },
+        searchFiled(index){
+            console.log(index)
+            this.searchIndex = index
+        },
+        selectSearchFiled(searchItem,index){
+            this.moduleInfoList[index].selectFiled.push(searchItem)
+            this.searchIndex = -1
+            console.log(searchItem)
+        },
+        upFiled(ii,index){
+            if(ii == 0){
+                return
+            }
+            const current = this.moduleInfoList[index].selectFiled[ii]
+            const currentPre = this.moduleInfoList[index].selectFiled[ii-1]
+            this.moduleInfoList[index].selectFiled.splice(ii-1,2,current,currentPre)
+        },
+        downFiled(ii,index){
+            if(ii == this.moduleInfoList[index].selectFiled.length -1){
+                return
+            }
+            const current = this.moduleInfoList[index].selectFiled[ii]
+            const currentNext = this.moduleInfoList[index].selectFiled[ii+1]
+            this.moduleInfoList[index].selectFiled.splice(ii,2,currentNext,current)
+
+        },
+        delSelected(ii,index){
+             console.log(this.moduleList)
+            this.moduleInfoList[index].selectFiled.splice(ii,1)
+           
+        },
+        warning(msg, type,time) {
+            this.$message({
+                showClose: true,
+                message: msg,
+                type: type || 'warning',
+                duration:time || '3000'
+            })
+        },
+    }
+
+}
+</script>
+<style lang="less" scoped>
+.contentWrapper{
+     padding: 50px 20px 0;
+}
+.content{
+    background: #fff;
+}
+.formItem{
+    /deep/.el-form-item__label{
+        width: 150px;
+    }
+}
+/deep/.el-form-item__content{
+    display: inline-block;
+}
+/deep/.el-input__inner {
+    height: 30px;
+    line-height: 30px;
+    width: 200px;
+}
+.moduleInfoItem{
+    width: 500px;
+    min-height: 200px;
+    padding: 0 50px 0 50px;
+    border: 1px solid rgb(220, 223, 230);
+    border-radius: 5px;
+    margin-bottom: 20px;
+}
+.addUnit{
+    display: inline-block;
+    border: 1px solid rgb(220, 223, 230);
+    border-radius: 5px;
+    width: 80px;
+    text-align: center;
+    height: 20px;
+    line-height: 20px;
+    cursor: pointer;
+}
+.addUnit:hover{
+    background: blue;
+    color: #fff;
+}
+.searchBox{
+    width: 200px;
+    position: relative;
+}
+.searchResultBox{
+    position: absolute;
+    width: 100%;
+    padding: 0 20px;
+    background: #fff;
+}
+.searchItem{
+    height: 40px;
+    line-height: 40px;
+    cursor: pointer;
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}
+.searchItem:hover{
+    background-color: #abcdef;
+}
+
+</style>

+ 345 - 0
src/components/qualityControl/QualityControlTemp.vue

@@ -0,0 +1,345 @@
+<template>
+    <div>
+        <crumbs title="模板维护">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="标签类型:">
+                    <el-select size="mini" v-model="filter.controlType[0]" placeholder="标签类型" clearable>
+                        <el-option v-for="item in tagTypes" :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="filter.tagAdscription" @change="getValue"  placeholder="标签归属" clearable>
+                        <el-option v-if="item.val!=6&&item.val!=7&&item.val!=8&&item.val!=9&&item.val!=10&&item.val!=21&&item.val!=22" v-for="item in Adscriptions" :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="filter.tagSysName" 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-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table
+                    :data="list"
+                    border
+                    style="width: 100%">
+                <el-table-column
+                        :resizable = "false"
+                        type="index"
+                        :index = 'indexMethod'
+                        label="编号"
+                        width="60">
+                </el-table-column>
+                <el-table-column
+                        :resizable = "false"
+                        prop="gmtModified"
+                        label="操作时间"
+                        width="180">
+                </el-table-column>
+                <el-table-column
+                        :resizable = "false"
+                        prop="typeCn"
+                        label="标签归属">
+                </el-table-column>
+                <el-table-column
+                        :resizable = "false"
+                        prop="tagTypeCn"
+                        label="标签类型">
+                </el-table-column>
+                <el-table-column
+                        :resizable = "false"
+                        prop="tagName"
+                        label="标签系统名称">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    label="是否存在于标准术语中">
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.itemType == 0 && scope.row.type != 5">
+                            {{scope.row.exist ? "系统名称已存在" : "系统名称未存在"}}
+                        </span>
+                         <span v-if="scope.row.type == 5">
+                            {{scope.row.exist ? "界面名称已存在" : "界面名称未存在"}}
+                        </span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        :resizable = "false"
+                        prop="modifier"
+                        label="操作人">
+                </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/icss.js';
+  import config from '@api/config.js';
+  export default {
+    name: 'QualityControlTemp',
+    data: function() {
+      return {
+        list: [],
+        tagTypes: [],
+        Adscriptions: [],
+        tagTypesList:[],
+        searched: false,
+        filter: {
+          tagType: [], //标签类型
+          controlType: [],
+          tagAdscription: '', //标签归属
+          tagSysName: '', //标签系统名称
+        },
+        currentPage: 1,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
+        total: 0,
+      }
+    },
+    created() {
+      this.getDropList().then(() => {
+        this.getDataList()
+      })
+
+    },
+    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: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
+      getValue(val) {
+        console.log('changeVal', val, this.filter.tagAdscription)
+      },
+      getDropList() {
+        return api.getDropList().then((res) =>{
+          if(res.data.code === '0') {
+            this.Adscriptions = res.data.data[1];
+            this.tagTypes =  res.data.data[6];
+            this.tagTypes =  this.tagTypes.filter(item => item.val != 0)  //去掉名称为默认值的填写单类型
+      
+          }
+
+        })
+      },
+      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.getTagList(param).then((res) => {
+          loading.close()
+          const list = [...res.data.data.records];
+          for (var i = 0; i < list.length; i++) {
+            for (var j =  0; j < this.tagTypes.length; j++) {
+              if(list[i].controlType == this.tagTypes[j].val) {
+                list[i].tagTypeCn = this.tagTypes[j].name;
+              }
+            }
+            //后台数据typeCn转换为筛选中对应的字段名称
+            for (var z =  0; z < this.Adscriptions.length; z++) {
+              if(list[i].type == this.Adscriptions[z].val) {
+                list[i].typeCn = this.Adscriptions[z].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: 'AddQualityControlTemp',
+          params: pam
+        })
+      },
+      modifyIndeptTag(row, type) {
+        api.detailsTag({id:row.id}).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: 'AddIndeptLabel', params: Object.assign(pam, {isEdit: true, data: item})});
+            } else if( type == 'copy') {
+              this.$router.push({name: 'AddIndeptLabel', 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={
+          tagType: [], //标签类型
+          controlType: [],
+          tagAdscription: '', //标签归属
+          tagSysName: '', //标签系统名称
+        };
+      },
+      getFilterItems(isTurnPage) {
+        //翻页时筛选条件没点确定则清空
+        if(isTurnPage&&!this.searched){
+          this.clearFilter();
+        };
+        const param = {
+          tagTypeList: [1],
+          current: this.inCurrentPage||this.currentPage,
+          size: this.pageSize,
+          type: this.filter.tagAdscription,
+          tagName: this.filter.tagSysName.trim(),
+          controlTypeList: this.filter.controlType[0] ? this.filter.controlType: []
+        };
+        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,
+          "type": row.type
+        }
+        this.showConfirmDialog('是否删除该标签?',()=>{
+          api.deleteTagGroup(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>

+ 5 - 1
src/routes.js

@@ -122,7 +122,9 @@ import AddRecord from '@components/recordManager/addRecord.vue';
 import ShowRecord from '@components/recordManager/showRecord.vue';
 
 //质控页面数据维护
-import FieldMatch from '@components/recordManager/FieldMatch.vue';
+import FieldMatch from '@components/qualityControl/FieldMatch.vue';
+import QualityControlTemp from '@components/qualityControl/QualityControlTemp.vue';
+import AddQualityControlTemp from '@components/qualityControl/AddQualityControlTemp.vue';
 
 export default [
   {
@@ -304,6 +306,8 @@ export default [
       {path: 'LT-BLGL-TJBLGL',name:'AddRecord', component: AddRecord},//添加病历
       {path: 'LT-BLGL-CKBLGL',name:'ShowRecord', component: ShowRecord},//添加病历
       {path:'LT-ZKYMSJWH-ZDYSWH',name:'FieldMatch',component: FieldMatch},  //字段映射
+      {path:'LT-ZKYMSJWH-MBWH',name:'QualityControlTemp',component: QualityControlTemp},  //模板维护
+      {path:'LT-ZKYMSJWH-TJMBWH',name:'AddQualityControlTemp',component: AddQualityControlTemp},  //添加模板维护
     ]
   }
 ]