AddMedicinePrompt.vue 9.6 KB

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