AddMedicinePrompt.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <template>
  2. <div class="NoiseTemplateWrapper TemplateWrapper">
  3. <crumbs
  4. :title="'医学术语静态知识维护-'+title"
  5. class="topBack"
  6. :param="$route.params"
  7. linkTo="MedicinePrompt"
  8. ></crumbs>
  9. <div class="info-container">
  10. <el-form :rules="rules"
  11. :model="form"
  12. label-width="160px"
  13. ref="groups">
  14. <el-form-item v-if="!isEdit" label="选择标准术语:" prop="selectedTerm">
  15. <el-select v-model="form.selectedTerm"
  16. filterable
  17. remote
  18. clearable
  19. :loading="showDrop"
  20. loading-text="加载中..."
  21. @change="changeWord"
  22. value-key="conceptId"
  23. ref="termName"
  24. placeholder="搜索"
  25. :remote-method="searchTerms">
  26. <el-option v-for="term in terms" :key="term.conceptId" :label="term.nameType" :value="term" ></el-option>
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item label="已选择标准术语:" label-width="160px">
  30. {{form.selectedTermName}}
  31. </el-form-item>
  32. <p class="line"></p>
  33. <InfoParagraph v-for="(f,i) in form.prags"
  34. :data="f"
  35. :index="i"
  36. :total="form.prags.length"
  37. :isEdit = "isEdit"
  38. ref="subForm"
  39. @add="addParagraph(i)"
  40. @del="delParagraph"
  41. @reOrder="reOrder"></InfoParagraph>
  42. </el-form>
  43. <div class="btn">
  44. <el-button
  45. type="primary"
  46. :disabled = 'saveDisable'
  47. @click="submitForm"
  48. >确 定</el-button>
  49. </div>
  50. </div>
  51. </div>
  52. </template>
  53. <script>
  54. /**
  55. *
  56. */
  57. import api from '@api/icss.js';
  58. import InfoParagraph from './MedicineInfoPg';
  59. import config from '@api/config';
  60. export default {
  61. name: 'AddMedicinePrompt',
  62. components: {
  63. InfoParagraph
  64. },
  65. data() {
  66. return {
  67. isEdit:false,
  68. isCopy:false,
  69. title:'添加',
  70. termTypes:[],
  71. terms:[], //术语列表
  72. editData:{
  73. selectedTerm:'',
  74. prags:[]
  75. },
  76. form:{
  77. conceptId:'', //术语id
  78. isTip:0, //是否要覆盖,0不覆盖,1覆盖
  79. selectedTerm:'', //术语标签
  80. termType:'',
  81. selectedTermName:'',
  82. selectedTermType:'',
  83. prags:[{ //单个段落相关
  84. title:'',
  85. content:'',
  86. isReason:0,
  87. orderNo:0,
  88. position:[],
  89. text:''}]
  90. },
  91. rules: {
  92. selectedTerm: [
  93. { required: true, message: '请选择术语标签', trigger: 'change' }
  94. ]
  95. },
  96. saveDisable: false, //保存按钮禁止点击
  97. showDrop:false, //下拉框显示文字bug1774
  98. }
  99. },
  100. /*watch:{
  101. 'form.selectedTerm':function(newVal){
  102. const name = newVal.nameType;console.log(newVal)
  103. this.form.selectedTermName = name;
  104. this.form.conceptId = newVal.conceptId;
  105. }
  106. },*/
  107. created:function(){
  108. const {isEdit,data,isCopy} = this.$route.params;
  109. if(isEdit||isCopy){
  110. this.isEdit = isEdit;
  111. this.isCopy = isCopy;
  112. this.title = isEdit?'编辑':(isCopy?'复制':'添加');
  113. this.changeWord(data);
  114. //this.form.selectedTerm = data;
  115. //this.form.selectedTermName = data.libName;
  116. //this.form.conceptId = data.conceptId;
  117. api.getTremList({conceptId:data.conceptId}).then((res) => {
  118. if (res.data.code == '0') {
  119. const data = res.data.data;
  120. this.form.prags=data&&data.map((it)=>{
  121. return {
  122. title:it.title,
  123. position:this.mapStringToNum(it.position),
  124. content:it.content.replace(/{imageUrlPrefix}/g,config.imgHost),
  125. isReason:it.isReason,
  126. text:it.text,
  127. disabled:true};
  128. });
  129. }
  130. }).catch((error) => {
  131. console.log(error);
  132. });
  133. }
  134. },
  135. methods: {
  136. changeWord(newVal){
  137. const name = newVal.nameType;
  138. this.form.selectedTermName = name;
  139. this.form.selectedTerm=name;
  140. this.form.conceptId = newVal.conceptId;
  141. },
  142. reOrder(isUp,i){
  143. let temp = {},it={};
  144. if(isUp===1){
  145. if(i===0){
  146. this.warning('已经是第一个,不能再升啦!');
  147. return ;
  148. }
  149. temp = Object.assign(this.form.prags[i-1]);
  150. temp.orderNo = temp.orderNo+1;
  151. it = Object.assign(this.form.prags[i]);
  152. it.orderNo = it.orderNo-1;
  153. this.form.prags.splice(i-1,2,it,temp);
  154. }else{
  155. if(i===this.form.prags.length-1){
  156. this.warning('已经是最后一个,不能再降啦!');
  157. return ;
  158. }
  159. temp = Object.assign(this.form.prags[i+1]);
  160. temp.orderNo = temp.orderNo-1;
  161. it = Object.assign(this.form.prags[i]);
  162. it.orderNo = it.orderNo+1;
  163. this.form.prags.splice(i,2,temp,it);
  164. }
  165. },
  166. addParagraph(i){
  167. this.form.prags.splice(i+1,0,{
  168. title:'',
  169. content:'',
  170. isReason:0,
  171. orderNo:i+1,
  172. position:[],
  173. text:''});
  174. /*this.form.prags.push({
  175. title:'',
  176. content:'',
  177. isReason:0,
  178. orderNo:this.form.prags.length,
  179. position:[],
  180. text:''});*/
  181. },
  182. delParagraph(i){
  183. if(this.form.prags.length==1){
  184. this.warning('只剩一个段落,不能再删啦!');
  185. return;
  186. }
  187. this.showConfirmDialog('确定要删除该段落?', () => {
  188. this.form.prags.splice(i,1);
  189. });
  190. },
  191. back() { this.$router.go(-1) },
  192. searchTerms(query){
  193. if(!query.trim()){
  194. return;
  195. }
  196. //搜索术语列表
  197. this.showDrop = true;
  198. api.getAllConcept({name:query.trim()}).then((res) =>{
  199. this.showDrop = false;
  200. if(res.data.code === '0') {
  201. this.terms = res.data.data;
  202. }else{
  203. this.warning("数据获取失败");
  204. }
  205. })
  206. },
  207. mapStringToNum(str){
  208. return str.split(",").map((it)=>{
  209. return +it;
  210. })
  211. },
  212. submitForm() {
  213. //验证外层表单
  214. let goOn=true,it=null;
  215. this.$refs.groups.validate((valid) =>{
  216. if(!valid){
  217. goOn = false;
  218. return false;
  219. }
  220. });
  221. //验证段落表单
  222. for(let i=0;i<this.$refs.subForm.length;i++){
  223. it=this.$refs.subForm[i];
  224. it.$refs.form.validate((valid) =>{
  225. if(!valid){
  226. goOn = false;
  227. }
  228. });
  229. };
  230. if(!goOn){
  231. return;
  232. }
  233. //通过必填验证,提交保存
  234. const item=this.form.prags;
  235. const param =item.map((it)=>{
  236. return Object.assign({},it,{
  237. position:typeof it.position=='string'?it.position:it.position.join(","),
  238. conceptId:this.form.conceptId,
  239. content:it.content.replace(new RegExp(config.imgHost,'g'),'{imageUrlPrefix}')});
  240. });
  241. this.showSaveDialog(param,'是否保存该静态知识?');
  242. },
  243. showSaveDialog(param,msg) {
  244. this.showConfirmDialog(msg, () => {
  245. this.saveDisable = true //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
  246. api.saveTermPrompts(param).then((res) => {
  247. if (res.data.code === '0') {
  248. this.warning(res.data.msg || '保存成功', 'success');
  249. //返回带搜索条件的首页
  250. this.$router.push({name:'MedicinePrompt',params:Object.assign({},this.$route.params,{currentPage:1})});
  251. } else {
  252. this.warning(res.data.msg)
  253. }
  254. this.saveDisable = false
  255. }).catch((err) => {
  256. this.warning(err);
  257. })
  258. });
  259. },
  260. showConfirmDialog(msg, resolve) {
  261. this.$confirm(msg, '提示', {
  262. confirmButtonText: '确定',
  263. cancelButtonText: '取消',
  264. cancelButtonClass:'cancel',
  265. type: 'warning'
  266. }).then(() => {
  267. resolve();
  268. }).catch(() => {});
  269. },
  270. warning(msg, type) {
  271. this.$message({
  272. showClose: true,
  273. message: msg,
  274. type: type || 'warning'
  275. })
  276. },
  277. }
  278. }
  279. </script>
  280. <style lang="less">
  281. @import "../../less/common.less";
  282. .topBack{
  283. top: 0;
  284. }
  285. .info-container{
  286. background: #fff;
  287. padding: 20px;
  288. margin: 70px 20px -20px 20px;
  289. .el-input__inner{
  290. width: 200px;
  291. }
  292. .el-form-item__label{
  293. text-align: left;
  294. }
  295. .add-prg .el-form-item{
  296. margin-bottom: 20px;
  297. }
  298. }
  299. .cancel span{
  300. color: #22ccc8;
  301. }
  302. .line{
  303. border-top:1px #dcdfe6 solid;
  304. margin-bottom: 25px;
  305. }
  306. .NoiseTemplateWrapper .info-container .el-input__inner{
  307. width: 250px;
  308. }
  309. .NoiseTemplateWrapper .el-select .el-input .el-icon-circle-close{
  310. display: inherit!important;
  311. }
  312. </style>