Переглянути джерело

Merge branch 'knowledgeExtra_0521' into test

wyq 4 роки тому
батько
коміт
f6d531b3f5

+ 5 - 0
package-lock.json

@@ -10761,6 +10761,11 @@
         }
       }
     },
+    "vue-fragment": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npm.taobao.org/vue-fragment/download/vue-fragment-1.5.2.tgz",
+      "integrity": "sha1-MQAXFwxWTEqtldoUwYXJLGeE/Tw="
+    },
     "vue-hot-reload-api": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz",

+ 1 - 0
package.json

@@ -11,6 +11,7 @@
     "js-md5": "^0.7.3",
     "quill-image-extend-module": "^1.1.2",
     "vue": "^2.5.17",
+    "vue-fragment": "^1.5.2",
     "vue-quill-editor": "^3.0.6"
   },
   "eslintConfig": {

+ 6 - 0
src/api/config.js

@@ -585,6 +585,12 @@ export default {
     'ruleExportExcel':'/api/cdssman/test/rule/ruleExportExcel',
     'autoRuleTest':'/api/cdssman/test/rule/ruleTest',
     'clearDrug':'/api/cdssman/cache/clearDrug',
+    //药品维护
+    'getPageList': '/api/cdssman/klDrugRegister/getPage',
+    'getsearchDrug': '/api/cdssman/klDrugRegister/searchDrug',
+    'saveOrUpdate': '/api/cdssman/klDrugRegister/saveOrUpdate',
+    'getByParam': '/api/cdssman/klDrugRegister/getByParam',
+    'paramDelete': '/api/cdssman/klDrugRegister/delete',
   },
   menuIconList: { //菜单对应图标
     'YH-KZT': 'el-icon-menu',

+ 16 - 0
src/api/icss.js

@@ -421,4 +421,20 @@ export default {
     getDeptList(param) {    //医学术语命名维护-添加-获取科室
         return axios.post(urls.getDeptList,param)
     },
+
+    getPageList(param) {    //注册药品列表
+        return axios.post(urls.getPageList, param)
+    },
+    getsearchDrug(param) {    //药品关联通用名
+        return axios.post(urls.getsearchDrug, param)
+    },
+    saveOrUpdate(param) {    //药品保存
+        return axios.post(urls.saveOrUpdate, param)
+    },
+    getByParam(param) {    //药品详情
+        return axios.post(urls.getByParam, param)
+    },
+    paramDelete(param) {    //药品删除
+        return axios.post(urls.paramDelete, param)
+    },
 }

Різницю між файлами не показано, бо вона завелика
+ 810 - 263
src/components/basicKnow/AddTerm.vue


+ 46 - 50
src/components/basicKnow/BasicTermsMaintenance.vue

@@ -18,16 +18,16 @@
         <el-form-item label="同义词:">
           <el-input size="mini" v-model="filter.libName" placeholder="输入同义词"></el-input>
         </el-form-item>
-                <el-form-item label="状态:">
-                    <el-select v-model="filter.isState" clearable placeholder="请选择" size="mini">
-                        <el-option
-                                v-for="item in stateSelect"
-                                :key="item.id"
-                                :label="item.name"
-                                :value="item.id">
-                        </el-option>
-                    </el-select>
-                </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.isState" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in stateSelect"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item>
           <el-button size="mini" @click="filterDatas">确认</el-button>
         </el-form-item>
@@ -35,10 +35,7 @@
       <el-form class="secLine">
         <el-form-item>
           <el-button size="mini" type="warning" @click="addMedicalName" style="margin:0 10px">+ 新增术语</el-button>
-          <el-button
-            size="mini"
-            @click="reloadLib"
-          >更新数据</el-button>
+          <el-button size="mini" @click="reloadLib">更新数据</el-button>
         </el-form-item>
       </el-form>
     </crumbs>
@@ -57,17 +54,9 @@
         <el-table-column prop="gmtModified" label="操作时间" :show-overflow-tooltip="true"></el-table-column>
         <el-table-column label="操作" width="160">
           <template slot-scope="scope">
-            <el-button
-              type="text"
-              size="small"
-              @click="toEditProduct(scope.row)"
-            >修改</el-button>
+            <el-button type="text" size="small" @click="toEditProduct(scope.row)">修改</el-button>
             <span style="margin:0 3px;">|</span>
-            <el-button
-              type="text"
-              size="small"
-              @click="toEditProduct(scope.row,true)"
-            >复制</el-button>
+            <el-button type="text" size="small" @click="toEditProduct(scope.row,true)">复制</el-button>
             <span style="margin:0 3px;">|</span>
             <el-button
               type="text"
@@ -102,9 +91,9 @@ export default {
   data: function() {
     return {
       list: [],
-      stateSelect:[
-          {id:'N',name:'启用'},
-          {id:'Y',name:'禁用'},
+      stateSelect: [
+        { id: 'N', name: '启用' },
+        { id: 'Y', name: '禁用' }
       ],
       // isState:'',
       cacheData: {}, //因为删除和恢复要及时更新,所以不做缓存
@@ -117,7 +106,7 @@ export default {
       filter: {
         term: '',
         type: '',
-        libName: '',
+        libName: ''
       },
       typeList: [],
       reloadFlag: true
@@ -125,18 +114,18 @@ export default {
   },
   created() {
     const param = this.$route.params;
-    if(param.currentPage){
-      this.inCurrentPage = param.currentPage
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
     }
-    if(param.filter){
-      this.filter = param.filter
+    if (param.filter) {
+      this.filter = param.filter;
     }
-    
+
     this.getTypeList();
     //返回时避免参数未赋值就获取列表
-    this.$nextTick(()=>{
+    this.$nextTick(() => {
       this.getDataList();
-    })
+    });
   },
   watch: {
     filter: {
@@ -176,9 +165,9 @@ export default {
           this.getDataList();
           if (res.data.code == 0) {
             this.reloadFlag = true;
-              this.warning('更新成功','success');
-          }else{
-              this.warning(res.data.msg||'更新失败,请重试');
+            this.warning('更新成功', 'success');
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
           }
         });
       }
@@ -204,7 +193,7 @@ export default {
       this.$router.push({
         name: 'AddTerm',
         // params: {info:row}
-        params: Object.assign(pam, { id: row.conceptId, copy: copy })
+        params: Object.assign(pam, { id: row.conceptId,libType:row.libType, copy: copy })
       });
     },
     filterDatas() {
@@ -220,14 +209,15 @@ export default {
         spinner: 'el-icon-loading',
         background: 'rgba(0, 0, 0, 0.7)'
       });
-      api.getBaseConceptInfoPage(param)
+      api
+        .getBaseConceptInfoPage(param)
         .then(res => {
           loading.close();
           if (res.data.code == '0') {
             const data = res.data.data;
             const templis = data.records;
-            for(let i = 0;i < templis.length;i++){
-              templis[i].isDeleted = templis[i].status=='1'?'N':'Y'
+            for (let i = 0; i < templis.length; i++) {
+              templis[i].isDeleted = templis[i].status == '1' ? 'N' : 'Y';
             }
             this.list = templis;
             // this.cacheData[param.current] = data.records;
@@ -244,11 +234,11 @@ export default {
     },
     getTypeList() {
       api
-        .baseTypeGetPage({ name: '',size: 1000 })
+        .baseTypeGetPage({ name: '', size: 1000 })
         .then(res => {
           const data = res.data;
           if (data.code == 0) {
-            this.typeList = data.data.records||[];
+            this.typeList = data.data.records || [];
           } else {
             console.log(res.msg);
           }
@@ -266,10 +256,15 @@ export default {
         this.clearFilter();
       }
       const param = {
-        "libName": this.filter.term.trim(),
-        "libType": this.filter.type,
-        "status": this.filter.isState=='N'?'1':this.filter.isState=='Y'?'0':'',
-        "synonymName": this.filter.libName.trim(),
+        libName: this.filter.term.trim(),
+        libType: this.filter.type,
+        status:
+          this.filter.isState == 'N'
+            ? '1'
+            : this.filter.isState == 'Y'
+            ? '0'
+            : '',
+        synonymName: this.filter.libName.trim(),
         current: this.inCurrentPage || this.currentPage,
         size: this.pageSize,
         isDeleted: this.filter.isState
@@ -313,7 +308,7 @@ export default {
       const param = {
         conceptId: item.conceptId
       };
-      let url = item.isDeleted === 'N'?'disableConcept':'startConcept'
+      let url = item.isDeleted === 'N' ? 'disableConcept' : 'startConcept';
       let waringTxt =
         item.isDeleted === 'N'
           ? '是否禁用该标准术语?'
@@ -332,7 +327,8 @@ export default {
               } else {
                 if (this.filter.isState !== '' && this.list.length === 1) {
                   //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
-                  this.currentPage = this.currentPage === 1 ? 1 : this.currentPage - 1;
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
                 }
               }
               this.warning(res.data.msg || '操作成功', 'success');

+ 137 - 0
src/components/basicKnow/DivEditable.vue

@@ -0,0 +1,137 @@
+<template>
+  <div>
+    <span class="address-placeholder" v-show="onshow">请输入</span>
+    <div
+      class="test_box"
+      contenteditable="true"
+      v-html="innerText"
+      :ref="Maincontent"
+      @input="handleInput"
+      @compositionstart="handleStart"
+      @compositionend="handleEnd"
+      @focus="isChange = false"
+    ></div>
+  </div>
+</template>
+
+<script>
+// import { Fragment } from 'vue-fragment'
+export default {
+  name: 'DivEditable',
+  props: ['value', 'Maincontent'],
+  data() {
+    return {
+      innerText: this.value,
+      isChange: true,
+      composing: false,
+      onshow: true
+    };
+  },
+  // components: { Fragment },
+  watch: {
+    value() {
+      if (this.isChange) {
+        this.innerText = this.value;
+      }
+    }
+  },
+  mounted() {
+    let len = this.validateTextLength(this.value);
+    this.onshow = len > 0 ? false : true;
+  },
+  methods: {
+    handleInput(event) {
+      let text = event.target.innerText;
+      this.valueHandle(event, text);
+      this.$emit('input', text);
+    },
+    //长度计算
+    validateTextLength(value) {
+      // 中文、中文标点、全角字符按1长度,英文、英文符号、数字按1长度计算
+      let cnReg = /([\u4e00-\u9fa5]|[\u3000-\u303F]|[\uFF00-\uFF60])/g;
+      let mat = value.match(cnReg);
+      let length;
+      if (mat) {
+        length = mat.length + (value.length - mat.length);
+        return length;
+      } else {
+        return value.length;
+      }
+    },
+    valueHandle(event, strVale) {
+      let _this = this;
+      let text = strVale;
+      if (this.composing) {
+        return;
+      }
+      let len = this.validateTextLength(text);
+      this.onshow = len > 0 ? false : true;
+      if (len > 200) {
+        this.$refs[this.Maincontent].innerHTML = text.substr(0, 200);
+        this.$refs[this.Maincontent].focus();
+      }
+      setTimeout(() => {
+        _this.keepLastIndex(event.target);
+      }, 5);
+      // 拓展 如果想要只需要前100位数据
+      // this.content = this.content.substring(0, 100)
+    },
+    handleStart() {
+      this.composing = true;
+    },
+    /**
+     * 中文输入结束
+     */
+    handleEnd($event) {
+      this.composing = false;
+      let text = $event.target.innerHTML;
+      // console.log($event.target.innerHTML)
+      this.valueHandle($event, text);
+    },
+    keepLastIndex(obj) {
+      if (window.getSelection) {
+        // ie11 10 9 ff safari
+        obj.focus(); // 解决ff不获取焦点无法定位问题
+        let range = window.getSelection(); // 创建range
+        range.selectAllChildren(obj); // range 选择obj下所有子内容
+        range.collapseToEnd(); // 光标移至最后
+      } else if (document.selection) {
+        // ie10 9 8 7 6 5
+        let range = document.selection.createRange(); // 创建选择对象
+        // var range = document.body.createTextRange();
+        range.moveToElementText(obj); // range定位到obj
+        range.collapse(false); // 光标移至最后
+        range.select();
+      }
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+.address-placeholder {
+  line-height: 42px;
+  height: 42px;
+  color: #a2a2a2;
+  position: absolute;
+  left: 16px;
+  top: 6px;
+  opacity: 0.7;
+  font-size: 12px;
+}
+.test_box {
+  width: 300px;
+  min-height: 40px;
+  max-height: 300px;
+  outline: 0;
+  border: 1px solid #dcdfe6;
+  font-size: 14px;
+  line-height: 40px;
+  padding: 0 16px;
+  word-wrap: break-word;
+  overflow-x: hidden;
+  overflow-y: auto;
+  border-radius: 4px;
+  margin-top: 6px;
+}
+</style>

+ 232 - 0
src/components/basicKnow/searchTerm.vue

@@ -0,0 +1,232 @@
+<template>
+  <div>
+  <div class="address-placeholder" v-show="!onshow && items.length == 0"> 请输入</div>
+    <div class="source" @click="getfouce">
+      <div class="select">
+        <transition-group name="flip-list">
+          <span
+            v-for="(item,index) in items"
+            :key="item.conceptId"
+            draggable="true"
+            class="items"
+            @dragstart="dragstart(item)"
+            @dragenter="dragenter(item)"
+            @dragend="dragend(item)"
+          >
+            {{item.conceptName}}
+            <i class="el-icon-close" @click.stop="delTag(index)"></i>
+          </span>
+        </transition-group>
+        <input
+          class="inp"
+          @mousedown.stop
+          ref="inputVal"
+          @blur="unblur"
+          v-model="value"
+          @input="handleInput"
+        />
+      </div>
+      <ul class="list" v-if="conceptList.length>0 && onshow">
+        <li
+          @mousedown.prevent
+          class="item"
+          @click="getTag(item)"
+          v-for="(item,index) in conceptList"
+          :key="index"
+        >
+          {{item.conceptName}}
+          <img src />
+        </li>
+      </ul>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/knowledgeTree.js';
+export default {
+  name: 'searchTerm',
+  props: ['type','refbool'],
+  data() {
+    return {
+      conceptList: [],
+      oldNum: 0,
+      newNum: 0,
+      value: '',
+      items: [],
+      onshow: false
+    };
+  },
+  created(){
+    this.items = this.formatData(this.refbool)
+  },
+  watch: {
+    items(newVal, oldVal) {
+      // TO DO
+      let arr = [];
+      newVal.forEach(item => {
+        arr.push(item.conceptId);
+      });
+      this.$emit('update:refbool',arr)
+    },
+  },
+  methods: {
+    handleInput(event) {
+      const param = {
+        excludedConceptIds: [],
+        libType: this.type,
+        name: this.value
+      };
+      api
+        .searchConcept(param)
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.conceptList = data;
+            this.onshow = true;
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    getfouce() {
+      this.$refs.inputVal.focus();
+    },
+    getTag(item) {
+      var v = this.items.some(el => {
+        return el.conceptName == item.conceptName;
+      });
+      if (v) {
+        return;
+      }
+      this.items.push(item);
+      this.onshow = true;
+    },
+    delTag(index) {
+      this.items.splice(index, 1);
+    },
+    unblur() {
+      this.onshow = false;
+      this.value = '';
+      
+    },
+    shuffle() {
+      this.items = _.shuffle(this.items);
+    },
+    // 记录初始信息
+    dragstart(value) {
+      this.oldNum = value;
+    },
+    // 做最终操作
+    dragend(value) {
+      if (this.oldNum != this.newNum) {
+        let oldIndex = this.items.indexOf(this.oldNum);
+        let newIndex = this.items.indexOf(this.newNum);
+        let newItems = [...this.items];
+        console.log(oldIndex);
+        // 删除老的节点
+        newItems.splice(oldIndex, 1);
+        // 在列表中目标位置增加新的节点
+        newItems.splice(newIndex, 0, this.oldNum);
+        // this.items一改变,transition-group就起了作用
+        this.items = [...newItems];
+      }
+    },
+    // 记录移动过程中信息
+    dragenter: function(value) {
+      this.newNum = value;
+    },
+    formatData(data) {
+      //转换字段名
+      let str = JSON.stringify(data)
+        .replace(/id/g, 'conceptId')
+        .replace(/libName/g, 'conceptName');
+      //console.log(JSON.parse(str))
+      return JSON.parse(str);
+    },
+  }
+};
+</script>
+
+<style lang="less" scoped>
+.address-placeholder {
+  line-height: 42px;
+  height: 42px;
+  color: #a2a2a2;
+  position: absolute;
+  left: 16px;
+  top: 6px;
+  opacity: 0.7;
+  font-size: 12px;
+}
+.test_box {
+  width: 300px;
+  min-height: 40px;
+  max-height: 300px;
+  outline: 0;
+  border: 1px solid #dcdfe6;
+  font-size: 14px;
+  line-height: 40px;
+  padding: 0 16px;
+  word-wrap: break-word;
+  overflow-x: hidden;
+  overflow-y: auto;
+  border-radius: 4px;
+  margin-top: 6px;
+}
+.list {
+  width: 318px;
+  height: 200px;
+  position: absolute;
+  z-index: 1001;
+  border: 1px solid #e4e7ed;
+  border-radius: 4px;
+  background-color: #fff;
+  -webkit-box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
+  box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 5px 0;
+  overflow-y: auto;
+  .item {
+    padding: 0 10px;
+  }
+  .item:hover {
+    background: #f5f7fa;
+  }
+}
+
+.source {
+  width: 300px;
+  min-height: 40px;
+  outline: 0;
+  border: 1px solid #dcdfe6;
+  font-size: 14px;
+  line-height: 40px;
+  padding: 0 16px;
+  word-wrap: break-word;
+  overflow-x: hidden;
+  overflow-y: auto;
+  border-radius: 4px;
+  margin-top: 6px;
+
+  .select {
+    .items {
+      height: 30px;
+      line-height: 30px;
+      font-size: 12px;
+      border-radius: 5px;
+      padding: 3px 4px;
+      background: #48c5d7;
+      margin: 0 5px;
+      display: inline-block;
+    }
+    .inp {
+      width: 80px;
+      height: 30px;
+      border: none;
+    }
+  }
+}
+</style>

+ 230 - 0
src/components/knowledgeExtra/AddZskRegisteredDrug.vue

@@ -0,0 +1,230 @@
+<template>
+  <div style="min-height:100%" ref="viewBox">
+    <crumbs :title="title" :param="$route.params" linkTo="ZskRegisteredDrug"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <el-form
+          :inline="true"
+          ref="formInline"
+          :model="formInline"
+          class="demo-form-inline"
+          label-width="100px"
+        >
+          <el-form-item label="药品代码:">
+            <el-input v-model="formInline.drugCode" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="最小包装单位:">
+            <el-input v-model="formInline.minPackUnit" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="注册名称:">
+            <el-input v-model="formInline.name" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="药品企业:">
+            <el-input v-model="formInline.company" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="英文名称:">
+            <el-input v-model="formInline.enName" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="批准文号:">
+            <el-input v-model="formInline.approval" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="商品名称:">
+            <el-input v-model="formInline.tradeName" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="药品本位码:">
+            <el-input v-model="formInline.standardCode" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="药品剂型:">
+            <el-input v-model="formInline.form" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="医保类型:">
+            <el-input v-model="formInline.insuranceType" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="注册规格:">
+            <el-input v-model="formInline.specification" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="医保备注:">
+            <el-input v-model="formInline.insuranceRemrk" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="最小包装数量:">
+            <el-input v-model="formInline.minPackQuantity" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="药品类别:">
+            <el-input v-model="formInline.drugType" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="关联通用名:">
+            <el-select
+              clearable
+              remote
+              filterable
+              :remote-method="searchConcept"
+              v-model.trim="value"
+            >
+              <el-option
+                v-for="item in conceptList"
+                :key="item.conceptId"
+                :label="item.conceptName"
+                :value="item.conceptId"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
+        <div class="Butn">
+          <el-button class="disclButn" size="small" type="primary" @click="confirm">确定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+import api from '@api/icss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'AddZskDiagBase',
+  data() {
+    return {
+      formInline: {
+        drugCode: '', //药品代码
+        name: '', //注册名称
+        enName: '', //英文名称
+        tradeName: '', //商品名称
+        form: '', //药品剂型
+        specification: '', //注册规格
+        minPackQuantity: '', //最小包装数量
+        minPackUnit: '', //最小包装单位
+        company: '', //药品企业
+        approval: '', //批准文号
+        standardCode: '', //药品本位码
+        insuranceType: '', //医保类型
+        insuranceRemrk: '', //医保备注
+        drugType: '', //药品类别
+        drugConceptId: '' //药品通用名Id
+      },
+      conceptList: [],
+      value: '',
+      isEdit: false,
+      title: '注册药品维护-添加注册药品'
+    };
+  },
+  created() {
+    console.log(this.$route.params);
+    let type = this.$route.params.type;
+    if (type == 2) {
+      api.getByParam({ id: this.$route.params.id }).then(res => {
+        if (res.data.code == 0) {
+          const data = res.data.data;
+          this.formInline.drugCode = data.drugCode;
+          this.formInline.name = data.name;
+          this.formInline.enName = data.enName;
+          this.formInline.tradeName = data.tradeName;
+          this.formInline.form = data.form;
+          this.formInline.specification = data.specification;
+          this.formInline.minPackQuantity = data.minPackQuantity;
+          this.formInline.minPackUnit = data.minPackUnit;
+          this.formInline.company = data.company;
+          this.formInline.approval = data.approval;
+          this.formInline.standardCode = data.standardCode;
+          this.formInline.insuranceType = data.insuranceType;
+          this.formInline.insuranceRemrk = data.insuranceRemrk;
+          this.formInline.drugType = data.drugType;
+          this.formInline.drugConceptId = data.drugConceptId;
+          this.conceptList = [
+            { drugConceptId: data.drugConceptId, drugName: data.drugName }
+          ];
+        } else {
+          this.$message({
+            message: res.data.msg,
+            type: 'warning'
+          });
+        }
+      });
+    }
+  },
+  methods: {
+    searchConcept(val) {
+      api
+        .getsearchDrug({ name: val })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+
+            this.$nextTick(() => {
+              // dom元素更新后执行,因此这里能正确打印更改之后的值
+              this.conceptList = data; // 改变了的值
+            });
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    validateForms(callBack) {
+      this.$refs['formInline'].validate(valid => {
+        if (valid) {
+          callBack();
+        } else {
+          return false;
+        }
+      });
+    },
+    saveOrUpdate(params) {
+      api.saveOrUpdate(params).then(res => {
+        if (res.data.code == 0) {
+          this.$message({
+            message: '操作成功',
+            type: 'success'
+          });
+          this.$router.push({
+            name: 'ZskRegisteredDrug',
+            params: this.$route.params
+          });
+        } else {
+          this.$message({
+            message: res.data.msg,
+            type: 'warning'
+          });
+        }
+      });
+    },
+    confirm() {
+      let _this = this;
+      this.validateForms(function() {
+        let params = _this.formInline;
+        _this.saveOrUpdate(params);
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+@import '../../less/admin.less';
+.container {
+  top: 0;
+}
+.contents {
+  height: 100%;
+  .content {
+    height: 600px;
+    background: #fff;
+    padding: 20px 20px 0;
+    color: #545455;
+    min-width: 980px;
+    position: relative;
+    /deep/ .el-form-item {
+      width: 45%;
+      margin-bottom: 20px;
+      .el-form-item__label {
+        margin-right: 20px;
+      }
+
+      .el-input {
+        .el-input__inner {
+          width: 300px;
+        }
+      }
+    }
+  }
+}
+</style>

+ 299 - 0
src/components/knowledgeExtra/RegisteredDrug.vue

@@ -0,0 +1,299 @@
+<template>
+  <div>
+    <crumbs title="注册药品维护" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="通用名:">
+          <el-input size="mini" v-model="filter.commonName" placeholder="输入通用名" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="注册名:">
+          <el-input size="mini" v-model="filter.name" placeholder="输入注册名" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="企业:">
+          <el-input size="mini" v-model="filter.company" placeholder="输入企业名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item>
+        <el-form class="secLine">
+          <el-form-item>
+            <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增药品</el-button>
+          </el-form-item>
+        </el-form>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="drugCode" label="药品代码" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="name" label="注册名称" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="drugName" label="关联的通用名" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="enName" label="英文名称" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="tradeName" label="商品名称" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="form" label="药品剂型" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="specification" label="注册规格" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="minPackQuantity" label="最小包装量" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="minPackUnit" label="最小包单位" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="company" label="药品企业" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="approval" label="批准文号" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="standardCode" label="药品本位码" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="insuranceType" label="医保类型" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="insuranceRemrk" label="医保备注" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="modifierName" label="操作人" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="120" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        :current-page.sync="currentPage"
+        @current-change="currentChange"
+        background
+        :page-size="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';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRegisteredDrug',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        commonName: '',
+        name: '',
+        company: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '1070px' //头部最小宽度
+    };
+  },
+  created() {
+    this.getDataList();
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRegisteredDrug', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, isTurnPage) {
+      const params = 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
+        .getPageList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        commonName: this.filter.commonName,
+        name: this.filter.name,
+        company: this.filter.company
+      };
+      return param;
+    },
+    indexMethod(index) {
+      return (this.currentPage - 1) * this.pageSize + index + 1;
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(1, true);
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(row) {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddZskRegisteredDrug',
+        params: {
+          id: row.id,
+          type: 2
+        }
+      });
+    },
+    showDelDialog(row) {
+      const params = {
+        id: row.id
+      };
+      const warningTxt = '是否删除该诊断依据?可能对现有系统造成影响';
+      this.showConfirmDialog(warningTxt, () => {
+        api.paramDelete(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              this.currentPage = 1;
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        commonName: '',
+        name: '',
+        company: ''
+      };
+    },
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 40px;
+  min-width: 970px !important;
+}
+.demo-form-inline {
+  margin: 0 20px 0 0;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 64px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -1px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover,
+  &:active,
+  &:focus {
+    color: #f19061;
+  }
+}
+</style>

+ 56 - 45
src/routes.js

@@ -211,14 +211,15 @@ import AddDevKnow from '@components/knowledgeExtra/AddDevKnow.vue'   //知识库
 import ZskRuleManager from '@components/knowledgeExtra/RuleManager.vue';  //知识库规则维护
 import AddZskRule from '@components/knowledgeExtra/AddNewRule.vue';   //知识库添加规则
 import KnowledgeAll from '@components/knowledgeExtra/KnowledgeAll.vue'   //知识库树
-import KnowledgeBaseType from '@components/knowledgeExtra/KnowledgeBaseType.vue'   
-import AboutDisease from '@components/knowledgeExtra/AboutDisease.vue'   
-import DiseaseTree from '@components/knowledgeExtra/DiseaseTree.vue'   
+import KnowledgeBaseType from '@components/knowledgeExtra/KnowledgeBaseType.vue'
+import AboutDisease from '@components/knowledgeExtra/AboutDisease.vue'
+import DiseaseTree from '@components/knowledgeExtra/DiseaseTree.vue'
 import AutoKnowledgeMapRuleTest from '@components/autoTest/AutoKnowledgeMapRuleTest.vue';
 import AutoBillCommonTest from '@components/autoTest/AutoBillCommonTest.vue';
 import ZskDiagBase from '@components/knowledgeExtra/DiagBase.vue';      //知识库拓展-诊断依据维护
 import AddZskDiagBase from '@components/knowledgeExtra/AddDiagBase.vue';
-
+import ZskRegisteredDrug from '@components/knowledgeExtra/RegisteredDrug.vue';
+import AddZskRegisteredDrug from '@components/knowledgeExtra/AddZskRegisteredDrug.vue';
 export default [
     {
         path: '/',
@@ -618,46 +619,56 @@ export default [
                 component: AddZskDiagBase,
                 name: 'AddZskDiagBase',
             },
-    {
-        path: 'LT-ZSKKZWH-JTXXWH',
-        component: StaticInfo,
-        name: 'StaticInfo',
-    },
-    {
-        path: 'LT-ZSKKZWH-JTXXWH-EDIT',
-        component: AddDevKnow,
-        name: 'AddDevKnow',
-    },
-    {
-        path: 'LT-ZSKKZWH-SXJGWH',
-        component: KnowledgeAll,
-        name: 'KnowledgeAll',
-    }, //树形结构维护
-    {
-        path: 'LT-ZSKJCWH-JCSYLXWH',
-        component: KnowledgeBaseType,
-        name: 'KnowledgeBaseType',
-    }, //基础术语类型维护
-    {
-        path: 'LT-ZSKKZWH-JBXGWH',
-        component: AboutDisease,
-        name: 'AboutDisease',
-    }, //疾病相关维护
-    {
-        path: 'LT-ZSKKZWH-JBXGWH-EDIT',
-        component: DiseaseTree,
-        name: 'DiseaseTree',
-    }, //疾病相关维护, 
-    {
-        path: 'LT-YYSYZDHCS-ZSTPGZCS',
-        component: AutoKnowledgeMapRuleTest,
-        name: 'AutoKnowledgeMapRuleTest',
-    }, 
-    {
-        path: 'LT-YYSYZDHCS-ZSTPGZCS-TYGZCS',
-        component: AutoBillCommonTest,
-        name: 'AutoBillCommonTest',
+            {
+                path: 'LT-ZSKKZWH-JTXXWH',
+                component: StaticInfo,
+                name: 'StaticInfo',
+            },
+            {
+                path: 'LT-ZSKKZWH-JTXXWH-EDIT',
+                component: AddDevKnow,
+                name: 'AddDevKnow',
+            },
+            {
+                path: 'LT-ZSKKZWH-SXJGWH',
+                component: KnowledgeAll,
+                name: 'KnowledgeAll',
+            }, //树形结构维护
+            {
+                path: 'LT-ZSKJCWH-JCSYLXWH',
+                component: KnowledgeBaseType,
+                name: 'KnowledgeBaseType',
+            }, //基础术语类型维护
+            {
+                path: 'LT-ZSKKZWH-JBXGWH',
+                component: AboutDisease,
+                name: 'AboutDisease',
+            }, //疾病相关维护
+            {
+                path: 'LT-ZSKKZWH-JBXGWH-EDIT',
+                component: DiseaseTree,
+                name: 'DiseaseTree',
+            }, //疾病相关维护, 
+            {
+                path: 'LT-YYSYZDHCS-ZSTPGZCS',
+                component: AutoKnowledgeMapRuleTest,
+                name: 'AutoKnowledgeMapRuleTest',
+            },
+            {
+                path: 'LT-YYSYZDHCS-ZSTPGZCS-TYGZCS',
+                component: AutoBillCommonTest,
+                name: 'AutoBillCommonTest',
+            },
+            {
+                path: 'LT-ZSKKZWH-ZCYPWH',
+                component: ZskRegisteredDrug,
+                name: 'ZskRegisteredDrug',
+            },
+            {
+                path: 'LT-ZSKKZWH-TJZCYPWH',
+                component: AddZskRegisteredDrug,
+                name: 'AddZskRegisteredDrug',
+            },
+        ],
     },
-],
-},
 ];

+ 2 - 2
vue.config.js

@@ -1,7 +1,7 @@
 const path = require('path');
 // const proxy_path = 'http://192.168.2.236:80';
-const proxy_path = 'http://192.168.2.241:88';
-// const proxy_path = 'http://192.168.2.236:88';
+// const proxy_path = 'http://192.168.2.241:88';
+const proxy_path = 'http://192.168.2.236:5050';
 // const proxy_path = 'http://192.168.3.101:5050';
 // const proxy_path = 'http://192.168.3.117:5050';//周铁刚
 // const proxy_path = 'http://192.168.3.113:5050'; //王峰