AddMedicalRelation.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <template>
  2. <div>
  3. <crumbs title="医学术语关系-添加" linkTo="/admin/LT-YXSYKWH-YXSYGXWH"></crumbs>
  4. <div class="contents">
  5. <div class="content" @click="closeSearch">
  6. <p>明细</p>
  7. <div class="search">
  8. <span>起始术语搜索:</span>
  9. <el-input size="small" v-model="firstInput" placeholder="输入术语" @input="search(1)"></el-input>
  10. <ul v-if="showFlag==1">
  11. <li v-for="it in searchDatas" :key="it.id" @click.stop="chooseFirst(it)" :title="(it.name+'('+it.type+')').length>10?it.name+'('+it.type+')':''">{{it.name+'('+it.type+')'}}</li>
  12. </ul>
  13. </div>
  14. <div class="search">
  15. <span>终点术语搜索:</span>
  16. <el-input size="small" v-model="endInput" placeholder="输入术语" @input="search(2)"></el-input>
  17. <ul v-if="showFlag==2">
  18. <li v-for="it in searchDatas" :key="it.id" @click.stop="chooseEnd(it)" :title="(it.name+'('+it.type+')').length>10?it.name+'('+it.type+')':''">{{it.name+'('+it.type+')'}}</li>
  19. </ul>
  20. </div>
  21. <table class="deptbox">
  22. <tr>
  23. <td>起始术语<span class="necess">*</span></td>
  24. <td>类型<span class="necess">*</span></td>
  25. <td>关系<span class="necess">*</span></td>
  26. <td>终点术语<span class="necess">*</span></td>
  27. <td>类型<span class="necess">*</span></td>
  28. </tr>
  29. <tr>
  30. <td>
  31. <span>{{data.startName}}</span>
  32. </td>
  33. <td>
  34. <span>{{data.startType}}</span>
  35. </td>
  36. <td>
  37. <el-select v-model="data.relationName" clearable placeholder="请选择" size="mini">
  38. <el-option
  39. v-for="item in relationList"
  40. :key="item.key"
  41. :label="item.name"
  42. :value="item.name">
  43. </el-option>
  44. </el-select>
  45. <!-- <span>{{data.relationName}}</span> -->
  46. </td>
  47. <td>
  48. <span>{{data.endName}}</span>
  49. </td>
  50. <td>
  51. <span>{{data.endType}}</span>
  52. </td>
  53. </tr>
  54. </table>
  55. <div class="btn">
  56. <el-button
  57. type="primary"
  58. :disabled = 'saveDisable'
  59. @click="comfirn"
  60. >建立术语关系</el-button>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. </template>
  66. <script type="text/javascript">
  67. import api from '@api/icss.js';
  68. export default {
  69. name:'AddMedicalRelation',
  70. data(){
  71. return{
  72. data:{
  73. startName:'',
  74. startType:'',
  75. // relationName:'包含于',
  76. relationName:'',
  77. endName:'',
  78. endType:'',
  79. },
  80. relationList:[],
  81. firstInput:'',
  82. endInput:'',
  83. showFlag:0,
  84. searchDatas:[],
  85. saveDisable: false //保存按钮禁止点击
  86. }
  87. },
  88. created(){
  89. // 关系只有“属于”,前端写死 5-16
  90. // this.getRelationList();
  91. // 使用枚举7-12
  92. const list = JSON.parse(localStorage.getItem('knowledgeEnumsData'));
  93. this.relationList = list.lexiconRSTypeEnum;
  94. },
  95. methods:{
  96. /*getRelationList(){//获取关系下拉
  97. const param = {
  98. 'code':'',
  99. 'name':''
  100. }
  101. api.getAllRelationType(param).then((res)=>{
  102. const result = res.data;
  103. if(result.code==0){
  104. this.relationList = result.data;
  105. }else{
  106. this.$message({
  107. message:result.msg || "数据请求失败",
  108. type:'warning'
  109. })
  110. }
  111. })
  112. },*/
  113. comfirn(){
  114. // 添加页面关系已经写死“属于”
  115. if(!this.data.startName.trim() || !this.data.relationName.trim() || !this.data.endName.trim()){
  116. this.$message({
  117. type:'warning',
  118. message:'请填写相关信息'
  119. })
  120. return
  121. }
  122. this.saveDisable = true //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
  123. api.addRelationConcept(this.data).then((res)=>{
  124. const result = res.data;
  125. if(result.code==0){
  126. this.$message({
  127. type:'success',
  128. message:result.msg||'添加成功'
  129. })
  130. this.$router.push({path: 'LT-YXSYKWH-YXSYGXWH'});
  131. }else{
  132. this.$message({
  133. type:'warning',
  134. message:result.msg
  135. })
  136. }
  137. this.saveDisable = false
  138. })
  139. },
  140. search(type){
  141. let item = type==1?this.firstInput:this.endInput;
  142. const params = {
  143. 'isConcept':1,
  144. 'name':item.trim()
  145. }
  146. if(item.trim()){
  147. // this.showFlag = type;
  148. api.searchRelationConcept(params).then((res)=>{
  149. const result = res.data;
  150. if(result.code==0){
  151. this.searchDatas = result.data;
  152. if(result.data&&result.data.length>0){
  153. this.showFlag = type;
  154. }else{
  155. this.showFlag = 0;
  156. }
  157. }else{
  158. this.$message({
  159. type:'warning',
  160. message:result.msg
  161. })
  162. }
  163. })
  164. }
  165. },
  166. chooseFirst(item){
  167. this.data.startName = item.name;
  168. this.data.startType = item.type;
  169. this.firstInput = "";
  170. this.closeSearch();
  171. },
  172. chooseEnd(item){
  173. this.data.endName = item.name;
  174. this.data.endType = item.type;
  175. this.endInput = "";
  176. this.closeSearch();
  177. },
  178. closeSearch(){
  179. this.showFlag = 0;
  180. this.searchDatas = [];
  181. }
  182. }
  183. }
  184. </script>
  185. <style lang="less" scoped>
  186. @import "../../less/admin.less";
  187. .content{
  188. background: #fff;
  189. padding: 20px 20px 30px;
  190. color: #545455;
  191. .search{
  192. width: 185px;
  193. display: inline-block;
  194. margin: 20px 255px 25px 0;
  195. .el-input--small{
  196. margin-top: 8px;
  197. }
  198. position: relative;
  199. ul{
  200. width: 183px;
  201. position: absolute;
  202. top: 63px;
  203. border:1px solid #ccc;
  204. background: #fff;
  205. max-height: 291px;
  206. overflow-y: auto;
  207. li{
  208. border:1px solid #fff;
  209. padding-left: 7px;
  210. height: 27px;
  211. line-height: 27px;
  212. overflow: hidden;
  213. white-space: nowrap;
  214. text-overflow: ellipsis;
  215. cursor: pointer;
  216. }
  217. li:hover{
  218. border-color:#22ccc8;
  219. }
  220. }
  221. }
  222. }
  223. .deptbox{
  224. // width: 100%;
  225. background: #fff;
  226. padding: 20px 10px 30px;
  227. font-size: 14px;
  228. text-align: left;
  229. border-collapse: collapse;
  230. >tr{
  231. height: 30px;
  232. text-align: center;
  233. td{
  234. width: 135px;
  235. border: 1px solid #666;
  236. padding:5px;
  237. }
  238. input{
  239. border:none;
  240. width: 100%;
  241. }
  242. }
  243. }
  244. .btn {
  245. text-align: right;
  246. margin-top: 20px;
  247. }
  248. .necess{
  249. display: inline-block;
  250. vertical-align: middle;
  251. color: red;
  252. margin-left: 2px;
  253. }
  254. </style>