|
@@ -5,7 +5,7 @@
|
|
|
<div class="content">
|
|
|
<h3>添加术语:</h3>
|
|
|
<p class="titl">医学标准术语:</p>
|
|
|
- <table class="deptbox">
|
|
|
+ <table class="deptbox" v-if="id == ''">
|
|
|
<tr>
|
|
|
<td class="ind">序号</td>
|
|
|
<td>标准词<span class="necess">*</span></td>
|
|
@@ -39,8 +39,59 @@
|
|
|
</td>
|
|
|
</tr>
|
|
|
</table>
|
|
|
- <p class="titl">同义词:</p>
|
|
|
- <table class="deptbox">
|
|
|
+ <div class="deptboxChange" v-else>
|
|
|
+ <table class="deptbox deptboxTable">
|
|
|
+ <tr>
|
|
|
+ <td class="ind">序号</td>
|
|
|
+ <td>术语</td>
|
|
|
+ <td>类型</td>
|
|
|
+ <td class="desc">说明</td>
|
|
|
+ <td class="descs">术语性质</td>
|
|
|
+ <td v-if="id">操作</td>
|
|
|
+ </tr>
|
|
|
+ <tr v-for="(item,index) in allwords">
|
|
|
+ <td class="ind">{{index+1}}</td>
|
|
|
+ <td :title="item.name&&item.name.length>9?item.name:''">
|
|
|
+ <!-- 使用原生input,输入限制 -->
|
|
|
+ <!-- <el-input v-model="item.name" placeholder="请输入术语" maxlength="30" size="small" @input.native="handleInput(2,index)"></el-input> -->
|
|
|
+ <!-- <input type="text" v-model="item.name" placeholder="请输入术语" maxlength="30" @input="handleInput(2,index)"> -->
|
|
|
+ <input type="text" v-model="item.name" placeholder="请输入术语" maxlength="30" @blur="handleBlur(2,index,99)">
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ {{data.type}}
|
|
|
+ </td>
|
|
|
+ <td class="desc">
|
|
|
+ <!-- <el-input v-model="item.remark" placeholder="请输入术语说明" maxlength="120" size="small" @input="handleRemark(index,item.name)"></el-input> -->
|
|
|
+ <input v-model="item.remark" placeholder="请输入术语说明" maxlength="120"></input>
|
|
|
+ </td>
|
|
|
+ <td class="desc">
|
|
|
+ <!-- <el-input v-model="item.remark" placeholder="请输入术语说明" maxlength="120" size="small" @input="handleRemark(index,item.name)"></el-input> -->
|
|
|
+ {{item.isConcept == 1?"标准词":"同义词"}}
|
|
|
+ </td>
|
|
|
+ <td v-if="id">
|
|
|
+ <span class="displayColor" v-if="item.isConcept == 1">删除</span>
|
|
|
+ <span @click="deleLine(index,55)" class="delete" v-else>删除</span>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr @click="addSpan(55)">
|
|
|
+ <td colspan="6" class="addSpan">+</td>
|
|
|
+ </tr>
|
|
|
+ </table>
|
|
|
+ <div class="actionDo">
|
|
|
+ <div class="btnWrap">
|
|
|
+ <el-button type="primary" size="mini" v-if="show" @click="comfirn(14)">确认修改</el-button>
|
|
|
+ <el-button plain size="mini" v-if="show" @click="toggleShow(1)">放弃修改</el-button>
|
|
|
+ <el-button plain size="mini" @click="toggleShow(2)" v-if="!show">修改标准词</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="radioWrap" v-if="show">
|
|
|
+ <el-radio-group v-model="radioVal" size="mini">
|
|
|
+ <el-radio v-for="(item,index) in allwords" :label="index" :disabled="index == 0">选为标准词</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <p class="titl" v-if="id == ''">同义词:</p>
|
|
|
+ <table class="deptbox" v-if="id == ''">
|
|
|
<tr>
|
|
|
<td class="ind">序号</td>
|
|
|
<td>术语</td>
|
|
@@ -57,14 +108,6 @@
|
|
|
<input type="text" v-model="item.name" placeholder="请输入术语" maxlength="30" @blur="handleBlur(2,index)">
|
|
|
</td>
|
|
|
<td>
|
|
|
- <!-- <el-select v-model="item.type" clearable placeholder="请选择">
|
|
|
- <el-option
|
|
|
- v-for="item in data.typeList"
|
|
|
- :key="item.key"
|
|
|
- :label="item.name"
|
|
|
- :value="item.key">
|
|
|
- </el-option>
|
|
|
- </el-select> -->
|
|
|
{{data.type}}
|
|
|
</td>
|
|
|
<td class="desc">
|
|
@@ -102,48 +145,65 @@ import api from '@api/icss.js';
|
|
|
remark:'',
|
|
|
isConcept:1
|
|
|
},
|
|
|
+ radioVal:'',
|
|
|
typeList:[],
|
|
|
- id:null,
|
|
|
- synonymous:[//同义词
|
|
|
- {
|
|
|
- name:'',
|
|
|
- remark:'',
|
|
|
- isConcept:0
|
|
|
- },
|
|
|
- {
|
|
|
- name:'',
|
|
|
- remark:'',
|
|
|
- isConcept:0
|
|
|
- },
|
|
|
- {
|
|
|
- name:'',
|
|
|
- remark:'',
|
|
|
- isConcept:0
|
|
|
- },
|
|
|
- ],
|
|
|
+ id:'',
|
|
|
+ synonymous:[],//同义词
|
|
|
+ singleword:[],
|
|
|
+ allwords:[],//标准词和同义词
|
|
|
colspan:4,
|
|
|
+ colspans:5,
|
|
|
currentPage:1,
|
|
|
- pageSize:10
|
|
|
+ pageSize:10,
|
|
|
+ show:false
|
|
|
}
|
|
|
},
|
|
|
created(){
|
|
|
this.getTypeList();
|
|
|
- const id = this.$route.params.id;
|
|
|
+ const id = this.$route.params.id || '';
|
|
|
if(id){
|
|
|
this.minTitle = '医学术语命名维护-修改';
|
|
|
this.id = id;
|
|
|
this.colspan = 5;
|
|
|
- this.getDetail();
|
|
|
+ this.getDetail(id);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch:{
|
|
|
+ radioVal(newVal,preVal){
|
|
|
+ if(newVal && newVal != preVal){
|
|
|
+ this.changeState(newVal);
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
methods:{
|
|
|
- getDetail(){
|
|
|
- if(this.id){
|
|
|
- api.getMedicalDetail({'conceptId':this.id}).then((res)=>{
|
|
|
+ changeState(val){
|
|
|
+ let tmpAllwords = this.synonymous.slice(0);
|
|
|
+ for(let i = 0;i < tmpAllwords.length;i++){
|
|
|
+ if(i+1 == val){
|
|
|
+ tmpAllwords[i].isConcept = 1
|
|
|
+ tmpAllwords[i].type = this.data.type
|
|
|
+ }else{
|
|
|
+ tmpAllwords[i].isConcept = 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ toggleShow(num){
|
|
|
+ let tmpShow = this.show
|
|
|
+ this.show = !tmpShow
|
|
|
+ if(num == 1){
|
|
|
+ this.changeState(-1)
|
|
|
+ this.radioVal = ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getDetail(ids){
|
|
|
+ if(ids){
|
|
|
+ api.getMedicalDetail({'conceptId':ids}).then((res)=>{
|
|
|
const result = res.data;
|
|
|
if(result.code == 0){
|
|
|
this.data = result.data.libName[0];
|
|
|
+ this.singleword = result.data.libName;
|
|
|
this.synonymous = result.data.otherNames;
|
|
|
+ this.allwords = (result.data.libName).concat(result.data.otherNames);
|
|
|
}else{
|
|
|
this.$message({
|
|
|
message:result.msg,
|
|
@@ -179,7 +239,7 @@ import api from '@api/icss.js';
|
|
|
this.synonymous[index].name = this.synonymous[index].name.replace(/[^%0-9a-zA-Z\u4e00-\u9fa5]/g,'');
|
|
|
}
|
|
|
},*/
|
|
|
- handleBlur(type,index){
|
|
|
+ handleBlur(type,index,flg){
|
|
|
// 不能为纯数字、纯字符、纯数字加字符 4-18
|
|
|
const pattern = /[^~@#$%^&*_\-+=,,.。::"“??”;;、!!0-9]/g;
|
|
|
if(type==1){//标准词输入
|
|
@@ -191,12 +251,22 @@ import api from '@api/icss.js';
|
|
|
this.data.name = '';
|
|
|
}
|
|
|
}else{
|
|
|
- if(!pattern.test(this.synonymous[index].name)){
|
|
|
- this.$message({
|
|
|
- message:'无法输入纯数字或者纯字符,请输入正确数据!',
|
|
|
- type:'warning'
|
|
|
- });
|
|
|
- this.synonymous[index].name = '';
|
|
|
+ if(flg == 99){
|
|
|
+ if(!pattern.test(this.synonymous[index-1].name)){
|
|
|
+ this.$message({
|
|
|
+ message:'无法输入纯数字或者纯字符,请输入正确数据!',
|
|
|
+ type:'warning'
|
|
|
+ });
|
|
|
+ this.synonymous[index-1].name = '';
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(!pattern.test(this.synonymous[index].name)){
|
|
|
+ this.$message({
|
|
|
+ message:'无法输入纯数字或者纯字符,请输入正确数据!',
|
|
|
+ type:'warning'
|
|
|
+ });
|
|
|
+ this.synonymous[index].name = '';
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
},
|
|
@@ -228,13 +298,18 @@ import api from '@api/icss.js';
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
- addSpan(){
|
|
|
+ addSpan(type){
|
|
|
let singleSpan = {
|
|
|
name:'',
|
|
|
remark:'',
|
|
|
isConcept:0
|
|
|
}
|
|
|
- this.synonymous.push(singleSpan);
|
|
|
+ if(type == 55){
|
|
|
+ this.allwords.push(singleSpan);
|
|
|
+ this.synonymous.push(singleSpan);
|
|
|
+ }else{
|
|
|
+ this.synonymous.push(singleSpan);
|
|
|
+ }
|
|
|
},
|
|
|
warning(msg,type){
|
|
|
this.$message({
|
|
@@ -251,11 +326,16 @@ import api from '@api/icss.js';
|
|
|
resolve();
|
|
|
}).catch(() => {});
|
|
|
},
|
|
|
- deleLine(index){
|
|
|
+ deleLine(index,type){
|
|
|
// 只在界面删除数据,待点确认 后参才真正删除
|
|
|
- this.synonymous.splice(index,1);
|
|
|
+ if(type == 55){
|
|
|
+ this.synonymous.splice(index-1,1);
|
|
|
+ this.allwords.splice(index,1);
|
|
|
+ }else{
|
|
|
+ this.synonymous.splice(index,1);
|
|
|
+ }
|
|
|
},
|
|
|
- comfirn(){
|
|
|
+ comfirn(flg){
|
|
|
if(!this.data.name){
|
|
|
this.warning('请输入标准词');
|
|
|
return
|
|
@@ -268,6 +348,19 @@ import api from '@api/icss.js';
|
|
|
let realData = this.synonymous.filter((item)=>{
|
|
|
return item.name;
|
|
|
})
|
|
|
+ if(this.id){
|
|
|
+ let tmpArr = []
|
|
|
+ for(let k = 0;k < realData.length;k++){
|
|
|
+ if(realData[k].isConcept == 1){
|
|
|
+ let tmpdata = JSON.parse(JSON.stringify(this.data))
|
|
|
+ tmpArr.push(realData[k])
|
|
|
+ realData.splice(k,1)
|
|
|
+ tmpdata.isConcept = 0
|
|
|
+ realData.push(tmpdata)
|
|
|
+ this.data = tmpArr[0]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
let detailList = [];
|
|
|
detailList[0] = this.data;
|
|
|
for(let i=0; i<realData.length; i++){
|
|
@@ -277,13 +370,20 @@ import api from '@api/icss.js';
|
|
|
const params = {
|
|
|
'name':this.data.name,
|
|
|
'type':this.data.type,
|
|
|
- 'detailList':detailList
|
|
|
+ 'detailList':detailList,
|
|
|
+ 'conceptId':this.id
|
|
|
}
|
|
|
api.addMedicalName(params).then((res)=>{
|
|
|
const result = res.data;
|
|
|
if(result.code==0){
|
|
|
this.warning(res.data.msg||'操作成功','success');
|
|
|
- this.$router.push({name:'MedicalName'});
|
|
|
+ if(flg == 14){
|
|
|
+ this.getDetail(this.id)
|
|
|
+ this.radioVal = ''
|
|
|
+ this.show = false
|
|
|
+ }else{
|
|
|
+ this.$router.push({name:'MedicalName'});
|
|
|
+ }
|
|
|
}else{
|
|
|
this.warning(res.data.msg);
|
|
|
}
|
|
@@ -294,6 +394,20 @@ import api from '@api/icss.js';
|
|
|
</script>
|
|
|
<style lang="less" scoped>
|
|
|
@import "../../less/admin.less";
|
|
|
+ /deep/ .radioWrap .el-radio {
|
|
|
+ display: block;
|
|
|
+ height: 41px;
|
|
|
+ line-height: 41px;
|
|
|
+ text-align: right;
|
|
|
+ margin-left: 0;
|
|
|
+ }
|
|
|
+ .displayColor {
|
|
|
+ color: #ccc;
|
|
|
+ cursor:not-allowed;
|
|
|
+ }
|
|
|
+ .delete {
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
.content{
|
|
|
background: #fff;
|
|
|
padding: 20px 20px 30px;
|
|
@@ -320,9 +434,10 @@ import api from '@api/icss.js';
|
|
|
input{
|
|
|
border:none;
|
|
|
border: 1px solid #ccc;
|
|
|
- width: 89%;
|
|
|
+ width: 100%;
|
|
|
height: 30px;
|
|
|
padding: 0 7px;
|
|
|
+ box-sizing: border-box;
|
|
|
border-radius: 4px;
|
|
|
}
|
|
|
.ind{
|
|
@@ -331,12 +446,31 @@ import api from '@api/icss.js';
|
|
|
.desc{
|
|
|
width: 280px;
|
|
|
}
|
|
|
+ .descs{
|
|
|
+ width: 50px;
|
|
|
+ }
|
|
|
}
|
|
|
.addSpan{
|
|
|
text-align: center;
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
}
|
|
|
+ .deptboxTable {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ .deptboxChange {
|
|
|
+ padding-right: 210px;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+ .actionDo {
|
|
|
+ width: 200px;
|
|
|
+ position: absolute;
|
|
|
+ top: 1px;
|
|
|
+ right: 0;
|
|
|
+ .btnWrap {
|
|
|
+ height: 30px;
|
|
|
+ }
|
|
|
+ }
|
|
|
.btn {
|
|
|
text-align: right;
|
|
|
margin-top: 20px;
|