Luolei 6 years ago
parent
commit
e032167c11

File diff suppressed because it is too large
+ 11210 - 0
package-lock.json


+ 17 - 9
src/api/config.js

@@ -74,14 +74,19 @@ export default {
     'delServiceToken': '/api/diagbotman/serviceToken/deleteTokenByProductServiceId',//删除令牌
     'delServiceToken': '/api/diagbotman/serviceToken/deleteTokenByProductServiceId',//删除令牌
     'disableToken': '/api/diagbotman/serviceToken/disableToken',   //   禁用令牌
     'disableToken': '/api/diagbotman/serviceToken/disableToken',   //   禁用令牌
     'enableToken': '/api/diagbotman/serviceToken/enableToken',   //    启用令牌
     'enableToken': '/api/diagbotman/serviceToken/enableToken',   //    启用令牌
-		'getConsoleOnTrial': '/api/diagbotman/productOrder/getConsoleOnTrial', //可试用产品
-		'openUpOnTrial': '/api/diagbotman/productOrder/openUpOnTrial', //  立即试用请求
-		'productAuthProgress': '/api/diagbotman/productOrder/productAuthProgress', //产品开通进度
-		'getConsoleOpened': '/api/diagbotman/productOrder/getConsoleOpened', // 控制台--已开通产品
-		'enShowOption': '/api/diagbotman/productOrder/enShowOption', //控制台--是否显示选项
-        'addRenewalsInfo': '/api/diagbotman/morServices/addRenewalsInfo', // 控制台--续费
-        'getAuthenProgress': '/api/user/userAuthentication/queryAuthProgress', // 控制台--账号认证进度
-		'intoVerify': '/api/diagbotman/productOrder/openProductCheck', // 控制台--进入验证
+    'getConsoleOnTrial': '/api/diagbotman/productOrder/getConsoleOnTrial', //可试用产品
+    'openUpOnTrial': '/api/diagbotman/productOrder/openUpOnTrial', //  立即试用请求
+    'productAuthProgress': '/api/diagbotman/productOrder/productAuthProgress', //产品开通进度
+    'getConsoleOpened': '/api/diagbotman/productOrder/getConsoleOpened', // 控制台--已开通产品
+    'enShowOption': '/api/diagbotman/productOrder/enShowOption', //控制台--是否显示选项
+    'addRenewalsInfo': '/api/diagbotman/morServices/addRenewalsInfo', // 控制台--续费
+    'getAuthenProgress': '/api/user/userAuthentication/queryAuthProgress', // 控制台--账号认证进度
+    'intoVerify': '/api/diagbotman/productOrder/openProductCheck', // 控制台--进入验证
+    /* 医学后台维护相关接口 */
+    'getDropList': 'api/icssman/dictionaryInfo/getList', //下来选项列表(标签类型、标签归属等)
+    'getTagList': 'api/icssman/questionInfo/list', //标签列表
+    'searchTagList': 'api/icssman/questionInfo/index', //标签池检索
+    'detailsTagList': 'api/icssman/questionInfo/getByIds', //根据多个标签ID返回标签内容
 	},
 	},
 	menuIconList: { //菜单对应图标
 	menuIconList: { //菜单对应图标
 		'YH-KZT': 'el-icon-menu',
 		'YH-KZT': 'el-icon-menu',
@@ -92,5 +97,8 @@ export default {
 		'LT-DDXT': 'el-icon-setting',
 		'LT-DDXT': 'el-icon-setting',
 		'LT-CPXGL': 'el-icon-upload',
 		'LT-CPXGL': 'el-icon-upload',
 		'LT-GRZX': 'el-icon-news'
 		'LT-GRZX': 'el-icon-news'
-	}
+  },
+  controlType:{
+
+  }
 }
 }

+ 21 - 0
src/api/icss.js

@@ -0,0 +1,21 @@
+import axios from 'axios';
+import config from '@api/config.js';
+
+const urls = config.urls;
+export default {
+    getDropList() {
+        return axios.post(urls.getDropList)
+    },
+    getTagList(param) {
+        return axios.post(urls.getTagList, param)
+    },
+    searchTagList(param) {
+        return axios.post(urls.searchTagList, param)
+    },
+    validateSystomName(param) {
+        return axios.post(urls.searchTagList, param)
+    },
+    detailsTagList(param) {
+        return axios.post(urls.detailsTagList, param)
+    },
+}

+ 22 - 0
src/api/utils.js

@@ -52,5 +52,27 @@ export default {
       return '目前只能导出30天内数据,请重新筛选时间';
       return '目前只能导出30天内数据,请重新筛选时间';
     }
     }
     return true;
     return true;
+  },
+  /**
+   * 
+   * @param {arr} 被操作的数组 
+   * @param {val} 需要剔除或者判断的值 
+   * @param {type} 是剔除(1)还是判断(2)是否存在,不存在返回[]
+   */
+  filterArr(arr,val,type,des){  //数组剔除指定元素 
+    if(type == 1){
+      if(des){
+        return arr.filter(item => item.id != val)
+      }else{
+        return arr.filter(item => item != val)
+      }
+    }else{
+      let tmp = arr.filter(item => JSON.stringify(item) == JSON.stringify(val))
+      if(JSON.stringify(tmp) == '[]'){
+        return false;
+      }else{
+        return true;
+      }
+    }
   }
   }
 }
 }

+ 194 - 0
src/components/icss/LabelGroup.vue

@@ -0,0 +1,194 @@
+<template>
+    <div>
+        <crumbs title="标签组维护" style="min-width: 1085px">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="标签类型:">
+                    <el-select size="mini" v-model="filter.tagType[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-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="primary" @click="addTagGroup">添加标签组</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="180">
+                </el-table-column>
+                <el-table-column
+                    prop="typeCn"
+                    label="标签归属">
+                </el-table-column>
+                <el-table-column
+                    prop="tagTypeCn"
+                    label="标签类型">
+                </el-table-column>
+                <el-table-column
+                    prop="tagName"
+                    label="标签系统名称">
+                </el-table-column>
+                <el-table-column
+                    prop="modifier"
+                    label="操作人">
+                </el-table-column>
+                <el-table-column
+                    prop="operate"
+                    label="操作">
+                    <template slot-scope="scope">
+                        <el-button  @click="modifyTagGroup(scope.row)" type="text" size="small">修改</el-button>
+                        <el-button class="delete" type="text" size="small">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+        </div>
+        <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>
+</template>
+
+<script>
+import api from '@api/icss.js';
+
+export default {
+    name: 'tag-group',
+    data: function() {
+        return {
+            list: [],
+            tagTypes: [],
+            Adscriptions: [],
+            tagTypesList: [],
+            filter: {
+                tagType: [], //标签类型
+                tagAdscription: '', //标签归属
+                tagSysName: '', //标签系统名称
+            },
+            currentPage: 1,
+            pageSize: 10,
+            total: 0,
+        }
+    },
+    created() {
+        this.getDropList().then(() => {
+            this.getDataList()
+        })
+        
+    },
+    methods: {
+        getValue(val) {
+            console.log('changeVal', val, this.filter.tagAdscription)
+        },
+        getDropList() {
+            return api.getDropList().then((res) =>{
+                console.log('dropList', res)
+                if(res.data.code === '0') {
+                    this.Adscriptions = res.data.data[1];
+                    this.tagTypes =  res.data.data[3];
+                    for (var i = 0; i < this.tagTypes.length; i++) {
+                        this.tagTypesList.push(this.tagTypes[i].val)
+                    }
+                }
+                 
+            })
+        },
+        getDataList() {
+           console.log('data', this.tagTypesList)
+            const param = this.getFilterItems();
+            console.log('param', param)
+            api.getTagList(param).then((res) => {
+                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].tagType === this.tagTypes[j].val) {
+                            list[i].tagTypeCn = this.tagTypes[j].name
+                        }
+                    }
+                    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;
+                console.log('tagGroup',res)
+            })
+        },
+        filterDatas() {
+            this.currentPage = 1;
+            this.getDataList();
+        },
+        addTagGroup() {
+            this.$router.push({path:'LT-YXSJWH-TJBQZ'})
+            console.log('添加产品线');
+        },
+        modifyTagGroup() {
+            console.log('修改产品线');
+        },
+        currentChange(next) {
+            this.currentPage = next;
+            this.getDataList();
+            // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+            //     this.list = this.cacheData[next];
+            // } else {
+            //     this.getDataList();
+            // }
+        },
+        getFilterItems() {
+            const param = {
+                tagTypeList: this.filter.tagType[0] && this.filter.tagType|| this.tagTypesList,
+                current: this.currentPage,
+                size: this.pageSize,
+                type: this.filter.tagAdscription,
+                tagName: this.filter.tagSysName
+            };
+            return param;
+        },
+        indexMethod(index) {
+            return ((this.currentPage - 1) * this.pageSize) + index + 1;
+        },
+        getTagType(val) {
+            return val
+        }
+    }
+}
+</script>
+
+
+<style lang="less">
+    .delete{
+       color: red
+    }
+    .delete:hover {
+        color: red;
+    } 
+</style>

+ 96 - 0
src/components/icss/NoiseTemplate.vue

@@ -0,0 +1,96 @@
+<template>
+  <div class="NoiseTemplateWrapper TemplateWrapper">
+    <div class="groupTitle"><i
+        class="el-icon-back"
+        @click="back"
+      ></i> 标签组维护--添加标签组</div>
+    <PubTagGroup
+      @changeVal="changeVal"
+      @changeSex="changeSex"
+      @changeType="changeType"
+      @validatePass="validatePass"
+      ref="submitForm"
+    ></PubTagGroup>
+    <div class="main">
+      <p class="title"> <i>*</i> 标签明细:</p>
+      <PubTagPartDetail :pool="dataPub.tagPool" :type="dataPub.region1" :sign="dataPub.region2" v-show="dataPub.region2 == 2"></PubTagPartDetail>
+      <div class="btn">
+        <el-button
+          type="primary"
+          @click="submitForm"
+        >确 定</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+/**
+ * dataPub.region2  判断底部显示哪些
+ */
+import PubTagGroup from './PubTagGroup';
+import PubTagPartDetail from './PubTagPartDetail';
+import SymptomTagGroup from './SymptomTagGroup';
+export default {
+  name: 'NoiseTemplateWrapper',
+  data() {
+    return {
+      dataPub: {},      //公用组件传的值都在这
+    }
+  },
+  methods: {
+    back() { this.$router.go(-1) },
+    changeVal(val) {    //子组件数据改变传递到父组件
+      this.dataPub = val
+      console.log('公用组件传的值都在这', val)
+    },
+    changeSex(sex) {       //性别改变,清空标签明细
+      console.log(sex)
+    },
+    changeType(type){        //填写单类型改变,标签明细左侧更新,右侧清空
+      console.log(type)
+    },
+    submitForm() {       // 调用子组件的方法验证公用部分
+      this.$refs.submitForm.submitForm('groups');
+    },
+    validatePass() {      //验证成功回调,调取接口
+      //仍需验证标签明细是否选择
+      
+    },
+  },
+  components: {
+    PubTagGroup,
+    PubTagPartDetail,
+    SymptomTagGroup,
+  }
+}
+</script>
+<style lang="less">
+@import "../../less/common.less";
+.NoiseTemplateWrapper {
+  .groupTitle {
+    background-color: #fff;
+    height: 40px;
+    line-height: 40px;
+    padding-left: 20px;
+  }
+  .main {
+    background-color: #fff;
+    margin: 0 20px 20px;
+    padding: 20px;
+    border-top: 1px solid @icssBorder;
+    box-sizing: border-box;
+    font-size: 14px;
+    color: #606266;
+    .title {
+      margin-bottom: 20px;
+      i {
+        color: #f56c6c;
+      }
+    }
+  }
+  .btn {
+    text-align: right;
+  }
+}
+</style>
+

+ 398 - 0
src/components/icss/PubTagGroup.vue

@@ -0,0 +1,398 @@
+<template>
+  <div class="PubTagGroupWrapper">
+    <el-form
+      class="groups"
+      :rules="rules"
+      ref="groups"
+      :model="form"
+      label-width="150px"
+    >
+      <el-form-item
+        label="选择归属:"
+        prop="region1"
+      >
+        <el-select
+          v-model="form.region1"
+          placeholder="请选择归属"
+          @change="sendData"
+        >
+          <el-option
+            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="选择填写单类型:"
+        prop="region2"
+      >
+        <el-select
+          v-model="form.region2"
+          placeholder="请选择填写单类型"
+          @change="changeType"
+        >
+          <el-option
+            v-for="item in labelTypes"
+            :label="item.name"
+            :value="item.val"
+            :key="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="标签系统名称:"
+        prop="region3"
+      >
+        <el-input
+          v-model="form.region3"
+          maxLength="30"
+          placeholder="请输入标签系统名称"
+          @change="sendData"
+        ></el-input>
+      </el-form-item>
+      <el-form-item
+        label="标签界面名称:"
+        prop="region4"
+      >
+        <el-input
+          v-model="form.region4"
+          maxLength="30"
+          placeholder="请输入标签界面名称"
+          @change="sendData"
+        ></el-input>
+      </el-form-item>
+      <el-form-item
+        label="选择项之间链接:"
+        prop="region5"
+      >
+        <el-input
+          v-model="form.region5"
+          maxLength="30"
+          placeholder="请输入选择项之间链接"
+          @change="sendData"
+        ></el-input>
+      </el-form-item>
+      <el-form-item
+        label="能否当项目检索:"
+        prop="region6"
+      >
+        <el-select
+          v-model="form.region6"
+          @change="sendData"
+        >
+          <el-option
+            label="不可以"
+            value="不可以"
+          ></el-option>
+          <el-option
+            label="可以"
+            value="可以"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="性别:"
+        prop="region7"
+      >
+        <el-select
+          v-model="form.region7"
+          @change="readyChangeSex"
+        >
+          <el-option
+            label="通用"
+            value="通用"
+          ></el-option>
+          <el-option
+            label="男"
+            value="男"
+          ></el-option>
+          <el-option
+            label="女"
+            value="女"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="年龄:"
+        prop="region8"
+        class="ages"
+      >
+        <el-input
+          v-model.number="form.region8"
+          ref="valage1"
+          @input="sendData"
+        ></el-input> ~
+        <el-input
+          v-model.number="form.region9"
+          ref="valage2"
+          @input="sendData"
+        ></el-input>
+      </el-form-item>
+      <!-- 暂时不用 -->
+      <!-- <el-form-item label="选择子项时是否复制主项标签:" prop="region10">
+        <el-select v-model="form.region10">
+          <el-option label="不可以" value="不可以"></el-option>
+          <el-option label="可以" value="可以"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="是否复制当前模块:" prop="region11">
+        <el-select v-model="form.region11">
+          <el-option label="不可以" value="不可以"></el-option>
+          <el-option label="可以" value="可以"></el-option>
+        </el-select>
+      </el-form-item> -->
+    </el-form>
+  </div>
+</template>
+<script>
+import api from '@api/icss.js';
+/**
+ * titlePar 顶部显示左(有默认值可不填)
+ * titleSub  顶部显示右(有默认值可不填)
+ * form 当前页面传到父组件的数据(region10,region11暂时不用)
+ * submitForm 基本信息验证必填项
+ * validatePass 基本信息必填项验证成功回调
+ * 父组件根据form.region2改变底部组件操作项
+ * searchTagList 函数的参数根据type变化
+ */
+
+export default {
+  data() {
+    var validatePass2 = (rule, value, callback) => {
+        this.validateSystomName(value,callback)
+    };
+    return {
+      status2: [
+        { name: '症状标签', key: '8' },
+        { name: '单选自由填写项', key: '9' },
+        { name: '多选项、预设结构选择', key: '10' },
+        { name: '预设结构选择', key: '11' },
+        { name: '伴/无结构类型', key: '12' },
+        { name: '推送症状类型', key: '13' },
+        { name: '诊断/药品/辅检', key: '14' },
+        { name: '血压类型', key: '15' },
+      ],
+      form: {
+        region1: '',    //归属
+        region2: '2',     //填写单类型
+        region3: '',      //系统名称
+        region4: '',      //界面名称
+        region5: '',      //选项之间的链接
+        region6: '不可以',      //是否可以检索
+        region7: '通用',       //性别
+        region8: '0',          //最小年龄
+        region9: '200',         //最大年龄
+        // region10: '可以',        //是否复制主标签
+        // region11: '不可以',       //是否复制当前模块
+        tagPool:[],          //标签池数据
+      },
+      rules: {
+        region1: [
+          { required: true, message: '请选择归属', trigger: 'change' }
+        ],
+        region2: [
+          { required: true, message: '请选择填写单类型', trigger: 'change' }
+        ],
+        region3: [
+          { required: true, message: '请输入标签系统名称', trigger: 'change' },
+          { validator: validatePass2, trigger: 'blur' },
+        ],
+        region4: [
+          { required: true, message: '请输入标签界面名称', trigger: 'change' }
+        ],
+        region6: [
+          { required: true, message: '请输入能否当项目检索', trigger: 'change' }
+        ],
+        region7: [
+          { required: true, message: '请选择性别', trigger: 'change' }
+        ],
+        region8: [
+          { required: true, message: '请输入最小年龄', trigger: 'change' }
+        ],
+        region9: [
+          { required: true, message: '请输入最大年龄', trigger: 'change' }
+        ],
+        // region10: [
+        //   { required: true, message: '选择子项时是否复制主项标签', trigger: 'change' }
+        // ],
+        // region11: [
+        //   { required: true, message: '是否复制当前模块', trigger: 'change' }
+        // ],
+      },
+      tmpSex: '通用',
+      Adscriptions: [],
+      labelTypes: [],
+      labelTypesList: [],
+      tagTypes: [],        //标签池数据
+      systom:null,      //标签系统名称存在与否
+    }
+  },
+  computed: {
+    newSex() {
+      return this.form.region7;
+    },
+    newType() {
+      return this.form.region1;
+    },
+    newSign() {
+      return this.form.region2;
+    },
+  },
+  mounted() {
+    this.$emit('submitForm', 'groups', false);
+    this.getDropList();
+  },
+  watch: {
+    newSex(nextVal, prevVal) {
+      this.tmpSex = prevVal;
+    },
+    newType(nextVal, prevVal) {
+      if (nextVal != prevVal) {
+        this.searchTagList()
+      }
+    },
+    newSign(nextVal, prevVal) {
+      if (nextVal != prevVal && JSON.stringify(this.form.tagPool) != '[]' ) {
+        this.searchTagList()
+      }
+    },
+  },
+  methods: {
+    getDropList() {
+      return api.getDropList().then((res) => {
+        if (res.data.code === '0') {
+          this.Adscriptions = res.data.data[1];
+          this.labelTypes = res.data.data[2];
+        }
+      })
+    },
+    searchTagList() {
+      let region1 = this.form.region1,region2 = this.form.region2;
+      let param = {
+        "type": region1,
+        "tagType": region2 == 2?[1]:[],
+        "controlType":region2 == 2?[1,2]:[],
+      }
+      api.searchTagList(param).then((res) => {
+        if (res.data.code === '0') {
+          this.form.tagPool = res.data.data
+        }
+      })
+    },
+    validateSystomName(name,callback) {
+      if(this.form.region3.trim() == ''){ return }
+      let param = {"existName": this.form.region3,"type": this.form.region1}
+      api.validateSystomName(param).then((res) => {
+        if (res.data.code === '0') {
+          if(res.data.data && res.data.data.length != 0){
+            callback(new Error('该系统名称已存在'));
+          }else{
+            callback();
+          }
+        }
+      })
+    },
+    sendData() {
+      this.$emit('changeVal', this.form, false)
+    },
+    changeType(type){
+      this.$emit('changeVal', this.form, false)
+      this.$emit('changeType', type, false)
+    },
+    changeSex(sex) {   //改变性别清空数据
+      this.form = {
+        region1: '',
+        region2: '',
+        region3: '',
+        region4: '',
+        region5: '',
+        region6: '不可以',
+        region7: sex,
+        region8: '0',
+        region9: '200',
+        tagPool:[]
+      }
+      this.$emit('changeVal', this.form, false)
+      this.$emit('changeSex', sex, false)
+    },
+    readyChangeSex(data) {
+      let sex = data;
+      this.$confirm('改变性别后,所填信息将会回复到默认状态?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelColor',
+        type: 'warning'
+      }).then(() => {
+        this.changeSex(sex);
+      }).catch(() => {
+        this.form.region7 = this.tmpSex;
+      });
+    },
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.$emit('validatePass', this.form, false)
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    }
+  }
+}
+</script>
+<style lang="less">
+.PubTagGroupWrapper {
+  
+}
+.groups {
+  background-color: #fff;
+  padding: 20px;
+  margin: 20px 20px -20px 20px;
+  .el-form-item__content,
+  .el-input__inner {
+    height: 30px;
+    line-height: 30px;
+    width: 200px;
+  }
+  .el-form-item {
+    margin-bottom: 20px;
+  }
+  .el-form-item__error {
+    top: 28px;
+  }
+  .el-form-item__label {
+    line-height: 30px;
+    text-align: left;
+  }
+  .el-input__icon {
+    line-height: 30px;
+  }
+  .ages .el-input {
+    display: inline-block;
+    width: auto;
+    .el-input__inner {
+      width: 40px;
+      padding: 0 5px;
+    }
+
+    .el-input__inner::-webkit-outer-spin-button,
+    .el-input__inner::-webkit-inner-spin-button {
+      -webkit-appearance: none;
+    }
+
+    .el-input__inner[type="number"] {
+      -moz-appearance: textfield;
+    }
+  }
+  .el-message-box__btns .el-button--default {
+    color: #606266 !important;
+  }
+  .cancelColor {
+    color: #22ccc8 !important;
+  }
+}
+</style>
+

+ 387 - 0
src/components/icss/PubTagPartDetail.vue

@@ -0,0 +1,387 @@
+<template>
+  <div class="bottomPart clearfix">
+    <div class="bottomPartLeft fl">
+      <p class="desTitle">标签池:</p>
+      <div class="pool">
+        <el-input
+          placeholder="请输入搜索内容"
+          v-model="searchVal"
+        >
+          <i
+            slot="prefix"
+            class="el-input__icon el-icon-search"
+          ></i>
+        </el-input>
+        <ul class="pubList searchList">
+          <li class="pubLiStyle pubLiStyleWrap ellipsis"
+            v-for="val in currentPool"
+            :title="'[ '+val.tagName+' ]'"
+            :key="val.id"
+            :style="getStyle(val.id)?styles:null"
+            @click="detailsTagList(val.id)" 
+          >{{val.tagName}}</li>
+        </ul>
+      </div>
+    </div>
+    <div class="bottomPartMid fl">
+      <p><span class="el-icon-arrow-right" @click="toRightPool"></span></p>
+      <p><span class="el-icon-arrow-left" @click="toLeftPool"></span></p>
+    </div>
+    <div class="bottomPartRight fl">
+      <p class="desTitle">操作界面:</p>
+      <div class="rightPool">
+        <div
+          class="onlyTop pubLiStyle"
+          :class="selectArr[0]?'activeBgc':null"
+          @click="selectPart(0)"
+        >
+          <template v-for="item in poolDetailList[0]">
+            <span class="hzx" v-for="part in item.questionDetailList" :key="part.id">{{part.name}}</span>
+          </template>
+        </div>
+        <div class="onlyBottom pubList">
+          <ul class="clearfix">
+            <li v-for="n in 5"
+              :key="n + 'part'"
+              class="onlyBottomPart"
+              :class="selectArr[n]?'activeBgc':null"
+              :style="{borderRight:n==5?'0':''}"
+              @click="selectPart(n)"
+            >
+              <ul>
+                <template v-for="item in poolDetailList[n]">
+                  <li class="partDetail" v-for="part in item.questionDetailList" :key="part.id">
+                    {{part.name}}
+                  </li>
+                </template>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+      <div class="partWaring">
+        <ul>
+          <li v-for="i in 5" :key="i">
+            <template v-for="item in poolDetailList[i]">
+              <p class="partDetail" v-show="item.controlType != 1" :key="item.id + '1'">
+                {{1}}
+              </p>
+              <p class="partDetail" v-show="item.controlType != 2" :key="item.id + '2'">
+                {{2}}
+              </p>
+            </template>
+          </li>
+         
+        </ul>
+      </div>
+    </div>
+    <span class="mutex">互斥项</span>
+  </div>
+</template>
+<script>
+import api from '@api/icss.js';
+import utils from '@api/utils.js';
+
+export default {
+  props: {
+    pool: {
+      default: () => [],
+      type: Array
+    },
+    type: {
+      default: '',
+      type: String
+    },
+    sign: {
+      default: '',
+      type: String
+    },
+    choose: {
+      default: 'single',      //multiple多选
+      type: String
+    },
+  },
+  data() {
+    return {
+      currentDetail: {},     //当前点击的标签对应的展开数据
+      poolDetailList: [     //默认6个部分
+        [], [], [], [], [], []
+      ],
+      poolDetailListAll:[],    //默认6个部分转化为一维数组
+      activePart: '-1',     //选中part第几个
+      selectArr: [false, false, false, false, false, false],   //右侧选中part状态
+      select: '',              //右侧选中的项
+      
+      styles:{
+        background:'#eae7e7'
+      },                       //选中单条样式
+      searchVal: '',           //搜索值
+      currentPool: [],         //标签池数据
+      currentLis:[],           //选中单条ID组合(多选)
+      notIds:[],               //去重IDs
+    }
+  },
+  watch: {
+    pool(newVal, preVal) {
+      if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+        this.currentPool = newVal
+      }
+    },
+    searchVal(newVal, preVal){
+      if(newVal.trim() == ''){
+        this.searchTagList()
+      }else if(newVal.trim() != preVal.trim()){
+        this.searchTagList()
+      }
+    }
+  },
+  methods: {
+    toRightPool(){
+
+    },
+    toLeftPool(){
+
+    },
+    getStyle(id){       //左侧选中状态
+      return utils.filterArr(this.currentLis,id,2)
+    },
+    searchTagList() {
+      let ids = [];
+      this.poolDetailListAll.map((value)=>{
+        ids.push(value.id)
+        this.notIds = ids;
+      })
+      let param = {
+        "tagName": this.searchVal || '',
+        "type": this.type,
+        "notIds": this.notIds,
+        "tagType": this.sign == 2?[1]:[],
+        "controlType":this.sign == 2?[1,2]:[],
+      }
+      api.searchTagList(param).then((res) => {
+        if (res.data.code === '0') {
+          this.currentPool = res.data.data
+        }
+      })
+    },
+    selectPart(idx) {
+      let tmpFst1 = this.selectArr[0],
+        tmpFst2 = this.selectArr[1],
+        tmpFst3 = this.selectArr[2],
+        tmpFst4 = this.selectArr[3],
+        tmpFst5 = this.selectArr[4],
+        tmpFst6 = this.selectArr[5];
+      if (idx == 0) {
+        this.selectArr = [!tmpFst1, false, false, false, false, false];
+      } else if (idx == 1) {
+        this.selectArr = [false, !tmpFst2, false, false, false, false];
+      } else if (idx == 2) {
+        this.selectArr = [false, false, !tmpFst3, false, false, false];
+      } else if (idx == 3) {
+        this.selectArr = [false, false, false, !tmpFst4, false, false];
+      } else if (idx == 4) {
+        this.selectArr = [false, false, false, false, !tmpFst5, false];
+      } else if (idx == 5) {
+        this.selectArr = [false, false, false, false, false, !tmpFst6];
+      }
+      let tmpArr = this.selectArr;
+      let num = 0;
+      tmpArr.map((val, idx) => {
+        if (val) {
+          this.activePart = idx;
+        } else {
+          num = ++num
+          if (num == 6) { this.activePart = '-1' }
+        }
+      })
+    },
+    detailsTagList(id) {
+      let plus1 = 0,plus2 = 0;
+      for(let j = 0;j < this.selectArr.length;j++){        //判断右侧有没有选中
+        if(!this.selectArr[j]){
+          ++plus1;
+          if(plus1 == 6){       //右侧未选中
+            for(let k = 1;k < this.poolDetailList.length;k++){
+              if(JSON.stringify(this.poolDetailList[k]) != '[]'){
+                ++plus2
+                if(plus2 == 5){     //右侧数据填满了
+                  alert('请选择需要修改的模块')
+                  return;
+                }
+              }
+            }
+          }
+        }
+      }
+      if(this.choose == 'single'){           //单选
+        let tmpIds = [];
+        tmpIds.push(id);
+        this.currentLis = tmpIds;
+      }else{                                //多选
+        // let tmpIds = this.currentLis;
+        // if(utils.filterArr(tmpIds,id,2)){
+        //   return;
+        // }else{
+        //   tmpIds.push(id);
+        // }
+        // this.currentLis = tmpIds;
+      }
+
+      let param = {
+        // "age": 0,
+        "ids": id,
+        // "sexType": 3
+      }
+      api.detailsTagList(param).then((res) => {        //右侧展开内容
+        if (res.data.code === '0') {
+          const currentDetail = res.data.data[id];
+          this.currentDetail = currentDetail;
+          let num = 0;
+          if(this.choose == 'single'){              //判断是单选
+            this.selectArr.map((flg,idx)=>{         //判断右侧有没有选中
+              if(flg){    //有选中
+                let tmp = [],ids = [];
+                tmp.push(currentDetail);
+                this.poolDetailList[idx] = tmp;
+                this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);     //二维转一维
+                this.searchTagList();
+              }else{      //没选中,按順序第二个开始添加
+                ++num;
+                if(num == 6){
+                  for(let i = 1;i < this.poolDetailList.length;i++){
+                    let tmp = [],ids = [];
+                    if(this.poolDetailList[i].length == 0){      //判断part里面是不是有数据,没有直接添加
+                      tmp.push(currentDetail);
+                      this.poolDetailList[i] = tmp;
+                      this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);
+                      this.searchTagList();
+                      return;
+                    }
+                  }
+                }
+              }
+            })
+          }
+        }
+      })
+    },
+  }
+}
+</script>
+<style lang="less">
+@import "../../less/common.less";
+.bottomPart {
+  box-sizing: border-box;
+  padding-right: 100px;
+  position: relative;
+  padding-bottom: 500px;
+  .desTitle {
+    padding-bottom: 10px;
+  }
+  .pubList {
+    height: @icssHeight;
+    overflow: auto;
+  }
+  .pubLiStyle {
+    height: 30px;
+    line-height: 30px;
+    padding: 0 8px;
+  }
+  .pubLiStyleWrap:hover {
+    background-color: #f5f5f5;
+  }
+  .pubLiStyleWrap:before {
+    content: "[ ";
+  }
+  .pubLiStyleWrap:after {
+    content: " ]";
+  }
+  .mutex {
+    position: absolute;
+    right: 36px;
+    top: 36px;
+  }
+  .bottomPartLeft {
+    width: 30%;
+    .pool {
+      border: 1px solid @icssBorder;
+      .el-input__prefix {
+        left: 5px;
+        right: auto;
+      }
+      .el-input__inner {
+        height: 31px;
+        line-height: 31px;
+      }
+      .el-input__icon {
+        line-height: 31px;
+      }
+      .el-input--prefix .el-input__inner {
+        border: 0 none;
+        border-bottom: 1px solid @icssBorder;
+        border-radius: 0;
+      }
+      .search {
+        border-bottom: 1px solid @icssBorder;
+      }
+      .searchList {
+        li {
+        }
+      }
+    }
+  }
+  .bottomPartMid {
+    width: 10%;
+    margin-top: 60px;
+    p {
+      width: 100%;
+      text-align: center;
+      span {
+        display: inline-block;
+        width: 30px;
+        height: 40px;
+        line-height: 40px;
+        margin: 0 auto;
+        border: 1px solid @icssBorder;
+        margin-bottom: 15px;
+        font-size: 18px;
+      }
+    }
+  }
+  .bottomPartRight {
+    width: 60%;
+    .partWaring {
+      li {
+        float: left;
+        width: 20%;
+        padding: 5px;
+        box-sizing: border-box;
+      }
+    }
+    .rightPool {
+      border: 1px solid @icssBorder;
+    }
+    .onlyTop {
+      border-bottom: 1px solid @icssBorder;
+      .hzx{
+        padding: 0 30px 0 0;
+      }
+    }
+    .onlyBottom {
+      .onlyBottomPart {
+        float: left;
+        border-right: 1px solid @icssBorder;
+        box-sizing: border-box;
+        width: 20%;
+        height: @icssHeight;
+        overflow: auto;
+        .partDetail {
+          padding: 3px 5px;
+        }
+      }
+    }
+  }
+}
+</style>
+
+

+ 29 - 0
src/components/icss/SymptomTagGroup.vue

@@ -0,0 +1,29 @@
+<template>
+    <div class="symptomTagGroupWrapper">
+      
+    </div>
+</template>
+<script>
+export default {
+    name: "SymptomTagGroup",
+    props: {
+        tagPool: {
+            default: ()=>{return[]},
+            type: Array
+        }
+    },
+    data() {
+        return {
+
+        }
+    }
+}
+</script>
+
+<style lang="less" scoped>
+    .tagPool {
+        width: 300px;
+        height: 500px;
+        border: 1px solid #000;
+    }
+</style>

+ 14 - 0
src/components/icss/TagPool.vue

@@ -0,0 +1,14 @@
+<template>
+  
+</template>
+<script>
+export default {
+  data(){
+
+  }
+}
+</script>
+<style lang="less">
+
+</style>
+

+ 13 - 1
src/less/base.less

@@ -13,7 +13,12 @@ html{
 input, textarea{
 input, textarea{
   outline: none;
   outline: none;
 }
 }
-
+ul {
+  list-style: none;
+}
+i {
+  font-style: normal;
+}
 a {
 a {
   text-decoration: none;
   text-decoration: none;
 }
 }
@@ -27,6 +32,7 @@ a {
   clear: both;
   clear: both;
   overflow: hidden;
   overflow: hidden;
   width: 0;
   width: 0;
+  content: '';
 }
 }
 
 
 .fl {
 .fl {
@@ -36,4 +42,10 @@ a {
 .fr {
 .fr {
   float: right;
   float: right;
 }
 }
+.ellipsis {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
 
 

+ 8 - 0
src/less/common.less

@@ -16,6 +16,8 @@
 
 
 /*朗通后台基本颜色*/
 /*朗通后台基本颜色*/
 @adminBase: #22ccc8;
 @adminBase: #22ccc8;
+@icssBorder: #c0c4cc;
+@icssHeight:150px;
 
 
 /*用户后台基本颜色*/
 /*用户后台基本颜色*/
 @userBase: #1774f0;
 @userBase: #1774f0;
@@ -161,4 +163,10 @@
 
 
 .el-form-item__error {
 .el-form-item__error {
   top: 34px;
   top: 34px;
+}
+
+
+/* 选中状态边框颜色改变 */
+.activeBgc {
+  background-color: #eae7e7;
 }
 }

+ 6 - 2
src/routes.js

@@ -28,7 +28,9 @@ import OrganizationInfo from '@components/admin/OrganizationInfo.vue';//机构
 import AddOrganization from '@components/admin/AddOrganization.vue';//添加机构信息
 import AddOrganization from '@components/admin/AddOrganization.vue';//添加机构信息
 import ModifinedOrga from '@components/admin/ModifinedOrga.vue';//修改机构信息
 import ModifinedOrga from '@components/admin/ModifinedOrga.vue';//修改机构信息
 import ProductDetail from '@components/admin/ProductDetail.vue';
 import ProductDetail from '@components/admin/ProductDetail.vue';
-import Console from '@components/user/Console.vue'
+import Console from '@components/user/Console.vue';
+import LabelGroup from '@components/icss/LabelGroup.vue'
+import NoiseTemplate from '@components/icss/NoiseTemplate.vue';
 
 
 export default [
 export default [
   {
   {
@@ -126,7 +128,9 @@ export default [
       {path: 'LT-GRZX', component: PersonCenter},
       {path: 'LT-GRZX', component: PersonCenter},
       {path: 'LT-CPXGL', component: ProductLinesManage},
       {path: 'LT-CPXGL', component: ProductLinesManage},
       {path: 'LT-CPXGL-TJCPX', component: AddProductLine,name:'editProductLine'},
       {path: 'LT-CPXGL-TJCPX', component: AddProductLine,name:'editProductLine'},
-			{path: 'LT-GRZX/CHANGE',component: ChangePwd}, //个人中心--修改密码
+      {path: 'LT-GRZX/CHANGE',component: ChangePwd}, //个人中心--修改密码
+      {path: 'LT-YXSJWH-BQZWH',component: LabelGroup}, //医学数据维护--标签组维护
+      {path:'LT-YXSJWH-TJBQZ',component:NoiseTemplate},     //医学数据维护--标签组维护--添加标签组
     ]
     ]
   }
   }
 ]
 ]

+ 2 - 1
vue.config.js

@@ -1,6 +1,7 @@
 const path = require('path');
 const path = require('path');
 // const proxy_path = 'http://192.168.2.236:80';
 // 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.241:88';
+const proxy_path = 'http://192.168.2.236:88';
 // const proxy_path = 'http://192.168.3.100:5050';
 // const proxy_path = 'http://192.168.3.100:5050';
 // const proxy_path = 'http://192.168.3.117:5050';//周铁刚
 // const proxy_path = 'http://192.168.3.117:5050';//周铁刚
 // const proxy_path = 'http://192.168.3.115:5050';
 // const proxy_path = 'http://192.168.3.115:5050';